verdaccio 5.8.0 β 5.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +40 -0
- package/README.md +13 -5
- package/build/api/web/html/renderHTML.js +26 -10
- package/build/lib/auth-utils.js +2 -2
- package/build/lib/auth.js +2 -2
- package/conf/default.yaml +112 -16
- package/conf/docker.yaml +113 -18
- package/package.json +20 -20
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [5.10.1](https://github.com/verdaccio/verdaccio/compare/v5.10.0...v5.10.1) (2022-05-05)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* duplicated groups on use jwt tokens ([#3151](https://github.com/verdaccio/verdaccio/issues/3151)) ([51803c3](https://github.com/verdaccio/verdaccio/commit/51803c34776ca1e868399ede4f17a087c9a39bc5))
|
|
11
|
+
|
|
12
|
+
## [5.10.0](https://github.com/verdaccio/verdaccio/compare/v5.9.0...v5.10.0) (2022-04-26)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* **deps:** update dependency @verdaccio/ui-theme to v6.0.0-6-next.24 (5.x) ([#3130](https://github.com/verdaccio/verdaccio/issues/3130)) ([da01a14](https://github.com/verdaccio/verdaccio/commit/da01a14e70de722aab0c99bb81997886fae35727))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **deps:** update dependency @verdaccio/local-storage to v10.2.1 ([#3118](https://github.com/verdaccio/verdaccio/issues/3118)) ([0f9d6ec](https://github.com/verdaccio/verdaccio/commit/0f9d6eca34476505df95e67acd2f77fbce3a1c96))
|
|
23
|
+
* **deps:** update dependency @verdaccio/readme to v10.3.3 ([#3119](https://github.com/verdaccio/verdaccio/issues/3119)) ([78b9c8b](https://github.com/verdaccio/verdaccio/commit/78b9c8b33ee1c1894d654b69b8c88631c5139cc9))
|
|
24
|
+
* **deps:** update dependency body-parser to v1.20.0 ([#3123](https://github.com/verdaccio/verdaccio/issues/3123)) ([954886d](https://github.com/verdaccio/verdaccio/commit/954886d2db32088ea246dd3b5748c25ac56c30b0))
|
|
25
|
+
* **deps:** update dependency dayjs to v1.11.1 ([#3131](https://github.com/verdaccio/verdaccio/issues/3131)) ([27035f9](https://github.com/verdaccio/verdaccio/commit/27035f9403261b342d9d3a3826e6b92c45de1954))
|
|
26
|
+
* **deps:** update dependency lru-cache to v7 ([#3124](https://github.com/verdaccio/verdaccio/issues/3124)) ([7ceaa17](https://github.com/verdaccio/verdaccio/commit/7ceaa1799c80a6cde23255affbfe076f6e44cb9d))
|
|
27
|
+
* **deps:** update dependency marked to v4.0.14 ([#3120](https://github.com/verdaccio/verdaccio/issues/3120)) ([8a60050](https://github.com/verdaccio/verdaccio/commit/8a60050b8b4594aae0d3c942b23aaf33f857ebcf))
|
|
28
|
+
* **deps:** update dependency semver to v7.3.7 ([#3121](https://github.com/verdaccio/verdaccio/issues/3121)) ([157d5c5](https://github.com/verdaccio/verdaccio/commit/157d5c5ce415d81500bdc71435ccf30b19631aef))
|
|
29
|
+
* **deps:** update dependency verdaccio-audit to v10.2.1 ([#3122](https://github.com/verdaccio/verdaccio/issues/3122)) ([decd7f1](https://github.com/verdaccio/verdaccio/commit/decd7f1e5cfc48bbf159f1ac42ecaa7861e6a5f9))
|
|
30
|
+
|
|
31
|
+
## [5.9.0](https://github.com/verdaccio/verdaccio/compare/v5.8.0...v5.9.0) (2022-04-12)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
### Features
|
|
35
|
+
|
|
36
|
+
* **web:** add a config item to webοΌlet the developer can select whether enable the html cache ([#3110](https://github.com/verdaccio/verdaccio/issues/3110)) ([b30ba81](https://github.com/verdaccio/verdaccio/commit/b30ba81b86d3fa11a18bdb32a7adf162f16794e0))
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
### Bug Fixes
|
|
40
|
+
|
|
41
|
+
* **deps:** update dependency @verdaccio/ui-theme to v6.0.0-6-next.23 ([#3106](https://github.com/verdaccio/verdaccio/issues/3106)) ([b963f7d](https://github.com/verdaccio/verdaccio/commit/b963f7db2a2273983c0d5b4792a84601be732823))
|
|
42
|
+
* **deps:** update dependency body-parser to v1.19.2 ([#3087](https://github.com/verdaccio/verdaccio/issues/3087)) ([8cee85f](https://github.com/verdaccio/verdaccio/commit/8cee85f811effe5ba95458f18381beddaa2850dc))
|
|
43
|
+
* **deps:** update dependency dayjs to v1.11.0 ([#3094](https://github.com/verdaccio/verdaccio/issues/3094)) ([4cc1877](https://github.com/verdaccio/verdaccio/commit/4cc18773b73e387ef362de6438965ca198114bcb))
|
|
44
|
+
|
|
5
45
|
## [5.8.0](https://github.com/verdaccio/verdaccio/compare/v5.7.1...v5.8.0) (2022-03-12)
|
|
6
46
|
|
|
7
47
|
|
package/README.md
CHANGED
|
@@ -39,9 +39,9 @@ Are you still using **Verdaccio 4**?. Check the [migration guide](https://verdac
|
|
|
39
39
|
|
|
40
40
|
## Donations
|
|
41
41
|
|
|
42
|
-
Verdaccio is run by **volunteers**; nobody is working full-time on it. If you find this project to be useful and would like to support its development
|
|
42
|
+
Verdaccio is run by **volunteers**; nobody is working full-time on it. If you find this project to be useful and would like to support its development and maintenance.
|
|
43
43
|
|
|
44
|
-
**[
|
|
44
|
+
You can donate **[GitHub Sponsors](https://github.com/sponsors/verdaccio)** or **[Open Collective](https://opencollective.com/verdaccio)** π΅ππ» starting from _$1/month_ or just one single contribution.
|
|
45
45
|
|
|
46
46
|
## What does Verdaccio do for me?
|
|
47
47
|
|
|
@@ -67,14 +67,22 @@ If you want to use a modified version of some 3rd-party package (for example, yo
|
|
|
67
67
|
Verdaccio has proved to be a lightweight registry that can be
|
|
68
68
|
booted in a couple of seconds, fast enough for any CI. Many open source projects use verdaccio for end to end testing, to mention some examples, **create-react-app**, **mozilla neutrino**, **pnpm**, **storybook**, **alfresco** or **eclipse theia**. You can read more in dedicated article to E2E in our blog.
|
|
69
69
|
|
|
70
|
-
##
|
|
70
|
+
## Next talks
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
- [**Deep dive into Verdaccio, a lightweight Node.js registry - June 29th 2022**](https://www.nodetlv.com/)
|
|
73
|
+
- [**How to improve your workflows with Verdaccio, your private Node.js registry - Global Summit for Node.js - May 18th 2022**](https://events.geekle.us/nodejs/)
|
|
73
74
|
|
|
74
|
-
|
|
75
|
+
## The latest talk
|
|
76
|
+
|
|
77
|
+
<div>
|
|
78
|
+
<a href="https://portal.gitnation.org/contents/five-ways-of-taking-advantage-of-verdaccio-your-private-and-proxy-nodejs-registry">
|
|
79
|
+
<img src="https://cdn.verdaccio.dev/readme/nodejscongress2022.jpg" alt="nodejs" width="300"/>
|
|
80
|
+
</a>
|
|
81
|
+
</div>
|
|
75
82
|
|
|
76
83
|
You might want to check out as well our previous talks:
|
|
77
84
|
|
|
85
|
+
- [Using Docker and Verdaccio to make Integration Testing Easy - Docker All Hands #4 December - **Juan Picado** - 2021](https://www.youtube.com/watch?v=zRI0skF1f8I)
|
|
78
86
|
- [**Juan Picado** β Testing the integrity of React components by publishing in a private registry](https://www.youtube.com/watch?v=bRKZbrlQqLY&t=16s&ab_channel=ReactFinland)
|
|
79
87
|
- [BeerJS Cba Meetup No. 53 May 2021 - **Juan Picado** React Finland - 2021](https://www.youtube.com/watch?v=6SyjqBmS49Y&ab_channel=BeerJSCba)
|
|
80
88
|
- [Node.js Dependency Confusion Attacks - April 2021 - **Juan Picado**](https://www.youtube.com/watch?v=qTRADSp3Hpo)
|
|
@@ -68,7 +68,7 @@ function resolveLogo(config, req) {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
function renderHTML(config, manifest, manifestFiles, req, res) {
|
|
71
|
-
var _config$i18n$web, _config$i18n, _config$web$darkMode, _config$
|
|
71
|
+
var _config$i18n$web, _config$i18n, _config$web6, _config$web$darkMode, _config$web7, _config$web$title, _config$web8, _config$web$scope, _config$web9, _config$web$pkgManage, _config$web10, _validatePrimaryColor, _config$web11;
|
|
72
72
|
|
|
73
73
|
const {
|
|
74
74
|
url_prefix
|
|
@@ -76,24 +76,37 @@ function renderHTML(config, manifest, manifestFiles, req, res) {
|
|
|
76
76
|
const base = (0, _utils.getPublicUrl)(config === null || config === void 0 ? void 0 : config.url_prefix, req);
|
|
77
77
|
const basename = new _url.URL(base).pathname;
|
|
78
78
|
const language = (_config$i18n$web = config === null || config === void 0 ? void 0 : (_config$i18n = config.i18n) === null || _config$i18n === void 0 ? void 0 : _config$i18n.web) !== null && _config$i18n$web !== void 0 ? _config$i18n$web : DEFAULT_LANGUAGE;
|
|
79
|
-
const
|
|
80
|
-
const
|
|
81
|
-
const
|
|
79
|
+
const needHtmlCache = [undefined, null].includes(config === null || config === void 0 ? void 0 : (_config$web6 = config.web) === null || _config$web6 === void 0 ? void 0 : _config$web6.html_cache) ? true : config.web.html_cache;
|
|
80
|
+
const darkMode = (_config$web$darkMode = config === null || config === void 0 ? void 0 : (_config$web7 = config.web) === null || _config$web7 === void 0 ? void 0 : _config$web7.darkMode) !== null && _config$web$darkMode !== void 0 ? _config$web$darkMode : false;
|
|
81
|
+
const title = (_config$web$title = config === null || config === void 0 ? void 0 : (_config$web8 = config.web) === null || _config$web8 === void 0 ? void 0 : _config$web8.title) !== null && _config$web$title !== void 0 ? _config$web$title : _constants.WEB_TITLE;
|
|
82
|
+
const scope = (_config$web$scope = config === null || config === void 0 ? void 0 : (_config$web9 = config.web) === null || _config$web9 === void 0 ? void 0 : _config$web9.scope) !== null && _config$web$scope !== void 0 ? _config$web$scope : '';
|
|
82
83
|
const login = (0, _utils.hasLogin)(config);
|
|
83
84
|
const logoURI = resolveLogo(config, req);
|
|
84
|
-
const pkgManagers = (_config$web$pkgManage = config === null || config === void 0 ? void 0 : (_config$
|
|
85
|
+
const pkgManagers = (_config$web$pkgManage = config === null || config === void 0 ? void 0 : (_config$web10 = config.web) === null || _config$web10 === void 0 ? void 0 : _config$web10.pkgManagers) !== null && _config$web$pkgManage !== void 0 ? _config$web$pkgManage : ['yarn', 'pnpm', 'npm'];
|
|
85
86
|
const version = pkgJSON.version;
|
|
86
|
-
const primaryColor = (_validatePrimaryColor = validatePrimaryColor(config === null || config === void 0 ? void 0 : (_config$
|
|
87
|
+
const primaryColor = (_validatePrimaryColor = validatePrimaryColor(config === null || config === void 0 ? void 0 : (_config$web11 = config.web) === null || _config$web11 === void 0 ? void 0 : _config$web11.primary_color)) !== null && _validatePrimaryColor !== void 0 ? _validatePrimaryColor : '#4b5e40';
|
|
87
88
|
const {
|
|
88
89
|
scriptsBodyAfter,
|
|
89
90
|
metaScripts,
|
|
90
|
-
scriptsbodyBefore
|
|
91
|
+
scriptsbodyBefore,
|
|
92
|
+
showInfo,
|
|
93
|
+
showSettings,
|
|
94
|
+
showThemeSwitch,
|
|
95
|
+
showFooter,
|
|
96
|
+
showSearch,
|
|
97
|
+
showDownloadTarball
|
|
91
98
|
} = Object.assign({}, {
|
|
92
99
|
scriptsBodyAfter: [],
|
|
93
100
|
bodyBefore: [],
|
|
94
101
|
metaScripts: []
|
|
95
102
|
}, config === null || config === void 0 ? void 0 : config.web);
|
|
96
103
|
const options = {
|
|
104
|
+
showInfo,
|
|
105
|
+
showSettings,
|
|
106
|
+
showThemeSwitch,
|
|
107
|
+
showFooter,
|
|
108
|
+
showSearch,
|
|
109
|
+
showDownloadTarball,
|
|
97
110
|
darkMode,
|
|
98
111
|
url_prefix,
|
|
99
112
|
basename,
|
|
@@ -123,8 +136,11 @@ function renderHTML(config, manifest, manifestFiles, req, res) {
|
|
|
123
136
|
scriptsbodyBefore
|
|
124
137
|
}, manifest);
|
|
125
138
|
debug('template :: %o', webPage);
|
|
126
|
-
|
|
127
|
-
|
|
139
|
+
|
|
140
|
+
if (needHtmlCache) {
|
|
141
|
+
cache.set('template', webPage);
|
|
142
|
+
debug('set template cache');
|
|
143
|
+
}
|
|
128
144
|
} else {
|
|
129
145
|
debug('reuse template cache');
|
|
130
146
|
}
|
|
@@ -136,4 +152,4 @@ function renderHTML(config, manifest, manifestFiles, req, res) {
|
|
|
136
152
|
res.send(webPage);
|
|
137
153
|
debug('render web');
|
|
138
154
|
}
|
|
139
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd2ViL2h0bWwvcmVuZGVySFRNTC50cyJdLCJuYW1lcyI6WyJwa2dKU09OIiwicmVxdWlyZSIsIkRFRkFVTFRfTEFOR1VBR0UiLCJjYWNoZSIsIkxSVSIsIm1heCIsIm1heEFnZSIsImRlYnVnIiwiZGVmYXVsdE1hbmlmZXN0RmlsZXMiLCJqcyIsImljbyIsInZhbGlkYXRlUHJpbWFyeUNvbG9yIiwicHJpbWFyeUNvbG9yIiwiaXNIZXgiLCJ0ZXN0IiwicmVzb2x2ZUxvZ28iLCJjb25maWciLCJyZXEiLCJpc0xvY2FsRmlsZSIsIndlYiIsImxvZ28iLCJ1cmxfcHJlZml4IiwicGF0aCIsImJhc2VuYW1lIiwicmVuZGVySFRNTCIsIm1hbmlmZXN0IiwibWFuaWZlc3RGaWxlcyIsInJlcyIsImJhc2UiLCJVUkwiLCJwYXRobmFtZSIsImxhbmd1YWdlIiwiaTE4biIsImRhcmtNb2RlIiwidGl0bGUiLCJXRUJfVElUTEUiLCJzY29wZSIsImxvZ2luIiwibG9nb1VSSSIsInBrZ01hbmFnZXJzIiwidmVyc2lvbiIsInByaW1hcnlfY29sb3IiLCJzY3JpcHRzQm9keUFmdGVyIiwibWV0YVNjcmlwdHMiLCJzY3JpcHRzYm9keUJlZm9yZSIsIk9iamVjdCIsImFzc2lnbiIsImJvZHlCZWZvcmUiLCJvcHRpb25zIiwid2ViUGFnZSIsImdldCIsInNldCIsImVycm9yIiwiRXJyb3IiLCJzdGFjayIsInNldEhlYWRlciIsIkhFQURFUlMiLCJURVhUX0hUTUwiLCJzZW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLE9BQU8sR0FBR0MsT0FBTyxDQUFDLDBCQUFELENBQXZCOztBQUNBLE1BQU1DLGdCQUFnQixHQUFHLE9BQXpCO0FBQ0EsTUFBTUMsS0FBSyxHQUFHLElBQUlDLGlCQUFKLENBQVE7QUFBRUMsRUFBQUEsR0FBRyxFQUFF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O0FBQ1oxQyxNQUFBQSxLQUFLLENBQUMsZ0JBQUQsRUFBbUJ5QyxPQUFuQixDQUFMO0FBQ0F6QyxNQUFBQSxLQUFLLENBQUMsc0JBQUQsRUFBeUJtQixhQUF6QixDQUFMO0FBQ0F1QixNQUFBQSxPQUFPLEdBQUcsdUJBQ1I7QUFDRXhCLFFBQUFBLFFBQVEsRUFBRUMsYUFBRixhQUFFQSxhQUFGLGNBQUVBLGFBQUYsR0FBbUJsQixvQkFEN0I7QUFFRXdDLFFBQUFBLE9BRkY7QUFHRU4sUUFBQUEsZ0JBSEY7QUFJRUMsUUFBQUEsV0FKRjtBQUtFQyxRQUFBQTtBQUxGLE9BRFEsRUFRUm5CLFFBUlEsQ0FBVjtBQVVBbEIsTUFBQUEsS0FBSyxDQUFDLGdCQUFELEVBQW1CMEMsT0FBbkIsQ0FBTDtBQUNBOUMsTUFBQUEsS0FBSyxDQUFDZ0QsR0FBTixDQUFVLFVBQVYsRUFBc0JGLE9BQXRCO0FBQ0ExQyxNQUFBQSxLQUFLLENBQUMsb0JBQUQsQ0FBTDtBQUNELEtBaEJELE1BZ0JPO0FBQ0xBLE1BQUFBLEtBQUssQ0FBQyxzQkFBRCxDQUFMO0FBQ0Q7QUFDRixHQXRCRCxDQXNCRSxPQUFPNkMsS0FBUCxFQUFjO0FBQ2QsVUFBTSxJQUFJQyxLQUFKLENBQVcsa0NBQWlDRCxLQUFLLENBQUNFLEtBQU0sRUFBeEQsQ0FBTjtBQUNEOztBQUNEM0IsRUFBQUEsR0FBRyxDQUFDNEIsU0FBSixDQUFjLGNBQWQsRUFBOEJDLG9CQUFRQyxTQUF0QztBQUNBOUIsRUFBQUEsR0FBRyxDQUFDK0IsSUFBSixDQUFTVCxPQUFUO0FBQ0ExQyxFQUFBQSxLQUFLLENBQUMsWUFBRCxDQUFMO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7IEhFQURFUlMgfSBmcm9tICdAdmVyZGFjY2lvL2NvbW1vbnMtYXBpJztcblxuaW1wb3J0IHsgV0VCX1RJVExFIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRQdWJsaWNVcmwsIGhhc0xvZ2luLCBpc0hUVFBQcm90b2NvbCB9IGZyb20gJy4uLy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgcmVuZGVyVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZSc7XG5cbmNvbnN0IHBrZ0pTT04gPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9wYWNrYWdlLmpzb24nKTtcbmNvbnN0IERFRkFVTFRfTEFOR1VBR0UgPSAnZXMtVVMnO1xuY29uc3QgY2FjaGUgPSBuZXcgTFJVKHsgbWF4OiA1MDAsIG1heEFnZTogMTAwMCAqIDYwICogNjAgfSk7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvJyk7XG5cbmNvbnN0IGRlZmF1bHRNYW5pZmVzdEZpbGVzID0ge1xuICBqczogWydydW50aW1lLmpzJywgJ3ZlbmRvcnMuanMnLCAnbWFpbi5qcyddLFxuICBpY286ICdmYXZpY29uLmljbycsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQcmltYXJ5Q29sb3IocHJpbWFyeUNvbG9yKSB7XG4gIGNvbnN0IGlzSGV4ID0gL14jKyhbYS1mQS1GMC05XXs2fXxbYS1mQS1GMC05XXszfSkkL2kudGVzdChwcmltYXJ5Q29sb3IpO1xuICBpZiAoIWlzSGV4KSB7XG4gICAgZGVidWcoJ2ludmFsaWQgcHJpbWFyeSBjb2xvciAlbycsIHByaW1hcnlDb2xvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHByaW1hcnlDb2xvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMb2dvKGNvbmZpZywgcmVxKSB7XG4gIGNvbnN0IGlzTG9jYWxGaWxlID0gY29uZmlnPy53ZWI/LmxvZ28gJiYgIWlzSFRUUFByb3RvY29sKGNvbmZpZz8ud2ViPy5sb2dvKTtcblxuICBpZiAoaXNMb2NhbEZpbGUpIHtcbiAgICByZXR1cm4gYCR7Z2V0UHVibGljVXJsKGNvbmZpZz8udXJsX3ByZWZpeCwgcmVxKX0tL3N0YXRpYy8ke3BhdGguYmFzZW5hbWUoY29uZmlnPy53ZWI/LmxvZ28pfWA7XG4gIH0gZWxzZSBpZiAoaXNIVFRQUHJvdG9jb2woY29uZmlnPy53ZWI/LmxvZ28pKSB7XG4gICAgcmV0dXJuIGNvbmZpZz8ud2ViPy5sb2dvO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJIVE1MKGNvbmZpZywgbWFuaWZlc3QsIG1hbmlmZXN0RmlsZXMsIHJlcSwgcmVzKSB7XG4gIGNvbnN0IHsgdXJsX3ByZWZpeCB9ID0gY29uZmlnO1xuICBjb25zdCBiYXNlID0gZ2V0UHVibGljVXJsKGNvbmZpZz8udXJsX3ByZWZpeCwgcmVxKTtcbiAgY29uc3QgYmFzZW5hbWUgPSBuZXcgVVJMKGJhc2UpLnBhdGhuYW1lO1xuICBjb25zdCBsYW5ndWFnZSA9IGNvbmZpZz8uaTE4bj8ud2ViID8/IERFRkFVTFRfTEFOR1VBR0U7XG4gIGNvbnN0IGRhcmtNb2RlID0gY29uZmlnPy53ZWI/LmRhcmtNb2RlID8/IGZhbHNlO1xuICBjb25zdCB0aXRsZSA9IGNvbmZpZz8ud2ViPy50aXRsZSA/PyBXRUJfVElUTEU7XG4gIGNvbnN0IHNjb3BlID0gY29uZmlnPy53ZWI/LnNjb3BlID8/ICcnO1xuICBjb25zdCBsb2dpbiA9IGhhc0xvZ2luKGNvbmZpZyk7XG4gIGNvbnN0IGxvZ29VUkkgPSByZXNvbHZlTG9nbyhjb25maWcsIHJlcSk7XG4gIGNvbnN0IHBrZ01hbmFnZXJzID0gY29uZmlnPy53ZWI/LnBrZ01hbmFnZXJzID8/IFsneWFybicsICdwbnBtJywgJ25wbSddO1xuICBjb25zdCB2ZXJzaW9uID0gcGtnSlNPTi52ZXJzaW9uO1xuICBjb25zdCBwcmltYXJ5Q29sb3IgPSB2YWxpZGF0ZVByaW1hcnlDb2xvcihjb25maWc/LndlYj8ucHJpbWFyeV9jb2xvcikgPz8gJyM0YjVlNDAnO1xuICBjb25zdCB7IHNjcmlwdHNCb2R5QWZ0ZXIsIG1ldGFTY3JpcHRzLCBzY3JpcHRzYm9keUJlZm9yZSB9ID0gT2JqZWN0LmFzc2lnbihcbiAgICB7fSxcbiAgICB7XG4gICAgICBzY3JpcHRzQm9keUFmdGVyOiBbXSxcbiAgICAgIGJvZHlCZWZvcmU6IFtdLFxuICAgICAgbWV0YVNjcmlwdHM6IFtdLFxuICAgIH0sXG4gICAgY29uZmlnPy53ZWJcbiAgKTtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBkYXJrTW9kZSxcbiAgICB1cmxfcHJlZml4LFxuICAgIGJhc2VuYW1lLFxuICAgIGJhc2UsXG4gICAgcHJpbWFyeUNvbG9yLFxuICAgIHZlcnNpb24sXG4gICAgcGtnTWFuYWdlcnMsXG4gICAgbG9naW4sXG4gICAgbG9nbzogbG9nb1VSSSxcbiAgICB0aXRsZSxcbiAgICBzY29wZSxcbiAgICBsYW5ndWFnZSxcbiAgfTtcblxuICBsZXQgd2ViUGFnZTtcblxuICB0cnkge1xuICAgIHdlYlBhZ2UgPSBjYWNoZS5nZXQoJ3RlbXBsYXRlJyk7XG5cbiAgICBpZiAoIXdlYlBhZ2UpIHtcbiAgICAgIGRlYnVnKCd3ZWIgb3B0aW9ucyAlbycsIG9wdGlvbnMpO1xuICAgICAgZGVidWcoJ3dlYiBtYW5pZmVzdEZpbGVzICVvJywgbWFuaWZlc3RGaWxlcyk7XG4gICAgICB3ZWJQYWdlID0gcmVuZGVyVGVtcGxhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBtYW5pZmVzdDogbWFuaWZlc3RGaWxlcyA/PyBkZWZhdWx0TWFuaWZlc3RGaWxlcyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHNjcmlwdHNCb2R5QWZ0ZXIsXG4gICAgICAgICAgbWV0YVNjcmlwdHMsXG4gICAgICAgICAgc2NyaXB0c2JvZHlCZWZvcmUsXG4gICAgICAgIH0sXG4gICAgICAgIG1hbmlmZXN0XG4gICAgICApO1xuICAgICAgZGVidWcoJ3RlbXBsYXRlIDo6ICVvJywgd2ViUGFnZSk7XG4gICAgICBjYWNoZS5zZXQoJ3RlbXBsYXRlJywgd2ViUGFnZSk7XG4gICAgICBkZWJ1Zygnc2V0IHRlbXBsYXRlIGNhY2hlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCdyZXVzZSB0ZW1wbGF0ZSBjYWNoZScpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHRoZW1lIGNvdWxkIG5vdCBiZSBsb2FkLCBzdGFjayAke2Vycm9yLnN0YWNrfWApO1xuICB9XG4gIHJlcy5zZXRIZWFkZXIoJ0NvbnRlbnQtVHlwZScsIEhFQURFUlMuVEVYVF9IVE1MKTtcbiAgcmVzLnNlbmQod2ViUGFnZSk7XG4gIGRlYnVnKCdyZW5kZXIgd2ViJyk7XG59XG4iXX0=
|
|
155
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcGkvd2ViL2h0bWwvcmVuZGVySFRNTC50cyJdLCJuYW1lcyI6WyJwa2dKU09OIiwicmVxdWlyZSIsIkRFRkFVTFRfTEFOR1VBR0UiLCJjYWNoZSIsIkxSVSIsIm1heCIsIm1heEFnZSIsImRlYnVnIiwiZGVmYXVsdE1hbmlmZXN0RmlsZXMiLCJqcyIsImljbyIsInZhbGlkYXRlUHJpbWFyeUNvbG9yIiwicHJpbWFyeUNvbG9yIiwiaXNIZXgiLCJ0ZXN0IiwicmVzb2x2ZUxvZ28iLCJjb25maWciLCJyZXEiLCJpc0xvY2FsRmlsZSIsIndlYiIsImxvZ28iLCJ1cmxfcHJlZml4IiwicGF0aCIsImJhc2VuYW1lIiwicmVuZGVySFRNTCIsIm1hbmlmZXN0IiwibWFuaWZlc3RGaWxlcyIsInJlcyIsImJhc2UiLCJVUkwiLCJwYXRobmFtZSIsImxhbmd1YWdlIiwiaTE4biIsIm5lZWRIdG1sQ2FjaGUiLCJ1bmRlZmluZWQiLCJpbmNsdWRlcyIsImh0bWxfY2FjaGUiLCJkYXJrTW9kZSIsInRpdGxlIiwiV0VCX1RJVExFIiwic2NvcGUiLCJsb2dpbiIsImxvZ29VUkkiLCJwa2dNYW5hZ2VycyIsInZlcnNpb24iLCJwcmltYXJ5X2NvbG9yIiwic2NyaXB0c0JvZHlBZnRlciIsIm1ldGFTY3JpcHRzIiwic2NyaXB0c2JvZHlCZWZvcmUiLCJzaG93SW5mbyIsInNob3dTZXR0aW5ncyIsInNob3dUaGVtZVN3aXRjaCIsInNob3dGb290ZXIiLCJzaG93U2VhcmNoIiwic2hvd0Rvd25sb2FkVGFyYmFsbCIsIk9iamVjdCIsImFzc2lnbiIsImJvZHlCZWZvcmUiLCJvcHRpb25zIiwid2ViUGFnZSIsImdldCIsInNldCIsImVycm9yIiwiRXJyb3IiLCJzdGFjayIsInNldEhlYWRlciIsIkhFQURFUlMiLCJURVhUX0hUTUwiLCJzZW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLE9BQU8sR0FBR0MsT0FBTyxDQUFDLDBCQUFELENBQXZCOztBQUNBLE1BQU1DLGdCQUFnQixHQUFHLE9BQXpCO0FBQ0EsTUFBTUMsS0FBSyxHQUFHLElBQUlDLGlCQUFKLENBQVE7QUFBRUMsRUFBQUEsR0FBRyxFQUFFLEdBQVA7QUFBWUMsRUFBQUEsTUFBTSxFQUFFLE9BQU8sRUFBUCxHQUFZO0FBQWhDLENBQVIsQ0FBZDtBQUVBLE1BQU1DLEtBQUssR0FBRyxvQkFBVyxXQUFYLENBQWQ7QUFFQSxNQUFNQyxvQkFBb0IsR0FBRztBQUMzQkMsRUFBQUEsRUFBRSxFQUFFLENBQUMsWUFBRCxFQUFlLFlBQWYsRUFBNkIsU0FBN0IsQ0FEdUI7QUFFM0JDLEVBQUFBLEdBQUcsRUFBRTtBQUZzQixDQUE3Qjs7QUFLTyxTQUFTQyxvQkFBVCxDQUE4QkMsWUFBOUIsRUFBNEM7QUFDakQsUUFBTUMsS0FBSyxHQUFHLHVDQUF1Q0MsSUFBdkMsQ0FBNENGLFlBQTVDLENBQWQ7O0FBQ0EsTUFBSSxDQUFDQyxLQUFMLEVBQVk7QUFDVk4sSUFBQUEsS0FBSyxDQUFDLDBCQUFELEVBQTZCSyxZQUE3QixDQUFMO0FBQ0E7QUFDRDs7QUFFRCxTQUFPQSxZQUFQO0FBQ0Q7O0FBRU0sU0FBU0csV0FBVCxDQUFxQkMsTUFBckIsRUFBNkJDLEdBQTdCLEVBQWtDO0FBQUE7O0FBQ3ZDLFFBQU1DLFdBQVcsR0FBRyxDQUFBRixNQUFNLFNBQU4sSUFBQUEsTUFBTSxXQUFOLDJCQUFBQSxNQUFNLENBQUVHLEdBQVIsNERBQWFDLElBQWIsS0FBcUIsQ0FBQywyQkFBZUosTUFBZixhQUFlQSxNQUFmLHVDQUFlQSxNQUFNLENBQUVHLEdBQXZCLGlEQUFlLGFBQWFDLElBQTVCLENBQTFDOztBQUVBLE1BQUlGLFdBQUosRUFBaUI7QUFBQTs7QUFDZixXQUFRLEdBQUUseUJBQWFGLE1BQWIsYUFBYUEsTUFBYix1QkFBYUEsTUFBTSxDQUFFSyxVQUFyQixFQUFpQ0osR0FBakMsQ0FBc0MsWUFBV0ssY0FBS0MsUUFBTCxDQUFjUCxNQUFkLGFBQWNBLE1BQWQsdUNBQWNBLE1BQU0sQ0FBRUcsR0FBdEIsaURBQWMsYUFBYUMsSUFBM0IsQ0FBaUMsRUFBNUY7QUFDRCxHQUZELE1BRU8sSUFBSSwyQkFBZUosTUFBZixhQUFlQSxNQUFmLHVDQUFlQSxNQUFNLENBQUVHLEdBQXZCLGlEQUFlLGFBQWFDLElBQTVCLENBQUosRUFBdUM7QUFBQTs7QUFDNUMsV0FBT0osTUFBUCxhQUFPQSxNQUFQLHVDQUFPQSxNQUFNLENBQUVHLEdBQWYsaURBQU8sYUFBYUMsSUFBcEI7QUFDRCxHQUZNLE1BRUE7QUFDTCxXQUFPLEVBQVA7QUFDRDtBQUNGOztBQUVjLFNBQVNJLFVBQVQsQ0FBb0JSLE1BQXBCLEVBQTRCUyxRQUE1QixFQUFzQ0MsYUFBdEMsRUFBcURULEdBQXJELEVBQTBEVSxHQUExRCxFQUErRDtBQUFBOztBQUM1RSxRQUFNO0FBQUVOLElBQUFBO0FBQUYsTUFBaUJMLE1BQXZCO0FBQ0EsUUFBTVksSUFBSSxHQUFHLHlCQUFhWixNQUFiLGFBQWFBLE1BQWIsdUJBQWFBLE1BQU0sQ0FBRUssVUFBckIsRUFBaUNKLEdBQWpDLENBQWI7QUFDQSxRQUFNTSxRQUFRLEdBQUcsSUFBSU0sUUFBSixDQUFRRCxJQUFSLEVBQWNFLFFBQS9CO0FBQ0EsUUFBTUMsUUFBUSx1QkFBR2YsTUFBSCxhQUFHQSxNQUFILHVDQUFHQSxNQUFNLENBQUVnQixJQUFYLGlEQUFHLGFBQWNiLEdBQWpCLCtEQUF3QmpCLGdCQUF0QztBQUNBLFFBQU0rQixhQUFhLEdBQUcsQ0FBQ0MsU0FBRCxFQUFZLElBQVosRUFBa0JDLFFBQWxCLENBQTJCbkIsTUFBM0IsYUFBMkJBLE1BQTNCLHVDQUEyQkEsTUFBTSxDQUFFRyxHQUFuQyxpREFBMkIsYUFBYWlCLFVBQXhDLElBQXNELElBQXRELEdBQTZEcEIsTUFBTSxDQUFDRyxHQUFQLENBQVdpQixVQUE5RjtBQUNBLFFBQU1DLFFBQVEsMkJBQUdyQixNQUFILGFBQUdBLE1BQUgsdUNBQUdBLE1BQU0sQ0FBRUcsR0FBWCxpREFBRyxhQUFha0IsUUFBaEIsdUVBQTRCLEtBQTFDO0FBQ0EsUUFBTUMsS0FBSyx3QkFBR3RCLE1BQUgsYUFBR0EsTUFBSCx1Q0FBR0EsTUFBTSxDQUFFRyxHQUFYLGlEQUFHLGFBQWFtQixLQUFoQixpRUFBeUJDLG9CQUFwQztBQUNBLFFBQU1DLEtBQUssd0JBQUd4QixNQUFILGFBQUdBLE1BQUgsdUNBQUdBLE1BQU0sQ0FBRUcsR0FBWCxpREFBRyxhQUFhcUIsS0FBaEIsaUVBQXlCLEVBQXBDO0FBQ0EsUUFBTUMsS0FBSyxHQUFHLHFCQUFTekIsTUFBVCxDQUFkO0FBQ0EsUUFBTTBCLE9BQU8sR0FBRzNCLFdBQVcsQ0FBQ0MsTUFBRCxFQUFTQyxHQUFULENBQTNCO0FBQ0EsUUFBTTBCLFdBQVcsNEJBQUczQixNQUFILGFBQUdBLE1BQUgsd0NBQUdBLE1BQU0sQ0FBRUcsR0FBWCxrREFBRyxjQUFhd0IsV0FBaEIseUVBQStCLENBQUMsTUFBRCxFQUFTLE1BQVQsRUFBaUIsS0FBakIsQ0FBaEQ7QUFDQSxRQUFNQyxPQUFPLEdBQUc1QyxPQUFPLENBQUM0QyxPQUF4QjtBQUNBLFFBQU1oQyxZQUFZLDRCQUFHRCxvQkFBb0IsQ0FBQ0ssTUFBRCxhQUFDQSxNQUFELHdDQUFDQSxNQUFNLENBQUVHLEdBQVQsa0RBQUMsY0FBYTBCLGFBQWQsQ0FBdkIseUVBQXVELFNBQXpFO0FBQ0EsUUFBTTtBQUFFQyxJQUFBQSxnQkFBRjtBQUFvQkMsSUFBQUEsV0FBcEI7QUFBaUNDLElBQUFBLGlCQUFqQztBQUFvREMsSUFBQUEsUUFBcEQ7QUFBOERDLElBQUFBLFlBQTlEO0FBQTRFQyxJQUFBQSxlQUE1RTtBQUE2RkMsSUFBQUEsVUFBN0Y7QUFBeUdDLElBQUFBLFVBQXpHO0FBQXFIQyxJQUFBQTtBQUFySCxNQUE2SUMsTUFBTSxDQUFDQyxNQUFQLENBQ2pKLEVBRGlKLEVBRWpKO0FBQ0VWLElBQUFBLGdCQUFnQixFQUFFLEVBRHBCO0FBRUVXLElBQUFBLFVBQVUsRUFBRSxFQUZkO0FBR0VWLElBQUFBLFdBQVcsRUFBRTtBQUhmLEdBRmlKLEVBT2pKL0IsTUFQaUosYUFPakpBLE1BUGlKLHVCQU9qSkEsTUFBTSxDQUFFRyxHQVB5SSxDQUFuSjtBQVNBLFFBQU11QyxPQUFPLEdBQUc7QUFDZFQsSUFBQUEsUUFEYztBQUVkQyxJQUFBQSxZQUZjO0FBR2RDLElBQUFBLGVBSGM7QUFJZEMsSUFBQUEsVUFKYztBQUtkQyxJQUFBQSxVQUxjO0FBTWRDLElBQUFBLG1CQU5jO0FBT2RqQixJQUFBQSxRQVBjO0FBUWRoQixJQUFBQSxVQVJjO0FBU2RFLElBQUFBLFFBVGM7QUFVZEssSUFBQUEsSUFWYztBQVdkaEIsSUFBQUEsWUFYYztBQVlkZ0MsSUFBQUEsT0FaYztBQWFkRCxJQUFBQSxXQWJjO0FBY2RGLElBQUFBLEtBZGM7QUFlZHJCLElBQUFBLElBQUksRUFBRXNCLE9BZlE7QUFnQmRKLElBQUFBLEtBaEJjO0FBaUJkRSxJQUFBQSxLQWpCYztBQWtCZFQsSUFBQUE7QUFsQmMsR0FBaEI7QUFxQkEsTUFBSTRCLE9BQUo7O0FBRUEsTUFBSTtBQUNGQSxJQUFBQSxPQUFPLEdBQUd4RCxLQUFLLENBQUN5RCxHQUFOLENBQVUsVUFBVixDQUFWOztBQUNBLFFBQUksQ0FBQ0QsT0FBTCxFQUFjO0FBQ1pwRCxNQUFBQSxLQUFLLENBQUMsZ0JBQUQsRUFBbUJtRCxPQUFuQixDQUFMO0FBQ0FuRCxNQUFBQSxLQUFLLENBQUMsc0JBQUQsRUFBeUJtQixhQUF6QixDQUFMO0FBQ0FpQyxNQUFBQSxPQUFPLEdBQUcsdUJBQ1I7QUFDRWxDLFFBQUFBLFFBQVEsRUFBRUMsYUFBRixhQUFFQSxhQUFGLGNBQUVBLGFBQUYsR0FBbUJsQixvQkFEN0I7QUFFRWtELFFBQUFBLE9BRkY7QUFHRVosUUFBQUEsZ0JBSEY7QUFJRUMsUUFBQUEsV0FKRjtBQUtFQyxRQUFBQTtBQUxGLE9BRFEsRUFRUnZCLFFBUlEsQ0FBVjtBQVVBbEIsTUFBQUEsS0FBSyxDQUFDLGdCQUFELEVBQW1Cb0QsT0FBbkIsQ0FBTDs7QUFDQSxVQUFJMUIsYUFBSixFQUFtQjtBQUNqQjlCLFFBQUFBLEtBQUssQ0FBQzBELEdBQU4sQ0FBVSxVQUFWLEVBQXNCRixPQUF0QjtBQUNBcEQsUUFBQUEsS0FBSyxDQUFDLG9CQUFELENBQUw7QUFDRDtBQUNGLEtBbEJELE1Ba0JPO0FBQ0xBLE1BQUFBLEtBQUssQ0FBQyxzQkFBRCxDQUFMO0FBQ0Q7QUFDRixHQXZCRCxDQXVCRSxPQUFPdUQsS0FBUCxFQUFjO0FBQ2QsVUFBTSxJQUFJQyxLQUFKLENBQVcsa0NBQWlDRCxLQUFLLENBQUNFLEtBQU0sRUFBeEQsQ0FBTjtBQUNEOztBQUNEckMsRUFBQUEsR0FBRyxDQUFDc0MsU0FBSixDQUFjLGNBQWQsRUFBOEJDLG9CQUFRQyxTQUF0QztBQUNBeEMsRUFBQUEsR0FBRyxDQUFDeUMsSUFBSixDQUFTVCxPQUFUO0FBQ0FwRCxFQUFBQSxLQUFLLENBQUMsWUFBRCxDQUFMO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgTFJVIGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7IEhFQURFUlMgfSBmcm9tICdAdmVyZGFjY2lvL2NvbW1vbnMtYXBpJztcblxuaW1wb3J0IHsgV0VCX1RJVExFIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRQdWJsaWNVcmwsIGhhc0xvZ2luLCBpc0hUVFBQcm90b2NvbCB9IGZyb20gJy4uLy4uLy4uL2xpYi91dGlscyc7XG5pbXBvcnQgcmVuZGVyVGVtcGxhdGUgZnJvbSAnLi90ZW1wbGF0ZSc7XG5cbmNvbnN0IHBrZ0pTT04gPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9wYWNrYWdlLmpzb24nKTtcbmNvbnN0IERFRkFVTFRfTEFOR1VBR0UgPSAnZXMtVVMnO1xuY29uc3QgY2FjaGUgPSBuZXcgTFJVKHsgbWF4OiA1MDAsIG1heEFnZTogMTAwMCAqIDYwICogNjAgfSk7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvJyk7XG5cbmNvbnN0IGRlZmF1bHRNYW5pZmVzdEZpbGVzID0ge1xuICBqczogWydydW50aW1lLmpzJywgJ3ZlbmRvcnMuanMnLCAnbWFpbi5qcyddLFxuICBpY286ICdmYXZpY29uLmljbycsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVQcmltYXJ5Q29sb3IocHJpbWFyeUNvbG9yKSB7XG4gIGNvbnN0IGlzSGV4ID0gL14jKyhbYS1mQS1GMC05XXs2fXxbYS1mQS1GMC05XXszfSkkL2kudGVzdChwcmltYXJ5Q29sb3IpO1xuICBpZiAoIWlzSGV4KSB7XG4gICAgZGVidWcoJ2ludmFsaWQgcHJpbWFyeSBjb2xvciAlbycsIHByaW1hcnlDb2xvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIHByaW1hcnlDb2xvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMb2dvKGNvbmZpZywgcmVxKSB7XG4gIGNvbnN0IGlzTG9jYWxGaWxlID0gY29uZmlnPy53ZWI/LmxvZ28gJiYgIWlzSFRUUFByb3RvY29sKGNvbmZpZz8ud2ViPy5sb2dvKTtcblxuICBpZiAoaXNMb2NhbEZpbGUpIHtcbiAgICByZXR1cm4gYCR7Z2V0UHVibGljVXJsKGNvbmZpZz8udXJsX3ByZWZpeCwgcmVxKX0tL3N0YXRpYy8ke3BhdGguYmFzZW5hbWUoY29uZmlnPy53ZWI/LmxvZ28pfWA7XG4gIH0gZWxzZSBpZiAoaXNIVFRQUHJvdG9jb2woY29uZmlnPy53ZWI/LmxvZ28pKSB7XG4gICAgcmV0dXJuIGNvbmZpZz8ud2ViPy5sb2dvO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW5kZXJIVE1MKGNvbmZpZywgbWFuaWZlc3QsIG1hbmlmZXN0RmlsZXMsIHJlcSwgcmVzKSB7XG4gIGNvbnN0IHsgdXJsX3ByZWZpeCB9ID0gY29uZmlnO1xuICBjb25zdCBiYXNlID0gZ2V0UHVibGljVXJsKGNvbmZpZz8udXJsX3ByZWZpeCwgcmVxKTtcbiAgY29uc3QgYmFzZW5hbWUgPSBuZXcgVVJMKGJhc2UpLnBhdGhuYW1lO1xuICBjb25zdCBsYW5ndWFnZSA9IGNvbmZpZz8uaTE4bj8ud2ViID8/IERFRkFVTFRfTEFOR1VBR0U7XG4gIGNvbnN0IG5lZWRIdG1sQ2FjaGUgPSBbdW5kZWZpbmVkLCBudWxsXS5pbmNsdWRlcyhjb25maWc/LndlYj8uaHRtbF9jYWNoZSkgPyB0cnVlIDogY29uZmlnLndlYi5odG1sX2NhY2hlO1xuICBjb25zdCBkYXJrTW9kZSA9IGNvbmZpZz8ud2ViPy5kYXJrTW9kZSA/PyBmYWxzZTtcbiAgY29uc3QgdGl0bGUgPSBjb25maWc/LndlYj8udGl0bGUgPz8gV0VCX1RJVExFO1xuICBjb25zdCBzY29wZSA9IGNvbmZpZz8ud2ViPy5zY29wZSA/PyAnJztcbiAgY29uc3QgbG9naW4gPSBoYXNMb2dpbihjb25maWcpO1xuICBjb25zdCBsb2dvVVJJID0gcmVzb2x2ZUxvZ28oY29uZmlnLCByZXEpO1xuICBjb25zdCBwa2dNYW5hZ2VycyA9IGNvbmZpZz8ud2ViPy5wa2dNYW5hZ2VycyA/PyBbJ3lhcm4nLCAncG5wbScsICducG0nXTtcbiAgY29uc3QgdmVyc2lvbiA9IHBrZ0pTT04udmVyc2lvbjtcbiAgY29uc3QgcHJpbWFyeUNvbG9yID0gdmFsaWRhdGVQcmltYXJ5Q29sb3IoY29uZmlnPy53ZWI/LnByaW1hcnlfY29sb3IpID8/ICcjNGI1ZTQwJztcbiAgY29uc3QgeyBzY3JpcHRzQm9keUFmdGVyLCBtZXRhU2NyaXB0cywgc2NyaXB0c2JvZHlCZWZvcmUsIHNob3dJbmZvLCBzaG93U2V0dGluZ3MsIHNob3dUaGVtZVN3aXRjaCwgc2hvd0Zvb3Rlciwgc2hvd1NlYXJjaCwgc2hvd0Rvd25sb2FkVGFyYmFsbCB9ID0gT2JqZWN0LmFzc2lnbihcbiAgICB7fSxcbiAgICB7XG4gICAgICBzY3JpcHRzQm9keUFmdGVyOiBbXSxcbiAgICAgIGJvZHlCZWZvcmU6IFtdLFxuICAgICAgbWV0YVNjcmlwdHM6IFtdLFxuICAgIH0sXG4gICAgY29uZmlnPy53ZWJcbiAgKTtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICBzaG93SW5mbyxcbiAgICBzaG93U2V0dGluZ3MsXG4gICAgc2hvd1RoZW1lU3dpdGNoLFxuICAgIHNob3dGb290ZXIsXG4gICAgc2hvd1NlYXJjaCxcbiAgICBzaG93RG93bmxvYWRUYXJiYWxsLFxuICAgIGRhcmtNb2RlLFxuICAgIHVybF9wcmVmaXgsXG4gICAgYmFzZW5hbWUsXG4gICAgYmFzZSxcbiAgICBwcmltYXJ5Q29sb3IsXG4gICAgdmVyc2lvbixcbiAgICBwa2dNYW5hZ2VycyxcbiAgICBsb2dpbixcbiAgICBsb2dvOiBsb2dvVVJJLFxuICAgIHRpdGxlLFxuICAgIHNjb3BlLFxuICAgIGxhbmd1YWdlLFxuICB9O1xuXG4gIGxldCB3ZWJQYWdlO1xuXG4gIHRyeSB7XG4gICAgd2ViUGFnZSA9IGNhY2hlLmdldCgndGVtcGxhdGUnKTtcbiAgICBpZiAoIXdlYlBhZ2UpIHtcbiAgICAgIGRlYnVnKCd3ZWIgb3B0aW9ucyAlbycsIG9wdGlvbnMpO1xuICAgICAgZGVidWcoJ3dlYiBtYW5pZmVzdEZpbGVzICVvJywgbWFuaWZlc3RGaWxlcyk7XG4gICAgICB3ZWJQYWdlID0gcmVuZGVyVGVtcGxhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBtYW5pZmVzdDogbWFuaWZlc3RGaWxlcyA/PyBkZWZhdWx0TWFuaWZlc3RGaWxlcyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHNjcmlwdHNCb2R5QWZ0ZXIsXG4gICAgICAgICAgbWV0YVNjcmlwdHMsXG4gICAgICAgICAgc2NyaXB0c2JvZHlCZWZvcmUsXG4gICAgICAgIH0sXG4gICAgICAgIG1hbmlmZXN0XG4gICAgICApO1xuICAgICAgZGVidWcoJ3RlbXBsYXRlIDo6ICVvJywgd2ViUGFnZSk7XG4gICAgICBpZiAobmVlZEh0bWxDYWNoZSkge1xuICAgICAgICBjYWNoZS5zZXQoJ3RlbXBsYXRlJywgd2ViUGFnZSk7XG4gICAgICAgIGRlYnVnKCdzZXQgdGVtcGxhdGUgY2FjaGUnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ3JldXNlIHRlbXBsYXRlIGNhY2hlJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgdGhlbWUgY291bGQgbm90IGJlIGxvYWQsIHN0YWNrICR7ZXJyb3Iuc3RhY2t9YCk7XG4gIH1cbiAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgSEVBREVSUy5URVhUX0hUTUwpO1xuICByZXMuc2VuZCh3ZWJQYWdlKTtcbiAgZGVidWcoJ3JlbmRlciB3ZWInKTtcbn1cbiJdfQ==
|
package/build/lib/auth-utils.js
CHANGED
|
@@ -51,7 +51,7 @@ minLength = _constants.DEFAULT_MIN_LIMIT_PASSWORD) {
|
|
|
51
51
|
|
|
52
52
|
function createRemoteUser(name, pluginGroups) {
|
|
53
53
|
const isGroupValid = Array.isArray(pluginGroups);
|
|
54
|
-
const groups = (isGroupValid ? pluginGroups : []).concat([_constants.ROLES.$ALL, _constants.ROLES.$AUTH, _constants.ROLES.DEPRECATED_ALL, _constants.ROLES.DEPRECATED_AUTH, _constants.ROLES.ALL]);
|
|
54
|
+
const groups = Array.from(new Set((isGroupValid ? pluginGroups : []).concat([_constants.ROLES.$ALL, _constants.ROLES.$AUTH, _constants.ROLES.DEPRECATED_ALL, _constants.ROLES.DEPRECATED_AUTH, _constants.ROLES.ALL])));
|
|
55
55
|
return {
|
|
56
56
|
name,
|
|
57
57
|
groups,
|
|
@@ -312,4 +312,4 @@ function getMiddlewareCredentials(security, secret, authorizationHeader) {
|
|
|
312
312
|
return verifyJWTPayload(token, secret);
|
|
313
313
|
}
|
|
314
314
|
}
|
|
315
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC11dGlscy50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsInZhbGlkYXRlUGFzc3dvcmQiLCJwYXNzd29yZCIsIm1pbkxlbmd0aCIsIkRFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JEIiwibGVuZ3RoIiwiY3JlYXRlUmVtb3RlVXNlciIsIm5hbWUiLCJwbHVnaW5Hcm91cHMiLCJpc0dyb3VwVmFsaWQiLCJBcnJheSIsImlzQXJyYXkiLCJncm91cHMiLCJjb25jYXQiLCJST0xFUyIsIiRBTEwiLCIkQVVUSCIsIkRFUFJFQ0FURURfQUxMIiwiREVQUkVDQVRFRF9BVVRIIiwiQUxMIiwicmVhbF9ncm91cHMiLCJjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyIiwidW5kZWZpbmVkIiwiJEFOT05ZTU9VUyIsIkRFUFJFQ0FURURfQU5PTllNT1VTIiwiYWxsb3dfYWN0aW9uIiwiYWN0aW9uIiwidXNlciIsInBrZyIsImNhbGxiYWNrIiwiZ3JvdXBBY2Nlc3MiLCJoYXNQZXJtaXNzaW9uIiwic29tZSIsImdyb3VwIiwiaW5jbHVkZXMiLCJsb2dnZXIiLCJpbmZvIiwicmVtb3RlIiwiRXJyb3JDb2RlIiwiZ2V0Rm9yYmlkZGVuIiwiZ2V0VW5hdXRob3JpemVkIiwiaGFuZGxlU3BlY2lhbFVucHVibGlzaCIsImlzVW5wdWJsaXNoTWlzc2luZyIsIl8iLCJpc05pbCIsImhhc0dyb3VwcyIsImdldERlZmF1bHRQbHVnaW5zIiwiYXV0aGVudGljYXRlIiwiX3VzZXIiLCJfcGFzc3dvcmQiLCJjYiIsIkFQSV9FUlJPUiIsIkJBRF9VU0VSTkFNRV9QQVNTV09SRCIsImFkZF91c2VyIiwiZ2V0Q29uZmxpY3QiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwiYWxsb3dfdW5wdWJsaXNoIiwiY3JlYXRlU2Vzc2lvblRva2VuIiwidGVuSG91cnNUaW1lIiwiZXhwaXJlcyIsIkRhdGUiLCJub3ciLCJkZWZhdWx0V2ViVG9rZW5PcHRpb25zIiwic2lnbiIsImV4cGlyZXNJbiIsIlRJTUVfRVhQSVJBVElPTl8xSCIsInZlcmlmeSIsImRlZmF1bHRBcGlUb2tlbkNvbmYiLCJsZWdhY3kiLCJkZWZhdWx0VXNlclJhdGVMaW1pdGluZyIsIndpbmRvd01zIiwibWF4IiwiZGVmYXVsdFNlY3VyaXR5Iiwid2ViIiwiYXBpIiwiZ2V0U2VjdXJpdHkiLCJjb25maWciLCJzZWN1cml0eSIsIm1lcmdlIiwiZ2V0QXV0aGVudGljYXRlZE1lc3NhZ2UiLCJidWlsZFVzZXJCdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiaXNBRVNMZWdhY3kiLCJqd3QiLCJnZXRBcGlUb2tlbiIsImF1dGgiLCJyZW1vdGVVc2VyIiwiYWVzUGFzc3dvcmQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFlc0VuY3J5cHQiLCJ0b1N0cmluZyIsImp3dEVuY3J5cHQiLCJwYXJzZUF1dGhUb2tlbkhlYWRlciIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJwYXJ0cyIsInNwbGl0Iiwic2NoZW1lIiwidG9rZW4iLCJwYXJzZUJhc2ljUGF5bG9hZCIsImNyZWRlbnRpYWxzIiwiaW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJwYXJzZUFFU0NyZWRlbnRpYWxzIiwic2VjcmV0IiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsIlRPS0VOX0JFQVJFUiIsInRva2VuQXNCdWZmZXIiLCJleHBpcmVSZWFzb25zIiwidmVyaWZ5SldUUGF5bG9hZCIsInBheWxvYWQiLCJlcnJvciIsImdldENvZGUiLCJIVFRQX1NUQVRVUyIsIlVOQVVUSE9SSVpFRCIsIm1lc3NhZ2UiLCJpc0F1dGhIZWFkZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMiLCJwYXJzZWRDcmVkZW50aWFscyIsImlzU3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUcsb0JB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LENBQTJCQyxhQUEzQixFQUEyRDtBQUNoRSxTQUFPQSxhQUFhLENBQUN2QixLQUFkLENBQW9CLEdBQXBCLEVBQXlCN0YsTUFBekIsS0FBb0MsQ0FBM0M7QUFDRDs7QUFFTSxTQUFTcUgsd0JBQVQsQ0FBa0M1QyxRQUFsQyxFQUFzRDZCLE1BQXRELEVBQXNFWCxtQkFBdEUsRUFBMEg7QUFDL0gsTUFBSVosV0FBVyxDQUFDTixRQUFELENBQWYsRUFBMkI7QUFDekIsVUFBTXdCLFdBQVcsR0FBR0ksbUJBQW1CLENBQUNWLG1CQUFELEVBQXNCVyxNQUF0QixDQUF2Qzs7QUFDQSxRQUFJLENBQUNMLFdBQUwsRUFBa0I7QUFDaEI7QUFDRDs7QUFFRCxVQUFNcUIsaUJBQWlCLEdBQUd0QixpQkFBaUIsQ0FBQ0MsV0FBRCxDQUEzQzs7QUFDQSxRQUFJLENBQUNxQixpQkFBTCxFQUF3QjtBQUN0QjtBQUNEOztBQUVELFdBQU9BLGlCQUFQO0FBQ0Q7O0FBQ0QsUUFBTTtBQUFFeEIsSUFBQUEsTUFBRjtBQUFVQyxJQUFBQTtBQUFWLE1BQW9CTCxvQkFBb0IsQ0FBQ0MsbUJBQUQsQ0FBOUM7O0FBRUEsTUFBSXJELGdCQUFFaUYsUUFBRixDQUFXeEIsS0FBWCxLQUFxQkQsTUFBTSxDQUFDUyxXQUFQLE9BQXlCRSx3QkFBYUYsV0FBYixFQUFsRCxFQUE4RTtBQUM1RSxXQUFPSyxnQkFBZ0IsQ0FBQ2IsS0FBRCxFQUFRTyxNQUFSLENBQXZCO0FBQ0Q7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IEFQSVRva2VuT3B0aW9ucywgQ2FsbGJhY2ssIENvbmZpZywgSVBsdWdpbkF1dGgsIEpXVE9wdGlvbnMsIFBhY2thZ2UsIFJlbW90ZVVzZXIsIFNlY3VyaXR5IH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7IEF1dGhNaWRkbGV3YXJlUGF5bG9hZCwgQXV0aFRva2VuSGVhZGVyLCBCYXNpY1BheWxvYWQsIENvb2tpZVNlc3Npb25Ub2tlbiwgSUF1dGhXZWJVSSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL2xpYi9sb2dnZXInO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBERUZBVUxUX01JTl9MSU1JVF9QQVNTV09SRCwgSFRUUF9TVEFUVVMsIFJPTEVTLCBUSU1FX0VYUElSQVRJT05fMUgsIFRPS0VOX0JBU0lDLCBUT0tFTl9CRUFSRVIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhZXNEZWNyeXB0LCB2ZXJpZnlQYXlsb2FkIH0gZnJvbSAnLi9jcnlwdG8tdXRpbHMnO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0IH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBhc3N3b3JkKFxuICBwYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgbWluTGVuZ3RoOiBudW1iZXIgPSBERUZBVUxUX01JTl9MSU1JVF9QQVNTV09SRFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgcGFzc3dvcmQgPT09ICdzdHJpbmcnICYmIHBhc3N3b3JkLmxlbmd0aCA+PSBtaW5MZW5ndGg7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgUmVtb3RlVXNlciBvYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH0geyBuYW1lOiB4eCwgcGx1Z2luR3JvdXBzOiBbXSwgcmVhbF9ncm91cHM6IFtdIH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbW90ZVVzZXIobmFtZTogc3RyaW5nLCBwbHVnaW5Hcm91cHM6IHN0cmluZ1tdKTogUmVtb3RlVXNlciB7XG4gIGNvbnN0IGlzR3JvdXBWYWxpZDogYm9vbGVhbiA9IEFycmF5LmlzQXJyYXkocGx1Z2luR3JvdXBzKTtcbiAgY29uc3QgZ3JvdXBzID0gKGlzR3JvdXBWYWxpZCA/IHBsdWdpbkdyb3VwcyA6IFtdKS5jb25jYXQoW1JPTEVTLiRBTEwsIFJPTEVTLiRBVVRILCBST0xFUy5ERVBSRUNBVEVEX0FMTCwgUk9MRVMuREVQUkVDQVRFRF9BVVRILCBST0xFUy5BTExdKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgZ3JvdXBzLFxuICAgIHJlYWxfZ3JvdXBzOiBwbHVnaW5Hcm91cHMsXG4gIH07XG59XG5cbi8qKlxuICogQnVpbGRzIGFuIGFub255bW91cyByZW1vdGUgdXNlciBpbiBjYXNlIG5vbmUgaXMgbG9nZ2VkIGluLlxuICogQHJldHVybiB7T2JqZWN0fSB7IG5hbWU6IHh4LCBncm91cHM6IFtdLCByZWFsX2dyb3VwczogW10gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpOiBSZW1vdGVVc2VyIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiB1bmRlZmluZWQsXG4gICAgLy8gZ3JvdXBzIHdpdGhvdXQgJyQnIGFyZSBnb2luZyB0byBiZSBkZXByZWNhdGVkIGV2ZW50dWFsbHlcbiAgICBncm91cHM6IFtST0xFUy4kQUxMLCBST0xFUy4kQU5PTllNT1VTLCBST0xFUy5ERVBSRUNBVEVEX0FMTCwgUk9MRVMuREVQUkVDQVRFRF9BTk9OWU1PVVNdLFxuICAgIHJlYWxfZ3JvdXBzOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93X2FjdGlvbihhY3Rpb246IHN0cmluZyk6IEZ1bmN0aW9uIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh1c2VyOiBSZW1vdGVVc2VyLCBwa2c6IFBhY2thZ2UsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGRlYnVnKCdbYXV0aC9hbGxvd19hY3Rpb25dOiB1c2VyOiAlbycsIHVzZXI/Lm5hbWUpO1xuICAgIGNvbnN0IHsgbmFtZSwgZ3JvdXBzIH0gPSB1c2VyO1xuICAgIGNvbnN0IGdyb3VwQWNjZXNzID0gcGtnW2FjdGlvbl07XG4gICAgY29uc3QgaGFzUGVybWlzc2lvbiA9IGdyb3VwQWNjZXNzLnNvbWUoKGdyb3VwKSA9PiBuYW1lID09PSBncm91cCB8fCBncm91cHMuaW5jbHVkZXMoZ3JvdXApKTtcbiAgICBkZWJ1ZygnW2F1dGgvYWxsb3dfYWN0aW9uXTogaGFzUGVybWlzc2lvbj8gJW99IGZvciB1c2VyOiAlbycsIGhhc1Blcm1pc3Npb24sIHVzZXI/Lm5hbWUpO1xuXG4gICAgaWYgKGhhc1Blcm1pc3Npb24pIHtcbiAgICAgIGxvZ2dlci5pbmZvKHsgcmVtb3RlOiB1c2VyLm5hbWUgfSwgYGF1dGgvYWxsb3dfYWN0aW9uOiBhY2Nlc3MgZ3JhbnRlZCB0bzogQHt1c2VyfWApO1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBjYWxsYmFjayhFcnJvckNvZGUuZ2V0Rm9yYmlkZGVuKGB1c2VyICR7bmFtZX0gaXMgbm90IGFsbG93ZWQgdG8gJHthY3Rpb259IHBhY2thZ2UgJHtwa2cubmFtZX1gKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRVbmF1dGhvcml6ZWQoYGF1dGhvcml6YXRpb24gcmVxdWlyZWQgdG8gJHthY3Rpb259IHBhY2thZ2UgJHtwa2cubmFtZX1gKSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVTcGVjaWFsVW5wdWJsaXNoKCk6IGFueSB7XG4gIHJldHVybiBmdW5jdGlvbiAodXNlcjogUmVtb3RlVXNlciwgcGtnOiBQYWNrYWdlLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBhY3Rpb24gPSAndW5wdWJsaXNoJztcbiAgICAvLyB2ZXJpZnkgd2hldGhlciB0aGUgdW5wdWJsaXNoIHByb3AgaGFzIGJlZW4gZGVmaW5lZFxuICAgIGNvbnN0IGlzVW5wdWJsaXNoTWlzc2luZzogYm9vbGVhbiA9IF8uaXNOaWwocGtnW2FjdGlvbl0pO1xuICAgIGNvbnN0IGhhc0dyb3VwczogYm9vbGVhbiA9IGlzVW5wdWJsaXNoTWlzc2luZyA/IGZhbHNlIDogcGtnW2FjdGlvbl0ubGVuZ3RoID4gMDtcbiAgICBkZWJ1ZygnZmFsbGJhY2sgdW5wdWJsaXNoIGZvciBAe25hbWV9IGhhcyBncm91cHM6ICVvIGZvciAlbycsIGhhc0dyb3VwcywgdXNlcj8ubmFtZSk7XG4gICAgaWYgKGlzVW5wdWJsaXNoTWlzc2luZyB8fCBoYXNHcm91cHMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgZGVidWcoJ2FsbG93X2FjdGlvbiBmb3IgJW8gZm9yICVvIGhhcyBncm91cHM6ICVvIGZvciAlbycsIGFjdGlvbiwgdXNlcj8ubmFtZSwgaGFzR3JvdXBzLCB1c2VyKTtcbiAgICByZXR1cm4gYWxsb3dfYWN0aW9uKGFjdGlvbikodXNlciwgcGtnLCBjYWxsYmFjayk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0UGx1Z2lucyhsb2dnZXI6IGFueSk6IElQbHVnaW5BdXRoPENvbmZpZz4ge1xuICByZXR1cm4ge1xuICAgIGF1dGhlbnRpY2F0ZShfdXNlcjogc3RyaW5nLCBfcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgICAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICAgIGNiKEVycm9yQ29kZS5nZXRGb3JiaWRkZW4oQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgIH0sXG5cbiAgICBhZGRfdXNlcihfdXNlcjogc3RyaW5nLCBfcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgICAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICAgIHJldHVybiBjYihFcnJvckNvZGUuZ2V0Q29uZmxpY3QoQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgIH0sXG5cbiAgICAvLyBGSVhNRTogYWxsb3dfYWN0aW9uIGFuZCBhbGxvd19wdWJsaXNoIHNob3VsZCBiZSBpbiB0aGUgQHZlcmRhY2Npby90eXBlc1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhbGxvd19hY2Nlc3M6IGFsbG93X2FjdGlvbignYWNjZXNzJywgbG9nZ2VyKSxcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgYWxsb3dfcHVibGlzaDogYWxsb3dfYWN0aW9uKCdwdWJsaXNoJywgbG9nZ2VyKSxcbiAgICBhbGxvd191bnB1Ymxpc2g6IGhhbmRsZVNwZWNpYWxVbnB1Ymxpc2goKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlc3Npb25Ub2tlbigpOiBDb29raWVTZXNzaW9uVG9rZW4ge1xuICBjb25zdCB0ZW5Ib3Vyc1RpbWUgPSAxMCAqIDYwICogNjAgKiAxMDAwO1xuXG4gIHJldHVybiB7XG4gICAgLy8gbnBtanMub3JnIHNldHMgMTBoIGV4cGlyZVxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKERhdGUubm93KCkgKyB0ZW5Ib3Vyc1RpbWUpLFxuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0V2ViVG9rZW5PcHRpb25zOiBKV1RPcHRpb25zID0ge1xuICBzaWduOiB7XG4gICAgLy8gVGhlIGV4cGlyYXRpb24gdG9rZW4gZm9yIHRoZSB3ZWJzaXRlIGlzIDEgaG91clxuICAgIGV4cGlyZXNJbjogVElNRV9FWFBJUkFUSU9OXzFILFxuICB9LFxuICB2ZXJpZnk6IHt9LFxufTtcblxuY29uc3QgZGVmYXVsdEFwaVRva2VuQ29uZjogQVBJVG9rZW5PcHRpb25zID0ge1xuICBsZWdhY3k6IHRydWUsXG59O1xuXG4vLyB3ZSBsaW1pdCBtYXggMTAwMCByZXF1ZXN0IHBlciAxNSBtaW51dGVzIG9uIHVzZXIgZW5kcG9pbnRzXG5leHBvcnQgY29uc3QgZGVmYXVsdFVzZXJSYXRlTGltaXRpbmcgPSB7XG4gIHdpbmRvd01zOiAxNSAqIDYwICogMTAwMCwgLy8gMTUgbWludXRlc1xuICBtYXg6IDEwMDAsXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNlY3VyaXR5OiBTZWN1cml0eSA9IHtcbiAgd2ViOiBkZWZhdWx0V2ViVG9rZW5PcHRpb25zLFxuICBhcGk6IGRlZmF1bHRBcGlUb2tlbkNvbmYsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VjdXJpdHkoY29uZmlnOiBDb25maWcpOiBTZWN1cml0eSB7XG4gIGlmIChfLmlzTmlsKGNvbmZpZy5zZWN1cml0eSkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIF8ubWVyZ2UoZGVmYXVsdFNlY3VyaXR5LCBjb25maWcuc2VjdXJpdHkpO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRTZWN1cml0eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEF1dGhlbnRpY2F0ZWRNZXNzYWdlKHVzZXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgeW91IGFyZSBhdXRoZW50aWNhdGVkIGFzICcke3VzZXJ9J2A7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFVzZXJCdWZmZXIobmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogQnVmZmVyIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGAke25hbWV9OiR7cGFzc3dvcmR9YCwgJ3V0ZjgnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQUVTTGVnYWN5KHNlY3VyaXR5OiBTZWN1cml0eSk6IGJvb2xlYW4ge1xuICBjb25zdCB7IGxlZ2FjeSwgand0IH0gPSBzZWN1cml0eS5hcGk7XG5cbiAgcmV0dXJuIF8uaXNOaWwobGVnYWN5KSA9PT0gZmFsc2UgJiYgXy5pc05pbChqd3QpICYmIGxlZ2FjeSA9PT0gdHJ1ZTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFwaVRva2VuKGF1dGg6IElBdXRoV2ViVUksIGNvbmZpZzogQ29uZmlnLCByZW1vdGVVc2VyOiBSZW1vdGVVc2VyLCBhZXNQYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2VjdXJpdHk6IFNlY3VyaXR5ID0gZ2V0U2VjdXJpdHkoY29uZmlnKTtcbiAgaWYgKGlzQUVTTGVnYWN5KHNlY3VyaXR5KSkge1xuICAgIC8vIGZhbGxiYWNrIGFsbCBnb2VzIHRvIEFFUyBlbmNyeXB0aW9uXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICByZXNvbHZlKGF1dGguYWVzRW5jcnlwdChidWlsZFVzZXJCdWZmZXIocmVtb3RlVXNlci5uYW1lIGFzIHN0cmluZywgYWVzUGFzc3dvcmQpKS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgIH0pO1xuICB9XG4gIC8vIGkgYW0gd2lsaW5nIHRvIHVzZSBoZXJlIF8uaXNOaWwgYnV0IGZsb3cgZG9lcyBub3QgbGlrZSBpdCB5ZXQuXG4gIGNvbnN0IHsgand0IH0gPSBzZWN1cml0eS5hcGk7XG5cbiAgaWYgKGp3dCAmJiBqd3Quc2lnbikge1xuICAgIHJldHVybiBhd2FpdCBhdXRoLmp3dEVuY3J5cHQocmVtb3RlVXNlciwgand0LnNpZ24pO1xuICB9XG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIHJlc29sdmUoYXV0aC5hZXNFbmNyeXB0KGJ1aWxkVXNlckJ1ZmZlcihyZW1vdGVVc2VyLm5hbWUgYXMgc3RyaW5nLCBhZXNQYXNzd29yZCkpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBdXRoVG9rZW5IZWFkZXIoYXV0aG9yaXphdGlvbkhlYWRlcjogc3RyaW5nKTogQXV0aFRva2VuSGVhZGVyIHtcbiAgY29uc3QgcGFydHMgPSBhdXRob3JpemF0aW9uSGVhZGVyLnNwbGl0KCcgJyk7XG4gIGNvbnN0IFtzY2hlbWUsIHRva2VuXSA9IHBhcnRzO1xuXG4gIHJldHVybiB7IHNjaGVtZSwgdG9rZW4gfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQmFzaWNQYXlsb2FkKGNyZWRlbnRpYWxzOiBzdHJpbmcpOiBCYXNpY1BheWxvYWQge1xuICBjb25zdCBpbmRleCA9IGNyZWRlbnRpYWxzLmluZGV4T2YoJzonKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHVzZXI6IHN0cmluZyA9IGNyZWRlbnRpYWxzLnNsaWNlKDAsIGluZGV4KTtcbiAgY29uc3QgcGFzc3dvcmQ6IHN0cmluZyA9IGNyZWRlbnRpYWxzLnNsaWNlKGluZGV4ICsgMSk7XG5cbiAgcmV0dXJuIHsgdXNlciwgcGFzc3dvcmQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQUVTQ3JlZGVudGlhbHMoYXV0aG9yaXphdGlvbkhlYWRlcjogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZykge1xuICBjb25zdCB7IHNjaGVtZSwgdG9rZW4gfSA9IHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb25IZWFkZXIpO1xuXG4gIC8vIGJhc2ljIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgZW5mb3JjZWRcbiAgaWYgKHNjaGVtZS50b1VwcGVyQ2FzZSgpID09PSBUT0tFTl9CQVNJQy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0KHRva2VuKS50b1N0cmluZygpO1xuXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICB9IGVsc2UgaWYgKHNjaGVtZS50b1VwcGVyQ2FzZSgpID09PSBUT0tFTl9CRUFSRVIudG9VcHBlckNhc2UoKSkge1xuICAgIGNvbnN0IHRva2VuQXNCdWZmZXIgPSBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0KHRva2VuKTtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IGFlc0RlY3J5cHQodG9rZW5Bc0J1ZmZlciwgc2VjcmV0KS50b1N0cmluZygndXRmOCcpO1xuXG4gICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBleHBpcmVSZWFzb25zOiBzdHJpbmdbXSA9IFsnSnNvbldlYlRva2VuRXJyb3InLCAnVG9rZW5FeHBpcmVkRXJyb3InXTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeUpXVFBheWxvYWQodG9rZW46IHN0cmluZywgc2VjcmV0OiBzdHJpbmcpOiBSZW1vdGVVc2VyIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkOiBSZW1vdGVVc2VyID0gdmVyaWZ5UGF5bG9hZCh0b2tlbiwgc2VjcmV0KTtcblxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vICMxNjggdGhpcyBjaGVjayBzaG91bGQgYmUgcmVtb3ZlZCBhcyBzb29uIEFFUyBlbmNyeXB0IGlzIHJlbW92ZWQuXG4gICAgaWYgKGV4cGlyZVJlYXNvbnMuaW5jbHVkZXMoZXJyb3IubmFtZSkpIHtcbiAgICAgIC8vIGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRoZSBqd3QgY29uZmlndXJhdGlvbiBpcyBlbmFibGVkIGFuZFxuICAgICAgLy8gb2xkIHRva2VucyBmYWlscyBzdGlsbCByZW1haW5zIGluIHVzYWdlLCB0aHVzXG4gICAgICAvLyB3ZSByZXR1cm4gYW4gYW5vbnltb3VzIHVzZXIgdG8gZm9yY2UgbG9nIGluLlxuICAgICAgcmV0dXJuIGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcbiAgICB9XG4gICAgdGhyb3cgRXJyb3JDb2RlLmdldENvZGUoSFRUUF9TVEFUVVMuVU5BVVRIT1JJWkVELCBlcnJvci5tZXNzYWdlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBdXRoSGVhZGVyVmFsaWQoYXV0aG9yaXphdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBhdXRob3JpemF0aW9uLnNwbGl0KCcgJykubGVuZ3RoID09PSAyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlkZGxld2FyZUNyZWRlbnRpYWxzKHNlY3VyaXR5OiBTZWN1cml0eSwgc2VjcmV0OiBzdHJpbmcsIGF1dGhvcml6YXRpb25IZWFkZXI6IHN0cmluZyk6IEF1dGhNaWRkbGV3YXJlUGF5bG9hZCB7XG4gIGlmIChpc0FFU0xlZ2FjeShzZWN1cml0eSkpIHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHBhcnNlQUVTQ3JlZGVudGlhbHMoYXV0aG9yaXphdGlvbkhlYWRlciwgc2VjcmV0KTtcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkQ3JlZGVudGlhbHMgPSBwYXJzZUJhc2ljUGF5bG9hZChjcmVkZW50aWFscyk7XG4gICAgaWYgKCFwYXJzZWRDcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWRDcmVkZW50aWFscztcbiAgfVxuICBjb25zdCB7IHNjaGVtZSwgdG9rZW4gfSA9IHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb25IZWFkZXIpO1xuXG4gIGlmIChfLmlzU3RyaW5nKHRva2VuKSAmJiBzY2hlbWUudG9VcHBlckNhc2UoKSA9PT0gVE9LRU5fQkVBUkVSLnRvVXBwZXJDYXNlKCkpIHtcbiAgICByZXR1cm4gdmVyaWZ5SldUUGF5bG9hZCh0b2tlbiwgc2VjcmV0KTtcbiAgfVxufVxuIl19
|
|
315
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC11dGlscy50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsInZhbGlkYXRlUGFzc3dvcmQiLCJwYXNzd29yZCIsIm1pbkxlbmd0aCIsIkRFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JEIiwibGVuZ3RoIiwiY3JlYXRlUmVtb3RlVXNlciIsIm5hbWUiLCJwbHVnaW5Hcm91cHMiLCJpc0dyb3VwVmFsaWQiLCJBcnJheSIsImlzQXJyYXkiLCJncm91cHMiLCJmcm9tIiwiU2V0IiwiY29uY2F0IiwiUk9MRVMiLCIkQUxMIiwiJEFVVEgiLCJERVBSRUNBVEVEX0FMTCIsIkRFUFJFQ0FURURfQVVUSCIsIkFMTCIsInJlYWxfZ3JvdXBzIiwiY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlciIsInVuZGVmaW5lZCIsIiRBTk9OWU1PVVMiLCJERVBSRUNBVEVEX0FOT05ZTU9VUyIsImFsbG93X2FjdGlvbiIsImFjdGlvbiIsInVzZXIiLCJwa2ciLCJjYWxsYmFjayIsImdyb3VwQWNjZXNzIiwiaGFzUGVybWlzc2lvbiIsInNvbWUiLCJncm91cCIsImluY2x1ZGVzIiwibG9nZ2VyIiwiaW5mbyIsInJlbW90ZSIsIkVycm9yQ29kZSIsImdldEZvcmJpZGRlbiIsImdldFVuYXV0aG9yaXplZCIsImhhbmRsZVNwZWNpYWxVbnB1Ymxpc2giLCJpc1VucHVibGlzaE1pc3NpbmciLCJfIiwiaXNOaWwiLCJoYXNHcm91cHMiLCJnZXREZWZhdWx0UGx1Z2lucyIsImF1dGhlbnRpY2F0ZSIsIl91c2VyIiwiX3Bhc3N3b3JkIiwiY2IiLCJBUElfRVJST1IiLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJhZGRfdXNlciIsImdldENvbmZsaWN0IiwiYWxsb3dfYWNjZXNzIiwiYWxsb3dfcHVibGlzaCIsImFsbG93X3VucHVibGlzaCIsImNyZWF0ZVNlc3Npb25Ub2tlbiIsInRlbkhvdXJzVGltZSIsImV4cGlyZXMiLCJEYXRlIiwibm93IiwiZGVmYXVsdFdlYlRva2VuT3B0aW9ucyIsInNpZ24iLCJleHBpcmVzSW4iLCJUSU1FX0VYUElSQVRJT05fMUgiLCJ2ZXJpZnkiLCJkZWZhdWx0QXBpVG9rZW5Db25mIiwibGVnYWN5IiwiZGVmYXVsdFVzZXJSYXRlTGltaXRpbmciLCJ3aW5kb3dNcyIsIm1heCIsImRlZmF1bHRTZWN1cml0eSIsIndlYiIsImFwaSIsImdldFNlY3VyaXR5IiwiY29uZmlnIiwic2VjdXJpdHkiLCJtZXJnZSIsImdldEF1dGhlbnRpY2F0ZWRNZXNzYWdlIiwiYnVpbGRVc2VyQnVmZmVyIiwiQnVmZmVyIiwiaXNBRVNMZWdhY3kiLCJqd3QiLCJnZXRBcGlUb2tlbiIsImF1dGgiLCJyZW1vdGVVc2VyIiwiYWVzUGFzc3dvcmQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFlc0VuY3J5cHQiLCJ0b1N0cmluZyIsImp3dEVuY3J5cHQiLCJwYXJzZUF1dGhUb2tlbkhlYWRlciIsImF1dGhvcml6YXRpb25IZWFkZXIiLCJwYXJ0cyIsInNwbGl0Iiwic2NoZW1lIiwidG9rZW4iLCJwYXJzZUJhc2ljUGF5bG9hZCIsImNyZWRlbnRpYWxzIiwiaW5kZXgiLCJpbmRleE9mIiwic2xpY2UiLCJwYXJzZUFFU0NyZWRlbnRpYWxzIiwic2VjcmV0IiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsIlRPS0VOX0JFQVJFUiIsInRva2VuQXNCdWZmZXIiLCJleHBpcmVSZWFzb25zIiwidmVyaWZ5SldUUGF5bG9hZCIsInBheWxvYWQiLCJlcnJvciIsImdldENvZGUiLCJIVFRQX1NUQVRVUyIsIlVOQVVUSE9SSVpFRCIsIm1lc3NhZ2UiLCJpc0F1dGhIZWFkZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMiLCJwYXJzZWRDcmVkZW50aWFscyIsImlzU3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBS0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFQSxNQUFNQSxLQUFLLEdB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RUFBNENILEtBQUssQ0FBQ0ksT0FBbEQsQ0FBTjtBQUNEO0FBQ0Y7O0FBRU0sU0FBU0MsaUJBQVQsQ0FBMkJDLGFBQTNCLEVBQTJEO0FBQ2hFLFNBQU9BLGFBQWEsQ0FBQ3ZCLEtBQWQsQ0FBb0IsR0FBcEIsRUFBeUI5RixNQUF6QixLQUFvQyxDQUEzQztBQUNEOztBQUVNLFNBQVNzSCx3QkFBVCxDQUFrQzNDLFFBQWxDLEVBQXNENEIsTUFBdEQsRUFBc0VYLG1CQUF0RSxFQUEwSDtBQUMvSCxNQUFJWixXQUFXLENBQUNMLFFBQUQsQ0FBZixFQUEyQjtBQUN6QixVQUFNdUIsV0FBVyxHQUFHSSxtQkFBbUIsQ0FBQ1YsbUJBQUQsRUFBc0JXLE1BQXRCLENBQXZDOztBQUNBLFFBQUksQ0FBQ0wsV0FBTCxFQUFrQjtBQUNoQjtBQUNEOztBQUVELFVBQU1xQixpQkFBaUIsR0FBR3RCLGlCQUFpQixDQUFDQyxXQUFELENBQTNDOztBQUNBLFFBQUksQ0FBQ3FCLGlCQUFMLEVBQXdCO0FBQ3RCO0FBQ0Q7O0FBRUQsV0FBT0EsaUJBQVA7QUFDRDs7QUFDRCxRQUFNO0FBQUV4QixJQUFBQSxNQUFGO0FBQVVDLElBQUFBO0FBQVYsTUFBb0JMLG9CQUFvQixDQUFDQyxtQkFBRCxDQUE5Qzs7QUFFQSxNQUFJcEQsZ0JBQUVnRixRQUFGLENBQVd4QixLQUFYLEtBQXFCRCxNQUFNLENBQUNTLFdBQVAsT0FBeUJFLHdCQUFhRixXQUFiLEVBQWxELEVBQThFO0FBQzVFLFdBQU9LLGdCQUFnQixDQUFDYixLQUFELEVBQVFPLE1BQVIsQ0FBdkI7QUFDRDtBQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGJ1aWxkRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgQVBJVG9rZW5PcHRpb25zLCBDYWxsYmFjaywgQ29uZmlnLCBJUGx1Z2luQXV0aCwgSldUT3B0aW9ucywgUGFja2FnZSwgUmVtb3RlVXNlciwgU2VjdXJpdHkgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IHsgQXV0aE1pZGRsZXdhcmVQYXlsb2FkLCBBdXRoVG9rZW5IZWFkZXIsIEJhc2ljUGF5bG9hZCwgQ29va2llU2Vzc2lvblRva2VuLCBJQXV0aFdlYlVJIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vbGliL2xvZ2dlcic7XG5pbXBvcnQgeyBBUElfRVJST1IsIERFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JELCBIVFRQX1NUQVRVUywgUk9MRVMsIFRJTUVfRVhQSVJBVElPTl8xSCwgVE9LRU5fQkFTSUMsIFRPS0VOX0JFQVJFUiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGFlc0RlY3J5cHQsIHZlcmlmeVBheWxvYWQgfSBmcm9tICcuL2NyeXB0by11dGlscyc7XG5pbXBvcnQgeyBFcnJvckNvZGUsIGNvbnZlcnRQYXlsb2FkVG9CYXNlNjQgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZGVidWcgPSBidWlsZERlYnVnKCd2ZXJkYWNjaW8nKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUGFzc3dvcmQoXG4gIHBhc3N3b3JkOiBzdHJpbmcsIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBtaW5MZW5ndGg6IG51bWJlciA9IERFRkFVTFRfTUlOX0xJTUlUX1BBU1NXT1JEXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBwYXNzd29yZCA9PT0gJ3N0cmluZycgJiYgcGFzc3dvcmQubGVuZ3RoID49IG1pbkxlbmd0aDtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBSZW1vdGVVc2VyIG9iamVjdFxuICogQHJldHVybiB7T2JqZWN0fSB7IG5hbWU6IHh4LCBwbHVnaW5Hcm91cHM6IFtdLCByZWFsX2dyb3VwczogW10gfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVtb3RlVXNlcihuYW1lOiBzdHJpbmcsIHBsdWdpbkdyb3Vwczogc3RyaW5nW10pOiBSZW1vdGVVc2VyIHtcbiAgY29uc3QgaXNHcm91cFZhbGlkOiBib29sZWFuID0gQXJyYXkuaXNBcnJheShwbHVnaW5Hcm91cHMpO1xuICBjb25zdCBncm91cHMgPSBBcnJheS5mcm9tKG5ldyBTZXQoKGlzR3JvdXBWYWxpZCA/IHBsdWdpbkdyb3VwcyA6IFtdKS5jb25jYXQoW1JPTEVTLiRBTEwsIFJPTEVTLiRBVVRILCBST0xFUy5ERVBSRUNBVEVEX0FMTCwgUk9MRVMuREVQUkVDQVRFRF9BVVRILCBST0xFUy5BTExdKSkpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZSxcbiAgICBncm91cHMsXG4gICAgcmVhbF9ncm91cHM6IHBsdWdpbkdyb3VwcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgYW4gYW5vbnltb3VzIHJlbW90ZSB1c2VyIGluIGNhc2Ugbm9uZSBpcyBsb2dnZWQgaW4uXG4gKiBAcmV0dXJuIHtPYmplY3R9IHsgbmFtZTogeHgsIGdyb3VwczogW10sIHJlYWxfZ3JvdXBzOiBbXSB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk6IFJlbW90ZVVzZXIge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IHVuZGVmaW5lZCxcbiAgICAvLyBncm91cHMgd2l0aG91dCAnJCcgYXJlIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQgZXZlbnR1YWxseVxuICAgIGdyb3VwczogW1JPTEVTLiRBTEwsIFJPTEVTLiRBTk9OWU1PVVMsIFJPTEVTLkRFUFJFQ0FURURfQUxMLCBST0xFUy5ERVBSRUNBVEVEX0FOT05ZTU9VU10sXG4gICAgcmVhbF9ncm91cHM6IFtdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dfYWN0aW9uKGFjdGlvbjogc3RyaW5nKTogRnVuY3Rpb24ge1xuICByZXR1cm4gZnVuY3Rpb24gKHVzZXI6IFJlbW90ZVVzZXIsIHBrZzogUGFja2FnZSwgY2FsbGJhY2s6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgZGVidWcoJ1thdXRoL2FsbG93X2FjdGlvbl06IHVzZXI6ICVvJywgdXNlcj8ubmFtZSk7XG4gICAgY29uc3QgeyBuYW1lLCBncm91cHMgfSA9IHVzZXI7XG4gICAgY29uc3QgZ3JvdXBBY2Nlc3MgPSBwa2dbYWN0aW9uXTtcbiAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gZ3JvdXBBY2Nlc3Muc29tZSgoZ3JvdXApID0+IG5hbWUgPT09IGdyb3VwIHx8IGdyb3Vwcy5pbmNsdWRlcyhncm91cCkpO1xuICAgIGRlYnVnKCdbYXV0aC9hbGxvd19hY3Rpb25dOiBoYXNQZXJtaXNzaW9uPyAlb30gZm9yIHVzZXI6ICVvJywgaGFzUGVybWlzc2lvbiwgdXNlcj8ubmFtZSk7XG5cbiAgICBpZiAoaGFzUGVybWlzc2lvbikge1xuICAgICAgbG9nZ2VyLmluZm8oeyByZW1vdGU6IHVzZXIubmFtZSB9LCBgYXV0aC9hbGxvd19hY3Rpb246IGFjY2VzcyBncmFudGVkIHRvOiBAe3VzZXJ9YCk7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGNhbGxiYWNrKEVycm9yQ29kZS5nZXRGb3JiaWRkZW4oYHVzZXIgJHtuYW1lfSBpcyBub3QgYWxsb3dlZCB0byAke2FjdGlvbn0gcGFja2FnZSAke3BrZy5uYW1lfWApKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soRXJyb3JDb2RlLmdldFVuYXV0aG9yaXplZChgYXV0aG9yaXphdGlvbiByZXF1aXJlZCB0byAke2FjdGlvbn0gcGFja2FnZSAke3BrZy5uYW1lfWApKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVNwZWNpYWxVbnB1Ymxpc2goKTogYW55IHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh1c2VyOiBSZW1vdGVVc2VyLCBwa2c6IFBhY2thZ2UsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGlvbiA9ICd1bnB1Ymxpc2gnO1xuICAgIC8vIHZlcmlmeSB3aGV0aGVyIHRoZSB1bnB1Ymxpc2ggcHJvcCBoYXMgYmVlbiBkZWZpbmVkXG4gICAgY29uc3QgaXNVbnB1Ymxpc2hNaXNzaW5nOiBib29sZWFuID0gXy5pc05pbChwa2dbYWN0aW9uXSk7XG4gICAgY29uc3QgaGFzR3JvdXBzOiBib29sZWFuID0gaXNVbnB1Ymxpc2hNaXNzaW5nID8gZmFsc2UgOiBwa2dbYWN0aW9uXS5sZW5ndGggPiAwO1xuICAgIGRlYnVnKCdmYWxsYmFjayB1bnB1Ymxpc2ggZm9yIEB7bmFtZX0gaGFzIGdyb3VwczogJW8gZm9yICVvJywgaGFzR3JvdXBzLCB1c2VyPy5uYW1lKTtcbiAgICBpZiAoaXNVbnB1Ymxpc2hNaXNzaW5nIHx8IGhhc0dyb3VwcyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBkZWJ1ZygnYWxsb3dfYWN0aW9uIGZvciAlbyBmb3IgJW8gaGFzIGdyb3VwczogJW8gZm9yICVvJywgYWN0aW9uLCB1c2VyPy5uYW1lLCBoYXNHcm91cHMsIHVzZXIpO1xuICAgIHJldHVybiBhbGxvd19hY3Rpb24oYWN0aW9uKSh1c2VyLCBwa2csIGNhbGxiYWNrKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRQbHVnaW5zKGxvZ2dlcjogYW55KTogSVBsdWdpbkF1dGg8Q29uZmlnPiB7XG4gIHJldHVybiB7XG4gICAgYXV0aGVudGljYXRlKF91c2VyOiBzdHJpbmcsIF9wYXNzd29yZDogc3RyaW5nLCBjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAgIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICAgICAgY2IoRXJyb3JDb2RlLmdldEZvcmJpZGRlbihBUElfRVJST1IuQkFEX1VTRVJOQU1FX1BBU1NXT1JEKSk7XG4gICAgfSxcblxuICAgIGFkZF91c2VyKF91c2VyOiBzdHJpbmcsIF9wYXNzd29yZDogc3RyaW5nLCBjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAgIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICAgICAgcmV0dXJuIGNiKEVycm9yQ29kZS5nZXRDb25mbGljdChBUElfRVJST1IuQkFEX1VTRVJOQU1FX1BBU1NXT1JEKSk7XG4gICAgfSxcblxuICAgIC8vIEZJWE1FOiBhbGxvd19hY3Rpb24gYW5kIGFsbG93X3B1Ymxpc2ggc2hvdWxkIGJlIGluIHRoZSBAdmVyZGFjY2lvL3R5cGVzXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGFsbG93X2FjY2VzczogYWxsb3dfYWN0aW9uKCdhY2Nlc3MnLCBsb2dnZXIpLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBhbGxvd19wdWJsaXNoOiBhbGxvd19hY3Rpb24oJ3B1Ymxpc2gnLCBsb2dnZXIpLFxuICAgIGFsbG93X3VucHVibGlzaDogaGFuZGxlU3BlY2lhbFVucHVibGlzaCgpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2Vzc2lvblRva2VuKCk6IENvb2tpZVNlc3Npb25Ub2tlbiB7XG4gIGNvbnN0IHRlbkhvdXJzVGltZSA9IDEwICogNjAgKiA2MCAqIDEwMDA7XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBucG1qcy5vcmcgc2V0cyAxMGggZXhwaXJlXG4gICAgZXhwaXJlczogbmV3IERhdGUoRGF0ZS5ub3coKSArIHRlbkhvdXJzVGltZSksXG4gIH07XG59XG5cbmNvbnN0IGRlZmF1bHRXZWJUb2tlbk9wdGlvbnM6IEpXVE9wdGlvbnMgPSB7XG4gIHNpZ246IHtcbiAgICAvLyBUaGUgZXhwaXJhdGlvbiB0b2tlbiBmb3IgdGhlIHdlYnNpdGUgaXMgMSBob3VyXG4gICAgZXhwaXJlc0luOiBUSU1FX0VYUElSQVRJT05fMUgsXG4gIH0sXG4gIHZlcmlmeToge30sXG59O1xuXG5jb25zdCBkZWZhdWx0QXBpVG9rZW5Db25mOiBBUElUb2tlbk9wdGlvbnMgPSB7XG4gIGxlZ2FjeTogdHJ1ZSxcbn07XG5cbi8vIHdlIGxpbWl0IG1heCAxMDAwIHJlcXVlc3QgcGVyIDE1IG1pbnV0ZXMgb24gdXNlciBlbmRwb2ludHNcbmV4cG9ydCBjb25zdCBkZWZhdWx0VXNlclJhdGVMaW1pdGluZyA9IHtcbiAgd2luZG93TXM6IDE1ICogNjAgKiAxMDAwLCAvLyAxNSBtaW51dGVzXG4gIG1heDogMTAwMCxcbn07XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0U2VjdXJpdHk6IFNlY3VyaXR5ID0ge1xuICB3ZWI6IGRlZmF1bHRXZWJUb2tlbk9wdGlvbnMsXG4gIGFwaTogZGVmYXVsdEFwaVRva2VuQ29uZixcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWN1cml0eShjb25maWc6IENvbmZpZyk6IFNlY3VyaXR5IHtcbiAgaWYgKF8uaXNOaWwoY29uZmlnLnNlY3VyaXR5KSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gXy5tZXJnZShkZWZhdWx0U2VjdXJpdHksIGNvbmZpZy5zZWN1cml0eSk7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFNlY3VyaXR5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRlZE1lc3NhZ2UodXNlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGB5b3UgYXJlIGF1dGhlbnRpY2F0ZWQgYXMgJyR7dXNlcn0nYDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVXNlckJ1ZmZlcihuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBCdWZmZXIge1xuICByZXR1cm4gQnVmZmVyLmZyb20oYCR7bmFtZX06JHtwYXNzd29yZH1gLCAndXRmOCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBRVNMZWdhY3koc2VjdXJpdHk6IFNlY3VyaXR5KTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgbGVnYWN5LCBqd3QgfSA9IHNlY3VyaXR5LmFwaTtcblxuICByZXR1cm4gXy5pc05pbChsZWdhY3kpID09PSBmYWxzZSAmJiBfLmlzTmlsKGp3dCkgJiYgbGVnYWN5ID09PSB0cnVlO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QXBpVG9rZW4oYXV0aDogSUF1dGhXZWJVSSwgY29uZmlnOiBDb25maWcsIHJlbW90ZVVzZXI6IFJlbW90ZVVzZXIsIGFlc1Bhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzZWN1cml0eTogU2VjdXJpdHkgPSBnZXRTZWN1cml0eShjb25maWcpO1xuICBpZiAoaXNBRVNMZWdhY3koc2VjdXJpdHkpKSB7XG4gICAgLy8gZmFsbGJhY2sgYWxsIGdvZXMgdG8gQUVTIGVuY3J5cHRpb25cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICAgIHJlc29sdmUoYXV0aC5hZXNFbmNyeXB0KGJ1aWxkVXNlckJ1ZmZlcihyZW1vdGVVc2VyLm5hbWUgYXMgc3RyaW5nLCBhZXNQYXNzd29yZCkpLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgfSk7XG4gIH1cbiAgLy8gaSBhbSB3aWxpbmcgdG8gdXNlIGhlcmUgXy5pc05pbCBidXQgZmxvdyBkb2VzIG5vdCBsaWtlIGl0IHlldC5cbiAgY29uc3QgeyBqd3QgfSA9IHNlY3VyaXR5LmFwaTtcblxuICBpZiAoand0ICYmIGp3dC5zaWduKSB7XG4gICAgcmV0dXJuIGF3YWl0IGF1dGguand0RW5jcnlwdChyZW1vdGVVc2VyLCBqd3Quc2lnbik7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgcmVzb2x2ZShhdXRoLmFlc0VuY3J5cHQoYnVpbGRVc2VyQnVmZmVyKHJlbW90ZVVzZXIubmFtZSBhcyBzdHJpbmcsIGFlc1Bhc3N3b3JkKSkudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUF1dGhUb2tlbkhlYWRlcihhdXRob3JpemF0aW9uSGVhZGVyOiBzdHJpbmcpOiBBdXRoVG9rZW5IZWFkZXIge1xuICBjb25zdCBwYXJ0cyA9IGF1dGhvcml6YXRpb25IZWFkZXIuc3BsaXQoJyAnKTtcbiAgY29uc3QgW3NjaGVtZSwgdG9rZW5dID0gcGFydHM7XG5cbiAgcmV0dXJuIHsgc2NoZW1lLCB0b2tlbiB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCYXNpY1BheWxvYWQoY3JlZGVudGlhbHM6IHN0cmluZyk6IEJhc2ljUGF5bG9hZCB7XG4gIGNvbnN0IGluZGV4ID0gY3JlZGVudGlhbHMuaW5kZXhPZignOicpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdXNlcjogc3RyaW5nID0gY3JlZGVudGlhbHMuc2xpY2UoMCwgaW5kZXgpO1xuICBjb25zdCBwYXNzd29yZDogc3RyaW5nID0gY3JlZGVudGlhbHMuc2xpY2UoaW5kZXggKyAxKTtcblxuICByZXR1cm4geyB1c2VyLCBwYXNzd29yZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBRVNDcmVkZW50aWFscyhhdXRob3JpemF0aW9uSGVhZGVyOiBzdHJpbmcsIHNlY3JldDogc3RyaW5nKSB7XG4gIGNvbnN0IHsgc2NoZW1lLCB0b2tlbiB9ID0gcGFyc2VBdXRoVG9rZW5IZWFkZXIoYXV0aG9yaXphdGlvbkhlYWRlcik7XG5cbiAgLy8gYmFzaWMgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBlbmZvcmNlZFxuICBpZiAoc2NoZW1lLnRvVXBwZXJDYXNlKCkgPT09IFRPS0VOX0JBU0lDLnRvVXBwZXJDYXNlKCkpIHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IGNvbnZlcnRQYXlsb2FkVG9CYXNlNjQodG9rZW4pLnRvU3RyaW5nKCk7XG5cbiAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gIH0gZWxzZSBpZiAoc2NoZW1lLnRvVXBwZXJDYXNlKCkgPT09IFRPS0VOX0JFQVJFUi50b1VwcGVyQ2FzZSgpKSB7XG4gICAgY29uc3QgdG9rZW5Bc0J1ZmZlciA9IGNvbnZlcnRQYXlsb2FkVG9CYXNlNjQodG9rZW4pO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYWVzRGVjcnlwdCh0b2tlbkFzQnVmZmVyLCBzZWNyZXQpLnRvU3RyaW5nKCd1dGY4Jyk7XG5cbiAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGV4cGlyZVJlYXNvbnM6IHN0cmluZ1tdID0gWydKc29uV2ViVG9rZW5FcnJvcicsICdUb2tlbkV4cGlyZWRFcnJvciddO1xuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5SldUUGF5bG9hZCh0b2tlbjogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZyk6IFJlbW90ZVVzZXIge1xuICB0cnkge1xuICAgIGNvbnN0IHBheWxvYWQ6IFJlbW90ZVVzZXIgPSB2ZXJpZnlQYXlsb2FkKHRva2VuLCBzZWNyZXQpO1xuXG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gIzE2OCB0aGlzIGNoZWNrIHNob3VsZCBiZSByZW1vdmVkIGFzIHNvb24gQUVTIGVuY3J5cHQgaXMgcmVtb3ZlZC5cbiAgICBpZiAoZXhwaXJlUmVhc29ucy5pbmNsdWRlcyhlcnJvci5uYW1lKSkge1xuICAgICAgLy8gaXQgbWlnaHQgYmUgcG9zc2libGUgdGhlIGp3dCBjb25maWd1cmF0aW9uIGlzIGVuYWJsZWQgYW5kXG4gICAgICAvLyBvbGQgdG9rZW5zIGZhaWxzIHN0aWxsIHJlbWFpbnMgaW4gdXNhZ2UsIHRodXNcbiAgICAgIC8vIHdlIHJldHVybiBhbiBhbm9ueW1vdXMgdXNlciB0byBmb3JjZSBsb2cgaW4uXG4gICAgICByZXR1cm4gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpO1xuICAgIH1cbiAgICB0aHJvdyBFcnJvckNvZGUuZ2V0Q29kZShIVFRQX1NUQVRVUy5VTkFVVEhPUklaRUQsIGVycm9yLm1lc3NhZ2UpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhIZWFkZXJWYWxpZChhdXRob3JpemF0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGF1dGhvcml6YXRpb24uc3BsaXQoJyAnKS5sZW5ndGggPT09IDI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMoc2VjdXJpdHk6IFNlY3VyaXR5LCBzZWNyZXQ6IHN0cmluZywgYXV0aG9yaXphdGlvbkhlYWRlcjogc3RyaW5nKTogQXV0aE1pZGRsZXdhcmVQYXlsb2FkIHtcbiAgaWYgKGlzQUVTTGVnYWN5KHNlY3VyaXR5KSkge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gcGFyc2VBRVNDcmVkZW50aWFscyhhdXRob3JpemF0aW9uSGVhZGVyLCBzZWNyZXQpO1xuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRDcmVkZW50aWFscyA9IHBhcnNlQmFzaWNQYXlsb2FkKGNyZWRlbnRpYWxzKTtcbiAgICBpZiAoIXBhcnNlZENyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlZENyZWRlbnRpYWxzO1xuICB9XG4gIGNvbnN0IHsgc2NoZW1lLCB0b2tlbiB9ID0gcGFyc2VBdXRoVG9rZW5IZWFkZXIoYXV0aG9yaXphdGlvbkhlYWRlcik7XG5cbiAgaWYgKF8uaXNTdHJpbmcodG9rZW4pICYmIHNjaGVtZS50b1VwcGVyQ2FzZSgpID09PSBUT0tFTl9CRUFSRVIudG9VcHBlckNhc2UoKSkge1xuICAgIHJldHVybiB2ZXJpZnlKV1RQYXlsb2FkKHRva2VuLCBzZWNyZXQpO1xuICB9XG59XG4iXX0=
|
package/build/lib/auth.js
CHANGED
|
@@ -516,7 +516,7 @@ class Auth {
|
|
|
516
516
|
groups
|
|
517
517
|
} = user;
|
|
518
518
|
const realGroupsValidated = _lodash.default.isNil(real_groups) ? [] : real_groups;
|
|
519
|
-
const groupedGroups = _lodash.default.isNil(groups) ? real_groups : groups.concat(realGroupsValidated);
|
|
519
|
+
const groupedGroups = _lodash.default.isNil(groups) ? real_groups : Array.from(new Set([...groups.concat(realGroupsValidated)]));
|
|
520
520
|
const payload = {
|
|
521
521
|
real_groups: realGroupsValidated,
|
|
522
522
|
name,
|
|
@@ -538,4 +538,4 @@ class Auth {
|
|
|
538
538
|
|
|
539
539
|
var _default = Auth;
|
|
540
540
|
exports.default = _default;
|
|
541
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsIkF1dGgiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImxvZ2dlciIsInNlY3JldCIsInBsdWdpbnMiLCJfbG9hZFBsdWdpbiIsIl9hcHBseURlZmF1bHRQbHVnaW5zIiwicGx1Z2luT3B0aW9ucyIsImF1dGgiLCJwbHVnaW4iLCJhdXRoZW50aWNhdGUiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwicHVzaCIsImNoYW5nZVBhc3N3b3JkIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIm5ld1Bhc3N3b3JkIiwiY2IiLCJ2YWxpZFBsdWdpbnMiLCJfIiwiZmlsdGVyIiwiaXNGdW5jdGlvbiIsImlzRW1wdHkiLCJFcnJvckNvZGUiLCJnZXRJbnRlcm5hbEVycm9yIiwiU1VQUE9SVF9FUlJPUlMiLCJQTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UiLCJpc05pbCIsImVyciIsInByb2ZpbGUiLCJlcnJvciIsImluZm8iLCJzbGljZSIsInNlbGYiLCJuZXh0Iiwic2hpZnQiLCJncm91cHMiLCJsZW5ndGgiLCJpc1N0cmluZyIsIlR5cGVFcnJvciIsImlzR3JvdXBWYWxpZCIsImlzQXJyYXkiLCJBUElfRVJST1IiLCJCQURfRk9STUFUX1VTRVJfR1JPVVAiLCJhZGRfdXNlciIsInVzZXIiLCJtZXRob2QiLCJ3YXJuIiwib2siLCJtZXNzYWdlIiwicGFja2FnZU5hbWUiLCJwYWNrYWdlVmVyc2lvbiIsImNhbGxiYWNrIiwicGtnQWxsb3dBY2NlcyIsIm5hbWUiLCJ2ZXJzaW9uIiwicGtnIiwiT2JqZWN0IiwiYXNzaWduIiwicGFja2FnZXMiLCJhbGxvd191bnB1Ymxpc2giLCJhcmd1bWVudHMiLCJpc0Vycm9yIiwiYXBpSldUbWlkZGxld2FyZSIsImhlbHBlcnMiLCJjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyIiwiY3JlYXRlUmVtb3RlVXNlciIsInJlcSIsInJlcyIsIl9uZXh0IiwicGF1c2UiLCJyZXN1bWUiLCJyZW1vdGVfdXNlciIsIl9pc1JlbW90ZVVzZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJoZWFkZXJzIiwiZ2V0QmFkUmVxdWVzdCIsIkJBRF9BVVRIX0hFQURFUiIsInNlY3VyaXR5IiwiX2hhbmRsZUFFU01pZGRsZXdhcmUiLCJfaGFuZGxlSldUQVBJTWlkZGxld2FyZSIsInNjaGVtZSIsInRva2VuIiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsImNyZWRlbnRpYWxzIiwidG9TdHJpbmciLCJnZXRGb3JiaWRkZW4iLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJpc1VuZGVmaW5lZCIsIndlYlVJSldUbWlkZGxld2FyZSIsInN0YXR1cyIsInN0YXR1c0NvZGUiLCJzZW5kIiwicmVwbGFjZSIsIlRPS0VOX0JFQVJFUiIsImp3dEVuY3J5cHQiLCJzaWduT3B0aW9ucyIsInJlYWxfZ3JvdXBzIiwicmVhbEdyb3Vwc1ZhbGlkYXRlZCIsImdyb3VwZWRHcm91cHMiLCJjb25jYXQiLCJwYXlsb2FkIiwiYWVzRW5jcnlwdCIsImJ1ZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQU1BOztBQUNBOztBQVlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsS0FBSyxHQUFHLG9CQUFXLGdCQUFYLENBQWQ7O0FBRUEsTUFBTUMsSUFBTixDQUE0QjtBQUdIO0FBR2hCQyxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBaUI7QUFDakMsU0FBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0MsTUFBTCxHQUFjQSxjQUFkO0FBQ0EsU0FBS0MsTUFBTCxHQUFjRixNQUFNLENBQUNFLE1BQXJCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtDLFdBQUwsQ0FBaUJKLE1BQWpCLENBQWY7O0FBQ0EsU0FBS0ssb0JBQUw7QUFDRDs7QUFFT0QsRUFBQUEsV0FBVyxDQUFDSixNQUFELEVBQXdDO0FBQ3pELFVBQU1NLGFBQWEsR0FBRztBQUNwQk4sTUFBQUEsTUFE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OUNEO0FBK0NEOztBQUVzQixRQUFWOEQsVUFBVSxDQUFDbkQsSUFBRCxFQUFtQm9ELFdBQW5CLEVBQWlFO0FBQ3RGLFVBQU07QUFBRUMsTUFBQUEsV0FBRjtBQUFlNUMsTUFBQUEsSUFBZjtBQUFxQmxCLE1BQUFBO0FBQXJCLFFBQWdDUyxJQUF0QztBQUNBLFVBQU1zRCxtQkFBbUIsR0FBR2hGLGdCQUFFUSxLQUFGLENBQVF1RSxXQUFSLElBQXVCLEVBQXZCLEdBQTRCQSxXQUF4RDtBQUNBLFVBQU1FLGFBQWEsR0FBR2pGLGdCQUFFUSxLQUFGLENBQVFTLE1BQVIsSUFBa0I4RCxXQUFsQixHQUFnQzlELE1BQU0sQ0FBQ2lFLE1BQVAsQ0FBY0YsbUJBQWQsQ0FBdEQ7QUFDQSxVQUFNRyxPQUFtQixHQUFHO0FBQzFCSixNQUFBQSxXQUFXLEVBQUVDLG1CQURhO0FBRTFCN0MsTUFBQUEsSUFGMEI7QUFHMUJsQixNQUFBQSxNQUFNLEVBQUVnRTtBQUhrQixLQUE1QjtBQU1BLFVBQU1sQixLQUFhLEdBQUcsTUFBTSw4QkFBWW9CLE9BQVosRUFBcUIsS0FBS3BHLE1BQTFCLEVBQWtDK0YsV0FBbEMsQ0FBNUI7QUFFQSxXQUFPZixLQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7OztBQUNTcUIsRUFBQUEsVUFBVSxDQUFDQyxHQUFELEVBQXNCO0FBQ3JDLFdBQU8sNkJBQVdBLEdBQVgsRUFBZ0IsS0FBS3RHLE1BQXJCLENBQVA7QUFDRDs7QUExWnlCOztlQTZaYkosSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgVmVyZGFjY2lvRXJyb3IgfSBmcm9tICdAdmVyZGFjY2lvL2NvbW1vbnMtYXBpJztcbmltcG9ydCB7IEFsbG93QWNjZXNzLCBBdXRoUGx1Z2luUGFja2FnZSwgQ2FsbGJhY2ssIENvbmZpZywgSVBsdWdpbkF1dGgsIEpXVFNpZ25PcHRpb25zLCBMb2dnZXIsIFBhY2thZ2VBY2Nlc3MsIFJlbW90ZVVzZXIsIFNlY3VyaXR5IH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7ICRSZXF1ZXN0RXh0ZW5kLCAkUmVzcG9uc2VFeHRlbmQsIEFFU1BheWxvYWQsIElBdXRoIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IGxvYWRQbHVnaW4gZnJvbSAnLi4vbGliL3BsdWdpbi1sb2FkZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcixcbiAgY3JlYXRlUmVtb3RlVXNlcixcbiAgZ2V0RGVmYXVsdFBsdWdpbnMsXG4gIGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyxcbiAgZ2V0U2VjdXJpdHksXG4gIGlzQUVTTGVnYWN5LFxuICBpc0F1dGhIZWFkZXJWYWxpZCxcbiAgcGFyc2VBdXRoVG9rZW5IZWFkZXIsXG4gIHBhcnNlQmFzaWNQYXlsb2FkLFxuICB2ZXJpZnlKV1RQYXlsb2FkLFxufSBmcm9tICcuL2F1dGgtdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyB9IGZyb20gJy4vY29uZmlnLXV0aWxzJztcbmltcG9ydCB7IEFQSV9FUlJPUiwgU1VQUE9SVF9FUlJPUlMsIFRPS0VOX0JBU0lDLCBUT0tFTl9CRUFSRVIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhZXNFbmNyeXB0LCBzaWduUGF5bG9hZCB9IGZyb20gJy4vY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEVycm9yQ29kZSwgY29udmVydFBheWxvYWRUb0Jhc2U2NCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2NpbzphdXRoJyk7XG5cbmNsYXNzIEF1dGggaW1wbGVtZW50cyBJQXV0aCB7XG4gIHB1YmxpYyBjb25maWc6IENvbmZpZztcbiAgcHVibGljIGxvZ2dlcjogTG9nZ2VyO1xuICBwdWJsaWMgc2VjcmV0OiBzdHJpbmc7IC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBwdWJsaWMgcGx1Z2luczogSVBsdWdpbkF1dGg8Q29uZmlnPltdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIHRoaXMuc2VjcmV0ID0gY29uZmlnLnNlY3JldDtcbiAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLl9sb2FkUGx1Z2luKGNvbmZpZyk7XG4gICAgdGhpcy5fYXBwbHlEZWZhdWx0UGx1Z2lucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZFBsdWdpbihjb25maWc6IENvbmZpZyk6IElQbHVnaW5BdXRoPENvbmZpZz5bXSB7XG4gICAgY29uc3QgcGx1Z2luT3B0aW9ucyA9IHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgfTtcblxuICAgIHJldHVybiBsb2FkUGx1Z2luPElQbHVnaW5BdXRoPENvbmZpZz4+KGNvbmZpZywgY29uZmlnLmF1dGgsIHBsdWdpbk9wdGlvbnMsIChwbHVnaW46IElQbHVnaW5BdXRoPENvbmZpZz4pOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgYXV0aGVudGljYXRlLCBhbGxvd19hY2Nlc3MsIGFsbG93X3B1Ymxpc2ggfSA9IHBsdWdpbjtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBhdXRoZW50aWNhdGUgfHwgYWxsb3dfYWNjZXNzIHx8IGFsbG93X3B1Ymxpc2g7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseURlZmF1bHRQbHVnaW5zKCk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2lucy5wdXNoKGdldERlZmF1bHRQbHVnaW5zKHRoaXMubG9nZ2VyKSk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlUGFzc3dvcmQoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICBuZXdQYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICBjYjogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRQbHVnaW5zID0gXy5maWx0ZXIodGhpcy5wbHVnaW5zLCAocGx1Z2luKSA9PiBfLmlzRnVuY3Rpb24ocGx1Z2luLmNoYW5nZVBhc3N3b3JkKSk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KHZhbGlkUGx1Z2lucykpIHtcbiAgICAgIHJldHVybiBjYihFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihTVVBQT1JUX0VSUk9SUy5QTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB2YWxpZFBsdWdpbnMpIHtcbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5jaGFuZ2VQYXNzd29yZCkgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlYnVnKCdhdXRoIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgY2hhbmdlUGFzc3dvcmQsIHRyeWluZyBuZXh0IG9uZScpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYnVnKCd1cGRhdGluZyBwYXNzd29yZCBmb3IgJW8nLCB1c2VybmFtZSk7XG4gICAgICAgIHBsdWdpbi5jaGFuZ2VQYXNzd29yZCEodXNlcm5hbWUsIHBhc3N3b3JkLCBuZXdQYXNzd29yZCwgKGVyciwgcHJvZmlsZSk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICB7IHVzZXJuYW1lLCBlcnIgfSxcbiAgICAgICAgICAgICAgYEFuIGVycm9yIGhhcyBiZWVuIHByb2R1Y2VkXG4gICAgICAgICAgICB1cGRhdGluZyB0aGUgcGFzc3dvcmQgZm9yIEB7dXNlcm5hbWV9LiBFcnJvcjogQHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oeyB1c2VybmFtZSB9LCAndXBkYXRlZCBwYXNzd29yZCBmb3IgQHt1c2VybmFtZX0gd2FzIHN1Y2Nlc3NmdWwnKTtcbiAgICAgICAgICByZXR1cm4gY2IobnVsbCwgcHJvZmlsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhdXRoZW50aWNhdGUodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKSBhcyBJUGx1Z2luQXV0aDxDb25maWc+O1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihwbHVnaW4uYXV0aGVudGljYXRlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdhdXRoZW50aWNhdGluZyAlbycsIHVzZXJuYW1lKTtcbiAgICAgIHBsdWdpbi5hdXRoZW50aWNhdGUodXNlcm5hbWUsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBncm91cHMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgdXNlcm5hbWUsIGVyciB9LCAnYXV0aGVudGljYXRpbmcgZm9yIHVzZXIgQHt1c2VybmFtZX0gZmFpbGVkLiBFcnJvcjogQHtlcnIubWVzc2FnZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGVjdDogU0tJUCBpZiBncm91cHMgaXMgZmFsc2V5IGFuZCBub3QgYW4gYXJyYXlcbiAgICAgICAgLy8gICAgICAgICB3aXRoIGF0IGxlYXN0IG9uZSBpdGVtICh0cnV0aHkgbGVuZ3RoKVxuICAgICAgICAvLyBFeHBlY3Q6IENPTlRJTlVFIG90aGVyd2lzZSAod2lsbCBlcnJvciBpZiBncm91cHMgaXMgbm90XG4gICAgICAgIC8vICAgICAgICAgYW4gYXJyYXksIGJ1dCB0aGlzIGlzIGN1cnJlbnQgYmVoYXZpb3IpXG4gICAgICAgIC8vIENhdmVhdDogU1RSSU5HIChpZiB2YWxpZCkgd2lsbCBwYXNzIHN1Y2Nlc3NmdWxseVxuICAgICAgICAvLyAgICAgICAgIGJ1ZyBnaXZlIHVuZXhwZWN0ZWQgcmVzdWx0c1xuICAgICAgICAvLyBJbmZvOiBDYW5ub3QgdXNlIGA9PSBmYWxzZSB0byBjaGVjayBmYWxzZXkgdmFsdWVzYFxuICAgICAgICBpZiAoISFncm91cHMgJiYgZ3JvdXBzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIC8vIFRPRE86IGNyZWF0ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGV4cGVjdGF0aW9uc1xuICAgICAgICAgIGlmIChfLmlzU3RyaW5nKGdyb3VwcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbiBncm91cCBlcnJvcjogaW52YWxpZCB0eXBlIGZvciBmdW5jdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0dyb3VwVmFsaWQ6IGJvb2xlYW4gPSBfLmlzQXJyYXkoZ3JvdXBzKTtcbiAgICAgICAgICBpZiAoIWlzR3JvdXBWYWxpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihBUElfRVJST1IuQkFEX0ZPUk1BVF9VU0VSX0dST1VQKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVidWcoJ2F1dGhlbnRpY2F0aW9uIGZvciB1c2VyICVvIHdhcyBzdWNjZXNzZnVsbHkuIEdyb3VwczogJW8nLCB1c2VybmFtZSwgZ3JvdXBzKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyLCBjcmVhdGVSZW1vdGVVc2VyKHVzZXJuYW1lLCBncm91cHMpKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFkZF91c2VyKHVzZXI6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBkZWJ1ZygnYWRkIHVzZXIgJW8nLCB1c2VyKTtcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKSBhcyBJUGx1Z2luQXV0aDxDb25maWc+O1xuICAgICAgbGV0IG1ldGhvZCA9ICdhZGR1c2VyJztcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBtZXRob2QgPSAnYWRkX3VzZXInO1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKCd0aGUgcGx1Z2luIG1ldGhvZCBhZGRfdXNlciBpbiB0aGUgYXV0aCBwbHVnaW4gaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIG5leHQgbWFqb3IgcmVsZWFzZSwgbm90aWZ5IHRvIHRoZSBwbHVnaW4gYXV0aG9yJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwLmFkZF91c2VyKCkgZXhlY3V0aW9uXG4gICAgICAgIHBsdWdpblttZXRob2RdKHVzZXIsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBvayk6IHZvaWQge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgdXNlciwgZXJyOiBlcnIubWVzc2FnZSB9LCAndGhlIHVzZXIgQHt1c2VyfSBjb3VsZCBub3QgYmVpbmcgYWRkZWQuIEVycm9yOiBAe2Vycn0nKTtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oeyB1c2VyIH0sICd0aGUgdXNlciBAe3VzZXJ9IGhhcyBiZWVuIGFkZGVkJyk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5hdXRoZW50aWNhdGUodXNlciwgcGFzc3dvcmQsIGNiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHVzZXIgdG8gYWNjZXNzIGEgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyBhbGxvd19hY2Nlc3MoeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogQXV0aFBsdWdpblBhY2thZ2UsIHVzZXI6IFJlbW90ZVVzZXIsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnQWxsb3dBY2NlczogQWxsb3dBY2Nlc3MgPSB7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9O1xuICAgIGNvbnN0IHBrZyA9IE9iamVjdC5hc3NpZ24oe30sIHBrZ0FsbG93QWNjZXMsIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKSkgYXMgQWxsb3dBY2Nlc3MgJiBQYWNrYWdlQWNjZXNzO1xuICAgIGRlYnVnKCdhbGxvdyBhY2Nlc3MgZm9yICVvJywgcGFja2FnZU5hbWUpO1xuXG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW46IElQbHVnaW5BdXRoPENvbmZpZz4gPSBwbHVnaW5zLnNoaWZ0KCkgYXMgSVBsdWdpbkF1dGg8Q29uZmlnPjtcblxuICAgICAgaWYgKF8uaXNOaWwocGx1Z2luKSB8fCBfLmlzRnVuY3Rpb24ocGx1Z2luLmFsbG93X2FjY2VzcykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIHBsdWdpbi5hbGxvd19hY2Nlc3MhKHVzZXIsIHBrZywgZnVuY3Rpb24gKGVyciwgb2s6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgcGFja2FnZU5hbWUsIGVyciB9LCAnZm9yYmlkZGVuIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0uIEVycm9yOiBAe2Vyci5tZXNzYWdlfScpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lIH0sICdhbGxvd2VkIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpOyAvLyBjYihudWxsLCBmYWxzZSkgY2F1c2VzIG5leHQgcGx1Z2luIHRvIHJvbGxcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH1cblxuICBwdWJsaWMgYWxsb3dfdW5wdWJsaXNoKHsgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uIH06IEF1dGhQbHVnaW5QYWNrYWdlLCB1c2VyOiBSZW1vdGVVc2VyLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBwa2cgPSBPYmplY3QuYXNzaWduKHsgbmFtZTogcGFja2FnZU5hbWUsIHZlcnNpb246IHBhY2thZ2VWZXJzaW9uIH0sIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKSk7XG4gICAgZGVidWcoJ2FsbG93IHVucHVibGlzaCBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5wbHVnaW5zKSB7XG4gICAgICBpZiAoXy5pc05pbChwbHVnaW4pIHx8IF8uaXNGdW5jdGlvbihwbHVnaW4uYWxsb3dfdW5wdWJsaXNoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2FsbG93IHVucHVibGlzaCBmb3IgJW8gcGx1Z2luIGRvZXMgbm90IGltcGxlbWVudCBhbGxvd191bnB1Ymxpc2gnLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGx1Z2luLmFsbG93X3VucHVibGlzaCEodXNlciwgcGtnLCAoZXJyLCBvazogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKHsgcGFja2FnZU5hbWUsIHVzZXI6IHVzZXI/Lm5hbWUgfSwgJ0B7dXNlcn0gZm9yYmlkZGVuIHB1Ymxpc2ggZm9yIEB7cGFja2FnZU5hbWV9LCBpdCB3aWxsIGZhbGxiYWNrIG9uIHVucHVibGlzaCBwZXJtaXNzaW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF8uaXNOaWwob2spID09PSB0cnVlKSB7XG4gICAgICAgICAgICBkZWJ1Zygnd2UgYnlwYXNzIHVucHVibGlzaCBmb3IgJW8sIHB1Ymxpc2ggd2lsbCBoYW5kbGUgdGhlIGFjY2VzcycsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dfcHVibGlzaCguLi5hcmd1bWVudHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGFsbG93ZWQgdW5wdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG9rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1c2VyIHRvIHB1Ymxpc2ggYSBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIGFsbG93X3B1Ymxpc2goeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogQXV0aFBsdWdpblBhY2thZ2UsIHVzZXI6IFJlbW90ZVVzZXIsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9LCBnZXRNYXRjaGVkUGFja2FnZXNTcGVjKHBhY2thZ2VOYW1lLCB0aGlzLmNvbmZpZy5wYWNrYWdlcykpO1xuICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIGZvciAlbyBpbml0IHwgcGx1Z2luczogJW8nLCBwYWNrYWdlTmFtZSwgcGx1Z2lucyk7XG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLnNoaWZ0KCk7XG5cbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5hbGxvd19wdWJsaXNoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2FsbG93IHB1Ymxpc2ggZm9yICVvIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgYWxsb3dfcHVibGlzaCcsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcGx1Z2luLmFsbG93X3B1Ymxpc2godXNlciwgcGtnLCAoZXJyOiBWZXJkYWNjaW9FcnJvciwgb2s6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UgJiYgXy5pc0Vycm9yKGVycikpIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGlzIGZvcmJpZGRlbiBwdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGlzIGFsbG93ZWQgcHVibGlzaCBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIHNraXAgdmFsaWRhdGlvbiBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIG5leHQoKTsgLy8gY2IobnVsbCwgZmFsc2UpIGNhdXNlcyBuZXh0IHBsdWdpbiB0byByb2xsXG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFwaUpXVG1pZGRsZXdhcmUoKTogRnVuY3Rpb24ge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3QgaGVscGVycyA9IHsgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlciwgY3JlYXRlUmVtb3RlVXNlciB9O1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIGlmIChwbHVnaW4uYXBpSldUbWlkZGxld2FyZSkge1xuICAgICAgICByZXR1cm4gcGx1Z2luLmFwaUpXVG1pZGRsZXdhcmUoaGVscGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgX25leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgICAgcmVxLnBhdXNlKCk7XG5cbiAgICAgIGNvbnN0IG5leHQgPSBmdW5jdGlvbiAoZXJyOiBWZXJkYWNjaW9FcnJvciB8IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICAvLyB1bmNvbW1lbnQgdGhpcyB0byByZWplY3QgdXNlcnMgd2l0aCBiYWQgYXV0aCBoZWFkZXJzXG4gICAgICAgIC8vIHJldHVybiBfbmV4dC5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgICAgIC8vIHN3YWxsb3cgZXJyb3IsIHVzZXIgcmVtYWlucyB1bmF1dGhvcml6ZWRcbiAgICAgICAgLy8gc2V0IHJlbW90ZVVzZXJFcnJvciB0byBpbmRpY2F0ZSB0aGF0IHVzZXIgd2FzIGF0dGVtcHRpbmcgYXV0aGVudGljYXRpb25cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfbmV4dCgpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuX2lzUmVtb3RlVXNlclZhbGlkKHJlcS5yZW1vdGVfdXNlcikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaW4gY2FzZSBhdXRoIGhlYWRlciBkb2VzIG5vdCBleGlzdCB3ZSByZXR1cm4gYW5vbnltb3VzIGZ1bmN0aW9uXG4gICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG5cbiAgICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbiB9ID0gcmVxLmhlYWRlcnM7XG4gICAgICBpZiAoXy5pc05pbChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQXV0aEhlYWRlclZhbGlkKGF1dGhvcml6YXRpb24pKSB7XG4gICAgICAgIGRlYnVnKCdhcGkgbWlkZGxld2FyZSBhdXRoIGhlYXRoZXIgaXMgbm90IHZhbGlkJyk7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5CQURfQVVUSF9IRUFERVIpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VjdXJpdHk6IFNlY3VyaXR5ID0gZ2V0U2VjdXJpdHkodGhpcy5jb25maWcpO1xuICAgICAgY29uc3QgeyBzZWNyZXQgfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgICBpZiAoaXNBRVNMZWdhY3koc2VjdXJpdHkpKSB7XG4gICAgICAgIGRlYnVnKCdhcGkgbWlkZGxld2FyZSB1c2luZyBsZWdhY3kgYXV0aCB0b2tlbicpO1xuICAgICAgICB0aGlzLl9oYW5kbGVBRVNNaWRkbGV3YXJlKHJlcSwgc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbiwgbmV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygnYXBpIG1pZGRsZXdhcmUgdXNpbmcgSldUIGF1dGggdG9rZW4nKTtcbiAgICAgICAgdGhpcy5faGFuZGxlSldUQVBJTWlkZGxld2FyZShyZXEsIHNlY3VyaXR5LCBzZWNyZXQsIGF1dGhvcml6YXRpb24sIG5leHQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVKV1RBUElNaWRkbGV3YXJlKHJlcTogJFJlcXVlc3RFeHRlbmQsIHNlY3VyaXR5OiBTZWN1cml0eSwgc2VjcmV0OiBzdHJpbmcsIGF1dGhvcml6YXRpb246IHN0cmluZywgbmV4dDogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCB7IHNjaGVtZSwgdG9rZW4gfSA9IHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb24pO1xuICAgIGlmIChzY2hlbWUudG9VcHBlckNhc2UoKSA9PT0gVE9LRU5fQkFTSUMudG9VcHBlckNhc2UoKSkge1xuICAgICAgLy8gdGhpcyBzaG91bGQgaGFwcGVuIHdoZW4gY2xpZW50IHRyaWVzIHRvIGxvZ2luIHdpdGggYW4gZXhpc3RpbmcgdXNlclxuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0KHRva2VuKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgeyB1c2VyLCBwYXNzd29yZCB9ID0gcGFyc2VCYXNpY1BheWxvYWQoY3JlZGVudGlhbHMpIGFzIEFFU1BheWxvYWQ7XG4gICAgICB0aGlzLmF1dGhlbnRpY2F0ZSh1c2VyLCBwYXNzd29yZCwgKGVyciwgdXNlcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IHVzZXI7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcbiAgICAgICAgICBuZXh0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBqd3QgaGFuZGxlclxuICAgICAgY29uc3QgY3JlZGVudGlhbHM6IGFueSA9IGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyhzZWN1cml0eSwgc2VjcmV0LCBhdXRob3JpemF0aW9uKTtcbiAgICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgICAvLyBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkIHdlIHJlbHkgb24gaXRcbiAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlZGVudGlhbHM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdpdGggSldUIHRocm93IDQwMVxuICAgICAgICBuZXh0KEVycm9yQ29kZS5nZXRGb3JiaWRkZW4oQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUFFU01pZGRsZXdhcmUocmVxOiAkUmVxdWVzdEV4dGVuZCwgc2VjdXJpdHk6IFNlY3VyaXR5LCBzZWNyZXQ6IHN0cmluZywgYXV0aG9yaXphdGlvbjogc3RyaW5nLCBuZXh0OiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBhbnkgPSBnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMoc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbik7XG4gICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCB7IHVzZXIsIHBhc3N3b3JkIH0gPSBjcmVkZW50aWFscztcbiAgICAgIHRoaXMuYXV0aGVudGljYXRlKHVzZXIsIHBhc3N3b3JkLCAoZXJyLCB1c2VyKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gdXNlcjtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpO1xuICAgICAgICAgIG5leHQoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHdlIGZvcmNlIG5wbSBjbGllbnQgdG8gYXNrIGFnYWluIHdpdGggYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5CQURfQVVUSF9IRUFERVIpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1JlbW90ZVVzZXJWYWxpZChyZW1vdGVfdXNlcjogUmVtb3RlVXNlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBfLmlzVW5kZWZpbmVkKHJlbW90ZV91c2VyKSA9PT0gZmFsc2UgJiYgXy5pc1VuZGVmaW5lZChyZW1vdGVfdXNlci5uYW1lKSA9PT0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSldUIG1pZGRsZXdhcmUgZm9yIFdlYlVJXG4gICAqL1xuICBwdWJsaWMgd2ViVUlKV1RtaWRkbGV3YXJlKCk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBfbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5faXNSZW1vdGVVc2VyVmFsaWQocmVxLnJlbW90ZV91c2VyKSkge1xuICAgICAgICByZXR1cm4gX25leHQoKTtcbiAgICAgIH1cblxuICAgICAgcmVxLnBhdXNlKCk7XG4gICAgICBjb25zdCBuZXh0ID0gKGVycjogVmVyZGFjY2lvRXJyb3IgfCB2b2lkKTogdm9pZCA9PiB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1c0NvZGUpLnNlbmQoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9uZXh0KCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7IGF1dGhvcml6YXRpb24gfSA9IHJlcS5oZWFkZXJzO1xuICAgICAgaWYgKF8uaXNOaWwoYXV0aG9yaXphdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0F1dGhIZWFkZXJWYWxpZChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0QmFkUmVxdWVzdChBUElfRVJST1IuQkFEX0FVVEhfSEVBREVSKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gKGF1dGhvcml6YXRpb24gfHwgJycpLnJlcGxhY2UoYCR7VE9LRU5fQkVBUkVSfSBgLCAnJyk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBjcmVkZW50aWFscztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gdmVyaWZ5SldUUGF5bG9hZCh0b2tlbiwgdGhpcy5jb25maWcuc2VjcmV0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBGSVhNRTogaW50ZW5kZWQgYmVoYXZpb3VyLCBkbyB3ZSB3YW50IGl0P1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNSZW1vdGVVc2VyVmFsaWQoY3JlZGVudGlhbHMpKSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZ3JvdXBzIH0gPSBjcmVkZW50aWFscztcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVSZW1vdGVVc2VyKG5hbWUsIGdyb3Vwcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGp3dEVuY3J5cHQodXNlcjogUmVtb3RlVXNlciwgc2lnbk9wdGlvbnM6IEpXVFNpZ25PcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHJlYWxfZ3JvdXBzLCBuYW1lLCBncm91cHMgfSA9IHVzZXI7XG4gICAgY29uc3QgcmVhbEdyb3Vwc1ZhbGlkYXRlZCA9IF8uaXNOaWwocmVhbF9ncm91cHMpID8gW10gOiByZWFsX2dyb3VwcztcbiAgICBjb25zdCBncm91cGVkR3JvdXBzID0gXy5pc05pbChncm91cHMpID8gcmVhbF9ncm91cHMgOiBncm91cHMuY29uY2F0KHJlYWxHcm91cHNWYWxpZGF0ZWQpO1xuICAgIGNvbnN0IHBheWxvYWQ6IFJlbW90ZVVzZXIgPSB7XG4gICAgICByZWFsX2dyb3VwczogcmVhbEdyb3Vwc1ZhbGlkYXRlZCxcbiAgICAgIG5hbWUsXG4gICAgICBncm91cHM6IGdyb3VwZWRHcm91cHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHRva2VuOiBzdHJpbmcgPSBhd2FpdCBzaWduUGF5bG9hZChwYXlsb2FkLCB0aGlzLnNlY3JldCwgc2lnbk9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY3J5cHQgYSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgYWVzRW5jcnlwdChidWY6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIGFlc0VuY3J5cHQoYnVmLCB0aGlzLnNlY3JldCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXV0aDtcbiJdfQ==
|
|
541
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsIkF1dGgiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImxvZ2dlciIsInNlY3JldCIsInBsdWdpbnMiLCJfbG9hZFBsdWdpbiIsIl9hcHBseURlZmF1bHRQbHVnaW5zIiwicGx1Z2luT3B0aW9ucyIsImF1dGgiLCJwbHVnaW4iLCJhdXRoZW50aWNhdGUiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwicHVzaCIsImNoYW5nZVBhc3N3b3JkIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIm5ld1Bhc3N3b3JkIiwiY2IiLCJ2YWxpZFBsdWdpbnMiLCJfIiwiZmlsdGVyIiwiaXNGdW5jdGlvbiIsImlzRW1wdHkiLCJFcnJvckNvZGUiLCJnZXRJbnRlcm5hbEVycm9yIiwiU1VQUE9SVF9FUlJPUlMiLCJQTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UiLCJpc05pbCIsImVyciIsInByb2ZpbGUiLCJlcnJvciIsImluZm8iLCJzbGljZSIsInNlbGYiLCJuZXh0Iiwic2hpZnQiLCJncm91cHMiLCJsZW5ndGgiLCJpc1N0cmluZyIsIlR5cGVFcnJvciIsImlzR3JvdXBWYWxpZCIsImlzQXJyYXkiLCJBUElfRVJST1IiLCJCQURfRk9STUFUX1VTRVJfR1JPVVAiLCJhZGRfdXNlciIsInVzZXIiLCJtZXRob2QiLCJ3YXJuIiwib2siLCJtZXNzYWdlIiwicGFja2FnZU5hbWUiLCJwYWNrYWdlVmVyc2lvbiIsImNhbGxiYWNrIiwicGtnQWxsb3dBY2NlcyIsIm5hbWUiLCJ2ZXJzaW9uIiwicGtnIiwiT2JqZWN0IiwiYXNzaWduIiwicGFja2FnZXMiLCJhbGxvd191bnB1Ymxpc2giLCJhcmd1bWVudHMiLCJpc0Vycm9yIiwiYXBpSldUbWlkZGxld2FyZSIsImhlbHBlcnMiLCJjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyIiwiY3JlYXRlUmVtb3RlVXNlciIsInJlcSIsInJlcyIsIl9uZXh0IiwicGF1c2UiLCJyZXN1bWUiLCJyZW1vdGVfdXNlciIsIl9pc1JlbW90ZVVzZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJoZWFkZXJzIiwiZ2V0QmFkUmVxdWVzdCIsIkJBRF9BVVRIX0hFQURFUiIsInNlY3VyaXR5IiwiX2hhbmRsZUFFU01pZGRsZXdhcmUiLCJfaGFuZGxlSldUQVBJTWlkZGxld2FyZSIsInNjaGVtZSIsInRva2VuIiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsImNyZWRlbnRpYWxzIiwidG9TdHJpbmciLCJnZXRGb3JiaWRkZW4iLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJpc1VuZGVmaW5lZCIsIndlYlVJSldUbWlkZGxld2FyZSIsInN0YXR1cyIsInN0YXR1c0NvZGUiLCJzZW5kIiwicmVwbGFjZSIsIlRPS0VOX0JFQVJFUiIsImp3dEVuY3J5cHQiLCJzaWduT3B0aW9ucyIsInJlYWxfZ3JvdXBzIiwicmVhbEdyb3Vwc1ZhbGlkYXRlZCIsImdyb3VwZWRHcm91cHMiLCJBcnJheSIsImZyb20iLCJTZXQiLCJjb25jYXQiLCJwYXlsb2FkIiwiYWVzRW5jcnlwdCIsImJ1ZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQU1BOztBQUNBOztBQVlBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsS0FBSyxHQUFHLG9CQUFXLGdCQUFYLENBQWQ7O0FBRUEsTUFBTUMsSUFBTixDQUE0QjtBQUdIO0FBR2hCQyxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBaUI7QUFDakMsU0FBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0EsU0FBS0MsTUFBTCxHQUFjQSxjQUFkO0FBQ0EsU0FBS0MsTUFBTCxHQUFjRixNQUFNLENBQUNFLE1BQXJCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtDLFdBQUwsQ0FBaUJKLE1BQWpCLENBQWY7O0FBQ0EsU0FBS0ssb0JBQUw7QUFDRDs7QUFFT0QsRUFBQUEsV0FBVyxDQUFDSixNQUFELEVBQXdDO0FBQ3pELFVBQU1NLGFBQWEs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dEMsTUFBQUEsSUFBSTtBQUNMLEtBOUNEO0FBK0NEOztBQUVzQixRQUFWOEQsVUFBVSxDQUFDbkQsSUFBRCxFQUFtQm9ELFdBQW5CLEVBQWlFO0FBQ3RGLFVBQU07QUFBRUMsTUFBQUEsV0FBRjtBQUFlNUMsTUFBQUEsSUFBZjtBQUFxQmxCLE1BQUFBO0FBQXJCLFFBQWdDUyxJQUF0QztBQUNBLFVBQU1zRCxtQkFBbUIsR0FBR2hGLGdCQUFFUSxLQUFGLENBQVF1RSxXQUFSLElBQXVCLEVBQXZCLEdBQTRCQSxXQUF4RDtBQUNBLFVBQU1FLGFBQWEsR0FBR2pGLGdCQUFFUSxLQUFGLENBQVFTLE1BQVIsSUFBa0I4RCxXQUFsQixHQUFnQ0csS0FBSyxDQUFDQyxJQUFOLENBQVcsSUFBSUMsR0FBSixDQUFRLENBQUMsR0FBR25FLE1BQU0sQ0FBQ29FLE1BQVAsQ0FBY0wsbUJBQWQsQ0FBSixDQUFSLENBQVgsQ0FBdEQ7QUFDQSxVQUFNTSxPQUFtQixHQUFHO0FBQzFCUCxNQUFBQSxXQUFXLEVBQUVDLG1CQURhO0FBRTFCN0MsTUFBQUEsSUFGMEI7QUFHMUJsQixNQUFBQSxNQUFNLEVBQUVnRTtBQUhrQixLQUE1QjtBQU1BLFVBQU1sQixLQUFhLEdBQUcsTUFBTSw4QkFBWXVCLE9BQVosRUFBcUIsS0FBS3ZHLE1BQTFCLEVBQWtDK0YsV0FBbEMsQ0FBNUI7QUFFQSxXQUFPZixLQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7OztBQUNTd0IsRUFBQUEsVUFBVSxDQUFDQyxHQUFELEVBQXNCO0FBQ3JDLFdBQU8sNkJBQVdBLEdBQVgsRUFBZ0IsS0FBS3pHLE1BQXJCLENBQVA7QUFDRDs7QUExWnlCOztlQTZaYkosSSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgVmVyZGFjY2lvRXJyb3IgfSBmcm9tICdAdmVyZGFjY2lvL2NvbW1vbnMtYXBpJztcbmltcG9ydCB7IEFsbG93QWNjZXNzLCBBdXRoUGx1Z2luUGFja2FnZSwgQ2FsbGJhY2ssIENvbmZpZywgSVBsdWdpbkF1dGgsIEpXVFNpZ25PcHRpb25zLCBMb2dnZXIsIFBhY2thZ2VBY2Nlc3MsIFJlbW90ZVVzZXIsIFNlY3VyaXR5IH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7ICRSZXF1ZXN0RXh0ZW5kLCAkUmVzcG9uc2VFeHRlbmQsIEFFU1BheWxvYWQsIElBdXRoIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IGxvYWRQbHVnaW4gZnJvbSAnLi4vbGliL3BsdWdpbi1sb2FkZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcixcbiAgY3JlYXRlUmVtb3RlVXNlcixcbiAgZ2V0RGVmYXVsdFBsdWdpbnMsXG4gIGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyxcbiAgZ2V0U2VjdXJpdHksXG4gIGlzQUVTTGVnYWN5LFxuICBpc0F1dGhIZWFkZXJWYWxpZCxcbiAgcGFyc2VBdXRoVG9rZW5IZWFkZXIsXG4gIHBhcnNlQmFzaWNQYXlsb2FkLFxuICB2ZXJpZnlKV1RQYXlsb2FkLFxufSBmcm9tICcuL2F1dGgtdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyB9IGZyb20gJy4vY29uZmlnLXV0aWxzJztcbmltcG9ydCB7IEFQSV9FUlJPUiwgU1VQUE9SVF9FUlJPUlMsIFRPS0VOX0JBU0lDLCBUT0tFTl9CRUFSRVIgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBhZXNFbmNyeXB0LCBzaWduUGF5bG9hZCB9IGZyb20gJy4vY3J5cHRvLXV0aWxzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEVycm9yQ29kZSwgY29udmVydFBheWxvYWRUb0Jhc2U2NCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2NpbzphdXRoJyk7XG5cbmNsYXNzIEF1dGggaW1wbGVtZW50cyBJQXV0aCB7XG4gIHB1YmxpYyBjb25maWc6IENvbmZpZztcbiAgcHVibGljIGxvZ2dlcjogTG9nZ2VyO1xuICBwdWJsaWMgc2VjcmV0OiBzdHJpbmc7IC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICBwdWJsaWMgcGx1Z2luczogSVBsdWdpbkF1dGg8Q29uZmlnPltdO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb25maWc6IENvbmZpZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIHRoaXMuc2VjcmV0ID0gY29uZmlnLnNlY3JldDtcbiAgICB0aGlzLnBsdWdpbnMgPSB0aGlzLl9sb2FkUGx1Z2luKGNvbmZpZyk7XG4gICAgdGhpcy5fYXBwbHlEZWZhdWx0UGx1Z2lucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbG9hZFBsdWdpbihjb25maWc6IENvbmZpZyk6IElQbHVnaW5BdXRoPENvbmZpZz5bXSB7XG4gICAgY29uc3QgcGx1Z2luT3B0aW9ucyA9IHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgfTtcblxuICAgIHJldHVybiBsb2FkUGx1Z2luPElQbHVnaW5BdXRoPENvbmZpZz4+KGNvbmZpZywgY29uZmlnLmF1dGgsIHBsdWdpbk9wdGlvbnMsIChwbHVnaW46IElQbHVnaW5BdXRoPENvbmZpZz4pOiBib29sZWFuID0+IHtcbiAgICAgIGNvbnN0IHsgYXV0aGVudGljYXRlLCBhbGxvd19hY2Nlc3MsIGFsbG93X3B1Ymxpc2ggfSA9IHBsdWdpbjtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBhdXRoZW50aWNhdGUgfHwgYWxsb3dfYWNjZXNzIHx8IGFsbG93X3B1Ymxpc2g7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseURlZmF1bHRQbHVnaW5zKCk6IHZvaWQge1xuICAgIHRoaXMucGx1Z2lucy5wdXNoKGdldERlZmF1bHRQbHVnaW5zKHRoaXMubG9nZ2VyKSk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlUGFzc3dvcmQoXG4gICAgdXNlcm5hbWU6IHN0cmluZyxcbiAgICBwYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICBuZXdQYXNzd29yZDogc3RyaW5nLCAvLyBwcmFnbWE6IGFsbG93bGlzdCBzZWNyZXRcbiAgICBjYjogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdmFsaWRQbHVnaW5zID0gXy5maWx0ZXIodGhpcy5wbHVnaW5zLCAocGx1Z2luKSA9PiBfLmlzRnVuY3Rpb24ocGx1Z2luLmNoYW5nZVBhc3N3b3JkKSk7XG5cbiAgICBpZiAoXy5pc0VtcHR5KHZhbGlkUGx1Z2lucykpIHtcbiAgICAgIHJldHVybiBjYihFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihTVVBQT1JUX0VSUk9SUy5QTFVHSU5fTUlTU0lOR19JTlRFUkZBQ0UpKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB2YWxpZFBsdWdpbnMpIHtcbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5jaGFuZ2VQYXNzd29yZCkgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlYnVnKCdhdXRoIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgY2hhbmdlUGFzc3dvcmQsIHRyeWluZyBuZXh0IG9uZScpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYnVnKCd1cGRhdGluZyBwYXNzd29yZCBmb3IgJW8nLCB1c2VybmFtZSk7XG4gICAgICAgIHBsdWdpbi5jaGFuZ2VQYXNzd29yZCEodXNlcm5hbWUsIHBhc3N3b3JkLCBuZXdQYXNzd29yZCwgKGVyciwgcHJvZmlsZSk6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICB7IHVzZXJuYW1lLCBlcnIgfSxcbiAgICAgICAgICAgICAgYEFuIGVycm9yIGhhcyBiZWVuIHByb2R1Y2VkXG4gICAgICAgICAgICB1cGRhdGluZyB0aGUgcGFzc3dvcmQgZm9yIEB7dXNlcm5hbWV9LiBFcnJvcjogQHtlcnIubWVzc2FnZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oeyB1c2VybmFtZSB9LCAndXBkYXRlZCBwYXNzd29yZCBmb3IgQHt1c2VybmFtZX0gd2FzIHN1Y2Nlc3NmdWwnKTtcbiAgICAgICAgICByZXR1cm4gY2IobnVsbCwgcHJvZmlsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhdXRoZW50aWNhdGUodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKSBhcyBJUGx1Z2luQXV0aDxDb25maWc+O1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihwbHVnaW4uYXV0aGVudGljYXRlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdhdXRoZW50aWNhdGluZyAlbycsIHVzZXJuYW1lKTtcbiAgICAgIHBsdWdpbi5hdXRoZW50aWNhdGUodXNlcm5hbWUsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBncm91cHMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgdXNlcm5hbWUsIGVyciB9LCAnYXV0aGVudGljYXRpbmcgZm9yIHVzZXIgQHt1c2VybmFtZX0gZmFpbGVkLiBFcnJvcjogQHtlcnIubWVzc2FnZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGVjdDogU0tJUCBpZiBncm91cHMgaXMgZmFsc2V5IGFuZCBub3QgYW4gYXJyYXlcbiAgICAgICAgLy8gICAgICAgICB3aXRoIGF0IGxlYXN0IG9uZSBpdGVtICh0cnV0aHkgbGVuZ3RoKVxuICAgICAgICAvLyBFeHBlY3Q6IENPTlRJTlVFIG90aGVyd2lzZSAod2lsbCBlcnJvciBpZiBncm91cHMgaXMgbm90XG4gICAgICAgIC8vICAgICAgICAgYW4gYXJyYXksIGJ1dCB0aGlzIGlzIGN1cnJlbnQgYmVoYXZpb3IpXG4gICAgICAgIC8vIENhdmVhdDogU1RSSU5HIChpZiB2YWxpZCkgd2lsbCBwYXNzIHN1Y2Nlc3NmdWxseVxuICAgICAgICAvLyAgICAgICAgIGJ1ZyBnaXZlIHVuZXhwZWN0ZWQgcmVzdWx0c1xuICAgICAgICAvLyBJbmZvOiBDYW5ub3QgdXNlIGA9PSBmYWxzZSB0byBjaGVjayBmYWxzZXkgdmFsdWVzYFxuICAgICAgICBpZiAoISFncm91cHMgJiYgZ3JvdXBzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIC8vIFRPRE86IGNyZWF0ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGV4cGVjdGF0aW9uc1xuICAgICAgICAgIGlmIChfLmlzU3RyaW5nKGdyb3VwcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbiBncm91cCBlcnJvcjogaW52YWxpZCB0eXBlIGZvciBmdW5jdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0dyb3VwVmFsaWQ6IGJvb2xlYW4gPSBfLmlzQXJyYXkoZ3JvdXBzKTtcbiAgICAgICAgICBpZiAoIWlzR3JvdXBWYWxpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihBUElfRVJST1IuQkFEX0ZPUk1BVF9VU0VSX0dST1VQKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVidWcoJ2F1dGhlbnRpY2F0aW9uIGZvciB1c2VyICVvIHdhcyBzdWNjZXNzZnVsbHkuIEdyb3VwczogJW8nLCB1c2VybmFtZSwgZ3JvdXBzKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyLCBjcmVhdGVSZW1vdGVVc2VyKHVzZXJuYW1lLCBncm91cHMpKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFkZF91c2VyKHVzZXI6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBkZWJ1ZygnYWRkIHVzZXIgJW8nLCB1c2VyKTtcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKSBhcyBJUGx1Z2luQXV0aDxDb25maWc+O1xuICAgICAgbGV0IG1ldGhvZCA9ICdhZGR1c2VyJztcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBtZXRob2QgPSAnYWRkX3VzZXInO1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKCd0aGUgcGx1Z2luIG1ldGhvZCBhZGRfdXNlciBpbiB0aGUgYXV0aCBwbHVnaW4gaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIG5leHQgbWFqb3IgcmVsZWFzZSwgbm90aWZ5IHRvIHRoZSBwbHVnaW4gYXV0aG9yJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwLmFkZF91c2VyKCkgZXhlY3V0aW9uXG4gICAgICAgIHBsdWdpblttZXRob2RdKHVzZXIsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBvayk6IHZvaWQge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgdXNlciwgZXJyOiBlcnIubWVzc2FnZSB9LCAndGhlIHVzZXIgQHt1c2VyfSBjb3VsZCBub3QgYmVpbmcgYWRkZWQuIEVycm9yOiBAe2Vycn0nKTtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oeyB1c2VyIH0sICd0aGUgdXNlciBAe3VzZXJ9IGhhcyBiZWVuIGFkZGVkJyk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5hdXRoZW50aWNhdGUodXNlciwgcGFzc3dvcmQsIGNiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHVzZXIgdG8gYWNjZXNzIGEgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyBhbGxvd19hY2Nlc3MoeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogQXV0aFBsdWdpblBhY2thZ2UsIHVzZXI6IFJlbW90ZVVzZXIsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnQWxsb3dBY2NlczogQWxsb3dBY2Nlc3MgPSB7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9O1xuICAgIGNvbnN0IHBrZyA9IE9iamVjdC5hc3NpZ24oe30sIHBrZ0FsbG93QWNjZXMsIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKSkgYXMgQWxsb3dBY2Nlc3MgJiBQYWNrYWdlQWNjZXNzO1xuICAgIGRlYnVnKCdhbGxvdyBhY2Nlc3MgZm9yICVvJywgcGFja2FnZU5hbWUpO1xuXG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW46IElQbHVnaW5BdXRoPENvbmZpZz4gPSBwbHVnaW5zLnNoaWZ0KCkgYXMgSVBsdWdpbkF1dGg8Q29uZmlnPjtcblxuICAgICAgaWYgKF8uaXNOaWwocGx1Z2luKSB8fCBfLmlzRnVuY3Rpb24ocGx1Z2luLmFsbG93X2FjY2VzcykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIHBsdWdpbi5hbGxvd19hY2Nlc3MhKHVzZXIsIHBrZywgZnVuY3Rpb24gKGVyciwgb2s6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKHsgcGFja2FnZU5hbWUsIGVyciB9LCAnZm9yYmlkZGVuIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0uIEVycm9yOiBAe2Vyci5tZXNzYWdlfScpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lIH0sICdhbGxvd2VkIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpOyAvLyBjYihudWxsLCBmYWxzZSkgY2F1c2VzIG5leHQgcGx1Z2luIHRvIHJvbGxcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH1cblxuICBwdWJsaWMgYWxsb3dfdW5wdWJsaXNoKHsgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uIH06IEF1dGhQbHVnaW5QYWNrYWdlLCB1c2VyOiBSZW1vdGVVc2VyLCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBwa2cgPSBPYmplY3QuYXNzaWduKHsgbmFtZTogcGFja2FnZU5hbWUsIHZlcnNpb246IHBhY2thZ2VWZXJzaW9uIH0sIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKSk7XG4gICAgZGVidWcoJ2FsbG93IHVucHVibGlzaCBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdGhpcy5wbHVnaW5zKSB7XG4gICAgICBpZiAoXy5pc05pbChwbHVnaW4pIHx8IF8uaXNGdW5jdGlvbihwbHVnaW4uYWxsb3dfdW5wdWJsaXNoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2FsbG93IHVucHVibGlzaCBmb3IgJW8gcGx1Z2luIGRvZXMgbm90IGltcGxlbWVudCBhbGxvd191bnB1Ymxpc2gnLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGx1Z2luLmFsbG93X3VucHVibGlzaCEodXNlciwgcGtnLCAoZXJyLCBvazogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKHsgcGFja2FnZU5hbWUsIHVzZXI6IHVzZXI/Lm5hbWUgfSwgJ0B7dXNlcn0gZm9yYmlkZGVuIHB1Ymxpc2ggZm9yIEB7cGFja2FnZU5hbWV9LCBpdCB3aWxsIGZhbGxiYWNrIG9uIHVucHVibGlzaCBwZXJtaXNzaW9ucycpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF8uaXNOaWwob2spID09PSB0cnVlKSB7XG4gICAgICAgICAgICBkZWJ1Zygnd2UgYnlwYXNzIHVucHVibGlzaCBmb3IgJW8sIHB1Ymxpc2ggd2lsbCBoYW5kbGUgdGhlIGFjY2VzcycsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dfcHVibGlzaCguLi5hcmd1bWVudHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGFsbG93ZWQgdW5wdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG9rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1c2VyIHRvIHB1Ymxpc2ggYSBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIGFsbG93X3B1Ymxpc2goeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogQXV0aFBsdWdpblBhY2thZ2UsIHVzZXI6IFJlbW90ZVVzZXIsIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnID0gT2JqZWN0LmFzc2lnbih7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9LCBnZXRNYXRjaGVkUGFja2FnZXNTcGVjKHBhY2thZ2VOYW1lLCB0aGlzLmNvbmZpZy5wYWNrYWdlcykpO1xuICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIGZvciAlbyBpbml0IHwgcGx1Z2luczogJW8nLCBwYWNrYWdlTmFtZSwgcGx1Z2lucyk7XG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLnNoaWZ0KCk7XG5cbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5hbGxvd19wdWJsaXNoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2FsbG93IHB1Ymxpc2ggZm9yICVvIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgYWxsb3dfcHVibGlzaCcsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcGx1Z2luLmFsbG93X3B1Ymxpc2godXNlciwgcGtnLCAoZXJyOiBWZXJkYWNjaW9FcnJvciwgb2s6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UgJiYgXy5pc0Vycm9yKGVycikpIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcih7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGlzIGZvcmJpZGRlbiBwdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sICdAe3VzZXJ9IGlzIGFsbG93ZWQgcHVibGlzaCBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIHNraXAgdmFsaWRhdGlvbiBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIG5leHQoKTsgLy8gY2IobnVsbCwgZmFsc2UpIGNhdXNlcyBuZXh0IHBsdWdpbiB0byByb2xsXG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFwaUpXVG1pZGRsZXdhcmUoKTogRnVuY3Rpb24ge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3QgaGVscGVycyA9IHsgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlciwgY3JlYXRlUmVtb3RlVXNlciB9O1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIGlmIChwbHVnaW4uYXBpSldUbWlkZGxld2FyZSkge1xuICAgICAgICByZXR1cm4gcGx1Z2luLmFwaUpXVG1pZGRsZXdhcmUoaGVscGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgX25leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgICAgcmVxLnBhdXNlKCk7XG5cbiAgICAgIGNvbnN0IG5leHQgPSBmdW5jdGlvbiAoZXJyOiBWZXJkYWNjaW9FcnJvciB8IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICAvLyB1bmNvbW1lbnQgdGhpcyB0byByZWplY3QgdXNlcnMgd2l0aCBiYWQgYXV0aCBoZWFkZXJzXG4gICAgICAgIC8vIHJldHVybiBfbmV4dC5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgICAgIC8vIHN3YWxsb3cgZXJyb3IsIHVzZXIgcmVtYWlucyB1bmF1dGhvcml6ZWRcbiAgICAgICAgLy8gc2V0IHJlbW90ZVVzZXJFcnJvciB0byBpbmRpY2F0ZSB0aGF0IHVzZXIgd2FzIGF0dGVtcHRpbmcgYXV0aGVudGljYXRpb25cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfbmV4dCgpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuX2lzUmVtb3RlVXNlclZhbGlkKHJlcS5yZW1vdGVfdXNlcikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaW4gY2FzZSBhdXRoIGhlYWRlciBkb2VzIG5vdCBleGlzdCB3ZSByZXR1cm4gYW5vbnltb3VzIGZ1bmN0aW9uXG4gICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG5cbiAgICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbiB9ID0gcmVxLmhlYWRlcnM7XG4gICAgICBpZiAoXy5pc05pbChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQXV0aEhlYWRlclZhbGlkKGF1dGhvcml6YXRpb24pKSB7XG4gICAgICAgIGRlYnVnKCdhcGkgbWlkZGxld2FyZSBhdXRoIGhlYXRoZXIgaXMgbm90IHZhbGlkJyk7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5CQURfQVVUSF9IRUFERVIpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2VjdXJpdHk6IFNlY3VyaXR5ID0gZ2V0U2VjdXJpdHkodGhpcy5jb25maWcpO1xuICAgICAgY29uc3QgeyBzZWNyZXQgfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgICBpZiAoaXNBRVNMZWdhY3koc2VjdXJpdHkpKSB7XG4gICAgICAgIGRlYnVnKCdhcGkgbWlkZGxld2FyZSB1c2luZyBsZWdhY3kgYXV0aCB0b2tlbicpO1xuICAgICAgICB0aGlzLl9oYW5kbGVBRVNNaWRkbGV3YXJlKHJlcSwgc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbiwgbmV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygnYXBpIG1pZGRsZXdhcmUgdXNpbmcgSldUIGF1dGggdG9rZW4nKTtcbiAgICAgICAgdGhpcy5faGFuZGxlSldUQVBJTWlkZGxld2FyZShyZXEsIHNlY3VyaXR5LCBzZWNyZXQsIGF1dGhvcml6YXRpb24sIG5leHQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVKV1RBUElNaWRkbGV3YXJlKHJlcTogJFJlcXVlc3RFeHRlbmQsIHNlY3VyaXR5OiBTZWN1cml0eSwgc2VjcmV0OiBzdHJpbmcsIGF1dGhvcml6YXRpb246IHN0cmluZywgbmV4dDogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCB7IHNjaGVtZSwgdG9rZW4gfSA9IHBhcnNlQXV0aFRva2VuSGVhZGVyKGF1dGhvcml6YXRpb24pO1xuICAgIGlmIChzY2hlbWUudG9VcHBlckNhc2UoKSA9PT0gVE9LRU5fQkFTSUMudG9VcHBlckNhc2UoKSkge1xuICAgICAgLy8gdGhpcyBzaG91bGQgaGFwcGVuIHdoZW4gY2xpZW50IHRyaWVzIHRvIGxvZ2luIHdpdGggYW4gZXhpc3RpbmcgdXNlclxuICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0KHRva2VuKS50b1N0cmluZygpO1xuICAgICAgY29uc3QgeyB1c2VyLCBwYXNzd29yZCB9ID0gcGFyc2VCYXNpY1BheWxvYWQoY3JlZGVudGlhbHMpIGFzIEFFU1BheWxvYWQ7XG4gICAgICB0aGlzLmF1dGhlbnRpY2F0ZSh1c2VyLCBwYXNzd29yZCwgKGVyciwgdXNlcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IHVzZXI7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcbiAgICAgICAgICBuZXh0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBqd3QgaGFuZGxlclxuICAgICAgY29uc3QgY3JlZGVudGlhbHM6IGFueSA9IGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyhzZWN1cml0eSwgc2VjcmV0LCBhdXRob3JpemF0aW9uKTtcbiAgICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgICAvLyBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkIHdlIHJlbHkgb24gaXRcbiAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlZGVudGlhbHM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHdpdGggSldUIHRocm93IDQwMVxuICAgICAgICBuZXh0KEVycm9yQ29kZS5nZXRGb3JiaWRkZW4oQVBJX0VSUk9SLkJBRF9VU0VSTkFNRV9QQVNTV09SRCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUFFU01pZGRsZXdhcmUocmVxOiAkUmVxdWVzdEV4dGVuZCwgc2VjdXJpdHk6IFNlY3VyaXR5LCBzZWNyZXQ6IHN0cmluZywgYXV0aG9yaXphdGlvbjogc3RyaW5nLCBuZXh0OiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBhbnkgPSBnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMoc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbik7XG4gICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICBjb25zdCB7IHVzZXIsIHBhc3N3b3JkIH0gPSBjcmVkZW50aWFscztcbiAgICAgIHRoaXMuYXV0aGVudGljYXRlKHVzZXIsIHBhc3N3b3JkLCAoZXJyLCB1c2VyKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gdXNlcjtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpO1xuICAgICAgICAgIG5leHQoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHdlIGZvcmNlIG5wbSBjbGllbnQgdG8gYXNrIGFnYWluIHdpdGggYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5CQURfQVVUSF9IRUFERVIpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1JlbW90ZVVzZXJWYWxpZChyZW1vdGVfdXNlcjogUmVtb3RlVXNlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBfLmlzVW5kZWZpbmVkKHJlbW90ZV91c2VyKSA9PT0gZmFsc2UgJiYgXy5pc1VuZGVmaW5lZChyZW1vdGVfdXNlci5uYW1lKSA9PT0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSldUIG1pZGRsZXdhcmUgZm9yIFdlYlVJXG4gICAqL1xuICBwdWJsaWMgd2ViVUlKV1RtaWRkbGV3YXJlKCk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBfbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5faXNSZW1vdGVVc2VyVmFsaWQocmVxLnJlbW90ZV91c2VyKSkge1xuICAgICAgICByZXR1cm4gX25leHQoKTtcbiAgICAgIH1cblxuICAgICAgcmVxLnBhdXNlKCk7XG4gICAgICBjb25zdCBuZXh0ID0gKGVycjogVmVyZGFjY2lvRXJyb3IgfCB2b2lkKTogdm9pZCA9PiB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1c0NvZGUpLnNlbmQoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9uZXh0KCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7IGF1dGhvcml6YXRpb24gfSA9IHJlcS5oZWFkZXJzO1xuICAgICAgaWYgKF8uaXNOaWwoYXV0aG9yaXphdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0F1dGhIZWFkZXJWYWxpZChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0QmFkUmVxdWVzdChBUElfRVJST1IuQkFEX0FVVEhfSEVBREVSKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRva2VuID0gKGF1dGhvcml6YXRpb24gfHwgJycpLnJlcGxhY2UoYCR7VE9LRU5fQkVBUkVSfSBgLCAnJyk7XG4gICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBjcmVkZW50aWFscztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gdmVyaWZ5SldUUGF5bG9hZCh0b2tlbiwgdGhpcy5jb25maWcuc2VjcmV0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBGSVhNRTogaW50ZW5kZWQgYmVoYXZpb3VyLCBkbyB3ZSB3YW50IGl0P1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNSZW1vdGVVc2VyVmFsaWQoY3JlZGVudGlhbHMpKSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZ3JvdXBzIH0gPSBjcmVkZW50aWFscztcbiAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVSZW1vdGVVc2VyKG5hbWUsIGdyb3Vwcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG4gICAgICB9XG5cbiAgICAgIG5leHQoKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGp3dEVuY3J5cHQodXNlcjogUmVtb3RlVXNlciwgc2lnbk9wdGlvbnM6IEpXVFNpZ25PcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHJlYWxfZ3JvdXBzLCBuYW1lLCBncm91cHMgfSA9IHVzZXI7XG4gICAgY29uc3QgcmVhbEdyb3Vwc1ZhbGlkYXRlZCA9IF8uaXNOaWwocmVhbF9ncm91cHMpID8gW10gOiByZWFsX2dyb3VwcztcbiAgICBjb25zdCBncm91cGVkR3JvdXBzID0gXy5pc05pbChncm91cHMpID8gcmVhbF9ncm91cHMgOiBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLmdyb3Vwcy5jb25jYXQocmVhbEdyb3Vwc1ZhbGlkYXRlZCldKSk7XG4gICAgY29uc3QgcGF5bG9hZDogUmVtb3RlVXNlciA9IHtcbiAgICAgIHJlYWxfZ3JvdXBzOiByZWFsR3JvdXBzVmFsaWRhdGVkLFxuICAgICAgbmFtZSxcbiAgICAgIGdyb3VwczogZ3JvdXBlZEdyb3VwcyxcbiAgICB9O1xuXG4gICAgY29uc3QgdG9rZW46IHN0cmluZyA9IGF3YWl0IHNpZ25QYXlsb2FkKHBheWxvYWQsIHRoaXMuc2VjcmV0LCBzaWduT3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICAvKipcbiAgICogRW5jcnlwdCBhIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyBhZXNFbmNyeXB0KGJ1ZjogQnVmZmVyKTogQnVmZmVyIHtcbiAgICByZXR1cm4gYWVzRW5jcnlwdChidWYsIHRoaXMuc2VjcmV0KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdXRoO1xuIl19
|
package/conf/default.yaml
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
#
|
|
2
|
-
# This is the default
|
|
3
|
-
#
|
|
2
|
+
# This is the default configuration file. It allows all users to do anything,
|
|
3
|
+
# please read carefully the documentation and best practices to
|
|
4
|
+
# improve security.
|
|
4
5
|
#
|
|
5
6
|
# Look here for more config file examples:
|
|
6
|
-
# https://github.com/verdaccio/verdaccio/tree/
|
|
7
|
+
# https://github.com/verdaccio/verdaccio/tree/5.x/conf
|
|
7
8
|
#
|
|
9
|
+
# Read about the best practices
|
|
10
|
+
# https://verdaccio.org/docs/best
|
|
8
11
|
|
|
9
12
|
# path to a directory with all packages
|
|
10
13
|
storage: ./storage
|
|
11
14
|
# path to a directory with plugins to include
|
|
12
15
|
plugins: ./plugins
|
|
13
16
|
|
|
17
|
+
# https://verdaccio.org/docs/webui
|
|
14
18
|
web:
|
|
15
19
|
title: Verdaccio
|
|
16
20
|
# comment out to disable gravatar support
|
|
@@ -19,17 +23,32 @@ web:
|
|
|
19
23
|
# sort_packages: asc
|
|
20
24
|
# convert your UI to the dark side
|
|
21
25
|
# darkMode: true
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
#
|
|
27
|
-
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
#
|
|
26
|
+
# html_cache: true
|
|
27
|
+
# by default all features are displayed
|
|
28
|
+
# login: true
|
|
29
|
+
# showInfo: true
|
|
30
|
+
# showSettings: true
|
|
31
|
+
# In combination with darkMode you can force specific theme
|
|
32
|
+
# showThemeSwitch: true
|
|
33
|
+
# showFooter: true
|
|
34
|
+
# showSearch: true
|
|
35
|
+
# showRaw: true
|
|
36
|
+
# showDownloadTarball: true
|
|
37
|
+
# HTML tags injected after manifest <scripts/>
|
|
38
|
+
# scriptsBodyAfter:
|
|
39
|
+
# - '<script type="text/javascript" src="https://my.company.com/customJS.min.js"></script>'
|
|
40
|
+
# HTML tags injected before ends </head>
|
|
41
|
+
# metaScripts:
|
|
42
|
+
# - '<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>'
|
|
43
|
+
# - '<script type="text/javascript" src="https://browser.sentry-cdn.com/5.15.5/bundle.min.js"></script>'
|
|
44
|
+
# - '<meta name="robots" content="noindex" />'
|
|
45
|
+
# HTML tags injected first child at <body/>
|
|
46
|
+
# bodyBefore:
|
|
47
|
+
# - '<div id="myId">html before webpack scripts</div>'
|
|
48
|
+
# Public path for template manifest scripts (only manifest)
|
|
49
|
+
# publicPath: http://somedomain.org/
|
|
32
50
|
|
|
51
|
+
# https://verdaccio.org/docs/configuration#authentication
|
|
33
52
|
auth:
|
|
34
53
|
htpasswd:
|
|
35
54
|
file: ./htpasswd
|
|
@@ -37,11 +56,15 @@ auth:
|
|
|
37
56
|
# You can set this to -1 to disable registration.
|
|
38
57
|
# max_users: 1000
|
|
39
58
|
|
|
59
|
+
# https://verdaccio.org/docs/configuration#uplinks
|
|
40
60
|
# a list of other known repositories we can talk to
|
|
41
61
|
uplinks:
|
|
42
62
|
npmjs:
|
|
43
63
|
url: https://registry.npmjs.org/
|
|
44
64
|
|
|
65
|
+
# Learn how to protect your packages
|
|
66
|
+
# https://verdaccio.org/docs/protect-your-dependencies/
|
|
67
|
+
# https://verdaccio.org/docs/configuration#packages
|
|
45
68
|
packages:
|
|
46
69
|
'@*/*':
|
|
47
70
|
# scoped packages
|
|
@@ -66,16 +89,88 @@ packages:
|
|
|
66
89
|
# if package is not available locally, proxy requests to 'npmjs' registry
|
|
67
90
|
proxy: npmjs
|
|
68
91
|
|
|
92
|
+
# To improve your security configuration and avoid dependency confusion
|
|
93
|
+
# consider removing the proxy property for private packages
|
|
94
|
+
# https://verdaccio.org/docs/best#remove-proxy-to-increase-security-at-private-packages
|
|
95
|
+
|
|
96
|
+
# https://verdaccio.org/docs/configuration#server
|
|
69
97
|
# You can specify HTTP/1.1 server keep alive timeout in seconds for incoming connections.
|
|
70
98
|
# A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout.
|
|
71
99
|
# WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough.
|
|
72
100
|
server:
|
|
73
101
|
keepAliveTimeout: 60
|
|
74
102
|
|
|
103
|
+
# https://verdaccio.org/docs/configuration#offline-publish
|
|
104
|
+
# publish:
|
|
105
|
+
# allow_offline: false
|
|
106
|
+
|
|
107
|
+
# https://verdaccio.org/docs/configuration#url-prefix
|
|
108
|
+
# url_prefix: /verdaccio/
|
|
109
|
+
# VERDACCIO_PUBLIC_URL='https://somedomain.org';
|
|
110
|
+
# url_prefix: '/my_prefix'
|
|
111
|
+
# // url -> https://somedomain.org/my_prefix/
|
|
112
|
+
# VERDACCIO_PUBLIC_URL='https://somedomain.org';
|
|
113
|
+
# url_prefix: '/'
|
|
114
|
+
# // url -> https://somedomain.org/
|
|
115
|
+
# VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix';
|
|
116
|
+
# url_prefix: '/second_prefix'
|
|
117
|
+
# // url -> https://somedomain.org/second_prefix/'
|
|
118
|
+
|
|
119
|
+
# https://verdaccio.org/docs/configuration#security
|
|
120
|
+
# security:
|
|
121
|
+
# api:
|
|
122
|
+
# legacy: true
|
|
123
|
+
# jwt:
|
|
124
|
+
# sign:
|
|
125
|
+
# expiresIn: 29d
|
|
126
|
+
# verify:
|
|
127
|
+
# someProp: [value]
|
|
128
|
+
# web:
|
|
129
|
+
# sign:
|
|
130
|
+
# expiresIn: 1h # 1 hour by default
|
|
131
|
+
# verify:
|
|
132
|
+
# someProp: [value]
|
|
133
|
+
|
|
134
|
+
# https://verdaccio.org/docs/configuration#user-rate-limit
|
|
135
|
+
# userRateLimit:
|
|
136
|
+
# windowMs: 50000
|
|
137
|
+
# max: 1000
|
|
138
|
+
|
|
139
|
+
# https://verdaccio.org/docs/configuration#max-body-size
|
|
140
|
+
# max_body_size: 10mb
|
|
141
|
+
|
|
142
|
+
# https://verdaccio.org/docs/configuration#listen-port
|
|
143
|
+
# listen:
|
|
144
|
+
# - localhost:4873 # default value
|
|
145
|
+
# - http://localhost:4873 # same thing
|
|
146
|
+
# - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY)
|
|
147
|
+
# - https://example.org:4873 # if you want to use https
|
|
148
|
+
# - "[::1]:4873" # ipv6
|
|
149
|
+
# - unix:/tmp/verdaccio.sock # unix socket
|
|
150
|
+
|
|
151
|
+
# The HTTPS configuration is useful if you do not consider use a HTTP Proxy
|
|
152
|
+
# https://verdaccio.org/docs/configuration#https
|
|
153
|
+
# https:
|
|
154
|
+
# key: ./path/verdaccio-key.pem
|
|
155
|
+
# cert: ./path/verdaccio-cert.pem
|
|
156
|
+
# ca: ./path/verdaccio-csr.pem
|
|
157
|
+
|
|
158
|
+
# https://verdaccio.org/docs/configuration#proxy
|
|
159
|
+
# http_proxy: http://something.local/
|
|
160
|
+
# https_proxy: https://something.local/
|
|
161
|
+
|
|
162
|
+
# https://verdaccio.org/docs/configuration#notifications
|
|
163
|
+
# notify:
|
|
164
|
+
# method: POST
|
|
165
|
+
# headers: [{ "Content-Type": "application/json" }]
|
|
166
|
+
# endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
|
|
167
|
+
# content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
|
|
168
|
+
|
|
75
169
|
middlewares:
|
|
76
170
|
audit:
|
|
77
171
|
enabled: true
|
|
78
172
|
|
|
173
|
+
# https://verdaccio.org/docs/logger
|
|
79
174
|
# log settings
|
|
80
175
|
logs: { type: stdout, format: pretty, level: http }
|
|
81
176
|
#experiments:
|
|
@@ -91,6 +186,7 @@ logs: { type: stdout, format: pretty, level: http }
|
|
|
91
186
|
# return signedUrl;
|
|
92
187
|
# }
|
|
93
188
|
|
|
94
|
-
#
|
|
95
|
-
#i18n:
|
|
96
|
-
#
|
|
189
|
+
# translate your registry, api i18n not available yet
|
|
190
|
+
# i18n:
|
|
191
|
+
# list of the available translations https://github.com/verdaccio/verdaccio/blob/master/packages/plugins/ui-theme/src/i18n/ABOUT_TRANSLATIONS.md
|
|
192
|
+
# web: en-US
|
package/conf/docker.yaml
CHANGED
|
@@ -1,40 +1,58 @@
|
|
|
1
1
|
#
|
|
2
|
-
# This is the
|
|
3
|
-
#
|
|
2
|
+
# This is the default configuration file. It allows all users to do anything,
|
|
3
|
+
# please read carefully the documentation and best practices to
|
|
4
|
+
# improve security.
|
|
4
5
|
#
|
|
5
6
|
# Do not configure host and port under `listen` in this file
|
|
6
7
|
# as it will be ignored when using docker.
|
|
7
8
|
# see https://verdaccio.org/docs/en/docker#docker-and-custom-port-configuration
|
|
8
9
|
#
|
|
9
10
|
# Look here for more config file examples:
|
|
10
|
-
# https://github.com/verdaccio/verdaccio/tree/
|
|
11
|
+
# https://github.com/verdaccio/verdaccio/tree/5.x/conf
|
|
11
12
|
#
|
|
13
|
+
# Read about the best practices
|
|
14
|
+
# https://verdaccio.org/docs/best
|
|
12
15
|
|
|
13
16
|
# path to a directory with all packages
|
|
14
17
|
storage: /verdaccio/storage/data
|
|
15
18
|
# path to a directory with plugins to include
|
|
16
19
|
plugins: /verdaccio/plugins
|
|
17
20
|
|
|
21
|
+
# https://verdaccio.org/docs/webui
|
|
18
22
|
web:
|
|
19
|
-
# WebUI is enabled as default, if you want disable it, just uncomment this line
|
|
20
|
-
#enable: false
|
|
21
23
|
title: Verdaccio
|
|
22
24
|
# comment out to disable gravatar support
|
|
23
25
|
# gravatar: false
|
|
24
26
|
# by default packages are ordercer ascendant (asc|desc)
|
|
25
27
|
# sort_packages: asc
|
|
28
|
+
# convert your UI to the dark side
|
|
26
29
|
# darkMode: true
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
#
|
|
32
|
-
|
|
33
|
-
#
|
|
34
|
-
#
|
|
35
|
-
#
|
|
36
|
-
#
|
|
30
|
+
# html_cache: true
|
|
31
|
+
# by default all features are displayed
|
|
32
|
+
# login: true
|
|
33
|
+
# showInfo: true
|
|
34
|
+
# showSettings: true
|
|
35
|
+
# In combination with darkMode you can force specific theme
|
|
36
|
+
# showThemeSwitch: true
|
|
37
|
+
# showFooter: true
|
|
38
|
+
# showSearch: true
|
|
39
|
+
# showRaw: true
|
|
40
|
+
# showDownloadTarball: true
|
|
41
|
+
# HTML tags injected after manifest <scripts/>
|
|
42
|
+
# scriptsBodyAfter:
|
|
43
|
+
# - '<script type="text/javascript" src="https://my.company.com/customJS.min.js"></script>'
|
|
44
|
+
# HTML tags injected before ends </head>
|
|
45
|
+
# metaScripts:
|
|
46
|
+
# - '<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>'
|
|
47
|
+
# - '<script type="text/javascript" src="https://browser.sentry-cdn.com/5.15.5/bundle.min.js"></script>'
|
|
48
|
+
# - '<meta name="robots" content="noindex" />'
|
|
49
|
+
# HTML tags injected first child at <body/>
|
|
50
|
+
# bodyBefore:
|
|
51
|
+
# - '<div id="myId">html before webpack scripts</div>'
|
|
52
|
+
# Public path for template manifest scripts (only manifest)
|
|
53
|
+
# publicPath: http://somedomain.org/
|
|
37
54
|
|
|
55
|
+
# https://verdaccio.org/docs/configuration#authentication
|
|
38
56
|
auth:
|
|
39
57
|
htpasswd:
|
|
40
58
|
file: /verdaccio/storage/htpasswd
|
|
@@ -42,11 +60,15 @@ auth:
|
|
|
42
60
|
# You can set this to -1 to disable registration.
|
|
43
61
|
# max_users: 1000
|
|
44
62
|
|
|
63
|
+
# https://verdaccio.org/docs/configuration#uplinks
|
|
45
64
|
# a list of other known repositories we can talk to
|
|
46
65
|
uplinks:
|
|
47
66
|
npmjs:
|
|
48
67
|
url: https://registry.npmjs.org/
|
|
49
68
|
|
|
69
|
+
# Learn how to protect your packages
|
|
70
|
+
# https://verdaccio.org/docs/protect-your-dependencies/
|
|
71
|
+
# https://verdaccio.org/docs/configuration#packages
|
|
50
72
|
packages:
|
|
51
73
|
'@*/*':
|
|
52
74
|
# scoped packages
|
|
@@ -71,16 +93,88 @@ packages:
|
|
|
71
93
|
# if package is not available locally, proxy requests to 'npmjs' registry
|
|
72
94
|
proxy: npmjs
|
|
73
95
|
|
|
96
|
+
# To improve your security configuration and avoid dependency confusion
|
|
97
|
+
# consider removing the proxy property for private packages
|
|
98
|
+
# https://verdaccio.org/docs/best#remove-proxy-to-increase-security-at-private-packages
|
|
99
|
+
|
|
100
|
+
# https://verdaccio.org/docs/configuration#server
|
|
74
101
|
# You can specify HTTP/1.1 server keep alive timeout in seconds for incoming connections.
|
|
75
102
|
# A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout.
|
|
76
103
|
# WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough.
|
|
77
104
|
server:
|
|
78
105
|
keepAliveTimeout: 60
|
|
79
106
|
|
|
107
|
+
# https://verdaccio.org/docs/configuration#offline-publish
|
|
108
|
+
# publish:
|
|
109
|
+
# allow_offline: false
|
|
110
|
+
|
|
111
|
+
# https://verdaccio.org/docs/configuration#url-prefix
|
|
112
|
+
# url_prefix: /verdaccio/
|
|
113
|
+
# VERDACCIO_PUBLIC_URL='https://somedomain.org';
|
|
114
|
+
# url_prefix: '/my_prefix'
|
|
115
|
+
# // url -> https://somedomain.org/my_prefix/
|
|
116
|
+
# VERDACCIO_PUBLIC_URL='https://somedomain.org';
|
|
117
|
+
# url_prefix: '/'
|
|
118
|
+
# // url -> https://somedomain.org/
|
|
119
|
+
# VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix';
|
|
120
|
+
# url_prefix: '/second_prefix'
|
|
121
|
+
# // url -> https://somedomain.org/second_prefix/'
|
|
122
|
+
|
|
123
|
+
# https://verdaccio.org/docs/configuration#security
|
|
124
|
+
# security:
|
|
125
|
+
# api:
|
|
126
|
+
# legacy: true
|
|
127
|
+
# jwt:
|
|
128
|
+
# sign:
|
|
129
|
+
# expiresIn: 29d
|
|
130
|
+
# verify:
|
|
131
|
+
# someProp: [value]
|
|
132
|
+
# web:
|
|
133
|
+
# sign:
|
|
134
|
+
# expiresIn: 1h # 1 hour by default
|
|
135
|
+
# verify:
|
|
136
|
+
# someProp: [value]
|
|
137
|
+
|
|
138
|
+
# https://verdaccio.org/docs/configuration#user-rate-limit
|
|
139
|
+
# userRateLimit:
|
|
140
|
+
# windowMs: 50000
|
|
141
|
+
# max: 1000
|
|
142
|
+
|
|
143
|
+
# https://verdaccio.org/docs/configuration#max-body-size
|
|
144
|
+
# max_body_size: 10mb
|
|
145
|
+
|
|
146
|
+
# https://verdaccio.org/docs/configuration#listen-port
|
|
147
|
+
# listen:
|
|
148
|
+
# - localhost:4873 # default value
|
|
149
|
+
# - http://localhost:4873 # same thing
|
|
150
|
+
# - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY)
|
|
151
|
+
# - https://example.org:4873 # if you want to use https
|
|
152
|
+
# - "[::1]:4873" # ipv6
|
|
153
|
+
# - unix:/tmp/verdaccio.sock # unix socket
|
|
154
|
+
|
|
155
|
+
# The HTTPS configuration is useful if you do not consider use a HTTP Proxy
|
|
156
|
+
# https://verdaccio.org/docs/configuration#https
|
|
157
|
+
# https:
|
|
158
|
+
# key: ./path/verdaccio-key.pem
|
|
159
|
+
# cert: ./path/verdaccio-cert.pem
|
|
160
|
+
# ca: ./path/verdaccio-csr.pem
|
|
161
|
+
|
|
162
|
+
# https://verdaccio.org/docs/configuration#proxy
|
|
163
|
+
# http_proxy: http://something.local/
|
|
164
|
+
# https_proxy: https://something.local/
|
|
165
|
+
|
|
166
|
+
# https://verdaccio.org/docs/configuration#notifications
|
|
167
|
+
# notify:
|
|
168
|
+
# method: POST
|
|
169
|
+
# headers: [{ "Content-Type": "application/json" }]
|
|
170
|
+
# endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken
|
|
171
|
+
# content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}'
|
|
172
|
+
|
|
80
173
|
middlewares:
|
|
81
174
|
audit:
|
|
82
175
|
enabled: true
|
|
83
176
|
|
|
177
|
+
# https://verdaccio.org/docs/logger
|
|
84
178
|
# log settings
|
|
85
179
|
logs: { type: stdout, format: pretty, level: http }
|
|
86
180
|
#experiments:
|
|
@@ -94,6 +188,7 @@ logs: { type: stdout, format: pretty, level: http }
|
|
|
94
188
|
# return signedUrl;
|
|
95
189
|
# }
|
|
96
190
|
|
|
97
|
-
#
|
|
98
|
-
#i18n:
|
|
99
|
-
#
|
|
191
|
+
# translate your registry, api i18n not available yet
|
|
192
|
+
# i18n:
|
|
193
|
+
# list of the available translations https://github.com/verdaccio/verdaccio/blob/master/packages/plugins/ui-theme/src/i18n/ABOUT_TRANSLATIONS.md
|
|
194
|
+
# web: en-US
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "verdaccio",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.10.1",
|
|
4
4
|
"description": "A lightweight private npm proxy registry",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Verdaccio Maintainers",
|
|
@@ -19,18 +19,18 @@
|
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@verdaccio/commons-api": "10.2.0",
|
|
22
|
-
"@verdaccio/local-storage": "10.2.
|
|
23
|
-
"@verdaccio/readme": "10.3.
|
|
22
|
+
"@verdaccio/local-storage": "10.2.1",
|
|
23
|
+
"@verdaccio/readme": "10.3.3",
|
|
24
24
|
"@verdaccio/streams": "10.2.0",
|
|
25
|
-
"@verdaccio/ui-theme": "6.0.0-6-next.
|
|
25
|
+
"@verdaccio/ui-theme": "6.0.0-6-next.24",
|
|
26
26
|
"JSONStream": "1.3.5",
|
|
27
27
|
"async": "3.2.3",
|
|
28
|
-
"body-parser": "1.
|
|
28
|
+
"body-parser": "1.20.0",
|
|
29
29
|
"clipanion": "3.1.0",
|
|
30
30
|
"compression": "1.7.4",
|
|
31
31
|
"cookies": "0.8.0",
|
|
32
32
|
"cors": "2.8.5",
|
|
33
|
-
"dayjs": "1.
|
|
33
|
+
"dayjs": "1.11.1",
|
|
34
34
|
"debug": "^4.3.3",
|
|
35
35
|
"envinfo": "7.8.1",
|
|
36
36
|
"eslint-import-resolver-node": "0.3.6",
|
|
@@ -43,9 +43,9 @@
|
|
|
43
43
|
"jsonwebtoken": "8.5.1",
|
|
44
44
|
"kleur": "4.1.4",
|
|
45
45
|
"lodash": "4.17.21",
|
|
46
|
-
"lru-cache": "
|
|
46
|
+
"lru-cache": "7.8.1",
|
|
47
47
|
"lunr-mutable-indexes": "2.3.2",
|
|
48
|
-
"marked": "4.0.
|
|
48
|
+
"marked": "4.0.14",
|
|
49
49
|
"memoizee": "0.4.15",
|
|
50
50
|
"mime": "3.0.0",
|
|
51
51
|
"minimatch": "5.0.1",
|
|
@@ -56,35 +56,35 @@
|
|
|
56
56
|
"prettier-bytes": "^1.0.4",
|
|
57
57
|
"pretty-ms": "^7.0.1",
|
|
58
58
|
"request": "2.88.0",
|
|
59
|
-
"semver": "7.3.
|
|
59
|
+
"semver": "7.3.7",
|
|
60
60
|
"validator": "13.7.0",
|
|
61
|
-
"verdaccio-audit": "10.2.
|
|
61
|
+
"verdaccio-audit": "10.2.1",
|
|
62
62
|
"verdaccio-htpasswd": "10.3.0"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@babel/cli": "7.
|
|
66
|
-
"@babel/core": "7.
|
|
65
|
+
"@babel/cli": "7.17.6",
|
|
66
|
+
"@babel/core": "7.17.8",
|
|
67
67
|
"@babel/node": "7.16.8",
|
|
68
68
|
"@babel/plugin-proposal-class-properties": "7.16.7",
|
|
69
|
-
"@babel/plugin-proposal-decorators": "7.
|
|
69
|
+
"@babel/plugin-proposal-decorators": "7.17.8",
|
|
70
70
|
"@babel/plugin-proposal-export-namespace-from": "7.16.7",
|
|
71
71
|
"@babel/plugin-proposal-function-sent": "7.16.7",
|
|
72
72
|
"@babel/plugin-proposal-json-strings": "7.16.7",
|
|
73
73
|
"@babel/plugin-proposal-nullish-coalescing-operator": "7.16.7",
|
|
74
74
|
"@babel/plugin-proposal-numeric-separator": "7.16.7",
|
|
75
|
-
"@babel/plugin-proposal-object-rest-spread": "7.
|
|
75
|
+
"@babel/plugin-proposal-object-rest-spread": "7.17.3",
|
|
76
76
|
"@babel/plugin-proposal-optional-chaining": "7.16.7",
|
|
77
77
|
"@babel/plugin-proposal-throw-expressions": "7.16.7",
|
|
78
78
|
"@babel/plugin-syntax-dynamic-import": "7.8.3",
|
|
79
79
|
"@babel/plugin-syntax-import-meta": "7.10.4",
|
|
80
80
|
"@babel/plugin-transform-async-to-generator": "7.16.8",
|
|
81
81
|
"@babel/plugin-transform-classes": "7.16.7",
|
|
82
|
-
"@babel/plugin-transform-runtime": "7.
|
|
82
|
+
"@babel/plugin-transform-runtime": "7.17.0",
|
|
83
83
|
"@babel/polyfill": "^7.12.1",
|
|
84
84
|
"@babel/preset-env": "7.16.11",
|
|
85
85
|
"@babel/preset-typescript": "7.16.7",
|
|
86
|
-
"@babel/register": "7.
|
|
87
|
-
"@babel/runtime": "7.
|
|
86
|
+
"@babel/register": "7.17.7",
|
|
87
|
+
"@babel/runtime": "7.17.8",
|
|
88
88
|
"@commitlint/cli": "12.1.4",
|
|
89
89
|
"@commitlint/config-conventional": "12.1.4",
|
|
90
90
|
"@octokit/rest": "18.12.0",
|
|
@@ -95,7 +95,7 @@
|
|
|
95
95
|
"@types/express-serve-static-core": "4.17.28",
|
|
96
96
|
"@types/http-errors": "1.8.2",
|
|
97
97
|
"@types/jest": "26.0.24",
|
|
98
|
-
"@types/lodash": "4.14.
|
|
98
|
+
"@types/lodash": "4.14.182",
|
|
99
99
|
"@types/mime": "2.0.3",
|
|
100
100
|
"@types/minimatch": "3.0.5",
|
|
101
101
|
"@types/node": "14.14.37",
|
|
@@ -121,7 +121,7 @@
|
|
|
121
121
|
"eslint-plugin-jest": "24.7.0",
|
|
122
122
|
"eslint-plugin-simple-import-sort": "7.0.0",
|
|
123
123
|
"eslint-plugin-verdaccio": "9.6.1",
|
|
124
|
-
"fs-extra": "10.
|
|
124
|
+
"fs-extra": "10.1.0",
|
|
125
125
|
"husky": "6.0.0",
|
|
126
126
|
"jest": "26.6.3",
|
|
127
127
|
"jest-config": "26.6.3",
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
"selfsigned": "1.10.14",
|
|
139
139
|
"standard-version": "9.3.2",
|
|
140
140
|
"supertest": "6.2.2",
|
|
141
|
-
"ts-node": "10.
|
|
141
|
+
"ts-node": "10.7.0",
|
|
142
142
|
"typescript": "4.1.3",
|
|
143
143
|
"verdaccio-auth-memory": "10.2.0",
|
|
144
144
|
"verdaccio-memory": "10.2.0"
|