verdaccio 5.3.2 → 5.5.2
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 +56 -0
- package/CODE_OF_CONDUCT.md +10 -10
- package/CONTRIBUTING.md +28 -27
- package/README.md +6 -5
- package/SECURITY.md +8 -9
- package/build/api/debug/index.js +1 -1
- package/build/api/endpoint/api/dist-tags.js +4 -4
- package/build/api/endpoint/api/package.js +3 -3
- package/build/api/endpoint/api/ping.js +1 -1
- package/build/api/endpoint/api/publish.js +11 -11
- package/build/api/endpoint/api/star.js +5 -5
- package/build/api/endpoint/api/stars.js +1 -1
- package/build/api/endpoint/api/user.js +19 -9
- package/build/api/endpoint/api/v1/index.js +26 -0
- package/build/api/endpoint/api/v1/profile.js +13 -5
- package/build/api/endpoint/api/v1/search.js +4 -4
- package/build/api/endpoint/api/v1/token.js +20 -11
- package/build/api/endpoint/api/whoami.js +1 -1
- package/build/api/endpoint/index.js +11 -14
- package/build/api/index.js +23 -17
- package/build/api/middleware.js +6 -6
- package/build/api/rate-limiter.js +24 -0
- package/build/api/web/api.js +6 -18
- package/build/api/web/endpoint/index.js +51 -0
- package/build/api/web/endpoint/package.js +16 -11
- package/build/api/web/endpoint/search.js +9 -3
- package/build/api/web/endpoint/user.js +11 -5
- package/build/api/web/html/renderHTML.js +13 -9
- package/build/api/web/html/template.js +1 -1
- package/build/api/web/index.js +14 -11
- package/build/config/env.js +1 -1
- package/build/index.js +1 -1
- package/build/lib/auth-utils.js +15 -8
- package/build/lib/auth.js +7 -17
- package/build/lib/bootstrap.js +8 -8
- package/build/lib/cli/cli.js +3 -3
- package/build/lib/cli/commands/info.js +3 -3
- package/build/lib/cli/commands/init.js +3 -3
- package/build/lib/cli/commands/version.js +1 -1
- package/build/lib/cli/utils.js +3 -3
- package/build/lib/config-path.js +3 -3
- package/build/lib/config-utils.js +3 -3
- package/build/lib/config.js +16 -31
- package/build/lib/constants.js +5 -4
- package/build/lib/crypto-utils.js +3 -3
- package/build/lib/local-storage.js +7 -15
- package/build/lib/logger/formatter/index.js +1 -1
- package/build/lib/logger/formatter/prettifier.js +3 -3
- package/build/lib/logger/levels.js +1 -1
- package/build/lib/logger/logger.js +10 -6
- package/build/lib/logger/utils.js +1 -1
- package/build/lib/metadata-utils.js +3 -3
- package/build/lib/notify/index.js +3 -3
- package/build/lib/notify/notify-request.js +5 -5
- package/build/lib/plugin-loader.js +4 -4
- package/build/lib/search.js +2 -6
- package/build/lib/storage-utils.js +3 -3
- package/build/lib/storage.js +10 -22
- package/build/lib/up-storage.js +14 -45
- package/build/lib/uplink-util.js +1 -1
- package/build/lib/utils.js +32 -14
- package/build/utils/user.js +1 -1
- package/conf/README.md +3 -3
- package/conf/default.yaml +3 -1
- package/conf/docker.yaml +3 -1
- package/eslintrc.js +92 -92
- package/index.js +1 -1
- package/package.json +66 -59
- package/prettier.config.js +15 -0
- package/tsconfig.json +3 -10
- package/yarn-plugins/plugin-postinstall.js +10 -10
package/build/lib/up-storage.js
CHANGED
|
@@ -5,12 +5,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var _zlib = _interopRequireDefault(require("zlib"));
|
|
9
|
-
|
|
10
|
-
var _stream = _interopRequireDefault(require("stream"));
|
|
11
|
-
|
|
12
|
-
var _url = _interopRequireDefault(require("url"));
|
|
13
|
-
|
|
14
8
|
var _JSONStream = _interopRequireDefault(require("JSONStream"));
|
|
15
9
|
|
|
16
10
|
var _debug = _interopRequireDefault(require("debug"));
|
|
@@ -19,18 +13,22 @@ var _lodash = _interopRequireDefault(require("lodash"));
|
|
|
19
13
|
|
|
20
14
|
var _request = _interopRequireDefault(require("request"));
|
|
21
15
|
|
|
16
|
+
var _stream = _interopRequireDefault(require("stream"));
|
|
17
|
+
|
|
18
|
+
var _url = _interopRequireDefault(require("url"));
|
|
19
|
+
|
|
20
|
+
var _zlib = _interopRequireDefault(require("zlib"));
|
|
21
|
+
|
|
22
22
|
var _streams = require("@verdaccio/streams");
|
|
23
23
|
|
|
24
|
-
var
|
|
24
|
+
var _constants = require("./constants");
|
|
25
25
|
|
|
26
26
|
var _logger = require("./logger");
|
|
27
27
|
|
|
28
|
-
var
|
|
28
|
+
var _utils = require("./utils");
|
|
29
29
|
|
|
30
30
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
31
|
|
|
32
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
33
|
-
|
|
34
32
|
const debug = (0, _debug.default)('verdaccio:up-storage');
|
|
35
33
|
|
|
36
34
|
const encode = function (thing) {
|
|
@@ -65,40 +63,9 @@ class ProxyStorage {
|
|
|
65
63
|
* @param {*} mainConfig
|
|
66
64
|
*/
|
|
67
65
|
constructor(config, mainConfig) {
|
|
68
|
-
_defineProperty(this, "config", void 0);
|
|
69
|
-
|
|
70
|
-
_defineProperty(this, "failed_requests", void 0);
|
|
71
|
-
|
|
72
|
-
_defineProperty(this, "userAgent", void 0);
|
|
73
|
-
|
|
74
|
-
_defineProperty(this, "ca", void 0);
|
|
75
|
-
|
|
76
|
-
_defineProperty(this, "logger", void 0);
|
|
77
|
-
|
|
78
|
-
_defineProperty(this, "server_id", void 0);
|
|
79
|
-
|
|
80
|
-
_defineProperty(this, "url", void 0);
|
|
81
|
-
|
|
82
|
-
_defineProperty(this, "maxage", void 0);
|
|
83
|
-
|
|
84
|
-
_defineProperty(this, "timeout", void 0);
|
|
85
|
-
|
|
86
|
-
_defineProperty(this, "max_fails", void 0);
|
|
87
|
-
|
|
88
|
-
_defineProperty(this, "fail_timeout", void 0);
|
|
89
|
-
|
|
90
|
-
_defineProperty(this, "agent_options", void 0);
|
|
91
|
-
|
|
92
|
-
_defineProperty(this, "upname", void 0);
|
|
93
|
-
|
|
94
|
-
_defineProperty(this, "proxy", void 0);
|
|
95
|
-
|
|
96
|
-
_defineProperty(this, "last_request_time", void 0);
|
|
97
|
-
|
|
98
|
-
_defineProperty(this, "strict_ssl", void 0);
|
|
99
|
-
|
|
100
66
|
this.config = config;
|
|
101
|
-
this.failed_requests = 0;
|
|
67
|
+
this.failed_requests = 0; // @ts-ignore
|
|
68
|
+
|
|
102
69
|
this.userAgent = mainConfig.user_agent;
|
|
103
70
|
this.ca = config.ca;
|
|
104
71
|
this.logger = _logger.logger;
|
|
@@ -297,6 +264,8 @@ class ProxyStorage {
|
|
|
297
264
|
|
|
298
265
|
|
|
299
266
|
_setHeaders(options) {
|
|
267
|
+
var _options$req;
|
|
268
|
+
|
|
300
269
|
const headers = options.headers || {};
|
|
301
270
|
const accept = _constants.HEADERS.ACCEPT;
|
|
302
271
|
const acceptEncoding = _constants.HEADERS.ACCEPT_ENCODING;
|
|
@@ -304,7 +273,7 @@ class ProxyStorage {
|
|
|
304
273
|
headers[accept] = headers[accept] || contentTypeAccept;
|
|
305
274
|
headers[acceptEncoding] = headers[acceptEncoding] || 'gzip'; // registry.npmjs.org will only return search result if user-agent include string 'npm'
|
|
306
275
|
|
|
307
|
-
headers[userAgent] =
|
|
276
|
+
headers[userAgent] = this.userAgent ? `npm (${this.userAgent})` : (_options$req = options.req) === null || _options$req === void 0 ? void 0 : _options$req.get('user-agent');
|
|
308
277
|
return this._setAuth(headers);
|
|
309
278
|
}
|
|
310
279
|
/**
|
|
@@ -737,4 +706,4 @@ class ProxyStorage {
|
|
|
737
706
|
|
|
738
707
|
var _default = ProxyStorage;
|
|
739
708
|
exports.default = _default;
|
|
740
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXAtc3RvcmFnZS50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsImVuY29kZSIsInRoaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsImpzb25Db250ZW50VHlwZSIsIkhFQURFUlMiLCJKU09OIiwiY29udGVudFR5cGVBY2NlcHQiLCJzZXRDb25maWciLCJjb25maWciLCJrZXkiLCJkZWYiLCJfIiwiaXNOaWwiLCJQcm94eVN0b3JhZ2UiLCJjb25zdHJ1Y3RvciIsIm1haW5Db25maWciLCJmYWlsZWRfcmVxdWVzdHMiLCJ1c2VyQWdlbnQiLCJ1c2VyX2FnZW50IiwiY2EiLCJsb2dnZXIiLCJzZXJ2ZXJfaWQiLCJ1cmwiLCJVUkwiLCJwYXJzZSIsIl9zZXR1cFByb3h5IiwiaG9zdG5hbWUiLCJwcm90b2NvbCIsInRpbWVvdXQiLCJOdW1iZXIiLCJ3YXJuIiwiam9pbiIsIm1heGFnZSIsIm1heF9mYWlscyIsImZhaWxfdGltZW91dCIsInN0cmljdF9zc2wiLCJCb29sZWFuIiwiYWdlbnRfb3B0aW9ucyIsImtlZXBBbGl2ZSIsIm1heFNvY2tldHMiLCJtYXhGcmVlU29ja2V0cyIsInJlcXVlc3QiLCJvcHRpb25zIiwiY2IiLCJqc29uIiwiX3N0YXR1c0NoZWNrIiwic3RyZWFtUmVhZCIsIlN0cmVhbSIsIlJlYWRhYmxlIiwicHJvY2VzcyIsIm5leHRUaWNrIiwiRXJyb3JDb2RlIiwiZ2V0SW50ZXJuYWxFcnJvciIsIkFQSV9FUlJPUiIsIlVQTElOS19PRkZMSU5FIiwiZW1pdCIsIl9yZWFkIiwib24iLCJzZWxmIiwiaGVhZGVycyIsIl9zZXRIZWFkZXJzIiwiX2FkZFByb3h5SGVhZGVycyIsInJlcSIsIl9vdmVycmlkZVdpdGhVcExpbmtDb25mTG9jYWxpZ0hlYWRlcnMiLCJtZXRob2QiLCJ1cmkiLCJ1cmlfZnVsbCIsImluZm8iLCJzdHJpbmdpZnkiLCJyZXF1ZXN0Q2FsbGJhY2siLCJlcnIiLCJyZXMiLCJib2R5IiwiZXJyb3IiLCJyZXNwb25zZUxlbmd0aCIsImxlbmd0aCIsInByb2Nlc3NCb2R5IiwibG9nQWN0aXZpdHkiLCJtZXNzYWdlIiwic3RhdHVzQ29kZSIsInRvU3RyaW5nIiwiQ0hBUkFDVEVSX0VOQ09ESU5HIiwiVVRGOCIsIl9lcnIiLCJpc1N0cmluZyIsImh0dHAiLCJ1bmRlZmluZWQiLCJzdGF0dXMiLCJieXRlcyIsImluIiwib3V0IiwicmVxdWVzdE9wdGlvbnMiLCJwcm94eSIsImVuY29kaW5nIiwiZ3ppcCIsInN0cmljdFNTTCIsImFnZW50T3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsInN0YXR1c0NhbGxlZCIsIl92ZXJkYWNjaW9fYWJvcnRlZCIsImRvX2xvZyIsImlzTnVsbCIsImFjY2VwdCIsIkFDQ0VQVCIsImFjY2VwdEVuY29kaW5nIiwiQUNDRVBUX0VOQ09ESU5HIiwiVVNFUl9BR0VOVCIsIl9zZXRBdXRoIiwiYXV0aCIsIkFVVEhPUklaQVRJT04iLCJpc09iamVjdCIsInRva2VuIiwiX3Rocm93RXJyb3JBdXRoIiwidG9rZW5Db25mIiwidG9rZW5fZW52IiwiZW52IiwiaXNCb29sZWFuIiwiTlBNX1RPS0VOIiwiRVJST1JfQ09ERSIsInRva2VuX3JlcXVpcmVkIiwidHlwZSIsIlRPS0VOX0JBU0lDIiwiX3NldEhlYWRlckF1dGhvcml6YXRpb24iLCJFcnJvciIsIl90eXBlIiwidG9Mb3dlckNhc2UiLCJUT0tFTl9CRUFSRVIiLCJ1cHBlckZpcnN0IiwiaXNVcGxpbmtWYWxpZCIsInVybFBhcnNlZCIsImlzSFRUUFMiLCJ1cmxEb21haW5QYXJzZWQiLCJwb3J0IiwiZ2V0SG9zdCIsImhvc3QiLCJpc01hdGNoUHJvdG9jb2wiLCJpc01hdGNoSG9zdCIsImlzTWF0Y2hQYXRoIiwicGF0aCIsImluZGV4T2YiLCJnZXRSZW1vdGVNZXRhZGF0YSIsIm5hbWUiLCJjYWxsYmFjayIsImV0YWciLCJIVFRQX1NUQVRVUyIsIk5PVF9GT1VORCIsImdldE5vdEZvdW5kIiwiTk9UX1BBQ0tBR0VfVVBMSU5LIiwiT0siLCJNVUxUSVBMRV9DSE9JQ0VTIiwiQkFEX1NUQVRVU19DT0RFIiwicmVtb3RlU3RhdHVzIiwiZmV0Y2hUYXJiYWxsIiwic3RyZWFtIiwiUmVhZFRhcmJhbGwiLCJjdXJyZW50X2xlbmd0aCIsImV4cGVjdGVkX2xlbmd0aCIsImFib3J0IiwicmVhZFN0cmVhbSIsIkFjY2VwdCIsIk5PVF9GSUxFX1VQTElOSyIsIkhFQURFUl9UWVBFIiwiQ09OVEVOVF9MRU5HVEgiLCJwaXBlIiwiZGF0YSIsIkNPTlRFTlRfTUlTTUFUQ0giLCJzZWFyY2giLCJ0cmFuc2Zvcm1TdHJlYW0iLCJQYXNzVGhyb3VnaCIsIm9iamVjdE1vZGUiLCJyZXF1ZXN0U3RyZWFtIiwicmVmZXJlciIsImdldCIsInBhcnNlUGFja2FnZSIsInBrZyIsIlN0cmluZyIsIm1hdGNoIiwianNvblN0cmVhbSIsIkNPTlRFTlRfRU5DT0RJTkciLCJHWklQIiwiemxpYiIsImNyZWF0ZVVuemlwIiwiSlNPTlN0cmVhbSIsImNvbm5lY3Rpb24iLCJyZW1vdGVBZGRyZXNzIiwiYWxpdmUiLCJhcmd1bWVudHMiLCJfaWZSZXF1ZXN0RmFpbHVyZSIsImxhc3RfcmVxdWVzdF90aW1lIiwiRGF0ZSIsIm5vdyIsIk1hdGgiLCJhYnMiLCJtYWluY29uZmlnIiwibm9Qcm94eUxpc3QiLCJwcm94eV9rZXkiLCJub19wcm94eSIsInNwbGl0IiwiaXNBcnJheSIsImkiLCJub1Byb3h5SXRlbSIsImxhc3RJbmRleE9mIiwiaHJlZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUcsb0JBQVcsc0JBQVgsQ0FBZDs7QUFFQSxNQUFNQyxNQUFNLEdBQUcsVUFBVUMsS0FBVixFQUF5QjtBQUN0QyxTQUFPQyxrQkFBa0IsQ0FBQ0QsS0FBRCxDQUFsQixDQUEwQkUsT0FBMUIsQ0FBa0MsTUFBbEMsRUFBMEMsR0FB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QUMxQkEsVUFBQUEsV0FBVyxHQUFHLE1BQU1BLFdBQXBCO0FBQ0Q7O0FBQ0QsWUFBSS9LLFFBQVEsQ0FBQ2dMLFdBQVQsQ0FBcUJELFdBQXJCLE1BQXNDL0ssUUFBUSxDQUFDaUQsTUFBVCxHQUFrQjhILFdBQVcsQ0FBQzlILE1BQXhFLEVBQWdGO0FBQzlFLGNBQUksS0FBS2lCLEtBQVQsRUFBZ0I7QUFDZDlGLFlBQUFBLEtBQUssQ0FBQyw2Q0FBRCxFQUFnRCxLQUFLd0IsR0FBTCxDQUFTcUwsSUFBekQsRUFBK0RGLFdBQS9ELENBQUwsQ0FEYyxDQUVkOztBQUNBLGlCQUFLN0csS0FBTCxHQUFhLEtBQWI7QUFDRDs7QUFDRDtBQUNEO0FBQ0Y7QUFDRixLQTFDd0csQ0E0Q3pHOzs7QUFDQSxRQUFJakYsZ0JBQUV5RSxRQUFGLENBQVcsS0FBS1EsS0FBaEIsTUFBMkIsS0FBL0IsRUFBc0M7QUFDcEM7QUFDQSxhQUFPLEtBQUtBLEtBQVo7QUFDRCxLQUhELE1BR087QUFDTDlGLE1BQUFBLEtBQUssQ0FBQyx1QkFBRCxFQUEwQixLQUFLd0IsR0FBTCxDQUFTcUwsSUFBbkMsRUFBeUMsS0FBSy9HLEtBQTlDLENBQUw7QUFDRDtBQUNGOztBQTFvQmtDOztlQTZvQnRCL0UsWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB6bGliIGZyb20gJ3psaWInO1xuaW1wb3J0IFN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IFVSTCwgeyBVcmxXaXRoU3RyaW5nUXVlcnkgfSBmcm9tICd1cmwnO1xuaW1wb3J0IEpTT05TdHJlYW0gZnJvbSAnSlNPTlN0cmVhbSc7XG5pbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XG5pbXBvcnQgeyBSZWFkVGFyYmFsbCB9IGZyb20gJ0B2ZXJkYWNjaW8vc3RyZWFtcyc7XG5pbXBvcnQgeyBDb25maWcsIENhbGxiYWNrLCBIZWFkZXJzLCBMb2dnZXIsIFBhY2thZ2UgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcbmltcG9ydCB7IElQcm94eSwgVXBMaW5rQ29uZkxvY2FsIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VJbnRlcnZhbCwgaXNPYmplY3QsIEVycm9yQ29kZSwgYnVpbGRUb2tlbiwgaXNPYmplY3RPckFycmF5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBFUlJPUl9DT0RFLCBUT0tFTl9CQVNJQywgVE9LRU5fQkVBUkVSLCBIRUFERVJTLCBIVFRQX1NUQVRVUywgQVBJX0VSUk9SLCBIRUFERVJfVFlQRSwgQ0hBUkFDVEVSX0VOQ09ESU5HIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2Npbzp1cC1zdG9yYWdlJyk7XG5cbmNvbnN0IGVuY29kZSA9IGZ1bmN0aW9uICh0aGluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodGhpbmcpLnJlcGxhY2UoL14lNDAvLCAnQCcpO1xufTtcblxuY29uc3QganNvbkNvbnRlbnRUeXBlID0gSEVBREVSUy5KU09OO1xuY29uc3QgY29udGVudFR5cGVBY2NlcHQgPSBgJHtqc29uQ29udGVudFR5cGV9O2A7XG5cbi8qKlxuICogSnVzdCBhIGhlbHBlciAoYGNvbmZpZ1trZXldIHx8IGRlZmF1bHRgIGRvZXNuJ3Qgd29yayBiZWNhdXNlIG9mIHplcm9lcylcbiAqL1xuY29uc3Qgc2V0Q29uZmlnID0gKGNvbmZpZywga2V5LCBkZWYpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gXy5pc05pbChjb25maWdba2V5XSkgPT09IGZhbHNlID8gY29uZmlnW2tleV0gOiBkZWY7XG59O1xuXG4vKipcbiAqIEltcGxlbWVudHMgU3RvcmFnZSBpbnRlcmZhY2VcbiAqIChzYW1lIGZvciBzdG9yYWdlLmpzLCBsb2NhbC1zdG9yYWdlLmpzLCB1cC1zdG9yYWdlLmpzKVxuICovXG5jbGFzcyBQcm94eVN0b3JhZ2UgaW1wbGVtZW50cyBJUHJveHkge1xuICBwdWJsaWMgY29uZmlnOiBVcExpbmtDb25mTG9jYWw7XG4gIHB1YmxpYyBmYWlsZWRfcmVxdWVzdHM6IG51bWJlcjtcbiAgcHVibGljIHVzZXJBZ2VudDogc3RyaW5nO1xuICBwdWJsaWMgY2E6IHN0cmluZyB8IHZvaWQ7XG4gIHB1YmxpYyBsb2dnZXI6IExvZ2dlcjtcbiAgcHVibGljIHNlcnZlcl9pZDogc3RyaW5nO1xuICBwdWJsaWMgdXJsOiBhbnk7XG4gIHB1YmxpYyBtYXhhZ2U6IG51bWJlcjtcbiAgcHVibGljIHRpbWVvdXQ6IG51bWJlcjtcbiAgcHVibGljIG1heF9mYWlsczogbnVtYmVyO1xuICBwdWJsaWMgZmFpbF90aW1lb3V0OiBudW1iZXI7XG4gIHB1YmxpYyBhZ2VudF9vcHRpb25zOiBhbnk7XG4gIC8vIEZJWE1FOiB1cG5hbWUgaXMgYXNzaWduZWQgdG8gZWFjaCBpbnN0YW5jZVxuICAvLyBAdHMtaWdub3JlXG4gIHB1YmxpYyB1cG5hbWU6IHN0cmluZztcbiAgLy8gRklYTUU6IHByb3h5IGNhbiBiZSBib29sZWFuIG9yIG9iamVjdCwgc29tZXRoaW5nIHNtZWxscyBoZXJlXG4gIC8vIEB0cy1pZ25vcmVcbiAgcHVibGljIHByb3h5OiBzdHJpbmcgfCB2b2lkO1xuICAvLyBAdHMtaWdub3JlXG4gIHB1YmxpYyBsYXN0X3JlcXVlc3RfdGltZTogbnVtYmVyIHwgbnVsbDtcbiAgcHVibGljIHN0cmljdF9zc2w6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Kn0gY29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gbWFpbkNvbmZpZ1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogVXBMaW5rQ29uZkxvY2FsLCBtYWluQ29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmZhaWxlZF9yZXF1ZXN0cyA9IDA7XG4gICAgdGhpcy51c2VyQWdlbnQgPSBtYWluQ29uZmlnLnVzZXJfYWdlbnQ7XG4gICAgdGhpcy5jYSA9IGNvbmZpZy5jYTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB0aGlzLnNlcnZlcl9pZCA9IG1haW5Db25maWcuc2VydmVyX2lkO1xuXG4gICAgdGhpcy51cmwgPSBVUkwucGFyc2UodGhpcy5jb25maWcudXJsKTtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdGhpcy5fc2V0dXBQcm94eSh0aGlzLnVybC5ob3N0bmFtZSwgY29uZmlnLCBtYWluQ29uZmlnLCB0aGlzLnVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicpO1xuXG4gICAgdGhpcy5jb25maWcudXJsID0gdGhpcy5jb25maWcudXJsLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgICBpZiAodGhpcy5jb25maWcudGltZW91dCAmJiBOdW1iZXIodGhpcy5jb25maWcudGltZW91dCkgPj0gMTAwMCkge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgW1xuICAgICAgICAgICdUb28gYmlnIHRpbWVvdXQgdmFsdWU6ICcgKyB0aGlzLmNvbmZpZy50aW1lb3V0LFxuICAgICAgICAgICdXZSBjaGFuZ2VkIHRpbWUgZm9ybWF0IHRvIG5naW54LWxpa2Ugb25lJyxcbiAgICAgICAgICAnKHNlZSBodHRwOi8vbmdpbngub3JnL2VuL2RvY3Mvc3ludGF4Lmh0bWwpJyxcbiAgICAgICAgICAnc28gcGxlYXNlIHVwZGF0ZSB5b3VyIGNvbmZpZyBhY2NvcmRpbmdseScsXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gYSBidW5jaCBvZiBkaWZmZXJlbnQgY29uZmlndXJhYmxlIHRpbWVyc1xuICAgIHRoaXMubWF4YWdlID0gcGFyc2VJbnRlcnZhbChzZXRDb25maWcodGhpcy5jb25maWcsICdtYXhhZ2UnLCAnMm0nKSk7XG4gICAgdGhpcy50aW1lb3V0ID0gcGFyc2VJbnRlcnZhbChzZXRDb25maWcodGhpcy5jb25maWcsICd0aW1lb3V0JywgJzMwcycpKTtcbiAgICB0aGlzLm1heF9mYWlscyA9IE51bWJlcihzZXRDb25maWcodGhpcy5jb25maWcsICdtYXhfZmFpbHMnLCAyKSk7XG4gICAgdGhpcy5mYWlsX3RpbWVvdXQgPSBwYXJzZUludGVydmFsKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ2ZhaWxfdGltZW91dCcsICc1bScpKTtcbiAgICB0aGlzLnN0cmljdF9zc2wgPSBCb29sZWFuKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ3N0cmljdF9zc2wnLCB0cnVlKSk7XG4gICAgdGhpcy5hZ2VudF9vcHRpb25zID0gc2V0Q29uZmlnKHRoaXMuY29uZmlnLCAnYWdlbnRfb3B0aW9ucycsIHtcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgIG1heFNvY2tldHM6IDQwLFxuICAgICAgbWF4RnJlZVNvY2tldHM6IDEwLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuIGFzc2V0LlxuICAgKiBAcGFyYW0geyp9IG9wdGlvbnNcbiAgICogQHBhcmFtIHsqfSBjYlxuICAgKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICAgKi9cbiAgcHJpdmF0ZSByZXF1ZXN0KG9wdGlvbnM6IGFueSwgY2I/OiBDYWxsYmFjayk6IFN0cmVhbS5SZWFkYWJsZSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBpZiAodGhpcy5fc3RhdHVzQ2hlY2soKSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHN0cmVhbVJlYWQgPSBuZXcgU3RyZWFtLlJlYWRhYmxlKCk7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICBjYihFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihBUElfRVJST1IuVVBMSU5LX09GRkxJTkUpKTtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW1SZWFkLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoQVBJX0VSUk9SLlVQTElOS19PRkZMSU5FKSk7XG4gICAgICB9KTtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHN0cmVhbVJlYWQuX3JlYWQgPSBmdW5jdGlvbiAoKTogdm9pZCB7fTtcbiAgICAgIC8vIHByZXZlbnRpbmcgJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQnXG4gICAgICBzdHJlYW1SZWFkLm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpOiB2b2lkIHt9KTtcbiAgICAgIHJldHVybiBzdHJlYW1SZWFkO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnM6IEhlYWRlcnMgPSB0aGlzLl9zZXRIZWFkZXJzKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fYWRkUHJveHlIZWFkZXJzKG9wdGlvbnMucmVxLCBoZWFkZXJzKTtcbiAgICB0aGlzLl9vdmVycmlkZVdpdGhVcExpbmtDb25mTG9jYWxpZ0hlYWRlcnMoaGVhZGVycyk7XG5cbiAgICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCAnR0VUJztcbiAgICBjb25zdCB1cmkgPSBvcHRpb25zLnVyaV9mdWxsIHx8IHRoaXMuY29uZmlnLnVybCArIG9wdGlvbnMudXJpO1xuXG4gICAgc2VsZi5sb2dnZXIuaW5mbyhcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgIHVyaTogdXJpLFxuICAgICAgfSxcbiAgICAgIFwibWFraW5nIHJlcXVlc3Q6ICdAe21ldGhvZH0gQHt1cml9J1wiXG4gICAgKTtcblxuICAgIGlmIChpc09iamVjdChvcHRpb25zLmpzb24pKSB7XG4gICAgICBqc29uID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5qc29uKTtcbiAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gaGVhZGVyc1snQ29udGVudC1UeXBlJ10gfHwgSEVBREVSUy5KU09OO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RDYWxsYmFjayA9IGNiXG4gICAgICA/IGZ1bmN0aW9uIChlcnIsIHJlcywgYm9keSk6IHZvaWQge1xuICAgICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgICBjb25zdCByZXNwb25zZUxlbmd0aCA9IGVyciA/IDAgOiBib2R5Lmxlbmd0aDtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgcHJvY2Vzc0JvZHkoKTtcbiAgICAgICAgICBsb2dBY3Rpdml0eSgpO1xuICAgICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgICBjYihlcnIsIHJlcywgYm9keSk7XG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQZXJmb3JtIGEgZGVjb2RlLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NCb2R5KCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBlcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmpzb24gJiYgcmVzLnN0YXR1c0NvZGUgPCAzMDApIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keS50b1N0cmluZyhDSEFSQUNURVJfRU5DT0RJTkcuVVRGOCkpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHt9O1xuICAgICAgICAgICAgICAgIGVyciA9IF9lcnI7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWVyciAmJiBpc09iamVjdChib2R5KSkge1xuICAgICAgICAgICAgICBpZiAoXy5pc1N0cmluZyhib2R5LmVycm9yKSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gYm9keS5lcnJvcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQZXJmb3JtIGEgbG9nLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIGZ1bmN0aW9uIGxvZ0FjdGl2aXR5KCk6IHZvaWQge1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBcIkB7IXN0YXR1c30sIHJlcTogJ0B7cmVxdWVzdC5tZXRob2R9IEB7cmVxdWVzdC51cmx9J1wiO1xuICAgICAgICAgICAgbWVzc2FnZSArPSBlcnJvciA/ICcsIGVycm9yOiBAeyFlcnJvcn0nIDogJywgYnl0ZXM6IEB7Ynl0ZXMuaW59L0B7Ynl0ZXMub3V0fSc7XG4gICAgICAgICAgICBzZWxmLmxvZ2dlci5odHRwKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXJyOiBlcnIgfHwgdW5kZWZpbmVkLCAvLyBpZiBlcnJvciBpcyBudWxsL2ZhbHNlIGNoYW5nZSB0aGlzIHRvIHVuZGVmaW5lZCBzbyBpdCB3b250IGxvZ1xuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHsgbWV0aG9kOiBtZXRob2QsIHVybDogdXJpIH0sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXMgIT0gbnVsbCA/IHJlcy5zdGF0dXNDb2RlIDogJ0VSUicsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIGJ5dGVzOiB7XG4gICAgICAgICAgICAgICAgICBpbjoganNvbiA/IGpzb24ubGVuZ3RoIDogMCxcbiAgICAgICAgICAgICAgICAgIG91dDogcmVzcG9uc2VMZW5ndGggfHwgMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICB1cmw6IHVyaSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGJvZHk6IGpzb24sXG4gICAgICBwcm94eTogdGhpcy5wcm94eSxcbiAgICAgIGVuY29kaW5nOiBudWxsLFxuICAgICAgZ3ppcDogdHJ1ZSxcbiAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgIHN0cmljdFNTTDogdGhpcy5zdHJpY3Rfc3NsLFxuICAgICAgYWdlbnRPcHRpb25zOiB0aGlzLmFnZW50X29wdGlvbnMsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmNhKSB7XG4gICAgICByZXF1ZXN0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcXVlc3RPcHRpb25zLCB7XG4gICAgICAgIGNhOiB0aGlzLmNhLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxID0gcmVxdWVzdChyZXF1ZXN0T3B0aW9ucywgcmVxdWVzdENhbGxiYWNrKTtcblxuICAgIGxldCBzdGF0dXNDYWxsZWQgPSBmYWxzZTtcbiAgICByZXEub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24gKHJlcyk6IHZvaWQge1xuICAgICAgLy8gRklYTUU6IF92ZXJkYWNjaW9fYWJvcnRlZCBzZWVtcyBub3QgdXNlZFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKCFyZXEuX3ZlcmRhY2Npb19hYm9ydGVkICYmICFzdGF0dXNDYWxsZWQpIHtcbiAgICAgICAgc3RhdHVzQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZi5fc3RhdHVzQ2hlY2sodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzTmlsKHJlcXVlc3RDYWxsYmFjaykgPT09IGZhbHNlKSB7XG4gICAgICAgIChmdW5jdGlvbiBkb19sb2coKTogdm9pZCB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFwiQHshc3RhdHVzfSwgcmVxOiAnQHtyZXF1ZXN0Lm1ldGhvZH0gQHtyZXF1ZXN0LnVybH0nIChzdHJlYW1pbmcpXCI7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaHR0cChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICAgIHVybDogdXJpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzdGF0dXM6IF8uaXNOdWxsKHJlcykgPT09IGZhbHNlID8gcmVzLnN0YXR1c0NvZGUgOiAnRVJSJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKF9lcnIpOiB2b2lkIHtcbiAgICAgIC8vIEZJWE1FOiBfdmVyZGFjY2lvX2Fib3J0ZWQgc2VlbXMgbm90IHVzZWRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmICghcmVxLl92ZXJkYWNjaW9fYWJvcnRlZCAmJiAhc3RhdHVzQ2FsbGVkKSB7XG4gICAgICAgIHN0YXR1c0NhbGxlZCA9IHRydWU7XG4gICAgICAgIHNlbGYuX3N0YXR1c0NoZWNrKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHJlcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCBoZWFkZXJzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXRIZWFkZXJzKG9wdGlvbnM6IGFueSk6IEhlYWRlcnMge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgY29uc3QgYWNjZXB0ID0gSEVBREVSUy5BQ0NFUFQ7XG4gICAgY29uc3QgYWNjZXB0RW5jb2RpbmcgPSBIRUFERVJTLkFDQ0VQVF9FTkNPRElORztcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBIRUFERVJTLlVTRVJfQUdFTlQ7XG5cbiAgICBoZWFkZXJzW2FjY2VwdF0gPSBoZWFkZXJzW2FjY2VwdF0gfHwgY29udGVudFR5cGVBY2NlcHQ7XG4gICAgaGVhZGVyc1thY2NlcHRFbmNvZGluZ10gPSBoZWFkZXJzW2FjY2VwdEVuY29kaW5nXSB8fCAnZ3ppcCc7XG4gICAgLy8gcmVnaXN0cnkubnBtanMub3JnIHdpbGwgb25seSByZXR1cm4gc2VhcmNoIHJlc3VsdCBpZiB1c2VyLWFnZW50IGluY2x1ZGUgc3RyaW5nICducG0nXG4gICAgaGVhZGVyc1t1c2VyQWdlbnRdID0gaGVhZGVyc1t1c2VyQWdlbnRdIHx8IGBucG0gKCR7dGhpcy51c2VyQWdlbnR9KWA7XG5cbiAgICByZXR1cm4gdGhpcy5fc2V0QXV0aChoZWFkZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBjb25maWd1cmF0aW9uIGF1dGggYW5kIGFzc2lnbiBIZWFkZXIgYXV0aG9yaXphdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXRBdXRoKGhlYWRlcnM6IGFueSk6IEhlYWRlcnMge1xuICAgIGNvbnN0IHsgYXV0aCB9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoXy5pc05pbChhdXRoKSB8fCBoZWFkZXJzW0hFQURFUlMuQVVUSE9SSVpBVElPTl0pIHtcbiAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cblxuICAgIGlmIChfLmlzT2JqZWN0KGF1dGgpID09PSBmYWxzZSAmJiBfLmlzT2JqZWN0KGF1dGgudG9rZW4pID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fdGhyb3dFcnJvckF1dGgoJ0F1dGggaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8vIGdldCBOUE1fVE9LRU4gaHR0cDovL2Jsb2cubnBtanMub3JnL3Bvc3QvMTE4MzkzMzY4NTU1L2RlcGxveWluZy13aXRoLW5wbS1wcml2YXRlLW1vZHVsZXNcbiAgICAvLyBvciBnZXQgb3RoZXIgdmFyaWFibGUgZXhwb3J0IGluIGVudlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJkYWNjaW8vdmVyZGFjY2lvL3JlbGVhc2VzL3RhZy92Mi41LjBcbiAgICBsZXQgdG9rZW46IGFueTtcbiAgICBjb25zdCB0b2tlbkNvbmY6IGFueSA9IGF1dGg7XG5cbiAgICBpZiAoXy5pc05pbCh0b2tlbkNvbmYudG9rZW4pID09PSBmYWxzZSAmJiBfLmlzU3RyaW5nKHRva2VuQ29uZi50b2tlbikpIHtcbiAgICAgIHRva2VuID0gdG9rZW5Db25mLnRva2VuO1xuICAgIH0gZWxzZSBpZiAoXy5pc05pbCh0b2tlbkNvbmYudG9rZW5fZW52KSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHRva2VuQ29uZi50b2tlbl9lbnYpKSB7XG4gICAgICAgIHRva2VuID0gcHJvY2Vzcy5lbnZbdG9rZW5Db25mLnRva2VuX2Vudl07XG4gICAgICB9IGVsc2UgaWYgKF8uaXNCb29sZWFuKHRva2VuQ29uZi50b2tlbl9lbnYpICYmIHRva2VuQ29uZi50b2tlbl9lbnYpIHtcbiAgICAgICAgdG9rZW4gPSBwcm9jZXNzLmVudi5OUE1fVE9LRU47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihFUlJPUl9DT0RFLnRva2VuX3JlcXVpcmVkKTtcbiAgICAgICAgdGhpcy5fdGhyb3dFcnJvckF1dGgoRVJST1JfQ09ERS50b2tlbl9yZXF1aXJlZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRva2VuID0gcHJvY2Vzcy5lbnYuTlBNX1RPS0VOO1xuICAgIH1cblxuICAgIGlmIChfLmlzTmlsKHRva2VuKSkge1xuICAgICAgdGhpcy5fdGhyb3dFcnJvckF1dGgoRVJST1JfQ09ERS50b2tlbl9yZXF1aXJlZCk7XG4gICAgfVxuXG4gICAgLy8gZGVmaW5lIHR5cGUgQXV0aCBhbGxvdyBiYXNpYyBhbmQgYmVhcmVyXG4gICAgY29uc3QgdHlwZSA9IHRva2VuQ29uZi50eXBlIHx8IFRPS0VOX0JBU0lDO1xuICAgIHRoaXMuX3NldEhlYWRlckF1dGhvcml6YXRpb24oaGVhZGVycywgdHlwZSwgdG9rZW4pO1xuXG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF90aHJvd0Vycm9yQXV0aChtZXNzYWdlOiBzdHJpbmcpOiBFcnJvciB7XG4gICAgdGhpcy5sb2dnZXIuZXJyb3IobWVzc2FnZSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBIZWFkZXIgYXV0aG9yaXphdGlvbiB3aXRoIHR5cGUgYXV0aGVudGljYXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGhlYWRlcnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXRIZWFkZXJBdXRob3JpemF0aW9uKGhlYWRlcnM6IGFueSwgdHlwZTogc3RyaW5nLCB0b2tlbjogYW55KTogdm9pZCB7XG4gICAgY29uc3QgX3R5cGU6IHN0cmluZyA9IHR5cGUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChfdHlwZSAhPT0gVE9LRU5fQkVBUkVSLnRvTG93ZXJDYXNlKCkgJiYgX3R5cGUgIT09IFRPS0VOX0JBU0lDLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRoaXMuX3Rocm93RXJyb3JBdXRoKGBBdXRoIHR5cGUgJyR7X3R5cGV9JyBub3QgYWxsb3dlZGApO1xuICAgIH1cblxuICAgIHR5cGUgPSBfLnVwcGVyRmlyc3QodHlwZSk7XG4gICAgaGVhZGVyc1tIRUFERVJTLkFVVEhPUklaQVRJT05dID0gYnVpbGRUb2tlbih0eXBlLCB0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogSXQgd2lsbCBhZGQgb3Igb3ZlcnJpZGUgc3BlY2lmaWVkIGhlYWRlcnMgZnJvbSBjb25maWcgZmlsZS5cbiAgICpcbiAgICogRWc6XG4gICAqXG4gICAqIHVwbGlua3M6XG4gICBucG1qczpcbiAgIHVybDogaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvXG4gICBoZWFkZXJzOlxuICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5ucG0uaW5zdGFsbC12Mitqc29uOyBxPTEuMFwiXG4gICB2ZXJkYWNjaW8tc3RhZ2luZzpcbiAgIHVybDogaHR0cHM6Ly9teWNvbXBhbnkuY29tL25wbVxuICAgaGVhZGVyczpcbiAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgIGF1dGhvcml6YXRpb246IFwiQmFzaWMgWW91ckJhc2U2NEVuY29kZWRDcmVkZW50aWFscz09XCJcblxuICAgKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfb3ZlcnJpZGVXaXRoVXBMaW5rQ29uZkxvY2FsaWdIZWFkZXJzKGhlYWRlcnM6IEhlYWRlcnMpOiBhbnkge1xuICAgIGlmICghdGhpcy5jb25maWcuaGVhZGVycykge1xuICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuXG4gICAgLy8gYWRkL292ZXJyaWRlIGhlYWRlcnMgc3BlY2lmaWVkIGluIHRoZSBjb25maWdcbiAgICAvKiBlc2xpbnQgZ3VhcmQtZm9yLWluOiAwICovXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb25maWcuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXldID0gdGhpcy5jb25maWcuaGVhZGVyc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hldGhlciBjYW4gZmV0Y2ggZnJvbSB0aGUgcHJvdmlkZWQgVVJMXG4gICAqIEBwYXJhbSB7Kn0gdXJsXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgaXNVcGxpbmtWYWxpZCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBjb25zdCB1cmxQYXJzZWQ6IFVybFdpdGhTdHJpbmdRdWVyeSA9IFVSTC5wYXJzZSh1cmwpO1xuICAgIGNvbnN0IGlzSFRUUFMgPSAodXJsRG9tYWluUGFyc2VkOiBVUkwpOiBib29sZWFuID0+IHVybERvbWFpblBhcnNlZC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgKHVybFBhcnNlZC5wb3J0ID09PSBudWxsIHx8IHVybFBhcnNlZC5wb3J0ID09PSAnNDQzJyk7XG4gICAgY29uc3QgZ2V0SG9zdCA9ICh1cmxEb21haW5QYXJzZWQpOiBib29sZWFuID0+IChpc0hUVFBTKHVybERvbWFpblBhcnNlZCkgPyB1cmxEb21haW5QYXJzZWQuaG9zdG5hbWUgOiB1cmxEb21haW5QYXJzZWQuaG9zdCk7XG4gICAgY29uc3QgaXNNYXRjaFByb3RvY29sOiBib29sZWFuID0gdXJsUGFyc2VkLnByb3RvY29sID09PSB0aGlzLnVybC5wcm90b2NvbDtcbiAgICBjb25zdCBpc01hdGNoSG9zdDogYm9vbGVhbiA9IGdldEhvc3QodXJsUGFyc2VkKSA9PT0gZ2V0SG9zdCh0aGlzLnVybCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGlzTWF0Y2hQYXRoOiBib29sZWFuID0gdXJsUGFyc2VkLnBhdGguaW5kZXhPZih0aGlzLnVybC5wYXRoKSA9PT0gMDtcblxuICAgIHJldHVybiBpc01hdGNoUHJvdG9jb2wgJiYgaXNNYXRjaEhvc3QgJiYgaXNNYXRjaFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcmVtb3RlIHBhY2thZ2UgbWV0YWRhdGFcbiAgICogQHBhcmFtIHsqfSBuYW1lIHBhY2thZ2UgbmFtZVxuICAgKiBAcGFyYW0geyp9IG9wdGlvbnMgcmVxdWVzdCBvcHRpb25zLCBlZzogZVRhZy5cbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIGdldFJlbW90ZU1ldGFkYXRhKG5hbWU6IHN0cmluZywgb3B0aW9uczogYW55LCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgaWYgKF8uaXNOaWwob3B0aW9ucy5ldGFnKSA9PT0gZmFsc2UpIHtcbiAgICAgIGhlYWRlcnNbJ0lmLU5vbmUtTWF0Y2gnXSA9IG9wdGlvbnMuZXRhZztcbiAgICAgIGhlYWRlcnNbSEVBREVSUy5BQ0NFUFRdID0gY29udGVudFR5cGVBY2NlcHQ7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0KFxuICAgICAge1xuICAgICAgICB1cmk6IGAvJHtlbmNvZGUobmFtZSl9YCxcbiAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgcmVxOiBvcHRpb25zLnJlcSxcbiAgICAgIH0sXG4gICAgICAoZXJyLCByZXMsIGJvZHkpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXROb3RGb3VuZChBUElfRVJST1IuTk9UX1BBQ0tBR0VfVVBMSU5LKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPj0gSFRUUF9TVEFUVVMuT0sgJiYgcmVzLnN0YXR1c0NvZGUgPCBIVFRQX1NUQVRVUy5NVUxUSVBMRV9DSE9JQ0VTKSkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoYCR7QVBJX0VSUk9SLkJBRF9TVEFUVVNfQ09ERX06ICR7cmVzLnN0YXR1c0NvZGV9YCk7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGVycm9yLnJlbW90ZVN0YXR1cyA9IHJlcy5zdGF0dXNDb2RlO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgYm9keSwgcmVzLmhlYWRlcnMuZXRhZyk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhIHRhcmJhbGwgZnJvbSB0aGUgdXBsaW5rLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIGZldGNoVGFyYmFsbCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkVGFyYmFsbCh7fSk7XG4gICAgbGV0IGN1cnJlbnRfbGVuZ3RoID0gMDtcbiAgICBsZXQgZXhwZWN0ZWRfbGVuZ3RoO1xuXG4gICAgc3RyZWFtLmFib3J0ID0gKCkgPT4ge307XG4gICAgY29uc3QgcmVhZFN0cmVhbSA9IHRoaXMucmVxdWVzdCh7XG4gICAgICB1cmlfZnVsbDogdXJsLFxuICAgICAgZW5jb2Rpbmc6IG51bGwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogY29udGVudFR5cGVBY2NlcHQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmVhZFN0cmVhbS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzOiBhbnkpIHtcbiAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLk5PVF9GSUxFX1VQTElOSykpO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPj0gSFRUUF9TVEFUVVMuT0sgJiYgcmVzLnN0YXR1c0NvZGUgPCBIVFRQX1NUQVRVUy5NVUxUSVBMRV9DSE9JQ0VTKSkge1xuICAgICAgICByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoYGJhZCB1cGxpbmsgc3RhdHVzIGNvZGU6ICR7cmVzLnN0YXR1c0NvZGV9YCkpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcy5oZWFkZXJzW0hFQURFUl9UWVBFLkNPTlRFTlRfTEVOR1RIXSkge1xuICAgICAgICBleHBlY3RlZF9sZW5ndGggPSByZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0xFTkdUSF07XG4gICAgICAgIHN0cmVhbS5lbWl0KEhFQURFUl9UWVBFLkNPTlRFTlRfTEVOR1RILCByZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0xFTkdUSF0pO1xuICAgICAgfVxuXG4gICAgICByZWFkU3RyZWFtLnBpcGUoc3RyZWFtKTtcbiAgICB9KTtcblxuICAgIHJlYWRTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICB9KTtcbiAgICByZWFkU3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGN1cnJlbnRfbGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIH0pO1xuICAgIHJlYWRTdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBjdXJyZW50X2xlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmIChleHBlY3RlZF9sZW5ndGggJiYgY3VycmVudF9sZW5ndGggIT0gZXhwZWN0ZWRfbGVuZ3RoKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIEVycm9yQ29kZS5nZXRJbnRlcm5hbEVycm9yKEFQSV9FUlJPUi5DT05URU5UX01JU01BVENIKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGEgc3RyZWFtIHNlYXJjaC5cbiAgICogQHBhcmFtIHsqfSBvcHRpb25zIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBwdWJsaWMgc2VhcmNoKG9wdGlvbnM6IGFueSk6IFN0cmVhbS5SZWFkYWJsZSB7XG4gICAgY29uc3QgdHJhbnNmb3JtU3RyZWFtOiBhbnkgPSBuZXcgU3RyZWFtLlBhc3NUaHJvdWdoKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICBjb25zdCByZXF1ZXN0U3RyZWFtOiBTdHJlYW0uUmVhZGFibGUgPSB0aGlzLnJlcXVlc3Qoe1xuICAgICAgdXJpOiBvcHRpb25zLnJlcS51cmwsXG4gICAgICByZXE6IG9wdGlvbnMucmVxLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAvLyBxdWVyeSBmb3Igc2VhcmNoXG4gICAgICAgIHJlZmVyZXI6IG9wdGlvbnMucmVxLmdldCgncmVmZXJlcicpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhcnNlUGFja2FnZSA9IChwa2c6IFBhY2thZ2UpOiB2b2lkID0+IHtcbiAgICAgIGlmIChpc09iamVjdE9yQXJyYXkocGtnKSkge1xuICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uZW1pdCgnZGF0YScsIHBrZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlcXVlc3RTdHJlYW0ub24oJ3Jlc3BvbnNlJywgKHJlcyk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFTdHJpbmcocmVzLnN0YXR1c0NvZGUpLm1hdGNoKC9eMlxcZFxcZCQvKSkge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtU3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoYGJhZCBzdGF0dXMgY29kZSAke3Jlcy5zdGF0dXNDb2RlfSBmcm9tIHVwbGlua2ApKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1ZXN0L3JlcXVlc3QjcmVxdWVzdG9wdGlvbnMtY2FsbGJhY2tcbiAgICAgIC8vIFJlcXVlc3QgbGlicmFyeSB3aWxsIG5vdCBkZWNvZGUgZ3ppcCBzdHJlYW0uXG4gICAgICBsZXQganNvblN0cmVhbTtcbiAgICAgIGlmIChyZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0VOQ09ESU5HXSA9PT0gSEVBREVSUy5HWklQKSB7XG4gICAgICAgIGpzb25TdHJlYW0gPSByZXMucGlwZSh6bGliLmNyZWF0ZVVuemlwKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAganNvblN0cmVhbSA9IHJlcztcbiAgICAgIH1cbiAgICAgIGpzb25TdHJlYW0ucGlwZShKU09OU3RyZWFtLnBhcnNlKCcqJykpLm9uKCdkYXRhJywgcGFyc2VQYWNrYWdlKTtcbiAgICAgIGpzb25TdHJlYW0ub24oJ2VuZCcsICgpOiB2b2lkID0+IHtcbiAgICAgICAgdHJhbnNmb3JtU3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXF1ZXN0U3RyZWFtLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKTogdm9pZCA9PiB7XG4gICAgICB0cmFuc2Zvcm1TdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH0pO1xuXG4gICAgdHJhbnNmb3JtU3RyZWFtLmFib3J0ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgLy8gRklYTUU6IHRoaXMgaXMgY2xlYXJseSBhIHBvdGVudGlhbCBpc3N1ZVxuICAgICAgLy8gdGhlcmUgaXMgbm8gYWJvcnQgbWV0aG9kIG9uIFN0cmVhbS5SZWFkYWJsZVxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmVxdWVzdFN0cmVhbS5hYm9ydCgpO1xuICAgICAgdHJhbnNmb3JtU3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtU3RyZWFtO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBwcm94eSBoZWFkZXJzLlxuICAgKiBGSVhNRTogb2JqZWN0IG11dGF0aW9ucywgaXQgc2hvdWxkIHJldHVybiBhbiBuZXcgb2JqZWN0XG4gICAqIEBwYXJhbSB7Kn0gcmVxIHRoZSBodHRwIHJlcXVlc3RcbiAgICogQHBhcmFtIHsqfSBoZWFkZXJzIHRoZSByZXF1ZXN0IGhlYWRlcnNcbiAgICovXG4gIHByaXZhdGUgX2FkZFByb3h5SGVhZGVycyhyZXE6IGFueSwgaGVhZGVyczogYW55KTogdm9pZCB7XG4gICAgaWYgKHJlcSkge1xuICAgICAgLy8gT25seSBzdWJtaXQgWC1Gb3J3YXJkZWQtRm9yIGZpZWxkIGlmIHdlIGRvbid0IGhhdmUgYSBwcm94eSBzZWxlY3RlZFxuICAgICAgLy8gaW4gdGhlIGNvbmZpZyBmaWxlLlxuICAgICAgLy9cbiAgICAgIC8vIE90aGVyd2lzZSBtaXNjb25maWd1cmVkIHByb3h5IGNvdWxkIHJldHVybiA0MDc6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcmxpZHdrYS9zaW5vcGlhL2lzc3Vlcy8yNTRcbiAgICAgIC8vXG4gICAgICAvLyBGSVhNRTogcHJveHkgbG9naWMgaXMgb2RkLCBzb21ldGhpbmcgaXMgd3JvbmcgaGVyZS5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmICghdGhpcy5wcm94eSkge1xuICAgICAgICBoZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXSA9IChyZXEuZ2V0KCd4LWZvcndhcmRlZC1mb3InKSA/IHJlcS5nZXQoJ3gtZm9yd2FyZGVkLWZvcicpICsgJywgJyA6ICcnKSArIHJlcS5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWx3YXlzIGF0dGFjaCBWaWEgaGVhZGVyIHRvIGF2b2lkIGxvb3BzLCBldmVuIGlmIHdlJ3JlIG5vdCBwcm94eWluZ1xuICAgIGhlYWRlcnNbJ3ZpYSddID0gcmVxICYmIHJlcS5nZXQoJ3ZpYScpID8gcmVxLmdldCgndmlhJykgKyAnLCAnIDogJyc7XG5cbiAgICBoZWFkZXJzWyd2aWEnXSArPSAnMS4xICcgKyB0aGlzLnNlcnZlcl9pZCArICcgKFZlcmRhY2NpbyknO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHJlbW90ZSBob3N0IGlzIGF2YWlsYWJsZS5cbiAgICogQHBhcmFtIHsqfSBhbGl2ZVxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgcHJpdmF0ZSBfc3RhdHVzQ2hlY2soYWxpdmU/OiBib29sZWFuKTogYm9vbGVhbiB8IHZvaWQge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5faWZSZXF1ZXN0RmFpbHVyZSgpID09PSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFsaXZlKSB7XG4gICAgICBpZiAodGhpcy5mYWlsZWRfcmVxdWVzdHMgPj0gdGhpcy5tYXhfZmFpbHMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3N0OiB0aGlzLnVybC5ob3N0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2hvc3QgQHtob3N0fSBpcyBiYWNrIG9ubGluZSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmFpbGVkX3JlcXVlc3RzID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWlsZWRfcmVxdWVzdHMrKztcbiAgICAgIGlmICh0aGlzLmZhaWxlZF9yZXF1ZXN0cyA9PT0gdGhpcy5tYXhfZmFpbHMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3N0OiB0aGlzLnVybC5ob3N0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2hvc3QgQHtob3N0fSBpcyBub3cgb2ZmbGluZSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxhc3RfcmVxdWVzdF90aW1lID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgcmVxdWVzdCBmYWlsdXJlLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaWZSZXF1ZXN0RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mYWlsZWRfcmVxdWVzdHMgPj0gdGhpcy5tYXhfZmFpbHMgJiYgTWF0aC5hYnMoRGF0ZS5ub3coKSAtICh0aGlzLmxhc3RfcmVxdWVzdF90aW1lIGFzIG51bWJlcikpIDwgdGhpcy5mYWlsX3RpbWVvdXQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHVwIGEgcHJveHkuXG4gICAqIEBwYXJhbSB7Kn0gaG9zdG5hbWVcbiAgICogQHBhcmFtIHsqfSBjb25maWdcbiAgICogQHBhcmFtIHsqfSBtYWluY29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gaXNIVFRQU1xuICAgKi9cbiAgcHJpdmF0ZSBfc2V0dXBQcm94eShob3N0bmFtZTogc3RyaW5nLCBjb25maWc6IFVwTGlua0NvbmZMb2NhbCwgbWFpbmNvbmZpZzogQ29uZmlnLCBpc0hUVFBTOiBib29sZWFuKTogdm9pZCB7XG4gICAgbGV0IG5vUHJveHlMaXN0O1xuICAgIGNvbnN0IHByb3h5X2tleTogc3RyaW5nID0gaXNIVFRQUyA/ICdodHRwc19wcm94eScgOiAnaHR0cF9wcm94eSc7XG5cbiAgICAvLyBnZXQgaHR0cF9wcm94eSBhbmQgbm9fcHJveHkgY29uZmlnc1xuICAgIGlmIChwcm94eV9rZXkgaW4gY29uZmlnKSB7XG4gICAgICB0aGlzLnByb3h5ID0gY29uZmlnW3Byb3h5X2tleV07XG4gICAgfSBlbHNlIGlmIChwcm94eV9rZXkgaW4gbWFpbmNvbmZpZykge1xuICAgICAgdGhpcy5wcm94eSA9IG1haW5jb25maWdbcHJveHlfa2V5XTtcbiAgICB9XG4gICAgaWYgKCdub19wcm94eScgaW4gY29uZmlnKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICBub1Byb3h5TGlzdCA9IGNvbmZpZy5ub19wcm94eTtcbiAgICB9IGVsc2UgaWYgKCdub19wcm94eScgaW4gbWFpbmNvbmZpZykge1xuICAgICAgbm9Qcm94eUxpc3QgPSBtYWluY29uZmlnLm5vX3Byb3h5O1xuICAgIH1cblxuICAgIC8vIHVzZSB3Z2V0LWxpa2UgYWxnb3JpdGhtIHRvIGRldGVybWluZSBpZiBwcm94eSBzaG91bGRuJ3QgYmUgdXNlZFxuICAgIGlmIChob3N0bmFtZVswXSAhPT0gJy4nKSB7XG4gICAgICBob3N0bmFtZSA9ICcuJyArIGhvc3RuYW1lO1xuICAgIH1cblxuICAgIGlmIChfLmlzU3RyaW5nKG5vUHJveHlMaXN0KSAmJiBub1Byb3h5TGlzdC5sZW5ndGgpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIG5vUHJveHlMaXN0ID0gbm9Qcm94eUxpc3Quc3BsaXQoJywnKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0FycmF5KG5vUHJveHlMaXN0KSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub1Byb3h5TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgbm9Qcm94eUl0ZW0gPSBub1Byb3h5TGlzdFtpXTtcbiAgICAgICAgaWYgKG5vUHJveHlJdGVtWzBdICE9PSAnLicpIHtcbiAgICAgICAgICBub1Byb3h5SXRlbSA9ICcuJyArIG5vUHJveHlJdGVtO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3N0bmFtZS5sYXN0SW5kZXhPZihub1Byb3h5SXRlbSkgPT09IGhvc3RuYW1lLmxlbmd0aCAtIG5vUHJveHlJdGVtLmxlbmd0aCkge1xuICAgICAgICAgIGlmICh0aGlzLnByb3h5KSB7XG4gICAgICAgICAgICBkZWJ1Zygnbm90IHVzaW5nIHByb3h5IGZvciAlbywgZXhjbHVkZWQgYnkgJW8gcnVsZScsIHRoaXMudXJsLmhyZWYsIG5vUHJveHlJdGVtKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMucHJveHkgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBpdCdzIG5vbi1zdHJpbmcgKGkuZS4gXCJmYWxzZVwiKSwgZG9uJ3QgdXNlIGl0XG4gICAgaWYgKF8uaXNTdHJpbmcodGhpcy5wcm94eSkgPT09IGZhbHNlKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkZWxldGUgdGhpcy5wcm94eTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ3VzaW5nIHByb3h5ICVvIGZvciAlbycsIHRoaXMudXJsLmhyZWYsIHRoaXMucHJveHkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm94eVN0b3JhZ2U7XG4iXX0=
|
|
709
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXAtc3RvcmFnZS50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsImVuY29kZSIsInRoaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsImpzb25Db250ZW50VHlwZSIsIkhFQURFUlMiLCJKU09OIiwiY29udGVudFR5cGVBY2NlcHQiLCJzZXRDb25maWciLCJjb25maWciLCJrZXkiLCJkZWYiLCJfIiwiaXNOaWwiLCJQcm94eVN0b3JhZ2UiLCJjb25zdHJ1Y3RvciIsIm1haW5Db25maWciLCJmYWlsZWRfcmVxdWVzdHMiLCJ1c2VyQWdlbnQiLCJ1c2VyX2FnZW50IiwiY2EiLCJsb2dnZXIiLCJzZXJ2ZXJfaWQiLCJ1cmwiLCJVUkwiLCJwYXJzZSIsIl9zZXR1cFByb3h5IiwiaG9zdG5hbWUiLCJwcm90b2NvbCIsInRpbWVvdXQiLCJOdW1iZXIiLCJ3YXJuIiwiam9pbiIsIm1heGFnZSIsIm1heF9mYWlscyIsImZhaWxfdGltZW91dCIsInN0cmljdF9zc2wiLCJCb29sZWFuIiwiYWdlbnRfb3B0aW9ucyIsImtlZXBBbGl2ZSIsIm1heFNvY2tldHMiLCJtYXhGcmVlU29ja2V0cyIsInJlcXVlc3QiLCJvcHRpb25zIiwiY2IiLCJqc29uIiwiX3N0YXR1c0NoZWNrIiwic3RyZWFtUmVhZCIsIlN0cmVhbSIsIlJlYWRhYmxlIiwicHJvY2VzcyIsIm5leHRUaWNrIiwiRXJyb3JDb2RlIiwiZ2V0SW50ZXJuYWxFcnJvciIsIkFQSV9FUlJPUiIsIlVQTElOS19PRkZMSU5FIiwiZW1pdCIsIl9yZWFkIiwib24iLCJzZWxmIiwiaGVhZGVycyIsIl9zZXRIZWFkZXJzIiwiX2FkZFByb3h5SGVhZGVycyIsInJlcSIsIl9vdmVycmlkZVdpdGhVcExpbmtDb25mTG9jYWxpZ0hlYWRlcnMiLCJtZXRob2QiLCJ1cmkiLCJ1cmlfZnVsbCIsImluZm8iLCJzdHJpbmdpZnkiLCJyZXF1ZXN0Q2FsbGJhY2siLCJlcnIiLCJyZXMiLCJib2R5IiwiZXJyb3IiLCJyZXNwb25zZUxlbmd0aCIsImxlbmd0aCIsInByb2Nlc3NCb2R5IiwibG9nQWN0aXZpdHkiLCJtZXNzYWdlIiwic3RhdHVzQ29kZSIsInRvU3RyaW5nIiwiQ0hBUkFDVEVSX0VOQ09ESU5HIiwiVVRGOCIsIl9lcnIiLCJpc1N0cmluZyIsImh0dHAiLCJ1bmRlZmluZWQiLCJzdGF0dXMiLCJieXRlcyIsImluIiwib3V0IiwicmVxdWVzdE9wdGlvbnMiLCJwcm94eSIsImVuY29kaW5nIiwiZ3ppcCIsInN0cmljdFNTTCIsImFnZW50T3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsInN0YXR1c0NhbGxlZCIsIl92ZXJkYWNjaW9fYWJvcnRlZCIsImRvX2xvZyIsImlzTnVsbCIsImFjY2VwdCIsIkFDQ0VQVCIsImFjY2VwdEVuY29kaW5nIiwiQUNDRVBUX0VOQ09ESU5HIiwiVVNFUl9BR0VOVCIsImdldCIsIl9zZXRBdXRoIiwiYXV0aCIsIkFVVEhPUklaQVRJT04iLCJpc09iamVjdCIsInRva2VuIiwiX3Rocm93RXJyb3JBdXRoIiwidG9rZW5Db25mIiwidG9rZW5fZW52IiwiZW52IiwiaXNCb29sZWFuIiwiTlBNX1RPS0VOIiwiRVJST1JfQ09ERSIsInRva2VuX3JlcXVpcmVkIiwidHlwZSIsIlRPS0VOX0JBU0lDIiwiX3NldEhlYWRlckF1dGhvcml6YXRpb24iLCJFcnJvciIsIl90eXBlIiwidG9Mb3dlckNhc2UiLCJUT0tFTl9CRUFSRVIiLCJ1cHBlckZpcnN0IiwiaXNVcGxpbmtWYWxpZCIsInVybFBhcnNlZCIsImlzSFRUUFMiLCJ1cmxEb21haW5QYXJzZWQiLCJwb3J0IiwiZ2V0SG9zdCIsImhvc3QiLCJpc01hdGNoUHJvdG9jb2wiLCJpc01hdGNoSG9zdCIsImlzTWF0Y2hQYXRoIiwicGF0aCIsImluZGV4T2YiLCJnZXRSZW1vdGVNZXRhZGF0YSIsIm5hbWUiLCJjYWxsYmFjayIsImV0YWciLCJIVFRQX1NUQVRVUyIsIk5PVF9GT1VORCIsImdldE5vdEZvdW5kIiwiTk9UX1BBQ0tBR0VfVVBMSU5LIiwiT0siLCJNVUxUSVBMRV9DSE9JQ0VTIiwiQkFEX1NUQVRVU19DT0RFIiwicmVtb3RlU3RhdHVzIiwiZmV0Y2hUYXJiYWxsIiwic3RyZWFtIiwiUmVhZFRhcmJhbGwiLCJjdXJyZW50X2xlbmd0aCIsImV4cGVjdGVkX2xlbmd0aCIsImFib3J0IiwicmVhZFN0cmVhbSIsIkFjY2VwdCIsIk5PVF9GSUxFX1VQTElOSyIsIkhFQURFUl9UWVBFIiwiQ09OVEVOVF9MRU5HVEgiLCJwaXBlIiwiZGF0YSIsIkNPTlRFTlRfTUlTTUFUQ0giLCJzZWFyY2giLCJ0cmFuc2Zvcm1TdHJlYW0iLCJQYXNzVGhyb3VnaCIsIm9iamVjdE1vZGUiLCJyZXF1ZXN0U3RyZWFtIiwicmVmZXJlciIsInBhcnNlUGFja2FnZSIsInBrZyIsIlN0cmluZyIsIm1hdGNoIiwianNvblN0cmVhbSIsIkNPTlRFTlRfRU5DT0RJTkciLCJHWklQIiwiemxpYiIsImNyZWF0ZVVuemlwIiwiSlNPTlN0cmVhbSIsImNvbm5lY3Rpb24iLCJyZW1vdGVBZGRyZXNzIiwiYWxpdmUiLCJhcmd1bWVudHMiLCJfaWZSZXF1ZXN0RmFpbHVyZSIsImxhc3RfcmVxdWVzdF90aW1lIiwiRGF0ZSIsIm5vdyIsIk1hdGgiLCJhYnMiLCJtYWluY29uZmlnIiwibm9Qcm94eUxpc3QiLCJwcm94eV9rZXkiLCJub19wcm94eSIsInNwbGl0IiwiaXNBcnJheSIsImkiLCJub1Byb3h5SXRlbSIsImxhc3RJbmRleE9mIiwiaHJlZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUlBOztBQUNBOztBQUNBOzs7O0FBRUEsTUFBTUEsS0FBSyxHQUFHLG9CQUFXLHNCQUFYLENBQWQ7O0FBRUEsTUFBTUMsTUFBTSxHQUFHLFVBQVVDLEtBQVYsRUFBeUI7QUFDdEMsU0FBT0Msa0JBQWtCLENBQUNELEtBQUQsQ0FBbEIsQ0FBMEJFLE9BQTFCLENBQWtDLE1BQWxDLEVBQTBDLEdBQTFDLENBQVA7QUFDRCxDQUZEOztBQUlBLE1BQU1DLGVBQWUsR0FBR0MsbUJBQVFDLElBQWhDO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUksR0FBRUgsZUFBZ0IsR0FBN0M7QUFFQTtBQUNBO0FBQ0E7O0FBQ0EsTUFBTUksU0FBUyxHQUFHLENBQUNDLE1BQUQsRUFBU0MsR0FBVCxFQUFjQyxHQUFkLEtBQThCO0FBQzlDLFNBQU9DLGdCQUFFQyxLQUFGLENBQVFKLE1BQU0sQ0FBQ0MsR0FBRCxDQUFkLE1BQXlCLEtBQXpCLEdBQWlDRCxNQUFNLENBQUNDLEdBQUQsQ0FBdkMsR0FBK0NDLEdBQXREO0FBQ0QsQ0FGRDtBQUlBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxNQUFNRyxZQUFOLENBQXFDO0FBYW5DO0FBQ0E7QUFFQTtBQUNBO0FBRUE7O0FBSUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNTQyxFQUFBQSxXQUFXLENBQUNOLE1BQUQsRUFBMEJPLFVBQTFCLEVBQThDO0FBQzlELFNBQUtQLE1BQUwsR0FBY0EsTUFBZDtBQUNBLFNBQUtRLGVBQUwsR0FBdUIsQ0FBdkIsQ0FGOEQsQ0FHOUQ7O0FBQ0EsU0FBS0MsU0FBTCxHQUFpQkYsVUFBVSxDQUFDRyxVQUE1QjtBQUNBLFNBQUtDLEVBQUwsR0FBVVgsTUFBTSxDQUFDVyxFQUFqQjtBQUNBLFNBQUtDLE1BQUwsR0FBY0EsY0FBZDtBQUNBLFNBQUtDLFNBQUwsR0FBaUJOLFVBQVUsQ0FBQ00sU0FBNUI7QUFFQSxTQUFLQyxHQUFMLEdBQVdDLGFBQUlDLEtBQUosQ0FBVSxLQUFLaEIsTUFBTCxDQUFZYyxHQUF0QixDQUFYLENBVDhELENBVTlEOztBQUNBLFNBQUtHLFdBQUwsQ0FBaUIsS0FBS0gsR0FBTCxDQUFTSSxRQUExQixFQUFvQ2xCLE1BQXBDLEVBQTRDTyxVQUE1QyxFQUF3RCxLQUFLTyxHQUFMLENBQVNLLFFBQVQsS0FBc0IsUUFBOUU7O0FBRUEsU0FBS25CLE1BQUwsQ0FBWWMsR0FBWixHQUFrQixLQUFLZCxNQUFMLENBQVljLEdBQVosQ0FBZ0JwQixPQUFoQixDQUF3QixLQUF4QixFQUErQixFQUEvQixDQUFsQjs7QUFFQSxRQUFJLEtBQUtNLE1BQUwsQ0FBWW9CLE9BQVosSUFBdUJDLE1BQU0sQ0FBQyxLQUFLckIsTUFBTCxDQUFZb0IsT0FBYixDQUFOLElBQStCLElBQTFELEVBQWdFO0FBQzlELFdBQUtSLE1BQUwsQ0FBWVUsSUFBWixDQUNFLENBQ0UsNEJBQTRCLEtBQUt0QixNQUFMLENBQVlvQixPQUQxQyxFQUVFLDBDQUZGLEVBR0UsNENBSEYsRUFJRSwwQ0FKRixFQUtFRyxJQUxGLENBS08sSUFMUCxDQURGO0FBUUQsS0F4QjZELENBMEI5RDs7O0FBQ0EsU0FBS0MsTUFBTCxHQUFjLDBCQUFjekIsU0FBUyxDQUFDLEtBQUtDLE1BQU4sRUFBYyxRQUFkLEVBQXdCLElBQXhCLENBQXZCLENBQWQ7QUFDQSxTQUFLb0IsT0FBTCxHQUFlLDBCQUFjckIsU0FBUyxDQUFDLEtBQUtDLE1BQU4sRUFBYyxTQUFkLEVBQXlCLEtBQXpCLENBQXZCLENBQWY7QUFDQSxTQUFLeUIsU0FBTCxHQUFpQkosTUFBTSxDQUFDdEIsU0FBUyxDQUFDLEtBQUtDLE1BQU4sRUFBYyxXQUFkLEVBQTJCLENBQTNCLENBQVYsQ0FBdkI7QUFDQSxTQUFLMEIsWUFBTCxHQUFvQiwwQkFBYzNCLFNBQVMsQ0FBQyxLQUFLQyxNQUFOLEVBQWMsY0FBZCxFQUE4QixJQUE5QixDQUF2QixDQUFwQjtBQUNBLFNBQUsyQixVQUFMLEdBQWtCQyxPQUFPLENBQUM3QixTQUFTLENBQUMsS0FBS0MsTUFBTixFQUFjLFlBQWQsRUFBNEIsSUFBNUIsQ0FBVixDQUF6QjtBQUNBLFNBQUs2QixhQUFMLEdBQXFCOUIsU0FBUyxDQUFDLEtBQUtDLE1BQU4sRUFBYyxlQUFkLEVBQStCO0FBQzNEOEIsTUFBQUEsU0FBUyxFQUFFLElBRGdEO0FBRTNEQyxNQUFBQSxVQUFVLEVBQUUsRUFGK0M7QUFHM0RDLE1BQUFBLGNBQWMsRUFBRTtBQUgyQyxLQUEvQixDQUE5QjtBQUtEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDVUMsRUFBQUEsT0FBTyxDQUFDQyxPQUFELEVBQWVDLEVBQWYsRUFBK0M7QUFDNUQsUUFBSUMsSUFBSjs7QUFFQSxRQUFJLEtBQUtDLFlBQUwsT0FBd0IsS0FBNUIsRUFBbUM7QUFDakMsWUFBTUMsVUFBVSxHQUFHLElBQUlDLGdCQUFPQyxRQUFYLEVBQW5CO0FBRUFDLE1BQUFBLE9BQU8sQ0FBQ0MsUUFBUixDQUFpQixZQUFrQjtBQUNqQyxZQUFJUCxFQUFKLEVBQVE7QUFDTkEsVUFBQUEsRUFBRSxDQUFDUSxpQkFBVUMsZ0JBQVYsQ0FBMkJDLHFCQUFVQyxjQUFyQyxDQUFELENBQUY7QUFDRDs7QUFDRFIsUUFBQUEsVUFBVSxDQUFDUyxJQUFYLENBQWdCLE9BQWhCLEVBQXlCSixpQkFBVUMsZ0JBQVYsQ0FBMkJDLHFCQUFVQyxjQUFyQyxDQUF6QjtBQUNELE9BTEQsRUFIaUMsQ0FTakM7O0FBQ0FSLE1BQUFBLFVBQVUsQ0FBQ1UsS0FBWCxHQUFtQixZQUFrQixDQUFFLENBQXZDLENBVmlDLENBV2pDOzs7QUFDQVYsTUFBQUEsVUFBVSxDQUFDVyxFQUFYLENBQWMsT0FBZCxFQUF1QixZQUFrQixDQUFFLENBQTNDO0FBQ0EsYUFBT1gsVUFBUDtBQUNEOztBQUVELFVBQU1ZLElBQUksR0FBRyxJQUFiOztBQUNBLFVBQU1DLE9BQWdCLEdBQUcsS0FBS0MsV0FBTCxDQUFpQmxCLE9BQWpCLENBQXpCOztBQUVBLFNBQUttQixnQkFBTCxDQUFzQm5CLE9BQU8sQ0FBQ29CLEdBQTlCLEVBQW1DSCxPQUFuQzs7QUFDQSxTQUFLSSxxQ0FBTCxDQUEyQ0osT0FBM0M7O0FBRUEsVUFBTUssTUFBTSxHQUFHdEIsT0FBTyxDQUFDc0IsTUFBUixJQUFrQixLQUFqQztBQUNBLFVBQU1DLEdBQUcsR0FBR3ZCLE9BQU8sQ0FBQ3dCLFFBQVIsSUFBb0IsS0FBSzFELE1BQUwsQ0FBWWMsR0FBWixHQUFrQm9CLE9BQU8sQ0FBQ3VCLEdBQTFEO0FBRUFQLElBQUFBLElBQUksQ0FBQ3RDLE1BQUwsQ0FBWStDLElBQVosQ0FDRTtBQUNFSCxNQUFBQSxNQUFNLEVBQUVBLE1BRFY7QUFFRUwsTUFBQUEsT0FBTyxFQUFFQSxPQUZYO0FBR0VNLE1BQUFBLEdBQUcsRUFBRUE7QUFIUCxLQURGLEVBTUUsb0NBTkY7O0FBU0EsUUFBSSxxQkFBU3ZCLE9BQU8sQ0FBQ0UsSUFBakIsQ0FBSixFQUE0QjtBQUMxQkEsTUFBQUEsSUFBSSxHQUFHdkMsSUFBSSxDQUFDK0QsU0FBTCxDQUFlMUIsT0FBTyxDQUFDRSxJQUF2QixDQUFQO0FBQ0FlLE1BQUFBLE9BQU8sQ0FBQyxjQUFELENBQVAsR0FBMEJBLE9BQU8sQ0FBQyxjQUFELENBQVAsSUFBMkJ2RCxtQkFBUUMsSUFBN0Q7QUFDRDs7QUFFRCxVQUFNZ0UsZUFBZSxHQUFHMUIsRUFBRSxHQUN0QixVQUFVMkIsR0FBVixFQUFlQyxHQUFmLEVBQW9CQyxJQUFwQixFQUFnQztBQUM5QixVQUFJQyxLQUFKO0FBQ0EsWUFBTUMsY0FBYyxHQUFHSixHQUFHLEdBQUcsQ0FBSCxHQUFPRSxJQUFJLENBQUNHLE1BQXRDLENBRjhCLENBRzlCOztBQUNBQyxNQUFBQSxXQUFXO0FBQ1hDLE1BQUFBLFdBQVcsR0FMbUIsQ0FNOUI7O0FBQ0FsQyxNQUFBQSxFQUFFLENBQUMyQixHQUFELEVBQU1DLEdBQU4sRUFBV0MsSUFBWCxDQUFGO0FBRUE7QUFDVjtBQUNBOztBQUNVLGVBQVNJLFdBQVQsR0FBNkI7QUFDM0IsWUFBSU4sR0FBSixFQUFTO0FBQ1BHLFVBQUFBLEtBQUssR0FBR0gsR0FBRyxDQUFDUSxPQUFaO0FBQ0E7QUFDRDs7QUFFRCxZQUFJcEMsT0FBTyxDQUFDRSxJQUFSLElBQWdCMkIsR0FBRyxDQUFDUSxVQUFKLEdBQWlCLEdBQXJDLEVBQTBDO0FBQ3hDLGNBQUk7QUFDRjtBQUNBUCxZQUFBQSxJQUFJLEdBQUduRSxJQUFJLENBQUNtQixLQUFMLENBQVdnRCxJQUFJLENBQUNRLFFBQUwsQ0FBY0MsOEJBQW1CQyxJQUFqQyxDQUFYLENBQVA7QUFDRCxXQUhELENBR0UsT0FBT0MsSUFBUCxFQUFhO0FBQ2JYLFlBQUFBLElBQUksR0FBRyxFQUFQO0FBQ0FGLFlBQUFBLEdBQUcsR0FBR2EsSUFBTjtBQUNBVixZQUFBQSxLQUFLLEdBQUdILEdBQUcsQ0FBQ1EsT0FBWjtBQUNEO0FBQ0Y7O0FBRUQsWUFBSSxDQUFDUixHQUFELElBQVEscUJBQVNFLElBQVQsQ0FBWixFQUE0QjtBQUMxQixjQUFJN0QsZ0JBQUV5RSxRQUFGLENBQVdaLElBQUksQ0FBQ0MsS0FBaEIsQ0FBSixFQUE0QjtBQUMxQkEsWUFBQUEsS0FBSyxHQUFHRCxJQUFJLENBQUNDLEtBQWI7QUFDRDtBQUNGO0FBQ0Y7QUFDRDtBQUNWO0FBQ0E7OztBQUNVLGVBQVNJLFdBQVQsR0FBNkI7QUFDM0IsWUFBSUMsT0FBTyxHQUFHLHFEQUFkO0FBQ0FBLFFBQUFBLE9BQU8sSUFBSUwsS0FBSyxHQUFHLG9CQUFILEdBQTBCLG1DQUExQztBQUNBZixRQUFBQSxJQUFJLENBQUN0QyxNQUFMLENBQVlpRSxJQUFaLENBQ0U7QUFDRWYsVUFBQUEsR0FBRyxFQUFFQSxHQUFHLElBQUlnQixTQURkO0FBQ3lCO0FBQ3ZCN0MsVUFBQUEsT0FBTyxFQUFFO0FBQUV1QixZQUFBQSxNQUFNLEVBQUVBLE1BQVY7QUFBa0IxQyxZQUFBQSxHQUFHLEVBQUUyQztBQUF2QixXQUZYO0FBR0VzQixVQUFBQSxNQUFNLEVBQUVoQixHQUFHLElBQUksSUFBUCxHQUFjQSxHQUFHLENBQUNRLFVBQWxCLEdBQStCLEtBSHpDO0FBSUVOLFVBQUFBLEtBQUssRUFBRUEsS0FKVDtBQUtFZSxVQUFBQSxLQUFLLEVBQUU7QUFDTEMsWUFBQUEsRUFBRSxFQUFFN0MsSUFBSSxHQUFHQSxJQUFJLENBQUMrQixNQUFSLEdBQWlCLENBRHBCO0FBRUxlLFlBQUFBLEdBQUcsRUFBRWhCLGNBQWMsSUFBSTtBQUZsQjtBQUxULFNBREYsRUFXRUksT0FYRjtBQWFEO0FBQ0YsS0F4RHFCLEdBeUR0QlEsU0F6REo7QUEyREEsUUFBSUssY0FBYyxHQUFHO0FBQ25CckUsTUFBQUEsR0FBRyxFQUFFMkMsR0FEYztBQUVuQkQsTUFBQUEsTUFBTSxFQUFFQSxNQUZXO0FBR25CTCxNQUFBQSxPQUFPLEVBQUVBLE9BSFU7QUFJbkJhLE1BQUFBLElBQUksRUFBRTVCLElBSmE7QUFLbkJnRCxNQUFBQSxLQUFLLEVBQUUsS0FBS0EsS0FMTztBQU1uQkMsTUFBQUEsUUFBUSxFQUFFLElBTlM7QUFPbkJDLE1BQUFBLElBQUksRUFBRSxJQVBhO0FBUW5CbEUsTUFBQUEsT0FBTyxFQUFFLEtBQUtBLE9BUks7QUFTbkJtRSxNQUFBQSxTQUFTLEVBQUUsS0FBSzVELFVBVEc7QUFVbkI2RCxNQUFBQSxZQUFZLEVBQUUsS0FBSzNEO0FBVkEsS0FBckI7O0FBYUEsUUFBSSxLQUFLbEIsRUFBVCxFQUFhO0FBQ1h3RSxNQUFBQSxjQUFjLEdBQUdNLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JQLGNBQWxCLEVBQWtDO0FBQ2pEeEUsUUFBQUEsRUFBRSxFQUFFLEtBQUtBO0FBRHdDLE9BQWxDLENBQWpCO0FBR0Q7O0FBRUQsVUFBTTJDLEdBQUcsR0FBRyxzQkFBUTZCLGNBQVIsRUFBd0J0QixlQUF4QixDQUFaO0FBRUEsUUFBSThCLFlBQVksR0FBRyxLQUFuQjtBQUNBckMsSUFBQUEsR0FBRyxDQUFDTCxFQUFKLENBQU8sVUFBUCxFQUFtQixVQUFVYyxHQUFWLEVBQXFCO0FBQ3RDO0FBQ0E7QUFDQSxVQUFJLENBQUNULEdBQUcsQ0FBQ3NDLGtCQUFMLElBQTJCLENBQUNELFlBQWhDLEVBQThDO0FBQzVDQSxRQUFBQSxZQUFZLEdBQUcsSUFBZjs7QUFDQXpDLFFBQUFBLElBQUksQ0FBQ2IsWUFBTCxDQUFrQixJQUFsQjtBQUNEOztBQUVELFVBQUlsQyxnQkFBRUMsS0FBRixDQUFReUQsZUFBUixNQUE2QixLQUFqQyxFQUF3QztBQUN0QyxTQUFDLFNBQVNnQyxNQUFULEdBQXdCO0FBQ3ZCLGdCQUFNdkIsT0FBTyxHQUFHLGlFQUFoQjtBQUNBcEIsVUFBQUEsSUFBSSxDQUFDdEMsTUFBTCxDQUFZaUUsSUFBWixDQUNFO0FBQ0U1QyxZQUFBQSxPQUFPLEVBQUU7QUFDUHVCLGNBQUFBLE1BQU0sRUFBRUEsTUFERDtBQUVQMUMsY0FBQUEsR0FBRyxFQUFFMkM7QUFGRSxhQURYO0FBS0VzQixZQUFBQSxNQUFNLEVBQUU1RSxnQkFBRTJGLE1BQUYsQ0FBUy9CLEdBQVQsTUFBa0IsS0FBbEIsR0FBMEJBLEdBQUcsQ0FBQ1EsVUFBOUIsR0FBMkM7QUFMckQsV0FERixFQVFFRCxPQVJGO0FBVUQsU0FaRDtBQWFEO0FBQ0YsS0F2QkQ7QUF3QkFoQixJQUFBQSxHQUFHLENBQUNMLEVBQUosQ0FBTyxPQUFQLEVBQWdCLFVBQVUwQixJQUFWLEVBQXNCO0FBQ3BDO0FBQ0E7QUFDQSxVQUFJLENBQUNyQixHQUFHLENBQUNzQyxrQkFBTCxJQUEyQixDQUFDRCxZQUFoQyxFQUE4QztBQUM1Q0EsUUFBQUEsWUFBWSxHQUFHLElBQWY7O0FBQ0F6QyxRQUFBQSxJQUFJLENBQUNiLFlBQUwsQ0FBa0IsS0FBbEI7QUFDRDtBQUNGLEtBUEQsRUFuSjRELENBMko1RDs7QUFDQSxXQUFPaUIsR0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDVUYsRUFBQUEsV0FBVyxDQUFDbEIsT0FBRCxFQUF3QjtBQUFBOztBQUN6QyxVQUFNaUIsT0FBTyxHQUFHakIsT0FBTyxDQUFDaUIsT0FBUixJQUFtQixFQUFuQztBQUNBLFVBQU00QyxNQUFNLEdBQUduRyxtQkFBUW9HLE1BQXZCO0FBQ0EsVUFBTUMsY0FBYyxHQUFHckcsbUJBQVFzRyxlQUEvQjtBQUNBLFVBQU16RixTQUFTLEdBQUdiLG1CQUFRdUcsVUFBMUI7QUFFQWhELElBQUFBLE9BQU8sQ0FBQzRDLE1BQUQsQ0FBUCxHQUFrQjVDLE9BQU8sQ0FBQzRDLE1BQUQsQ0FBUCxJQUFtQmpHLGlCQUFyQztBQUNBcUQsSUFBQUEsT0FBTyxDQUFDOEMsY0FBRCxDQUFQLEdBQTBCOUMsT0FBTyxDQUFDOEMsY0FBRCxDQUFQLElBQTJCLE1BQXJELENBUHlDLENBUXpDOztBQUNBOUMsSUFBQUEsT0FBTyxDQUFDMUMsU0FBRCxDQUFQLEdBQXFCLEtBQUtBLFNBQUwsR0FBa0IsUUFBTyxLQUFLQSxTQUFVLEdBQXhDLG1CQUE2Q3lCLE9BQU8sQ0FBQ29CLEdBQXJELGlEQUE2QyxhQUFhOEMsR0FBYixDQUFpQixZQUFqQixDQUFsRTtBQUVBLFdBQU8sS0FBS0MsUUFBTCxDQUFjbEQsT0FBZCxDQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNVa0QsRUFBQUEsUUFBUSxDQUFDbEQsT0FBRCxFQUF3QjtBQUN0QyxVQUFNO0FBQUVtRCxNQUFBQTtBQUFGLFFBQVcsS0FBS3RHLE1BQXRCOztBQUVBLFFBQUlHLGdCQUFFQyxLQUFGLENBQVFrRyxJQUFSLEtBQWlCbkQsT0FBTyxDQUFDdkQsbUJBQVEyRyxhQUFULENBQTVCLEVBQXFEO0FBQ25ELGFBQU9wRCxPQUFQO0FBQ0Q7O0FBRUQsUUFBSWhELGdCQUFFcUcsUUFBRixDQUFXRixJQUFYLE1BQXFCLEtBQXJCLElBQThCbkcsZ0JBQUVxRyxRQUFGLENBQVdGLElBQUksQ0FBQ0csS0FBaEIsTUFBMkIsS0FBN0QsRUFBb0U7QUFDbEUsV0FBS0MsZUFBTCxDQUFxQixjQUFyQjtBQUNELEtBVHFDLENBV3RDO0FBQ0E7QUFDQTs7O0FBQ0EsUUFBSUQsS0FBSjtBQUNBLFVBQU1FLFNBQWMsR0FBR0wsSUFBdkI7O0FBRUEsUUFBSW5HLGdCQUFFQyxLQUFGLENBQVF1RyxTQUFTLENBQUNGLEtBQWxCLE1BQTZCLEtBQTdCLElBQXNDdEcsZ0JBQUV5RSxRQUFGLENBQVcrQixTQUFTLENBQUNGLEtBQXJCLENBQTFDLEVBQXVFO0FBQ3JFQSxNQUFBQSxLQUFLLEdBQUdFLFNBQVMsQ0FBQ0YsS0FBbEI7QUFDRCxLQUZELE1BRU8sSUFBSXRHLGdCQUFFQyxLQUFGLENBQVF1RyxTQUFTLENBQUNDLFNBQWxCLE1BQWlDLEtBQXJDLEVBQTRDO0FBQ2pELFVBQUl6RyxnQkFBRXlFLFFBQUYsQ0FBVytCLFNBQVMsQ0FBQ0MsU0FBckIsQ0FBSixFQUFxQztBQUNuQ0gsUUFBQUEsS0FBSyxHQUFHaEUsT0FBTyxDQUFDb0UsR0FBUixDQUFZRixTQUFTLENBQUNDLFNBQXRCLENBQVI7QUFDRCxPQUZELE1BRU8sSUFBSXpHLGdCQUFFMkcsU0FBRixDQUFZSCxTQUFTLENBQUNDLFNBQXRCLEtBQW9DRCxTQUFTLENBQUNDLFNBQWxELEVBQTZEO0FBQ2xFSCxRQUFBQSxLQUFLLEdBQUdoRSxPQUFPLENBQUNvRSxHQUFSLENBQVlFLFNBQXBCO0FBQ0QsT0FGTSxNQUVBO0FBQ0wsYUFBS25HLE1BQUwsQ0FBWXFELEtBQVosQ0FBa0IrQyxzQkFBV0MsY0FBN0I7O0FBQ0EsYUFBS1AsZUFBTCxDQUFxQk0sc0JBQVdDLGNBQWhDO0FBQ0Q7QUFDRixLQVRNLE1BU0E7QUFDTFIsTUFBQUEsS0FBSyxHQUFHaEUsT0FBTyxDQUFDb0UsR0FBUixDQUFZRSxTQUFwQjtBQUNEOztBQUVELFFBQUk1RyxnQkFBRUMsS0FBRixDQUFRcUcsS0FBUixDQUFKLEVBQW9CO0FBQ2xCLFdBQUtDLGVBQUwsQ0FBcUJNLHNCQUFXQyxjQUFoQztBQUNELEtBbENxQyxDQW9DdEM7OztBQUNBLFVBQU1DLElBQUksR0FBR1AsU0FBUyxDQUFDTyxJQUFWLElBQWtCQyxzQkFBL0I7O0FBQ0EsU0FBS0MsdUJBQUwsQ0FBNkJqRSxPQUE3QixFQUFzQytELElBQXRDLEVBQTRDVCxLQUE1Qzs7QUFFQSxXQUFPdEQsT0FBUDtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O0FBQ1V1RCxFQUFBQSxlQUFlLENBQUNwQyxPQUFELEVBQXlCO0FBQzlDLFNBQUsxRCxNQUFMLENBQVlxRCxLQUFaLENBQWtCSyxPQUFsQjtBQUNBLFVBQU0sSUFBSStDLEtBQUosQ0FBVS9DLE9BQVYsQ0FBTjtBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNVOEMsRUFBQUEsdUJBQXVCLENBQUNqRSxPQUFELEVBQWUrRCxJQUFmLEVBQTZCVCxLQUE3QixFQUErQztBQUM1RSxVQUFNYSxLQUFhLEdBQUdKLElBQUksQ0FBQ0ssV0FBTCxFQUF0Qjs7QUFFQSxRQUFJRCxLQUFLLEtBQUtFLHdCQUFhRCxXQUFiLEVBQVYsSUFBd0NELEtBQUssS0FBS0gsdUJBQVlJLFdBQVosRUFBdEQsRUFBaUY7QUFDL0UsV0FBS2IsZUFBTCxDQUFzQixjQUFhWSxLQUFNLGVBQXpDO0FBQ0Q7O0FBRURKLElBQUFBLElBQUksR0FBRy9HLGdCQUFFc0gsVUFBRixDQUFhUCxJQUFiLENBQVA7QUFDQS9ELElBQUFBLE9BQU8sQ0FBQ3ZELG1CQUFRMkcsYUFBVCxDQUFQLEdBQWlDLHVCQUFXVyxJQUFYLEVBQWlCVCxLQUFqQixDQUFqQztBQUNEO0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFVWxELEVBQUFBLHFDQUFxQyxDQUFDSixPQUFELEVBQXdCO0FBQ25FLFFBQUksQ0FBQyxLQUFLbkQsTUFBTCxDQUFZbUQsT0FBakIsRUFBMEI7QUFDeEIsYUFBT0EsT0FBUDtBQUNELEtBSGtFLENBS25FOztBQUNBOzs7QUFDQSxTQUFLLE1BQU1sRCxHQUFYLElBQWtCLEtBQUtELE1BQUwsQ0FBWW1ELE9BQTlCLEVBQXVDO0FBQ3JDQSxNQUFBQSxPQUFPLENBQUNsRCxHQUFELENBQVAsR0FBZSxLQUFLRCxNQUFMLENBQVltRCxPQUFaLENBQW9CbEQsR0FBcEIsQ0FBZjtBQUNEO0FBQ0Y7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7QUFDU3lILEVBQUFBLGFBQWEsQ0FBQzVHLEdBQUQsRUFBdUI7QUFDekM7QUFDQSxVQUFNNkcsU0FBNkIsR0FBRzVHLGFBQUlDLEtBQUosQ0FBVUYsR0FBVixDQUF0Qzs7QUFDQSxVQUFNOEcsT0FBTyxHQUFJQyxlQUFELElBQW1DQSxlQUFlLENBQUMxRyxRQUFoQixLQUE2QixRQUE3QixLQUEwQ3dHLFNBQVMsQ0FBQ0csSUFBVixLQUFtQixJQUFuQixJQUEyQkgsU0FBUyxDQUFDRyxJQUFWLEtBQW1CLEtBQXhGLENBQW5EOztBQUNBLFVBQU1DLE9BQU8sR0FBSUYsZUFBRCxJQUErQkQsT0FBTyxDQUFDQyxlQUFELENBQVAsR0FBMkJBLGVBQWUsQ0FBQzNHLFFBQTNDLEdBQXNEMkcsZUFBZSxDQUFDRyxJQUFySDs7QUFDQSxVQUFNQyxlQUF3QixHQUFHTixTQUFTLENBQUN4RyxRQUFWLEtBQXVCLEtBQUtMLEdBQUwsQ0FBU0ssUUFBakU7QUFDQSxVQUFNK0csV0FBb0IsR0FBR0gsT0FBTyxDQUFDSixTQUFELENBQVAsS0FBdUJJLE9BQU8sQ0FBQyxLQUFLakgsR0FBTixDQUEzRCxDQU55QyxDQU96Qzs7QUFDQSxVQUFNcUgsV0FBb0IsR0FBR1IsU0FBUyxDQUFDUyxJQUFWLENBQWVDLE9BQWYsQ0FBdUIsS0FBS3ZILEdBQUwsQ0FBU3NILElBQWhDLE1BQTBDLENBQXZFO0FBRUEsV0FBT0gsZUFBZSxJQUFJQyxXQUFuQixJQUFrQ0MsV0FBekM7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ1NHLEVBQUFBLGlCQUFpQixDQUFDQyxJQUFELEVBQWVyRyxPQUFmLEVBQTZCc0csUUFBN0IsRUFBdUQ7QUFDN0UsVUFBTXJGLE9BQU8sR0FBRyxFQUFoQjs7QUFDQSxRQUFJaEQsZ0JBQUVDLEtBQUYsQ0FBUThCLE9BQU8sQ0FBQ3VHLElBQWhCLE1BQTBCLEtBQTlCLEVBQXFDO0FBQ25DdEYsTUFBQUEsT0FBTyxDQUFDLGVBQUQsQ0FBUCxHQUEyQmpCLE9BQU8sQ0FBQ3VHLElBQW5DO0FBQ0F0RixNQUFBQSxPQUFPLENBQUN2RCxtQkFBUW9HLE1BQVQsQ0FBUCxHQUEwQmxHLGlCQUExQjtBQUNEOztBQUVELFNBQUttQyxPQUFMLENBQ0U7QUFDRXdCLE1BQUFBLEdBQUcsRUFBRyxJQUFHbEUsTUFBTSxDQUFDZ0osSUFBRCxDQUFPLEVBRHhCO0FBRUVuRyxNQUFBQSxJQUFJLEVBQUUsSUFGUjtBQUdFZSxNQUFBQSxPQUFPLEVBQUVBLE9BSFg7QUFJRUcsTUFBQUEsR0FBRyxFQUFFcEIsT0FBTyxDQUFDb0I7QUFKZixLQURGLEVBT0UsQ0FBQ1EsR0FBRCxFQUFNQyxHQUFOLEVBQVdDLElBQVgsS0FBMEI7QUFDeEIsVUFBSUYsR0FBSixFQUFTO0FBQ1AsZUFBTzBFLFFBQVEsQ0FBQzFFLEdBQUQsQ0FBZjtBQUNEOztBQUNELFVBQUlDLEdBQUcsQ0FBQ1EsVUFBSixLQUFtQm1FLHVCQUFZQyxTQUFuQyxFQUE4QztBQUM1QyxlQUFPSCxRQUFRLENBQUM3RixpQkFBVWlHLFdBQVYsQ0FBc0IvRixxQkFBVWdHLGtCQUFoQyxDQUFELENBQWY7QUFDRDs7QUFDRCxVQUFJLEVBQUU5RSxHQUFHLENBQUNRLFVBQUosSUFBa0JtRSx1QkFBWUksRUFBOUIsSUFBb0MvRSxHQUFHLENBQUNRLFVBQUosR0FBaUJtRSx1QkFBWUssZ0JBQW5FLENBQUosRUFBMEY7QUFDeEYsY0FBTTlFLEtBQUssR0FBR3RCLGlCQUFVQyxnQkFBVixDQUE0QixHQUFFQyxxQkFBVW1HLGVBQWdCLEtBQUlqRixHQUFHLENBQUNRLFVBQVcsRUFBM0UsQ0FBZCxDQUR3RixDQUV4Rjs7O0FBQ0FOLFFBQUFBLEtBQUssQ0FBQ2dGLFlBQU4sR0FBcUJsRixHQUFHLENBQUNRLFVBQXpCO0FBQ0EsZUFBT2lFLFFBQVEsQ0FBQ3ZFLEtBQUQsQ0FBZjtBQUNEOztBQUNEdUUsTUFBQUEsUUFBUSxDQUFDLElBQUQsRUFBT3hFLElBQVAsRUFBYUQsR0FBRyxDQUFDWixPQUFKLENBQVlzRixJQUF6QixDQUFSO0FBQ0QsS0FyQkg7QUF1QkQ7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7QUFDRVMsRUFBQUEsWUFBWSxDQUFDcEksR0FBRCxFQUFjO0FBQ3hCLFVBQU1xSSxNQUFNLEdBQUcsSUFBSUMsb0JBQUosQ0FBZ0IsRUFBaEIsQ0FBZjtBQUNBLFFBQUlDLGNBQWMsR0FBRyxDQUFyQjtBQUNBLFFBQUlDLGVBQUo7O0FBRUFILElBQUFBLE1BQU0sQ0FBQ0ksS0FBUCxHQUFlLE1BQU0sQ0FBRSxDQUF2Qjs7QUFDQSxVQUFNQyxVQUFVLEdBQUcsS0FBS3ZILE9BQUwsQ0FBYTtBQUM5QnlCLE1BQUFBLFFBQVEsRUFBRTVDLEdBRG9CO0FBRTlCdUUsTUFBQUEsUUFBUSxFQUFFLElBRm9CO0FBRzlCbEMsTUFBQUEsT0FBTyxFQUFFO0FBQ1BzRyxRQUFBQSxNQUFNLEVBQUUzSjtBQUREO0FBSHFCLEtBQWIsQ0FBbkI7QUFRQTBKLElBQUFBLFVBQVUsQ0FBQ3ZHLEVBQVgsQ0FBYyxVQUFkLEVBQTBCLFVBQVVjLEdBQVYsRUFBb0I7QUFDNUMsVUFBSUEsR0FBRyxDQUFDUSxVQUFKLEtBQW1CbUUsdUJBQVlDLFNBQW5DLEVBQThDO0FBQzVDLGVBQU9RLE1BQU0sQ0FBQ3BHLElBQVAsQ0FBWSxPQUFaLEVBQXFCSixpQkFBVWlHLFdBQVYsQ0FBc0IvRixxQkFBVTZHLGVBQWhDLENBQXJCLENBQVA7QUFDRDs7QUFDRCxVQUFJLEVBQUUzRixHQUFHLENBQUNRLFVBQUosSUFBa0JtRSx1QkFBWUksRUFBOUIsSUFBb0MvRSxHQUFHLENBQUNRLFVBQUosR0FBaUJtRSx1QkFBWUssZ0JBQW5FLENBQUosRUFBMEY7QUFDeEYsZUFBT0ksTUFBTSxDQUFDcEcsSUFBUCxDQUFZLE9BQVosRUFBcUJKLGlCQUFVQyxnQkFBVixDQUE0QiwyQkFBMEJtQixHQUFHLENBQUNRLFVBQVcsRUFBckUsQ0FBckIsQ0FBUDtBQUNEOztBQUNELFVBQUlSLEdBQUcsQ0FBQ1osT0FBSixDQUFZd0csdUJBQVlDLGNBQXhCLENBQUosRUFBNkM7QUFDM0NOLFFBQUFBLGVBQWUsR0FBR3ZGLEdBQUcsQ0FBQ1osT0FBSixDQUFZd0csdUJBQVlDLGNBQXhCLENBQWxCO0FBQ0FULFFBQUFBLE1BQU0sQ0FBQ3BHLElBQVAsQ0FBWTRHLHVCQUFZQyxjQUF4QixFQUF3QzdGLEdBQUcsQ0FBQ1osT0FBSixDQUFZd0csdUJBQVlDLGNBQXhCLENBQXhDO0FBQ0Q7O0FBRURKLE1BQUFBLFVBQVUsQ0FBQ0ssSUFBWCxDQUFnQlYsTUFBaEI7QUFDRCxLQWJEO0FBZUFLLElBQUFBLFVBQVUsQ0FBQ3ZHLEVBQVgsQ0FBYyxPQUFkLEVBQXVCLFVBQVVhLEdBQVYsRUFBZTtBQUNwQ3FGLE1BQUFBLE1BQU0sQ0FBQ3BHLElBQVAsQ0FBWSxPQUFaLEVBQXFCZSxHQUFyQjtBQUNELEtBRkQ7QUFHQTBGLElBQUFBLFVBQVUsQ0FBQ3ZHLEVBQVgsQ0FBYyxNQUFkLEVBQXNCLFVBQVU2RyxJQUFWLEVBQWdCO0FBQ3BDVCxNQUFBQSxjQUFjLElBQUlTLElBQUksQ0FBQzNGLE1BQXZCO0FBQ0QsS0FGRDtBQUdBcUYsSUFBQUEsVUFBVSxDQUFDdkcsRUFBWCxDQUFjLEtBQWQsRUFBcUIsVUFBVTZHLElBQVYsRUFBZ0I7QUFDbkMsVUFBSUEsSUFBSixFQUFVO0FBQ1JULFFBQUFBLGNBQWMsSUFBSVMsSUFBSSxDQUFDM0YsTUFBdkI7QUFDRDs7QUFDRCxVQUFJbUYsZUFBZSxJQUFJRCxjQUFjLElBQUlDLGVBQXpDLEVBQTBEO0FBQ3hESCxRQUFBQSxNQUFNLENBQUNwRyxJQUFQLENBQVksT0FBWixFQUFxQkosaUJBQVVDLGdCQUFWLENBQTJCQyxxQkFBVWtILGdCQUFyQyxDQUFyQjtBQUNEO0FBQ0YsS0FQRDtBQVFBLFdBQU9aLE1BQVA7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7OztBQUNTYSxFQUFBQSxNQUFNLENBQUM5SCxPQUFELEVBQWdDO0FBQzNDLFVBQU0rSCxlQUFvQixHQUFHLElBQUkxSCxnQkFBTzJILFdBQVgsQ0FBdUI7QUFBRUMsTUFBQUEsVUFBVSxFQUFFO0FBQWQsS0FBdkIsQ0FBN0I7QUFDQSxVQUFNQyxhQUE4QixHQUFHLEtBQUtuSSxPQUFMLENBQWE7QUFDbER3QixNQUFBQSxHQUFHLEVBQUV2QixPQUFPLENBQUNvQixHQUFSLENBQVl4QyxHQURpQztBQUVsRHdDLE1BQUFBLEdBQUcsRUFBRXBCLE9BQU8sQ0FBQ29CLEdBRnFDO0FBR2xESCxNQUFBQSxPQUFPLEVBQUU7QUFDUDtBQUNBa0gsUUFBQUEsT0FBTyxFQUFFbkksT0FBTyxDQUFDb0IsR0FBUixDQUFZOEMsR0FBWixDQUFnQixTQUFoQjtBQUZGO0FBSHlDLEtBQWIsQ0FBdkM7O0FBU0EsVUFBTWtFLFlBQVksR0FBSUMsR0FBRCxJQUF3QjtBQUMzQyxVQUFJLDRCQUFnQkEsR0FBaEIsQ0FBSixFQUEwQjtBQUN4Qk4sUUFBQUEsZUFBZSxDQUFDbEgsSUFBaEIsQ0FBcUIsTUFBckIsRUFBNkJ3SCxHQUE3QjtBQUNEO0FBQ0YsS0FKRDs7QUFNQUgsSUFBQUEsYUFBYSxDQUFDbkgsRUFBZCxDQUFpQixVQUFqQixFQUE4QmMsR0FBRCxJQUFlO0FBQzFDLFVBQUksQ0FBQ3lHLE1BQU0sQ0FBQ3pHLEdBQUcsQ0FBQ1EsVUFBTCxDQUFOLENBQXVCa0csS0FBdkIsQ0FBNkIsU0FBN0IsQ0FBTCxFQUE4QztBQUM1QyxlQUFPUixlQUFlLENBQUNsSCxJQUFoQixDQUFxQixPQUFyQixFQUE4QkosaUJBQVVDLGdCQUFWLENBQTRCLG1CQUFrQm1CLEdBQUcsQ0FBQ1EsVUFBVyxjQUE3RCxDQUE5QixDQUFQO0FBQ0QsT0FIeUMsQ0FLMUM7QUFDQTs7O0FBQ0EsVUFBSW1HLFVBQUo7O0FBQ0EsVUFBSTNHLEdBQUcsQ0FBQ1osT0FBSixDQUFZd0csdUJBQVlnQixnQkFBeEIsTUFBOEMvSyxtQkFBUWdMLElBQTFELEVBQWdFO0FBQzlERixRQUFBQSxVQUFVLEdBQUczRyxHQUFHLENBQUM4RixJQUFKLENBQVNnQixjQUFLQyxXQUFMLEVBQVQsQ0FBYjtBQUNELE9BRkQsTUFFTztBQUNMSixRQUFBQSxVQUFVLEdBQUczRyxHQUFiO0FBQ0Q7O0FBQ0QyRyxNQUFBQSxVQUFVLENBQUNiLElBQVgsQ0FBZ0JrQixvQkFBVy9KLEtBQVgsQ0FBaUIsR0FBakIsQ0FBaEIsRUFBdUNpQyxFQUF2QyxDQUEwQyxNQUExQyxFQUFrRHFILFlBQWxEO0FBQ0FJLE1BQUFBLFVBQVUsQ0FBQ3pILEVBQVgsQ0FBYyxLQUFkLEVBQXFCLE1BQVk7QUFDL0JnSCxRQUFBQSxlQUFlLENBQUNsSCxJQUFoQixDQUFxQixLQUFyQjtBQUNELE9BRkQ7QUFHRCxLQWpCRDtBQW1CQXFILElBQUFBLGFBQWEsQ0FBQ25ILEVBQWQsQ0FBaUIsT0FBakIsRUFBMkJhLEdBQUQsSUFBc0I7QUFDOUNtRyxNQUFBQSxlQUFlLENBQUNsSCxJQUFoQixDQUFxQixPQUFyQixFQUE4QmUsR0FBOUI7QUFDRCxLQUZEOztBQUlBbUcsSUFBQUEsZUFBZSxDQUFDVixLQUFoQixHQUF3QixNQUFZO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBYSxNQUFBQSxhQUFhLENBQUNiLEtBQWQ7QUFDQVUsTUFBQUEsZUFBZSxDQUFDbEgsSUFBaEIsQ0FBcUIsS0FBckI7QUFDRCxLQU5EOztBQVFBLFdBQU9rSCxlQUFQO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNVNUcsRUFBQUEsZ0JBQWdCLENBQUNDLEdBQUQsRUFBV0gsT0FBWCxFQUErQjtBQUNyRCxRQUFJRyxHQUFKLEVBQVM7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBSSxDQUFDLEtBQUs4QixLQUFWLEVBQWlCO0FBQ2ZqQyxRQUFBQSxPQUFPLENBQUMsaUJBQUQsQ0FBUCxHQUE2QixDQUFDRyxHQUFHLENBQUM4QyxHQUFKLENBQVEsaUJBQVIsSUFBNkI5QyxHQUFHLENBQUM4QyxHQUFKLENBQVEsaUJBQVIsSUFBNkIsSUFBMUQsR0FBaUUsRUFBbEUsSUFBd0U5QyxHQUFHLENBQUMwSCxVQUFKLENBQWVDLGFBQXBIO0FBQ0Q7QUFDRixLQWJvRCxDQWVyRDs7O0FBQ0E5SCxJQUFBQSxPQUFPLENBQUMsS0FBRCxDQUFQLEdBQWlCRyxHQUFHLElBQUlBLEdBQUcsQ0FBQzhDLEdBQUosQ0FBUSxLQUFSLENBQVAsR0FBd0I5QyxHQUFHLENBQUM4QyxHQUFKLENBQVEsS0FBUixJQUFpQixJQUF6QyxHQUFnRCxFQUFqRTtBQUVBakQsSUFBQUEsT0FBTyxDQUFDLEtBQUQsQ0FBUCxJQUFrQixTQUFTLEtBQUt0QyxTQUFkLEdBQTBCLGNBQTVDO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7QUFDVXdCLEVBQUFBLFlBQVksQ0FBQzZJLEtBQUQsRUFBa0M7QUFDcEQsUUFBSUMsU0FBUyxDQUFDaEgsTUFBVixLQUFxQixDQUF6QixFQUE0QjtBQUMxQixhQUFPLEtBQUtpSCxpQkFBTCxPQUE2QixLQUFwQztBQUNEOztBQUNELFFBQUlGLEtBQUosRUFBVztBQUNULFVBQUksS0FBSzFLLGVBQUwsSUFBd0IsS0FBS2lCLFNBQWpDLEVBQTRDO0FBQzFDLGFBQUtiLE1BQUwsQ0FBWVUsSUFBWixDQUNFO0FBQ0UwRyxVQUFBQSxJQUFJLEVBQUUsS0FBS2xILEdBQUwsQ0FBU2tIO0FBRGpCLFNBREYsRUFJRSw2QkFKRjtBQU1EOztBQUNELFdBQUt4SCxlQUFMLEdBQXVCLENBQXZCO0FBQ0QsS0FWRCxNQVVPO0FBQ0wsV0FBS0EsZUFBTDs7QUFDQSxVQUFJLEtBQUtBLGVBQUwsS0FBeUIsS0FBS2lCLFNBQWxDLEVBQTZDO0FBQzNDLGFBQUtiLE1BQUwsQ0FBWVUsSUFBWixDQUNFO0FBQ0UwRyxVQUFBQSxJQUFJLEVBQUUsS0FBS2xILEdBQUwsQ0FBU2tIO0FBRGpCLFNBREYsRUFJRSw2QkFKRjtBQU1EO0FBQ0Y7O0FBRUQsU0FBS3FELGlCQUFMLEdBQXlCQyxJQUFJLENBQUNDLEdBQUwsRUFBekI7QUFDRDtBQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7OztBQUNVSCxFQUFBQSxpQkFBaUIsR0FBWTtBQUNuQyxXQUFPLEtBQUs1SyxlQUFMLElBQXdCLEtBQUtpQixTQUE3QixJQUEwQytKLElBQUksQ0FBQ0MsR0FBTCxDQUFTSCxJQUFJLENBQUNDLEdBQUwsS0FBYyxLQUFLRixpQkFBNUIsSUFBNEQsS0FBSzNKLFlBQWxIO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ1VULEVBQUFBLFdBQVcsQ0FBQ0MsUUFBRCxFQUFtQmxCLE1BQW5CLEVBQTRDMEwsVUFBNUMsRUFBZ0U5RCxPQUFoRSxFQUF3RjtBQUN6RyxRQUFJK0QsV0FBSjtBQUNBLFVBQU1DLFNBQWlCLEdBQUdoRSxPQUFPLEdBQUcsYUFBSCxHQUFtQixZQUFwRCxDQUZ5RyxDQUl6Rzs7QUFDQSxRQUFJZ0UsU0FBUyxJQUFJNUwsTUFBakIsRUFBeUI7QUFDdkIsV0FBS29GLEtBQUwsR0FBYXBGLE1BQU0sQ0FBQzRMLFNBQUQsQ0FBbkI7QUFDRCxLQUZELE1BRU8sSUFBSUEsU0FBUyxJQUFJRixVQUFqQixFQUE2QjtBQUNsQyxXQUFLdEcsS0FBTCxHQUFhc0csVUFBVSxDQUFDRSxTQUFELENBQXZCO0FBQ0Q7O0FBQ0QsUUFBSSxjQUFjNUwsTUFBbEIsRUFBMEI7QUFDeEI7QUFDQTJMLE1BQUFBLFdBQVcsR0FBRzNMLE1BQU0sQ0FBQzZMLFFBQXJCO0FBQ0QsS0FIRCxNQUdPLElBQUksY0FBY0gsVUFBbEIsRUFBOEI7QUFDbkNDLE1BQUFBLFdBQVcsR0FBR0QsVUFBVSxDQUFDRyxRQUF6QjtBQUNELEtBZndHLENBaUJ6Rzs7O0FBQ0EsUUFBSTNLLFFBQVEsQ0FBQyxDQUFELENBQVIsS0FBZ0IsR0FBcEIsRUFBeUI7QUFDdkJBLE1BQUFBLFFBQVEsR0FBRyxNQUFNQSxRQUFqQjtBQUNEOztBQUVELFFBQUlmLGdCQUFFeUUsUUFBRixDQUFXK0csV0FBWCxLQUEyQkEsV0FBVyxDQUFDeEgsTUFBM0MsRUFBbUQ7QUFDakQ7QUFDQXdILE1BQUFBLFdBQVcsR0FBR0EsV0FBVyxDQUFDRyxLQUFaLENBQWtCLEdBQWxCLENBQWQ7QUFDRDs7QUFFRCxRQUFJM0wsZ0JBQUU0TCxPQUFGLENBQVVKLFdBQVYsQ0FBSixFQUE0QjtBQUMxQixXQUFLLElBQUlLLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdMLFdBQVcsQ0FBQ3hILE1BQWhDLEVBQXdDNkgsQ0FBQyxFQUF6QyxFQUE2QztBQUMzQyxZQUFJQyxXQUFXLEdBQUdOLFdBQVcsQ0FBQ0ssQ0FBRCxDQUE3Qjs7QUFDQSxZQUFJQyxXQUFXLENBQUMsQ0FBRCxDQUFYLEtBQW1CLEdBQXZCLEVBQTRCO0FBQzFCQSxVQUFBQSxXQUFXLEdBQUcsTUFBTUEsV0FBcEI7QUFDRDs7QUFDRCxZQUFJL0ssUUFBUSxDQUFDZ0wsV0FBVCxDQUFxQkQsV0FBckIsTUFBc0MvSyxRQUFRLENBQUNpRCxNQUFULEdBQWtCOEgsV0FBVyxDQUFDOUgsTUFBeEUsRUFBZ0Y7QUFDOUUsY0FBSSxLQUFLaUIsS0FBVCxFQUFnQjtBQUNkOUYsWUFBQUEsS0FBSyxDQUFDLDZDQUFELEVBQWdELEtBQUt3QixHQUFMLENBQVNxTCxJQUF6RCxFQUErREYsV0FBL0QsQ0FBTCxDQURjLENBRWQ7O0FBQ0EsaUJBQUs3RyxLQUFMLEdBQWEsS0FBYjtBQUNEOztBQUNEO0FBQ0Q7QUFDRjtBQUNGLEtBMUN3RyxDQTRDekc7OztBQUNBLFFBQUlqRixnQkFBRXlFLFFBQUYsQ0FBVyxLQUFLUSxLQUFoQixNQUEyQixLQUEvQixFQUFzQztBQUNwQztBQUNBLGFBQU8sS0FBS0EsS0FBWjtBQUNELEtBSEQsTUFHTztBQUNMOUYsTUFBQUEsS0FBSyxDQUFDLHVCQUFELEVBQTBCLEtBQUt3QixHQUFMLENBQVNxTCxJQUFuQyxFQUF5QyxLQUFLL0csS0FBOUMsQ0FBTDtBQUNEO0FBQ0Y7O0FBM29Ca0M7O2VBOG9CdEIvRSxZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEpTT05TdHJlYW0gZnJvbSAnSlNPTlN0cmVhbSc7XG5pbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XG5pbXBvcnQgU3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgVVJMLCB7IFVybFdpdGhTdHJpbmdRdWVyeSB9IGZyb20gJ3VybCc7XG5pbXBvcnQgemxpYiBmcm9tICd6bGliJztcblxuaW1wb3J0IHsgUmVhZFRhcmJhbGwgfSBmcm9tICdAdmVyZGFjY2lvL3N0cmVhbXMnO1xuaW1wb3J0IHsgQ2FsbGJhY2ssIENvbmZpZywgSGVhZGVycywgTG9nZ2VyLCBQYWNrYWdlIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCB7IElQcm94eSwgVXBMaW5rQ29uZkxvY2FsIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBDSEFSQUNURVJfRU5DT0RJTkcsIEVSUk9SX0NPREUsIEhFQURFUlMsIEhFQURFUl9UWVBFLCBIVFRQX1NUQVRVUywgVE9LRU5fQkFTSUMsIFRPS0VOX0JFQVJFUiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEVycm9yQ29kZSwgYnVpbGRUb2tlbiwgaXNPYmplY3QsIGlzT2JqZWN0T3JBcnJheSwgcGFyc2VJbnRlcnZhbCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2Npbzp1cC1zdG9yYWdlJyk7XG5cbmNvbnN0IGVuY29kZSA9IGZ1bmN0aW9uICh0aGluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodGhpbmcpLnJlcGxhY2UoL14lNDAvLCAnQCcpO1xufTtcblxuY29uc3QganNvbkNvbnRlbnRUeXBlID0gSEVBREVSUy5KU09OO1xuY29uc3QgY29udGVudFR5cGVBY2NlcHQgPSBgJHtqc29uQ29udGVudFR5cGV9O2A7XG5cbi8qKlxuICogSnVzdCBhIGhlbHBlciAoYGNvbmZpZ1trZXldIHx8IGRlZmF1bHRgIGRvZXNuJ3Qgd29yayBiZWNhdXNlIG9mIHplcm9lcylcbiAqL1xuY29uc3Qgc2V0Q29uZmlnID0gKGNvbmZpZywga2V5LCBkZWYpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gXy5pc05pbChjb25maWdba2V5XSkgPT09IGZhbHNlID8gY29uZmlnW2tleV0gOiBkZWY7XG59O1xuXG4vKipcbiAqIEltcGxlbWVudHMgU3RvcmFnZSBpbnRlcmZhY2VcbiAqIChzYW1lIGZvciBzdG9yYWdlLmpzLCBsb2NhbC1zdG9yYWdlLmpzLCB1cC1zdG9yYWdlLmpzKVxuICovXG5jbGFzcyBQcm94eVN0b3JhZ2UgaW1wbGVtZW50cyBJUHJveHkge1xuICBwdWJsaWMgY29uZmlnOiBVcExpbmtDb25mTG9jYWw7XG4gIHB1YmxpYyBmYWlsZWRfcmVxdWVzdHM6IG51bWJlcjtcbiAgcHVibGljIHVzZXJBZ2VudDogc3RyaW5nO1xuICBwdWJsaWMgY2E6IHN0cmluZyB8IHZvaWQ7XG4gIHB1YmxpYyBsb2dnZXI6IExvZ2dlcjtcbiAgcHVibGljIHNlcnZlcl9pZDogc3RyaW5nO1xuICBwdWJsaWMgdXJsOiBhbnk7XG4gIHB1YmxpYyBtYXhhZ2U6IG51bWJlcjtcbiAgcHVibGljIHRpbWVvdXQ6IG51bWJlcjtcbiAgcHVibGljIG1heF9mYWlsczogbnVtYmVyO1xuICBwdWJsaWMgZmFpbF90aW1lb3V0OiBudW1iZXI7XG4gIHB1YmxpYyBhZ2VudF9vcHRpb25zOiBhbnk7XG4gIC8vIEZJWE1FOiB1cG5hbWUgaXMgYXNzaWduZWQgdG8gZWFjaCBpbnN0YW5jZVxuICAvLyBAdHMtaWdub3JlXG4gIHB1YmxpYyB1cG5hbWU6IHN0cmluZztcbiAgLy8gRklYTUU6IHByb3h5IGNhbiBiZSBib29sZWFuIG9yIG9iamVjdCwgc29tZXRoaW5nIHNtZWxscyBoZXJlXG4gIC8vIEB0cy1pZ25vcmVcbiAgcHVibGljIHByb3h5OiBzdHJpbmcgfCB2b2lkO1xuICAvLyBAdHMtaWdub3JlXG4gIHB1YmxpYyBsYXN0X3JlcXVlc3RfdGltZTogbnVtYmVyIHwgbnVsbDtcbiAgcHVibGljIHN0cmljdF9zc2w6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Kn0gY29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gbWFpbkNvbmZpZ1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogVXBMaW5rQ29uZkxvY2FsLCBtYWluQ29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmZhaWxlZF9yZXF1ZXN0cyA9IDA7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMudXNlckFnZW50ID0gbWFpbkNvbmZpZy51c2VyX2FnZW50O1xuICAgIHRoaXMuY2EgPSBjb25maWcuY2E7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy5zZXJ2ZXJfaWQgPSBtYWluQ29uZmlnLnNlcnZlcl9pZDtcblxuICAgIHRoaXMudXJsID0gVVJMLnBhcnNlKHRoaXMuY29uZmlnLnVybCk7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIHRoaXMuX3NldHVwUHJveHkodGhpcy51cmwuaG9zdG5hbWUsIGNvbmZpZywgbWFpbkNvbmZpZywgdGhpcy51cmwucHJvdG9jb2wgPT09ICdodHRwczonKTtcblxuICAgIHRoaXMuY29uZmlnLnVybCA9IHRoaXMuY29uZmlnLnVybC5yZXBsYWNlKC9cXC8kLywgJycpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnRpbWVvdXQgJiYgTnVtYmVyKHRoaXMuY29uZmlnLnRpbWVvdXQpID49IDEwMDApIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgIFtcbiAgICAgICAgICAnVG9vIGJpZyB0aW1lb3V0IHZhbHVlOiAnICsgdGhpcy5jb25maWcudGltZW91dCxcbiAgICAgICAgICAnV2UgY2hhbmdlZCB0aW1lIGZvcm1hdCB0byBuZ2lueC1saWtlIG9uZScsXG4gICAgICAgICAgJyhzZWUgaHR0cDovL25naW54Lm9yZy9lbi9kb2NzL3N5bnRheC5odG1sKScsXG4gICAgICAgICAgJ3NvIHBsZWFzZSB1cGRhdGUgeW91ciBjb25maWcgYWNjb3JkaW5nbHknLFxuICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGEgYnVuY2ggb2YgZGlmZmVyZW50IGNvbmZpZ3VyYWJsZSB0aW1lcnNcbiAgICB0aGlzLm1heGFnZSA9IHBhcnNlSW50ZXJ2YWwoc2V0Q29uZmlnKHRoaXMuY29uZmlnLCAnbWF4YWdlJywgJzJtJykpO1xuICAgIHRoaXMudGltZW91dCA9IHBhcnNlSW50ZXJ2YWwoc2V0Q29uZmlnKHRoaXMuY29uZmlnLCAndGltZW91dCcsICczMHMnKSk7XG4gICAgdGhpcy5tYXhfZmFpbHMgPSBOdW1iZXIoc2V0Q29uZmlnKHRoaXMuY29uZmlnLCAnbWF4X2ZhaWxzJywgMikpO1xuICAgIHRoaXMuZmFpbF90aW1lb3V0ID0gcGFyc2VJbnRlcnZhbChzZXRDb25maWcodGhpcy5jb25maWcsICdmYWlsX3RpbWVvdXQnLCAnNW0nKSk7XG4gICAgdGhpcy5zdHJpY3Rfc3NsID0gQm9vbGVhbihzZXRDb25maWcodGhpcy5jb25maWcsICdzdHJpY3Rfc3NsJywgdHJ1ZSkpO1xuICAgIHRoaXMuYWdlbnRfb3B0aW9ucyA9IHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ2FnZW50X29wdGlvbnMnLCB7XG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgICBtYXhTb2NrZXRzOiA0MCxcbiAgICAgIG1heEZyZWVTb2NrZXRzOiAxMCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbiBhc3NldC5cbiAgICogQHBhcmFtIHsqfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7Kn0gY2JcbiAgICogQHJldHVybiB7UmVxdWVzdH1cbiAgICovXG4gIHByaXZhdGUgcmVxdWVzdChvcHRpb25zOiBhbnksIGNiPzogQ2FsbGJhY2spOiBTdHJlYW0uUmVhZGFibGUge1xuICAgIGxldCBqc29uO1xuXG4gICAgaWYgKHRoaXMuX3N0YXR1c0NoZWNrKCkgPT09IGZhbHNlKSB7XG4gICAgICBjb25zdCBzdHJlYW1SZWFkID0gbmV3IFN0cmVhbS5SZWFkYWJsZSgpO1xuXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgY2IoRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoQVBJX0VSUk9SLlVQTElOS19PRkZMSU5FKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyZWFtUmVhZC5lbWl0KCdlcnJvcicsIEVycm9yQ29kZS5nZXRJbnRlcm5hbEVycm9yKEFQSV9FUlJPUi5VUExJTktfT0ZGTElORSkpO1xuICAgICAgfSk7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICBzdHJlYW1SZWFkLl9yZWFkID0gZnVuY3Rpb24gKCk6IHZvaWQge307XG4gICAgICAvLyBwcmV2ZW50aW5nICdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50J1xuICAgICAgc3RyZWFtUmVhZC5vbignZXJyb3InLCBmdW5jdGlvbiAoKTogdm9pZCB7fSk7XG4gICAgICByZXR1cm4gc3RyZWFtUmVhZDtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzOiBIZWFkZXJzID0gdGhpcy5fc2V0SGVhZGVycyhvcHRpb25zKTtcblxuICAgIHRoaXMuX2FkZFByb3h5SGVhZGVycyhvcHRpb25zLnJlcSwgaGVhZGVycyk7XG4gICAgdGhpcy5fb3ZlcnJpZGVXaXRoVXBMaW5rQ29uZkxvY2FsaWdIZWFkZXJzKGhlYWRlcnMpO1xuXG4gICAgY29uc3QgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QgfHwgJ0dFVCc7XG4gICAgY29uc3QgdXJpID0gb3B0aW9ucy51cmlfZnVsbCB8fCB0aGlzLmNvbmZpZy51cmwgKyBvcHRpb25zLnVyaTtcblxuICAgIHNlbGYubG9nZ2VyLmluZm8oXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICB1cmk6IHVyaSxcbiAgICAgIH0sXG4gICAgICBcIm1ha2luZyByZXF1ZXN0OiAnQHttZXRob2R9IEB7dXJpfSdcIlxuICAgICk7XG5cbiAgICBpZiAoaXNPYmplY3Qob3B0aW9ucy5qc29uKSkge1xuICAgICAganNvbiA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuanNvbik7XG4gICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddIHx8IEhFQURFUlMuSlNPTjtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0Q2FsbGJhY2sgPSBjYlxuICAgICAgPyBmdW5jdGlvbiAoZXJyLCByZXMsIGJvZHkpOiB2b2lkIHtcbiAgICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2VMZW5ndGggPSBlcnIgPyAwIDogYm9keS5sZW5ndGg7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIHByb2Nlc3NCb2R5KCk7XG4gICAgICAgICAgbG9nQWN0aXZpdHkoKTtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgY2IoZXJyLCByZXMsIGJvZHkpO1xuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUGVyZm9ybSBhIGRlY29kZS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzQm9keSgpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qc29uICYmIHJlcy5zdGF0dXNDb2RlIDwgMzAwKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkudG9TdHJpbmcoQ0hBUkFDVEVSX0VOQ09ESU5HLlVURjgpKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICAgIGJvZHkgPSB7fTtcbiAgICAgICAgICAgICAgICBlcnIgPSBfZXJyO1xuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFlcnIgJiYgaXNPYmplY3QoYm9keSkpIHtcbiAgICAgICAgICAgICAgaWYgKF8uaXNTdHJpbmcoYm9keS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGJvZHkuZXJyb3I7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUGVyZm9ybSBhIGxvZy5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBmdW5jdGlvbiBsb2dBY3Rpdml0eSgpOiB2b2lkIHtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gXCJAeyFzdGF0dXN9LCByZXE6ICdAe3JlcXVlc3QubWV0aG9kfSBAe3JlcXVlc3QudXJsfSdcIjtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gZXJyb3IgPyAnLCBlcnJvcjogQHshZXJyb3J9JyA6ICcsIGJ5dGVzOiBAe2J5dGVzLmlufS9Ae2J5dGVzLm91dH0nO1xuICAgICAgICAgICAgc2VsZi5sb2dnZXIuaHR0cChcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVycjogZXJyIHx8IHVuZGVmaW5lZCwgLy8gaWYgZXJyb3IgaXMgbnVsbC9mYWxzZSBjaGFuZ2UgdGhpcyB0byB1bmRlZmluZWQgc28gaXQgd29udCBsb2dcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiB7IG1ldGhvZDogbWV0aG9kLCB1cmw6IHVyaSB9LFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzICE9IG51bGwgPyByZXMuc3RhdHVzQ29kZSA6ICdFUlInLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICBieXRlczoge1xuICAgICAgICAgICAgICAgICAgaW46IGpzb24gPyBqc29uLmxlbmd0aCA6IDAsXG4gICAgICAgICAgICAgICAgICBvdXQ6IHJlc3BvbnNlTGVuZ3RoIHx8IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgbGV0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgdXJsOiB1cmksXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBib2R5OiBqc29uLFxuICAgICAgcHJveHk6IHRoaXMucHJveHksXG4gICAgICBlbmNvZGluZzogbnVsbCxcbiAgICAgIGd6aXA6IHRydWUsXG4gICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICBzdHJpY3RTU0w6IHRoaXMuc3RyaWN0X3NzbCxcbiAgICAgIGFnZW50T3B0aW9uczogdGhpcy5hZ2VudF9vcHRpb25zLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5jYSkge1xuICAgICAgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByZXF1ZXN0T3B0aW9ucywge1xuICAgICAgICBjYTogdGhpcy5jYSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcSA9IHJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIHJlcXVlc3RDYWxsYmFjayk7XG5cbiAgICBsZXQgc3RhdHVzQ2FsbGVkID0gZmFsc2U7XG4gICAgcmVxLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uIChyZXMpOiB2b2lkIHtcbiAgICAgIC8vIEZJWE1FOiBfdmVyZGFjY2lvX2Fib3J0ZWQgc2VlbXMgbm90IHVzZWRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmICghcmVxLl92ZXJkYWNjaW9fYWJvcnRlZCAmJiAhc3RhdHVzQ2FsbGVkKSB7XG4gICAgICAgIHN0YXR1c0NhbGxlZCA9IHRydWU7XG4gICAgICAgIHNlbGYuX3N0YXR1c0NoZWNrKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc05pbChyZXF1ZXN0Q2FsbGJhY2spID09PSBmYWxzZSkge1xuICAgICAgICAoZnVuY3Rpb24gZG9fbG9nKCk6IHZvaWQge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBcIkB7IXN0YXR1c30sIHJlcTogJ0B7cmVxdWVzdC5tZXRob2R9IEB7cmVxdWVzdC51cmx9JyAoc3RyZWFtaW5nKVwiO1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmh0dHAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICB1cmw6IHVyaSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RhdHVzOiBfLmlzTnVsbChyZXMpID09PSBmYWxzZSA/IHJlcy5zdGF0dXNDb2RlIDogJ0VSUicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVxLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChfZXJyKTogdm9pZCB7XG4gICAgICAvLyBGSVhNRTogX3ZlcmRhY2Npb19hYm9ydGVkIHNlZW1zIG5vdCB1c2VkXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpZiAoIXJlcS5fdmVyZGFjY2lvX2Fib3J0ZWQgJiYgIXN0YXR1c0NhbGxlZCkge1xuICAgICAgICBzdGF0dXNDYWxsZWQgPSB0cnVlO1xuICAgICAgICBzZWxmLl9zdGF0dXNDaGVjayhmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiByZXE7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgaGVhZGVycy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0SGVhZGVycyhvcHRpb25zOiBhbnkpOiBIZWFkZXJzIHtcbiAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbnN0IGFjY2VwdCA9IEhFQURFUlMuQUNDRVBUO1xuICAgIGNvbnN0IGFjY2VwdEVuY29kaW5nID0gSEVBREVSUy5BQ0NFUFRfRU5DT0RJTkc7XG4gICAgY29uc3QgdXNlckFnZW50ID0gSEVBREVSUy5VU0VSX0FHRU5UO1xuXG4gICAgaGVhZGVyc1thY2NlcHRdID0gaGVhZGVyc1thY2NlcHRdIHx8IGNvbnRlbnRUeXBlQWNjZXB0O1xuICAgIGhlYWRlcnNbYWNjZXB0RW5jb2RpbmddID0gaGVhZGVyc1thY2NlcHRFbmNvZGluZ10gfHwgJ2d6aXAnO1xuICAgIC8vIHJlZ2lzdHJ5Lm5wbWpzLm9yZyB3aWxsIG9ubHkgcmV0dXJuIHNlYXJjaCByZXN1bHQgaWYgdXNlci1hZ2VudCBpbmNsdWRlIHN0cmluZyAnbnBtJ1xuICAgIGhlYWRlcnNbdXNlckFnZW50XSA9IHRoaXMudXNlckFnZW50ID8gYG5wbSAoJHt0aGlzLnVzZXJBZ2VudH0pYCA6IG9wdGlvbnMucmVxPy5nZXQoJ3VzZXItYWdlbnQnKTtcblxuICAgIHJldHVybiB0aGlzLl9zZXRBdXRoKGhlYWRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gYXV0aCBhbmQgYXNzaWduIEhlYWRlciBhdXRob3JpemF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoZWFkZXJzXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3NldEF1dGgoaGVhZGVyczogYW55KTogSGVhZGVycyB7XG4gICAgY29uc3QgeyBhdXRoIH0gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmIChfLmlzTmlsKGF1dGgpIHx8IGhlYWRlcnNbSEVBREVSUy5BVVRIT1JJWkFUSU9OXSkge1xuICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNPYmplY3QoYXV0aCkgPT09IGZhbHNlICYmIF8uaXNPYmplY3QoYXV0aC50b2tlbikgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl90aHJvd0Vycm9yQXV0aCgnQXV0aCBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLy8gZ2V0IE5QTV9UT0tFTiBodHRwOi8vYmxvZy5ucG1qcy5vcmcvcG9zdC8xMTgzOTMzNjg1NTUvZGVwbG95aW5nLXdpdGgtbnBtLXByaXZhdGUtbW9kdWxlc1xuICAgIC8vIG9yIGdldCBvdGhlciB2YXJpYWJsZSBleHBvcnQgaW4gZW52XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmRhY2Npby92ZXJkYWNjaW8vcmVsZWFzZXMvdGFnL3YyLjUuMFxuICAgIGxldCB0b2tlbjogYW55O1xuICAgIGNvbnN0IHRva2VuQ29uZjogYW55ID0gYXV0aDtcblxuICAgIGlmIChfLmlzTmlsKHRva2VuQ29uZi50b2tlbikgPT09IGZhbHNlICYmIF8uaXNTdHJpbmcodG9rZW5Db25mLnRva2VuKSkge1xuICAgICAgdG9rZW4gPSB0b2tlbkNvbmYudG9rZW47XG4gICAgfSBlbHNlIGlmIChfLmlzTmlsKHRva2VuQ29uZi50b2tlbl9lbnYpID09PSBmYWxzZSkge1xuICAgICAgaWYgKF8uaXNTdHJpbmcodG9rZW5Db25mLnRva2VuX2VudikpIHtcbiAgICAgICAgdG9rZW4gPSBwcm9jZXNzLmVudlt0b2tlbkNvbmYudG9rZW5fZW52XTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc0Jvb2xlYW4odG9rZW5Db25mLnRva2VuX2VudikgJiYgdG9rZW5Db25mLnRva2VuX2Vudikge1xuICAgICAgICB0b2tlbiA9IHByb2Nlc3MuZW52Lk5QTV9UT0tFTjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKEVSUk9SX0NPREUudG9rZW5fcmVxdWlyZWQpO1xuICAgICAgICB0aGlzLl90aHJvd0Vycm9yQXV0aChFUlJPUl9DT0RFLnRva2VuX3JlcXVpcmVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdG9rZW4gPSBwcm9jZXNzLmVudi5OUE1fVE9LRU47XG4gICAgfVxuXG4gICAgaWYgKF8uaXNOaWwodG9rZW4pKSB7XG4gICAgICB0aGlzLl90aHJvd0Vycm9yQXV0aChFUlJPUl9DT0RFLnRva2VuX3JlcXVpcmVkKTtcbiAgICB9XG5cbiAgICAvLyBkZWZpbmUgdHlwZSBBdXRoIGFsbG93IGJhc2ljIGFuZCBiZWFyZXJcbiAgICBjb25zdCB0eXBlID0gdG9rZW5Db25mLnR5cGUgfHwgVE9LRU5fQkFTSUM7XG4gICAgdGhpcy5fc2V0SGVhZGVyQXV0aG9yaXphdGlvbihoZWFkZXJzLCB0eXBlLCB0b2tlbik7XG5cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3Rocm93RXJyb3JBdXRoKG1lc3NhZ2U6IHN0cmluZyk6IEVycm9yIHtcbiAgICB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIEhlYWRlciBhdXRob3JpemF0aW9uIHdpdGggdHlwZSBhdXRoZW50aWNhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3NldEhlYWRlckF1dGhvcml6YXRpb24oaGVhZGVyczogYW55LCB0eXBlOiBzdHJpbmcsIHRva2VuOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBfdHlwZTogc3RyaW5nID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKF90eXBlICE9PSBUT0tFTl9CRUFSRVIudG9Mb3dlckNhc2UoKSAmJiBfdHlwZSAhPT0gVE9LRU5fQkFTSUMudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhpcy5fdGhyb3dFcnJvckF1dGgoYEF1dGggdHlwZSAnJHtfdHlwZX0nIG5vdCBhbGxvd2VkYCk7XG4gICAgfVxuXG4gICAgdHlwZSA9IF8udXBwZXJGaXJzdCh0eXBlKTtcbiAgICBoZWFkZXJzW0hFQURFUlMuQVVUSE9SSVpBVElPTl0gPSBidWlsZFRva2VuKHR5cGUsIHRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB3aWxsIGFkZCBvciBvdmVycmlkZSBzcGVjaWZpZWQgaGVhZGVycyBmcm9tIGNvbmZpZyBmaWxlLlxuICAgKlxuICAgKiBFZzpcbiAgICpcbiAgICogdXBsaW5rczpcbiAgIG5wbWpzOlxuICAgdXJsOiBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9cbiAgIGhlYWRlcnM6XG4gICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLm5wbS5pbnN0YWxsLXYyK2pzb247IHE9MS4wXCJcbiAgIHZlcmRhY2Npby1zdGFnaW5nOlxuICAgdXJsOiBodHRwczovL215Y29tcGFueS5jb20vbnBtXG4gICBoZWFkZXJzOlxuICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgYXV0aG9yaXphdGlvbjogXCJCYXNpYyBZb3VyQmFzZTY0RW5jb2RlZENyZWRlbnRpYWxzPT1cIlxuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoZWFkZXJzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9vdmVycmlkZVdpdGhVcExpbmtDb25mTG9jYWxpZ0hlYWRlcnMoaGVhZGVyczogSGVhZGVycyk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5oZWFkZXJzKSB7XG4gICAgICByZXR1cm4gaGVhZGVycztcbiAgICB9XG5cbiAgICAvLyBhZGQvb3ZlcnJpZGUgaGVhZGVycyBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ1xuICAgIC8qIGVzbGludCBndWFyZC1mb3ItaW46IDAgKi9cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbmZpZy5oZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzW2tleV0gPSB0aGlzLmNvbmZpZy5oZWFkZXJzW2tleV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB3aGV0aGVyIGNhbiBmZXRjaCBmcm9tIHRoZSBwcm92aWRlZCBVUkxcbiAgICogQHBhcmFtIHsqfSB1cmxcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIHB1YmxpYyBpc1VwbGlua1ZhbGlkKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gJEZsb3dGaXhNZVxuICAgIGNvbnN0IHVybFBhcnNlZDogVXJsV2l0aFN0cmluZ1F1ZXJ5ID0gVVJMLnBhcnNlKHVybCk7XG4gICAgY29uc3QgaXNIVFRQUyA9ICh1cmxEb21haW5QYXJzZWQ6IFVSTCk6IGJvb2xlYW4gPT4gdXJsRG9tYWluUGFyc2VkLnByb3RvY29sID09PSAnaHR0cHM6JyAmJiAodXJsUGFyc2VkLnBvcnQgPT09IG51bGwgfHwgdXJsUGFyc2VkLnBvcnQgPT09ICc0NDMnKTtcbiAgICBjb25zdCBnZXRIb3N0ID0gKHVybERvbWFpblBhcnNlZCk6IGJvb2xlYW4gPT4gKGlzSFRUUFModXJsRG9tYWluUGFyc2VkKSA/IHVybERvbWFpblBhcnNlZC5ob3N0bmFtZSA6IHVybERvbWFpblBhcnNlZC5ob3N0KTtcbiAgICBjb25zdCBpc01hdGNoUHJvdG9jb2w6IGJvb2xlYW4gPSB1cmxQYXJzZWQucHJvdG9jb2wgPT09IHRoaXMudXJsLnByb3RvY29sO1xuICAgIGNvbnN0IGlzTWF0Y2hIb3N0OiBib29sZWFuID0gZ2V0SG9zdCh1cmxQYXJzZWQpID09PSBnZXRIb3N0KHRoaXMudXJsKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaXNNYXRjaFBhdGg6IGJvb2xlYW4gPSB1cmxQYXJzZWQucGF0aC5pbmRleE9mKHRoaXMudXJsLnBhdGgpID09PSAwO1xuXG4gICAgcmV0dXJuIGlzTWF0Y2hQcm90b2NvbCAmJiBpc01hdGNoSG9zdCAmJiBpc01hdGNoUGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZW1vdGUgcGFja2FnZSBtZXRhZGF0YVxuICAgKiBAcGFyYW0geyp9IG5hbWUgcGFja2FnZSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gb3B0aW9ucyByZXF1ZXN0IG9wdGlvbnMsIGVnOiBlVGFnLlxuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgZ2V0UmVtb3RlTWV0YWRhdGEobmFtZTogc3RyaW5nLCBvcHRpb25zOiBhbnksIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICBpZiAoXy5pc05pbChvcHRpb25zLmV0YWcpID09PSBmYWxzZSkge1xuICAgICAgaGVhZGVyc1snSWYtTm9uZS1NYXRjaCddID0gb3B0aW9ucy5ldGFnO1xuICAgICAgaGVhZGVyc1tIRUFERVJTLkFDQ0VQVF0gPSBjb250ZW50VHlwZUFjY2VwdDtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIHVyaTogYC8ke2VuY29kZShuYW1lKX1gLFxuICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICByZXE6IG9wdGlvbnMucmVxLFxuICAgICAgfSxcbiAgICAgIChlcnIsIHJlcywgYm9keSk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soRXJyb3JDb2RlLmdldE5vdEZvdW5kKEFQSV9FUlJPUi5OT1RfUEFDS0FHRV9VUExJTkspKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShyZXMuc3RhdHVzQ29kZSA+PSBIVFRQX1NUQVRVUy5PSyAmJiByZXMuc3RhdHVzQ29kZSA8IEhUVFBfU1RBVFVTLk1VTFRJUExFX0NIT0lDRVMpKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihgJHtBUElfRVJST1IuQkFEX1NUQVRVU19DT0RFfTogJHtyZXMuc3RhdHVzQ29kZX1gKTtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgZXJyb3IucmVtb3RlU3RhdHVzID0gcmVzLnN0YXR1c0NvZGU7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayhudWxsLCBib2R5LCByZXMuaGVhZGVycy5ldGFnKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGEgdGFyYmFsbCBmcm9tIHRoZSB1cGxpbmsuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICogQHJldHVybiB7U3RyZWFtfVxuICAgKi9cbiAgZmV0Y2hUYXJiYWxsKHVybDogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRUYXJiYWxsKHt9KTtcbiAgICBsZXQgY3VycmVudF9sZW5ndGggPSAwO1xuICAgIGxldCBleHBlY3RlZF9sZW5ndGg7XG5cbiAgICBzdHJlYW0uYWJvcnQgPSAoKSA9PiB7fTtcbiAgICBjb25zdCByZWFkU3RyZWFtID0gdGhpcy5yZXF1ZXN0KHtcbiAgICAgIHVyaV9mdWxsOiB1cmwsXG4gICAgICBlbmNvZGluZzogbnVsbCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiBjb250ZW50VHlwZUFjY2VwdCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZWFkU3RyZWFtLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uIChyZXM6IGFueSkge1xuICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5lbWl0KCdlcnJvcicsIEVycm9yQ29kZS5nZXROb3RGb3VuZChBUElfRVJST1IuTk9UX0ZJTEVfVVBMSU5LKSk7XG4gICAgICB9XG4gICAgICBpZiAoIShyZXMuc3RhdHVzQ29kZSA+PSBIVFRQX1NUQVRVUy5PSyAmJiByZXMuc3RhdHVzQ29kZSA8IEhUVFBfU1RBVFVTLk1VTFRJUExFX0NIT0lDRVMpKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihgYmFkIHVwbGluayBzdGF0dXMgY29kZTogJHtyZXMuc3RhdHVzQ29kZX1gKSk7XG4gICAgICB9XG4gICAgICBpZiAocmVzLmhlYWRlcnNbSEVBREVSX1RZUEUuQ09OVEVOVF9MRU5HVEhdKSB7XG4gICAgICAgIGV4cGVjdGVkX2xlbmd0aCA9IHJlcy5oZWFkZXJzW0hFQURFUl9UWVBFLkNPTlRFTlRfTEVOR1RIXTtcbiAgICAgICAgc3RyZWFtLmVtaXQoSEVBREVSX1RZUEUuQ09OVEVOVF9MRU5HVEgsIHJlcy5oZWFkZXJzW0hFQURFUl9UWVBFLkNPTlRFTlRfTEVOR1RIXSk7XG4gICAgICB9XG5cbiAgICAgIHJlYWRTdHJlYW0ucGlwZShzdHJlYW0pO1xuICAgIH0pO1xuXG4gICAgcmVhZFN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH0pO1xuICAgIHJlYWRTdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgY3VycmVudF9sZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgfSk7XG4gICAgcmVhZFN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGN1cnJlbnRfbGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgICAgaWYgKGV4cGVjdGVkX2xlbmd0aCAmJiBjdXJyZW50X2xlbmd0aCAhPSBleHBlY3RlZF9sZW5ndGgpIHtcbiAgICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoQVBJX0VSUk9SLkNPTlRFTlRfTUlTTUFUQ0gpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3RyZWFtO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBzdHJlYW0gc2VhcmNoLlxuICAgKiBAcGFyYW0geyp9IG9wdGlvbnMgcmVxdWVzdCBvcHRpb25zXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHB1YmxpYyBzZWFyY2gob3B0aW9uczogYW55KTogU3RyZWFtLlJlYWRhYmxlIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1TdHJlYW06IGFueSA9IG5ldyBTdHJlYW0uUGFzc1Rocm91Z2goeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHJlcXVlc3RTdHJlYW06IFN0cmVhbS5SZWFkYWJsZSA9IHRoaXMucmVxdWVzdCh7XG4gICAgICB1cmk6IG9wdGlvbnMucmVxLnVybCxcbiAgICAgIHJlcTogb3B0aW9ucy5yZXEsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIC8vIHF1ZXJ5IGZvciBzZWFyY2hcbiAgICAgICAgcmVmZXJlcjogb3B0aW9ucy5yZXEuZ2V0KCdyZWZlcmVyJyksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcGFyc2VQYWNrYWdlID0gKHBrZzogUGFja2FnZSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGlzT2JqZWN0T3JBcnJheShwa2cpKSB7XG4gICAgICAgIHRyYW5zZm9ybVN0cmVhbS5lbWl0KCdkYXRhJywgcGtnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVxdWVzdFN0cmVhbS5vbigncmVzcG9uc2UnLCAocmVzKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIVN0cmluZyhyZXMuc3RhdHVzQ29kZSkubWF0Y2goL14yXFxkXFxkJC8pKSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1TdHJlYW0uZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihgYmFkIHN0YXR1cyBjb2RlICR7cmVzLnN0YXR1c0NvZGV9IGZyb20gdXBsaW5rYCkpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlcXVlc3QvcmVxdWVzdCNyZXF1ZXN0b3B0aW9ucy1jYWxsYmFja1xuICAgICAgLy8gUmVxdWVzdCBsaWJyYXJ5IHdpbGwgbm90IGRlY29kZSBnemlwIHN0cmVhbS5cbiAgICAgIGxldCBqc29uU3RyZWFtO1xuICAgICAgaWYgKHJlcy5oZWFkZXJzW0hFQURFUl9UWVBFLkNPTlRFTlRfRU5DT0RJTkddID09PSBIRUFERVJTLkdaSVApIHtcbiAgICAgICAganNvblN0cmVhbSA9IHJlcy5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqc29uU3RyZWFtID0gcmVzO1xuICAgICAgfVxuICAgICAganNvblN0cmVhbS5waXBlKEpTT05TdHJlYW0ucGFyc2UoJyonKSkub24oJ2RhdGEnLCBwYXJzZVBhY2thZ2UpO1xuICAgICAganNvblN0cmVhbS5vbignZW5kJywgKCk6IHZvaWQgPT4ge1xuICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uZW1pdCgnZW5kJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJlcXVlc3RTdHJlYW0ub24oJ2Vycm9yJywgKGVycjogRXJyb3IpOiB2b2lkID0+IHtcbiAgICAgIHRyYW5zZm9ybVN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgfSk7XG5cbiAgICB0cmFuc2Zvcm1TdHJlYW0uYWJvcnQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAvLyBGSVhNRTogdGhpcyBpcyBjbGVhcmx5IGEgcG90ZW50aWFsIGlzc3VlXG4gICAgICAvLyB0aGVyZSBpcyBubyBhYm9ydCBtZXRob2Qgb24gU3RyZWFtLlJlYWRhYmxlXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXF1ZXN0U3RyZWFtLmFib3J0KCk7XG4gICAgICB0cmFuc2Zvcm1TdHJlYW0uZW1pdCgnZW5kJyk7XG4gICAgfTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1TdHJlYW07XG4gIH1cblxuICAvKipcbiAgICogQWRkIHByb3h5IGhlYWRlcnMuXG4gICAqIEZJWE1FOiBvYmplY3QgbXV0YXRpb25zLCBpdCBzaG91bGQgcmV0dXJuIGFuIG5ldyBvYmplY3RcbiAgICogQHBhcmFtIHsqfSByZXEgdGhlIGh0dHAgcmVxdWVzdFxuICAgKiBAcGFyYW0geyp9IGhlYWRlcnMgdGhlIHJlcXVlc3QgaGVhZGVyc1xuICAgKi9cbiAgcHJpdmF0ZSBfYWRkUHJveHlIZWFkZXJzKHJlcTogYW55LCBoZWFkZXJzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAocmVxKSB7XG4gICAgICAvLyBPbmx5IHN1Ym1pdCBYLUZvcndhcmRlZC1Gb3IgZmllbGQgaWYgd2UgZG9uJ3QgaGF2ZSBhIHByb3h5IHNlbGVjdGVkXG4gICAgICAvLyBpbiB0aGUgY29uZmlnIGZpbGUuXG4gICAgICAvL1xuICAgICAgLy8gT3RoZXJ3aXNlIG1pc2NvbmZpZ3VyZWQgcHJveHkgY291bGQgcmV0dXJuIDQwNzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ybGlkd2thL3Npbm9waWEvaXNzdWVzLzI1NFxuICAgICAgLy9cbiAgICAgIC8vIEZJWE1FOiBwcm94eSBsb2dpYyBpcyBvZGQsIHNvbWV0aGluZyBpcyB3cm9uZyBoZXJlLlxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKCF0aGlzLnByb3h5KSB7XG4gICAgICAgIGhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvciddID0gKHJlcS5nZXQoJ3gtZm9yd2FyZGVkLWZvcicpID8gcmVxLmdldCgneC1mb3J3YXJkZWQtZm9yJykgKyAnLCAnIDogJycpICsgcmVxLmNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhbHdheXMgYXR0YWNoIFZpYSBoZWFkZXIgdG8gYXZvaWQgbG9vcHMsIGV2ZW4gaWYgd2UncmUgbm90IHByb3h5aW5nXG4gICAgaGVhZGVyc1sndmlhJ10gPSByZXEgJiYgcmVxLmdldCgndmlhJykgPyByZXEuZ2V0KCd2aWEnKSArICcsICcgOiAnJztcblxuICAgIGhlYWRlcnNbJ3ZpYSddICs9ICcxLjEgJyArIHRoaXMuc2VydmVyX2lkICsgJyAoVmVyZGFjY2lvKSc7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIGhvc3QgaXMgYXZhaWxhYmxlLlxuICAgKiBAcGFyYW0geyp9IGFsaXZlXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBwcml2YXRlIF9zdGF0dXNDaGVjayhhbGl2ZT86IGJvb2xlYW4pOiBib29sZWFuIHwgdm9pZCB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLl9pZlJlcXVlc3RGYWlsdXJlKCkgPT09IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYWxpdmUpIHtcbiAgICAgIGlmICh0aGlzLmZhaWxlZF9yZXF1ZXN0cyA+PSB0aGlzLm1heF9mYWlscykge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhvc3Q6IHRoaXMudXJsLmhvc3QsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnaG9zdCBAe2hvc3R9IGlzIGJhY2sgb25saW5lJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5mYWlsZWRfcmVxdWVzdHMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZhaWxlZF9yZXF1ZXN0cysrO1xuICAgICAgaWYgKHRoaXMuZmFpbGVkX3JlcXVlc3RzID09PSB0aGlzLm1heF9mYWlscykge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhvc3Q6IHRoaXMudXJsLmhvc3QsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnaG9zdCBAe2hvc3R9IGlzIG5vdyBvZmZsaW5lJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGFzdF9yZXF1ZXN0X3RpbWUgPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSByZXF1ZXN0IGZhaWx1cmUuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9pZlJlcXVlc3RGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZhaWxlZF9yZXF1ZXN0cyA+PSB0aGlzLm1heF9mYWlscyAmJiBNYXRoLmFicyhEYXRlLm5vdygpIC0gKHRoaXMubGFzdF9yZXF1ZXN0X3RpbWUgYXMgbnVtYmVyKSkgPCB0aGlzLmZhaWxfdGltZW91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYSBwcm94eS5cbiAgICogQHBhcmFtIHsqfSBob3N0bmFtZVxuICAgKiBAcGFyYW0geyp9IGNvbmZpZ1xuICAgKiBAcGFyYW0geyp9IG1haW5jb25maWdcbiAgICogQHBhcmFtIHsqfSBpc0hUVFBTXG4gICAqL1xuICBwcml2YXRlIF9zZXR1cFByb3h5KGhvc3RuYW1lOiBzdHJpbmcsIGNvbmZpZzogVXBMaW5rQ29uZkxvY2FsLCBtYWluY29uZmlnOiBDb25maWcsIGlzSFRUUFM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBsZXQgbm9Qcm94eUxpc3Q7XG4gICAgY29uc3QgcHJveHlfa2V5OiBzdHJpbmcgPSBpc0hUVFBTID8gJ2h0dHBzX3Byb3h5JyA6ICdodHRwX3Byb3h5JztcblxuICAgIC8vIGdldCBodHRwX3Byb3h5IGFuZCBub19wcm94eSBjb25maWdzXG4gICAgaWYgKHByb3h5X2tleSBpbiBjb25maWcpIHtcbiAgICAgIHRoaXMucHJveHkgPSBjb25maWdbcHJveHlfa2V5XTtcbiAgICB9IGVsc2UgaWYgKHByb3h5X2tleSBpbiBtYWluY29uZmlnKSB7XG4gICAgICB0aGlzLnByb3h5ID0gbWFpbmNvbmZpZ1twcm94eV9rZXldO1xuICAgIH1cbiAgICBpZiAoJ25vX3Byb3h5JyBpbiBjb25maWcpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIG5vUHJveHlMaXN0ID0gY29uZmlnLm5vX3Byb3h5O1xuICAgIH0gZWxzZSBpZiAoJ25vX3Byb3h5JyBpbiBtYWluY29uZmlnKSB7XG4gICAgICBub1Byb3h5TGlzdCA9IG1haW5jb25maWcubm9fcHJveHk7XG4gICAgfVxuXG4gICAgLy8gdXNlIHdnZXQtbGlrZSBhbGdvcml0aG0gdG8gZGV0ZXJtaW5lIGlmIHByb3h5IHNob3VsZG4ndCBiZSB1c2VkXG4gICAgaWYgKGhvc3RuYW1lWzBdICE9PSAnLicpIHtcbiAgICAgIGhvc3RuYW1lID0gJy4nICsgaG9zdG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNTdHJpbmcobm9Qcm94eUxpc3QpICYmIG5vUHJveHlMaXN0Lmxlbmd0aCkge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgbm9Qcm94eUxpc3QgPSBub1Byb3h5TGlzdC5zcGxpdCgnLCcpO1xuICAgIH1cblxuICAgIGlmIChfLmlzQXJyYXkobm9Qcm94eUxpc3QpKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vUHJveHlMaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBub1Byb3h5SXRlbSA9IG5vUHJveHlMaXN0W2ldO1xuICAgICAgICBpZiAobm9Qcm94eUl0ZW1bMF0gIT09ICcuJykge1xuICAgICAgICAgIG5vUHJveHlJdGVtID0gJy4nICsgbm9Qcm94eUl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvc3RuYW1lLmxhc3RJbmRleE9mKG5vUHJveHlJdGVtKSA9PT0gaG9zdG5hbWUubGVuZ3RoIC0gbm9Qcm94eUl0ZW0ubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJveHkpIHtcbiAgICAgICAgICAgIGRlYnVnKCdub3QgdXNpbmcgcHJveHkgZm9yICVvLCBleGNsdWRlZCBieSAlbyBydWxlJywgdGhpcy51cmwuaHJlZiwgbm9Qcm94eUl0ZW0pO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpcy5wcm94eSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlmIGl0J3Mgbm9uLXN0cmluZyAoaS5lLiBcImZhbHNlXCIpLCBkb24ndCB1c2UgaXRcbiAgICBpZiAoXy5pc1N0cmluZyh0aGlzLnByb3h5KSA9PT0gZmFsc2UpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGRlbGV0ZSB0aGlzLnByb3h5O1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1ZygndXNpbmcgcHJveHkgJW8gZm9yICVvJywgdGhpcy51cmwuaHJlZiwgdGhpcy5wcm94eSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFByb3h5U3RvcmFnZTtcbiJdfQ==
|
package/build/lib/uplink-util.js
CHANGED
|
@@ -38,4 +38,4 @@ function updateVersionsHiddenUpLink(versions, upLink) {
|
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXBsaW5rLXV0aWwudHMiXSwibmFtZXMiOlsic2V0dXBVcExpbmtzIiwiY29uZmlnIiwidXBsaW5rcyIsInVwbGlua05hbWUiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJwcm94eSIsIlByb3h5U3RvcmFnZSIsInVwbmFtZSIsInVwZGF0ZVZlcnNpb25zSGlkZGVuVXBMaW5rIiwidmVyc2lvbnMiLCJ1cExpbmsiLCJpIiwidmVyc2lvbiIsIlN5bWJvbCIsImZvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQTs7OztBQUVBO0FBQ0E7QUFDQTtBQUNPLFNBQVNBLFlBQVQsQ0FBc0JDLE1BQXRCLEVBQWlEO0FBQ3RELFFBQU1DLE9BQWtCLEdBQUcsRUFBM0I7O0FBRUEsT0FBSyxNQUFNQyxVQUFYLElBQXlCRixNQUFNLENBQUNDLE9BQWhDLEVBQXlDO0FBQ3ZDLFFBQUlFLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDTixNQUFNLENBQUNDLE9BQTVDLEVBQXFEQyxVQUFyRCxDQUFKLEVBQXNFO0FBQ3BFO0FBQ0EsWUFBTUssS0FBYSxHQUFHLElBQUlDLGtCQUFKLENBQWlCUixNQUFNLENBQUNDLE9BQVAsQ0FBZUMsVUFBZixDQUFqQixFQUE2Q0YsTUFBN0MsQ0FBdEI7QUFDQU8sTUFBQUEsS0FBSyxDQUFDRSxNQUFOLEdBQWVQLFVBQWY7QUFFQUQsTUFBQUEsT0FBTyxDQUFDQyxVQUFELENBQVAsR0FBc0JLLEtBQXRCO0FBQ0Q7QUFDRjs7QUFFRCxTQUFPTixPQUFQO0FBQ0Q7O0FBRU0sU0FBU1MsMEJBQVQsQ0FBb0NDLFFBQXBDLEVBQXdEQyxNQUF4RCxFQUE4RTtBQUNuRixPQUFLLE1BQU1DLENBQVgsSUFBZ0JGLFFBQWhCLEVBQTBCO0FBQ3hCLFFBQUlSLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDSyxRQUFyQyxFQUErQ0UsQ0FBL0MsQ0FBSixFQUF1RDtBQUNyRCxZQUFNQyxPQUFPLEdBQUdILFFBQVEsQ0FBQ0UsQ0FBRCxDQUF4QixDQURxRCxDQUdyRDtBQUNBOztBQUNBQyxNQUFBQSxPQUFPLENBQUNDLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLG9CQUFYLENBQUQsQ0FBUCxHQUE0Q0osTUFBTSxDQUFDSCxNQUFuRDtBQUNEO0FBQ0Y7QUFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZywgVmVyc2lvbnMgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcblxuaW1wb3J0IHsgSVByb3h5LCBQcm94eUxpc3QgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgUHJveHlTdG9yYWdlIGZyb20gJy4vdXAtc3RvcmFnZSc7XG5cbi8qKlxuICogU2V0IHVwIHRoZSBVcCBTdG9yYWdlIGZvciBlYWNoIGxpbmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFVwTGlua3MoY29uZmlnOiBDb25maWcpOiBQcm94eUxpc3Qge1xuICBjb25zdCB1cGxpbmtzOiBQcm94eUxpc3QgPSB7fTtcblxuICBmb3IgKGNvbnN0IHVwbGlua05hbWUgaW4gY29uZmlnLnVwbGlua3MpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZy51cGxpbmtzLCB1cGxpbmtOYW1lKSkge1xuICAgICAgLy8gaW5zdGFuY2UgZm9yIGVhY2ggdXAtbGluayBkZWZpbml0aW9uXG4gICAgICBjb25zdCBwcm94eTogSVByb3h5ID0gbmV3IFByb3h5U3RvcmFnZShjb25maWcudXBsaW5rc1t1cGxpbmtOYW1lXSwgY29uZmlnKTtcbiAgICAgIHByb3h5LnVwbmFtZSA9IHVwbGlua05hbWU7XG5cbiAgICAgIHVwbGlua3NbdXBsaW5rTmFtZV0gPSBwcm94eTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBsaW5rcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZlcnNpb25zSGlkZGVuVXBMaW5rKHZlcnNpb25zOiBWZXJzaW9ucywgdXBMaW5rOiBJUHJveHkpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBpIGluIHZlcnNpb25zKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2ZXJzaW9ucywgaSkpIHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB2ZXJzaW9uc1tpXTtcblxuICAgICAgLy8gaG9sZHMgYSBcImhpZGRlblwiIHZhbHVlIHRvIGJlIHVzZWQgYnkgdGhlIHBhY2thZ2Ugc3RvcmFnZS5cbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHZlcnNpb25bU3ltYm9sLmZvcignX192ZXJkYWNjaW9fdXBsaW5rJyldID0gdXBMaW5rLnVwbmFtZTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|