@kontur.candy/tools 2.139.0 → 2.140.0-debug
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 +71 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +80 -9
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +26 -4
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +11 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +6 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintResponse.js +6 -0
- package/distr/Common/CandyApiClient/Types/Print/PrintType.js +14 -0
- package/distr/Common/CandyApiClient/Types/Staff/ImportEmployeesOptions.js +6 -0
- package/distr/Common/HttpClient/HttpClient.js +5 -2
- package/distr/Common/IterableUtils.js +26 -1
- package/distr/Common/KCLangRuntimeUtils.js +10 -2
- package/distr/Common/ModelPath/BuildIterationSequence.js +3 -2
- package/distr/Common/ModelPath/ModelPath.js +15 -4
- package/distr/Common/StringArrayKey.js +4 -12
- package/distr/Common/UseShowOnce.js +88 -0
- package/distr/Common/hashUtils.js +17 -0
- package/distr/Tools/src/BuildTasks/Form/CompileForm.js +10 -4
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +45 -2
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +3 -1
- package/distr/Tools/src/BuildTasks/ResolveFormInfo.js +1 -1
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +6 -6
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesController.js +46 -4
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +2 -2
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +9 -5
- package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +2 -2
- package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +5 -2
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +37 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +9 -7
- package/distr/Tools/src/FormWebpackConfiguration/createFormWebpackConfiguration.js +5 -3
- 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 +151 -57
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +226 -137
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,74 @@
|
|
|
1
|
+
<a name="2.140.0-debug"></a>
|
|
2
|
+
# [2.140.0-debug](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.150.0...release/tools/v2.140.0-debug) (2023-03-13)
|
|
3
|
+
|
|
4
|
+
<a name="2.150.0"></a>
|
|
5
|
+
# [2.150.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.149.0...release/tools/v2.150.0) (2023-03-10)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **Tools:** Теперь можно подключить СС при создании черновика из forms-helper ([48b6aed](https://git.skbkontur.ru/ke/candy-utils/commit/48b6aed))
|
|
11
|
+
|
|
12
|
+
<a name="2.149.0"></a>
|
|
13
|
+
# [2.149.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.148.0...release/tools/v2.149.0) (2023-03-09)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Features
|
|
17
|
+
|
|
18
|
+
* **Tools:** При использовании серверной нормализации ошибки генерации .Net сборки падают в рантайме, а не во время сборки формы ([b5447c4](https://git.skbkontur.ru/ke/candy-utils/commit/b5447c4)), see [#7247](https://yt.skbkontur.ru/issue/FS-7247)
|
|
19
|
+
|
|
20
|
+
<a name="2.148.0"></a>
|
|
21
|
+
# [2.148.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.147.0...release/tools/v2.148.0) (2023-02-20)
|
|
22
|
+
|
|
23
|
+
<a name="2.147.0"></a>
|
|
24
|
+
# [2.147.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.146.0...release/tools/v2.147.0) (2023-02-15)
|
|
25
|
+
|
|
26
|
+
<a name="2.146.0"></a>
|
|
27
|
+
# [2.146.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.145.0...release/tools/v2.146.0) (2023-02-07)
|
|
28
|
+
|
|
29
|
+
<a name="2.145.0"></a>
|
|
30
|
+
# [2.145.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.144.0...release/tools/v2.145.0) (2023-01-27)
|
|
31
|
+
|
|
32
|
+
<a name="2.144.0"></a>
|
|
33
|
+
# [2.144.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.143.0...release/tools/v2.144.0) (2023-01-27)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Bug Fixes
|
|
37
|
+
|
|
38
|
+
* **Tools:** Исправлена регулярка поиска пререлизной версии при обновлении движка ([ebb13e1](https://git.skbkontur.ru/ke/candy-utils/commit/ebb13e1))
|
|
39
|
+
|
|
40
|
+
<a name="2.143.0"></a>
|
|
41
|
+
# [2.143.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.142.0...release/tools/v2.143.0) (2023-01-26)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
### Bug Fixes
|
|
45
|
+
|
|
46
|
+
* **Tools:** отключен авто-апдейт версии движка если в нём присутствуют символы ([be4e28f](https://git.skbkontur.ru/ke/candy-utils/commit/be4e28f))
|
|
47
|
+
|
|
48
|
+
<a name="2.142.0"></a>
|
|
49
|
+
# [2.142.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.141.0...release/tools/v2.142.0) (2023-01-19)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
### Features
|
|
53
|
+
|
|
54
|
+
* **Tools:** Список gfv берется из списка локальных директорий ([2ae45fe](https://git.skbkontur.ru/ke/candy-utils/commit/2ae45fe))
|
|
55
|
+
|
|
56
|
+
<a name="2.141.0"></a>
|
|
57
|
+
# [2.141.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.140.0...release/tools/v2.141.0) (2022-12-16)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### Features
|
|
61
|
+
|
|
62
|
+
* **Tools:** copying merge resources ([5e4131c](https://git.skbkontur.ru/ke/candy-utils/commit/5e4131c)), see [#6809](https://yt.skbkontur.ru/issue/FS-6809)
|
|
63
|
+
|
|
64
|
+
<a name="2.140.0"></a>
|
|
65
|
+
# [2.140.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.139.0...release/tools/v2.140.0) (2022-11-30)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
### Bug Fixes
|
|
69
|
+
|
|
70
|
+
* **Tools:** Исправлен доступ к файлу серверной нормализации для билд сервера ([384d588](https://git.skbkontur.ru/ke/candy-utils/commit/384d588))
|
|
71
|
+
|
|
1
72
|
<a name="2.139.0"></a>
|
|
2
73
|
# [2.139.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.138.0...release/tools/v2.139.0) (2022-11-25)
|
|
3
74
|
|
|
@@ -81,8 +81,8 @@ class CandyApiClient {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
async getAllGfvs(abortSignal) {
|
|
84
|
-
const body = await this.httpClient.get(`
|
|
85
|
-
return
|
|
84
|
+
const body = await this.httpClient.get(`build-server/gfvs`).json();
|
|
85
|
+
return body;
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
async createDraftFromDrive(ns, fufDriveUri, abortSignal) {
|
|
@@ -237,12 +237,40 @@ class CandyApiDraftClient {
|
|
|
237
237
|
});
|
|
238
238
|
}
|
|
239
239
|
|
|
240
|
-
async sendChangeSet(data) {
|
|
241
|
-
await this.httpClient.post(this.
|
|
240
|
+
async sendChangeSet(data, currentDataVersion) {
|
|
241
|
+
const result = await this.httpClient.post(this.getDraftUrl("inner")).withQueryParams({
|
|
242
|
+
dataVersion: currentDataVersion
|
|
243
|
+
}).withJsonBody(data).acceptCode(409); // eslint-disable-next-line no-warning-comments
|
|
244
|
+
//TODO: после выпуска задачи https://yt.skbkontur.ru/issue/FS-7665 отрефакторить и оставить только "dataResult.dataVersion" (правка настроек сериализатора)
|
|
245
|
+
|
|
246
|
+
const getSuccessResult = async () => {
|
|
247
|
+
var _ref, _dataResult$dataVersi;
|
|
248
|
+
|
|
249
|
+
const dataResult = await result.json();
|
|
250
|
+
return {
|
|
251
|
+
dataVersion: (_ref = (_dataResult$dataVersi = dataResult === null || dataResult === void 0 ? void 0 : dataResult.dataVersion) !== null && _dataResult$dataVersi !== void 0 ? _dataResult$dataVersi : dataResult === null || dataResult === void 0 ? void 0 : dataResult.DataVersion) !== null && _ref !== void 0 ? _ref : (0, _TypingUtils.reject)("Invalid dataVersion after applying change set.")
|
|
252
|
+
};
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
return result.status == 200 ? await getSuccessResult() : result.status;
|
|
242
256
|
}
|
|
243
257
|
|
|
244
|
-
sendChangeSetSync(data) {
|
|
245
|
-
|
|
258
|
+
sendChangeSetSync(data, currentDataVersion) {
|
|
259
|
+
const result = this.httpClient.postSync(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.inner), {
|
|
260
|
+
dataVersion: currentDataVersion
|
|
261
|
+
}, data); // eslint-disable-next-line no-warning-comments
|
|
262
|
+
//TODO: после выпуска задачи https://yt.skbkontur.ru/issue/FS-7665 отрефакторить и оставить только "dataResult.dataVersion" (правка настроек сериализатора)
|
|
263
|
+
|
|
264
|
+
const getSuccessResultSync = () => {
|
|
265
|
+
var _ref2, _dataResult$dataVersi2;
|
|
266
|
+
|
|
267
|
+
const dataResult = result.json();
|
|
268
|
+
return {
|
|
269
|
+
dataVersion: (_ref2 = (_dataResult$dataVersi2 = dataResult === null || dataResult === void 0 ? void 0 : dataResult.dataVersion) !== null && _dataResult$dataVersi2 !== void 0 ? _dataResult$dataVersi2 : dataResult === null || dataResult === void 0 ? void 0 : dataResult.DataVersion) !== null && _ref2 !== void 0 ? _ref2 : (0, _TypingUtils.reject)("Invalid dataVersion after applying change set.")
|
|
270
|
+
};
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
return result.status == 200 ? getSuccessResultSync() : result.status;
|
|
246
274
|
}
|
|
247
275
|
|
|
248
276
|
async getRequisites(requisiteList) {
|
|
@@ -259,7 +287,7 @@ class CandyApiDraftClient {
|
|
|
259
287
|
}).withJsonBody(rules).json();
|
|
260
288
|
}
|
|
261
289
|
|
|
262
|
-
getPartialInnerAsJsonTree(rules, maxInstanceCount) {
|
|
290
|
+
async getPartialInnerAsJsonTree(rules, maxInstanceCount) {
|
|
263
291
|
return this.httpClient.post(this.getDraftUrl("get-partial-inner")).withQueryParams(maxInstanceCount != undefined && {
|
|
264
292
|
maxInstanceCount: maxInstanceCount.toString()
|
|
265
293
|
}).withQueryParams({
|
|
@@ -267,6 +295,16 @@ class CandyApiDraftClient {
|
|
|
267
295
|
}).withJsonBody(rules).json();
|
|
268
296
|
}
|
|
269
297
|
|
|
298
|
+
getRawPartialInnerAsJsonTree(rules, maxInstanceCount) {
|
|
299
|
+
return this.httpClient.post(this.getDraftUrl("get-partial-inner2")).withQueryParams(maxInstanceCount != undefined && {
|
|
300
|
+
maxInstanceCount: maxInstanceCount.toString()
|
|
301
|
+
}).withJsonBody(rules).json();
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
getDataVersion() {
|
|
305
|
+
return this.httpClient.get(this.getDraftUrl("inner/get-data-version")).json();
|
|
306
|
+
}
|
|
307
|
+
|
|
270
308
|
async getExplanatoryNote() {
|
|
271
309
|
return await this.httpClient.get(this.getDraftPresentationUrl(_DraftPresentationType.DraftPresentationType.explanatoryNote)).json();
|
|
272
310
|
}
|
|
@@ -388,6 +426,28 @@ class CandyApiDraftClient {
|
|
|
388
426
|
}
|
|
389
427
|
}
|
|
390
428
|
|
|
429
|
+
async acceptTransferType(fufDriveUri, transferType, abortSignal) {
|
|
430
|
+
try {
|
|
431
|
+
const response = await this.httpClient.post(`v1/ns/${this.draftFullId.ns}/drafts/${this.draftFullId.draftId}/transfer/combine`).withQueryParams({
|
|
432
|
+
fufDriveUri: fufDriveUri,
|
|
433
|
+
typeId: transferType
|
|
434
|
+
}).withAbortSignal(abortSignal).acceptCode(400).acceptCode(413);
|
|
435
|
+
|
|
436
|
+
if (response.status !== 200) {
|
|
437
|
+
const data = await response.json();
|
|
438
|
+
return {
|
|
439
|
+
serverError: data.errorCode
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
return undefined;
|
|
444
|
+
} catch (e) {
|
|
445
|
+
return {
|
|
446
|
+
serverError: ServerErrors.UnknownError
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
391
451
|
async setFufByDriveUri(driveUri) {
|
|
392
452
|
await this.httpClient.put(this.getDraftUrl("set-fuf")).withQueryParams({
|
|
393
453
|
driveUri: driveUri
|
|
@@ -420,7 +480,7 @@ class CandyApiDraftClient {
|
|
|
420
480
|
}
|
|
421
481
|
|
|
422
482
|
async normalizeByRules(rules) {
|
|
423
|
-
await this.httpClient.post(this.getDraftUrl("normalize")).withJsonBody(rules);
|
|
483
|
+
await this.httpClient.post(this.getDraftUrl("test-normalize")).withJsonBody(rules);
|
|
424
484
|
}
|
|
425
485
|
|
|
426
486
|
getHrefDownloadDraftPresentation(presentationType) {
|
|
@@ -473,7 +533,18 @@ class CandyApiDraftClient {
|
|
|
473
533
|
await this.httpClient.post(this.getDraftUrl("inner/delete-instances")).withJsonBody(parameters);
|
|
474
534
|
}
|
|
475
535
|
|
|
536
|
+
async runMassAction(actionId, parameters) {
|
|
537
|
+
const queryParams = {
|
|
538
|
+
actionId: actionId
|
|
539
|
+
};
|
|
540
|
+
await this.httpClient.post(this.getDraftUrl("inner/mass-action")).withQueryParams(queryParams).withJsonBody(parameters);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
print(type, body) {
|
|
544
|
+
return this.httpClient.post(this.getDraftUrl(`presentations/inner/print/${type}`)).withJsonBody(body).json();
|
|
545
|
+
}
|
|
546
|
+
|
|
476
547
|
}
|
|
477
548
|
|
|
478
549
|
exports.CandyApiDraftClient = CandyApiDraftClient;
|
|
479
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJuYW1lcyI6WyJzdHJhbmdlT3B0aW9ucyIsInNyYyIsImRhdGFWZXJzaW9uIiwiU2VydmVyRXJyb3JzIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiZm9yRHJhZnQiLCJkcmFmdEZ1bGxJZCIsIkNhbmR5QXBpRHJhZnRDbGllbnQiLCJjcmVhdGVEaWdlc3RBcGlDbGllbnQiLCJEaWdlc3RBcGlDbGllbnQiLCJnZXRJbmZvQnlJbm5zIiwiaW5ucyIsInBhdGhzIiwibWFwIiwiaW5uIiwicmVzcG9uc2UiLCJwb3N0IiwiZ2V0RHJhZnRVcmwiLCJ3aXRoSnNvbkJvZHkiLCJqc29uIiwicmVzdWx0IiwiaW5uU2VydmVyVmFsdWUiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImVycm9yIiwiZXJyb3JDb2RlIiwiRm9jdXNTZXJ2ZXJFcnJvckNvZGUiLCJOb0lubkVycm9yIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiYm9keSIsImdldCIsIk9iamVjdCIsImtleXMiLCJmb3JtcyIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwibnMiLCJmdWZEcml2ZVVyaSIsIndpdGhRdWVyeVBhcmFtcyIsIndpdGhBYm9ydFNpZ25hbCIsImNyZWF0ZUVtcHR5RHJhZnQiLCJnZnYiLCJjcmVhdGVEcmFmdCIsImZ1ZkNvbnRlbnQiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiRXJyb3IiLCJjaGVja0FsaXZlIiwiZHJhZnRSZWxhdGVkVXJsIiwiZHJhZnRJZCIsImdldEZlYXR1cmVGbGFncyIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwidXJsIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nIiwiZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZiIsImdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uIiwiRHJhZnRQcmVzZW50YXRpb25UeXBlIiwiaW5uZXJGdWYiLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJjbGllbnRJbmZvIiwiZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8iLCJmb3Jtc0NsaWVudEluZm8iLCJnZXRIcmVmRG93bmxvYWRJbm5lciIsImlubmVyIiwiZ2V0RXJyb3JMb2ciLCJnZXREcmFmdFByZXNlbnRhdGlvblVybCIsImVycm9yTG9nIiwiZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MiLCJjaGVja1NjZW5hcmlvcyIsImdldFRhc2tCeUlkIiwidGFza0lkIiwidGFza3MiLCJnZXRBbGxUYXNrcyIsInZhbHVlcyIsIngiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiYWRkZWQiLCJjaGFuZ2VkIiwiaWQiLCJyZW1vdmVkIiwiY2FuY2VsVGFzayIsImdldEV4cGVydEVycm9yTG9nIiwiZXJyb3Jsb2dFeHBlcnQiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsInByb3BzRHJpdmVOYW1lIiwiY2xlYXJEcmFmdCIsImNvbnZlcnREcmFmdEZyb21QcmV2R2Z2IiwicHJldkdmdkRyYWZ0SWQiLCJzZW5kQ2hhbmdlU2V0IiwiZGF0YSIsInNlbmRDaGFuZ2VTZXRTeW5jIiwicG9zdFN5bmMiLCJnZXRSZXF1aXNpdGVzIiwicmVxdWlzaXRlTGlzdCIsImdldElubmVyIiwiZ2V0UGFydGlhbElubmVyIiwicnVsZXMiLCJtYXhJbnN0YW5jZUNvdW50IiwidG9TdHJpbmciLCJnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZm9ybWF0IiwiZ2V0RXhwbGFuYXRvcnlOb3RlIiwiZXhwbGFuYXRvcnlOb3RlIiwiZ2V0QXR0YWNobWVudEJ5SWQiLCJhdHRhY2htZW50SWQiLCJnZXRBbGxBdHRhY2htZW50cyIsInJlbW92ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudElkcyIsImNyZWF0ZU9yVXBkYXRlQXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImF0dGFjaG1lbnQiLCJjb250ZW50VXJpIiwibWV0YSIsInNldFByZXNlbnRhdGlvbiIsInByZXNlbnRhdGlvblR5cGUiLCJjb250ZW50IiwicmVxdWVzdCIsInB1dCIsIndpdGhSYXdCb2R5IiwicGF0Y2hQcmVzZW50YXRpb24iLCJwcmVzZW50YXRpb25Db250ZW50IiwicGF0Y2giLCJnZXRGaWxlUHJvcGVydGllcyIsImRyaXZlVXJpIiwiYWNjZXB0Q29kZSIsInN0YXR1cyIsInByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyIsImVycm9yRGF0YSIsIkZ1ZlNpemVUb29MYXJnZUVycm9yIiwibWVzc2FnZSIsIkh0dHBFcnJvciIsInVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmlzIiwic2VydmVyRXJyb3IiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJzb3VyY2VzVG90YWxDb3VudCIsImUiLCJVbmtub3duRXJyb3IiLCJzZXRGdWZCeURyaXZlVXJpIiwiY29tYmluZUZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lTWV0aG9kIiwibXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaSIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzIiwiZW5hYmxlZCIsInVyaSIsInNldEVuYWJsZWQiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aHNQcmVmaXgiLCJwYXRoc1RvU2VhcmNoIiwibWF4SW5zdGFuY2VDb3VudFBhcmFtcyIsInBhcmFtcyIsInNlYXJjaFN0cmluZyIsImN1c3RvbU5vcm1hbGl6ZSIsIm5vcm1hbGl6ZXJJZCIsInBhdGhQcmVmaXhlcyIsImltcG9ydEVtcGxveWVlcyIsImRlbGV0ZUluc3RhbmNlcyIsIm11bHRp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QUs5SixVQUFMLENBQ0RhLElBREMsQ0FDSSxLQUFLQyxXQUFMLENBQWlCLHdCQUFqQixDQURKLEVBRURxQixlQUZDLENBRWV3SCxNQUZmLEVBR0Q1SSxZQUhDLENBR1lnSixZQUhaLENBQU47QUFJSDs7QUFFMkIsUUFBZkMsZUFBZSxDQUFDekMsT0FBRCxFQUFpRDtBQUN6RSxVQUFNLEtBQUt2SCxVQUFMLENBQWdCNEgsS0FBaEIsQ0FBc0IsS0FBSzlHLFdBQUwsQ0FBaUIsT0FBakIsQ0FBdEIsRUFBaURDLFlBQWpELENBQThEd0csT0FBOUQsQ0FBTjtBQUNIOztBQUUyQixRQUFmMEMsZUFBZSxDQUFDQyxnQkFBRCxFQUEyQkMsU0FBM0IsRUFBK0Q7QUFDdkYsVUFBTUMsVUFBVSxHQUFHO0FBQUVGLE1BQUFBLGdCQUFnQixFQUFFQSxnQkFBcEI7QUFBc0NHLE1BQUFBLGVBQWUsRUFBRUY7QUFBdkQsS0FBbkI7QUFDQSxVQUFNLEtBQUtuSyxVQUFMLENBQWdCYSxJQUFoQixDQUFxQixLQUFLQyxXQUFMLENBQWlCLHdCQUFqQixDQUFyQixFQUFpRUMsWUFBakUsQ0FBOEVxSixVQUE5RSxDQUFOO0FBQ0g7O0FBclg0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi4vSHR0cENsaWVudC9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3IgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9IdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBIdHRwU3RhdHVzQ29kZSwgSUh0dHBDbGllbnQgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9JSHR0cENsaWVudFwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25Nb2RlLCBjcmVhdGVBdXRoZW50aWNhdGlvblByb3ZpZGVyIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvQXV0aGVudGljYXRpb25Nb2RlXCI7XG5cbmltcG9ydCB7IENoZWNrU2NlbmFyaW9UeXBlLCBJQ2FuZHlBcGlDbGllbnQsIElDYW5keUFwaURyYWZ0Q2xpZW50IH0gZnJvbSBcIi4vSUNhbmR5QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgeyBTZXJ2ZXJJbm5lclJlc3BvbnNlLCBTZXJ2ZXJKc29uUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJJbm5lclJlc3BvbnNlXCI7XG5pbXBvcnQgeyBGaWxlUHJvcGVydGllcywgVXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9GaWxlUHJvcGVydGllc1wiO1xuaW1wb3J0IHsgQ3JlYXRlRHJhZnRSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0NyZWF0ZURyYWZ0L0NyZWF0ZURyYWZ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXhwbGFuYXRvcnlOb3RlL0NyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5pbXBvcnQgeyBTZXJ2ZXJDaGFuZ2VTZXQgfSBmcm9tIFwiLi9UeXBlcy9DaGFuZ2VTZXQvU2VydmVyQ2hhbmdlU2V0XCI7XG5pbXBvcnQgeyBTZXJ2ZXJUYXNrLCBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL1Rhc2tzXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlckVycm9yQ29kZSwgR2V0QnlJbm5SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzVHlwZXNcIjtcbmltcG9ydCB7IEF0dGFjaEluZm8gfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9BdHRhY21lbnRzXCI7XG5pbXBvcnQgeyBEcmFmdFByZXNlbnRhdGlvblR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmVzZW50YXRpb25zL0RyYWZ0UHJlc2VudGF0aW9uVHlwZVwiO1xuaW1wb3J0IHsgUHJlc2VudGF0aW9uQ29udGVudCB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvUHJlc2VudGF0aW9uQ29udGVudFwiO1xuaW1wb3J0IHsgQ29udmVydERyYWZ0UmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db252ZXJ0RHJhZnRSZXF1ZXN0XCI7XG5pbXBvcnQgeyBHZXRBdHRhY2htZW50c1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQXR0YWNobWVudHMvR2V0QXR0YWNobWVudHNSZXNwb25zZVwiO1xuaW1wb3J0IHsgRm9jdXNTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IEdldFRhc2tzU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9UYXNrcy9HZXRUYXNrc1NlcnZlclJlc3BvbnNlXCI7XG5pbXBvcnQgeyBEaWFnUmVzb3VyY2VzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9EaWFnUmVzb3VyY2VzUmVzcG9uc2VcIjtcbmltcG9ydCB7IFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJlcXVpc2l0ZXNSZXNwb25zZVwiO1xuaW1wb3J0IHsgaXNCdWZmZXIgfSBmcm9tIFwiLi9Jc0J1ZmZlclwiO1xuaW1wb3J0IHsgQ29tYmluZUZ1ZlJlc3VsdCwgRnVmQ29tYmluZU1ldGhvZCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db21iaW5lRnVmUmVzdWx0XCI7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ3NSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZlYXR1cmVGbGFncy9GZWF0dXJlRmxhZ3NSZXNwb25zZVwiO1xuaW1wb3J0IHsgRGlnZXN0QXBpQ2xpZW50IH0gZnJvbSBcIi4vRGlnZXN0QXBpQ2xpZW50L0RpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgSURpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuL0RpZ2VzdEFwaUNsaWVudC9JRGlnZXN0QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBGdWZTaXplVG9vTGFyZ2VFcnJvciB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9GdWZTaXplVG9vTGFyZ2VFcnJvclwiO1xuaW1wb3J0IHsgSW1wb3J0RW1wbG95ZWVzUmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL1N0YWZmL0ltcG9ydEVtcGxveWVlc1JlcXVlc3RcIjtcblxuY29uc3Qgc3RyYW5nZU9wdGlvbnMgPSB7IHNyYzogXCJjaGFuZ2VTZXRcIiwgZGF0YVZlcnNpb246IFwiMFwiIH07XG5cbmV4cG9ydCBlbnVtIFNlcnZlckVycm9ycyB7XG4gICAgRnVmU2l6ZVRvb0xhcmdlID0gXCJGdWZTaXplVG9vTGFyZ2VcIixcbiAgICBCYWRSZXF1ZXN0ID0gXCJCYWRSZXF1ZXN0XCIsXG4gICAgVW5rbm93bkVycm9yID0gXCJVbmtub3duRXJyb3JcIixcbn1cblxuZXhwb3J0IGNsYXNzIENhbmR5QXBpQ2xpZW50IGltcGxlbWVudHMgSUNhbmR5QXBpQ2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBmZXRjaEltcGw6IEZldGNoLFxuICAgICAgICBiYXNlVXJsOiBzdHJpbmcsXG4gICAgICAgIHJlc291cmNlWm9uZTogdW5kZWZpbmVkIHwgc3RyaW5nLFxuICAgICAgICBhdXRoZW50aWNhdGlvbjogdW5kZWZpbmVkIHwgQXV0aGVudGljYXRpb25Nb2RlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IG5ldyBIdHRwQ2xpZW50KGZldGNoSW1wbCwgYmFzZVVybCwgY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlcihhdXRoZW50aWNhdGlvbiksIHtcbiAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRHJhZnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IENhbmR5QXBpRHJhZnRDbGllbnQodGhpcy5odHRwQ2xpZW50LCBkcmFmdEZ1bGxJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURpZ2VzdEFwaUNsaWVudChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpOiBJRGlnZXN0QXBpQ2xpZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBEaWdlc3RBcGlDbGllbnQodGhpcy5odHRwQ2xpZW50LCBkcmFmdEZ1bGxJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm9CeUlubnMoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBpbm5zOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8R2V0QnlJbm5SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBwYXRocyA9IGlubnMubWFwKGlubiA9PiBgQGZvY3VzLyR7aW5ufWApO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChkcmFmdEZ1bGxJZCwgXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248Rm9jdXNTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBHZXRCeUlublJlc3BvbnNlID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaW5uIG9mIGlubnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlublNlcnZlclZhbHVlID0gcmVzcG9uc2VbYEBmb2N1cy8ke2lubn1gXT8udmFsdWU7XG4gICAgICAgICAgICBpZiAoaW5uU2VydmVyVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlNlcnZlciBkb2VzIG5vdCByZXR1cm4gaW5uIGluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlOiBGb2N1c1NlcnZlckVycm9yQ29kZS5Ob0lubkVycm9yLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpbm5dID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5uU2VydmVyVmFsdWUudmFsdWUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IGlublNlcnZlclZhbHVlLmVycm9yQ29kZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBpbm5TZXJ2ZXJWYWx1ZS5lcnJvciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxHZnZzKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGB2MS9kaWFnL3Jlc291cmNlc2ApLmpzb248RGlhZ1Jlc291cmNlc1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYm9keS5mb3Jtcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0RnJvbURyaXZlKFxuICAgICAgICBuczogc3RyaW5nLFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnQtZnJvbS1kcml2ZWApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgICAgICAgICBuczogbnMsXG4gICAgICAgICAgICAgICAgZnVmRHJpdmVVcmk6IGZ1ZkRyaXZlVXJpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVFbXB0eURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHVuZGVmaW5lZCwgZnVmQ29udGVudDogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQgfCBzdHJpbmcsIGZ1ZkNvbnRlbnQ/OiBCdWZmZXIpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiAhPSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihCdWZmZXIuZnJvbShbXSkpXG4gICAgICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2Z2ID09IHVuZGVmaW5lZCAmJiBmdWZDb250ZW50ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBkcmFmdDogbm8gZ2Z2IGFuZCBubyBmdWYgc3BlY2lmaWVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAud2l0aEJvZHlGcm9tQnVmZmVyKGZ1ZkNvbnRlbnQpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja0FsaXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGBfc3RhdHVzL3BpbmdgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0VXJsKGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCwgZHJhZnRSZWxhdGVkVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke2RyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZlYXR1cmVGbGFncygpOiBQcm9taXNlPEZlYXR1cmVGbGFnc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KFwidjEvZmVhdHVyZXMvZmxhZ3NcIikuanNvbjxGZWF0dXJlRmxhZ3NSZXNwb25zZT4oKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5keUFwaURyYWZ0Q2xpZW50IGltcGxlbWVudHMgSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSUh0dHBDbGllbnQ7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaHR0cENsaWVudDogSUh0dHBDbGllbnQsIGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCkge1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBodHRwQ2xpZW50O1xuICAgICAgICB0aGlzLmRyYWZ0RnVsbElkID0gZHJhZnRGdWxsSWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0lubmVyRWRpdG9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKGBpbm5lci1lZGl0b3IvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZEb3dubG9hZEZ1ZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWZ1ZlwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0NvbnZlcnRhdGlvbkxvZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0VXJsKFwiY29udmVyc2lvblwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkSW5uZXJGdWYoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyRnVmKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5jbGllbnRJbmZvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmZvcm1zQ2xpZW50SW5mbyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZEb3dubG9hZElubmVyKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcik7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuZXJyb3JMb2cpKS5qc29uPFNlcnZlckVycm9yTG9nPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyhjaGVja1NjZW5hcmlvczogQ2hlY2tTY2VuYXJpb1R5cGVbXSk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImVycm9ybG9nXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7IGNoZWNrU2NlbmFyaW9zOiBjaGVja1NjZW5hcmlvcyB9KVxuICAgICAgICAgICAgLmpzb248U2VydmVyRXJyb3JMb2c+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFRhc2tCeUlkKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTxTZXJ2ZXJUYXNrIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiB0YXNrc1tgQHRhc2svJHt0YXNrSWR9YF0/LnZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxUYXNrcygpOiBQcm9taXNlPFNlcnZlclRhc2tbXT4ge1xuICAgICAgICBjb25zdCB0YXNrcyA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAdGFzay8qYF0pXG4gICAgICAgICAgICAuanNvbjxHZXRUYXNrc1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0YXNrcykubWFwKHggPT4geC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVucXVldWVUYXNrKHRhc2tJZDogc3RyaW5nLCB0YXNrSW5mbzogVmVyaWZ5QW5kRml4Rm5zUmVxdWlyZW1lbnRzVGFza0luZm8pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgW2BAdGFzay8ke3Rhc2tJZH1gXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGFza0luZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdGFza0lkLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2FuY2VsVGFzayh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge30sXG4gICAgICAgICAgICAgICAgcmVtb3ZlZDogW2BAdGFzay8ke3Rhc2tJZH1gXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFeHBlcnRFcnJvckxvZygpOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuZXJyb3Jsb2dFeHBlcnQpKVxuICAgICAgICAgICAgLmpzb248U2VydmVyRXJyb3JMb2c+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Vycm9yTG9nUGRmKGVycm9yTG9nTmFtZTogc3RyaW5nLCBwcm9wc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJwcmVzZW50YXRpb25zL2Vycm9yTG9nL3ByaW50XCIpLCB7XG4gICAgICAgICAgICBlcnJvckxvZ05hbWU6IGVycm9yTG9nTmFtZSxcbiAgICAgICAgICAgIHByb3BzRHJpdmVOYW1lOiBwcm9wc05hbWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjbGVhckRyYWZ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiY2xlYXJcIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb252ZXJ0RHJhZnRGcm9tUHJldkdmdih7IHByZXZHZnZEcmFmdElkLCBnZnYgfTogQ29udmVydERyYWZ0UmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiY29udmVydFwiKSkud2l0aFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgICAgIGlkOiBwcmV2R2Z2RHJhZnRJZCxcbiAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VuZENoYW5nZVNldChkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShkYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VuZENoYW5nZVNldFN5bmMoZGF0YTogU2VydmVyQ2hhbmdlU2V0KTogSHR0cFN0YXR1c0NvZGUge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3RTeW5jKFxuICAgICAgICAgICAgdGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpLFxuICAgICAgICAgICAgc3RyYW5nZU9wdGlvbnMsXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFJlcXVpc2l0ZXMocmVxdWlzaXRlTGlzdDogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShyZXF1aXNpdGVMaXN0KVxuICAgICAgICAgICAgLmpzb248U2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJbm5lcihwYXRoczogdW5kZWZpbmVkIHwgcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aHMpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJJbm5lclJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXJ0aWFsSW5uZXIocnVsZXM6IFtcIipcIl0gfCBzdHJpbmdbXSwgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlcik6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJ1bGVzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZShydWxlczogW1wiKlwiXSB8IHN0cmluZ1tdLCBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyKTogUHJvbWlzZTxTZXJ2ZXJKc29uUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGZvcm1hdDogXCJKc29uVHJlZVwiIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJ1bGVzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySnNvblJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFeHBsYW5hdG9yeU5vdGUoKTogUHJvbWlzZTxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmV4cGxhbmF0b3J5Tm90ZSkpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QXR0YWNobWVudEJ5SWQoYXR0YWNobWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEF0dGFjaEluZm8+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdKVxuICAgICAgICAgICAgLmpzb248R2V0QXR0YWNobWVudHNSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFtgQGF0dGFjaG1lbnQvJHthdHRhY2htZW50SWR9YF0/LnZhbHVlID8/IHJlamVjdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxBdHRhY2htZW50cygpOiBQcm9taXNlPEF0dGFjaEluZm9bXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQGF0dGFjaG1lbnQvKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0QXR0YWNobWVudHNSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVzdWx0KS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVtb3ZlQXR0YWNobWVudHMoYXR0YWNobWVudElkczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IHt9LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IGF0dGFjaG1lbnRJZHMubWFwKGlkID0+IGBAYXR0YWNobWVudC8ke2lkfWApLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZU9yVXBkYXRlQXR0YWNobWVudHMoYXR0YWNobWVudHM6IHJlYWRvbmx5IEF0dGFjaEluZm9bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjaGFuZ2VkID0ge307XG4gICAgICAgIGZvciAoY29uc3QgYXR0YWNobWVudCBvZiBhdHRhY2htZW50cykge1xuICAgICAgICAgICAgY2hhbmdlZFtgQGF0dGFjaG1lbnQvJHthdHRhY2htZW50LmlkfWBdID0ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRVcmk6IGF0dGFjaG1lbnQuY29udGVudFVyaSxcbiAgICAgICAgICAgICAgICBpZDogYXR0YWNobWVudC5pZCxcbiAgICAgICAgICAgICAgICBtZXRhOiBhdHRhY2htZW50Lm1ldGEsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiBjaGFuZ2VkLFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldFByZXNlbnRhdGlvbihwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsIGNvbnRlbnQ6IHN0cmluZyB8IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBDbGllbnQucHV0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpO1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhSYXdCb2R5KGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQnVmZmVyKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoUmF3Qm9keShjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhKc29uQm9keShjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCByZXF1ZXN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwYXRjaFByZXNlbnRhdGlvbihcbiAgICAgICAgcHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLFxuICAgICAgICBwcmVzZW50YXRpb25Db250ZW50OiBQcmVzZW50YXRpb25Db250ZW50XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKS53aXRoSnNvbkJvZHkocHJlc2VudGF0aW9uQ29udGVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZpbGVQcm9wZXJ0aWVzKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nLCBnZnY6IHN0cmluZyk6IFByb21pc2U8RmlsZVByb3BlcnRpZXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQoYHYxL2ZpbGVzL3ByZXBhcmUtYW5kLWdldC1wcm9wZXJ0aWVzYClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiwgZHJpdmVVcmk6IGRyaXZlVXJpIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDEzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvckRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgaWYgKGVycm9yRGF0YS5lcnJvckNvZGUgPT09IFwiRnVmU2l6ZVRvb0xhcmdlXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRnVmU2l6ZVRvb0xhcmdlRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcihlcnJvckRhdGEubWVzc2FnZSwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxGaWxlUHJvcGVydGllcz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdXBsb2FkQW5kR2V0RmlsZVByb3BlcnRpZXMoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxVcGxvYWRGaWxlUHJvcGVydGllc1Jlc3BvbnNlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KGB2MS9maWxlcy91cGxvYWQtYW5kLWdldC1wcm9wZXJ0aWVzYClcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcylcbiAgICAgICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwMClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248eyBlcnJvckNvZGU6IFNlcnZlckVycm9yczsgbWVzc2FnZTogc3RyaW5nIH0+KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IGRhdGEuZXJyb3JDb2RlLCBpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXM6IFwiXCIsIHNvdXJjZXNUb3RhbENvdW50OiAwIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjxVcGxvYWRGaWxlUHJvcGVydGllc1Jlc3BvbnNlPigpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IsXG4gICAgICAgICAgICAgICAgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLFxuICAgICAgICAgICAgICAgIHNvdXJjZXNUb3RhbENvdW50OiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRGdWZCeURyaXZlVXJpKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0VXJsKFwic2V0LWZ1ZlwiKSkud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZnVmRHJpdmVVcmk6IGRyaXZlVXJpLCBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG11bHRpcGxlQ29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2RcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9jb21iaW5lLXdpdGgtZnVmc1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcyk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxDb21iaW5lRnVmUmVzdWx0PigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBub3JtYWxpemVCeVJ1bGVzKHJ1bGVzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcIm5vcm1hbGl6ZVwiKSkud2l0aEpzb25Cb2R5KHJ1bGVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RHJhZnRVcmwoZHJhZnRSZWxhdGVkVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHYxL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJhZnRVcmwoYHByZXNlbnRhdGlvbnMvJHtwcmVzZW50YXRpb25UeXBlLnRvU3RyaW5nKCl9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB1cmkgPSB0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvY2hlY2stYWxsXCIpO1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godXJpKS53aXRoUXVlcnlQYXJhbXMoeyBzZXRFbmFibGVkOiBlbmFibGVkIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2hJbnN0YW5jZXNCeVRleHQoXG4gICAgICAgIHRleHQ6IHN0cmluZyxcbiAgICAgICAgcGF0aHNQcmVmaXg6IHN0cmluZyxcbiAgICAgICAgcGF0aHNUb1NlYXJjaDogc3RyaW5nW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IG1heEluc3RhbmNlQ291bnRQYXJhbXMgPSBtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCA/IHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudCB9IDoge307XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgc2VhcmNoU3RyaW5nOiB0ZXh0LCBwYXRoc1ByZWZpeDogcGF0aHNQcmVmaXgsIC4uLm1heEluc3RhbmNlQ291bnRQYXJhbXMgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL3NlYXJjaC1ieS1zdHJpbmdcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHBhcmFtcylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aHNUb1NlYXJjaClcbiAgICAgICAgICAgIC5qc29uPHN0cmluZ1tdPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjdXN0b21Ob3JtYWxpemUobm9ybWFsaXplcklkOiBzdHJpbmcsIHBhdGhQcmVmaXhlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBub3JtYWxpemVySWQ6IG5vcm1hbGl6ZXJJZCB9O1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9jdXN0b20tbm9ybWFsaXplXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhwYXJhbXMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhQcmVmaXhlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEVtcGxveWVlcyhyZXF1ZXN0OiBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0VXJsKFwic3RhZmZcIikpLndpdGhKc29uQm9keShyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGVsZXRlSW5zdGFuY2VzKG11bHRpcGxpY2l0eVBhdGg6IHN0cmluZywgaW5zdGFuY2VzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0geyBtdWx0aXBsaWNpdHlQYXRoOiBtdWx0aXBsaWNpdHlQYXRoLCBpbnN0YW5jZU51bWJlcnM6IGluc3RhbmNlcyB9O1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvZGVsZXRlLWluc3RhbmNlc1wiKSkud2l0aEpzb25Cb2R5KHBhcmFtZXRlcnMpO1xuICAgIH1cbn1cbiJdfQ==
|
|
550
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJuYW1lcyI6WyJzdHJhbmdlT3B0aW9ucyIsInNyYyIsImRhdGFWZXJzaW9uIiwiU2VydmVyRXJyb3JzIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiZm9yRHJhZnQiLCJkcmFmdEZ1bGxJZCIsIkNhbmR5QXBpRHJhZnRDbGllbnQiLCJjcmVhdGVEaWdlc3RBcGlDbGllbnQiLCJEaWdlc3RBcGlDbGllbnQiLCJnZXRJbmZvQnlJbm5zIiwiaW5ucyIsInBhdGhzIiwibWFwIiwiaW5uIiwicmVzcG9uc2UiLCJwb3N0IiwiZ2V0RHJhZnRVcmwiLCJ3aXRoSnNvbkJvZHkiLCJqc29uIiwicmVzdWx0IiwiaW5uU2VydmVyVmFsdWUiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImVycm9yIiwiZXJyb3JDb2RlIiwiRm9jdXNTZXJ2ZXJFcnJvckNvZGUiLCJOb0lubkVycm9yIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiYm9keSIsImdldCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwibnMiLCJmdWZEcml2ZVVyaSIsIndpdGhRdWVyeVBhcmFtcyIsIndpdGhBYm9ydFNpZ25hbCIsImNyZWF0ZUVtcHR5RHJhZnQiLCJnZnYiLCJjcmVhdGVEcmFmdCIsImZ1ZkNvbnRlbnQiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiRXJyb3IiLCJjaGVja0FsaXZlIiwiZHJhZnRSZWxhdGVkVXJsIiwiZHJhZnRJZCIsImdldEZlYXR1cmVGbGFncyIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwidXJsIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nIiwiZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZiIsImdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uIiwiRHJhZnRQcmVzZW50YXRpb25UeXBlIiwiaW5uZXJGdWYiLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJjbGllbnRJbmZvIiwiZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8iLCJmb3Jtc0NsaWVudEluZm8iLCJnZXRIcmVmRG93bmxvYWRJbm5lciIsImlubmVyIiwiZ2V0RXJyb3JMb2ciLCJnZXREcmFmdFByZXNlbnRhdGlvblVybCIsImVycm9yTG9nIiwiZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MiLCJjaGVja1NjZW5hcmlvcyIsImdldFRhc2tCeUlkIiwidGFza0lkIiwidGFza3MiLCJnZXRBbGxUYXNrcyIsIk9iamVjdCIsInZhbHVlcyIsIngiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiYWRkZWQiLCJjaGFuZ2VkIiwiaWQiLCJyZW1vdmVkIiwiY2FuY2VsVGFzayIsImdldEV4cGVydEVycm9yTG9nIiwiZXJyb3Jsb2dFeHBlcnQiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsInByb3BzRHJpdmVOYW1lIiwiY2xlYXJEcmFmdCIsImNvbnZlcnREcmFmdEZyb21QcmV2R2Z2IiwicHJldkdmdkRyYWZ0SWQiLCJzZW5kQ2hhbmdlU2V0IiwiZGF0YSIsImN1cnJlbnREYXRhVmVyc2lvbiIsImFjY2VwdENvZGUiLCJnZXRTdWNjZXNzUmVzdWx0IiwiZGF0YVJlc3VsdCIsIkRhdGFWZXJzaW9uIiwic3RhdHVzIiwic2VuZENoYW5nZVNldFN5bmMiLCJwb3N0U3luYyIsImdldFN1Y2Nlc3NSZXN1bHRTeW5jIiwiZ2V0UmVxdWlzaXRlcyIsInJlcXVpc2l0ZUxpc3QiLCJnZXRJbm5lciIsImdldFBhcnRpYWxJbm5lciIsInJ1bGVzIiwibWF4SW5zdGFuY2VDb3VudCIsInRvU3RyaW5nIiwiZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZSIsImZvcm1hdCIsImdldFJhd1BhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJnZXREYXRhVmVyc2lvbiIsImdldEV4cGxhbmF0b3J5Tm90ZSIsImV4cGxhbmF0b3J5Tm90ZSIsImdldEF0dGFjaG1lbnRCeUlkIiwiYXR0YWNobWVudElkIiwiZ2V0QWxsQXR0YWNobWVudHMiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiY29udGVudFVyaSIsIm1ldGEiLCJzZXRQcmVzZW50YXRpb24iLCJwcmVzZW50YXRpb25UeXBlIiwiY29udGVudCIsInJlcXVlc3QiLCJwdXQiLCJ3aXRoUmF3Qm9keSIsInBhdGNoUHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uQ29udGVudCIsInBhdGNoIiwiZ2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaSIsInByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyIsImVycm9yRGF0YSIsIkZ1ZlNpemVUb29MYXJnZUVycm9yIiwibWVzc2FnZSIsIkh0dHBFcnJvciIsInVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmlzIiwic2VydmVyRXJyb3IiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJzb3VyY2VzVG90YWxDb3VudCIsImUiLCJVbmtub3duRXJyb3IiLCJhY2NlcHRUcmFuc2ZlclR5cGUiLCJ0cmFuc2ZlclR5cGUiLCJ0eXBlSWQiLCJzZXRGdWZCeURyaXZlVXJpIiwiY29tYmluZUZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lTWV0aG9kIiwibXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaSIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzIiwiZW5hYmxlZCIsInVyaSIsInNldEVuYWJsZWQiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aHNQcmVmaXgiLCJwYXRoc1RvU2VhcmNoIiwibWF4SW5zdGFuY2VDb3VudFBhcmFtcyIsInBhcmFtcyIsInNlYXJjaFN0cmluZyIsImN1c3RvbU5vcm1hbGl6ZSIsIm5vcm1hbGl6ZXJJZCIsInBhdGhQcmVmaXhlcyIsImltcG9ydEVtcGxveWVlcyIsImRlbGV0ZUluc3RhbmNlcyIsIm11bHRpcGxpY2l0eVBhdGgiLCJpbnN0YW5jZXMiLCJwYXJhbWV0ZXJzIiwiaW5zdGFuY2VOdW1iZXJzIiwicnVuTWFzc0FjdGlvbiIsImFjdGlvbklkIiwicXVlcnlQYXJhbXMiLCJwcmludCIsInR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFFQTs7QUFXQTs7QUFFQTs7QUFPQTs7QUFHQTs7QUFFQTs7QUFPQSxNQUFNQSxjQUFjLEdBQUc7QUFBRUMsRUFBQUEsR0FBRyxFQUFFLFdBQVA7QUFBb0JDLEVBQUFBLFdBQVcsRUFBRTtBQUFqQyxDQUF2QjtJQUVZQyxZOzs7V0FBQUEsWTtBQUFBQSxFQUFBQSxZO0FBQUFBLEVBQUFBLFk7QUFBQUEsRUFBQUEsWTtHQUFBQSxZLDRCQUFBQSxZOztBQU1MLE1BQU1DLGNBQU4sQ0FBZ0Q7QUFHNUNDLEVBQUFBLFdBQVcsQ0FDZEMsU0FEYyxFQUVkQyxPQUZjLEVBR2RDLFlBSGMsRUFJZEMsY0FKYyxFQUtoQjtBQUFBLFNBUGVDLFVBT2Y7QUFDRSxTQUFLQSxVQUFMLEdBQWtCLElBQUlDLHNCQUFKLENBQWVMLFNBQWYsRUFBMEJDLE9BQTFCLEVBQW1DLHNEQUE2QkUsY0FBN0IsQ0FBbkMsRUFBaUY7QUFDL0ZELE1BQUFBLFlBQVksRUFBRUE7QUFEaUYsS0FBakYsQ0FBbEI7QUFHSDs7QUFFTUksRUFBQUEsUUFBUSxDQUFDQyxXQUFELEVBQWlEO0FBQzVELFdBQU8sSUFBSUMsbUJBQUosQ0FBd0IsS0FBS0osVUFBN0IsRUFBeUNHLFdBQXpDLENBQVA7QUFDSDs7QUFFTUUsRUFBQUEscUJBQXFCLENBQUNGLFdBQUQsRUFBNkM7QUFDckUsV0FBTyxJQUFJRyxnQ0FBSixDQUFvQixLQUFLTixVQUF6QixFQUFxQ0csV0FBckMsQ0FBUDtBQUNIOztBQUV5QixRQUFiSSxhQUFhLENBQUNKLFdBQUQsRUFBMkJLLElBQTNCLEVBQStFO0FBQ3JHLFVBQU1DLEtBQUssR0FBR0QsSUFBSSxDQUFDRSxHQUFMLENBQVNDLEdBQUcsSUFBSyxVQUFTQSxHQUFJLEVBQTlCLENBQWQ7QUFDQSxVQUFNQyxRQUFRLEdBQUcsTUFBTSxLQUFLWixVQUFMLENBQ2xCYSxJQURrQixDQUNiLEtBQUtDLFdBQUwsQ0FBaUJYLFdBQWpCLEVBQThCLFdBQTlCLENBRGEsRUFFbEJZLFlBRmtCLENBRUxOLEtBRkssRUFHbEJPLElBSGtCLEVBQXZCO0FBSUEsVUFBTUMsTUFBd0IsR0FBRyxFQUFqQzs7QUFDQSxTQUFLLE1BQU1OLEdBQVgsSUFBa0JILElBQWxCLEVBQXdCO0FBQUE7O0FBQ3BCLFlBQU1VLGNBQWMsaUJBQUdOLFFBQVEsQ0FBRSxVQUFTRCxHQUFJLEVBQWYsQ0FBWCwrQ0FBRyxXQUEyQlEsS0FBbEQ7O0FBQ0EsVUFBSUQsY0FBYyxJQUFJRSxTQUF0QixFQUFpQztBQUM3QkgsUUFBQUEsTUFBTSxDQUFDTixHQUFELENBQU4sR0FBYztBQUNWUSxVQUFBQSxLQUFLLEVBQUVDLFNBREc7QUFFVkMsVUFBQUEsS0FBSyxFQUFFLGlDQUZHO0FBR1ZDLFVBQUFBLFNBQVMsRUFBRUMsaUNBQXFCQztBQUh0QixTQUFkO0FBS0gsT0FORCxNQU1PO0FBQUE7O0FBQ0hQLFFBQUFBLE1BQU0sQ0FBQ04sR0FBRCxDQUFOLEdBQWM7QUFDVlEsVUFBQUEsS0FBSywyQkFBRUQsY0FBYyxDQUFDQyxLQUFqQix5RUFBMEJDLFNBRHJCO0FBRVZFLFVBQUFBLFNBQVMsMkJBQUVKLGNBQWMsQ0FBQ0ksU0FBakIseUVBQThCRixTQUY3QjtBQUdWQyxVQUFBQSxLQUFLLDRCQUFFSCxjQUFjLENBQUNHLEtBQWpCLDJFQUEwQkQ7QUFIckIsU0FBZDtBQUtIO0FBQ0o7O0FBQ0QsV0FBT0gsTUFBUDtBQUNIOztBQUVzQixRQUFWUSxVQUFVLENBQUNDLFdBQUQsRUFBK0M7QUFDbEUsVUFBTUMsSUFBSSxHQUFHLE1BQU0sS0FBSzNCLFVBQUwsQ0FBZ0I0QixHQUFoQixDQUFxQixtQkFBckIsRUFBeUNaLElBQXpDLEVBQW5CO0FBQ0EsV0FBT1csSUFBUDtBQUNIOztBQUVnQyxRQUFwQkUsb0JBQW9CLENBQzdCQyxFQUQ2QixFQUU3QkMsV0FGNkIsRUFHN0JMLFdBSDZCLEVBSUQ7QUFDNUIsV0FBTyxNQUFNLEtBQUsxQixVQUFMLENBQ1JhLElBRFEsQ0FDRixTQUFRaUIsRUFBRywwQkFEVCxFQUVSRSxlQUZRLENBRVE7QUFDYkYsTUFBQUEsRUFBRSxFQUFFQSxFQURTO0FBRWJDLE1BQUFBLFdBQVcsRUFBRUE7QUFGQSxLQUZSLEVBTVJFLGVBTlEsQ0FNUVAsV0FOUixFQU9SVixJQVBRLEVBQWI7QUFRSDs7QUFFNEIsUUFBaEJrQixnQkFBZ0IsQ0FBQ0osRUFBRCxFQUFhSyxHQUFiLEVBQTBCVCxXQUExQixFQUFtRjtBQUM1RyxXQUFPLE1BQU0sS0FBSzFCLFVBQUwsQ0FDUmEsSUFEUSxDQUNGLFNBQVFpQixFQUFHLGVBRFQsRUFFUkUsZUFGUSxDQUVRO0FBQUVHLE1BQUFBLEdBQUcsRUFBRUE7QUFBUCxLQUZSLEVBR1JGLGVBSFEsQ0FHUVAsV0FIUixFQUlSVixJQUpRLEVBQWI7QUFLSDs7QUFJdUIsUUFBWG9CLFdBQVcsQ0FBQ04sRUFBRCxFQUFhSyxHQUFiLEVBQXNDRSxVQUF0QyxFQUF5RjtBQUM3RyxRQUFJRixHQUFHLElBQUlmLFNBQVAsSUFBb0JpQixVQUFVLElBQUlqQixTQUF0QyxFQUFpRDtBQUM3QyxhQUFPLE1BQU0sS0FBS3BCLFVBQUwsQ0FDUmEsSUFEUSxDQUNGLFNBQVFpQixFQUFHLGVBRFQsRUFFUlEsZUFGUSxDQUVRLDBCQUZSLEVBR1JDLGtCQUhRLENBR1dGLFVBSFgsRUFJUnJCLElBSlEsRUFBYjtBQUtIOztBQUNELFFBQUltQixHQUFHLElBQUlmLFNBQVAsSUFBb0JpQixVQUFVLElBQUlqQixTQUF0QyxFQUFpRDtBQUM3QyxhQUFPLE1BQU0sS0FBS3BCLFVBQUwsQ0FDUmEsSUFEUSxDQUNGLFNBQVFpQixFQUFHLGVBRFQsRUFFUkUsZUFGUSxDQUVRO0FBQUVHLFFBQUFBLEdBQUcsRUFBRUE7QUFBUCxPQUZSLEVBR1JHLGVBSFEsQ0FHUSwwQkFIUixFQUlSQyxrQkFKUSxDQUlXQyxNQUFNLENBQUNDLElBQVAsQ0FBWSxFQUFaLENBSlgsRUFLUnpCLElBTFEsRUFBYjtBQU1IOztBQUNELFFBQUltQixHQUFHLElBQUlmLFNBQVAsSUFBb0JpQixVQUFVLElBQUlqQixTQUF0QyxFQUFpRDtBQUM3QyxZQUFNLElBQUlzQixLQUFKLENBQVUsa0RBQVYsQ0FBTjtBQUNIOztBQUNELFdBQU8sTUFBTSxLQUFLMUMsVUFBTCxDQUNSYSxJQURRLENBQ0YsU0FBUWlCLEVBQUcsZUFEVCxFQUVSRSxlQUZRLENBRVE7QUFBRUcsTUFBQUEsR0FBRyxFQUFFQTtBQUFQLEtBRlIsRUFHUkcsZUFIUSxDQUdRLDBCQUhSLEVBSVJDLGtCQUpRLENBSVdGLFVBSlgsRUFLUnJCLElBTFEsRUFBYjtBQU1IOztBQUVzQixRQUFWMkIsVUFBVSxHQUFrQjtBQUNyQyxVQUFNLEtBQUszQyxVQUFMLENBQWdCNEIsR0FBaEIsQ0FBcUIsY0FBckIsQ0FBTjtBQUNIOztBQUVPZCxFQUFBQSxXQUFXLENBQUNYLFdBQUQsRUFBMkJ5QyxlQUEzQixFQUE0RDtBQUMzRSxXQUFRLFNBQVF6QyxXQUFXLENBQUMyQixFQUFHLFdBQVUzQixXQUFXLENBQUMwQyxPQUFRLElBQUdELGVBQWdCLEVBQWhGO0FBQ0g7O0FBRTJCLFFBQWZFLGVBQWUsR0FBa0M7QUFDMUQsV0FBTyxNQUFNLEtBQUs5QyxVQUFMLENBQWdCNEIsR0FBaEIsQ0FBb0IsbUJBQXBCLEVBQXlDWixJQUF6QyxFQUFiO0FBQ0g7O0FBbkhrRDs7OztBQXNIaEQsTUFBTVosbUJBQU4sQ0FBMEQ7QUFJdERULEVBQUFBLFdBQVcsQ0FBQ0ssVUFBRCxFQUEwQkcsV0FBMUIsRUFBb0Q7QUFBQSxTQUhyREgsVUFHcUQ7QUFBQSxTQUZyREcsV0FFcUQ7QUFDbEUsU0FBS0gsVUFBTCxHQUFrQkEsVUFBbEI7QUFDQSxTQUFLRyxXQUFMLEdBQW1CQSxXQUFuQjtBQUNIOztBQUVNNEMsRUFBQUEsb0JBQW9CLEdBQVc7QUFDbEMsV0FBTyxLQUFLL0MsVUFBTCxDQUFnQmdELEdBQWhCLENBQXFCLG1CQUFrQixLQUFLN0MsV0FBTCxDQUFpQjJCLEVBQUcsV0FBVSxLQUFLM0IsV0FBTCxDQUFpQjBDLE9BQVEsRUFBOUYsQ0FBUDtBQUNIOztBQUVNSSxFQUFBQSxrQkFBa0IsR0FBVztBQUNoQyxXQUFPLEtBQUtqRCxVQUFMLENBQWdCZ0QsR0FBaEIsQ0FBb0IsS0FBS2xDLFdBQUwsQ0FBaUIsU0FBakIsQ0FBcEIsQ0FBUDtBQUNIOztBQUVNb0MsRUFBQUEsd0JBQXdCLEdBQVc7QUFDdEMsV0FBTyxLQUFLbEQsVUFBTCxDQUFnQmdELEdBQWhCLENBQW9CLEtBQUtsQyxXQUFMLENBQWlCLFlBQWpCLENBQXBCLENBQVA7QUFDSDs7QUFFTXFDLEVBQUFBLHlCQUF5QixHQUFXO0FBQ3ZDLFdBQU8sS0FBS0MsZ0NBQUwsQ0FBc0NDLDZDQUFzQkMsUUFBNUQsQ0FBUDtBQUNIOztBQUVNQyxFQUFBQSwyQkFBMkIsR0FBVztBQUN6QyxXQUFPLEtBQUtILGdDQUFMLENBQXNDQyw2Q0FBc0JHLFVBQTVELENBQVA7QUFDSDs7QUFFTUMsRUFBQUEsZ0NBQWdDLEdBQVc7QUFDOUMsV0FBTyxLQUFLTCxnQ0FBTCxDQUFzQ0MsNkNBQXNCSyxlQUE1RCxDQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLG9CQUFvQixHQUFXO0FBQ2xDLFdBQU8sS0FBS1AsZ0NBQUwsQ0FBc0NDLDZDQUFzQk8sS0FBNUQsQ0FBUDtBQUNIOztBQUV1QixRQUFYQyxXQUFXLEdBQTRCO0FBQ2hELFdBQU8sS0FBSzdELFVBQUwsQ0FBZ0I0QixHQUFoQixDQUFvQixLQUFLa0MsdUJBQUwsQ0FBNkJULDZDQUFzQlUsUUFBbkQsQ0FBcEIsRUFBa0YvQyxJQUFsRixFQUFQO0FBQ0g7O0FBRXlDLFFBQTdCZ0QsNkJBQTZCLENBQUNDLGNBQUQsRUFBK0Q7QUFDckcsV0FBTyxLQUFLakUsVUFBTCxDQUNGYSxJQURFLENBQ0csS0FBS0MsV0FBTCxDQUFpQixVQUFqQixDQURILEVBRUZDLFlBRkUsQ0FFVztBQUFFa0QsTUFBQUEsY0FBYyxFQUFFQTtBQUFsQixLQUZYLEVBR0ZqRCxJQUhFLEVBQVA7QUFJSDs7QUFFdUIsUUFBWGtELFdBQVcsQ0FBQ0MsTUFBRCxFQUFrRDtBQUFBOztBQUN0RSxVQUFNQyxLQUFLLEdBQUcsTUFBTSxLQUFLcEUsVUFBTCxDQUNmYSxJQURlLENBQ1YsS0FBS0MsV0FBTCxDQUFpQixXQUFqQixDQURVLEVBRWZDLFlBRmUsQ0FFRixDQUFFLFNBQUYsQ0FGRSxFQUdmQyxJQUhlLEVBQXBCO0FBSUEsc0JBQU9vRCxLQUFLLENBQUUsU0FBUUQsTUFBTyxFQUFqQixDQUFaLDRDQUFPLFFBQTBCaEQsS0FBakM7QUFDSDs7QUFFdUIsUUFBWGtELFdBQVcsR0FBMEI7QUFDOUMsVUFBTUQsS0FBSyxHQUFHLE1BQU0sS0FBS3BFLFVBQUwsQ0FDZmEsSUFEZSxDQUNWLEtBQUtDLFdBQUwsQ0FBaUIsV0FBakIsQ0FEVSxFQUVmQyxZQUZlLENBRUYsQ0FBRSxTQUFGLENBRkUsRUFHZkMsSUFIZSxFQUFwQjtBQUlBLFdBQU9zRCxNQUFNLENBQUNDLE1BQVAsQ0FBY0gsS0FBZCxFQUFxQjFELEdBQXJCLENBQXlCOEQsQ0FBQyxJQUFJQSxDQUFDLENBQUNyRCxLQUFoQyxDQUFQO0FBQ0g7O0FBRXVCLFFBQVhzRCxXQUFXLENBQUNOLE1BQUQsRUFBaUJPLFFBQWpCLEVBQStFO0FBQ25HLFVBQU0sS0FBSzFFLFVBQUwsQ0FDRGEsSUFEQyxDQUNJLEtBQUtpRCx1QkFBTCxDQUE2QlQsNkNBQXNCTyxLQUFuRCxDQURKLEVBRUQ1QixlQUZDLENBRWUxQyxjQUZmLEVBR0R5QixZQUhDLENBR1k7QUFDVjRELE1BQUFBLEtBQUssRUFBRSxFQURHO0FBRVZDLE1BQUFBLE9BQU8sRUFBRTtBQUNMLFNBQUUsU0FBUVQsTUFBTyxFQUFqQixHQUFxQixFQUNqQixHQUFHTyxRQURjO0FBRWpCRyxVQUFBQSxFQUFFLEVBQUVWO0FBRmE7QUFEaEIsT0FGQztBQVFWVyxNQUFBQSxPQUFPLEVBQUU7QUFSQyxLQUhaLENBQU47QUFhSDs7QUFFc0IsUUFBVkMsVUFBVSxDQUFDWixNQUFELEVBQWdDO0FBQ25ELFVBQU0sS0FBS25FLFVBQUwsQ0FDRGEsSUFEQyxDQUNJLEtBQUtpRCx1QkFBTCxDQUE2QlQsNkNBQXNCTyxLQUFuRCxDQURKLEVBRUQ1QixlQUZDLENBRWUxQyxjQUZmLEVBR0R5QixZQUhDLENBR1k7QUFDVjRELE1BQUFBLEtBQUssRUFBRSxFQURHO0FBRVZDLE1BQUFBLE9BQU8sRUFBRSxFQUZDO0FBR1ZFLE1BQUFBLE9BQU8sRUFBRSxDQUFFLFNBQVFYLE1BQU8sRUFBakI7QUFIQyxLQUhaLENBQU47QUFRSDs7QUFFTWEsRUFBQUEsaUJBQWlCLEdBQTRCO0FBQ2hELFdBQU8sS0FBS2hGLFVBQUwsQ0FDRjRCLEdBREUsQ0FDRSxLQUFLa0MsdUJBQUwsQ0FBNkJULDZDQUFzQjRCLGNBQW5ELENBREYsRUFFRmpFLElBRkUsRUFBUDtBQUdIOztBQUVNa0UsRUFBQUEsb0JBQW9CLENBQUNDLFlBQUQsRUFBdUJDLFNBQXZCLEVBQWtEO0FBQ3pFLFdBQU8sS0FBS3BGLFVBQUwsQ0FBZ0JnRCxHQUFoQixDQUFvQixLQUFLbEMsV0FBTCxDQUFpQiw4QkFBakIsQ0FBcEIsRUFBc0U7QUFDekVxRSxNQUFBQSxZQUFZLEVBQUVBLFlBRDJEO0FBRXpFRSxNQUFBQSxjQUFjLEVBQUVEO0FBRnlELEtBQXRFLENBQVA7QUFJSDs7QUFFc0IsUUFBVkUsVUFBVSxHQUFrQjtBQUNyQyxVQUFNLEtBQUt0RixVQUFMLENBQWdCYSxJQUFoQixDQUFxQixLQUFLQyxXQUFMLENBQWlCLE9BQWpCLENBQXJCLENBQU47QUFDSDs7QUFFbUMsUUFBdkJ5RSx1QkFBdUIsQ0FBQztBQUFFQyxJQUFBQSxjQUFGO0FBQWtCckQsSUFBQUE7QUFBbEIsR0FBRCxFQUE4RDtBQUM5RixVQUFNLEtBQUtuQyxVQUFMLENBQWdCYSxJQUFoQixDQUFxQixLQUFLQyxXQUFMLENBQWlCLFNBQWpCLENBQXJCLEVBQWtEa0IsZUFBbEQsQ0FBa0U7QUFDcEU2QyxNQUFBQSxFQUFFLEVBQUVXLGNBRGdFO0FBRXBFckQsTUFBQUEsR0FBRyxFQUFFQTtBQUYrRCxLQUFsRSxDQUFOO0FBSUg7O0FBRXlCLFFBQWJzRCxhQUFhLENBQUNDLElBQUQsRUFBd0JDLGtCQUF4QixFQUFtRjtBQUN6RyxVQUFNMUUsTUFBTSxHQUFHLE1BQU0sS0FBS2pCLFVBQUwsQ0FDaEJhLElBRGdCLENBQ1gsS0FBS0MsV0FBTCxDQUFpQixPQUFqQixDQURXLEVBRWhCa0IsZUFGZ0IsQ0FFQTtBQUFFeEMsTUFBQUEsV0FBVyxFQUFFbUc7QUFBZixLQUZBLEVBR2hCNUUsWUFIZ0IsQ0FHSDJFLElBSEcsRUFJaEJFLFVBSmdCLENBSUwsR0FKSyxDQUFyQixDQUR5RyxDQU96RztBQUNBOztBQUNBLFVBQU1DLGdCQUFnQixHQUFHLFlBQVk7QUFBQTs7QUFDakMsWUFBTUMsVUFBVSxHQUFHLE1BQU03RSxNQUFNLENBQUNELElBQVAsRUFBekI7QUFDQSxhQUFPO0FBQ0h4QixRQUFBQSxXQUFXLG1DQUNQc0csVUFETyxhQUNQQSxVQURPLHVCQUNQQSxVQUFVLENBQUV0RyxXQURMLHlFQUVQc0csVUFGTyxhQUVQQSxVQUZPLHVCQUVQQSxVQUFVLENBQUVDLFdBRkwsdUNBR1AseUJBQU8sZ0RBQVA7QUFKRCxPQUFQO0FBTUgsS0FSRDs7QUFVQSxXQUFPOUUsTUFBTSxDQUFDK0UsTUFBUCxJQUFpQixHQUFqQixHQUF1QixNQUFNSCxnQkFBZ0IsRUFBN0MsR0FBa0Q1RSxNQUFNLENBQUMrRSxNQUFoRTtBQUNIOztBQUVNQyxFQUFBQSxpQkFBaUIsQ0FBQ1AsSUFBRCxFQUF3QkMsa0JBQXhCLEVBQTBFO0FBQzlGLFVBQU0xRSxNQUFNLEdBQUcsS0FBS2pCLFVBQUwsQ0FBZ0JrRyxRQUFoQixDQUNYLEtBQUtwQyx1QkFBTCxDQUE2QlQsNkNBQXNCTyxLQUFuRCxDQURXLEVBRVg7QUFBRXBFLE1BQUFBLFdBQVcsRUFBRW1HO0FBQWYsS0FGVyxFQUdYRCxJQUhXLENBQWYsQ0FEOEYsQ0FPOUY7QUFDQTs7QUFDQSxVQUFNUyxvQkFBb0IsR0FBRyxNQUFNO0FBQUE7O0FBQy9CLFlBQU1MLFVBQVUsR0FBRzdFLE1BQU0sQ0FBQ0QsSUFBUCxFQUFuQjtBQUNBLGFBQU87QUFDSHhCLFFBQUFBLFdBQVcscUNBQ1BzRyxVQURPLGFBQ1BBLFVBRE8sdUJBQ1BBLFVBQVUsQ0FBRXRHLFdBREwsMkVBRVBzRyxVQUZPLGFBRVBBLFVBRk8sdUJBRVBBLFVBQVUsQ0FBRUMsV0FGTCx5Q0FHUCx5QkFBTyxnREFBUDtBQUpELE9BQVA7QUFNSCxLQVJEOztBQVNBLFdBQU85RSxNQUFNLENBQUMrRSxNQUFQLElBQWlCLEdBQWpCLEdBQXVCRyxvQkFBb0IsRUFBM0MsR0FBZ0RsRixNQUFNLENBQUMrRSxNQUE5RDtBQUNIOztBQUV5QixRQUFiSSxhQUFhLENBQUNDLGFBQUQsRUFBc0U7QUFDNUYsV0FBTyxNQUFNLEtBQUtyRyxVQUFMLENBQ1JhLElBRFEsQ0FDSCxLQUFLQyxXQUFMLENBQWlCLFdBQWpCLENBREcsRUFFUkMsWUFGUSxDQUVLc0YsYUFGTCxFQUdSckYsSUFIUSxFQUFiO0FBSUg7O0FBRW9CLFFBQVJzRixRQUFRLENBQUM3RixLQUFELEVBQXFFO0FBQ3RGLFdBQU8sTUFBTSxLQUFLVCxVQUFMLENBQ1JhLElBRFEsQ0FDSCxLQUFLQyxXQUFMLENBQWlCLFdBQWpCLENBREcsRUFFUkMsWUFGUSxDQUVLTixLQUZMLEVBR1JPLElBSFEsRUFBYjtBQUlIOztBQUVNdUYsRUFBQUEsZUFBZSxDQUFDQyxLQUFELEVBQTBCQyxnQkFBMUIsRUFBbUY7QUFDckcsV0FBTyxLQUFLekcsVUFBTCxDQUNGYSxJQURFLENBQ0csS0FBS0MsV0FBTCxDQUFpQixtQkFBakIsQ0FESCxFQUVGa0IsZUFGRSxDQUVjeUUsZ0JBQWdCLElBQUlyRixTQUFwQixJQUFpQztBQUFFcUYsTUFBQUEsZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDQyxRQUFqQjtBQUFwQixLQUYvQyxFQUdGM0YsWUFIRSxDQUdXeUYsS0FIWCxFQUlGeEYsSUFKRSxFQUFQO0FBS0g7O0FBRXFDLFFBQXpCMkYseUJBQXlCLENBQ2xDSCxLQURrQyxFQUVsQ0MsZ0JBRmtDLEVBR1A7QUFDM0IsV0FBTyxLQUFLekcsVUFBTCxDQUNGYSxJQURFLENBQ0csS0FBS0MsV0FBTCxDQUFpQixtQkFBakIsQ0FESCxFQUVGa0IsZUFGRSxDQUVjeUUsZ0JBQWdCLElBQUlyRixTQUFwQixJQUFpQztBQUFFcUYsTUFBQUEsZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDQyxRQUFqQjtBQUFwQixLQUYvQyxFQUdGMUUsZUFIRSxDQUdjO0FBQUU0RSxNQUFBQSxNQUFNLEVBQUU7QUFBVixLQUhkLEVBSUY3RixZQUpFLENBSVd5RixLQUpYLEVBS0Z4RixJQUxFLEVBQVA7QUFNSDs7QUFFTTZGLEVBQUFBLDRCQUE0QixDQUMvQkwsS0FEK0IsRUFFL0JDLGdCQUYrQixFQUdMO0FBQzFCLFdBQU8sS0FBS3pHLFVBQUwsQ0FDRmEsSUFERSxDQUNHLEtBQUtDLFdBQUwsQ0FBaUIsb0JBQWpCLENBREgsRUFFRmtCLGVBRkUsQ0FFY3lFLGdCQUFnQixJQUFJckYsU0FBcEIsSUFBaUM7QUFBRXFGLE1BQUFBLGdCQUFnQixFQUFFQSxnQkFBZ0IsQ0FBQ0MsUUFBakI7QUFBcEIsS0FGL0MsRUFHRjNGLFlBSEUsQ0FHV3lGLEtBSFgsRUFJRnhGLElBSkUsRUFBUDtBQUtIOztBQUVNOEYsRUFBQUEsY0FBYyxHQUFvQjtBQUNyQyxXQUFPLEtBQUs5RyxVQUFMLENBQWdCNEIsR0FBaEIsQ0FBb0IsS0FBS2QsV0FBTCxDQUFpQix3QkFBakIsQ0FBcEIsRUFBZ0VFLElBQWhFLEVBQVA7QUFDSDs7QUFFOEIsUUFBbEIrRixrQkFBa0IsR0FBMkM7QUFDdEUsV0FBTyxNQUFNLEtBQUsvRyxVQUFMLENBQ1I0QixHQURRLENBQ0osS0FBS2tDLHVCQUFMLENBQTZCVCw2Q0FBc0IyRCxlQUFuRCxDQURJLEVBRVJoRyxJQUZRLEVBQWI7QUFHSDs7QUFFNkIsUUFBakJpRyxpQkFBaUIsQ0FBQ0MsWUFBRCxFQUE0QztBQUFBOztBQUN0RSxVQUFNakcsTUFBTSxHQUFHLE1BQU0sS0FBS2pCLFVBQUwsQ0FDaEJhLElBRGdCLENBQ1gsS0FBS0MsV0FBTCxDQUFpQixXQUFqQixDQURXLEVBRWhCQyxZQUZnQixDQUVILENBQUUsZUFBY21HLFlBQWEsRUFBN0IsQ0FGRyxFQUdoQmxHLElBSGdCLEVBQXJCO0FBSUEseUNBQU9DLE1BQU0sQ0FBRSxlQUFjaUcsWUFBYSxFQUE3QixDQUFiLDZDQUFPLFNBQXVDL0YsS0FBOUMsMkRBQXVELDBCQUF2RDtBQUNIOztBQUU2QixRQUFqQmdHLGlCQUFpQixHQUEwQjtBQUNwRCxVQUFNbEcsTUFBTSxHQUFHLE1BQU0sS0FBS2pCLFVBQUwsQ0FDaEJhLElBRGdCLENBQ1gsS0FBS0MsV0FBTCxDQUFpQixXQUFqQixDQURXLEVBRWhCQyxZQUZnQixDQUVILENBQUUsZUFBRixDQUZHLEVBR2hCQyxJQUhnQixFQUFyQjtBQUlBLFdBQU9zRCxNQUFNLENBQUNDLE1BQVAsQ0FBY3RELE1BQWQsRUFBc0JQLEdBQXRCLENBQTBCOEQsQ0FBQyxJQUFJQSxDQUFDLENBQUNyRCxLQUFqQyxDQUFQO0FBQ0g7O0FBRTZCLFFBQWpCaUcsaUJBQWlCLENBQUNDLGFBQUQsRUFBa0Q7QUFDNUUsVUFBTSxLQUFLckgsVUFBTCxDQUNEYSxJQURDLENBQ0ksS0FBS2lELHVCQUFMLENBQTZCVCw2Q0FBc0JPLEtBQW5ELENBREosRUFFRDVCLGVBRkMsQ0FFZTFDLGNBRmYsRUFHRHlCLFlBSEMsQ0FHWTtBQUNWNEQsTUFBQUEsS0FBSyxFQUFFLEVBREc7QUFFVkMsTUFBQUEsT0FBTyxFQUFFLEVBRkM7QUFHVkUsTUFBQUEsT0FBTyxFQUFFdUMsYUFBYSxDQUFDM0csR0FBZCxDQUFrQm1FLEVBQUUsSUFBSyxlQUFjQSxFQUFHLEVBQTFDO0FBSEMsS0FIWixDQUFOO0FBUUg7O0FBRXFDLFFBQXpCeUMseUJBQXlCLENBQUNDLFdBQUQsRUFBb0Q7QUFDdEYsVUFBTTNDLE9BQU8sR0FBRyxFQUFoQjs7QUFDQSxTQUFLLE1BQU00QyxVQUFYLElBQXlCRCxXQUF6QixFQUFzQztBQUNsQzNDLE1BQUFBLE9BQU8sQ0FBRSxlQUFjNEMsVUFBVSxDQUFDM0MsRUFBRyxFQUE5QixDQUFQLEdBQTBDO0FBQ3RDNEMsUUFBQUEsVUFBVSxFQUFFRCxVQUFVLENBQUNDLFVBRGU7QUFFdEM1QyxRQUFBQSxFQUFFLEVBQUUyQyxVQUFVLENBQUMzQyxFQUZ1QjtBQUd0QzZDLFFBQUFBLElBQUksRUFBRUYsVUFBVSxDQUFDRTtBQUhxQixPQUExQztBQUtIOztBQUNELFVBQU0sS0FBSzFILFVBQUwsQ0FDRGEsSUFEQyxDQUNJLEtBQUtpRCx1QkFBTCxDQUE2QlQsNkNBQXNCTyxLQUFuRCxDQURKLEVBRUQ1QixlQUZDLENBRWUxQyxjQUZmLEVBR0R5QixZQUhDLENBR1k7QUFDVjRELE1BQUFBLEtBQUssRUFBRSxFQURHO0FBRVZDLE1BQUFBLE9BQU8sRUFBRUEsT0FGQztBQUdWRSxNQUFBQSxPQUFPLEVBQUU7QUFIQyxLQUhaLENBQU47QUFRSDs7QUFFMkIsUUFBZjZDLGVBQWUsQ0FBQ0MsZ0JBQUQsRUFBMENDLE9BQTFDLEVBQW9GO0FBQzVHLFFBQUlDLE9BQU8sR0FBRyxLQUFLOUgsVUFBTCxDQUFnQitILEdBQWhCLENBQW9CLEtBQUtqRSx1QkFBTCxDQUE2QjhELGdCQUE3QixDQUFwQixDQUFkOztBQUNBLFFBQUksT0FBT0MsT0FBUCxLQUFtQixRQUF2QixFQUFpQztBQUM3QkMsTUFBQUEsT0FBTyxHQUFHQSxPQUFPLENBQUNFLFdBQVIsQ0FBb0JILE9BQXBCLENBQVY7QUFDSCxLQUZELE1BRU8sSUFBSSx3QkFBU0EsT0FBVCxDQUFKLEVBQXVCO0FBQzFCQyxNQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0UsV0FBUixDQUFvQkgsT0FBcEIsQ0FBVjtBQUNILEtBRk0sTUFFQTtBQUNIQyxNQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQy9HLFlBQVIsQ0FBcUI4RyxPQUFyQixDQUFWO0FBQ0g7O0FBQ0QsVUFBTUMsT0FBTjtBQUNIOztBQUU2QixRQUFqQkcsaUJBQWlCLENBQzFCTCxnQkFEMEIsRUFFMUJNLG1CQUYwQixFQUdiO0FBQ2IsVUFBTSxLQUFLbEksVUFBTCxDQUFnQm1JLEtBQWhCLENBQXNCLEtBQUtyRSx1QkFBTCxDQUE2QjhELGdCQUE3QixDQUF0QixFQUFzRTdHLFlBQXRFLENBQW1GbUgsbUJBQW5GLENBQU47QUFDSDs7QUFFNkIsUUFBakJFLGlCQUFpQixDQUFDQyxRQUFELEVBQXdEO0FBQ2xGLFVBQU16SCxRQUFRLEdBQUcsTUFBTSxLQUFLWixVQUFMLENBQ2xCNEIsR0FEa0IsQ0FDYix5QkFEYSxFQUVsQkksZUFGa0IsQ0FFRjtBQUFFcUcsTUFBQUEsUUFBUSxFQUFFQTtBQUFaLEtBRkUsRUFHbEJ6QyxVQUhrQixDQUdQLEdBSE8sQ0FBdkI7O0FBSUEsUUFBSWhGLFFBQVEsQ0FBQ29GLE1BQVQsS0FBb0IsR0FBeEIsRUFBNkI7QUFDekIsYUFBTzVFLFNBQVA7QUFDSDs7QUFDRCxXQUFPLE1BQU1SLFFBQVEsQ0FBQ0ksSUFBVCxFQUFiO0FBQ0g7O0FBRXVDLFFBQTNCc0gsMkJBQTJCLENBQUNELFFBQUQsRUFBbUJsRyxHQUFuQixFQUFxRTtBQUN6RyxVQUFNdkIsUUFBUSxHQUFHLE1BQU0sS0FBS1osVUFBTCxDQUNsQjRCLEdBRGtCLENBQ2IscUNBRGEsRUFFbEJJLGVBRmtCLENBRUY7QUFBRUcsTUFBQUEsR0FBRyxFQUFFQSxHQUFQO0FBQVlrRyxNQUFBQSxRQUFRLEVBQUVBO0FBQXRCLEtBRkUsRUFHbEJ6QyxVQUhrQixDQUdQLEdBSE8sQ0FBdkI7O0FBSUEsUUFBSWhGLFFBQVEsQ0FBQ29GLE1BQVQsS0FBb0IsR0FBeEIsRUFBNkI7QUFDekIsYUFBTzVFLFNBQVA7QUFDSDs7QUFDRCxRQUFJUixRQUFRLENBQUNvRixNQUFULEtBQW9CLEdBQXhCLEVBQTZCO0FBQ3pCLFlBQU11QyxTQUFTLEdBQUcsTUFBTTNILFFBQVEsQ0FBQ0ksSUFBVCxFQUF4Qjs7QUFDQSxVQUFJdUgsU0FBUyxDQUFDakgsU0FBVixLQUF3QixpQkFBNUIsRUFBK0M7QUFDM0MsY0FBTSxJQUFJa0gsMENBQUosQ0FBeUJELFNBQVMsQ0FBQ0UsT0FBbkMsQ0FBTjtBQUNIOztBQUNELFlBQU0sSUFBSUMscUJBQUosQ0FBY0gsU0FBUyxDQUFDRSxPQUF4QixFQUFpQzdILFFBQVEsQ0FBQ29GLE1BQTFDLENBQU47QUFDSDs7QUFDRCxXQUFPLE1BQU1wRixRQUFRLENBQUNJLElBQVQsRUFBYjtBQUNIOztBQUVzQyxRQUExQjJILDBCQUEwQixDQUNuQ0MsU0FEbUMsRUFFbkN6RyxHQUZtQyxFQUduQ1QsV0FIbUMsRUFJRTtBQUNyQyxRQUFJO0FBQ0EsWUFBTWQsUUFBUSxHQUFHLE1BQU0sS0FBS1osVUFBTCxDQUNsQmEsSUFEa0IsQ0FDWixvQ0FEWSxFQUVsQm1CLGVBRmtCLENBRUY7QUFBRUcsUUFBQUEsR0FBRyxFQUFFQTtBQUFQLE9BRkUsRUFHbEJwQixZQUhrQixDQUdMNkgsU0FISyxFQUlsQjNHLGVBSmtCLENBSUZQLFdBSkUsRUFLbEJrRSxVQUxrQixDQUtQLEdBTE8sRUFNbEJBLFVBTmtCLENBTVAsR0FOTyxDQUF2Qjs7QUFPQSxVQUFJaEYsUUFBUSxDQUFDb0YsTUFBVCxLQUFvQixHQUF4QixFQUE2QjtBQUN6QixjQUFNTixJQUFJLEdBQUcsTUFBTTlFLFFBQVEsQ0FBQ0ksSUFBVCxFQUFuQjtBQUNBLGVBQU87QUFBRTZILFVBQUFBLFdBQVcsRUFBRW5ELElBQUksQ0FBQ3BFLFNBQXBCO0FBQStCd0gsVUFBQUEsOEJBQThCLEVBQUUsRUFBL0Q7QUFBbUVDLFVBQUFBLGlCQUFpQixFQUFFO0FBQXRGLFNBQVA7QUFDSDs7QUFDRCxZQUFNckQsSUFBSSxHQUFHLE1BQU05RSxRQUFRLENBQUNJLElBQVQsRUFBbkI7QUFDQSxhQUFPMEUsSUFBUDtBQUNILEtBZEQsQ0FjRSxPQUFPc0QsQ0FBUCxFQUFVO0FBQ1IsYUFBTztBQUNISCxRQUFBQSxXQUFXLEVBQUVwSixZQUFZLENBQUN3SixZQUR2QjtBQUVISCxRQUFBQSw4QkFBOEIsRUFBRSxFQUY3QjtBQUdIQyxRQUFBQSxpQkFBaUIsRUFBRTtBQUhoQixPQUFQO0FBS0g7QUFDSjs7QUFFOEIsUUFBbEJHLGtCQUFrQixDQUMzQm5ILFdBRDJCLEVBRTNCb0gsWUFGMkIsRUFHM0J6SCxXQUgyQixFQUlhO0FBQ3hDLFFBQUk7QUFDQSxZQUFNZCxRQUFRLEdBQUcsTUFBTSxLQUFLWixVQUFMLENBQ2xCYSxJQURrQixDQUNaLFNBQVEsS0FBS1YsV0FBTCxDQUFpQjJCLEVBQUcsV0FBVSxLQUFLM0IsV0FBTCxDQUFpQjBDLE9BQVEsbUJBRG5ELEVBRWxCYixlQUZrQixDQUVGO0FBQUVELFFBQUFBLFdBQVcsRUFBRUEsV0FBZjtBQUE0QnFILFFBQUFBLE1BQU0sRUFBRUQ7QUFBcEMsT0FGRSxFQUdsQmxILGVBSGtCLENBR0ZQLFdBSEUsRUFJbEJrRSxVQUprQixDQUlQLEdBSk8sRUFLbEJBLFVBTGtCLENBS1AsR0FMTyxDQUF2Qjs7QUFNQSxVQUFJaEYsUUFBUSxDQUFDb0YsTUFBVCxLQUFvQixHQUF4QixFQUE2QjtBQUN6QixjQUFNTixJQUFJLEdBQUcsTUFBTTlFLFFBQVEsQ0FBQ0ksSUFBVCxFQUFuQjtBQUNBLGVBQU87QUFBRTZILFVBQUFBLFdBQVcsRUFBRW5ELElBQUksQ0FBQ3BFO0FBQXBCLFNBQVA7QUFDSDs7QUFDRCxhQUFPRixTQUFQO0FBQ0gsS0FaRCxDQVlFLE9BQU80SCxDQUFQLEVBQVU7QUFDUixhQUFPO0FBQUVILFFBQUFBLFdBQVcsRUFBRXBKLFlBQVksQ0FBQ3dKO0FBQTVCLE9BQVA7QUFDSDtBQUNKOztBQUU0QixRQUFoQkksZ0JBQWdCLENBQUNoQixRQUFELEVBQWtDO0FBQzNELFVBQU0sS0FBS3JJLFVBQUwsQ0FBZ0IrSCxHQUFoQixDQUFvQixLQUFLakgsV0FBTCxDQUFpQixTQUFqQixDQUFwQixFQUFpRGtCLGVBQWpELENBQWlFO0FBQUVxRyxNQUFBQSxRQUFRLEVBQUVBO0FBQVosS0FBakUsQ0FBTjtBQUNIOztBQUVnQyxRQUFwQmlCLG9CQUFvQixDQUM3QmpCLFFBRDZCLEVBRTdCa0IsYUFGNkIsRUFHN0I3SCxXQUg2QixFQUlRO0FBQ3JDLFVBQU1kLFFBQVEsR0FBRyxNQUFNLEtBQUtaLFVBQUwsQ0FDbEJhLElBRGtCLENBQ2IsS0FBS0MsV0FBTCxDQUFpQiwyQkFBakIsQ0FEYSxFQUVsQmtCLGVBRmtCLENBRUY7QUFBRUQsTUFBQUEsV0FBVyxFQUFFc0csUUFBZjtBQUF5QmtCLE1BQUFBLGFBQWEsRUFBRUE7QUFBeEMsS0FGRSxFQUdsQnRILGVBSGtCLENBR0ZQLFdBSEUsQ0FBdkI7O0FBSUEsUUFBSWQsUUFBUSxDQUFDb0YsTUFBVCxLQUFvQixHQUF4QixFQUE2QjtBQUN6QixhQUFPNUUsU0FBUDtBQUNIOztBQUNELFdBQU8sTUFBTVIsUUFBUSxDQUFDSSxJQUFULEVBQWI7QUFDSDs7QUFFd0MsUUFBNUJ3SSw0QkFBNEIsQ0FDckNaLFNBRHFDLEVBRXJDVyxhQUZxQyxFQUdBO0FBQ3JDLFVBQU0zSSxRQUFRLEdBQUcsTUFBTSxLQUFLWixVQUFMLENBQ2xCYSxJQURrQixDQUNiLEtBQUtDLFdBQUwsQ0FBaUIsNEJBQWpCLENBRGEsRUFFbEJrQixlQUZrQixDQUVGO0FBQUV1SCxNQUFBQSxhQUFhLEVBQUVBO0FBQWpCLEtBRkUsRUFHbEJ4SSxZQUhrQixDQUdMNkgsU0FISyxDQUF2Qjs7QUFJQSxRQUFJaEksUUFBUSxDQUFDb0YsTUFBVCxLQUFvQixHQUF4QixFQUE2QjtBQUN6QixhQUFPNUUsU0FBUDtBQUNIOztBQUNELFdBQU8sTUFBTVIsUUFBUSxDQUFDSSxJQUFULEVBQWI7QUFDSDs7QUFFNEIsUUFBaEJ5SSxnQkFBZ0IsQ0FBQ2pELEtBQUQsRUFBK0I7QUFDeEQsVUFBTSxLQUFLeEcsVUFBTCxDQUFnQmEsSUFBaEIsQ0FBcUIsS0FBS0MsV0FBTCxDQUFpQixnQkFBakIsQ0FBckIsRUFBeURDLFlBQXpELENBQXNFeUYsS0FBdEUsQ0FBTjtBQUNIOztBQUVPcEQsRUFBQUEsZ0NBQWdDLENBQUN3RSxnQkFBRCxFQUFrRDtBQUN0RixXQUFPLEtBQUs1SCxVQUFMLENBQWdCZ0QsR0FBaEIsQ0FBb0IsS0FBS2MsdUJBQUwsQ0FBNkI4RCxnQkFBN0IsQ0FBcEIsQ0FBUDtBQUNIOztBQUVPOUcsRUFBQUEsV0FBVyxDQUFDOEIsZUFBRCxFQUFrQztBQUNqRCxXQUFRLFNBQVEsS0FBS3pDLFdBQUwsQ0FBaUIyQixFQUFHLFdBQVUsS0FBSzNCLFdBQUwsQ0FBaUIwQyxPQUFRLElBQUdELGVBQWdCLEVBQTFGO0FBQ0g7O0FBRU9rQixFQUFBQSx1QkFBdUIsQ0FBQzhELGdCQUFELEVBQWtEO0FBQzdFLFdBQU8sS0FBSzlHLFdBQUwsQ0FBa0IsaUJBQWdCOEcsZ0JBQWdCLENBQUNsQixRQUFqQixFQUE0QixFQUE5RCxDQUFQO0FBQ0g7O0FBRXFDLFFBQXpCZ0QseUJBQXlCLENBQUNDLE9BQUQsRUFBa0M7QUFDcEUsVUFBTUMsR0FBRyxHQUFHLEtBQUs5SSxXQUFMLENBQWlCLGlCQUFqQixDQUFaO0FBQ0EsVUFBTSxLQUFLZCxVQUFMLENBQWdCbUksS0FBaEIsQ0FBc0J5QixHQUF0QixFQUEyQjVILGVBQTNCLENBQTJDO0FBQUU2SCxNQUFBQSxVQUFVLEVBQUVGO0FBQWQsS0FBM0MsQ0FBTjtBQUNIOztBQUVpQyxRQUFyQkcscUJBQXFCLENBQzlCQyxJQUQ4QixFQUU5QkMsV0FGOEIsRUFHOUJDLGFBSDhCLEVBSTlCeEQsZ0JBSjhCLEVBS2I7QUFDakIsVUFBTXlELHNCQUFzQixHQUFHekQsZ0JBQWdCLElBQUlyRixTQUFwQixHQUFnQztBQUFFcUYsTUFBQUEsZ0JBQWdCLEVBQUVBO0FBQXBCLEtBQWhDLEdBQXlFLEVBQXhHO0FBQ0EsVUFBTTBELE1BQU0sR0FBRztBQUFFQyxNQUFBQSxZQUFZLEVBQUVMLElBQWhCO0FBQXNCQyxNQUFBQSxXQUFXLEVBQUVBLFdBQW5DO0FBQWdELFNBQUdFO0FBQW5ELEtBQWY7QUFDQSxXQUFPLEtBQUtsSyxVQUFMLENBQ0ZhLElBREUsQ0FDRyxLQUFLQyxXQUFMLENBQWlCLHdCQUFqQixDQURILEVBRUZrQixlQUZFLENBRWNtSSxNQUZkLEVBR0ZwSixZQUhFLENBR1drSixhQUhYLEVBSUZqSixJQUpFLEVBQVA7QUFLSDs7QUFFMkIsUUFBZnFKLGVBQWUsQ0FBQ0MsWUFBRCxFQUF1QkMsWUFBdkIsRUFBOEQ7QUFDdEYsVUFBTUosTUFBTSxHQUFHO0FBQUVHLE1BQUFBLFlBQVksRUFBRUE7QUFBaEIsS0FBZjtBQUNBLFVBQU0sS0FBS3RLLFVBQUwsQ0FDRGEsSUFEQyxDQUNJLEtBQUtDLFdBQUwsQ0FBaUIsd0JBQWpCLENBREosRUFFRGtCLGVBRkMsQ0FFZW1JLE1BRmYsRUFHRHBKLFlBSEMsQ0FHWXdKLFlBSFosQ0FBTjtBQUlIOztBQUUyQixRQUFmQyxlQUFlLENBQUMxQyxPQUFELEVBQWlEO0FBQ3pFLFVBQU0sS0FBSzlILFVBQUwsQ0FBZ0JtSSxLQUFoQixDQUFzQixLQUFLckgsV0FBTCxDQUFpQixPQUFqQixDQUF0QixFQUFpREMsWUFBakQsQ0FBOEQrRyxPQUE5RCxDQUFOO0FBQ0g7O0FBRTJCLFFBQWYyQyxlQUFlLENBQUNDLGdCQUFELEVBQTJCQyxTQUEzQixFQUErRDtBQUN2RixVQUFNQyxVQUFVLEdBQUc7QUFBRUYsTUFBQUEsZ0JBQWdCLEVBQUVBLGdCQUFwQjtBQUFzQ0csTUFBQUEsZUFBZSxFQUFFRjtBQUF2RCxLQUFuQjtBQUNBLFVBQU0sS0FBSzNLLFVBQUwsQ0FBZ0JhLElBQWhCLENBQXFCLEtBQUtDLFdBQUwsQ0FBaUIsd0JBQWpCLENBQXJCLEVBQWlFQyxZQUFqRSxDQUE4RTZKLFVBQTlFLENBQU47QUFDSDs7QUFFeUIsUUFBYkUsYUFBYSxDQUFDQyxRQUFELEVBQW1CSCxVQUFuQixFQUFxRTtBQUMzRixVQUFNSSxXQUFXLEdBQUc7QUFBRUQsTUFBQUEsUUFBUSxFQUFFQTtBQUFaLEtBQXBCO0FBQ0EsVUFBTSxLQUFLL0ssVUFBTCxDQUNEYSxJQURDLENBQ0ksS0FBS0MsV0FBTCxDQUFpQixtQkFBakIsQ0FESixFQUVEa0IsZUFGQyxDQUVlZ0osV0FGZixFQUdEakssWUFIQyxDQUdZNkosVUFIWixDQUFOO0FBSUg7O0FBRU1LLEVBQUFBLEtBQUssQ0FBQ0MsSUFBRCxFQUFrQnZKLElBQWxCLEVBQTJEO0FBQ25FLFdBQU8sS0FBSzNCLFVBQUwsQ0FDRmEsSUFERSxDQUNHLEtBQUtDLFdBQUwsQ0FBa0IsNkJBQTRCb0ssSUFBSyxFQUFuRCxDQURILEVBRUZuSyxZQUZFLENBRVdZLElBRlgsRUFHRlgsSUFIRSxFQUFQO0FBSUg7O0FBeGM0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi4vSHR0cENsaWVudC9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3IgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9IdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcblxuaW1wb3J0IHsgQ2hlY2tTY2VuYXJpb1R5cGUsIElDYW5keUFwaUNsaWVudCwgSUNhbmR5QXBpRHJhZnRDbGllbnQsIElTZW5kQ2hhbmdlU2V0UmVzdWx0IH0gZnJvbSBcIi4vSUNhbmR5QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgeyBTZXJ2ZXJJbm5lclJlc3BvbnNlLCBTZXJ2ZXJKc29uUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJJbm5lclJlc3BvbnNlXCI7XG5pbXBvcnQgeyBGaWxlUHJvcGVydGllcywgU2VydmVyRXJyb3JSZXNwb25zZSwgVXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9GaWxlUHJvcGVydGllc1wiO1xuaW1wb3J0IHsgQ3JlYXRlRHJhZnRSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0NyZWF0ZURyYWZ0L0NyZWF0ZURyYWZ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXhwbGFuYXRvcnlOb3RlL0NyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5pbXBvcnQgeyBTZXJ2ZXJDaGFuZ2VTZXQgfSBmcm9tIFwiLi9UeXBlcy9DaGFuZ2VTZXQvU2VydmVyQ2hhbmdlU2V0XCI7XG5pbXBvcnQgeyBTZXJ2ZXJUYXNrLCBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL1Rhc2tzXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlckVycm9yQ29kZSwgR2V0QnlJbm5SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzVHlwZXNcIjtcbmltcG9ydCB7IEF0dGFjaEluZm8gfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9BdHRhY21lbnRzXCI7XG5pbXBvcnQgeyBEcmFmdFByZXNlbnRhdGlvblR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmVzZW50YXRpb25zL0RyYWZ0UHJlc2VudGF0aW9uVHlwZVwiO1xuaW1wb3J0IHsgUHJlc2VudGF0aW9uQ29udGVudCB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvUHJlc2VudGF0aW9uQ29udGVudFwiO1xuaW1wb3J0IHsgQ29udmVydERyYWZ0UmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db252ZXJ0RHJhZnRSZXF1ZXN0XCI7XG5pbXBvcnQgeyBHZXRBdHRhY2htZW50c1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQXR0YWNobWVudHMvR2V0QXR0YWNobWVudHNSZXNwb25zZVwiO1xuaW1wb3J0IHsgRm9jdXNTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IEdldFRhc2tzU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9UYXNrcy9HZXRUYXNrc1NlcnZlclJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2VcIjtcbmltcG9ydCB7IGlzQnVmZmVyIH0gZnJvbSBcIi4vSXNCdWZmZXJcIjtcbmltcG9ydCB7IENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IERpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuL0RpZ2VzdEFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnRcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi9EaWdlc3RBcGlDbGllbnQvSURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgRnVmU2l6ZVRvb0xhcmdlRXJyb3IgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvRnVmU2l6ZVRvb0xhcmdlRXJyb3JcIjtcbmltcG9ydCB7IEltcG9ydEVtcGxveWVlc1JlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9TdGFmZi9JbXBvcnRFbXBsb3llZXNSZXF1ZXN0XCI7XG5pbXBvcnQgeyBNYXNzQWN0aW9uUGFyYW1ldGVycyB9IGZyb20gXCIuL1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IFByaW50UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSYXdSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJhd1Jlc3BvbnNlXCI7XG5cbmNvbnN0IHN0cmFuZ2VPcHRpb25zID0geyBzcmM6IFwiY2hhbmdlU2V0XCIsIGRhdGFWZXJzaW9uOiBcIjBcIiB9O1xuXG5leHBvcnQgZW51bSBTZXJ2ZXJFcnJvcnMge1xuICAgIEZ1ZlNpemVUb29MYXJnZSA9IFwiRnVmU2l6ZVRvb0xhcmdlXCIsXG4gICAgQmFkUmVxdWVzdCA9IFwiQmFkUmVxdWVzdFwiLFxuICAgIFVua25vd25FcnJvciA9IFwiVW5rbm93bkVycm9yXCIsXG59XG5cbmV4cG9ydCBjbGFzcyBDYW5keUFwaUNsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaUNsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBJSHR0cENsaWVudDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgZmV0Y2hJbXBsOiBGZXRjaCxcbiAgICAgICAgYmFzZVVybDogc3RyaW5nLFxuICAgICAgICByZXNvdXJjZVpvbmU6IHVuZGVmaW5lZCB8IHN0cmluZyxcbiAgICAgICAgYXV0aGVudGljYXRpb246IHVuZGVmaW5lZCB8IEF1dGhlbnRpY2F0aW9uTW9kZVxuICAgICkge1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChmZXRjaEltcGwsIGJhc2VVcmwsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIoYXV0aGVudGljYXRpb24pLCB7XG4gICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvckRyYWZ0KGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCk6IElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYW5keUFwaURyYWZ0Q2xpZW50KHRoaXMuaHR0cENsaWVudCwgZHJhZnRGdWxsSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEaWdlc3RBcGlDbGllbnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgRGlnZXN0QXBpQ2xpZW50KHRoaXMuaHR0cENsaWVudCwgZHJhZnRGdWxsSWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJbmZvQnlJbm5zKGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCwgaW5uczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPEdldEJ5SW5uUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgcGF0aHMgPSBpbm5zLm1hcChpbm4gPT4gYEBmb2N1cy8ke2lubn1gKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoZHJhZnRGdWxsSWQsIFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRocylcbiAgICAgICAgICAgIC5qc29uPEZvY3VzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogR2V0QnlJbm5SZXNwb25zZSA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGlubiBvZiBpbm5zKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5TZXJ2ZXJWYWx1ZSA9IHJlc3BvbnNlW2BAZm9jdXMvJHtpbm59YF0/LnZhbHVlO1xuICAgICAgICAgICAgaWYgKGlublNlcnZlclZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpbm5dID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJTZXJ2ZXIgZG9lcyBub3QgcmV0dXJuIGlubiBpbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZTogRm9jdXNTZXJ2ZXJFcnJvckNvZGUuTm9Jbm5FcnJvcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaW5uXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGlublNlcnZlclZhbHVlLnZhbHVlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlOiBpbm5TZXJ2ZXJWYWx1ZS5lcnJvckNvZGUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogaW5uU2VydmVyVmFsdWUuZXJyb3IgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsR2Z2cyhhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgYnVpbGQtc2VydmVyL2dmdnNgKS5qc29uPHN0cmluZ1tdPigpO1xuICAgICAgICByZXR1cm4gYm9keTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRHJhZnRGcm9tRHJpdmUoXG4gICAgICAgIG5zOiBzdHJpbmcsXG4gICAgICAgIGZ1ZkRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdC1mcm9tLWRyaXZlYClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgIG5zOiBucyxcbiAgICAgICAgICAgICAgICBmdWZEcml2ZVVyaTogZnVmRHJpdmVVcmksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZUVtcHR5RHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHN0cmluZyk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogdW5kZWZpbmVkLCBmdWZDb250ZW50OiBCdWZmZXIpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHVuZGVmaW5lZCB8IHN0cmluZywgZnVmQ29udGVudD86IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICBpZiAoZ2Z2ID09IHVuZGVmaW5lZCAmJiBmdWZDb250ZW50ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgICAgIC53aXRoQ29udGVudFR5cGUoXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIilcbiAgICAgICAgICAgICAgICAud2l0aEJvZHlGcm9tQnVmZmVyKGZ1ZkNvbnRlbnQpXG4gICAgICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2Z2ICE9IHVuZGVmaW5lZCAmJiBmdWZDb250ZW50ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgICAgIC53aXRoQ29udGVudFR5cGUoXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIilcbiAgICAgICAgICAgICAgICAud2l0aEJvZHlGcm9tQnVmZmVyKEJ1ZmZlci5mcm9tKFtdKSlcbiAgICAgICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZnYgPT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGRyYWZ0OiBubyBnZnYgYW5kIG5vIGZ1ZiBzcGVjaWZpZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgIC53aXRoQ29udGVudFR5cGUoXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIilcbiAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoZnVmQ29udGVudClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNoZWNrQWxpdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQoYF9zdGF0dXMvcGluZ2ApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RHJhZnRVcmwoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBkcmFmdFJlbGF0ZWRVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgdjEvbnMvJHtkcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7ZHJhZnRGdWxsSWQuZHJhZnRJZH0vJHtkcmFmdFJlbGF0ZWRVcmx9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmVhdHVyZUZsYWdzKCk6IFByb21pc2U8RmVhdHVyZUZsYWdzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQoXCJ2MS9mZWF0dXJlcy9mbGFnc1wiKS5qc29uPEZlYXR1cmVGbGFnc1Jlc3BvbnNlPigpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbmR5QXBpRHJhZnRDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBJSHR0cENsaWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihodHRwQ2xpZW50OiBJSHR0cENsaWVudCwgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XG4gICAgICAgIHRoaXMuZHJhZnRGdWxsSWQgPSBkcmFmdEZ1bGxJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvSW5uZXJFZGl0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwoYGlubmVyLWVkaXRvci9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtZnVmXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJzaW9uXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXJGdWYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmNsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuZm9ybXNDbGllbnRJbmZvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkSW5uZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvckxvZykpLmpzb248U2VydmVyRXJyb3JMb2c+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEVycm9yTG9nV2l0aENoZWNrU2NlbmFyaW9zKGNoZWNrU2NlbmFyaW9zOiBDaGVja1NjZW5hcmlvVHlwZVtdKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXJyb3Jsb2dcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHsgY2hlY2tTY2VuYXJpb3M6IGNoZWNrU2NlbmFyaW9zIH0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VGFza0J5SWQodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPFNlcnZlclRhc2sgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgdGFza3MgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQHRhc2svKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0VGFza3NTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHRhc2tzW2BAdGFzay8ke3Rhc2tJZH1gXT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFRhc2tzKCk6IFByb21pc2U8U2VydmVyVGFza1tdPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRhc2tzKS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgICAgICAgICBbYEB0YXNrLyR7dGFza0lkfWBdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50YXNrSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbYEB0YXNrLyR7dGFza0lkfWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGVydEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvcmxvZ0V4cGVydCkpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRXJyb3JMb2dQZGYoZXJyb3JMb2dOYW1lOiBzdHJpbmcsIHByb3BzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcInByZXNlbnRhdGlvbnMvZXJyb3JMb2cvcHJpbnRcIiksIHtcbiAgICAgICAgICAgIGVycm9yTG9nTmFtZTogZXJyb3JMb2dOYW1lLFxuICAgICAgICAgICAgcHJvcHNEcml2ZU5hbWU6IHByb3BzTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsZWFyRHJhZnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjbGVhclwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbnZlcnREcmFmdEZyb21QcmV2R2Z2KHsgcHJldkdmdkRyYWZ0SWQsIGdmdiB9OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJ0XCIpKS53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgaWQ6IHByZXZHZnZEcmFmdElkLFxuICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElTZW5kQ2hhbmdlU2V0UmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwOSk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXdhcm5pbmctY29tbWVudHNcbiAgICAgICAgLy9UT0RPOiDQv9C+0YHQu9C1INCy0YvQv9GD0YHQutCwINC30LDQtNCw0YfQuCBodHRwczovL3l0LnNrYmtvbnR1ci5ydS9pc3N1ZS9GUy03NjY1INC+0YLRgNC10YTQsNC60YLQvtGA0LjRgtGMINC4INC+0YHRgtCw0LLQuNGC0Ywg0YLQvtC70YzQutC+IFwiZGF0YVJlc3VsdC5kYXRhVmVyc2lvblwiICjQv9GA0LDQstC60LAg0L3QsNGB0YLRgNC+0LXQuiDRgdC10YDQuNCw0LvQuNC30LDRgtC+0YDQsClcbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFSZXN1bHQgPSBhd2FpdCByZXN1bHQuanNvbjx7IGRhdGFWZXJzaW9uPzogbnVtYmVyOyBEYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjpcbiAgICAgICAgICAgICAgICAgICAgZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz9cbiAgICAgICAgICAgICAgICAgICAgZGF0YVJlc3VsdD8uRGF0YVZlcnNpb24gPz9cbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgZ2V0U3VjY2Vzc1Jlc3VsdCgpIDogcmVzdWx0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VuZENoYW5nZVNldFN5bmMoZGF0YTogU2VydmVyQ2hhbmdlU2V0LCBjdXJyZW50RGF0YVZlcnNpb246IG51bWJlcik6IElTZW5kQ2hhbmdlU2V0UmVzdWx0IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5odHRwQ2xpZW50LnBvc3RTeW5jKFxuICAgICAgICAgICAgdGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpLFxuICAgICAgICAgICAgeyBkYXRhVmVyc2lvbjogY3VycmVudERhdGFWZXJzaW9uIH0sXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXdhcm5pbmctY29tbWVudHNcbiAgICAgICAgLy9UT0RPOiDQv9C+0YHQu9C1INCy0YvQv9GD0YHQutCwINC30LDQtNCw0YfQuCBodHRwczovL3l0LnNrYmtvbnR1ci5ydS9pc3N1ZS9GUy03NjY1INC+0YLRgNC10YTQsNC60YLQvtGA0LjRgtGMINC4INC+0YHRgtCw0LLQuNGC0Ywg0YLQvtC70YzQutC+IFwiZGF0YVJlc3VsdC5kYXRhVmVyc2lvblwiICjQv9GA0LDQstC60LAg0L3QsNGB0YLRgNC+0LXQuiDRgdC10YDQuNCw0LvQuNC30LDRgtC+0YDQsClcbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdFN5bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlcjsgRGF0YVZlcnNpb24/OiBudW1iZXIgfT4oKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YVZlcnNpb246XG4gICAgICAgICAgICAgICAgICAgIGRhdGFSZXN1bHQ/LmRhdGFWZXJzaW9uID8/XG4gICAgICAgICAgICAgICAgICAgIGRhdGFSZXN1bHQ/LkRhdGFWZXJzaW9uID8/XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChcIkludmFsaWQgZGF0YVZlcnNpb24gYWZ0ZXIgYXBwbHlpbmcgY2hhbmdlIHNldC5cIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyA9PSAyMDAgPyBnZXRTdWNjZXNzUmVzdWx0U3luYygpIDogcmVzdWx0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UmVxdWlzaXRlcyhyZXF1aXNpdGVMaXN0OiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8U2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJlcXVpc2l0ZUxpc3QpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldElubmVyKHBhdGhzOiB1bmRlZmluZWQgfCByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRocylcbiAgICAgICAgICAgIC5qc29uPFNlcnZlcklubmVyUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRpYWxJbm5lcihydWxlczogW1wiKlwiXSB8IHN0cmluZ1tdLCBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtcGFydGlhbC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMobWF4SW5zdGFuY2VDb3VudCAhPSB1bmRlZmluZWQgJiYgeyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50LnRvU3RyaW5nKCkgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocnVsZXMpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJJbm5lclJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogW1wiKlwiXSB8IHN0cmluZ1tdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJKc29uUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGZvcm1hdDogXCJKc29uVHJlZVwiIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJ1bGVzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySnNvblJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlclJhd1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtcGFydGlhbC1pbm5lcjJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJ1bGVzKVxuICAgICAgICAgICAgLmpzb248U2VydmVyUmF3UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGFWZXJzaW9uKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9nZXQtZGF0YS12ZXJzaW9uXCIpKS5qc29uPG51bWJlcj4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwbGFuYXRvcnlOb3RlKCk6IFByb21pc2U8Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5leHBsYW5hdG9yeU5vdGUpKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEF0dGFjaG1lbnRCeUlkKGF0dGFjaG1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnRJZH1gXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiByZXN1bHRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdPy52YWx1ZSA/PyByZWplY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsQXR0YWNobWVudHMoKTogUHJvbWlzZTxBdHRhY2hJbmZvW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlc3VsdCkubWFwKHggPT4geC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBhdHRhY2htZW50SWRzLm1hcChpZCA9PiBgQGF0dGFjaG1lbnQvJHtpZH1gKSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiByZWFkb25seSBBdHRhY2hJbmZvW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIGNoYW5nZWRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudC5pZH1gXSA9IHtcbiAgICAgICAgICAgICAgICBjb250ZW50VXJpOiBhdHRhY2htZW50LmNvbnRlbnRVcmksXG4gICAgICAgICAgICAgICAgaWQ6IGF0dGFjaG1lbnQuaWQsXG4gICAgICAgICAgICAgICAgbWV0YTogYXR0YWNobWVudC5tZXRhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDogY2hhbmdlZCxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRQcmVzZW50YXRpb24ocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLCBjb250ZW50OiBzdHJpbmcgfCB1bmtub3duKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGxldCByZXF1ZXN0ID0gdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoUmF3Qm9keShjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0J1ZmZlcihjb250ZW50KSkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aFJhd0JvZHkoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoSnNvbkJvZHkoY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcmVxdWVzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcGF0Y2hQcmVzZW50YXRpb24oXG4gICAgICAgIHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSxcbiAgICAgICAgcHJlc2VudGF0aW9uQ29udGVudDogUHJlc2VudGF0aW9uQ29udGVudFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSkud2l0aEpzb25Cb2R5KHByZXNlbnRhdGlvbkNvbnRlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldChgdjEvZmlsZXMvZ2V0LXByb3BlcnRpZXNgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEZpbGVQcm9wZXJ0aWVzPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9wcmVwYXJlLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvZmlsZXMvdXBsb2FkLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhKc29uQm9keShkcml2ZVVyaXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSwgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLCBzb3VyY2VzVG90YWxDb3VudDogMCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4oKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yLFxuICAgICAgICAgICAgICAgIGludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lczogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2VzVG90YWxDb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWNjZXB0VHJhbnNmZXJUeXBlKFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICB0cmFuc2ZlclR5cGU6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmVgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmdWZEcml2ZVVyaTogZnVmRHJpdmVVcmksIHR5cGVJZDogdHJhbnNmZXJUeXBlIH0pXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRGdWZCeURyaXZlVXJpKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0VXJsKFwic2V0LWZ1ZlwiKSkud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZnVmRHJpdmVVcmk6IGRyaXZlVXJpLCBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG11bHRpcGxlQ29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2RcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9jb21iaW5lLXdpdGgtZnVmc1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcyk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxDb21iaW5lRnVmUmVzdWx0PigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBub3JtYWxpemVCeVJ1bGVzKHJ1bGVzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcInRlc3Qtbm9ybWFsaXplXCIpKS53aXRoSnNvbkJvZHkocnVsZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24ocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdFJlbGF0ZWRVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy8ke3ByZXNlbnRhdGlvblR5cGUudG9TdHJpbmcoKX1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyhlbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9jaGVjay1hbGxcIik7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh1cmkpLndpdGhRdWVyeVBhcmFtcyh7IHNldEVuYWJsZWQ6IGVuYWJsZWQgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEluc3RhbmNlc0J5VGV4dChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBwYXRoc1ByZWZpeDogc3RyaW5nLFxuICAgICAgICBwYXRoc1RvU2VhcmNoOiBzdHJpbmdbXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgbWF4SW5zdGFuY2VDb3VudFBhcmFtcyA9IG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkID8geyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50IH0gOiB7fTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBzZWFyY2hTdHJpbmc6IHRleHQsIHBhdGhzUHJlZml4OiBwYXRoc1ByZWZpeCwgLi4ubWF4SW5zdGFuY2VDb3VudFBhcmFtcyB9O1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvc2VhcmNoLWJ5LXN0cmluZ1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRoc1RvU2VhcmNoKVxuICAgICAgICAgICAgLmpzb248c3RyaW5nW10+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IG5vcm1hbGl6ZXJJZDogbm9ybWFsaXplcklkIH07XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL2N1c3RvbS1ub3JtYWxpemVcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHBhcmFtcylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aFByZWZpeGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0RW1wbG95ZWVzKHJlcXVlc3Q6IEltcG9ydEVtcGxveWVlc1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRVcmwoXCJzdGFmZlwiKSkud2l0aEpzb25Cb2R5KHJlcXVlc3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkZWxldGVJbnN0YW5jZXMobXVsdGlwbGljaXR5UGF0aDogc3RyaW5nLCBpbnN0YW5jZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7IG11bHRpcGxpY2l0eVBhdGg6IG11bHRpcGxpY2l0eVBhdGgsIGluc3RhbmNlTnVtYmVyczogaW5zdGFuY2VzIH07XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9kZWxldGUtaW5zdGFuY2VzXCIpKS53aXRoSnNvbkJvZHkocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJ1bk1hc3NBY3Rpb24oYWN0aW9uSWQ6IHN0cmluZywgcGFyYW1ldGVycz86IE1hc3NBY3Rpb25QYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBhY3Rpb25JZDogYWN0aW9uSWQgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvbWFzcy1hY3Rpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQodHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPFByaW50UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy9pbm5lci9wcmludC8ke3R5cGV9YCkpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGJvZHkpXG4gICAgICAgICAgICAuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgIH1cbn1cbiJdfQ==
|