@kontur.candy/tools 2.130.2 → 2.131.0
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 +8 -0
- package/README.md +6 -6
- package/distr/Common/CandyApiClient/CandyApiClient.js +52 -2
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +17 -1
- package/distr/Common/CandyApiClient/Types/DraftActions/FufSizeTooLargeError.js +11 -0
- package/distr/Common/HttpClient/HttpClient.js +14 -2
- package/distr/Common/IterableUtils.js +6 -1
- package/distr/Common/ModelPath/Map/Map2.js +5 -45
- package/distr/Common/ModelPath/ModelPath.js +26 -1
- package/distr/Common/ModelPath/ModelPathHelper.js +13 -0
- package/distr/Common/ModelPath/PathSplitHelper.js +26 -0
- package/distr/Tools/src/BuildTasks/ReadFormSource.js +2 -1
- package/distr/Tools/src/CLICommands/BuildForms/BuildFormsOptions.js +7 -7
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/RunFormCompilationViaWebpackDevServer.js +3 -5
- package/distr/Tools/src/Commons/Options/CommandBasedOptionsParser.js +1 -1
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +56 -8
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +5 -4
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +957 -2596
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +53 -38
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/package.json +9 -9
|
@@ -224,7 +224,10 @@ class HttpClient {
|
|
|
224
224
|
}
|
|
225
225
|
|
|
226
226
|
async checkStatus(response, acceptCodes) {
|
|
227
|
-
|
|
227
|
+
const isSuccessResponseStatus = response.status >= 200 && response.status < 300;
|
|
228
|
+
const isAcceptCodesIncludesResponseStatus = (acceptCodes !== null && acceptCodes !== void 0 ? acceptCodes : []).includes(response.status);
|
|
229
|
+
|
|
230
|
+
if (!isSuccessResponseStatus && !isAcceptCodesIncludesResponseStatus || response.status === 400) {
|
|
228
231
|
const errorText = await response.text();
|
|
229
232
|
let serverResponse;
|
|
230
233
|
|
|
@@ -237,6 +240,11 @@ class HttpClient {
|
|
|
237
240
|
if (serverResponse != undefined) {
|
|
238
241
|
var _ref, _serverResponse$Messa;
|
|
239
242
|
|
|
243
|
+
if ("error" in serverResponse && typeof serverResponse.error === "object") {
|
|
244
|
+
throw new HttpError( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
245
|
+
JSON.stringify(serverResponse.error), response.status);
|
|
246
|
+
}
|
|
247
|
+
|
|
240
248
|
throw new HttpError( // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
241
249
|
(_ref = (_serverResponse$Messa = serverResponse.Message) !== null && _serverResponse$Messa !== void 0 ? _serverResponse$Messa : serverResponse.message) !== null && _ref !== void 0 ? _ref : serverResponse.Error, response.status);
|
|
242
250
|
}
|
|
@@ -348,7 +356,11 @@ class HttpError extends Error {
|
|
|
348
356
|
this.statusCode = statusCode;
|
|
349
357
|
}
|
|
350
358
|
|
|
359
|
+
get message() {
|
|
360
|
+
return super.message + `. StatusCode: ${this.statusCode}`;
|
|
361
|
+
}
|
|
362
|
+
|
|
351
363
|
}
|
|
352
364
|
|
|
353
365
|
exports.HttpError = HttpError;
|
|
354
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0h0dHBDbGllbnQudHMiXSwibmFtZXMiOlsidHJpbVRyYWlsaW5nU2xhc2giLCJ1cmwiLCJzbGljZSIsInRyaW1MZWFkaW5nU2xhc2giLCJIdHRwQ2xpZW50UmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsImZldGNoUmVzcG9uc2UiLCJzdGF0dXMiLCJqc29uIiwicmVzcG9uc2VEYXRhIiwiSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIiwiZXhlY3V0ZSIsImV4ZWN1dGVSZXF1ZXN0IiwiYWNjZXB0Q29kZXMiLCJxdWVyeVBhcmFtcyIsInNpZ25hbCIsImJvZHlGYWN0b3J5IiwiY29udGVudFR5cGUiLCJ0aGVuIiwiYXJncyIsInJlc3VsdFByb21pc2UiLCJyZXN1bHQiLCJjcmVhdGVDb25maWciLCJ3aXRoQWJvcnRTaWduYWwiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJib2R5IiwidW5kZWZpbmVkIiwid2l0aEpzb25Cb2R5Iiwic2VyaWFsaXphYmxlQm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3aXRoUXVlcnlQYXJhbXMiLCJ3aXRoUmF3Qm9keSIsImFjY2VwdENvZGUiLCJjb2RlIiwicHVzaCIsImNyZWF0ZSIsImZuIiwiSHR0cENsaWVudCIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJhdXRoZW50aWNhdGlvblByb3ZpZGVyIiwiZGVmYXVsdFF1ZXJ5UGFyYW1zIiwiZGVmYXVsdFBhcmFtcyIsImdldCIsIm1ldGhvZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImRlbGV0ZSIsImNvbmZpZyIsImZldGNoVXJsIiwicmVxdWVzdCIsImFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzcG9uc2UiLCJjaGVja1N0YXR1cyIsIm9wdGlvbnMiLCJoZWFkZXJzIiwicGF0aCIsInBhcmFtcyIsInJlc3VsdFBhcmFtcyIsImluY2x1ZGVzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIk5vdFN1cHBvcnRlZEVycm9yIiwiY3JlYXRlUXVlcnlTdHJpbmciLCJlcnJvclRleHQiLCJ0ZXh0Iiwic2VydmVyUmVzcG9uc2UiLCJwYXJzZSIsImUiLCJIdHRwRXJyb3IiLCJNZXNzYWdlIiwibWVzc2FnZSIsIkVycm9yIiwicG9zdFN5bmMiLCJkYXRhIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJtYWtlUGFyYW1WYWx1ZVN0cmluZyIsInBhcmFtIiwidmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXJhbXMyIiwibWFwIiwia2V5IiwidG9TdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJpdGVtIiwiZmlsdGVyIiwieCIsImpvaW4iLCJjcmVhdGVGZXRjaEltcGwiLCJmZXRjaFdpdGhPcHRpb25zIiwiaW5wdXQiLCJpbml0IiwicmVxdWVzdEluaXQiLCJjYWNoZSIsImNyZWRlbnRpYWxzIiwiaW50ZWdyaXR5Iiwia2VlcGFsaXZlIiwibW9kZSIsInJlZGlyZWN0IiwicmVmZXJyZXIiLCJyZWZlcnJlclBvbGljeSIsInN0YXR1c0NvZGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBWUEsU0FBU0EsaUJBQVQsQ0FBMkJDLEdBQTNCLEVBQWdEO0FBQzVDLFNBQU9BLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQUMsQ0FBWCxNQUFrQixHQUFsQixHQUF3QkQsR0FBRyxDQUFDQyxLQUFKLENBQVUsQ0FBVixFQUFhLENBQUMsQ0FBZCxDQUF4QixHQUEyQ0QsR0FBbEQ7QUFDSDs7QUFFRCxTQUFTRSxnQkFBVCxDQUEwQkYsR0FBMUIsRUFBK0M7QUFDM0MsU0FBT0EsR0FBRyxDQUFDLENBQUQsQ0FBSCxLQUFXLEdBQVgsR0FBaUJBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQVYsQ0FBakIsR0FBZ0NELEdBQXZDO0FBQ0g7O0FBWU0sTUFBTUcsa0JBQU4s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LEVBQUV1RCxLQUFLLENBQUN2RCxNQVphO0FBYTNCOEQsVUFBQUEsSUFBSSxFQUFFUCxLQUFLLENBQUNPLElBYmU7QUFjM0JDLFVBQUFBLFFBQVEsRUFBRVIsS0FBSyxDQUFDUSxRQWRXO0FBZTNCQyxVQUFBQSxRQUFRLEVBQUVULEtBQUssQ0FBQ1MsUUFmVztBQWdCM0JDLFVBQUFBLGNBQWMsRUFBRVYsS0FBSyxDQUFDVTtBQWhCSyxTQUEvQjtBQWtCQVIsUUFBQUEsV0FBVyxHQUFHLEtBQUs3RCxzQkFBTCxDQUE0QjZELFdBQTVCLENBQWQ7QUFDQSxlQUFPLEtBQUsvRCxTQUFMLENBQWVZLFFBQWYsRUFBeUJtRCxXQUF6QixDQUFQO0FBQ0g7QUFDSixLQWpDRDs7QUFrQ0EsV0FBT0gsZ0JBQVA7QUFDSDs7QUExTDBDOzs7O0FBNkx4QyxNQUFNMUIsU0FBTixTQUF3QkcsS0FBeEIsQ0FBOEI7QUFHMUJ4RSxFQUFBQSxXQUFXLENBQUN1RSxPQUFELEVBQWtCb0MsVUFBbEIsRUFBc0M7QUFDcEQsVUFBTXBDLE9BQU47QUFEb0QsU0FGeENvQyxVQUV3QztBQUVwRCxTQUFLQyxJQUFMLEdBQVksV0FBWjtBQUNBLFNBQUtELFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0g7O0FBUGdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIE5vdFN1cHBvcnRlZEVycm9yIH0gZnJvbSBcIi4uL0Vycm9yc1wiO1xuXG5pbXBvcnQgeyBGZXRjaCB9IGZyb20gXCIuL0ZldGNoSW1wbGVtZW50YXRpb24vRmV0Y2hcIjtcbmltcG9ydCB7XG4gICAgSHR0cFN0YXR1c0NvZGUsXG4gICAgSUh0dHBDbGllbnQsXG4gICAgSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlcixcbiAgICBJSHR0cENsaWVudFJlc3BvbnNlLFxuICAgIFF1ZXJ5UGFyYW1zT2JqZWN0LFxufSBmcm9tIFwiLi9JSHR0cENsaWVudFwiO1xuaW1wb3J0IHsgSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi9IdHRwQ2xpZW50QXV0aGVudGljYXRpb25Qcm92aWRlclwiO1xuXG5mdW5jdGlvbiB0cmltVHJhaWxpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zbGljZSgtMSkgPT09IFwiL1wiID8gdXJsLnNsaWNlKDAsIC0xKSA6IHVybDtcbn1cblxuZnVuY3Rpb24gdHJpbUxlYWRpbmdTbGFzaCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybFswXSA9PT0gXCIvXCIgPyB1cmwuc2xpY2UoMSkgOiB1cmw7XG59XG5cbnR5cGUgQm9keUZhY3RvcnkgPSAoKSA9PiBCb2R5SW5pdCB8IG51bGw7XG5cbmludGVyZmFjZSBJSHR0cENsaWVudFJlcXVlc3RDb25maWcge1xuICAgIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAgIGJvZHlGYWN0b3J5PzogQm9keUZhY3Rvcnk7XG4gICAgYWNjZXB0Q29kZXM6IEh0dHBTdGF0dXNDb2RlW107XG4gICAgcXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zT2JqZWN0O1xuICAgIGNvbnRlbnRUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudFJlc3BvbnNlIGltcGxlbWVudHMgSUh0dHBDbGllbnRSZXNwb25zZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmZXRjaFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihmZXRjaFJlc3BvbnNlOiBSZXNwb25zZSkge1xuICAgICAgICB0aGlzLmZldGNoUmVzcG9uc2UgPSBmZXRjaFJlc3BvbnNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3RhdHVzKCk6IEh0dHBTdGF0dXNDb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hSZXNwb25zZS5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGpzb248VD4oKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHRoaXMuZmV0Y2hSZXNwb25zZS5qc29uKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhO1xuICAgIH1cbn1cblxudHlwZSBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24gPSAoY29uZmlnOiBJSHR0cENsaWVudFJlcXVlc3RDb25maWcpID0+IFByb21pc2U8SHR0cENsaWVudFJlc3BvbnNlIHwgUmVzcG9uc2U+O1xuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIGltcGxlbWVudHMgSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBleGVjdXRlUmVxdWVzdDogUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWNjZXB0Q29kZXM6IEh0dHBTdGF0dXNDb2RlW10gPSBbXTtcbiAgICBwcml2YXRlIHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdCA9IHt9O1xuICAgIHByaXZhdGUgc2lnbmFsOiB1bmRlZmluZWQgfCBBYm9ydFNpZ25hbDtcbiAgICBwcml2YXRlIGJvZHlGYWN0b3J5PzogQm9keUZhY3Rvcnk7XG4gICAgcHJpdmF0ZSBjb250ZW50VHlwZT86IHN0cmluZztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihleGVjdXRlOiBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5leGVjdXRlUmVxdWVzdCA9IGV4ZWN1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBYm9ydFNpZ25hbChzaWduYWw6IHVuZGVmaW5lZCB8IEFib3J0U2lnbmFsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuc2lnbmFsID0gc2lnbmFsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEJvZHlGcm9tQnVmZmVyKGJvZHk6IGZhbHNlIHwgQnVmZmVyIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChib2R5ID09PSBmYWxzZSB8fCBib2R5ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib2R5RmFjdG9yeSA9ICgpID0+IGJvZHk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSnNvbkJvZHkoc2VyaWFsaXphYmxlQm9keTogdW5rbm93biB8IHt9IHwgdW5rbm93bltdIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChzZXJpYWxpemFibGVCb2R5ICE9PSBmYWxzZSAmJiBzZXJpYWxpemFibGVCb2R5ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5ib2R5RmFjdG9yeSA9ICgpID0+IEpTT04uc3RyaW5naWZ5KHNlcmlhbGl6YWJsZUJvZHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zT2JqZWN0IHwgZmFsc2UgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgLi4ucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmF3Qm9keShib2R5OiBCdWZmZXIgfCBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoYm9keSAhPT0gZmFsc2UgJiYgYm9keSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBib2R5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBqc29uPFQ+KCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzO1xuICAgICAgICByZXR1cm4gcmVzdWx0Lmpzb248VD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWNjZXB0Q29kZShjb2RlOiBIdHRwU3RhdHVzQ29kZSk6IHRoaXMge1xuICAgICAgICB0aGlzLmFjY2VwdENvZGVzLnB1c2goY29kZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWFkb25seSB0aGVuOiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZT5bXCJ0aGVuXCJdID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVSZXF1ZXN0KHRoaXMuY3JlYXRlQ29uZmlnKCkpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIEh0dHBDbGllbnRSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSHR0cENsaWVudFJlc3BvbnNlKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIHJldHVybiByZXN1bHRQcm9taXNlLnRoZW4oLi4uYXJncyk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgY3JlYXRlQ29uZmlnKCk6IElIdHRwQ2xpZW50UmVxdWVzdENvbmZpZyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaWduYWw6IHRoaXMuc2lnbmFsLFxuICAgICAgICAgICAgYm9keUZhY3Rvcnk6IHRoaXMuYm9keUZhY3RvcnksXG4gICAgICAgICAgICBhY2NlcHRDb2RlczogdGhpcy5hY2NlcHRDb2RlcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgY29udGVudFR5cGU6IHRoaXMuY29udGVudFR5cGUsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGUoZm46IFJlcXVlc3RFeGVjdXRpb25GdW5jdGlvbik6IEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiBuZXcgSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyKGZuKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwQ2xpZW50IGltcGxlbWVudHMgSUh0dHBDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2hJbXBsOiBGZXRjaDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJhc2VVcmw6IHVuZGVmaW5lZCB8IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1dGhlbnRpY2F0aW9uUHJvdmlkZXI6IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFBhcmFtcz86IFF1ZXJ5UGFyYW1zT2JqZWN0ID0ge307XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHVuZGVmaW5lZCB8IHN0cmluZyxcbiAgICAgICAgYXV0aGVudGljYXRpb25Qcm92aWRlcjogSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXIsXG4gICAgICAgIGRlZmF1bHRRdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zT2JqZWN0XG4gICAgKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hJbXBsID0gZmV0Y2hJbXBsO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsID09IHVuZGVmaW5lZCA/IGJhc2VVcmwgOiB0cmltVHJhaWxpbmdTbGFzaChiYXNlVXJsKTtcbiAgICAgICAgdGhpcy5kZWZhdWx0UGFyYW1zID0gZGVmYXVsdFF1ZXJ5UGFyYW1zO1xuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgPSBhdXRoZW50aWNhdGlvblByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiR0VUXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBvc3QodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiUE9TVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwdXQodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiUFVUXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBhdGNoKHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBBVENIXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZSh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QoXCJERUxFVEVcIikodXJsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ldGhvZChtZXRob2Q6IFwiR0VUXCIgfCBcIlBPU1RcIiB8IFwiUFVUXCIgfCBcIlBBVENIXCIgfCBcIkRFTEVURVwiKTogKHVybDogc3RyaW5nKSA9PiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuICh1cmw6IHN0cmluZykgPT5cbiAgICAgICAgICAgIEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlci5jcmVhdGUoYXN5bmMgY29uZmlnID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZXRjaFVybCA9IHRoaXMudXJsKHVybCwgY29uZmlnLnF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuYXBwZW5kRGVmYXVsdFJlcXVlc3RIZWFkZXJzKHsgbWV0aG9kOiBtZXRob2QgfSwgY29uZmlnLmNvbnRlbnRUeXBlKTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0ID0gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyKHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2lnbmFsID0gY29uZmlnLnNpZ25hbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5ib2R5RmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtZXRob2RcIiwgXCJCb2R5IGlzIG5vdCBhbGxvd2VkIGZvciBHRVQgcmVxdWVzdHNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5ib2R5ID0gY29uZmlnLmJvZHlGYWN0b3J5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5mZXRjaEltcGwoZmV0Y2hVcmwsIHJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tTdGF0dXMocmVzcG9uc2UsIGNvbmZpZy5hY2NlcHRDb2Rlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmREZWZhdWx0UmVxdWVzdEhlYWRlcnMob3B0aW9uczogUmVxdWVzdEluaXQsIGNvbnRlbnRUeXBlPzogdW5kZWZpbmVkIHwgc3RyaW5nKTogUmVxdWVzdEluaXQge1xuICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgPz8ge307XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1tcIkNvbnRlbnQtVHlwZVwiXSA9IGNvbnRlbnRUeXBlID8/IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDYWNoZS1Db250cm9sXCJdID0gXCJuby1jYWNoZSwgbm8tc3RvcmVcIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiUHJhZ21hXCJdID0gXCJuby1jYWNoZVwiO1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJFeHBpcmVzXCJdID0gXCIwXCI7XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cmwocGF0aDogc3RyaW5nLCBwYXJhbXM6IHVuZGVmaW5lZCB8IFF1ZXJ5UGFyYW1zT2JqZWN0KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHBhdGg7XG4gICAgICAgIGlmICh0aGlzLmJhc2VVcmwgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmJhc2VVcmwgKyBcIi9cIiArIHRyaW1MZWFkaW5nU2xhc2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHRQYXJhbXMgPSB7IC4uLnRoaXMuZGVmYXVsdFBhcmFtcywgLi4ucGFyYW1zIH07XG4gICAgICAgIGlmIChwYXRoLmluY2x1ZGVzKFwiP1wiKSAmJiBwYXJhbXMgIT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKHJlc3VsdFBhcmFtcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKGBQYXNzaW5nIHNlYXJjaCBwYXJhbXMgaW4gdXJsIGFuZCB2aWEgcGFyYW1zIG9iamVjdCBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgdGhpcy5jcmVhdGVRdWVyeVN0cmluZyhyZXN1bHRQYXJhbXMpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlLCBhY2NlcHRDb2Rlcz86IEh0dHBTdGF0dXNDb2RlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCEocmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDApIHx8IChhY2NlcHRDb2RlcyA/PyBbXSkuaW5jbHVkZXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgbGV0IHNlcnZlclJlc3BvbnNlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZSA9IEpTT04ucGFyc2UoZXJyb3JUZXh0KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZXJ2ZXJSZXNwb25zZSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKFxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJSZXNwb25zZS5NZXNzYWdlID8/IHNlcnZlclJlc3BvbnNlLm1lc3NhZ2UgPz8gc2VydmVyUmVzcG9uc2UuRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1c1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKGVycm9yVGV4dCwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwb3N0U3luYyh1cmw6IHN0cmluZywgcGFyYW1zOiB1bmRlZmluZWQgfCBRdWVyeVBhcmFtc09iamVjdCwgZGF0YToge30pOiBIdHRwU3RhdHVzQ29kZSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgcmVxdWVzdC5vcGVuKFwiUE9TVFwiLCB0aGlzLnVybCh1cmwsIHBhcmFtcyksIGZhbHNlKTtcbiAgICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSB0cnVlO1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04XCIpO1xuICAgICAgICByZXF1ZXN0LnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICByZXR1cm4gcmVxdWVzdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlUGFyYW1WYWx1ZVN0cmluZyhwYXJhbTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke2VuY29kZVVSSUNvbXBvbmVudChwYXJhbSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUXVlcnlTdHJpbmcocGFyYW1zPzogUXVlcnlQYXJhbXNPYmplY3QpOiBzdHJpbmcge1xuICAgICAgICBpZiAocGFyYW1zID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zMiA9IHBhcmFtcztcbiAgICAgICAgbGV0IHJlc3VsdCA9IE9iamVjdC5rZXlzKHBhcmFtcylcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtczJba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCB2YWx1ZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCBpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VQYXJhbVZhbHVlU3RyaW5nKGtleSwgaXRlbS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHggPT4geCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbihcIiZcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmZpbHRlcih4ID0+IHggIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgLmpvaW4oXCImXCIpO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgPyBcIj9cIiArIHJlc3VsdCA6IFwiXCI7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUZldGNoSW1wbCgpOiBGZXRjaCB7XG4gICAgICAgIGNvbnN0IGZldGNoV2l0aE9wdGlvbnMgPSAoaW5wdXQ6IFJlcXVlc3RJbmZvLCBpbml0PzogUmVxdWVzdEluaXQpOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybChpbnB1dCwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBpbml0ID0gaW5pdCA/PyB7fTtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnMgPSBpbml0LmhlYWRlcnMgPz8ge307XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGUsIG5vLXN0b3JlXCI7XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiUHJhZ21hXCJdID0gXCJuby1jYWNoZVwiO1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVyc1tcIkV4cGlyZXNcIl0gPSBcIjBcIjtcbiAgICAgICAgICAgICAgICBpbml0ID0gdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyKGluaXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoSW1wbChmZXRjaFVybCwgaW5pdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZldGNoVXJsID0gdGhpcy51cmwoaW5wdXQudXJsLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0SW5pdDogUmVxdWVzdEluaXQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIkNhY2hlLUNvbnRyb2xcIl06IFwibm8tY2FjaGUsIG5vLXN0b3JlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBbXCJQcmFnbWFcIl06IFwibm8tY2FjaGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIkV4cGlyZXNcIl06IFwiMFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaW5wdXQuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBpbnB1dC5zaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlOiBpbnB1dC5jYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbHM6IGlucHV0LmNyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgICAgICBpbnRlZ3JpdHk6IGlucHV0LmludGVncml0eSxcbiAgICAgICAgICAgICAgICAgICAga2VlcGFsaXZlOiBpbnB1dC5rZWVwYWxpdmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogaW5wdXQubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBpbnB1dC5tb2RlLFxuICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDogaW5wdXQucmVkaXJlY3QsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVycmVyOiBpbnB1dC5yZWZlcnJlcixcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJyZXJQb2xpY3k6IGlucHV0LnJlZmVycmVyUG9saWN5LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmVxdWVzdEluaXQgPSB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIocmVxdWVzdEluaXQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZldGNoSW1wbChmZXRjaFVybCwgcmVxdWVzdEluaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZmV0Y2hXaXRoT3B0aW9ucztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIdHRwRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgcHVibGljIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHN0YXR1c0NvZGU6IG51bWJlcikge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJIdHRwRXJyb3JcIjtcbiAgICAgICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTtcbiAgICB9XG59XG4iXX0=
|
|
366
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9IdHRwQ2xpZW50L0h0dHBDbGllbnQudHMiXSwibmFtZXMiOlsidHJpbVRyYWlsaW5nU2xhc2giLCJ1cmwiLCJzbGljZSIsInRyaW1MZWFkaW5nU2xhc2giLCJIdHRwQ2xpZW50UmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsImZldGNoUmVzcG9uc2UiLCJzdGF0dXMiLCJqc29uIiwicmVzcG9uc2VEYXRhIiwiSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIiwiZXhlY3V0ZSIsImV4ZWN1dGVSZXF1ZXN0IiwiYWNjZXB0Q29kZXMiLCJxdWVyeVBhcmFtcyIsInNpZ25hbCIsImJvZHlGYWN0b3J5IiwiY29udGVudFR5cGUiLCJ0aGVuIiwiYXJncyIsInJlc3VsdFByb21pc2UiLCJyZXN1bHQiLCJjcmVhdGVDb25maWciLCJ3aXRoQWJvcnRTaWduYWwiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJib2R5IiwidW5kZWZpbmVkIiwid2l0aEpzb25Cb2R5Iiwic2VyaWFsaXphYmxlQm9keSIsIkpTT04iLCJzdHJpbmdpZnkiLCJ3aXRoUXVlcnlQYXJhbXMiLCJ3aXRoUmF3Qm9keSIsImFjY2VwdENvZGUiLCJjb2RlIiwicHVzaCIsImNyZWF0ZSIsImZuIiwiSHR0cENsaWVudCIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJhdXRoZW50aWNhdGlvblByb3ZpZGVyIiwiZGVmYXVsdFF1ZXJ5UGFyYW1zIiwiZGVmYXVsdFBhcmFtcyIsImdldCIsIm1ldGhvZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImRlbGV0ZSIsImNvbmZpZyIsImZldGNoVXJsIiwicmVxdWVzdCIsImFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyIsIkludmFsaWRBcmd1bWVudEVycm9yIiwicmVzcG9uc2UiLCJjaGVja1N0YXR1cyIsIm9wdGlvbnMiLCJoZWFkZXJzIiwicGF0aCIsInBhcmFtcyIsInJlc3VsdFBhcmFtcyIsImluY2x1ZGVzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsIk5vdFN1cHBvcnRlZEVycm9yIiwiY3JlYXRlUXVlcnlTdHJpbmciLCJpc1N1Y2Nlc3NSZXNwb25zZVN0YXR1cyIsImlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzIiwiZXJyb3JUZXh0IiwidGV4dCIsInNlcnZlclJlc3BvbnNlIiwicGFyc2UiLCJlIiwiZXJyb3IiLCJIdHRwRXJyb3IiLCJNZXNzYWdlIiwibWVzc2FnZSIsIkVycm9yIiwicG9zdFN5bmMiLCJkYXRhIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwid2l0aENyZWRlbnRpYWxzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJtYWtlUGFyYW1WYWx1ZVN0cmluZyIsInBhcmFtIiwidmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwYXJhbXMyIiwibWFwIiwia2V5IiwidG9TdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJpdGVtIiwiZmlsdGVyIiwieCIsImpvaW4iLCJjcmVhdGVGZXRjaEltcGwiLCJmZXRjaFdpdGhPcHRpb25zIiwiaW5wdXQiLCJpbml0IiwicmVxdWVzdEluaXQiLCJjYWNoZSIsImNyZWRlbnRpYWxzIiwiaW50ZWdyaXR5Iiwia2VlcGFsaXZlIiwibW9kZSIsInJlZGlyZWN0IiwicmVmZXJyZXIiLCJyZWZlcnJlclBvbGljeSIsInN0YXR1c0NvZGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBWUEsU0FBU0EsaUJBQVQsQ0FBMkJDLEdBQTNCLEVBQWdEO0FBQzVDLFNBQU9BLEdBQUcsQ0FBQ0MsS0FBSixDQUFVLENBQUMsQ0FBWCxNQUFrQixHQUFsQixHQUF3QkQsR0FBRyxDQUFDQyxLQUFKLENBQVUsQ0FBVixFQUFhLENBQUMsQ0FBZCxDQUF4QixHQUEyQ0QsR0FBbEQ7QUFDSDs7QUFFRCxTQUFTRSxnQkFBVCxDQUEwQkYsR0FBMUIsRUFBK0M7QUFDM0MsU0FBT0EsR0FBRyxDQUFDLENBQUQsQ0FBSCxLQUFXLEdBQVgsR0FB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QWxCO0FBQ0g7O0FBRTBCLE1BQVBwQyxPQUFPLEdBQVc7QUFDbEMsV0FBTyxNQUFNQSxPQUFOLEdBQWlCLGlCQUFnQixLQUFLb0MsVUFBVyxFQUF4RDtBQUNIOztBQVhnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBOb3RTdXBwb3J0ZWRFcnJvciB9IGZyb20gXCIuLi9FcnJvcnNcIjtcblxuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQge1xuICAgIEh0dHBTdGF0dXNDb2RlLFxuICAgIElIdHRwQ2xpZW50LFxuICAgIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIsXG4gICAgSUh0dHBDbGllbnRSZXNwb25zZSxcbiAgICBRdWVyeVBhcmFtc09iamVjdCxcbn0gZnJvbSBcIi4vSUh0dHBDbGllbnRcIjtcbmltcG9ydCB7IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyIH0gZnJvbSBcIi4vSHR0cENsaWVudEF1dGhlbnRpY2F0aW9uUHJvdmlkZXJcIjtcblxuZnVuY3Rpb24gdHJpbVRyYWlsaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc2xpY2UoLTEpID09PSBcIi9cIiA/IHVybC5zbGljZSgwLCAtMSkgOiB1cmw7XG59XG5cbmZ1bmN0aW9uIHRyaW1MZWFkaW5nU2xhc2godXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmxbMF0gPT09IFwiL1wiID8gdXJsLnNsaWNlKDEpIDogdXJsO1xufVxuXG50eXBlIEJvZHlGYWN0b3J5ID0gKCkgPT4gQm9keUluaXQgfCBudWxsO1xuXG5pbnRlcmZhY2UgSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnIHtcbiAgICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgICBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdO1xuICAgIHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdDtcbiAgICBjb250ZW50VHlwZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVzcG9uc2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2hSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZmV0Y2hSZXNwb25zZTogUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy5mZXRjaFJlc3BvbnNlID0gZmV0Y2hSZXNwb25zZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN0YXR1cygpOiBIdHRwU3RhdHVzQ29kZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBqc29uPFQ+KCk6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLmZldGNoUmVzcG9uc2UuanNvbigpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YTtcbiAgICB9XG59XG5cbnR5cGUgUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uID0gKGNvbmZpZzogSUh0dHBDbGllbnRSZXF1ZXN0Q29uZmlnKSA9PiBQcm9taXNlPEh0dHBDbGllbnRSZXNwb25zZSB8IFJlc3BvbnNlPjtcblxuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciBpbXBsZW1lbnRzIElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZXhlY3V0ZVJlcXVlc3Q6IFJlcXVlc3RFeGVjdXRpb25GdW5jdGlvbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFjY2VwdENvZGVzOiBIdHRwU3RhdHVzQ29kZVtdID0gW107XG4gICAgcHJpdmF0ZSBxdWVyeVBhcmFtczogUXVlcnlQYXJhbXNPYmplY3QgPSB7fTtcbiAgICBwcml2YXRlIHNpZ25hbDogdW5kZWZpbmVkIHwgQWJvcnRTaWduYWw7XG4gICAgcHJpdmF0ZSBib2R5RmFjdG9yeT86IEJvZHlGYWN0b3J5O1xuICAgIHByaXZhdGUgY29udGVudFR5cGU/OiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZXhlY3V0ZTogUmVxdWVzdEV4ZWN1dGlvbkZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMuZXhlY3V0ZVJlcXVlc3QgPSBleGVjdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWJvcnRTaWduYWwoc2lnbmFsOiB1bmRlZmluZWQgfCBBYm9ydFNpZ25hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLnNpZ25hbCA9IHNpZ25hbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb250ZW50VHlwZShjb250ZW50VHlwZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhCb2R5RnJvbUJ1ZmZlcihib2R5OiBmYWxzZSB8IEJ1ZmZlciB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoYm9keSA9PT0gZmFsc2UgfHwgYm9keSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBib2R5O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEpzb25Cb2R5KHNlcmlhbGl6YWJsZUJvZHk6IHVua25vd24gfCB7fSB8IHVua25vd25bXSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgICAgICBpZiAoc2VyaWFsaXphYmxlQm9keSAhPT0gZmFsc2UgJiYgc2VyaWFsaXphYmxlQm9keSAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keUZhY3RvcnkgPSAoKSA9PiBKU09OLnN0cmluZ2lmeShzZXJpYWxpemFibGVCb2R5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtc09iamVjdCB8IGZhbHNlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgICAgIGlmIChxdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJhd0JvZHkoYm9keTogQnVmZmVyIHwgc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICAgICAgaWYgKGJvZHkgIT09IGZhbHNlICYmIGJvZHkgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmJvZHlGYWN0b3J5ID0gKCkgPT4gYm9keTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMganNvbjxUPigpOiBQcm9taXNlPFQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcztcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5qc29uPFQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjY2VwdENvZGUoY29kZTogSHR0cFN0YXR1c0NvZGUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hY2NlcHRDb2Rlcy5wdXNoKGNvZGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgdGhlbjogUHJvbWlzZTxIdHRwQ2xpZW50UmVzcG9uc2U+W1widGhlblwiXSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjdXRlUmVxdWVzdCh0aGlzLmNyZWF0ZUNvbmZpZygpKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBIdHRwQ2xpZW50UmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXNwb25zZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICByZXR1cm4gcmVzdWx0UHJvbWlzZS50aGVuKC4uLmFyZ3MpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbmZpZygpOiBJSHR0cENsaWVudFJlcXVlc3RDb25maWcge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2lnbmFsOiB0aGlzLnNpZ25hbCxcbiAgICAgICAgICAgIGJvZHlGYWN0b3J5OiB0aGlzLmJvZHlGYWN0b3J5LFxuICAgICAgICAgICAgYWNjZXB0Q29kZXM6IHRoaXMuYWNjZXB0Q29kZXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogdGhpcy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOiB0aGlzLmNvbnRlbnRUeXBlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlKGZuOiBSZXF1ZXN0RXhlY3V0aW9uRnVuY3Rpb24pOiBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gbmV3IEh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlcihmbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudCBpbXBsZW1lbnRzIElIdHRwQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZldGNoSW1wbDogRmV0Y2g7XG4gICAgcHJpdmF0ZSByZWFkb25seSBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdXRoZW50aWNhdGlvblByb3ZpZGVyOiBIdHRwQ2xpZW50QXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdCA9IHt9O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBmZXRjaEltcGw6IEZldGNoLFxuICAgICAgICBiYXNlVXJsOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uUHJvdmlkZXI6IEh0dHBDbGllbnRBdXRoZW50aWNhdGlvblByb3ZpZGVyLFxuICAgICAgICBkZWZhdWx0UXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdFxuICAgICkge1xuICAgICAgICB0aGlzLmZldGNoSW1wbCA9IGZldGNoSW1wbDtcbiAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybCA9PSB1bmRlZmluZWQgPyBiYXNlVXJsIDogdHJpbVRyYWlsaW5nU2xhc2goYmFzZVVybCk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFBhcmFtcyA9IGRlZmF1bHRRdWVyeVBhcmFtcztcbiAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblByb3ZpZGVyID0gYXV0aGVudGljYXRpb25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIkdFVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb3N0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBPU1RcIikodXJsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHV0KHVybDogc3RyaW5nKTogSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGhvZChcIlBVVFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaCh1cmw6IHN0cmluZyk6IElIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRob2QoXCJQQVRDSFwiKSh1cmwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGUodXJsOiBzdHJpbmcpOiBJSHR0cENsaWVudFJlcXVlc3RXcmFwcGVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0aG9kKFwiREVMRVRFXCIpKHVybCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXRob2QobWV0aG9kOiBcIkdFVFwiIHwgXCJQT1NUXCIgfCBcIlBVVFwiIHwgXCJQQVRDSFwiIHwgXCJERUxFVEVcIik6ICh1cmw6IHN0cmluZykgPT4gSUh0dHBDbGllbnRSZXF1ZXN0V3JhcHBlciB7XG4gICAgICAgIHJldHVybiAodXJsOiBzdHJpbmcpID0+XG4gICAgICAgICAgICBIdHRwQ2xpZW50UmVxdWVzdFdyYXBwZXIuY3JlYXRlKGFzeW5jIGNvbmZpZyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybCh1cmwsIGNvbmZpZy5xdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmFwcGVuZERlZmF1bHRSZXF1ZXN0SGVhZGVycyh7IG1ldGhvZDogbWV0aG9kIH0sIGNvbmZpZy5jb250ZW50VHlwZSk7XG4gICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNpZ25hbCA9IGNvbmZpZy5zaWduYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb25maWcuYm9keUZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibWV0aG9kXCIsIFwiQm9keSBpcyBub3QgYWxsb3dlZCBmb3IgR0VUIHJlcXVlc3RzXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuYm9keSA9IGNvbmZpZy5ib2R5RmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCByZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrU3RhdHVzKHJlc3BvbnNlLCBjb25maWcuYWNjZXB0Q29kZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kRGVmYXVsdFJlcXVlc3RIZWFkZXJzKG9wdGlvbnM6IFJlcXVlc3RJbml0LCBjb250ZW50VHlwZT86IHVuZGVmaW5lZCB8IHN0cmluZyk6IFJlcXVlc3RJbml0IHtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgICAgICBvcHRpb25zLmhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBjb250ZW50VHlwZSA/PyBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiQ2FjaGUtQ29udHJvbFwiXSA9IFwibm8tY2FjaGUsIG5vLXN0b3JlXCI7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1tcIlByYWdtYVwiXSA9IFwibm8tY2FjaGVcIjtcbiAgICAgICAgb3B0aW9ucy5oZWFkZXJzW1wiRXhwaXJlc1wiXSA9IFwiMFwiO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgdXJsKHBhdGg6IHN0cmluZywgcGFyYW1zOiB1bmRlZmluZWQgfCBRdWVyeVBhcmFtc09iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXN1bHQgPSBwYXRoO1xuICAgICAgICBpZiAodGhpcy5iYXNlVXJsICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5iYXNlVXJsICsgXCIvXCIgKyB0cmltTGVhZGluZ1NsYXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0UGFyYW1zID0geyAuLi50aGlzLmRlZmF1bHRQYXJhbXMsIC4uLnBhcmFtcyB9O1xuICAgICAgICBpZiAocGF0aC5pbmNsdWRlcyhcIj9cIikgJiYgcGFyYW1zICE9IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhyZXN1bHRQYXJhbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcihgUGFzc2luZyBzZWFyY2ggcGFyYW1zIGluIHVybCBhbmQgdmlhIHBhcmFtcyBvYmplY3QgaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIHRoaXMuY3JlYXRlUXVlcnlTdHJpbmcocmVzdWx0UGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSwgYWNjZXB0Q29kZXM/OiBIdHRwU3RhdHVzQ29kZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGlzU3VjY2Vzc1Jlc3BvbnNlU3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJiByZXNwb25zZS5zdGF0dXMgPCAzMDA7XG4gICAgICAgIGNvbnN0IGlzQWNjZXB0Q29kZXNJbmNsdWRlc1Jlc3BvbnNlU3RhdHVzID0gKGFjY2VwdENvZGVzID8/IFtdKS5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICBpZiAoKCFpc1N1Y2Nlc3NSZXNwb25zZVN0YXR1cyAmJiAhaXNBY2NlcHRDb2Rlc0luY2x1ZGVzUmVzcG9uc2VTdGF0dXMpIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvclRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICBsZXQgc2VydmVyUmVzcG9uc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlID0gSlNPTi5wYXJzZShlcnJvclRleHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlcnZlclJlc3BvbnNlICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChcImVycm9yXCIgaW4gc2VydmVyUmVzcG9uc2UgJiYgdHlwZW9mIHNlcnZlclJlc3BvbnNlLmVycm9yID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1hcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoc2VydmVyUmVzcG9uc2UuZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWFyZ3VtZW50XG4gICAgICAgICAgICAgICAgICAgIHNlcnZlclJlc3BvbnNlLk1lc3NhZ2UgPz8gc2VydmVyUmVzcG9uc2UubWVzc2FnZSA/PyBzZXJ2ZXJSZXNwb25zZS5FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHBvc3RTeW5jKHVybDogc3RyaW5nLCBwYXJhbXM6IHVuZGVmaW5lZCB8IFF1ZXJ5UGFyYW1zT2JqZWN0LCBkYXRhOiB7fSk6IEh0dHBTdGF0dXNDb2RlIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICByZXF1ZXN0Lm9wZW4oXCJQT1NUXCIsIHRoaXMudXJsKHVybCwgcGFyYW1zKSwgZmFsc2UpO1xuICAgICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9IHRydWU7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLThcIik7XG4gICAgICAgIHJlcXVlc3Quc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgICAgIHJldHVybiByZXF1ZXN0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwcml2YXRlIG1ha2VQYXJhbVZhbHVlU3RyaW5nKHBhcmFtOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtKX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVRdWVyeVN0cmluZyhwYXJhbXM/OiBRdWVyeVBhcmFtc09iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGlmIChwYXJhbXMgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJhbXMyID0gcGFyYW1zO1xuICAgICAgICBsZXQgcmVzdWx0ID0gT2JqZWN0LmtleXMocGFyYW1zKVxuICAgICAgICAgICAgLm1hcChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyYW1zMltrZXldO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlUGFyYW1WYWx1ZVN0cmluZyhrZXksIGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFrZVBhcmFtVmFsdWVTdHJpbmcoa2V5LCBpdGVtLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4ICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKFwiJlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKHggPT4geCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAuam9pbihcIiZcIik7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdCA/IFwiP1wiICsgcmVzdWx0IDogXCJcIjtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRmV0Y2hJbXBsKCk6IEZldGNoIHtcbiAgICAgICAgY29uc3QgZmV0Y2hXaXRoT3B0aW9ucyA9IChpbnB1dDogUmVxdWVzdEluZm8sIGluaXQ/OiBSZXF1ZXN0SW5pdCk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZXRjaFVybCA9IHRoaXMudXJsKGlucHV0LCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGluaXQgPSBpbml0ID8/IHt9O1xuICAgICAgICAgICAgICAgIGluaXQuaGVhZGVycyA9IGluaXQuaGVhZGVycyA/PyB7fTtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnNbXCJDYWNoZS1Db250cm9sXCJdID0gXCJuby1jYWNoZSwgbm8tc3RvcmVcIjtcbiAgICAgICAgICAgICAgICBpbml0LmhlYWRlcnNbXCJQcmFnbWFcIl0gPSBcIm5vLWNhY2hlXCI7XG4gICAgICAgICAgICAgICAgaW5pdC5oZWFkZXJzW1wiRXhwaXJlc1wiXSA9IFwiMFwiO1xuICAgICAgICAgICAgICAgIGluaXQgPSB0aGlzLmF1dGhlbnRpY2F0aW9uUHJvdmlkZXIoaW5pdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCBpbml0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmV0Y2hVcmwgPSB0aGlzLnVybChpbnB1dC51cmwsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3RJbml0OiBSZXF1ZXN0SW5pdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgW1wiQ2FjaGUtQ29udHJvbFwiXTogXCJuby1jYWNoZSwgbm8tc3RvcmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcIlByYWdtYVwiXTogXCJuby1jYWNoZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgW1wiRXhwaXJlc1wiXTogXCIwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pbnB1dC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzaWduYWw6IGlucHV0LnNpZ25hbCxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGU6IGlucHV0LmNhY2hlLFxuICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogaW5wdXQuY3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgICAgIGludGVncml0eTogaW5wdXQuaW50ZWdyaXR5LFxuICAgICAgICAgICAgICAgICAgICBrZWVwYWxpdmU6IGlucHV0LmtlZXBhbGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBpbnB1dC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IGlucHV0Lm1vZGUsXG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiBpbnB1dC5yZWRpcmVjdCxcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJyZXI6IGlucHV0LnJlZmVycmVyLFxuICAgICAgICAgICAgICAgICAgICByZWZlcnJlclBvbGljeTogaW5wdXQucmVmZXJyZXJQb2xpY3ksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXF1ZXN0SW5pdCA9IHRoaXMuYXV0aGVudGljYXRpb25Qcm92aWRlcihyZXF1ZXN0SW5pdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hJbXBsKGZldGNoVXJsLCByZXF1ZXN0SW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmZXRjaFdpdGhPcHRpb25zO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzQ29kZTogbnVtYmVyO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgc3RhdHVzQ29kZTogbnVtYmVyKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIkh0dHBFcnJvclwiO1xuICAgICAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gc3VwZXIubWVzc2FnZSArIGAuIFN0YXR1c0NvZGU6ICR7dGhpcy5zdGF0dXNDb2RlfWA7XG4gICAgfVxufVxuIl19
|
|
@@ -323,9 +323,14 @@ class IterUtils {
|
|
|
323
323
|
}
|
|
324
324
|
}
|
|
325
325
|
|
|
326
|
+
static reduce(items, reducer, initialValue) {
|
|
327
|
+
let index = 0;
|
|
328
|
+
return Iterator.from(items).reduce((acc, item) => reducer(acc, item, index++), initialValue);
|
|
329
|
+
}
|
|
330
|
+
|
|
326
331
|
}
|
|
327
332
|
|
|
328
333
|
exports.IterUtils = IterUtils;
|
|
329
334
|
IterUtils.count = count;
|
|
330
335
|
IterUtils.concat = concat;
|
|
331
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JdGVyYWJsZVV0aWxzLnRzIl0sIm5hbWVzIjpbInJldmVyc2VBcnJheSIsImFycmF5IiwiaSIsImxlbmd0aCIsInRvQXN5bmNJdGVyYXRvciIsImdlbmVyYXRvciIsIkFzeW5jSXRlcmF0b3IiLCJmcm9tIiwiZmluZExhc3QiLCJpdGVtcyIsImNvbmRpdGlvbiIsInJlc3VsdCIsIml0ZW0iLCJjb25jYXQiLCJpdGVyYWJsZXMiLCJpdGVyYWJsZUl0ZW0iLCJpdGVyYXRlVmFsdWVzIiwib2JqIiwia2V5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaXRlcmF0ZUtleXMiLCJpdGVyYXRlRW50cmllcyIsImNvdW50IiwiX2l0ZW0iLCJFbXB0eVNpbmdsZUVsZW1lbnQiLCJTeW1ib2wiLCJmb3IiLCJOb1ZhbHVlTWFya2VyIiwiSXRlclV0aWxzIiwiaXNFbXB0eSIsIml0ZXJhYmxlIiwiZ3JvdXBCeSIsInNlbGVjdEtleSIsIk1hcCIsImtleUxpc3QiLCJnZXQiLCJ1bmRlZmluZWQiLCJzZXQiLCJwdXNoIiwic29ydEJ5Iiwic2VsZWN0b3IiLCJzb3J0IiwiYUl0ZW0iLCJiSXRlbSIsImxlZnRWYWx1ZSIsInJpZ2h0VmFsdWUiLCJsYXN0IiwiQXJyYXkiLCJpc0FycmF5IiwibGFzdEl0ZW0iLCJmaXJzdCIsImZpcnN0SXRlbSIsInNpbmdsZSIsInNpbmdsZUFzc2VydE1lc3NhZ2UiLCJFcnJvciIsInNpbmdsZUVsZW1lbnQiLCJpbmRleCIsInNraXBMYXN0Iiwic2tpcENvdW50IiwicHJldkl0ZW1zIiwiZmlsbCIsInJlc3VsdEl0ZW0iLCJjdXJyZW50SW5kZXgiLCJtaW5CeSIsImNvbXBhcmVGdW5jIiwibWluVmFsdWUiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1pbkJ5T3JVbmRlZmluZWQiLCJyYW5nZSIsImluU3RhcnRPckNvdW50IiwiaW5JdGVtQ291bnQiLCJzdGFydCIsIml0ZW1Db3VudCIsImludGVyc3BlcnNlIiwiaW50ZXJzcGVyc2VGbiIsImZsYXRNYXAiLCJ4IiwiemlwIiwiaXRlcmF0b3JzIiwibWFwIiwiaXQiLCJJdGVyYXRvciIsImhhc1VuZG9uZUl0ZXJhdG9ycyIsInJlc3VsdEVudHJ5IiwiaXRlcmF0b3IiLCJyZXN1bHRWYWx1ZSIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJkaXN0aW5jdEJ5IiwiaWRTZWxlY3RvciIsIlNldCIsImlkIiwiaGFzIiwiYWRkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFFTyxVQUFVQSxZQUFWLENBQTBCQyxLQUExQixFQUFvRTtBQUN2RSxPQUFLLElBQUlDLENBQUMsR0FBR0QsS0FBSyxDQUFDRSxNQUFOLEdBQWUsQ0FBNUIsRUFBK0JELENBQUMsSUFBSSxDQUFwQyxFQUF1Q0EsQ0FBQyxFQUF4QyxFQUE0QztBQUN4QztBQUNBLFVBQU1ELEtBQUssQ0FBQ0MsQ0FBRCxDQUFYO0FBQ0g7QUFDSjs7QUFFTSxTQUFTRSxlQUFULENBQTRCQyxTQUE1QixFQUEwRjtBQUM3RixTQUFPQyxhQUFhLENBQUNDLElBQWQsQ0FBbUJGLFNBQVMsRUFBNUIsQ0FBUDtBQUNIOztBQUVNLFNBQVNHLFFBQVQsQ0FBcUJDLEtBQXJCLEVBQXlDQyxTQUF6QyxFQUF5RjtBQUM1RixNQUFJQyxNQUFKOztBQUNBLE9BQUssTUFBTUMsSUFBWCxJQUFtQkgsS0FBbkIsRUFBMEI7QUFDdEIsUUFBSUMsU0FBUyxDQUFDRSxJQUFELENBQWIsRUFBcUI7QUFDakJELE1BQUFBLE1BQU0sR0FBR0MsSUFBVDtBQUNIO0FBQ0o7O0FBQ0QsU0FBT0QsTUFBUDtBQUNIOztBQUVNLFVBQVVFLE1BQVYsQ0FBb0IsR0FBR0MsU0FBdkIsRUFBMkU7QUFDOUUsT0FBSyxNQUFNQyxZQUFYLElBQTJCRCxTQUEzQixFQUFzQztBQUNsQyxXQUFPQyxZQUFQO0FBQ0g7QUFDSjs7QUFFTSxVQUFVQyxhQUFWLENBQWlFQyxHQUFqRSxFQUF5RztBQUM1RyxPQUFL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QUFFLEdBQUdGLFVBQVUsQ0FBQ2pGLElBQUQsQ0FBckI7O0FBQ0EsVUFBSSxDQUFDNEIsR0FBRyxDQUFDd0QsR0FBSixDQUFRRCxFQUFSLENBQUwsRUFBa0I7QUFDZHZELFFBQUFBLEdBQUcsQ0FBQ3lELEdBQUosQ0FBUUYsRUFBUjtBQUNBLGNBQU1uRixJQUFOO0FBQ0g7QUFDSjtBQUNKOztBQXpOa0I7OztBQUFWbUIsUyxDQUNLTixLLEdBQVFBLEs7QUFEYk0sUyxDQUVLbEIsTSxHQUFTQSxNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWluTGVuZ3RoQXJyYXksIHJlamVjdCB9IGZyb20gXCIuL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgeyBDb21wYXJlRnVuYyB9IGZyb20gXCIuL0NvbXBhcmVyc1wiO1xuaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSBmcm9tIFwiLi9FcnJvcnNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uKiByZXZlcnNlQXJyYXk8VD4oYXJyYXk6IHJlYWRvbmx5IFRbXSk6IEl0ZXJhYmxlSXRlcmF0b3I8VD4ge1xuICAgIGZvciAobGV0IGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICB5aWVsZCBhcnJheVtpXSE7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Bc3luY0l0ZXJhdG9yPFQ+KGdlbmVyYXRvcjogKCkgPT4gQXN5bmNHZW5lcmF0b3I8VD4pOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8VD4ge1xuICAgIHJldHVybiBBc3luY0l0ZXJhdG9yLmZyb20oZ2VuZXJhdG9yKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZExhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+LCBjb25kaXRpb246IChpdGVtOiBUKSA9PiBib29sZWFuKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlc3VsdDogVCB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgaWYgKGNvbmRpdGlvbihpdGVtKSkge1xuICAgICAgICAgICAgcmVzdWx0ID0gaXRlbTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24qIGNvbmNhdDxUPiguLi5pdGVyYWJsZXM6IEFycmF5PEl0ZXJhYmxlPFQ+Pik6IEl0ZXJhYmxlSXRlcmF0b3I8VD4ge1xuICAgIGZvciAoY29uc3QgaXRlcmFibGVJdGVtIG9mIGl0ZXJhYmxlcykge1xuICAgICAgICB5aWVsZCogaXRlcmFibGVJdGVtO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyYXRlVmFsdWVzPFRLIGV4dGVuZHMgc3RyaW5nIHwgc3ltYm9sIHwgbnVtYmVyLCBUVj4ob2JqOiB7IFtrZXkgaW4gVEtdOiBUViB9KTogSXRlcmFibGU8VFY+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHlpZWxkIG9ialtrZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUtleXM8VE8+KG9iajogUmVhZG9ubHk8VE8+KTogSXRlcmFibGU8RXh0cmFjdDxrZXlvZiBUTywgc3RyaW5nPj47XG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUtleXM8VFY+KG9iajogUmVhZG9ubHk8eyBba2V5OiBzdHJpbmddOiBUViB9Pik6IEl0ZXJhYmxlPHN0cmluZz47XG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUtleXMob2JqOiBSZWFkb25seTx7fT4pOiBJdGVyYWJsZTxzdHJpbmc+O1xuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyYXRlS2V5czxUSyBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCB8IG51bWJlcj4ob2JqOiB7IFtrZXkgaW4gVEtdOiB1bmtub3duIH0pOiBJdGVyYWJsZTxUSz4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgeWllbGQga2V5O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZUVudHJpZXM8VE8+KG9iajogUmVhZG9ubHk8VE8+KTogSXRlcmFibGU8W0V4dHJhY3Q8a2V5b2YgVE8sIHN0cmluZz4sIFRPW2tleW9mIFRPXV0+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVFbnRyaWVzPFRWPihvYmo6IFJlYWRvbmx5PHsgW2tleTogc3RyaW5nXTogVFYgfT4pOiBJdGVyYWJsZTxbc3RyaW5nLCBUVl0+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVFbnRyaWVzKG9iajogUmVhZG9ubHk8e30+KTogSXRlcmFibGU8W3N0cmluZywgdW5rbm93bl0+O1xuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyYXRlRW50cmllczxUVj4ob2JqOiBSZWFkb25seTx7IFtrZXk6IHN0cmluZ106IFRWIH0+KTogSXRlcmFibGU8W3N0cmluZywgVFZdPiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgeWllbGQgW2tleSwgb2JqW2tleV0hXTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPik6IG51bWJlciB7XG4gICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgZm9yIChjb25zdCBfaXRlbSBvZiBpdGVtcykge1xuICAgICAgICByZXN1bHQrKztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgRW1wdHlTaW5nbGVFbGVtZW50ID0gU3ltYm9sLmZvcihcIkVtcHR5U2luZ2xlRWxlbWVudFwiKTtcbmNvbnN0IE5vVmFsdWVNYXJrZXIgPSBTeW1ib2wuZm9yKFwiTm9WYWx1ZU1hcmtlclwiKTtcblxuZXhwb3J0IGNsYXNzIEl0ZXJVdGlscyB7XG4gICAgcHVibGljIHN0YXRpYyBjb3VudCA9IGNvdW50O1xuICAgIHB1YmxpYyBzdGF0aWMgY29uY2F0ID0gY29uY2F0O1xuXG4gICAgcHVibGljIHN0YXRpYyBpc0VtcHR5PFQ+KGl0ZXJhYmxlOiBJdGVyYWJsZTxUPik6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGNvbnN0IF9pdGVtIG9mIGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBncm91cEJ5PFQsIFRLZXk+KGl0ZXJhYmxlOiBJdGVyYWJsZTxUPiwgc2VsZWN0S2V5OiAoaXRlbTogVCkgPT4gVEtleSk6IE1hcDxUS2V5LCBUW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxUS2V5LCBUW10+KCk7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2VsZWN0S2V5KGl0ZW0pO1xuICAgICAgICAgICAgY29uc3Qga2V5TGlzdCA9IHJlc3VsdC5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmIChrZXlMaXN0ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCBbaXRlbV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBrZXlMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHNvcnRCeTxUPihpdGVtczogcmVhZG9ubHkgVFtdLCBzZWxlY3RvcjogKGl0ZW06IFQpID0+IHN0cmluZyk6IFRbXSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5pdGVtc107XG4gICAgICAgIHJlc3VsdC5zb3J0KChhSXRlbSwgYkl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRWYWx1ZSA9IHNlbGVjdG9yKGFJdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0VmFsdWUgPSBzZWxlY3RvcihiSXRlbSk7XG4gICAgICAgICAgICBpZiAobGVmdFZhbHVlID09PSByaWdodFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxlZnRWYWx1ZSA8IHJpZ2h0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IE1pbkxlbmd0aEFycmF5PFQsIDE+KTogVDtcbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVDtcbiAgICBwdWJsaWMgc3RhdGljIGxhc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsYXN0SXRlbTogVCB8IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBsYXN0SXRlbSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZmlyc3Q8VD4oaXRlbXM6IFtULCAuLi51bmtub3duW11dKTogVDtcbiAgICBwdWJsaWMgc3RhdGljIGZpcnN0PFQ+KGl0ZW1zOiBNaW5MZW5ndGhBcnJheTxULCAxPik6IFQ7XG4gICAgcHVibGljIHN0YXRpYyBmaXJzdDxUPihpdGVtczogSXRlcmFibGU8VD4gfCByZWFkb25seSBUW10pOiB1bmRlZmluZWQgfCBUO1xuICAgIHB1YmxpYyBzdGF0aWMgZmlyc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zWzBdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaXJzdEl0ZW06IFQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgZmlyc3RJdGVtID0gaXRlbTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdEl0ZW07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzaW5nbGU8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSB8IEl0ZXJhYmxlPFQ+LCBzaW5nbGVBc3NlcnRNZXNzYWdlPzogc3RyaW5nKTogVCB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlQXNzZXJ0TWVzc2FnZSA/PyBgU2VxdWVuY2UgbXVzdCBjb250YWluIGV4YWN0bHkgc2luZ2xlIGVsZW1lbnQsIGJ1dCBnb3QgJHtpdGVtcy5sZW5ndGh9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbXNbMF0gPz8gcmVqZWN0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgc2luZ2xlRWxlbWVudDogVCB8IHR5cGVvZiBFbXB0eVNpbmdsZUVsZW1lbnQgPSBFbXB0eVNpbmdsZUVsZW1lbnQ7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2luZ2xlRWxlbWVudCAhPT0gRW1wdHlTaW5nbGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZUFzc2VydE1lc3NhZ2UgPz8gYFNlcXVlbmNlIG11c3QgY29udGFpbiBleGFjdGx5IHNpbmdsZSBlbGVtZW50LCBidXQgZ290IGF0IGxlYXN0IDJgXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNpbmdsZUVsZW1lbnQgPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNpbmdsZUVsZW1lbnQgPT09IEVtcHR5U2luZ2xlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzaW5nbGVBc3NlcnRNZXNzYWdlID8/IFwiU2VxdWVuY2UgbXVzdCBjb250YWluIGV4YWN0bHkgc2luZ2xlIGVsZW1lbnQsIGJ1dCBnb3QgMFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzaW5nbGVFbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyAqaXRlcmF0ZUVudHJpZXM8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSB8IFRbXSB8IEl0ZXJhYmxlPFQ+KTogSXRlcmFibGU8W251bWJlciwgVF0+IHtcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICB5aWVsZCBbaW5kZXgsIGl0ZW1dO1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgKnNraXBMYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiwgc2tpcENvdW50OiBudW1iZXIpOiBJdGVyYWJsZTxUPiB7XG4gICAgICAgIGlmIChza2lwQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHlpZWxkKiBpdGVtcztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcmV2SXRlbXM6IEFycmF5PFQgfCB0eXBlb2YgRW1wdHlTaW5nbGVFbGVtZW50PiA9IG5ldyBBcnJheShza2lwQ291bnQpLmZpbGwoRW1wdHlTaW5nbGVFbGVtZW50KTtcbiAgICAgICAgbGV0IHJlc3VsdEl0ZW06IFQgfCB0eXBlb2YgRW1wdHlTaW5nbGVFbGVtZW50ID0gRW1wdHlTaW5nbGVFbGVtZW50O1xuICAgICAgICBsZXQgY3VycmVudEluZGV4ID0gMDtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yINCSINC+0LHRidC10LwsINGB0YLRgNC+0LrQsCDQstGL0YjQtSDQs9Cw0YDQsNC90YLQuNGA0YPQtdGCINC00LvQuNC90YMg0LzQsNGB0YHQuNCy0LBcbiAgICAgICAgICAgIHJlc3VsdEl0ZW0gPSBwcmV2SXRlbXNbY3VycmVudEluZGV4XTtcbiAgICAgICAgICAgIHByZXZJdGVtc1tjdXJyZW50SW5kZXhdID0gaXRlbTtcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIHNraXBDb3VudDtcbiAgICAgICAgICAgIGlmIChyZXN1bHRJdGVtICE9IEVtcHR5U2luZ2xlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdEl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1pbkJ5PFQ+KGl0ZW1zOiByZWFkb25seSBUW10gfCBUW10gfCBJdGVyYWJsZTxUPiwgY29tcGFyZUZ1bmM6IENvbXBhcmVGdW5jPFQ+KTogVCB7XG4gICAgICAgIGxldCBtaW5WYWx1ZTogdHlwZW9mIE5vVmFsdWVNYXJrZXIgfCBUID0gTm9WYWx1ZU1hcmtlcjtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAobWluVmFsdWUgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IGl0ZW07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbXBhcmVGdW5jKGl0ZW0sIG1pblZhbHVlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZSA9IGl0ZW07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pblZhbHVlID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJpdGVtc1wiLCBcIkl0ZW1zIHNob3VsZCBiZSBub3QgZW1wdHkgbGlzdFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBtaW5CeU9yVW5kZWZpbmVkPFQ+KFxuICAgICAgICBpdGVtczogcmVhZG9ubHkgVFtdIHwgVFtdIHwgSXRlcmFibGU8VD4sXG4gICAgICAgIGNvbXBhcmVGdW5jOiBDb21wYXJlRnVuYzxUPlxuICAgICk6IFQgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgbWluVmFsdWU6IHR5cGVvZiBOb1ZhbHVlTWFya2VyIHwgVCA9IE5vVmFsdWVNYXJrZXI7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgaWYgKG1pblZhbHVlID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlRnVuYyhpdGVtLCBtaW5WYWx1ZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyByYW5nZShpdGVtQ291bnQ6IG51bWJlcik6IEl0ZXJhYmxlPG51bWJlcj47XG4gICAgcHVibGljIHN0YXRpYyByYW5nZShzdGFydDogbnVtYmVyLCBpdGVtQ291bnQ6IG51bWJlcik6IEl0ZXJhYmxlPG51bWJlcj47XG4gICAgcHVibGljIHN0YXRpYyAqcmFuZ2UoaW5TdGFydE9yQ291bnQ6IG51bWJlciwgaW5JdGVtQ291bnQ/OiBudW1iZXIpOiBJdGVyYWJsZTxudW1iZXI+IHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpbkl0ZW1Db3VudCA9PT0gdW5kZWZpbmVkID8gMCA6IGluU3RhcnRPckNvdW50O1xuICAgICAgICBjb25zdCBpdGVtQ291bnQgPSBpbkl0ZW1Db3VudCA9PT0gdW5kZWZpbmVkID8gaW5TdGFydE9yQ291bnQgOiBpbkl0ZW1Db3VudDtcbiAgICAgICAgaWYgKGl0ZW1Db3VudCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcIml0ZW1Db3VudFwiLCBcIml0ZW1Db3VudCBtdXN0IGJlIGEgbm9uIG5lZ2F0aXZlIG51bWJlclwiKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFydCArIGl0ZW1Db3VudDsgaSsrKSB7XG4gICAgICAgICAgICB5aWVsZCBpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHN1bW1hcnkg0JLRgdGC0LDQstC70Y/QtdGCINC80LXQttC00YMg0Y3Qu9C10LzQtdC90YLQsNC80Lgg0LzQsNGB0YHQuNCy0LAg0LfQsNC00LDQvdC90YvQuSDRjdC70LXQvNC10L3RgiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDQvdC+0LLRi9C5INC80LDRgdGB0LjQslxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJzcGVyc2U8VEksIFRTPihpdGVtczogVElbXSwgaXRlbTogVFMpOiBBcnJheTxUSSB8IFRTPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmludGVyc3BlcnNlRm4oaXRlbXMsICgpID0+IGl0ZW0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCS0YHRgtCw0LLQu9GP0LXRgiDQvNC10LbQtNGDINGN0LvQtdC80LXQvdGC0LDQvNC4INC80LDRgdGB0LjQstCwINGN0LvQtdC80LXQvdGCLCDRgdC+0LfQtNCw0LLQsNC10LzRi9C5INGE0YPQvdC60YbQuNC10LksINC4INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINC90L7QstGL0Lkg0LzQsNGB0YHQuNCyXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBpbnRlcnNwZXJzZUZuPFRJLCBUUz4oaXRlbXM6IFRJW10sIGl0ZW06IChuZXh0SXRlbTogVEksIGluZGV4OiBudW1iZXIpID0+IFRTKTogQXJyYXk8VEkgfCBUUz4ge1xuICAgICAgICByZXR1cm4gaXRlbXMuZmxhdE1hcCgoeCwgaW5kZXgpID0+IChpbmRleCA9PT0gMCA/IFt4XSA6IFtpdGVtKHgsIGluZGV4KSwgeF0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHppcDxUMSwgVDI+KGl0ZW1zMTogSXRlcmFibGU8VDE+LCBpdGVtczI6IEl0ZXJhYmxlPFQyPik6IEl0ZXJhYmxlPFtUMSB8IHVuZGVmaW5lZCwgVDIgfCB1bmRlZmluZWRdPjtcbiAgICBwdWJsaWMgc3RhdGljICp6aXAoLi4uaXRlcmFibGVzOiBBcnJheTxJdGVyYWJsZTx1bmtub3duPj4pOiBJdGVyYWJsZTx1bmtub3duW10+IHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3JzOiBBcnJheTxJdGVyYXRvcjx1bmtub3duPiB8IHR5cGVvZiBOb1ZhbHVlTWFya2VyPiA9IGl0ZXJhYmxlcy5tYXAoaXQgPT4gSXRlcmF0b3IuZnJvbShpdCkpO1xuICAgICAgICBsZXQgaGFzVW5kb25lSXRlcmF0b3JzID0gdHJ1ZTtcbiAgICAgICAgd2hpbGUgKGhhc1VuZG9uZUl0ZXJhdG9ycykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0RW50cnkgPSBbXTtcbiAgICAgICAgICAgIGhhc1VuZG9uZUl0ZXJhdG9ycyA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaSwgaXRlcmF0b3JdIG9mIHRoaXMuaXRlcmF0ZUVudHJpZXMoaXRlcmF0b3JzKSkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVyYXRvciA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRFbnRyeS5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0VmFsdWUgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHRWYWx1ZS5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRFbnRyeS5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRvcnNbaV0gPSBOb1ZhbHVlTWFya2VyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0RW50cnkucHVzaChyZXN1bHRWYWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNVbmRvbmVJdGVyYXRvcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc1VuZG9uZUl0ZXJhdG9ycykge1xuICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdEVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyAqZGlzdGluY3RCeTxUPihpdGVtczogSXRlcmFibGU8VD4sIGlkU2VsZWN0b3I6IChpdGVtOiBUKSA9PiBzdHJpbmcpOiBJdGVyYWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaWRTZWxlY3RvcihpdGVtKTtcbiAgICAgICAgICAgIGlmICghc2V0LmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICBzZXQuYWRkKGlkKTtcbiAgICAgICAgICAgICAgICB5aWVsZCBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
336
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL0NvbW1vbi9JdGVyYWJsZVV0aWxzLnRzIl0sIm5hbWVzIjpbInJldmVyc2VBcnJheSIsImFycmF5IiwiaSIsImxlbmd0aCIsInRvQXN5bmNJdGVyYXRvciIsImdlbmVyYXRvciIsIkFzeW5jSXRlcmF0b3IiLCJmcm9tIiwiZmluZExhc3QiLCJpdGVtcyIsImNvbmRpdGlvbiIsInJlc3VsdCIsIml0ZW0iLCJjb25jYXQiLCJpdGVyYWJsZXMiLCJpdGVyYWJsZUl0ZW0iLCJpdGVyYXRlVmFsdWVzIiwib2JqIiwia2V5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaXRlcmF0ZUtleXMiLCJpdGVyYXRlRW50cmllcyIsImNvdW50IiwiX2l0ZW0iLCJFbXB0eVNpbmdsZUVsZW1lbnQiLCJTeW1ib2wiLCJmb3IiLCJOb1ZhbHVlTWFya2VyIiwiSXRlclV0aWxzIiwiaXNFbXB0eSIsIml0ZXJhYmxlIiwiZ3JvdXBCeSIsInNlbGVjdEtleSIsIk1hcCIsImtleUxpc3QiLCJnZXQiLCJ1bmRlZmluZWQiLCJzZXQiLCJwdXNoIiwic29ydEJ5Iiwic2VsZWN0b3IiLCJzb3J0IiwiYUl0ZW0iLCJiSXRlbSIsImxlZnRWYWx1ZSIsInJpZ2h0VmFsdWUiLCJsYXN0IiwiQXJyYXkiLCJpc0FycmF5IiwibGFzdEl0ZW0iLCJmaXJzdCIsImZpcnN0SXRlbSIsInNpbmdsZSIsInNpbmdsZUFzc2VydE1lc3NhZ2UiLCJFcnJvciIsInNpbmdsZUVsZW1lbnQiLCJpbmRleCIsInNraXBMYXN0Iiwic2tpcENvdW50IiwicHJldkl0ZW1zIiwiZmlsbCIsInJlc3VsdEl0ZW0iLCJjdXJyZW50SW5kZXgiLCJtaW5CeSIsImNvbXBhcmVGdW5jIiwibWluVmFsdWUiLCJJbnZhbGlkQXJndW1lbnRFcnJvciIsIm1pbkJ5T3JVbmRlZmluZWQiLCJyYW5nZSIsImluU3RhcnRPckNvdW50IiwiaW5JdGVtQ291bnQiLCJzdGFydCIsIml0ZW1Db3VudCIsImludGVyc3BlcnNlIiwiaW50ZXJzcGVyc2VGbiIsImZsYXRNYXAiLCJ4IiwiemlwIiwiaXRlcmF0b3JzIiwibWFwIiwiaXQiLCJJdGVyYXRvciIsImhhc1VuZG9uZUl0ZXJhdG9ycyIsInJlc3VsdEVudHJ5IiwiaXRlcmF0b3IiLCJyZXN1bHRWYWx1ZSIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJkaXN0aW5jdEJ5IiwiaWRTZWxlY3RvciIsIlNldCIsImlkIiwiaGFzIiwiYWRkIiwicmVkdWNlIiwicmVkdWNlciIsImluaXRpYWxWYWx1ZSIsImFjYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBRU8sVUFBVUEsWUFBVixDQUEwQkMsS0FBMUIsRUFBb0U7QUFDdkUsT0FBSyxJQUFJQyxDQUFDLEdBQUdELEtBQUssQ0FBQ0UsTUFBTixHQUFlLENBQTVCLEVBQStCRCxDQUFDLElBQUksQ0FBcEMsRUFBdUNBLENBQUMsRUFBeEMsRUFBNEM7QUFDeEM7QUFDQSxVQUFNRCxLQUFLLENBQUNDLENBQUQsQ0FBWDtBQUNIO0FBQ0o7O0FBRU0sU0FBU0UsZUFBVCxDQUE0QkMsU0FBNUIsRUFBMEY7QUFDN0YsU0FBT0MsYUFBYSxDQUFDQyxJQUFkLENBQW1CRixTQUFTLEVBQTVCLENBQVA7QUFDSDs7QUFFTSxTQUFTRyxRQUFULENBQXFCQyxLQUFyQixFQUF5Q0MsU0FBekMsRUFBeUY7QUFDNUYsTUFBSUMsTUFBSjs7QUFDQSxPQUFLLE1BQU1DLElBQVgsSUFBbUJILEtBQW5CLEVBQTBCO0FBQ3RCLFFBQUlDLFNBQVMsQ0FBQ0UsSUFBRCxDQUFiLEVBQXFCO0FBQ2pCRCxNQUFBQSxNQUFNLEdBQUdDLElBQVQ7QUFDSDtBQUNKOztBQUNELFNBQU9ELE1BQVA7QUFDSDs7QUFFTSxVQUFVRSxNQUFWLENBQW9CLEdBQUdDLFNBQXZCLEVBQTJFO0FBQzlFLE9BQUssTUFBTUMsWUFBWCxJQUEyQkQsU0FBM0IsRUFBc0M7QUFDbEMsV0FBT0MsWUFBUDtBQUNIO0FBQ0o7O0FBRU0s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RixJQUFYLElBQW1CSCxLQUFuQixFQUEwQjtBQUN0QixZQUFNc0YsRUFBRSxHQUFHRixVQUFVLENBQUNqRixJQUFELENBQXJCOztBQUNBLFVBQUksQ0FBQzRCLEdBQUcsQ0FBQ3dELEdBQUosQ0FBUUQsRUFBUixDQUFMLEVBQWtCO0FBQ2R2RCxRQUFBQSxHQUFHLENBQUN5RCxHQUFKLENBQVFGLEVBQVI7QUFDQSxjQUFNbkYsSUFBTjtBQUNIO0FBQ0o7QUFDSjs7QUFFbUIsU0FBTnNGLE1BQU0sQ0FDaEJ6RixLQURnQixFQUVoQjBGLE9BRmdCLEVBR2hCQyxZQUhnQixFQUlmO0FBQ0QsUUFBSXpDLEtBQUssR0FBRyxDQUFaO0FBQ0EsV0FBT3lCLFFBQVEsQ0FBQzdFLElBQVQsQ0FBY0UsS0FBZCxFQUFxQnlGLE1BQXJCLENBQTRCLENBQUNHLEdBQUQsRUFBTXpGLElBQU4sS0FBZXVGLE9BQU8sQ0FBQ0UsR0FBRCxFQUFNekYsSUFBTixFQUFZK0MsS0FBSyxFQUFqQixDQUFsRCxFQUF3RXlDLFlBQXhFLENBQVA7QUFDSDs7QUFsT2tCOzs7QUFBVnJFLFMsQ0FDS04sSyxHQUFRQSxLO0FBRGJNLFMsQ0FFS2xCLE0sR0FBU0EsTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1pbkxlbmd0aEFycmF5LCByZWplY3QgfSBmcm9tIFwiLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgQ29tcGFyZUZ1bmMgfSBmcm9tIFwiLi9Db21wYXJlcnNcIjtcbmltcG9ydCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gZnJvbSBcIi4vRXJyb3JzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiogcmV2ZXJzZUFycmF5PFQ+KGFycmF5OiByZWFkb25seSBUW10pOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICBmb3IgKGxldCBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgeWllbGQgYXJyYXlbaV0hO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQXN5bmNJdGVyYXRvcjxUPihnZW5lcmF0b3I6ICgpID0+IEFzeW5jR2VuZXJhdG9yPFQ+KTogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICByZXR1cm4gQXN5bmNJdGVyYXRvci5mcm9tKGdlbmVyYXRvcigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRMYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiwgY29uZGl0aW9uOiAoaXRlbTogVCkgPT4gYm9vbGVhbik6IFQgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXN1bHQ6IFQgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgIGlmIChjb25kaXRpb24oaXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGl0ZW07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBjb25jYXQ8VD4oLi4uaXRlcmFibGVzOiBBcnJheTxJdGVyYWJsZTxUPj4pOiBJdGVyYWJsZUl0ZXJhdG9yPFQ+IHtcbiAgICBmb3IgKGNvbnN0IGl0ZXJhYmxlSXRlbSBvZiBpdGVyYWJsZXMpIHtcbiAgICAgICAgeWllbGQqIGl0ZXJhYmxlSXRlbTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZVZhbHVlczxUSyBleHRlbmRzIHN0cmluZyB8IHN5bWJvbCB8IG51bWJlciwgVFY+KG9iajogeyBba2V5IGluIFRLXTogVFYgfSk6IEl0ZXJhYmxlPFRWPiB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICB5aWVsZCBvYmpba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzPFRPPihvYmo6IFJlYWRvbmx5PFRPPik6IEl0ZXJhYmxlPEV4dHJhY3Q8a2V5b2YgVE8sIHN0cmluZz4+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzPFRWPihvYmo6IFJlYWRvbmx5PHsgW2tleTogc3RyaW5nXTogVFYgfT4pOiBJdGVyYWJsZTxzdHJpbmc+O1xuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVLZXlzKG9iajogUmVhZG9ubHk8e30+KTogSXRlcmFibGU8c3RyaW5nPjtcbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZUtleXM8VEsgZXh0ZW5kcyBzdHJpbmcgfCBzeW1ib2wgfCBudW1iZXI+KG9iajogeyBba2V5IGluIFRLXTogdW5rbm93biB9KTogSXRlcmFibGU8VEs+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICAgIHlpZWxkIGtleTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGl0ZXJhdGVFbnRyaWVzPFRPPihvYmo6IFJlYWRvbmx5PFRPPik6IEl0ZXJhYmxlPFtFeHRyYWN0PGtleW9mIFRPLCBzdHJpbmc+LCBUT1trZXlvZiBUT11dPjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlRW50cmllczxUVj4ob2JqOiBSZWFkb25seTx7IFtrZXk6IHN0cmluZ106IFRWIH0+KTogSXRlcmFibGU8W3N0cmluZywgVFZdPjtcbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlRW50cmllcyhvYmo6IFJlYWRvbmx5PHt9Pik6IEl0ZXJhYmxlPFtzdHJpbmcsIHVua25vd25dPjtcbmV4cG9ydCBmdW5jdGlvbiogaXRlcmF0ZUVudHJpZXM8VFY+KG9iajogUmVhZG9ubHk8eyBba2V5OiBzdHJpbmddOiBUViB9Pik6IEl0ZXJhYmxlPFtzdHJpbmcsIFRWXT4ge1xuICAgIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgIHlpZWxkIFtrZXksIG9ialtrZXldIV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3VudDxUPihpdGVtczogSXRlcmFibGU8VD4pOiBudW1iZXIge1xuICAgIGxldCByZXN1bHQgPSAwO1xuICAgIGZvciAoY29uc3QgX2l0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgcmVzdWx0Kys7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5cbmNvbnN0IEVtcHR5U2luZ2xlRWxlbWVudCA9IFN5bWJvbC5mb3IoXCJFbXB0eVNpbmdsZUVsZW1lbnRcIik7XG5jb25zdCBOb1ZhbHVlTWFya2VyID0gU3ltYm9sLmZvcihcIk5vVmFsdWVNYXJrZXJcIik7XG5cbmV4cG9ydCBjbGFzcyBJdGVyVXRpbHMge1xuICAgIHB1YmxpYyBzdGF0aWMgY291bnQgPSBjb3VudDtcbiAgICBwdWJsaWMgc3RhdGljIGNvbmNhdCA9IGNvbmNhdDtcblxuICAgIHB1YmxpYyBzdGF0aWMgaXNFbXB0eTxUPihpdGVyYWJsZTogSXRlcmFibGU8VD4pOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChjb25zdCBfaXRlbSBvZiBpdGVyYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ3JvdXBCeTxULCBUS2V5PihpdGVyYWJsZTogSXRlcmFibGU8VD4sIHNlbGVjdEtleTogKGl0ZW06IFQpID0+IFRLZXkpOiBNYXA8VEtleSwgVFtdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8VEtleSwgVFtdPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlcmFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlbGVjdEtleShpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGtleUxpc3QgPSByZXN1bHQuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoa2V5TGlzdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc2V0KGtleSwgW2l0ZW1dKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAga2V5TGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBzb3J0Qnk8VD4oaXRlbXM6IHJlYWRvbmx5IFRbXSwgc2VsZWN0b3I6IChpdGVtOiBUKSA9PiBzdHJpbmcpOiBUW10ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uaXRlbXNdO1xuICAgICAgICByZXN1bHQuc29ydCgoYUl0ZW0sIGJJdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0VmFsdWUgPSBzZWxlY3RvcihhSXRlbSk7XG4gICAgICAgICAgICBjb25zdCByaWdodFZhbHVlID0gc2VsZWN0b3IoYkl0ZW0pO1xuICAgICAgICAgICAgaWYgKGxlZnRWYWx1ZSA9PT0gcmlnaHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChsZWZ0VmFsdWUgPCByaWdodFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBsYXN0PFQ+KGl0ZW1zOiBNaW5MZW5ndGhBcnJheTxULCAxPik6IFQ7XG4gICAgcHVibGljIHN0YXRpYyBsYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiB8IHJlYWRvbmx5IFRbXSk6IHVuZGVmaW5lZCB8IFQ7XG4gICAgcHVibGljIHN0YXRpYyBsYXN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiB8IHJlYWRvbmx5IFRbXSk6IHVuZGVmaW5lZCB8IFQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGFzdEl0ZW06IFQgfCB1bmRlZmluZWQ7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgbGFzdEl0ZW0gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYXN0SXRlbTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZpcnN0PFQ+KGl0ZW1zOiBbVCwgLi4udW5rbm93bltdXSk6IFQ7XG4gICAgcHVibGljIHN0YXRpYyBmaXJzdDxUPihpdGVtczogTWluTGVuZ3RoQXJyYXk8VCwgMT4pOiBUO1xuICAgIHB1YmxpYyBzdGF0aWMgZmlyc3Q8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+IHwgcmVhZG9ubHkgVFtdKTogdW5kZWZpbmVkIHwgVDtcbiAgICBwdWJsaWMgc3RhdGljIGZpcnN0PFQ+KGl0ZW1zOiBJdGVyYWJsZTxUPiB8IHJlYWRvbmx5IFRbXSk6IHVuZGVmaW5lZCB8IFQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtc1swXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlyc3RJdGVtOiBUIHwgdW5kZWZpbmVkO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGZpcnN0SXRlbSA9IGl0ZW07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RJdGVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgc2luZ2xlPFQ+KGl0ZW1zOiByZWFkb25seSBUW10gfCBJdGVyYWJsZTxUPiwgc2luZ2xlQXNzZXJ0TWVzc2FnZT86IHN0cmluZyk6IFQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIHNpbmdsZUFzc2VydE1lc3NhZ2UgPz8gYFNlcXVlbmNlIG11c3QgY29udGFpbiBleGFjdGx5IHNpbmdsZSBlbGVtZW50LCBidXQgZ290ICR7aXRlbXMubGVuZ3RofWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zWzBdID8/IHJlamVjdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHNpbmdsZUVsZW1lbnQ6IFQgfCB0eXBlb2YgRW1wdHlTaW5nbGVFbGVtZW50ID0gRW1wdHlTaW5nbGVFbGVtZW50O1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNpbmdsZUVsZW1lbnQgIT09IEVtcHR5U2luZ2xlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGVBc3NlcnRNZXNzYWdlID8/IGBTZXF1ZW5jZSBtdXN0IGNvbnRhaW4gZXhhY3RseSBzaW5nbGUgZWxlbWVudCwgYnV0IGdvdCBhdCBsZWFzdCAyYFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzaW5nbGVFbGVtZW50ID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaW5nbGVFbGVtZW50ID09PSBFbXB0eVNpbmdsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc2luZ2xlQXNzZXJ0TWVzc2FnZSA/PyBcIlNlcXVlbmNlIG11c3QgY29udGFpbiBleGFjdGx5IHNpbmdsZSBlbGVtZW50LCBidXQgZ290IDBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2luZ2xlRWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgKml0ZXJhdGVFbnRyaWVzPFQ+KGl0ZW1zOiByZWFkb25seSBUW10gfCBUW10gfCBJdGVyYWJsZTxUPik6IEl0ZXJhYmxlPFtudW1iZXIsIFRdPiB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgeWllbGQgW2luZGV4LCBpdGVtXTtcbiAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljICpza2lwTGFzdDxUPihpdGVtczogSXRlcmFibGU8VD4sIHNraXBDb3VudDogbnVtYmVyKTogSXRlcmFibGU8VD4ge1xuICAgICAgICBpZiAoc2tpcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB5aWVsZCogaXRlbXM7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldkl0ZW1zOiBBcnJheTxUIHwgdHlwZW9mIEVtcHR5U2luZ2xlRWxlbWVudD4gPSBuZXcgQXJyYXkoc2tpcENvdW50KS5maWxsKEVtcHR5U2luZ2xlRWxlbWVudCk7XG4gICAgICAgIGxldCByZXN1bHRJdGVtOiBUIHwgdHlwZW9mIEVtcHR5U2luZ2xlRWxlbWVudCA9IEVtcHR5U2luZ2xlRWxlbWVudDtcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IDA7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciDQkiDQvtCx0YnQtdC8LCDRgdGC0YDQvtC60LAg0LLRi9GI0LUg0LPQsNGA0LDQvdGC0LjRgNGD0LXRgiDQtNC70LjQvdGDINC80LDRgdGB0LjQstCwXG4gICAgICAgICAgICByZXN1bHRJdGVtID0gcHJldkl0ZW1zW2N1cnJlbnRJbmRleF07XG4gICAgICAgICAgICBwcmV2SXRlbXNbY3VycmVudEluZGV4XSA9IGl0ZW07XG4gICAgICAgICAgICBjdXJyZW50SW5kZXggPSAoY3VycmVudEluZGV4ICsgMSkgJSBza2lwQ291bnQ7XG4gICAgICAgICAgICBpZiAocmVzdWx0SXRlbSAhPSBFbXB0eVNpbmdsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHRJdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBtaW5CeTxUPihpdGVtczogcmVhZG9ubHkgVFtdIHwgVFtdIHwgSXRlcmFibGU8VD4sIGNvbXBhcmVGdW5jOiBDb21wYXJlRnVuYzxUPik6IFQge1xuICAgICAgICBsZXQgbWluVmFsdWU6IHR5cGVvZiBOb1ZhbHVlTWFya2VyIHwgVCA9IE5vVmFsdWVNYXJrZXI7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgICAgICAgaWYgKG1pblZhbHVlID09PSBOb1ZhbHVlTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb21wYXJlRnVuYyhpdGVtLCBtaW5WYWx1ZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbWluVmFsdWUgPSBpdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwiaXRlbXNcIiwgXCJJdGVtcyBzaG91bGQgYmUgbm90IGVtcHR5IGxpc3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pblZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgbWluQnlPclVuZGVmaW5lZDxUPihcbiAgICAgICAgaXRlbXM6IHJlYWRvbmx5IFRbXSB8IFRbXSB8IEl0ZXJhYmxlPFQ+LFxuICAgICAgICBjb21wYXJlRnVuYzogQ29tcGFyZUZ1bmM8VD5cbiAgICApOiBUIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgbGV0IG1pblZhbHVlOiB0eXBlb2YgTm9WYWx1ZU1hcmtlciB8IFQgPSBOb1ZhbHVlTWFya2VyO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChtaW5WYWx1ZSA9PT0gTm9WYWx1ZU1hcmtlcikge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlID0gaXRlbTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZUZ1bmMoaXRlbSwgbWluVmFsdWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG1pblZhbHVlID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWluVmFsdWUgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pblZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZ2UoaXRlbUNvdW50OiBudW1iZXIpOiBJdGVyYWJsZTxudW1iZXI+O1xuICAgIHB1YmxpYyBzdGF0aWMgcmFuZ2Uoc3RhcnQ6IG51bWJlciwgaXRlbUNvdW50OiBudW1iZXIpOiBJdGVyYWJsZTxudW1iZXI+O1xuICAgIHB1YmxpYyBzdGF0aWMgKnJhbmdlKGluU3RhcnRPckNvdW50OiBudW1iZXIsIGluSXRlbUNvdW50PzogbnVtYmVyKTogSXRlcmFibGU8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5JdGVtQ291bnQgPT09IHVuZGVmaW5lZCA/IDAgOiBpblN0YXJ0T3JDb3VudDtcbiAgICAgICAgY29uc3QgaXRlbUNvdW50ID0gaW5JdGVtQ291bnQgPT09IHVuZGVmaW5lZCA/IGluU3RhcnRPckNvdW50IDogaW5JdGVtQ291bnQ7XG4gICAgICAgIGlmIChpdGVtQ291bnQgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJpdGVtQ291bnRcIiwgXCJpdGVtQ291bnQgbXVzdCBiZSBhIG5vbiBuZWdhdGl2ZSBudW1iZXJcIik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgc3RhcnQgKyBpdGVtQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgeWllbGQgaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCS0YHRgtCw0LLQu9GP0LXRgiDQvNC10LbQtNGDINGN0LvQtdC80LXQvdGC0LDQvNC4INC80LDRgdGB0LjQstCwINC30LDQtNCw0L3QvdGL0Lkg0Y3Qu9C10LzQtdC90YIg0Lgg0LLQvtC30LLRgNCw0YnQsNC10YIg0L3QvtCy0YvQuSDQvNCw0YHRgdC40LJcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGludGVyc3BlcnNlPFRJLCBUUz4oaXRlbXM6IFRJW10sIGl0ZW06IFRTKTogQXJyYXk8VEkgfCBUUz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcnNwZXJzZUZuKGl0ZW1zLCAoKSA9PiBpdGVtKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAc3VtbWFyeSDQktGB0YLQsNCy0LvRj9C10YIg0LzQtdC20LTRgyDRjdC70LXQvNC10L3RgtCw0LzQuCDQvNCw0YHRgdC40LLQsCDRjdC70LXQvNC10L3Rgiwg0YHQvtC30LTQsNCy0LDQtdC80YvQuSDRhNGD0L3QutGG0LjQtdC5LCDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDQvdC+0LLRi9C5INC80LDRgdGB0LjQslxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgaW50ZXJzcGVyc2VGbjxUSSwgVFM+KGl0ZW1zOiBUSVtdLCBpdGVtOiAobmV4dEl0ZW06IFRJLCBpbmRleDogbnVtYmVyKSA9PiBUUyk6IEFycmF5PFRJIHwgVFM+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZsYXRNYXAoKHgsIGluZGV4KSA9PiAoaW5kZXggPT09IDAgPyBbeF0gOiBbaXRlbSh4LCBpbmRleCksIHhdKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyB6aXA8VDEsIFQyPihpdGVtczE6IEl0ZXJhYmxlPFQxPiwgaXRlbXMyOiBJdGVyYWJsZTxUMj4pOiBJdGVyYWJsZTxbVDEgfCB1bmRlZmluZWQsIFQyIHwgdW5kZWZpbmVkXT47XG4gICAgcHVibGljIHN0YXRpYyAqemlwKC4uLml0ZXJhYmxlczogQXJyYXk8SXRlcmFibGU8dW5rbm93bj4+KTogSXRlcmFibGU8dW5rbm93bltdPiB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yczogQXJyYXk8SXRlcmF0b3I8dW5rbm93bj4gfCB0eXBlb2YgTm9WYWx1ZU1hcmtlcj4gPSBpdGVyYWJsZXMubWFwKGl0ID0+IEl0ZXJhdG9yLmZyb20oaXQpKTtcbiAgICAgICAgbGV0IGhhc1VuZG9uZUl0ZXJhdG9ycyA9IHRydWU7XG4gICAgICAgIHdoaWxlIChoYXNVbmRvbmVJdGVyYXRvcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdEVudHJ5ID0gW107XG4gICAgICAgICAgICBoYXNVbmRvbmVJdGVyYXRvcnMgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ksIGl0ZXJhdG9yXSBvZiB0aGlzLml0ZXJhdGVFbnRyaWVzKGl0ZXJhdG9ycykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmF0b3IgPT09IE5vVmFsdWVNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RW50cnkucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdFZhbHVlID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0VmFsdWUuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0RW50cnkucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JzW2ldID0gTm9WYWx1ZU1hcmtlcjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdEVudHJ5LnB1c2gocmVzdWx0VmFsdWUudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzVW5kb25lSXRlcmF0b3JzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNVbmRvbmVJdGVyYXRvcnMpIHtcbiAgICAgICAgICAgICAgICB5aWVsZCByZXN1bHRFbnRyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgKmRpc3RpbmN0Qnk8VD4oaXRlbXM6IEl0ZXJhYmxlPFQ+LCBpZFNlbGVjdG9yOiAoaXRlbTogVCkgPT4gc3RyaW5nKTogSXRlcmFibGU8VD4ge1xuICAgICAgICBjb25zdCBzZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGlkU2VsZWN0b3IoaXRlbSk7XG4gICAgICAgICAgICBpZiAoIXNldC5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgICAgc2V0LmFkZChpZCk7XG4gICAgICAgICAgICAgICAgeWllbGQgaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgcmVkdWNlPFQsIFU+KFxuICAgICAgICBpdGVtczogSXRlcmFibGU8VD4sXG4gICAgICAgIHJlZHVjZXI6IChhY2N1bXVsYXRvcjogVSwgaXRlbTogVCwgaW5kZXg6IG51bWJlcikgPT4gVSxcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBVXG4gICAgKTogVSB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIHJldHVybiBJdGVyYXRvci5mcm9tKGl0ZW1zKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gcmVkdWNlcihhY2MsIGl0ZW0sIGluZGV4KyspLCBpbml0aWFsVmFsdWUpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -3,12 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.
|
|
6
|
+
exports.Map2 = void 0;
|
|
7
7
|
|
|
8
8
|
var _TypingUtils = require("../../TypingUtils");
|
|
9
9
|
|
|
10
|
-
var _EachCurrentCollision = require("../EachCurrentCollision");
|
|
11
|
-
|
|
12
10
|
class Map2 {
|
|
13
11
|
constructor() {
|
|
14
12
|
this.hashMap = new Map();
|
|
@@ -18,8 +16,8 @@ class Map2 {
|
|
|
18
16
|
this.setOrUpdate(key, () => value, () => value);
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
getOrSet(key,
|
|
22
|
-
return this.setOrUpdate(key,
|
|
19
|
+
getOrSet(key, defaultValueFactory) {
|
|
20
|
+
return this.setOrUpdate(key, defaultValueFactory, (k, v) => v);
|
|
23
21
|
}
|
|
24
22
|
|
|
25
23
|
get(key) {
|
|
@@ -49,7 +47,7 @@ class Map2 {
|
|
|
49
47
|
|
|
50
48
|
if (list == undefined) {
|
|
51
49
|
const result = newValueFactory(key);
|
|
52
|
-
this.hashMap.set(hash, [[key,
|
|
50
|
+
this.hashMap.set(hash, [[key, result]]);
|
|
53
51
|
return result;
|
|
54
52
|
} else {
|
|
55
53
|
const itemIndex = list.findIndex(x => this.areKeyEqual(x[0], key));
|
|
@@ -102,42 +100,4 @@ class Map2 {
|
|
|
102
100
|
}
|
|
103
101
|
|
|
104
102
|
exports.Map2 = Map2;
|
|
105
|
-
|
|
106
|
-
class ModelPathMap extends Map2 {
|
|
107
|
-
constructor(eachCurrentCollision = _EachCurrentCollision.EachCurrentCollision.AreSame) {
|
|
108
|
-
super();
|
|
109
|
-
this.eachCurrentCollision = void 0;
|
|
110
|
-
this.eachCurrentCollision = eachCurrentCollision;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
areKeyEqual(left, right) {
|
|
114
|
-
return left.isEquals(right, this.eachCurrentCollision);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
getKeyHash(key) {
|
|
118
|
-
return key.getHash(this.eachCurrentCollision);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
exports.ModelPathMap = ModelPathMap;
|
|
124
|
-
|
|
125
|
-
class AbsoluteModelPathMap extends Map2 {
|
|
126
|
-
constructor(eachCurrentCollision = _EachCurrentCollision.EachCurrentCollision.AreSame) {
|
|
127
|
-
super();
|
|
128
|
-
this.eachCurrentCollision = void 0;
|
|
129
|
-
this.eachCurrentCollision = eachCurrentCollision;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
areKeyEqual(left, right) {
|
|
133
|
-
return left.isEquals(right, this.eachCurrentCollision);
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
getKeyHash(key) {
|
|
137
|
-
return key.getHash(this.eachCurrentCollision);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
exports.AbsoluteModelPathMap = AbsoluteModelPathMap;
|
|
143
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTWFwL01hcDIudHMiXSwibmFtZXMiOlsiTWFwMiIsImhhc2hNYXAiLCJNYXAiLCJzZXQiLCJrZXkiLCJ2YWx1ZSIsInNldE9yVXBkYXRlIiwiZ2V0T3JTZXQiLCJkZWZhdWx0VmFsdWUiLCJrIiwidiIsImdldCIsImdldEVudHJ5T3JVbmRlZmluZWQiLCJoYXMiLCJ1bmRlZmluZWQiLCJpc0VtcHR5Iiwic2l6ZSIsIm5ld1ZhbHVlRmFjdG9yeSIsInVwZGF0ZVZhbHVlRmFjdG9yeSIsImhhc2giLCJnZXRLZXlIYXNoIiwibGlzdCIsInJlc3VsdCIsIml0ZW1JbmRleCIsImZpbmRJbmRleCIsIngiLCJhcmVLZXlFcXVhbCIsInB1c2giLCJlbnRyeSIsImtleXMiLCJJdGVyYXRvciIsImZyb20iLCJlbnRyaWVzIiwibWFwIiwiZSIsInZhbHVlcyIsImZsYXRNYXAiLCJjbGVhciIsImdldEhhc2giLCJsZWZ0IiwicmlnaHQiLCJpc0VxdWFscyIsImZpbmQiLCJNb2RlbFBhdGhNYXAiLCJjb25zdHJ1Y3RvciIsImVhY2hDdXJyZW50Q29sbGlzaW9uIiwiRWFjaEN1cnJlbnRDb2xsaXNpb24iLCJBcmVTYW1lIiwiQWJzb2x1dGVNb2RlbFBhdGhNYXAiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFJTyxNQUFNQSxJQUFOLENBQXVDO0FBQUE7QUFBQSxTQUN6QkMsT0FEeUIsR0FDZixJQUFJQyxHQUFKLEVBRGU7QUFBQTs7QUFHbkNDLEVBQUFBLEdBQUcsQ0FBQ0MsR0FBRCxFQUFTQyxLQUFULEVBQXlCO0FBQy9CLFNBQUtDLFdBQUwsQ0FDSUYsR0FESixFQUVJLE1BQU1DLEtBRlYsRUFHSSxNQUFNQSxLQUhWO0FBS0g7O0FBRU1FLEVBQUFBLFFBQVEsQ0FBQ0gsR0FBRCxFQUFTSSxZQUFULEVBQTZCO0FBQ3hDLFdBQU8sS0FBS0YsV0FBTCxDQUNIRixHQURHLEVBRUgsTUFBTUksWUFGSCxF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LElBQUQsRUFBMEJDLEtBQTFCLEVBQTZEO0FBQzlFLFdBQU9ELElBQUksQ0FBQ0UsUUFBTCxDQUFjRCxLQUFkLEVBQXFCLEtBQUtLLG9CQUExQixDQUFQO0FBQ0g7O0FBRVN6QixFQUFBQSxVQUFVLENBQUNoQixHQUFELEVBQWlDO0FBQ2pELFdBQU9BLEdBQUcsQ0FBQ2tDLE9BQUosQ0FBWSxLQUFLTyxvQkFBakIsQ0FBUDtBQUNIOztBQWRtRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgRWFjaEN1cnJlbnRDb2xsaXNpb24gfSBmcm9tIFwiLi4vRWFjaEN1cnJlbnRDb2xsaXNpb25cIjtcbmltcG9ydCB7IElFcXVhdGFibGUgfSBmcm9tIFwiLi4vSUVxdWF0YWJsZVwiO1xuaW1wb3J0IHsgQWJzb2x1dGVNb2RlbFBhdGgsIE1vZGVsUGF0aCB9IGZyb20gXCIuLi9Nb2RlbFBhdGhcIjtcblxuZXhwb3J0IGNsYXNzIE1hcDI8SyBleHRlbmRzIElFcXVhdGFibGU8Sz4sIFY+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhc2hNYXAgPSBuZXcgTWFwPG51bWJlciwgQXJyYXk8W0ssIFZdPj4oKTtcblxuICAgIHB1YmxpYyBzZXQoa2V5OiBLLCB2YWx1ZTogVik6IHZvaWQge1xuICAgICAgICB0aGlzLnNldE9yVXBkYXRlKFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgKCkgPT4gdmFsdWUsXG4gICAgICAgICAgICAoKSA9PiB2YWx1ZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRPclNldChrZXk6IEssIGRlZmF1bHRWYWx1ZTogVik6IFYge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRPclVwZGF0ZShcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICgpID0+IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgIChrLCB2KSA9PiB2XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChrZXk6IEspOiBWIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW50cnlPclVuZGVmaW5lZChrZXkpPy5bMV07XG4gICAgfVxuXG4gICAgcHVibGljIGhhcyhrZXk6IEspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW50cnlPclVuZGVmaW5lZChrZXkpICE9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc2hNYXAuc2l6ZSA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0LfQvdCw0YfQtdC90LjQtSDQsiDRgdC70L7QstCw0YDQtSDQv9C+INC60LvRjtGH0Y4sINC10YHQu9C4INC30L3QsNGH0LXQvdC40Y8g0L3QtdGCIC0tINGD0YHRgtC90LDQstC40YIg0L3QvtCy0L7QtVxuICAgICAqIEBwYXJhbSBrZXkg0LrQu9GO0Ycg0YHQu9C+0LLQsNGA0Y8g0LTQu9GPINGA0L7QsdC90L7QstC70LXQvdC40Y9cbiAgICAgKiBAcGFyYW0gbmV3VmFsdWVGYWN0b3J5INCV0YHQu9C4INC30L3QsNGH0LXQvdC40Y8g0L3QtdGCIC0tINCx0YPQtNC10YIg0YPRgdGC0LDQvdC+0LLQu9C10L0g0YDQtdC30YPQu9GM0YLQsNGCINGN0YLQvtC5INGE0YPQvdC60YbQuNC4XG4gICAgICogQHBhcmFtIHVwZGF0ZVZhbHVlRmFjdG9yeSDQldGB0LvQuCDQt9C90LDRh9C10L3QuNC1INC10YHRgtGMIC0tINCx0YPQtNC10YIg0YPRgdGC0LDQvdC+0LLQu9C10L0g0YDQtdC30YPQu9GM0YLQsNGCINGN0YLQvtC5INGE0YPQvdC60YbQuNC4XG4gICAgICovXG4gICAgcHVibGljIHNldE9yVXBkYXRlKGtleTogSywgbmV3VmFsdWVGYWN0b3J5OiAoa2V5OiBLKSA9PiBWLCB1cGRhdGVWYWx1ZUZhY3Rvcnk6IChrZXk6IEssIHVwZGF0ZTogVikgPT4gVik6IFYge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRLZXlIYXNoKGtleSk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmhhc2hNYXAuZ2V0KGhhc2gpO1xuICAgICAgICBpZiAobGlzdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ld1ZhbHVlRmFjdG9yeShrZXkpO1xuICAgICAgICAgICAgdGhpcy5oYXNoTWFwLnNldChoYXNoLCBbW2tleSwgbmV3VmFsdWVGYWN0b3J5KGtleSldXSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gbGlzdC5maW5kSW5kZXgoeCA9PiB0aGlzLmFyZUtleUVxdWFsKHhbMF0sIGtleSkpO1xuICAgICAgICAgICAgaWYgKGl0ZW1JbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ld1ZhbHVlRmFjdG9yeShrZXkpO1xuICAgICAgICAgICAgICAgIGxpc3QucHVzaChba2V5LCByZXN1bHRdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IGxpc3RbaXRlbUluZGV4XSA/PyByZWplY3QoKTtcbiAgICAgICAgICAgICAgICBlbnRyeVsxXSA9IHVwZGF0ZVZhbHVlRmFjdG9yeShrZXksIGVudHJ5WzFdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW50cnlbMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMga2V5cygpOiBJdGVyYWJsZTxLPiB7XG4gICAgICAgIHJldHVybiBJdGVyYXRvci5mcm9tKHRoaXMuZW50cmllcygpKS5tYXAoZSA9PiBlWzBdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsdWVzKCk6IEl0ZXJhYmxlPFY+IHtcbiAgICAgICAgcmV0dXJuIEl0ZXJhdG9yLmZyb20odGhpcy5lbnRyaWVzKCkpLm1hcChlID0+IGVbMV0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbnRyaWVzKCk6IEl0ZXJhYmxlPFtrZXk6IEssIHZhbHVlOiBWXT4ge1xuICAgICAgICByZXR1cm4gSXRlcmF0b3IuZnJvbSh0aGlzLmhhc2hNYXAudmFsdWVzKCkpLmZsYXRNYXAoeCA9PiB4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFzaE1hcC5jbGVhcigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRLZXlIYXNoKGtleTogSyk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBrZXkuZ2V0SGFzaCgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhcmVLZXlFcXVhbChsZWZ0OiBLLCByaWdodDogSyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gbGVmdC5pc0VxdWFscyhyaWdodCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbnRyeU9yVW5kZWZpbmVkKGtleTogSyk6IFtLLCBWXSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IGhhc2ggPSB0aGlzLmdldEtleUhhc2goa2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzaE1hcC5nZXQoaGFzaCk/LmZpbmQoeCA9PiB0aGlzLmFyZUtleUVxdWFsKHhbMF0sIGtleSkpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1vZGVsUGF0aE1hcDxWPiBleHRlbmRzIE1hcDI8TW9kZWxQYXRoLCBWPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlYWNoQ3VycmVudENvbGxpc2lvbjogRWFjaEN1cnJlbnRDb2xsaXNpb247XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZWFjaEN1cnJlbnRDb2xsaXNpb246IEVhY2hDdXJyZW50Q29sbGlzaW9uID0gRWFjaEN1cnJlbnRDb2xsaXNpb24uQXJlU2FtZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVhY2hDdXJyZW50Q29sbGlzaW9uID0gZWFjaEN1cnJlbnRDb2xsaXNpb247XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFyZUtleUVxdWFsKGxlZnQ6IE1vZGVsUGF0aCwgcmlnaHQ6IE1vZGVsUGF0aCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gbGVmdC5pc0VxdWFscyhyaWdodCwgdGhpcy5lYWNoQ3VycmVudENvbGxpc2lvbik7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldEtleUhhc2goa2V5OiBNb2RlbFBhdGgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4ga2V5LmdldEhhc2godGhpcy5lYWNoQ3VycmVudENvbGxpc2lvbik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWJzb2x1dGVNb2RlbFBhdGhNYXA8Vj4gZXh0ZW5kcyBNYXAyPEFic29sdXRlTW9kZWxQYXRoLCBWPiB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlYWNoQ3VycmVudENvbGxpc2lvbjogRWFjaEN1cnJlbnRDb2xsaXNpb247XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoZWFjaEN1cnJlbnRDb2xsaXNpb246IEVhY2hDdXJyZW50Q29sbGlzaW9uID0gRWFjaEN1cnJlbnRDb2xsaXNpb24uQXJlU2FtZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmVhY2hDdXJyZW50Q29sbGlzaW9uID0gZWFjaEN1cnJlbnRDb2xsaXNpb247XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFyZUtleUVxdWFsKGxlZnQ6IEFic29sdXRlTW9kZWxQYXRoLCByaWdodDogQWJzb2x1dGVNb2RlbFBhdGgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGxlZnQuaXNFcXVhbHMocmlnaHQsIHRoaXMuZWFjaEN1cnJlbnRDb2xsaXNpb24pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRLZXlIYXNoKGtleTogQWJzb2x1dGVNb2RlbFBhdGgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4ga2V5LmdldEhhc2godGhpcy5lYWNoQ3VycmVudENvbGxpc2lvbik7XG4gICAgfVxufVxuIl19
|
|
103
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTWFwL01hcDIudHMiXSwibmFtZXMiOlsiTWFwMiIsImhhc2hNYXAiLCJNYXAiLCJzZXQiLCJrZXkiLCJ2YWx1ZSIsInNldE9yVXBkYXRlIiwiZ2V0T3JTZXQiLCJkZWZhdWx0VmFsdWVGYWN0b3J5IiwiayIsInYiLCJnZXQiLCJnZXRFbnRyeU9yVW5kZWZpbmVkIiwiaGFzIiwidW5kZWZpbmVkIiwiaXNFbXB0eSIsInNpemUiLCJuZXdWYWx1ZUZhY3RvcnkiLCJ1cGRhdGVWYWx1ZUZhY3RvcnkiLCJoYXNoIiwiZ2V0S2V5SGFzaCIsImxpc3QiLCJyZXN1bHQiLCJpdGVtSW5kZXgiLCJmaW5kSW5kZXgiLCJ4IiwiYXJlS2V5RXF1YWwiLCJwdXNoIiwiZW50cnkiLCJrZXlzIiwiSXRlcmF0b3IiLCJmcm9tIiwiZW50cmllcyIsIm1hcCIsImUiLCJ2YWx1ZXMiLCJmbGF0TWFwIiwiY2xlYXIiLCJnZXRIYXNoIiwibGVmdCIsInJpZ2h0IiwiaXNFcXVhbHMiLCJmaW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBR08sTUFBTUEsSUFBTixDQUF1QztBQUFBO0FBQUEsU0FDekJDLE9BRHlCLEdBQ2YsSUFBSUMsR0FBSixFQURlO0FBQUE7O0FBR25DQyxFQUFBQSxHQUFHLENBQUNDLEdBQUQsRUFBU0MsS0FBVCxFQUF5QjtBQUMvQixTQUFLQyxXQUFMLENBQ0lGLEdBREosRUFFSSxNQUFNQyxLQUZWLEVBR0ksTUFBTUEsS0FIVjtBQUtIOztBQUVNRSxFQUFBQSxRQUFRLENBQUNILEdBQUQsRUFBU0ksbUJBQVQsRUFBMEM7QUFDckQsV0FBTyxLQUFLRixXQUFMLENBQWlCRixHQUFqQixFQUFzQkksbUJBQXRCLEVBQTJDLENBQUNDLENBQUQsRUFBSUMsQ0FBSixLQUFVQSxDQUFyRCxDQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLEdBQUcsQ0FBQ1AsR0FBRCxFQUF3QjtBQUFBOztBQUM5QixvQ0FBTyxLQUFLUSxtQkFBTCxDQUF5QlIsR0FBekIsQ0FBUCwwREFBTyxzQkFBZ0MsQ0FBaEMsQ0FBUDtBQUNIOztBQUVNUyxFQUFBQSxHQUFHLENBQUNULEdBQUQsRUFBa0I7QUFDeEIsV0FBTyxLQUFLUSxtQkFBTCxDQUF5QlIsR0FBekIsS0FBaUNVLFNBQXhDO0FBQ0g7O0FBRWlCLE1BQVBDLE9BQU8sR0FBWTtBQUMxQixXQUFPLEtBQUtkLE9BQUwsQ0FBYWUsSUFBYixLQUFzQixDQUE3QjtBQUNIO0FBRUQ7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDV1YsRUFBQUEsV0FBVyxDQUFDRixHQUFELEVBQVNhLGVBQVQsRUFBeUNDLGtCQUF6QyxFQUEwRjtBQUN4RyxVQUFNQyxJQUFJLEdBQUcsS0FBS0MsVUFBTCxDQUFnQmhCLEdBQWhCLENBQWI7QUFDQSxVQUFNaUIsSUFBSSxHQUFHLEtBQUtwQixPQUFMLENBQWFVLEdBQWIsQ0FBaUJRLElBQWpCLENBQWI7O0FBQ0EsUUFBSUUsSUFBSSxJQUFJUCxTQUFaLEVBQXVCO0FBQ25CLFlBQU1RLE1BQU0sR0FBR0wsZUFBZSxDQUFDYixHQUFELENBQTlCO0FBQ0EsV0FBS0gsT0FBTCxDQUFhRSxHQUFiLENBQWlCZ0IsSUFBakIsRUFBdUIsQ0FBQyxDQUFDZixHQUFELEVBQU1rQixNQUFOLENBQUQsQ0FBdkI7QUFDQSxhQUFPQSxNQUFQO0FBQ0gsS0FKRCxNQUlPO0FBQ0gsWUFBTUMsU0FBUyxHQUFHRixJQUFJLENBQUNHLFNBQUwsQ0FBZUMsQ0FBQyxJQUFJLEtBQUtDLFdBQUwsQ0FBaUJELENBQUMsQ0FBQyxDQUFELENBQWxCLEVBQXVCckIsR0FBdkIsQ0FBcEIsQ0FBbEI7O0FBQ0EsVUFBSW1CLFNBQVMsSUFBSSxDQUFDLENBQWxCLEVBQXFCO0FBQ2pCLGNBQU1ELE1BQU0sR0FBR0wsZUFBZSxDQUFDYixHQUFELENBQTlCO0FBQ0FpQixRQUFBQSxJQUFJLENBQUNNLElBQUwsQ0FBVSxDQUFDdkIsR0FBRCxFQUFNa0IsTUFBTixDQUFWO0FBQ0EsZUFBT0EsTUFBUDtBQUNILE9BSkQsTUFJTztBQUFBOztBQUNILGNBQU1NLEtBQUssc0JBQUdQLElBQUksQ0FBQ0UsU0FBRCxDQUFQLDZEQUFzQiwwQkFBakM7QUFDQUssUUFBQUEsS0FBSyxDQUFDLENBQUQsQ0FBTCxHQUFXVixrQkFBa0IsQ0FBQ2QsR0FBRCxFQUFNd0IsS0FBSyxDQUFDLENBQUQsQ0FBWCxDQUE3QjtBQUNBLGVBQU9BLEtBQUssQ0FBQyxDQUFELENBQVo7QUFDSDtBQUNKO0FBQ0o7O0FBRU1DLEVBQUFBLElBQUksR0FBZ0I7QUFDdkIsV0FBT0MsUUFBUSxDQUFDQyxJQUFULENBQWMsS0FBS0MsT0FBTCxFQUFkLEVBQThCQyxHQUE5QixDQUFrQ0MsQ0FBQyxJQUFJQSxDQUFDLENBQUMsQ0FBRCxDQUF4QyxDQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLE1BQU0sR0FBZ0I7QUFDekIsV0FBT0wsUUFBUSxDQUFDQyxJQUFULENBQWMsS0FBS0MsT0FBTCxFQUFkLEVBQThCQyxHQUE5QixDQUFrQ0MsQ0FBQyxJQUFJQSxDQUFDLENBQUMsQ0FBRCxDQUF4QyxDQUFQO0FBQ0g7O0FBRU1GLEVBQUFBLE9BQU8sR0FBaUM7QUFDM0MsV0FBT0YsUUFBUSxDQUFDQyxJQUFULENBQWMsS0FBSzlCLE9BQUwsQ0FBYWtDLE1BQWIsRUFBZCxFQUFxQ0MsT0FBckMsQ0FBNkNYLENBQUMsSUFBSUEsQ0FBbEQsQ0FBUDtBQUNIOztBQUVNWSxFQUFBQSxLQUFLLEdBQVM7QUFDakIsU0FBS3BDLE9BQUwsQ0FBYW9DLEtBQWI7QUFDSDs7QUFFU2pCLEVBQUFBLFVBQVUsQ0FBQ2hCLEdBQUQsRUFBaUI7QUFDakMsV0FBT0EsR0FBRyxDQUFDa0MsT0FBSixFQUFQO0FBQ0g7O0FBRVNaLEVBQUFBLFdBQVcsQ0FBQ2EsSUFBRCxFQUFVQyxLQUFWLEVBQTZCO0FBQzlDLFdBQU9ELElBQUksQ0FBQ0UsUUFBTCxDQUFjRCxLQUFkLENBQVA7QUFDSDs7QUFFTzVCLEVBQUFBLG1CQUFtQixDQUFDUixHQUFELEVBQTZCO0FBQUE7O0FBQ3BELFVBQU1lLElBQUksR0FBRyxLQUFLQyxVQUFMLENBQWdCaEIsR0FBaEIsQ0FBYjtBQUNBLGdDQUFPLEtBQUtILE9BQUwsQ0FBYVUsR0FBYixDQUFpQlEsSUFBakIsQ0FBUCxzREFBTyxrQkFBd0J1QixJQUF4QixDQUE2QmpCLENBQUMsSUFBSSxLQUFLQyxXQUFMLENBQWlCRCxDQUFDLENBQUMsQ0FBRCxDQUFsQixFQUF1QnJCLEdBQXZCLENBQWxDLENBQVA7QUFDSDs7QUFqRnlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uLy4uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgeyBJRXF1YXRhYmxlIH0gZnJvbSBcIi4uL0lFcXVhdGFibGVcIjtcblxuZXhwb3J0IGNsYXNzIE1hcDI8SyBleHRlbmRzIElFcXVhdGFibGU8Sz4sIFY+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhhc2hNYXAgPSBuZXcgTWFwPG51bWJlciwgQXJyYXk8W0ssIFZdPj4oKTtcblxuICAgIHB1YmxpYyBzZXQoa2V5OiBLLCB2YWx1ZTogVik6IHZvaWQge1xuICAgICAgICB0aGlzLnNldE9yVXBkYXRlKFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgKCkgPT4gdmFsdWUsXG4gICAgICAgICAgICAoKSA9PiB2YWx1ZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRPclNldChrZXk6IEssIGRlZmF1bHRWYWx1ZUZhY3Rvcnk6ICgpID0+IFYpOiBWIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0T3JVcGRhdGUoa2V5LCBkZWZhdWx0VmFsdWVGYWN0b3J5LCAoaywgdikgPT4gdik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldChrZXk6IEspOiBWIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW50cnlPclVuZGVmaW5lZChrZXkpPy5bMV07XG4gICAgfVxuXG4gICAgcHVibGljIGhhcyhrZXk6IEspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW50cnlPclVuZGVmaW5lZChrZXkpICE9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc2hNYXAuc2l6ZSA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0LfQvdCw0YfQtdC90LjQtSDQsiDRgdC70L7QstCw0YDQtSDQv9C+INC60LvRjtGH0Y4sINC10YHQu9C4INC30L3QsNGH0LXQvdC40Y8g0L3QtdGCIC0tINGD0YHRgtC90LDQstC40YIg0L3QvtCy0L7QtVxuICAgICAqIEBwYXJhbSBrZXkg0LrQu9GO0Ycg0YHQu9C+0LLQsNGA0Y8g0LTQu9GPINGA0L7QsdC90L7QstC70LXQvdC40Y9cbiAgICAgKiBAcGFyYW0gbmV3VmFsdWVGYWN0b3J5INCV0YHQu9C4INC30L3QsNGH0LXQvdC40Y8g0L3QtdGCIC0tINCx0YPQtNC10YIg0YPRgdGC0LDQvdC+0LLQu9C10L0g0YDQtdC30YPQu9GM0YLQsNGCINGN0YLQvtC5INGE0YPQvdC60YbQuNC4XG4gICAgICogQHBhcmFtIHVwZGF0ZVZhbHVlRmFjdG9yeSDQldGB0LvQuCDQt9C90LDRh9C10L3QuNC1INC10YHRgtGMIC0tINCx0YPQtNC10YIg0YPRgdGC0LDQvdC+0LLQu9C10L0g0YDQtdC30YPQu9GM0YLQsNGCINGN0YLQvtC5INGE0YPQvdC60YbQuNC4XG4gICAgICovXG4gICAgcHVibGljIHNldE9yVXBkYXRlKGtleTogSywgbmV3VmFsdWVGYWN0b3J5OiAoa2V5OiBLKSA9PiBWLCB1cGRhdGVWYWx1ZUZhY3Rvcnk6IChrZXk6IEssIHVwZGF0ZTogVikgPT4gVik6IFYge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRLZXlIYXNoKGtleSk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLmhhc2hNYXAuZ2V0KGhhc2gpO1xuICAgICAgICBpZiAobGlzdCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ld1ZhbHVlRmFjdG9yeShrZXkpO1xuICAgICAgICAgICAgdGhpcy5oYXNoTWFwLnNldChoYXNoLCBbW2tleSwgcmVzdWx0XV0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IGxpc3QuZmluZEluZGV4KHggPT4gdGhpcy5hcmVLZXlFcXVhbCh4WzBdLCBrZXkpKTtcbiAgICAgICAgICAgIGlmIChpdGVtSW5kZXggPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXdWYWx1ZUZhY3Rvcnkoa2V5KTtcbiAgICAgICAgICAgICAgICBsaXN0LnB1c2goW2tleSwgcmVzdWx0XSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBsaXN0W2l0ZW1JbmRleF0gPz8gcmVqZWN0KCk7XG4gICAgICAgICAgICAgICAgZW50cnlbMV0gPSB1cGRhdGVWYWx1ZUZhY3Rvcnkoa2V5LCBlbnRyeVsxXSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5WzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGtleXMoKTogSXRlcmFibGU8Sz4ge1xuICAgICAgICByZXR1cm4gSXRlcmF0b3IuZnJvbSh0aGlzLmVudHJpZXMoKSkubWFwKGUgPT4gZVswXSk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbHVlcygpOiBJdGVyYWJsZTxWPiB7XG4gICAgICAgIHJldHVybiBJdGVyYXRvci5mcm9tKHRoaXMuZW50cmllcygpKS5tYXAoZSA9PiBlWzFdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW50cmllcygpOiBJdGVyYWJsZTxba2V5OiBLLCB2YWx1ZTogVl0+IHtcbiAgICAgICAgcmV0dXJuIEl0ZXJhdG9yLmZyb20odGhpcy5oYXNoTWFwLnZhbHVlcygpKS5mbGF0TWFwKHggPT4geCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc2hNYXAuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0S2V5SGFzaChrZXk6IEspOiBudW1iZXIge1xuICAgICAgICByZXR1cm4ga2V5LmdldEhhc2goKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXJlS2V5RXF1YWwobGVmdDogSywgcmlnaHQ6IEspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGxlZnQuaXNFcXVhbHMocmlnaHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RW50cnlPclVuZGVmaW5lZChrZXk6IEspOiBbSywgVl0gfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBoYXNoID0gdGhpcy5nZXRLZXlIYXNoKGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc2hNYXAuZ2V0KGhhc2gpPy5maW5kKHggPT4gdGhpcy5hcmVLZXlFcXVhbCh4WzBdLCBrZXkpKTtcbiAgICB9XG59XG4iXX0=
|