@cloudbase/auth 3.1.5 → 3.1.7
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/dist/cjs/index.js +22 -9
- package/dist/cjs/type.d.ts +3 -0
- package/dist/cjs/type.js +1 -1
- package/dist/esm/index.js +22 -9
- package/dist/esm/type.d.ts +3 -0
- package/dist/esm/type.js +1 -1
- package/dist/miniprogram/index.js +1 -1
- package/package.json +5 -5
- package/src/index.ts +11 -0
- package/src/type.ts +3 -0
package/dist/esm/index.js
CHANGED
|
@@ -383,6 +383,9 @@ var Auth = (function () {
|
|
|
383
383
|
Auth.prototype.getVerification = function (params, options) {
|
|
384
384
|
return __awaiter(this, void 0, void 0, function () {
|
|
385
385
|
return __generator(this, function (_a) {
|
|
386
|
+
if (params.phone_number) {
|
|
387
|
+
params.phone_number = this.formatPhone(params.phone_number);
|
|
388
|
+
}
|
|
386
389
|
return [2, this.oauthInstance.authApi.getVerification(params, options)];
|
|
387
390
|
});
|
|
388
391
|
});
|
|
@@ -1244,6 +1247,7 @@ var Auth = (function () {
|
|
|
1244
1247
|
switch (_a.label) {
|
|
1245
1248
|
case 0:
|
|
1246
1249
|
if (!(params.phone_number || params.verification_code || params.verification_token || params.provider_token)) return [3, 2];
|
|
1250
|
+
params.phone_number = this.formatPhone(params.phone_number);
|
|
1247
1251
|
return [4, this.oauthInstance.authApi.signUp(params)];
|
|
1248
1252
|
case 1:
|
|
1249
1253
|
_a.sent();
|
|
@@ -1421,17 +1425,26 @@ var Auth = (function () {
|
|
|
1421
1425
|
});
|
|
1422
1426
|
};
|
|
1423
1427
|
Auth.prototype.signInWithOtp = function (params) {
|
|
1428
|
+
var _a, _b;
|
|
1424
1429
|
return __awaiter(this, void 0, void 0, function () {
|
|
1425
1430
|
var verificationInfo_2, error_15;
|
|
1426
1431
|
var _this = this;
|
|
1427
|
-
return __generator(this, function (
|
|
1428
|
-
switch (
|
|
1432
|
+
return __generator(this, function (_c) {
|
|
1433
|
+
switch (_c.label) {
|
|
1429
1434
|
case 0:
|
|
1430
|
-
_a.
|
|
1435
|
+
if (((_a = params.options) === null || _a === void 0 ? void 0 : _a.shouldCreateUser) === undefined || !!((_b = params.options) === null || _b === void 0 ? void 0 : _b.shouldCreateUser)) {
|
|
1436
|
+
return [2, this.signUp({
|
|
1437
|
+
email: params.email,
|
|
1438
|
+
phone: params.phone,
|
|
1439
|
+
})];
|
|
1440
|
+
}
|
|
1441
|
+
_c.label = 1;
|
|
1442
|
+
case 1:
|
|
1443
|
+
_c.trys.push([1, 3, , 4]);
|
|
1431
1444
|
this.validateAtLeastOne(params, [['email'], ['phone']], 'You must provide either an email or phone number');
|
|
1432
1445
|
return [4, this.getVerification(params.email ? { email: params.email } : { phone_number: this.formatPhone(params.phone) })];
|
|
1433
|
-
case
|
|
1434
|
-
verificationInfo_2 =
|
|
1446
|
+
case 2:
|
|
1447
|
+
verificationInfo_2 = _c.sent();
|
|
1435
1448
|
return [2, {
|
|
1436
1449
|
data: {
|
|
1437
1450
|
user: null,
|
|
@@ -1452,10 +1465,10 @@ var Auth = (function () {
|
|
|
1452
1465
|
},
|
|
1453
1466
|
error: null,
|
|
1454
1467
|
}];
|
|
1455
|
-
case
|
|
1456
|
-
error_15 =
|
|
1468
|
+
case 3:
|
|
1469
|
+
error_15 = _c.sent();
|
|
1457
1470
|
return [2, { data: {}, error: new AuthError(error_15) }];
|
|
1458
|
-
case
|
|
1471
|
+
case 4: return [2];
|
|
1459
1472
|
}
|
|
1460
1473
|
});
|
|
1461
1474
|
});
|
|
@@ -2885,4 +2898,4 @@ export function registerAuth(app) {
|
|
|
2885
2898
|
console.warn(e);
|
|
2886
2899
|
}
|
|
2887
2900
|
}
|
|
2888
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLE9BQU8sRUFDTCxjQUFjLEVBQ2QsZUFBZSxFQUNmLHdCQUF3QixFQUN4QixNQUFNLEVBQ04sdUJBQXVCLEVBQ3ZCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVix5QkFBeUIsR0FDMUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzFDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGlCQUFpQixHQUNsQixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3JHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQWtDNUMsSUFBTSxTQUFTLEdBQUcsY0FBTSxPQUFBLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQWhFLENBQWdFLENBQUE7QUFtQ3hGLElBQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQTtBQWtCN0IsSUFBTSxrQkFBa0IsR0FBRyxVQUFBLFFBQVEsSUFBSSxPQUFBLFVBQUMsTUFBTTtJQUM1QyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsd0JBQU8sTUFBTSxLQUFFLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxpQkFBaUIsSUFBRyxDQUFBO0FBQ2pILENBQUMsRUFG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QXFCbEMsQ0FBQTtZQUVELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1lBRWxDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO1lBRWhDLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQTtRQUMxQixDQUFDLENBQUE7UUFFRCxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN6QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQTtRQUM5QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQTtRQUN0QixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7Q0FDRixDQUFBO0FBRUQsSUFBSTtJQUdGLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtDQUN2QztBQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUU7QUFFZCxPQUFPLEVBQVksSUFBSSxFQUFFLENBQUE7QUFJekIsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUEwQztJQUNyRSxJQUFJO1FBQ0YsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFBO0tBQ2pDO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSUNsb3VkYmFzZSwgSUNsb3VkYmFzZUNvbmZpZywgSUNsb3VkYmFzZVBsYXRmb3JtSW5mbyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IElDbG91ZGJhc2VDYWNoZSB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvY2FjaGUnXG5pbXBvcnQgdHlwZSB7IElDbG91ZGJhc2VSZXF1ZXN0IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9yZXF1ZXN0J1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQXV0aENvbmZpZywgSVVzZXIsIElMb2dpblN0YXRlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9hdXRoJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQ29tcG9uZW50IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jb21wb25lbnQnXG5pbXBvcnQgdHlwZSB7IEF1dGhPcHRpb25zLCBDcmVkZW50aWFscyB9IGZyb20gJ0BjbG91ZGJhc2Uvb2F1dGgnXG5pbXBvcnQge1xuICBDbG91ZGJhc2VPQXV0aCxcbiAgQVVUSF9BUElfUFJFRklYLFxuICBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUsXG4gIEVWRU5UUyxcbiAgQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUsXG4gIE9BVVRIX1RZUEUsXG4gIHdlQXBwSnd0RGVjb2RlQWxsLFxuICBBdXRoRXJyb3IsXG4gIGF1dGhNb2RlbHMsXG4gIERFRkFVTFRfTk9ERV9BQ0NFU1NfU0NPUEUsXG59IGZyb20gJ0BjbG91ZGJhc2Uvb2F1dGgnXG5pbXBvcnQgeyB1c2VBdXRoQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlcidcbmltcG9ydCB7XG4gIHByaW50V2FybixcbiAgdGhyb3dFcnJvcixcbiAgRVJST1JTLFxuICBDT01NVU5JVFlfU0lURV9VUkwsXG4gIGNhdGNoRXJyb3JzRGVjb3JhdG9yLFxuICBDbG91ZGJhc2VFdmVudEVtaXR0ZXIsXG4gIENsb3VkYmFzZUNhY2hlLFxuICBhZGFwdGVyRm9yV3hNcCxcbiAgdXNlRGVmYXVsdEFkYXB0ZXIsXG59IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgc2F2ZVRvQnJvd3NlclNlc3Npb24sIGdldEJyb3dzZXJTZXNzaW9uLCByZW1vdmVCcm93c2VyU2Vzc2lvbiwgYWRkVXJsU2VhcmNoIH0gZnJvbSAnLi91dGlscydcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSAnQGNsb3VkYmFzZS91dGlsaXRpZXMnXG5pbXBvcnQge1xuICBDb21tb25SZXMsXG4gIERlbGV0ZU1lUmVxLFxuICBHZXRDbGFpbXNSZXMsXG4gIEdldFVzZXJJZGVudGl0aWVzUmVzLFxuICBHZXRVc2VyUmVzLFxuICBMaW5rSWRlbnRpdHlSZXEsXG4gIExpbmtJZGVudGl0eVJlcyxcbiAgT25BdXRoU3RhdGVDaGFuZ2VDYWxsYmFjayxcbiAgUmVhdXRoZW50aWNhdGVSZXMsXG4gIFJlc2VuZFJlcSxcbiAgUmVzZW5kUmVzLFxuICBSZXNldFBhc3N3b3JkRm9yRW1haWxSZXMsXG4gIFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEsXG4gIFNldFNlc3Npb25SZXEsXG4gIFNpZ25JbkFub255bW91c2x5UmVxLFxuICBTaWduSW5PQXV0aFJlcyxcbiAgU2lnbkluUmVzLFxuICBTaWduSW5XaXRoSWRUb2tlblJlcSxcbiAgU2lnbkluV2l0aE9BdXRoUmVxLFxuICBTaWduSW5XaXRoT3RwUmVxLFxuICBTaWduSW5XaXRoT3RwUmVzLFxuICBTaWduSW5XaXRoUGFzc3dvcmRSZXEsXG4gIFNpZ25VcFJlcyxcbiAgVW5saW5rSWRlbnRpdHlSZXEsXG4gIFVwZGF0ZVVzZXJBdHRyaWJ1dGVzLFxuICBVcGRhdGVVc2VyUmVxLFxuICBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcyxcbiAgVmVyaWZ5T0F1dGhSZXEsXG4gIFZlcmlmeU9BdXRoUmVzLFxuICBWZXJpZnlPdHBSZXEsXG59IGZyb20gJy4vdHlwZSdcblxuY29uc3QgaXNCcm93c2VyID0gKCkgPT4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuXG5leHBvcnQgdHlwZSB7XG4gIFNpZ25JblJlcyxcbiAgR2V0VXNlclJlcyxcbiAgQ29tbW9uUmVzLFxuICBTaWduSW5XaXRoT3RwUmVzLFxuICBTaWduSW5PQXV0aFJlcyxcbiAgR2V0Q2xhaW1zUmVzLFxuICBSZXNldFBhc3N3b3JkRm9yRW1haWxSZXMsXG4gIEdldFVzZXJJZGVudGl0aWVzUmVzLFxuICBMaW5rSWRlbnRpdHlSZXMsXG4gIFJlYXV0aGVudGljYXRlUmVzLFxuICBSZXNlbmRSZXMsXG4gIFVwZGF0ZVVzZXJXaXRoVmVyaWZpY2F0aW9uUmVzLFxuICBPbkF1dGhTdGF0ZUNoYW5nZUNhbGxiYWNrLFxuICBTaWduSW5XaXRoUGFzc3dvcmRSZXEsXG4gIFNpZ25JbldpdGhJZFRva2VuUmVxLFxuICBTaWduSW5XaXRoT0F1dGhSZXEsXG4gIFZlcmlmeU9BdXRoUmVxLFxuICBWZXJpZnlPdHBSZXEsXG4gIExpbmtJZGVudGl0eVJlcSxcbiAgVW5saW5rSWRlbnRpdHlSZXEsXG4gIFVwZGF0ZVVzZXJSZXEsXG4gIFNpZ25JbldpdGhPdHBSZXEsXG4gIFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEsXG4gIFJlc2VuZFJlcSxcbiAgU2V0U2Vzc2lvblJlcSxcbiAgRGVsZXRlTWVSZXEsXG4gIFNpZ25VcFJlcyxcbn0gZnJvbSAnLi90eXBlJ1xuXG5kZWNsYXJlIGNvbnN0IGNsb3VkYmFzZTogSUNsb3VkYmFzZVxuZGVjbGFyZSBjb25zdCB3eDogYW55XG5cbmNvbnN0IENPTVBPTkVOVF9OQU1FID0gJ2F1dGgnXG5cbmludGVyZmFjZSBVc2VySW5mbyB7XG4gIHVpZD86IHN0cmluZ1xuICBnZW5kZXI/OiBzdHJpbmdcbiAgcGljdHVyZT86IHN0cmluZ1xuICBlbWFpbD86IHN0cmluZ1xuICBlbWFpbF92ZXJpZmllZD86IGJvb2xlYW5cbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nXG4gIHVzZXJuYW1lPzogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmdcbiAgYmlydGhkYXRlPzogc3RyaW5nXG4gIHpvbmVpbmZvPzogc3RyaW5nXG4gIGxvY2FsZT86IHN0cmluZ1xuICBzdWI/OiBzdHJpbmdcbiAgY3JlYXRlZF9mcm9tPzogc3RyaW5nXG59XG5cbmNvbnN0IG9uQ3JlZGVudGlhbHNFcnJvciA9IGV2ZW50QnVzID0+IChwYXJhbXMpID0+IHtcbiAgZXZlbnRCdXMuZmlyZShFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRCwgeyAuLi5wYXJhbXMsIGV2ZW50VHlwZTogTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLkNSRURFTlRJQUxTX0VSUk9SIH0pXG59XG5cbmludGVyZmFjZSBJVXNlck9wdGlvbnMge1xuICBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyIGltcGxlbWVudHMgSVVzZXIge1xuICBwdWJsaWMgdWlkPzogc3RyaW5nXG4gIHB1YmxpYyBnZW5kZXI/OiBzdHJpbmdcbiAgcHVibGljIHBpY3R1cmU/OiBzdHJpbmdcbiAgcHVibGljIGVtYWlsPzogc3RyaW5nXG4gIHB1YmxpYyBlbWFpbFZlcmlmaWVkPzogYm9vbGVhblxuICBwdWJsaWMgcGhvbmVOdW1iZXI/OiBzdHJpbmdcbiAgcHVibGljIHVzZXJuYW1lPzogc3RyaW5nIC8vIOeUqOaIt+WQjeensO+8jOmVv+W6piA1LTI0IOS9je+8jOaUr+aMgeWtl+espuS4reiLseaWh+OAgeaVsOWtl+OAgeeJueauiuWtl+espu+8iOS7heaUr+aMgV8t77yJ77yM5LiN5pSv5oyB5Lit5paHXG4gIHB1YmxpYyBuYW1lPzogc3RyaW5nXG4gIHB1YmxpYyBwcm92aWRlcnM/OiB7XG4gICAgaWQ/OiBzdHJpbmdcbiAgICBwcm92aWRlclVzZXJJZD86IHN0cmluZ1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgfVtdXG4gIHB1YmxpYyBiaXJ0aGRhdGU/OiBzdHJpbmdcbiAgcHVibGljIHpvbmVpbmZvPzogc3RyaW5nXG4gIHB1YmxpYyBsb2NhbGU/OiBzdHJpbmdcbiAgcHVibGljIHN1Yj86IHN0cmluZ1xuICBwdWJsaWMgY3JlYXRlZEZyb20/OiBzdHJpbmdcblxuICBwcml2YXRlIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgcHJpdmF0ZSBvYXV0aEluc3RhbmNlOiBDbG91ZGJhc2VPQXV0aCAvLyBDbG91ZGJhc2VPQXV0aCDnsbvlnotcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJVXNlck9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGNhY2hlLCBvYXV0aEluc3RhbmNlIH0gPSBvcHRpb25zXG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy5zZXRVc2VySW5mbygpXG4gIH1cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeUqOaIt+S/oeaBry3lkIzmraVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGVja0xvY2FsSW5mbygpIHtcbiAgICB0aGlzLnVpZCA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygndWlkJykgYXMgc3RyaW5nXG4gICAgdGhpcy5nZW5kZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2dlbmRlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMucGljdHVyZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncGljdHVyZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuZW1haWwgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbFZlcmlmaWVkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdlbWFpbF92ZXJpZmllZCcpIGFzIGJvb2xlYW5cbiAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaG9uZV9udW1iZXInKSBhcyBzdHJpbmdcbiAgICB0aGlzLnVzZXJuYW1lID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd1c2VybmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMubmFtZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuYmlydGhkYXRlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdiaXJ0aGRhdGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnpvbmVpbmZvID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd6b25laW5mbycpIGFzIHN0cmluZ1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdsb2NhbGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnN1YiA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnc3ViJykgYXMgc3RyaW5nXG4gICAgdGhpcy5jcmVhdGVkRnJvbSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnY3JlYXRlZF9mcm9tJykgYXMgc3RyaW5nXG4gICAgdGhpcy5wcm92aWRlcnMgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Byb3ZpZGVycycpIGFzIGFueVxuICB9XG4gIC8qKlxuICAgKiDojrflj5bmnKzlnLDnlKjmiLfkv6Hmga8t5byC5q2lXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hlY2tMb2NhbEluZm9Bc3luYygpIHtcbiAgICB0aGlzLnVpZCA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCd1aWQnKVxuICAgIHRoaXMuZ2VuZGVyID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ2dlbmRlcicpXG4gICAgdGhpcy5waWN0dXJlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaWN0dXJlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbCA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCdlbWFpbCcpXG4gICAgdGhpcy5lbWFpbFZlcmlmaWVkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdlbWFpbF92ZXJpZmllZCcpIGFzIGJvb2xlYW5cbiAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaG9uZV9udW1iZXInKSBhcyBzdHJpbmdcbiAgICB0aGlzLnVzZXJuYW1lID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ3VzZXJuYW1lJylcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ25hbWUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmJpcnRoZGF0ZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnYmlydGhkYXRlJykgYXMgc3RyaW5nXG4gICAgdGhpcy56b25laW5mbyA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnem9uZWluZm8nKSBhcyBzdHJpbmdcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbG9jYWxlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5zdWIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3N1YicpIGFzIHN0cmluZ1xuICAgIHRoaXMuY3JlYXRlZEZyb20gPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2NyZWF0ZWRfZnJvbScpIGFzIHN0cmluZ1xuICAgIHRoaXMucHJvdmlkZXJzID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwcm92aWRlcnMnKSBhcyBhbnlcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDnlKjmiLfkv6Hmga9cbiAgICogQHBhcmFtIHVzZXJJbmZvXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDnlKjmiLfkv6Hmga/kuK3mmK/lkKbljIXlkKvpnZ7ms5XlgLwnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHVwZGF0ZSh1c2VySW5mbzogYXV0aE1vZGVscy5Vc2VyUHJvZmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNvbnN0IHsgbmFtZSwgZ2VuZGVyLCBhdmF0YXJVcmwsIHByb3ZpbmNlLCBjb3VudHJ5LCBjaXR5IH0gPSB1c2VySW5mb1xuICAgIGNvbnN0IG5ld1VzZXJJbmZvID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0VXNlclByb2ZpbGUoeyAuLi51c2VySW5mbyB9KVxuXG4gICAgdGhpcy5zZXRMb2NhbFVzZXJJbmZvKG5ld1VzZXJJbmZvKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudXBkYXRlVXNlckJhc2ljSW5mbyh7IC4uLnBhcmFtcyB9KVxuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICAvKipcbiAgICog5pu05paw5a+G56CBXG4gICAqIEBwYXJhbSBuZXdQYXNzd29yZFxuICAgKiBAcGFyYW0gb2xkUGFzc3dvcmRcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfmm7TmlrDlr4bnoIHlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci51cGRhdGVQYXNzd29yZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAzIC0g5paw5a+G56CB5Lit5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ymJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyB1cGRhdGVQYXNzd29yZChuZXdQYXNzd29yZDogc3RyaW5nLCBvbGRQYXNzd29yZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVwZGF0ZVBhc3N3b3JkQnlPbGQoe1xuICAgICAgb2xkX3Bhc3N3b3JkOiBvbGRQYXNzd29yZCxcbiAgICAgIG5ld19wYXNzd29yZDogbmV3UGFzc3dvcmQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDnlKjmiLflkI1cbiAgICogQHBhcmFtIHVzZXJuYW1lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw55So5oi35ZCN5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlVXNlcm5hbWUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6hueUqOaIt+WQjeWvhueggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgdXBkYXRlVXNlcm5hbWUodXNlcm5hbWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3VzZXJuYW1lIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVwZGF0ZSh7XG4gICAgICB1c2VybmFtZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOWIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+OAguW9k+eUqOaIt+WcqOWFtuS7luWuouaIt+err+abtOaWsOeUqOaIt+S/oeaBr+S5i+WQju+8jOWPr+S7peiwg+eUqOatpOaOpeWPo+WQjOatpeabtOaWsOS5i+WQjueahOS/oeaBr+OAglxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+WIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnJlZnJlc2goKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHJlZnJlc2gocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9KTogUHJvbWlzZTxhdXRoTW9kZWxzLlVzZXJJbmZvPiB7XG4gICAgY29uc3QgbmV3VXNlckluZm8gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRVc2VySW5mbyhwYXJhbXMpXG4gICAgaWYgKChuZXdVc2VySW5mbyBhcyBhbnkpLmNvZGUgPT09ICdJTlZBTElEX0FDQ0VTU19UT0tFTicpIHtcbiAgICAgIHRoaXMuc2V0TG9jYWxVc2VySW5mbyh7fSlcbiAgICAgIHRocm93IG5ld1VzZXJJbmZvXG4gICAgfVxuICAgIHRoaXMuc2V0TG9jYWxVc2VySW5mbyhuZXdVc2VySW5mbylcbiAgICByZXR1cm4gbmV3VXNlckluZm9cbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2NhbFVzZXJJbmZvKGtleT86IHN0cmluZyk6IHN0cmluZyB8IGJvb2xlYW4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuY2FjaGUuZ2V0U3RvcmUodXNlckluZm9LZXkpXG5cbiAgICBpZiAoIWtleSkgcmV0dXJuIHVzZXJJbmZvIHx8IHt9XG5cbiAgICByZXR1cm4gdXNlckluZm9ba2V5XVxuICB9XG5cbiAgcHVibGljIHNldExvY2FsVXNlckluZm8odXNlckluZm86IGFueSkge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIHRoaXMuY2FjaGUuc2V0U3RvcmUodXNlckluZm9LZXksIHVzZXJJbmZvKVxuICAgIHRoaXMuc2V0VXNlckluZm8oKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRMb2NhbFVzZXJJbmZvQXN5bmMoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgdGhpcy5jYWNoZS5nZXRTdG9yZUFzeW5jKHVzZXJJbmZvS2V5KVxuICAgIHJldHVybiB1c2VySW5mb1trZXldXG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJJbmZvKCkge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5jYWNoZS5nZXRTdG9yZSh1c2VySW5mb0tleSlcbiAgICA7W1xuICAgICAgJ3VpZCcsXG4gICAgICAnZW1haWwnLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ2dlbmRlcicsXG4gICAgICAncGljdHVyZScsXG4gICAgICAnZW1haWxfdmVyaWZpZWQnLFxuICAgICAgJ3Bob25lX251bWJlcicsXG4gICAgICAnYmlydGhkYXRlJyxcbiAgICAgICd6b25laW5mbycsXG4gICAgICAnbG9jYWxlJyxcbiAgICAgICdzdWInLFxuICAgICAgJ2NyZWF0ZWRfZnJvbScsXG4gICAgICAncHJvdmlkZXJzJyxcbiAgICAgICd1c2VybmFtZScsXG4gICAgICAnY3JlYXRlZF9hdCcsXG4gICAgXS5mb3JFYWNoKChpbmZvS2V5KSA9PiB7XG4gICAgICB0aGlzW2luZm9LZXldID0gdXNlckluZm9baW5mb0tleV1cbiAgICB9KVxuICB9XG59XG5pbnRlcmZhY2UgSUxvZ2luU3RhdGVPcHRpb25zIGV4dGVuZHMgSVVzZXJPcHRpb25zIHtcbiAgZW52SWQ6IHN0cmluZ1xufVxuZXhwb3J0IGNsYXNzIExvZ2luU3RhdGUgaW1wbGVtZW50cyBJTG9naW5TdGF0ZSB7XG4gIHB1YmxpYyB1c2VyOiBVc2VyXG4gIHB1YmxpYyBvYXV0aExvZ2luU3RhdGU6IGFueVxuXG4gIHByaXZhdGUgb2F1dGhJbnN0YW5jZTogQ2xvdWRiYXNlT0F1dGhcbiAgcHJpdmF0ZSBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSUxvZ2luU3RhdGVPcHRpb25zKSB7XG4gICAgY29uc3QgeyBlbnZJZCwgY2FjaGUsIG9hdXRoSW5zdGFuY2UgfSA9IG9wdGlvbnNcbiAgICBpZiAoIWVudklkKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ2VudklkIGlzIG5vdCBkZWZpbmVkJylcbiAgICB9XG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy51c2VyID0gbmV3IFVzZXIoe1xuICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICBvYXV0aEluc3RhbmNlLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgY2hlY2tMb2NhbFN0YXRlKCkge1xuICAgIHRoaXMub2F1dGhMb2dpblN0YXRlID0gdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmhhc0xvZ2luU3RhdGVTeW5jKClcbiAgICB0aGlzLnVzZXIuY2hlY2tMb2NhbEluZm8oKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoZWNrTG9jYWxTdGF0ZUFzeW5jKCkge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5nZXRMb2dpblN0YXRlKClcbiAgICBhd2FpdCB0aGlzLnVzZXIuY2hlY2tMb2NhbEluZm9Bc3luYygpXG4gIH1cbn1cblxuaW50ZXJmYWNlIElBdXRoQ29uZmlnIGV4dGVuZHMgSUNsb3VkYmFzZUF1dGhDb25maWcge1xuICBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIHJlcXVlc3Q/OiBJQ2xvdWRiYXNlUmVxdWVzdFxuICBydW50aW1lPzogc3RyaW5nXG59XG5cbmNsYXNzIEF1dGgge1xuICByZWFkb25seSBjb25maWc6IElBdXRoQ29uZmlnXG4gIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG4gIHJlYWRvbmx5IGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgcHJpdmF0ZSBsaXN0ZW5lcnM6IE1hcDxzdHJpbmcsIFNldDxPbkF1dGhTdGF0ZUNoYW5nZUNhbGxiYWNrPj4gPSBuZXcgTWFwKClcbiAgcHJpdmF0ZSBoYXNMaXN0ZW5lclNldFVwID0gZmFsc2VcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IElBdXRoQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBjb25maWcub2F1dGhJbnN0YW5jZVxuICAgIHRoaXMuY2FjaGUgPSBjb25maWcuY2FjaGVcbiAgICB0aGlzLmluaXQoKVxuICAgIHRoaXMuc2V0QWNjZXNzS2V5KClcbiAgfVxuXG4gIC8qKlxuICAgKiDnu5HlrprmiYvmnLrlj7dcbiAgICogQHBhcmFtIHBob25lTnVtYmVyXG4gICAqIEBwYXJhbSBwaG9uZUNvZGVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfnu5HlrprmiYvmnLrlj7flpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmJpbmRQaG9uZU51bWJlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG55+t5L+h6aqM6K+B56CB55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBiaW5kUGhvbmVOdW1iZXIocGFyYW1zOiBhdXRoTW9kZWxzLkJpbmRQaG9uZVJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZWRpdENvbnRhY3QocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOino+e7keS4ieaWuee7keWumlxuICAgKiBAcGFyYW0gbG9naW5UeXBlXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6Kej6Zmk5LiJ5pa557uR5a6a5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS51bmJpbmRQcm92aWRlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN6LSm5oi35piv5ZCm5bey57uP5LiO5q2k55m75b2V5pa55byP6Kej57uRJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyB1bmJpbmRQcm92aWRlcihwYXJhbXM6IGF1dGhNb2RlbHMuVW5iaW5kUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVuYmluZFByb3ZpZGVyKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDpgq7nrrHlnLDlnYBcbiAgICogQHBhcmFtIGVtYWlsXG4gICAqIEBwYXJhbSBzdWRvX3Rva2VuXG4gICAqIEBwYXJhbSB2ZXJpZmljYXRpb25fdG9rZW5cbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfnu5Hlrprpgq7nrrHlnLDlnYDlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmJpbmRFbWFpbCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG6YKu566x5a+G56CB55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBiaW5kRW1haWwocGFyYW1zOiBhdXRoTW9kZWxzLkJpbmRFbWFpbFJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZWRpdENvbnRhY3QocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIHZlcmlmeVxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuVmVyaWZ5UmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuVmVyaWZ5UmVzcG9uc2U+fVxuICAgKiBAbWVtYmVyb2YgVXNlclxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+mqjOivgeeggemqjOivgeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkudmVyaWZ5KCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobmiYvmnLrpqozor4HnoIEv6YKu566x55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnkocGFyYW1zOiBhdXRoTW9kZWxzLlZlcmlmeVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuVmVyaWZ5UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudmVyaWZ5KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bpqozor4HnoIFcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlc3BvbnNlPn1cbiAgICogQG1lbWJlcm9mIFVzZXJcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bpqozor4HnoIHlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldFZlcmlmaWNhdGlvbigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG5omL5py66aqM6K+B56CBL+mCrueuseeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0VmVyaWZpY2F0aW9uKFxuICAgIHBhcmFtczogYXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXF1ZXN0LFxuICAgIG9wdGlvbnM/OiB7IHdpdGhDYXB0Y2hhOiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRWZXJpZmljYXRpb24ocGFyYW1zLCBvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluW9k+WJjeeZu+W9leeahOeUqOaIt+S/oeaBry3lkIzmraVcbiAgICovXG4gIGdldCBjdXJyZW50VXNlcigpIHtcbiAgICBpZiAodGhpcy5jYWNoZS5tb2RlID09PSAnYXN5bmMnKSB7XG4gICAgICAvLyBhc3luYyBzdG9yYWdl55qE5bmz5Y+w6LCD55So5q2kQVBJ5o+Q56S6XG4gICAgICBwcmludFdhcm4oXG4gICAgICAgIEVSUk9SUy5JTlZBTElEX09QRVJBVElPTixcbiAgICAgICAgJ2N1cnJlbnQgcGxhdGZvcm1cXCdzIHN0b3JhZ2UgaXMgYXN5bmNocm9ub3VzLCBwbGVhc2UgdXNlIGdldEN1cnJlbnRVc2VyIGluc3RlYWQnLFxuICAgICAgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IHRoaXMuaGFzTG9naW5TdGF0ZSgpXG5cbiAgICBpZiAobG9naW5TdGF0ZSkge1xuICAgICAgcmV0dXJuIGxvZ2luU3RhdGUudXNlciB8fCBudWxsXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5b2T5YmN55m75b2V55qE55So5oi35L+h5oGvLeW8guatpVxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0Q3VycmVudFVzZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldEN1cnJlbnRVc2VyKCk6IFByb21pc2U8KGF1dGhNb2RlbHMuVXNlckluZm8gJiBQYXJ0aWFsPFVzZXI+KSB8IG51bGw+IHtcbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICBpZiAobG9naW5TdGF0ZSkge1xuICAgICAgY29uc3QgdXNlckluZm8gPSBsb2dpblN0YXRlLnVzZXIuZ2V0TG9jYWxVc2VySW5mbygpIGFzIGF1dGhNb2RlbHMuVXNlckluZm9cbiAgICAgIGF3YWl0IGxvZ2luU3RhdGUudXNlci5jaGVja0xvY2FsSW5mb0FzeW5jKClcbiAgICAgIHJldHVybiB7IC4uLmxvZ2luU3RhdGUudXNlciwgLi4udXNlckluZm8gfSBhcyB1bmtub3duIGFzIGF1dGhNb2RlbHMuVXNlckluZm8gJiBQYXJ0aWFsPFVzZXI+XG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyAvKipcbiAgLy8gICog5Yy/5ZCN55m75b2VXG4gIC8vICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAvLyAgKiBAbWVtYmVyb2YgQXV0aFxuICAvLyAgKi9cbiAgLy8gQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgLy8gICB0aXRsZTogJ+WMv+WQjeeZu+W9leWksei0pScsXG4gIC8vICAgbWVzc2FnZXM6IFtcbiAgLy8gICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAvLyAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWMv+WQjeeZu+W9lScsXG4gIC8vICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5Bbm9ueW1vdXNseSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gIC8vICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgLy8gICBdLFxuICAvLyB9KVxuICAvLyBwdWJsaWMgYXN5bmMgc2lnbkluQW5vbnltb3VzbHkoZGF0YToge1xuICAvLyAgIHByb3ZpZGVyX3Rva2VuPzogc3RyaW5nXG4gIC8vIH0gPSB7fSwpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgLy8gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluQW5vbnltb3VzbHkoZGF0YSlcbiAgLy8gcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIC8vIH1cblxuICAvKipcbiAgICog5Yy/5ZCN55m75b2VXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+Wwj+eoi+W6j+WMv+WQjeeZu+W9leWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWMv+WQjeeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5Bbm9ueW1vdXNseUluV3goKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbkFub255bW91c2x5SW5XeCh7XG4gICAgdXNlV3hDbG91ZCxcbiAgfToge1xuICAgIHVzZVd4Q2xvdWQ/OiBib29sZWFuXG4gIH0gPSB7fSk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG5cbiAgICBjb25zdCBtYWluRnVuYyA9IGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG4gICAgICBsZXQgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IGNvZGUsXG4gICAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAnb3Blbl9pZCcsXG4gICAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpPy5lcnJvcl9jb2RlIHx8ICFyZXN1bHQucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluQW5vbnltb3VzbHkoXG4gICAgICAgICAgeyBwcm92aWRlcl90b2tlbjogcmVzdWx0LnByb3ZpZGVyX3Rva2VuIH0sXG4gICAgICAgICAgdXNlV3hDbG91ZCxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmICgoY3JlZGVudGlhbHMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgIHRocm93IGNyZWRlbnRpYWxzXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgd3gubG9naW4oe1xuICAgICAgICBzdWNjZXNzOiBhc3luYyAocmVzOiB7IGNvZGU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IG1haW5GdW5jKHJlcy5jb2RlKVxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBmYWlsOiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihyZXM/LmVyck1zZylcbiAgICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9IHJlcz8uZXJybm9cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHVuZGVmaW5lZCwgeyBhc3luY1JlZnJlc2hVc2VyOiB0cnVlIH0pXG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqP57uR5a6aT3BlbklEXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+Wwj+eoi+W6j+e7keWumk9wZW5JROWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j29wZW5JZOmdmem7mOeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5iaW5kT3BlbklkKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBiaW5kT3BlbklkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG5cbiAgICBjb25zdCBtYWluRnVuYyA9IGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0OiBhdXRoTW9kZWxzLkdyYW50UHJvdmlkZXJUb2tlblJlc3BvbnNlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbih7XG4gICAgICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgcHJvdmlkZXJfY29kZTogY29kZSxcbiAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ29wZW5faWQnLFxuICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpPy5lcnJvcl9jb2RlIHx8ICFyZXN1bHQucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgICAgICB0aHJvdyByZXN1bHRcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmJpbmRXaXRoUHJvdmlkZXIoeyBwcm92aWRlcl90b2tlbjogcmVzdWx0LnByb3ZpZGVyX3Rva2VuIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBtYWluRnVuYyhyZXMuY29kZSlcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqPdW5pb25JZOmdmem7mOeZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICflsI/nqIvluo91bmlvbklk6Z2Z6buY55m75b2V5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG5bCP56iL5bqPdW5pb25JZOmdmem7mOeZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoVW5pb25JZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFVuaW9uSWQoKTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHRocm93IEVycm9yKCd3eCBhcGkgdW5kZWZpbmVkJylcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXM6IHsgY29kZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVySWQgPSB3eEluZm8/LmFwcElkXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4oe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IHJlcy5jb2RlLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyX2lkOiBwcm92aWRlcklkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAgICAgICAgICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAndW5pb25faWQnLFxuICAgICAgICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBjb25zdCB7IHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuIH0gPSByZXN1bHRcblxuICAgICAgICAgICAgICBpZiAoIXByb3ZpZGVyVG9rZW4pIHtcbiAgICAgICAgICAgICAgICByZWplY3QocmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3Qgc2lnbkluUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9pZDogcHJvdmlkZXJJZCxcbiAgICAgICAgICAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbixcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBpZiAoKHNpZ25JblJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHNpZ25JblJlcylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWlsOiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHJlcz8uZXJyTXNnKVxuICAgICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqP55+t5L+h6aqM6K+B56CB55m76ZmGXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+efreS/oemqjOivgeeggeeZu+mZhicsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j+efreS/oemqjOivgeeggeeZu+mZhicsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoU21zKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoU21zKHtcbiAgICB2ZXJpZmljYXRpb25JbmZvID0geyB2ZXJpZmljYXRpb25faWQ6ICcnLCBpc191c2VyOiBmYWxzZSB9LFxuICAgIHZlcmlmaWNhdGlvbkNvZGUgPSAnJyxcbiAgICBwaG9uZU51bSA9ICcnLFxuICAgIGJpbmRJbmZvID0gdW5kZWZpbmVkLFxuICB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgIHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICAgIGJpbmRJbmZvLFxuICAgICAgICB1c2VybmFtZTogcGhvbmVOdW0sXG4gICAgICAgIGxvZ2luVHlwZTogJ3NtcycsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDpgq7nrrHpqozor4HnoIHnmbvpmYZcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6YKu566x6aqM6K+B56CB55m76ZmGJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG6YKu566x55m76ZmGJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhFbWFpbCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEVtYWlsKHtcbiAgICB2ZXJpZmljYXRpb25JbmZvID0geyB2ZXJpZmljYXRpb25faWQ6ICcnLCBpc191c2VyOiBmYWxzZSB9LFxuICAgIHZlcmlmaWNhdGlvbkNvZGUgPSAnJyxcbiAgICBiaW5kSW5mbyA9IHVuZGVmaW5lZCxcbiAgICBlbWFpbCA9ICcnLFxuICB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgIHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICAgIGJpbmRJbmZvLFxuICAgICAgICB1c2VybmFtZTogZW1haWwsXG4gICAgICAgIGxvZ2luVHlwZTogJ2VtYWlsJyxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiuvue9ruiOt+WPluiHquWumuS5ieeZu+W9lSB0aWNrZXQg5Ye95pWwXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm59IGdldFRpY2tGblxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIHNldEN1c3RvbVNpZ25GdW5jKGdldFRpY2tGbjogYXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm4pOiB2b2lkIHtcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRDdXN0b21TaWduRnVuYyhnZXRUaWNrRm4pXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICAvLyBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAvLyAgIHRpdGxlOiAn6Ieq5a6a5LmJ55m75b2V5aSx6LSlJyxcbiAgLy8gICBtZXNzYWdlczogW1xuICAvLyAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gIC8vICAgICAnICAxIC0g5b2T5YmN546v5aKD5piv5ZCm5byA5ZCv5LqG6Ieq5a6a5LmJ55m75b2VJyxcbiAgLy8gICAgICcgIDIgLSDosIPnlKggYXV0aCgpLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgJyAgMyAtIHRpY2tldCDmmK/lkKblvZLlsZ7kuo7lvZPliY3njq/looMnLFxuICAvLyAgICAgJyAgNCAtIOWIm+W7uiB0aWNrZXQg55qE6Ieq5a6a5LmJ55m75b2V56eB6ZKl5piv5ZCm6L+H5pyfJyxcbiAgLy8gICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAvLyAgIF0sXG4gIC8vIH0pXG4gIC8vIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoQ3VzdG9tVGlja2V0KCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAvLyAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhDdXN0b21UaWNrZXQoKVxuICAvLyAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAvLyB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0fSBwYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2lnbkluKHBhcmFtczogYXV0aE1vZGVscy5TaWduSW5SZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHBhcmFtcylcbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKlxuICAvLyAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuU2lnblVwUmVxdWVzdH0gcGFyYW1zXG4gIC8vICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAvLyAgKiBAbWVtYmVyb2YgQXV0aFxuICAvLyAgKi9cbiAgLy8gQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgLy8gICB0aXRsZTogJ+azqOWGjOWksei0pScsXG4gIC8vICAgbWVzc2FnZXM6IFtcbiAgLy8gICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAvLyAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huaMh+WumueZu+W9leaWueW8jycsXG4gIC8vICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduVXAoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25VcChwYXJhbXM6IGF1dGhNb2RlbHMuU2lnblVwUmVxdWVzdCk6IFByb21pc2U8YW55PiB7XG4gIC8vICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnblVwKHBhcmFtcylcbiAgLy8gICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiDorr7nva7lr4bnoIFcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlNldFBhc3N3b3JkUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldFBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5TZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0UGFzc3dvcmQocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOajgOa1i+eUqOaIt+WQjeaYr+WQpuW3sue7j+WNoOeUqFxuICAgKiBAcGFyYW0gdXNlcm5hbWVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bnlKjmiLfmmK/lkKbooqvljaDnlKjlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmlzVXNlcm5hbWVSZWdpc3RlcmVkKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBpc1VzZXJuYW1lUmVnaXN0ZXJlZCh1c2VybmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHR5cGVvZiB1c2VybmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93RXJyb3IoRVJST1JTLklOVkFMSURfUEFSQU1TLCAndXNlcm5hbWUgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBleGlzdCB9ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuY2hlY2tJZlVzZXJFeGlzdCh7IHVzZXJuYW1lIH0pXG4gICAgcmV0dXJuIGV4aXN0XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W5pys5Zyw55m75b2V5oCBLeWQjOatpVxuICAgKi9cbiAgcHVibGljIGhhc0xvZ2luU3RhdGUoKTogTG9naW5TdGF0ZSB8IG51bGwge1xuICAgIGlmICh0aGlzLmNhY2hlLm1vZGUgPT09ICdhc3luYycpIHtcbiAgICAgIC8vIGFzeW5jIHN0b3JhZ2XnmoTlubPlj7DosIPnlKjmraRBUEnmj5DnpLpcbiAgICAgIHByaW50V2FybihcbiAgICAgICAgRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLFxuICAgICAgICAnY3VycmVudCBwbGF0Zm9ybVxcJ3Mgc3RvcmFnZSBpcyBhc3luY2hyb25vdXMsIHBsZWFzZSB1c2UgZ2V0TG9naW5TdGF0ZSBpbnN0ZWFkJyxcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9hdXRoTG9naW5TdGF0ZSA9IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5oYXNMb2dpblN0YXRlU3luYygpXG4gICAgaWYgKG9hdXRoTG9naW5TdGF0ZSkge1xuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IG5ldyBMb2dpblN0YXRlKHtcbiAgICAgICAgZW52SWQ6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAgIG9hdXRoSW5zdGFuY2U6IHRoaXMub2F1dGhJbnN0YW5jZSxcbiAgICAgIH0pXG4gICAgICByZXR1cm4gbG9naW5TdGF0ZVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeZu+W9leaAgS3lvILmraVcbiAgICog5q2kQVBJ5Li65YW85a655byC5q2lc3RvcmFnZeeahOW5s+WPsFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPluacrOWcsOeZu+W9leaAgeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuZ2V0TG9naW5TdGF0ZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0TG9naW5TdGF0ZSgpIHtcbiAgICBsZXQgb2F1dGhMb2dpblN0YXRlID0gbnVsbFxuXG4gICAgdHJ5IHtcbiAgICAgIG9hdXRoTG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldExvZ2luU3RhdGUoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGlmIChvYXV0aExvZ2luU3RhdGUpIHtcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBuZXcgTG9naW5TdGF0ZSh7XG4gICAgICAgIGVudklkOiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIOS9v+eUqCBnZXRDdXJyZW50VXNlciDku6Pmm7/vvIzlm6DkuLrkuI5ub2RlLXNka+aWueazleWQjeWGsueqgVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+iOt+WPlueUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOaYr+WQpuW3sueZu+W9lScsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5nZXRVc2VySW5mbygpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckluZm8oKTogUHJvbWlzZTwoYXV0aE1vZGVscy5Vc2VySW5mbyAmIFBhcnRpYWw8VXNlcj4pIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRVc2VyKClcbiAgfVxuXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5blvq7mkK3mj5Lku7bnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDmmK/lkKblt7LnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuZ2V0V2VkYVVzZXJJbmZvKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRXZWRhVXNlckluZm8oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0V2VkYVVzZXJJbmZvKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtczogYXV0aE1vZGVscy5Nb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCkge1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKVxuICAgIGlmIChsb2dpblN0YXRlKSB7XG4gICAgICBhd2FpdCAobG9naW5TdGF0ZS51c2VyIGFzIFVzZXIpLnVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuXG4gIC8qKlxuICAgKiBnZXRBdXRoSGVhZGVyIOWFvOWuueWkhOeQhlxuICAgKiDov5Tlm57nqbrlr7nosaFcbiAgICovXG4gIHB1YmxpYyBnZXRBdXRoSGVhZGVyKCk6IHt9IHtcbiAgICBjb25zb2xlLmVycm9yKCdBdXRoLmdldEF1dGhIZWFkZXIgQVBJIOW3suW6n+W8gycpXG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICAvKipcbiAgICog5Li65bey5pyJ6LSm5oi357uR56ys5LiJ5pa56LSm5oi3XG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5CaW5kV2l0aFByb3ZpZGVyUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+e7keWumuesrOS4ieaWueeZu+W9leaWueW8j+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkuYmluZFdpdGhQcm92aWRlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5q2k6LSm5oi35piv5ZCm5bey57uP57uR5a6a5q2k56ys5LiJ5pa5JyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBiaW5kV2l0aFByb3ZpZGVyKHBhcmFtczogYXV0aE1vZGVscy5CaW5kV2l0aFByb3ZpZGVyUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmn6Xor6LnlKjmiLdcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0fSBhcHBlbmRlZF9wYXJhbXNcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcXVlcnlVc2VyKHF1ZXJ5T2JqOiBhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLlF1ZXJ5VXNlclByb2ZpbGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5xdWVyeVVzZXJQcm9maWxlKHF1ZXJ5T2JqKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFjY2Vzc1Rva2VuKCkge1xuICAgIGNvbnN0IG9hdXRoQWNjZXNzVG9rZW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmdldEFjY2Vzc1Rva2VuKClcbiAgICByZXR1cm4ge1xuICAgICAgYWNjZXNzVG9rZW46IG9hdXRoQWNjZXNzVG9rZW5SZXMsXG4gICAgICBlbnY6IHRoaXMuY29uZmlnLmVudixcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ3JhbnRQcm92aWRlclRva2VuKHBhcmFtczogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4ocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHBhdGNoUHJvdmlkZXJUb2tlbihwYXJhbXM6IGF1dGhNb2RlbHMuUGF0Y2hQcm92aWRlclRva2VuUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuUGF0Y2hQcm92aWRlclRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucGF0Y2hQcm92aWRlclRva2VuKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25JbldpdGhQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhXZWNoYXQocGFyYW1zOiBhbnkgPSB7fSkge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhXZWNoYXQocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdyYW50VG9rZW4ocGFyYW1zOiBhdXRoTW9kZWxzLkdyYW50VG9rZW5SZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRUb2tlbihwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2VuUHJvdmlkZXJSZWRpcmVjdFVyaShwYXJhbXM6IGF1dGhNb2RlbHMuR2VuUHJvdmlkZXJSZWRpcmVjdFVyaVJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZW5Qcm92aWRlclJlZGlyZWN0VXJpKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXNldFBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5SZXNldFBhc3N3b3JkUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5yZXNldFBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXZpY2VBdXRob3JpemUocGFyYW1zOiBhdXRoTW9kZWxzLkRldmljZUF1dGhvcml6ZVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuRGV2aWNlQXV0aG9yaXplUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZGV2aWNlQXV0aG9yaXplKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzdWRvKHBhcmFtczogYXV0aE1vZGVscy5TdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5TdWRvUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc3VkbyhwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlTWUocGFyYW1zOiBhdXRoTW9kZWxzLldpdGhTdWRvUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5Vc2VyUHJvZmlsZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZWxldGVNZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJzKCk6IFByb21pc2U8YXV0aE1vZGVscy5Qcm92aWRlcnNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRQcm92aWRlcnMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luU2NvcGUoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkubG9naW5TY29wZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9naW5Hcm91cHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5sb2dpbkdyb3VwcygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25Mb2dpblN0YXRlQ2hhbmdlZChjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8ub24oRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIC8vIGdldExvZ2luU3RhdGXkvJrph43lpI3op6blj5FnZXRDcmVkZW50aWFsc++8jOWvvOiHtOatu+W+queOr++8jOaJgOS7pWdldENyZWRlbnRpYWxz5Ye66ZSZ5LiN5YaN5Ye65Y+RZ2V0TG9naW5TdGF0ZVxuICAgICAgY29uc3QgbG9naW5TdGF0ZSA9IHBhcmFtcz8uZGF0YT8uZXZlbnRUeXBlICE9PSBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuQ1JFREVOVElBTFNfRVJST1IgPyBhd2FpdCB0aGlzLmdldExvZ2luU3RhdGUoKSA6IHt9XG4gICAgICBjYWxsYmFjay5jYWxsKHRoaXMsIHsgLi4ucGFyYW1zLCAuLi5sb2dpblN0YXRlIH0pXG4gICAgfSlcbiAgICAvLyDnq4vliLvmiafooYzkuIDmrKHlm57osINcbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICBjYWxsYmFjay5jYWxsKHRoaXMsIGxvZ2luU3RhdGUpXG4gIH1cblxuICAvKipcbiAgICog5by65Yi25Yi35pawdG9rZW5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtczogeyB2ZXJzaW9uPzogc3RyaW5nIH0pOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnJlZnJlc2hUb2tlbkZvcmNlKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bouqvku73kv6Hmga9cbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDcmVkZW50aWFscygpOiBQcm9taXNlPENyZWRlbnRpYWxzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldENyZWRlbnRpYWxzKClcbiAgfVxuICAvKipcbiAgICog5YaZ5YWl6Lqr5Lu95L+h5oGvXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzKSB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscylcbiAgfVxuXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bouqvku73mupDnsbvlnosnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldFByb3ZpZGVyU3ViVHlwZSgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0UHJvdmlkZXJTdWJUeXBlKCk6IFByb21pc2U8YXV0aE1vZGVscy5Qcm92aWRlclN1YlR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0UHJvdmlkZXJTdWJUeXBlKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDYXB0Y2hhRGF0YShwYXJhbXM6IHsgc3RhdGU6IHN0cmluZzsgcmVkaXJlY3RfdXJpPzogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuY3JlYXRlQ2FwdGNoYURhdGEocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHZlcmlmeUNhcHRjaGFEYXRhKHBhcmFtczogeyB0b2tlbjogc3RyaW5nOyBrZXk6IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnZlcmlmeUNhcHRjaGFEYXRhKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRNaW5pUHJvZ3JhbVFyQ29kZShwYXJhbXM6IGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVSZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRNaW5pUHJvZ3JhbVFyQ29kZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldE1pbmlQcm9ncmFtQ29kZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXMocGFyYW1zOiBhdXRoTW9kZWxzLkdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1cyhwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmQocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLm1vZGlmeVBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBtb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpbihwYXJhbXM6IGF1dGhNb2RlbHMuTW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW5SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLm1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRVc2VyQmVoYXZpb3JMb2cocGFyYW1zOiBhdXRoTW9kZWxzLkdldFVzZXJCZWhhdmlvckxvZyk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRVc2VyQmVoYXZpb3JMb2dSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VXNlckJlaGF2aW9yTG9nKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiBzbXMvZW1haWwg6aqM6K+B56CB55m75b2VL+azqOWGjO+8jOmAu+i+keS4gOiHtOaUtuaVm1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgdmVyaWZpY2F0aW9uSW5mbyA9IHsgdmVyaWZpY2F0aW9uX2lkOiAnJywgaXNfdXNlcjogZmFsc2UgfSxcbiAgICB2ZXJpZmljYXRpb25Db2RlID0gJycsXG4gICAgdXNlcm5hbWU6IHJhd1VzZXJuYW1lID0gJycsXG4gICAgYmluZEluZm8gPSB1bmRlZmluZWQsXG4gICAgbG9naW5UeXBlID0gJycsXG4gIH06IHtcbiAgICB2ZXJpZmljYXRpb25JbmZvPzogYXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXNwb25zZVxuICAgIHZlcmlmaWNhdGlvbkNvZGU/OiBzdHJpbmdcbiAgICB1c2VybmFtZT86IHN0cmluZ1xuICAgIGJpbmRJbmZvPzogYW55XG4gICAgbG9naW5UeXBlPzogc3RyaW5nXG4gIH0pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICB0cnkge1xuICAgICAgLy8gMS4g6aqM6K+B6aqM6K+B56CBXG4gICAgICBjb25zdCB2ZXJpZnlSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS52ZXJpZnkoe1xuICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogdmVyaWZpY2F0aW9uQ29kZSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICgodmVyaWZ5UmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgdmVyaWZ5UmVzXG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAgIGNvbnN0IHsgdmVyaWZpY2F0aW9uX3Rva2VuIH0gPSB2ZXJpZnlSZXNcblxuICAgICAgLy8g5omL5py655m75b2V5Y+C5pWwXG4gICAgICBsZXQgdXNlcm5hbWUgPSAvXlxcK1xcZHsxLDN9XFxzKy8udGVzdChyYXdVc2VybmFtZSkgPyByYXdVc2VybmFtZSA6IGArODYgJHtyYXdVc2VybmFtZX1gXG4gICAgICBsZXQgc2lnblVwUGFyYW06IGFueSA9IHsgcGhvbmVfbnVtYmVyOiB1c2VybmFtZSB9XG5cbiAgICAgIC8vIOmCrueuseeZu+W9leWPguaVsFxuICAgICAgaWYgKGxvZ2luVHlwZSA9PT0gJ2VtYWlsJykge1xuICAgICAgICB1c2VybmFtZSA9IHJhd1VzZXJuYW1lXG4gICAgICAgIHNpZ25VcFBhcmFtID0geyBlbWFpbDogdXNlcm5hbWUgfVxuICAgICAgfVxuXG4gICAgICAvLyAyLiDmoLnmja7mmK/lkKblt7Lnu4/mmK/nlKjmiLfvvIzliIbliKvotbDnmbvlvZXmiJbms6jlhozpgLvovpFcbiAgICAgIGlmICh2ZXJpZmljYXRpb25JbmZvLmlzX3VzZXIpIHtcbiAgICAgICAgLy8g56eB5pyJ5YyW546v5aKD5oiW6ICF6Ieq5a6a5LmJ5bqU55So6LWwdjHniYjmnKznmoTogIHpgLvovpFcbiAgICAgICAgY29uc3Qgc2lnbkluUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluKHtcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW4sXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKChzaWduSW5SZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgIHRocm93IHNpZ25JblJlc1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJpbmRJbmZvKSB7XG4gICAgICAgICAgY29uc3QgYmluZFJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmJpbmRXaXRoUHJvdmlkZXIoe1xuICAgICAgICAgICAgcHJvdmlkZXJfdG9rZW46IChiaW5kSW5mbyBhcyBhbnkpPy5wcm92aWRlclRva2VuLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBpZiAoKGJpbmRSZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgICAgdGhyb3cgYmluZFJlc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g6Ieq5a6a5LmJ5bqU55So6LWwc2lnblVw6YC76L6RXG4gICAgICAgIGNvbnN0IHNpZ25VcFJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25VcCh7XG4gICAgICAgICAgLi4uc2lnblVwUGFyYW0sXG4gICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICAgIHByb3ZpZGVyX3Rva2VuOiAoYmluZEluZm8gYXMgYW55KT8ucHJvdmlkZXJJZCxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoKHNpZ25VcFJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgdGhyb3cgc2lnblVwUmVzXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlTG9naW5TdGF0ZShcbiAgICBwYXJhbXM/OiB7IHZlcnNpb24/OiBzdHJpbmc7IHF1ZXJ5PzogYW55IH0sXG4gICAgb3B0aW9ucz86IHsgYXN5bmNSZWZyZXNoVXNlcj86IGJvb2xlYW47IHVzZXJJbmZvPzogYW55IH0sXG4gICk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBuZXcgTG9naW5TdGF0ZSh7XG4gICAgICBlbnZJZDogdGhpcy5jb25maWcuZW52LFxuICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UsXG4gICAgfSlcblxuICAgIGF3YWl0IGxvZ2luU3RhdGUuY2hlY2tMb2NhbFN0YXRlQXN5bmMoKVxuXG4gICAgaWYgKG9wdGlvbnM/LnVzZXJJbmZvKSB7XG4gICAgICBsb2dpblN0YXRlLnVzZXIuc2V0TG9jYWxVc2VySW5mbyhvcHRpb25zLnVzZXJJbmZvKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucz8uYXN5bmNSZWZyZXNoVXNlcikge1xuICAgICAgICBsb2dpblN0YXRlLnVzZXIucmVmcmVzaChwYXJhbXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBsb2dpblN0YXRlLnVzZXIucmVmcmVzaChwYXJhbXMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnRUeXBlOiBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTl9JTiB9KVxuXG4gICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX0lOIH0pXG4gICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgfVxuXG4gIGFzeW5jIHNldEFjY2Vzc0tleSgpIHtcbiAgICBsZXQgYWNjZXNzVG9rZW4gPSAnJ1xuICAgIGxldCBzY29wZSA9ICcnXG4gICAgaWYgKHRoaXMuY29uZmlnLmFjY2Vzc0tleSkge1xuICAgICAgYWNjZXNzVG9rZW4gPSB0aGlzLmNvbmZpZy5hY2Nlc3NLZXlcbiAgICAgIHNjb3BlID0gJ2FjY2Vzc0tleSdcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLmF1dGg/LnNlY3JldElkICYmIHRoaXMuY29uZmlnLmF1dGg/LnNlY3JldEtleSkge1xuICAgICAgYWNjZXNzVG9rZW4gPSAnJ1xuICAgICAgc2NvcGUgPSBERUZBVUxUX05PREVfQUNDRVNTX1NDT1BFXG4gICAgfVxuXG4gICAgaWYgKCFzY29wZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQuc2V0QWNjZXNzS2V5Q3JlZGVudGlhbHMoe1xuICAgICAgICBhY2Nlc3NfdG9rZW46IGFjY2Vzc1Rva2VuLFxuICAgICAgICB0b2tlbl90eXBlOiAnQmVhcmVyJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGV4cGlyZXNfYXQ6IG5ldyBEYXRlKCtuZXcgRGF0ZSgpICsgK25ldyBEYXRlKCkpLFxuICAgICAgICBleHBpcmVzX2luOiArbmV3IERhdGUoKSArICtuZXcgRGF0ZSgpLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKCdhY2Nlc3NLZXkgZXJyb3I6ICcsIGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT0gbmV3IGF1dGggYXBpIG1ldGhvZHMgbWVyZ2VkIGJlbG93ID09PT09PT09PT1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ25pbmFub255bW91c2x5XG4gICAqIFNpZ24gaW4gYSB1c2VyIGFub255bW91c2x5LlxuICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBhdXRoLnNpZ25JbkFub255bW91c2x5KCk7XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluQW5vbnltb3VzbHkocGFyYW1zOiBTaWduSW5Bbm9ueW1vdXNseVJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbkFub255bW91c2x5KHBhcmFtcylcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ251cFxuICAgKiBTaWduIHVwIGEgbmV3IHVzZXIgd2l0aCBlbWFpbCBvciBwaG9uZSB1c2luZyBhIG9uZS10aW1lIHBhc3N3b3JkIChPVFApLiBJZiB0aGUgYWNjb3VudCBub3QgZXhpc3QsIGEgbmV3IGFjY291bnQgd2lsbCBiZSBjcmVhdGVkLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnblVwUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnblVwKHBhcmFtczogYXV0aE1vZGVscy5TaWduVXBSZXF1ZXN0ICYgeyBwaG9uZT86IHN0cmluZyB9KTogUHJvbWlzZTxTaWduVXBSZXM+IHtcbiAgICBpZiAocGFyYW1zLnBob25lX251bWJlciB8fCBwYXJhbXMudmVyaWZpY2F0aW9uX2NvZGUgfHwgcGFyYW1zLnZlcmlmaWNhdGlvbl90b2tlbiB8fCBwYXJhbXMucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25VcChwYXJhbXMpXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKCkgYXMgYW55XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbOaIlnBob25l5b+F5aGr5YW25LiAXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXMsIFtbJ2VtYWlsJ10sIFsncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHBhcmFtcy5lbWFpbCA/IHsgZW1haWw6IHBhcmFtcy5lbWFpbCB9IDogeyBwaG9uZV9udW1iZXI6IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSB9LClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHsgdG9rZW4sIG1lc3NhZ2VJZCA9IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkIH0pOiBQcm9taXNlPFNpZ25JblJlcz4gPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8g56ys5LiJ5q2l77ya5b6F55So5oi36L6T5YWl5a6M6aqM6K+B56CB5LmL5ZCO77yM6aqM6K+B55+t5L+h6aqM6K+B56CBXG4gICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvblRva2VuUmVzID0gYXdhaXQgdGhpcy52ZXJpZnkoe1xuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9pZDogbWVzc2FnZUlkIHx8IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiB0b2tlbixcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAvLyDnrKzlm5vmraXvvJrms6jlhozlubbnmbvlvZXmiJbnm7TmjqXnmbvlvZVcbiAgICAgICAgICAgICAgLy8g5aaC5p6c55So5oi35bey57uP5a2Y5Zyo77yM55u05o6l55m75b2VXG4gICAgICAgICAgICAgIGlmICh2ZXJpZmljYXRpb25JbmZvLmlzX3VzZXIpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNpZ25Jbih7XG4gICAgICAgICAgICAgICAgICB1c2VybmFtZTogcGFyYW1zLmVtYWlsIHx8IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSxcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogdmVyaWZpY2F0aW9uVG9rZW5SZXMudmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c55So5oi35LiN5a2Y5Zyo77yM5rOo5YaM55So5oi3XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGFyYW1zKSlcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YS5lbWFpbFxuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBob25lXG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAoe1xuICAgICAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgICAgIC4uLihwYXJhbXMuZW1haWwgPyB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfSA6IHsgcGhvbmVfbnVtYmVyOiB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfSksXG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25fdG9rZW46IHZlcmlmaWNhdGlvblRva2VuUmVzLnZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiB0b2tlbixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbm91dFxuICAgKiBjb25zdCByZXN1bHQgPSBhd2FpdCBhdXRoLnNpZ25PdXQoKTtcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgc2lnbk91dChwYXJhbXM/OiBhdXRoTW9kZWxzLlNpZ25vdXRSZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5TaWdub3V0UmVzcG9uc2UgJiB7IGRhdGE6IE9iamVjdDsgZXJyb3I6IEF1dGhFcnJvciB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbk91dChwYXJhbXMpXG4gICAgICBhd2FpdCB0aGlzLmNhY2hlLnJlbW92ZVN0b3JlQXN5bmModXNlckluZm9LZXkpXG4gICAgICB0aGlzLnNldEFjY2Vzc0tleSgpXG5cbiAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5MT0dJTl9TVEFURV9DSEFOR0VELCB7IGV2ZW50VHlwZTogTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05fT1VUIH0pXG5cbiAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9PVVQgfSlcblxuICAgICAgLy8gcmVz6L+U5Zue5piv5Li65LqG5YW85a65djLniYjmnKxcbiAgICAgIHJldHVybiB7IC4uLnJlcywgZGF0YToge30sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1vbmF1dGhzdGF0ZWNoYW5nZVxuICAgKiBSZWNlaXZlIGEgbm90aWZpY2F0aW9uIGV2ZXJ5IHRpbWUgYW4gYXV0aCBldmVudCBoYXBwZW5zLlxuICAgKiBAcGFyYW0gY2FsbGJhY2tcbiAgICogQHJldHVybnMgUHJvbWlzZTx7IGRhdGE6IHsgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfSwgZXJyb3I6IEVycm9yIHwgbnVsbCB9PlxuICAgKi9cbiAgb25BdXRoU3RhdGVDaGFuZ2UoY2FsbGJhY2s6IE9uQXV0aFN0YXRlQ2hhbmdlQ2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJTZXRVcCkge1xuICAgICAgdGhpcy5zZXR1cExpc3RlbmVycygpXG4gICAgICB0aGlzLmhhc0xpc3RlbmVyU2V0VXAgPSB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KVxuXG4gICAgaWYgKCF0aGlzLmxpc3RlbmVycy5oYXMoaWQpKSB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5zZXQoaWQsIG5ldyBTZXQoKSlcbiAgICB9XG5cbiAgICB0aGlzLmxpc3RlbmVycy5nZXQoaWQpIS5hZGQoY2FsbGJhY2spXG5cbiAgICAvLyDov5Tlm54gU3Vic2NyaXB0aW9uIOWvueixoVxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHtcbiAgICAgIGlkLFxuICAgICAgY2FsbGJhY2ssXG4gICAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzLmxpc3RlbmVycy5nZXQoaWQpXG4gICAgICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgICAgICBjYWxsYmFja3MuZGVsZXRlKGNhbGxiYWNrKVxuICAgICAgICAgIGlmIChjYWxsYmFja3Muc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGlkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogeyBzdWJzY3JpcHRpb24gfSxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ25pbndpdGhwYXNzd29yZFxuICAgKiBMb2cgaW4gYW4gZXhpc3RpbmcgdXNlciB3aXRoIGFuIGVtYWlsIGFuZCBwYXNzd29yZCBvciBwaG9uZSBhbmQgcGFzc3dvcmQgb3IgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aFBhc3N3b3JkKHBhcmFtczogU2lnbkluV2l0aFBhc3N3b3JkUmVxKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yadXNlcm5hbWUvZW1haWwvcGhvbmXkuInpgInkuIDvvIxwYXNzd29yZOW/heWhq1xuICAgICAgdGhpcy52YWxpZGF0ZUF0TGVhc3RPbmUoXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgW1sndXNlcm5hbWUnXSwgWydlbWFpbCddLCBbJ3Bob25lJ11dLFxuICAgICAgICAnWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgdXNlcm5hbWUsIGVtYWlsLCBvciBwaG9uZScsXG4gICAgICApXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICBwYXNzd29yZDogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zaWduSW4oe1xuICAgICAgICB1c2VybmFtZTogcGFyYW1zLnVzZXJuYW1lIHx8IHBhcmFtcy5lbWFpbCB8fCB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSksXG4gICAgICAgIHBhc3N3b3JkOiBwYXJhbXMucGFzc3dvcmQsXG4gICAgICAgIC4uLihwYXJhbXMuaXNfZW5jcnlwdCA/IHsgaXNFbmNyeXB0OiB0cnVlLCB2ZXJzaW9uOiAndjInIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbmlud2l0aGlkdG9rZW5cbiAgICog56ys5LiJ5pa55bmz5Y+w55m75b2V44CC5aaC5p6c55So5oi35LiN5a2Y5Zyo77yM5Lya5qC55o2u5LqR5byA5Y+R5bmz5Y+wLeeZu+W9leaWueW8j+S4reWvueW6lOi6q+S7vea6kOeahOeZu+W9leaooeW8j+mFjee9ru+8jOWIpOaWreaYr+WQpuiHquWKqOazqOWGjFxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aElkVG9rZW4ocGFyYW1zOiBTaWduSW5XaXRoSWRUb2tlblJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnRva2Vu5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICB0b2tlbjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Rva2VuIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zaWduSW5XaXRoUHJvdmlkZXIoe1xuICAgICAgICBwcm92aWRlcl90b2tlbjogcGFyYW1zLnRva2VuLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNpZ25pbndpdGhvdHBcbiAgICogTG9nIGluIGEgdXNlciB1c2luZyBhIG9uZS10aW1lIHBhc3N3b3JkIChPVFApLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluV2l0aE90cFJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhPdHAocGFyYW1zOiBTaWduSW5XaXRoT3RwUmVxKTogUHJvbWlzZTxTaWduSW5XaXRoT3RwUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mmVtYWls5oiWcGhvbmXlv4XloavlhbbkuIBcbiAgICAgIHRoaXMudmFsaWRhdGVBdExlYXN0T25lKHBhcmFtcywgW1snZW1haWwnXSwgWydwaG9uZSddXSwgJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlcicpXG5cbiAgICAgIC8vIOesrOS4gOatpe+8muWPkemAgemqjOivgeeggeW5tuWtmOWCqCB2ZXJpZmljYXRpb25JbmZvXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25JbmZvID0gYXdhaXQgdGhpcy5nZXRWZXJpZmljYXRpb24ocGFyYW1zLmVtYWlsID8geyBlbWFpbDogcGFyYW1zLmVtYWlsIH0gOiB7IHBob25lX251bWJlcjogdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpIH0sKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgdXNlcjogbnVsbCxcbiAgICAgICAgICBzZXNzaW9uOiBudWxsLFxuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHsgdG9rZW4sIG1lc3NhZ2VJZCA9IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkIH0pOiBQcm9taXNlPFNpZ25JblJlcz4gPT4gdGhpcy52ZXJpZnlPdHAoe1xuICAgICAgICAgICAgZW1haWw6IHBhcmFtcy5lbWFpbCxcbiAgICAgICAgICAgIHBob25lOiBwYXJhbXMucGhvbmUsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqoznrKzkuInmlrnlubPlj7DmjojmnYPnmbvlvZXlm57osINcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHZlcmlmeU9BdXRoKHBhcmFtcz86IFZlcmlmeU9BdXRoUmVxKTogUHJvbWlzZTxWZXJpZnlPQXV0aFJlcz4ge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHt9XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWbnuiwg+iHsyBwcm92aWRlcl9yZWRpcmVjdF91cmkg5Zyw5Z2A77yIdXJsIHF1ZXJ55Lit5pC65bimIOaOiOadg2NvZGXvvIxzdGF0ZeetieWPguaVsO+8ie+8jOatpOaXtuajgOafpSBzdGF0ZSDmmK/lkKbnrKblkIjpooTmnJ/vvIjlpoIg6Ieq5bex6K6+572u55qEIHd4X29wZW4pXG4gICAgICBjb25zdCBjb2RlID0gcGFyYW1zPy5jb2RlIHx8IHV0aWxzLmdldFF1ZXJ5KCdjb2RlJylcbiAgICAgIGNvbnN0IHN0YXRlID0gcGFyYW1zPy5zdGF0ZSB8fCB1dGlscy5nZXRRdWVyeSgnc3RhdGUnKVxuXG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJpjb2Rl5ZKMc3RhdGXlv4XloatcbiAgICAgIGlmICghY29kZSkge1xuICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiAnQ29kZSBpcyByZXF1aXJlZCcgfSkgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6ICdTdGF0ZSBpcyByZXF1aXJlZCcgfSkgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWNoZURhdGEgPSBnZXRCcm93c2VyU2Vzc2lvbihzdGF0ZSlcbiAgICAgIGRhdGEudHlwZSA9IGNhY2hlRGF0YT8udHlwZVxuXG4gICAgICBjb25zdCBwcm92aWRlciA9IHBhcmFtcz8ucHJvdmlkZXIgfHwgY2FjaGVEYXRhPy5wcm92aWRlciB8fCB1dGlscy5nZXRRdWVyeSgncHJvdmlkZXInKVxuXG4gICAgICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ1Byb3ZpZGVyIGlzIHJlcXVpcmVkJyB9KSB9XG4gICAgICB9XG5cbiAgICAgIC8vIHN0YXRl56ym5ZCI6aKE5pyf77yM5YiZ6I635Y+W6K+l5LiJ5pa55bmz5Y+wdG9rZW5cbiAgICAgIGNvbnN0IHsgcHJvdmlkZXJfdG9rZW46IHRva2VuIH0gPSBhd2FpdCB0aGlzLmdyYW50UHJvdmlkZXJUb2tlbih7XG4gICAgICAgIHByb3ZpZGVyX2lkOiBwcm92aWRlcixcbiAgICAgICAgcHJvdmlkZXJfcmVkaXJlY3RfdXJpOiBsb2NhdGlvbi5vcmlnaW4gKyBsb2NhdGlvbi5wYXRobmFtZSwgLy8g5oyH5a6a5LiJ5pa55bmz5Y+w6Lez5Zue55qEIHVybCDlnLDlnYBcbiAgICAgICAgcHJvdmlkZXJfY29kZTogY29kZSwgLy8g56ys5LiJ5pa55bmz5Y+w6Lez6L2s5Zue6aG16Z2i5pe277yMdXJsIHBhcmFtIOS4reaQuuW4pueahCBjb2RlIOWPguaVsFxuICAgICAgfSlcblxuICAgICAgbGV0IHJlczogVmVyaWZ5T0F1dGhSZXNcblxuICAgICAgaWYgKGNhY2hlRGF0YS50eXBlID09PSBPQVVUSF9UWVBFLkJJTkRfSURFTlRJVFkpIHtcbiAgICAgICAgcmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudG9CaW5kSWRlbnRpdHkoeyBwcm92aWRlcl90b2tlbjogdG9rZW4sIHByb3ZpZGVyLCBmaXJlRXZlbnQ6IHRydWUgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOmAmui/hyBwcm92aWRlcl90b2tlbiDku4XnmbvlvZXmiJbnmbvlvZXlubbms6jlhozvvIjkuI7kupHlvIDlj5HlubPlj7At55m75b2V5pa55byPLei6q+S7vea6kOeZu+W9leaooeW8j+mFjee9ruacieWFs++8iVxuICAgICAgICByZXMgPSBhd2FpdCB0aGlzLnNpZ25JbldpdGhJZFRva2VuKHtcbiAgICAgICAgICB0b2tlbixcbiAgICAgICAgfSlcbiAgICAgICAgcmVzLmRhdGEgPSB7IC4uLmRhdGEsIC4uLnJlcy5kYXRhIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9jYWxTZWFyY2ggPSBuZXcgVVJMU2VhcmNoUGFyYW1zKGxvY2F0aW9uPy5zZWFyY2gpXG4gICAgICBsb2NhbFNlYXJjaC5kZWxldGUoJ2NvZGUnKVxuICAgICAgbG9jYWxTZWFyY2guZGVsZXRlKCdzdGF0ZScpXG4gICAgICByZXMuZGF0YS5yZWRpcmVjdFVybCA9IGFkZFVybFNlYXJjaChcbiAgICAgICAgY2FjaGVEYXRhPy5zZWFyY2ggPT09IHVuZGVmaW5lZCA/IGA/JHtsb2NhbFNlYXJjaC50b1N0cmluZygpfWAgOiBjYWNoZURhdGE/LnNlYXJjaCxcbiAgICAgICAgY2FjaGVEYXRhPy5oYXNoIHx8IGxvY2F0aW9uLmhhc2gsXG4gICAgICApXG4gICAgICByZW1vdmVCcm93c2VyU2Vzc2lvbihzdGF0ZSlcblxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbmlud2l0aG9hdXRoXG4gICAqIOeUn+aIkOesrOS4ieaWueW5s+WPsOaOiOadgyBVcmkg77yI5aaC5b6u5L+h5LqM57u056CB5omr56CB5o6I5p2D572R6aG177yJXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5PQXV0aFJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhPQXV0aChwYXJhbXM6IFNpZ25JbldpdGhPQXV0aFJlcSk6IFByb21pc2U8U2lnbkluT0F1dGhSZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yacHJvdmlkZXLlv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHByb3ZpZGVyOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUHJvdmlkZXIgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBocmVmID0gcGFyYW1zLm9wdGlvbnM/LnJlZGlyZWN0VG8gfHwgbG9jYXRpb24uaHJlZlxuXG4gICAgICBjb25zdCB1cmxPYmplY3QgPSBuZXcgVVJMKGhyZWYpXG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyX3JlZGlyZWN0X3VyaSA9IHVybE9iamVjdC5vcmlnaW4gKyB1cmxPYmplY3QucGF0aG5hbWVcblxuICAgICAgY29uc3Qgc3RhdGUgPSBwYXJhbXMub3B0aW9ucz8uc3RhdGUgfHwgYHByZC0ke3BhcmFtcy5wcm92aWRlcn0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KVxuICAgICAgICAuc2xpY2UoMil9YFxuXG4gICAgICBjb25zdCB7IHVyaSB9ID0gYXdhaXQgdGhpcy5nZW5Qcm92aWRlclJlZGlyZWN0VXJpKHtcbiAgICAgICAgcHJvdmlkZXJfaWQ6IHBhcmFtcy5wcm92aWRlcixcbiAgICAgICAgcHJvdmlkZXJfcmVkaXJlY3RfdXJpLFxuICAgICAgICBzdGF0ZSxcbiAgICAgIH0pXG5cbiAgICAgIC8vIOWvuSBVUkwg6L+b6KGM6Kej56CBXG4gICAgICBjb25zdCBkZWNvZGVkVXJpID0gZGVjb2RlVVJJQ29tcG9uZW50KHVyaSlcblxuICAgICAgLy8g5ZCI5bm26aKd5aSW55qE5p+l6K+i5Y+C5pWwXG4gICAgICBsZXQgZmluYWxVcmkgPSBkZWNvZGVkVXJpXG5cbiAgICAgIGlmIChwYXJhbXMub3B0aW9ucz8ucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTChkZWNvZGVkVXJpKVxuICAgICAgICBPYmplY3QuZW50cmllcyhwYXJhbXMub3B0aW9ucy5xdWVyeVBhcmFtcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCB2YWx1ZSlcbiAgICAgICAgfSlcbiAgICAgICAgZmluYWxVcmkgPSB1cmwudG9TdHJpbmcoKVxuICAgICAgfVxuXG4gICAgICBzYXZlVG9Ccm93c2VyU2Vzc2lvbihzdGF0ZSwge1xuICAgICAgICBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBzZWFyY2g6IHVybE9iamVjdC5zZWFyY2gsXG4gICAgICAgIGhhc2g6IHVybE9iamVjdC5oYXNoLFxuICAgICAgICB0eXBlOiBwYXJhbXMub3B0aW9ucz8udHlwZSB8fCBPQVVUSF9UWVBFLlNJR05fSU4sXG4gICAgICB9KVxuXG4gICAgICBpZiAoaXNCcm93c2VyKCkgJiYgIXBhcmFtcy5vcHRpb25zPy5za2lwQnJvd3NlclJlZGlyZWN0KSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oZmluYWxVcmkpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXJsOiBmaW5hbFVyaSwgcHJvdmlkZXI6IHBhcmFtcy5wcm92aWRlciB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXRjbGFpbXNcbiAgYXN5bmMgZ2V0Q2xhaW1zKCk6IFByb21pc2U8R2V0Q2xhaW1zUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYWNjZXNzVG9rZW4gfSA9IGF3YWl0IHRoaXMuZ2V0QWNjZXNzVG9rZW4oKVxuICAgICAgY29uc3QgcGFyc2VkVG9rZW4gPSB3ZUFwcEp3dERlY29kZUFsbChhY2Nlc3NUb2tlbilcbiAgICAgIHJldHVybiB7IGRhdGE6IHBhcnNlZFRva2VuLCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtcmVzZXRwYXNzd29yZGZvcmVtYWlsXG4gICAqIOmAmui/hyBlbWFpbCDmiJbmiYvmnLrlj7fph43nva7lr4bnoIFcbiAgICogQHBhcmFtIGVtYWlsT3JQaG9uZSDpgq7nrrHmiJbmiYvmnLrlj7dcbiAgICogQHJldHVybnMgUHJvbWlzZTxSZXNldFBhc3N3b3JkRm9yRW1haWxSZXM+XG4gICAqL1xuICBhc3luYyByZXNldFBhc3N3b3JkRm9yRW1haWwoXG4gICAgZW1haWxPclBob25lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHsgcmVkaXJlY3RUbz86IHN0cmluZyB9LFxuICApOiBQcm9taXNlPFJlc2V0UGFzc3dvcmRGb3JFbWFpbFJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbE9yUGhvbmXlv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMoXG4gICAgICAgIHsgZW1haWxPclBob25lIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBlbWFpbE9yUGhvbmU6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdFbWFpbCBvciBwaG9uZSBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgfSxcbiAgICAgIClcblxuICAgICAgY29uc3QgeyByZWRpcmVjdFRvIH0gPSBvcHRpb25zIHx8IHt9XG5cbiAgICAgIC8vIOWIpOaWreaYr+mCrueusei/mOaYr+aJi+acuuWPt1xuICAgICAgY29uc3QgaXNFbWFpbCA9IGVtYWlsT3JQaG9uZS5pbmNsdWRlcygnQCcpXG4gICAgICBsZXQgdmVyaWZpY2F0aW9uUGFyYW1zOiB7IGVtYWlsPzogc3RyaW5nOyBwaG9uZV9udW1iZXI/OiBzdHJpbmcgfVxuXG4gICAgICBpZiAoaXNFbWFpbCkge1xuICAgICAgICB2ZXJpZmljYXRpb25QYXJhbXMgPSB7IGVtYWlsOiBlbWFpbE9yUGhvbmUgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g5q2j6KeE5YyW5omL5py65Y+3XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZShlbWFpbE9yUGhvbmUpXG4gICAgICAgIHZlcmlmaWNhdGlvblBhcmFtcyA9IHsgcGhvbmVfbnVtYmVyOiBmb3JtYXR0ZWRQaG9uZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIOesrOS4gOatpe+8muWPkemAgemqjOivgeeggeW5tuWtmOWCqCB2ZXJpZmljYXRpb25JbmZvXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25JbmZvID0gYXdhaXQgdGhpcy5nZXRWZXJpZmljYXRpb24odmVyaWZpY2F0aW9uUGFyYW1zKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLy8g56ys5LqM5q2l77ya562J5b6F55So5oi36L6T5YWl6aqM6K+B56CB77yI6YCa6L+HIFByb21pc2Ug5YyF6KOF55So5oi36L6T5YWl5LqL5Lu277yJXG4gICAgICAgICAgdXBkYXRlVXNlcjogYXN5bmMgKGF0dHJpYnV0ZXM6IFVwZGF0ZVVzZXJBdHRyaWJ1dGVzKTogUHJvbWlzZTxTaWduSW5SZXM+ID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMoYXR0cmlidXRlcywge1xuICAgICAgICAgICAgICBub25jZTogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ05vbmNlIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICAgICAgICBwYXNzd29yZDogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIC8vIOesrOS4ieatpe+8muW+heeUqOaIt+i+k+WFpeWujOmqjOivgeeggeS5i+WQju+8jOmqjOivgemqjOivgeeggVxuICAgICAgICAgICAgICBjb25zdCB2ZXJpZmljYXRpb25Ub2tlblJlcyA9IGF3YWl0IHRoaXMudmVyaWZ5KHtcbiAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiBhdHRyaWJ1dGVzLm5vbmNlLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnJlc2V0UGFzc3dvcmQoe1xuICAgICAgICAgICAgICAgIGVtYWlsOiBpc0VtYWlsID8gZW1haWxPclBob25lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHBob25lX251bWJlcjogIWlzRW1haWwgPyBlbWFpbE9yUGhvbmUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgbmV3X3Bhc3N3b3JkOiBhdHRyaWJ1dGVzLnBhc3N3b3JkLFxuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogdmVyaWZpY2F0aW9uVG9rZW5SZXMudmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHtcbiAgICAgICAgICAgICAgICBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuUEFTU1dPUkRfUkVDT1ZFUlksXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5zaWduSW5XaXRoUGFzc3dvcmQoe1xuICAgICAgICAgICAgICAgIGVtYWlsOiBpc0VtYWlsID8gZW1haWxPclBob25lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHBob25lOiAhaXNFbWFpbCA/IGVtYWlsT3JQaG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwYXNzd29yZDogYXR0cmlidXRlcy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBpZiAocmVkaXJlY3RUbyAmJiBpc0Jyb3dzZXIoKSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24ocmVkaXJlY3RUbylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6YCa6L+H5pen5a+G56CB6YeN572u5a+G56CBXG4gICAqIEBwYXJhbSBuZXdfcGFzc3dvcmRcbiAgICogQHBhcmFtIG9sZF9wYXNzd29yZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgcmVzZXRQYXNzd29yZEZvck9sZChwYXJhbXM6IFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudXBkYXRlUGFzc3dvcmRCeU9sZCh7XG4gICAgICAgIG9sZF9wYXNzd29yZDogcGFyYW1zLm9sZF9wYXNzd29yZCxcbiAgICAgICAgbmV3X3Bhc3N3b3JkOiBwYXJhbXMubmV3X3Bhc3N3b3JkLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtdmVyaWZ5b3RwXG4gICAqIExvZyBpbiBhIHVzZXIgZ2l2ZW4gYSBVc2VyIHN1cHBsaWVkIE9UUCBhbmQgdmVyaWZpY2F0aW9uSWQgcmVjZWl2ZWQgdGhyb3VnaCBtb2JpbGUgb3IgZW1haWwuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyB2ZXJpZnlPdHAocGFyYW1zOiBWZXJpZnlPdHBSZXEpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHR5cGUgfSA9IHBhcmFtc1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yadG9rZW7lkox2ZXJpZmljYXRpb25JbmZv5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICB0b2tlbjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Rva2VuIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICBtZXNzYWdlSWQ6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdtZXNzYWdlSWQgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBpZiAoWydwaG9uZV9jaGFuZ2UnLCAnZW1haWxfY2hhbmdlJ10uaW5jbHVkZXModHlwZSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy52ZXJpZnkoe1xuICAgICAgICAgIHZlcmlmaWNhdGlvbl9pZDogcGFyYW1zLm1lc3NhZ2VJZCxcbiAgICAgICAgICB2ZXJpZmljYXRpb25fY29kZTogcGFyYW1zLnRva2VuLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zaWduSW5XaXRoVXNlcm5hbWUoe1xuICAgICAgICAgIHZlcmlmaWNhdGlvbkluZm86IHsgdmVyaWZpY2F0aW9uX2lkOiBwYXJhbXMubWVzc2FnZUlkLCBpc191c2VyOiB0cnVlIH0sXG4gICAgICAgICAgdmVyaWZpY2F0aW9uQ29kZTogcGFyYW1zLnRva2VuLFxuICAgICAgICAgIHVzZXJuYW1lOiBwYXJhbXMuZW1haWwgfHwgdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpIHx8ICcnLFxuICAgICAgICAgIGxvZ2luVHlwZTogcGFyYW1zLmVtYWlsID8gJ2VtYWlsJyA6ICdwaG9uZScsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWdldFNlc3Npb25cbiAgICogUmV0dXJucyB0aGUgc2Vzc2lvbiwgcmVmcmVzaGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgZ2V0U2Vzc2lvbigpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LmdldENyZWRlbnRpYWxzKClcblxuICAgICAgaWYgKCFjcmVkZW50aWFscyB8fCBjcmVkZW50aWFscy5zY29wZSA9PT0gJ2FjY2Vzc0tleScpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBzZXNzaW9uOiBudWxsIH0sIGVycm9yOiBudWxsIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHVzZXIgfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFVzZXIoKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb246IHsgLi4uY3JlZGVudGlhbHMsIHVzZXIgfSwgdXNlciB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtcmVmcmVzaHNlc3Npb25cbiAgICog5peg6K666L+H5pyf54q25oCB5aaC5L2V77yM6YO96L+U5Zue5LiA5Liq5paw55qE5Lya6K+dXG4gICAqIEBwYXJhbSByZWZyZXNoX3Rva2VuXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgcmVmcmVzaFNlc3Npb24ocmVmcmVzaF90b2tlbj86IHN0cmluZyk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgICBjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuID0gcmVmcmVzaF90b2tlbiB8fCBjcmVkZW50aWFscy5yZWZyZXNoX3Rva2VuXG4gICAgICBjb25zdCBuZXdUb2tlbnMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LnJlZnJlc2hUb2tlbihjcmVkZW50aWFscylcbiAgICAgIGNvbnN0IHsgZGF0YTogeyB1c2VyIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRVc2VyKClcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyLCBzZXNzaW9uOiB7IC4uLm5ld1Rva2VucywgdXNlciB9IH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXR1c2VyXG4gICAqIOWmguaenOWtmOWcqOeOsOacieS8muivne+8jOWImeiOt+WPluW9k+WJjeeUqOaIt+ivpue7huS/oeaBr1xuICAgKiBAcmV0dXJucyBQcm9taXNlPEdldFVzZXJSZXM+XG4gICAqL1xuICBhc3luYyBnZXRVc2VyKCk6IFByb21pc2U8R2V0VXNlclJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy5jb252ZXJ0VG9Vc2VyKGF3YWl0IHRoaXMuZ2V0Q3VycmVudFVzZXIoKSlcbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlciB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDliLfmlrDnlKjmiLfkv6Hmga9cbiAgICogQHJldHVybnMgUHJvbWlzZTxDb21tb25SZXM+XG4gICAqL1xuICBhc3luYyByZWZyZXNoVXNlcigpOiBQcm9taXNlPENvbW1vblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmN1cnJlbnRVc2VyLnJlZnJlc2goKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtdXBkYXRldXNlclxuICAgKiDmm7TmlrDnlKjmiLfkv6Hmga9cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPEdldFVzZXJSZXMgfCBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcz5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVVzZXIocGFyYW1zOiBVcGRhdGVVc2VyUmVxKTogUHJvbWlzZTxHZXRVc2VyUmVzIHwgVXBkYXRlVXNlcldpdGhWZXJpZmljYXRpb25SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77ya6Iez5bCR5pyJ5LiA5Liq5pu05paw5a2X5q616KKr5o+Q5L6bXG4gICAgICBjb25zdCBoYXNWYWx1ZSA9IE9iamVjdC5rZXlzKHBhcmFtcykuc29tZShrZXkgPT4gcGFyYW1zW2tleV0gIT09IHVuZGVmaW5lZCAmJiBwYXJhbXNba2V5XSAhPT0gbnVsbCAmJiBwYXJhbXNba2V5XSAhPT0gJycsKVxuICAgICAgaWYgKCFoYXNWYWx1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ0F0IGxlYXN0IG9uZSBmaWVsZCBtdXN0IGJlIHByb3ZpZGVkIGZvciB1cGRhdGUnIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZW1haWwsIHBob25lLCAuLi5yZXN0UGFyYW1zIH0gPSBwYXJhbXNcblxuICAgICAgLy8g5qOA5p+l5piv5ZCm6ZyA6KaB5pu05pawIGVtYWlsIOaIliBwaG9uZVxuICAgICAgY29uc3QgbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA9IGVtYWlsICE9PSB1bmRlZmluZWRcbiAgICAgIGNvbnN0IG5lZWRzUGhvbmVWZXJpZmljYXRpb24gPSBwaG9uZSAhPT0gdW5kZWZpbmVkXG5cbiAgICAgIGxldCBleHRyYVJlcyA9IHt9XG5cbiAgICAgIGlmIChuZWVkc0VtYWlsVmVyaWZpY2F0aW9uIHx8IG5lZWRzUGhvbmVWZXJpZmljYXRpb24pIHtcbiAgICAgICAgLy8g6ZyA6KaB5Y+R6YCB6aqM6K+B56CBXG4gICAgICAgIGxldCB2ZXJpZmljYXRpb25QYXJhbXM6IHsgZW1haWw/OiBzdHJpbmc7IHBob25lX251bWJlcj86IHN0cmluZyB9XG4gICAgICAgIGxldCB2ZXJpZmljYXRpb25UeXBlOiAnZW1haWxfY2hhbmdlJyB8ICdwaG9uZV9jaGFuZ2UnXG5cbiAgICAgICAgaWYgKG5lZWRzRW1haWxWZXJpZmljYXRpb24pIHtcbiAgICAgICAgICB2ZXJpZmljYXRpb25QYXJhbXMgPSB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfVxuICAgICAgICAgIHZlcmlmaWNhdGlvblR5cGUgPSAnZW1haWxfY2hhbmdlJ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIOato+inhOWMluaJi+acuuWPt1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpXG4gICAgICAgICAgdmVyaWZpY2F0aW9uUGFyYW1zID0geyBwaG9uZV9udW1iZXI6IGZvcm1hdHRlZFBob25lIH1cbiAgICAgICAgICB2ZXJpZmljYXRpb25UeXBlID0gJ3Bob25lX2NoYW5nZSdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOWPkemAgemqjOivgeeggVxuICAgICAgICBjb25zdCB2ZXJpZmljYXRpb25JbmZvID0gYXdhaXQgdGhpcy5nZXRWZXJpZmljYXRpb24odmVyaWZpY2F0aW9uUGFyYW1zKVxuXG4gICAgICAgIE9iamVjdC5rZXlzKHJlc3RQYXJhbXMpLmxlbmd0aCA+IDAgJiYgKGF3YWl0IHRoaXMudXBkYXRlVXNlckJhc2ljSW5mbyhyZXN0UGFyYW1zKSlcblxuICAgICAgICBleHRyYVJlcyA9IHtcbiAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgIHZlcmlmeU90cDogYXN5bmMgKHZlcmlmeVBhcmFtczogeyBlbWFpbD86IHN0cmluZzsgcGhvbmU/OiBzdHJpbmc7IHRva2VuOiBzdHJpbmcgfSk6IFByb21pc2U8R2V0VXNlclJlcz4gPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKHZlcmlmeVBhcmFtcy5lbWFpbCAmJiBwYXJhbXMuZW1haWwgPT09IHZlcmlmeVBhcmFtcy5lbWFpbCkge1xuICAgICAgICAgICAgICAgIC8vIOmqjOivgeeggemqjOivgVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdlbWFpbF9jaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgZW1haWw6IHBhcmFtcy5lbWFpbCxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHsgZW1haWw6IHBhcmFtcy5lbWFpbCB9KVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlcmlmeVBhcmFtcy5waG9uZSAmJiBwYXJhbXMucGhvbmUgPT09IHZlcmlmeVBhcmFtcy5waG9uZSkge1xuICAgICAgICAgICAgICAgIC8vIOmqjOivgeeggemqjOivgVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdwaG9uZV9jaGFuZ2UnLFxuICAgICAgICAgICAgICAgICAgcGhvbmU6IHBhcmFtcy5waG9uZSxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHsgcGhvbmU6IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSB9KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudmVyaWZ5T3RwKHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHZlcmlmaWNhdGlvblR5cGUsXG4gICAgICAgICAgICAgICAgICBlbWFpbDogbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA/IHBhcmFtcy5lbWFpbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHBob25lOiAhbmVlZHNFbWFpbFZlcmlmaWNhdGlvbiA/IHBhcmFtcy5waG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHRva2VuOiB2ZXJpZnlQYXJhbXMudG9rZW4sXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLy8g6aqM6K+B5oiQ5Yqf5ZCO5pu05paw55So5oi35L+h5oGvXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtcylcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHVzZXIgfSxcbiAgICAgICAgICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcigpXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlVTRVJfVVBEQVRFRCB9KVxuXG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlciB9LCBlcnJvcjogbnVsbCB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDkuI3pnIDopoHpqozor4HvvIznm7TmjqXmm7TmlrBcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtcylcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogeyB1c2VyIH0sXG4gICAgICB9ID0gYXdhaXQgdGhpcy5nZXRVc2VyKClcbiAgICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlVTRVJfVVBEQVRFRCB9KVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIsIC4uLmV4dHJhUmVzIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXR1c2VyaWRlbnRpdGllc1xuICAgKiDojrflj5bmiYDmnInouqvku73mupBcbiAgICogQHJldHVybnMgUHJvbWlzZTxHZXRVc2VySWRlbnRpdGllc1Jlcz5cbiAgICovXG4gIGFzeW5jIGdldFVzZXJJZGVudGl0aWVzKCk6IFByb21pc2U8R2V0VXNlcklkZW50aXRpZXNSZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJvdmlkZXJzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0UHJvdmlkZXJzKClcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGlkZW50aXRpZXM6IHByb3ZpZGVycz8uZGF0YT8uZmlsdGVyKHYgPT4gISF2LmJpbmQpIGFzIHVua25vd24gYXMgR2V0VXNlcklkZW50aXRpZXNSZXNbJ2RhdGEnXVsnaWRlbnRpdGllcyddLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1saW5raWRlbnRpdHlcbiAgICog57uR5a6a6Lqr5Lu95rqQ5Yiw5b2T5YmN55So5oi3XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxMaW5rSWRlbnRpdHlSZXM+XG4gICAqL1xuICBhc3luYyBsaW5rSWRlbnRpdHkocGFyYW1zOiBMaW5rSWRlbnRpdHlSZXEpOiBQcm9taXNlPExpbmtJZGVudGl0eVJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJpwcm92aWRlcuW/heWhq1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgcHJvdmlkZXI6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQcm92aWRlciBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMuc2lnbkluV2l0aE9BdXRoKHtcbiAgICAgICAgcHJvdmlkZXI6IHBhcmFtcy5wcm92aWRlcixcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIHR5cGU6IE9BVVRIX1RZUEUuQklORF9JREVOVElUWSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgcHJvdmlkZXI6IHBhcmFtcy5wcm92aWRlciB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtdW5saW5raWRlbnRpdHlcbiAgICog6Kej57uR6Lqr5Lu95rqQXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxDb21tb25SZXM+XG4gICAqL1xuICBhc3luYyB1bmxpbmtJZGVudGl0eShwYXJhbXM6IFVubGlua0lkZW50aXR5UmVxKTogUHJvbWlzZTxDb21tb25SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yacHJvdmlkZXLlv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHByb3ZpZGVyOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUHJvdmlkZXIgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS51bmJpbmRQcm92aWRlcih7IHByb3ZpZGVyX2lkOiBwYXJhbXMucHJvdmlkZXIgfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1yZWF1dGhlbnRpY2F0aW9uXG4gICAqIOmHjeaWsOiupOivgVxuICAgKiBAcmV0dXJucyBQcm9taXNlPFJlYXV0aGVudGljYXRlUmVzPlxuICAgKi9cbiAgYXN5bmMgcmVhdXRoZW50aWNhdGUoKTogUHJvbWlzZTxSZWF1dGhlbnRpY2F0ZVJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHsgdXNlciB9LFxuICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcigpXG5cbiAgICAgIHRoaXMudmFsaWRhdGVBdExlYXN0T25lKHVzZXIsIFtbJ2VtYWlsJywgJ3Bob25lJ11dLCAnWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgYW4gZW1haWwgb3IgcGhvbmUgbnVtYmVyJylcbiAgICAgIGNvbnN0IHVzZXJJbmZvID0gdXNlci5lbWFpbCA/IHsgZW1haWw6IHVzZXIuZW1haWwgfSA6IHsgcGhvbmVfbnVtYmVyOiB0aGlzLmZvcm1hdFBob25lKHVzZXIucGhvbmUpIH1cblxuICAgICAgLy8g56ys5LiA5q2l77ya5Y+R6YCB6aqM6K+B56CB5bm25a2Y5YKoIHZlcmlmaWNhdGlvbkluZm9cbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbkluZm8gPSBhd2FpdCB0aGlzLmdldFZlcmlmaWNhdGlvbih1c2VySW5mbylcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIC8vIOesrOS6jOatpe+8muetieW+heeUqOaIt+i+k+WFpemqjOivgeegge+8iOmAmui/hyBQcm9taXNlIOWMheijheeUqOaIt+i+k+WFpeS6i+S7tu+8iVxuICAgICAgICAgIHVwZGF0ZVVzZXI6IGFzeW5jIChhdHRyaWJ1dGVzOiBVcGRhdGVVc2VyQXR0cmlidXRlcyk6IFByb21pc2U8U2lnbkluUmVzPiA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKGF0dHJpYnV0ZXMsIHtcbiAgICAgICAgICAgICAgbm9uY2U6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdOb25jZSBpcyByZXF1aXJlZCcgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5wYXNzd29yZCkge1xuICAgICAgICAgICAgICAgIC8vIOesrOS4ieatpe+8muW+heeUqOaIt+i+k+WFpeWujOmqjOivgeeggeS5i+WQju+8jOmqjOivgemqjOivgeeggVxuICAgICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvblRva2VuUmVzID0gYXdhaXQgdGhpcy52ZXJpZnkoe1xuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2lkOiB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCxcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiBhdHRyaWJ1dGVzLm5vbmNlLFxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAvLyDnrKzlm5vmraXvvJrojrflj5Ygc3Vkb190b2tlblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1ZG9SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zdWRvKHtcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogdmVyaWZpY2F0aW9uVG9rZW5SZXMudmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zZXRQYXNzd29yZCh7XG4gICAgICAgICAgICAgICAgICBuZXdfcGFzc3dvcmQ6IGF0dHJpYnV0ZXMucGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgICBzdWRvX3Rva2VuOiBzdWRvUmVzLnN1ZG9fdG9rZW4sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25JbmZvLFxuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uQ29kZTogYXR0cmlidXRlcy5ub25jZSxcbiAgICAgICAgICAgICAgICAgIC4uLnVzZXJJbmZvLFxuICAgICAgICAgICAgICAgICAgbG9naW5UeXBlOiB1c2VySW5mby5lbWFpbCA/ICdlbWFpbCcgOiAncGhvbmUnLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtcmVzZW5kXG4gICAqIOmHjeaWsOWPkemAgemqjOivgeeggVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8UmVzZW5kUmVzPlxuICAgKi9cbiAgYXN5bmMgcmVzZW5kKHBhcmFtczogUmVzZW5kUmVxKTogUHJvbWlzZTxSZXNlbmRSZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yaZW1haWzmiJZwaG9uZeW/heWhq+WFtuS4gFxuICAgICAgdGhpcy52YWxpZGF0ZUF0TGVhc3RPbmUocGFyYW1zLCBbWydlbWFpbCddLCBbJ3Bob25lJ11dLCAnWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgYW4gZW1haWwgb3IgcGhvbmUgbnVtYmVyJylcblxuICAgICAgY29uc3QgdGFyZ2V0ID0gcGFyYW1zLnR5cGUgPT09ICdzaWdudXAnID8gJ0FOWScgOiAnVVNFUidcbiAgICAgIGNvbnN0IGRhdGE6IHsgZW1haWw/OiBzdHJpbmc7IHBob25lX251bWJlcj86IHN0cmluZzsgdGFyZ2V0OiAnVVNFUicgfCAnQU5ZJyB9ID0geyB0YXJnZXQgfVxuICAgICAgaWYgKCdlbWFpbCcgaW4gcGFyYW1zKSB7XG4gICAgICAgIGRhdGEuZW1haWwgPSBwYXJhbXMuZW1haWxcbiAgICAgIH1cblxuICAgICAgaWYgKCdwaG9uZScgaW4gcGFyYW1zKSB7XG4gICAgICAgIGRhdGEucGhvbmVfbnVtYmVyID0gdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpXG4gICAgICB9XG5cbiAgICAgIC8vIOmHjeaWsOWPkemAgemqjOivgeeggVxuICAgICAgY29uc3QgeyB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbklkIH0gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRWZXJpZmljYXRpb24oZGF0YSlcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YTogeyBtZXNzYWdlSWQ6IHZlcmlmaWNhdGlvbklkIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHt9LFxuICAgICAgICBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvciksXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zZXRzZXNzaW9uXG4gICAqIOS9v+eUqGFjY2Vzc190b2tlbuWSjHJlZnJlc2hfdG9rZW7mnaXorr7nva7kvJror51cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNldFNlc3Npb24ocGFyYW1zOiBTZXRTZXNzaW9uUmVxKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnQWNjZXNzIHRva2VuIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICByZWZyZXNoX3Rva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUmVmcmVzaCB0b2tlbiBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQucmVmcmVzaFRva2VuKHBhcmFtcywgeyB0aHJvd0Vycm9yOiB0cnVlIH0pXG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX0lOIH0pXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWV4Y2hhbmdlY29kZWZvcnNlc3Npb25cbiAgYXN5bmMgZXhjaGFuZ2VDb2RlRm9yU2Vzc2lvbigpIHtcbiAgICAvL1xuICB9XG5cbiAgLyoqXG4gICAqIOWIoOmZpOW9k+WJjeeUqOaIt1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyBkZWxldGVVc2VyKHBhcmFtczogRGVsZXRlTWVSZXEpOiBQcm9taXNlPENvbW1vblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICBwYXNzd29yZDogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgY29uc3QgeyBzdWRvX3Rva2VuIH0gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zdWRvKHBhcmFtcylcblxuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZGVsZXRlTWUoeyBzdWRvX3Rva2VuIH0pXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDot7Povazns7vnu5/pu5jorqTnmbvlvZXpobVcbiAgICogQHJldHVybnMge1Byb21pc2U8YXV0aE1vZGVscy5Ub0RlZmF1bHRMb2dpblBhZ2U+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgYXN5bmMgdG9EZWZhdWx0TG9naW5QYWdlKHBhcmFtczogYXV0aE1vZGVscy5Ub0RlZmF1bHRMb2dpblBhZ2UgPSB7fSk6IFByb21pc2U8Q29tbW9uUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZ1ZlcnNpb24gPSBwYXJhbXMuY29uZmlnX3ZlcnNpb24gfHwgJ2VudidcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gT2JqZWN0LmtleXMocGFyYW1zLnF1ZXJ5IHx8IHt9KVxuICAgICAgICAubWFwKGtleSA9PiBgJHtrZXl9PSR7cGFyYW1zLnF1ZXJ5W2tleV19YClcbiAgICAgICAgLmpvaW4oJyYnKVxuXG4gICAgICBpZiAoYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICAgIHd4Lm5hdmlnYXRlVG8oeyB1cmw6IGAvcGFja2FnZXMvJHdkX3N5c3RlbS9wYWdlcy9sb2dpbi9pbmRleCR7cXVlcnkgPyBgPyR7cXVlcnl9YCA6ICcnfWAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlZGlyZWN0VXJpID0gcGFyYW1zLnJlZGlyZWN0X3VyaSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgICAgICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHJlZGlyZWN0VXJpKVxuICAgICAgICBjb25zdCBsb2dpblBhZ2UgPSBgJHt1cmxPYmoub3JpZ2lufS9fX2F1dGgvP2FwcF9pZD0ke3BhcmFtcy5hcHBfaWQgfHwgJyd9JmVudl9pZD0ke3RoaXMuY29uZmlnLmVudn0mY2xpZW50X2lkPSR7XG4gICAgICAgICAgdGhpcy5jb25maWcuY2xpZW50SWQgfHwgdGhpcy5jb25maWcuZW52XG4gICAgICAgIH0mY29uZmlnX3ZlcnNpb249JHtjb25maWdWZXJzaW9ufSZyZWRpcmVjdF91cmk9JHtlbmNvZGVVUklDb21wb25lbnQocmVkaXJlY3RVcmkpfSR7cXVlcnkgPyBgJiR7cXVlcnl9YCA6ICcnfWBcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBsb2dpblBhZ2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDoh6rlrprkuYnnmbvlvZVcbiAgICogQHBhcmFtIGdldFRpY2tGbiAoKSA9PiBQcm9taXNlPHN0cmluZz4sIOiOt+WPluiHquWumuS5ieeZu+W9lSB0aWNrZXQg55qE5Ye95pWwXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoQ3VzdG9tVGlja2V0KGdldFRpY2tGbj86IGF1dGhNb2RlbHMuR2V0Q3VzdG9tU2lnblRpY2tldEZuKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICBpZiAoZ2V0VGlja0ZuKSB7XG4gICAgICB0aGlzLnNldEN1c3RvbVNpZ25GdW5jKGdldFRpY2tGbilcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aEN1c3RvbVRpY2tldCgpXG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICAvLyBsb2dpblN0YXRl6L+U5Zue5piv5Li65LqG5YW85a65djLniYjmnKxcbiAgICAgIHJldHVybiB7IC4uLihsb2dpblN0YXRlIGFzIGFueSksIGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j29wZW5JZOmdmem7mOeZu+W9lVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aE9wZW5JZCh7IHVzZVd4Q2xvdWQgPSB0cnVlIH0gPSB7fSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHRocm93IEVycm9yKCd3eCBhcGkgdW5kZWZpbmVkJylcbiAgICB9XG4gICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cblxuICAgIGNvbnN0IG1haW5GdW5jID0gYXN5bmMgKGNvZGUpID0+IHtcbiAgICAgIGxldCByZXN1bHQ6IGF1dGhNb2RlbHMuR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbiAgICAgIGxldCBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGVyX2lkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgcHJvdmlkZXJfY29kZTogY29kZSxcbiAgICAgICAgICAgIHByb3ZpZGVyX3BhcmFtczoge1xuICAgICAgICAgICAgICBwcm92aWRlcl9jb2RlX3R5cGU6ICdvcGVuX2lkJyxcbiAgICAgICAgICAgICAgYXBwaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlV3hDbG91ZCxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmICgocmVzdWx0IGFzIGFueSk/LmVycm9yX2NvZGUgfHwgIXJlc3VsdC5wcm92aWRlcl90b2tlbikge1xuICAgICAgICAgIHRocm93IHJlc3VsdFxuICAgICAgICB9XG5cbiAgICAgICAgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIoXG4gICAgICAgICAgeyBwcm92aWRlcl90b2tlbjogcmVzdWx0LnByb3ZpZGVyX3Rva2VuIH0sXG4gICAgICAgICAgdXNlV3hDbG91ZCxcbiAgICAgICAgKVxuXG4gICAgICAgIGlmICgoY3JlZGVudGlhbHMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgIHRocm93IGNyZWRlbnRpYWxzXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzIGFzIENyZWRlbnRpYWxzKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgICBzdWNjZXNzOiBhc3luYyAocmVzOiB7IGNvZGU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBtYWluRnVuYyhyZXMuY29kZSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihyZXM/LmVyck1zZylcbiAgICAgICAgICAgIDsoZXJyb3IgYXMgYW55KS5jb2RlID0gcmVzPy5lcnJub1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICAvLyBsb2dpblN0YXRl6L+U5Zue5piv5Li65LqG5YW85a65djLniYjmnKxcbiAgICAgIHJldHVybiB7IC4uLihsb2dpblN0YXRlIGFzIGFueSksIGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j+aJi+acuuWPt+aOiOadg+eZu+W9lVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgLy8gYXN5bmMgc2lnbkluV2l0aFBob25lQXV0aCh7IHBob25lQ29kZSA9ICcnLCB1c2VXeENsb3VkID0gZmFsc2UgfSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gIGFzeW5jIHNpZ25JbldpdGhQaG9uZUF1dGgoeyBwaG9uZUNvZGUgPSAnJyB9KTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICAvLyBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgIC8vICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ3d4IGFwaSB1bmRlZmluZWQnIH0pIH1cbiAgICAvLyB9XG4gICAgLy8gY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cbiAgICAvLyBjb25zdCBwcm92aWRlckluZm8gPSB7XG4gICAgLy8gICBwcm92aWRlcl9wYXJhbXM6IHsgcHJvdmlkZXJfY29kZV90eXBlOiAncGhvbmUnLCBjb2RlOiBwaG9uZUNvZGUsIGFwcGlkOiB3eEluZm8uYXBwSWQgfSxcbiAgICAvLyAgIHByb3ZpZGVyX2lkOiB3eEluZm8uYXBwSWQsXG4gICAgLy8gfVxuXG4gICAgLy8gY29uc3QgeyBjb2RlIH0gPSBhd2FpdCB3eC5sb2dpbigpXG4gICAgLy8gOyhwcm92aWRlckluZm8gYXMgYW55KS5wcm92aWRlcl9jb2RlID0gY29kZVxuXG4gICAgLy8gdHJ5IHtcbiAgICAvLyAgIGNvbnN0IHByb3ZpZGVyVG9rZW4gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4ocHJvdmlkZXJJbmZvLCB1c2VXeENsb3VkKVxuICAgIC8vICAgaWYgKHByb3ZpZGVyVG9rZW4uZXJyb3JfY29kZSkge1xuICAgIC8vICAgICB0aHJvdyBwcm92aWRlclRva2VuXG4gICAgLy8gICB9XG5cbiAgICAvLyAgIGNvbnN0IHNpZ25JblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhQcm92aWRlcih7XG4gICAgLy8gICAgIHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuLnByb3ZpZGVyX3Rva2VuLFxuICAgIC8vICAgfSwgdXNlV3hDbG91ZClcblxuICAgIC8vICAgaWYgKChzaWduSW5SZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgIC8vICAgICB0aHJvdyBzaWduSW5SZXNcbiAgICAvLyAgIH1cbiAgICAvLyB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgLy8gfVxuXG4gICAgLy8gY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG5cbiAgICAvLyBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAvLyAvLyBsb2dpblN0YXRl6L+U5Zue5piv5Li65LqG5YW85a65djLniYjmnKxcbiAgICAvLyByZXR1cm4geyAuLi4obG9naW5TdGF0ZSBhcyBhbnkpLCBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgaWYgKCFhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6ICd3eCBhcGkgdW5kZWZpbmVkJyB9KSB9XG4gICAgfVxuICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG4gICAgY29uc3QgcHJvdmlkZXJJbmZvID0ge1xuICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7IHByb3ZpZGVyX2NvZGVfdHlwZTogJ3Bob25lJyB9LFxuICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mby5hcHBJZCxcbiAgICB9XG5cbiAgICBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHd4LmxvZ2luKClcbiAgICA7KHByb3ZpZGVySW5mbyBhcyBhbnkpLnByb3ZpZGVyX2NvZGUgPSBjb2RlXG5cbiAgICB0cnkge1xuICAgICAgbGV0IHByb3ZpZGVyVG9rZW4gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4ocHJvdmlkZXJJbmZvKVxuICAgICAgaWYgKHByb3ZpZGVyVG9rZW4uZXJyb3JfY29kZSkge1xuICAgICAgICB0aHJvdyBwcm92aWRlclRva2VuXG4gICAgICB9XG5cbiAgICAgIHByb3ZpZGVyVG9rZW4gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5wYXRjaFByb3ZpZGVyVG9rZW4oe1xuICAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbi5wcm92aWRlcl90b2tlbixcbiAgICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mby5hcHBJZCxcbiAgICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgICAgICAgY29kZTogcGhvbmVDb2RlLFxuICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ3Bob25lJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICBpZiAocHJvdmlkZXJUb2tlbi5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHRocm93IHByb3ZpZGVyVG9rZW5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2lnbkluUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgICAgICAgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4ucHJvdmlkZXJfdG9rZW4sXG4gICAgICB9KVxuXG4gICAgICBpZiAoKHNpZ25JblJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHRocm93IHNpZ25JblJlc1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG5cbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcblxuICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgIHJldHVybiB7IC4uLihsb2dpblN0YXRlIGFzIGFueSksIGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0UGhvbmUocGhvbmU6IHN0cmluZykge1xuICAgIGlmICghL1xccysvLnRlc3QocGhvbmUpICYmIC9eXFwrXFxkezEsM31cXGQrLy50ZXN0KHBob25lKSkge1xuICAgICAgcmV0dXJuIHBob25lLnJlcGxhY2UoL14oXFwrXFxkezEsMn0pKFxcZCspJC8sICckMSAkMicpXG4gICAgfVxuICAgIHJldHVybiAvXlxcK1xcZHsxLDN9XFxzKy8udGVzdChwaG9uZSkgPyBwaG9uZSA6IGArODYgJHtwaG9uZX1gXG4gIH1cblxuICBwcml2YXRlIG5vdGlmeUxpc3RlbmVycyhldmVudCwgc2Vzc2lvbiwgaW5mbyk6IE9uQXV0aFN0YXRlQ2hhbmdlQ2FsbGJhY2sge1xuICAgIHRoaXMubGlzdGVuZXJzLmZvckVhY2goKGNhbGxiYWNrcykgPT4ge1xuICAgICAgY2FsbGJhY2tzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbGJhY2soZXZlbnQsIHNlc3Npb24sIGluZm8pXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gYXV0aCBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2s6JywgZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5jb25maWcuZXZlbnRCdXM/Lm9uKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gcGFyYW1zPy5kYXRhPy5ldmVudFxuICAgICAgY29uc3QgaW5mbyA9IHBhcmFtcz8uZGF0YT8uaW5mb1xuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhOiB7IHNlc3Npb24gfSxcbiAgICAgIH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICB0aGlzLm5vdGlmeUxpc3RlbmVycyhldmVudCwgc2Vzc2lvbiwgaW5mbylcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9Vc2VyKHVzZXJJbmZvOiBhdXRoTW9kZWxzLlVzZXJJbmZvICYgUGFydGlhbDxVc2VyPikge1xuICAgIGlmICghdXNlckluZm8pIHJldHVybiBudWxsXG5cbiAgICAvLyDkvJjlhYjkvb/nlKggdXNlckluZm8g5Lit55qE5pWw5o2u77yIVjMgQVBJ77yJXG4gICAgY29uc3QgZW1haWwgPSB1c2VySW5mbz8uZW1haWwgfHwgJydcbiAgICBjb25zdCBwaG9uZSA9IHVzZXJJbmZvPy5waG9uZV9udW1iZXIgfHwgJydcbiAgICBjb25zdCB1c2VySWQgPSB1c2VySW5mbz8uc3ViIHx8IHVzZXJJbmZvPy51aWQgfHwgJydcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdXNlcklkLFxuICAgICAgYXVkOiAnYXV0aGVudGljYXRlZCcsXG4gICAgICByb2xlOiB1c2VySW5mby5ncm91cHM/Lm1hcD8uKGdyb3VwID0+ICh0eXBlb2YgZ3JvdXAgPT09ICdzdHJpbmcnID8gZ3JvdXAgOiBncm91cC5pZCkpLFxuICAgICAgZW1haWw6IGVtYWlsIHx8ICcnLFxuICAgICAgZW1haWxfY29uZmlybWVkX2F0OiB1c2VySW5mbz8uZW1haWxfdmVyaWZpZWQgPyB1c2VySW5mby5jcmVhdGVkX2F0IDogdXNlckluZm8uY3JlYXRlZF9hdCxcbiAgICAgIHBob25lLFxuICAgICAgcGhvbmVfY29uZmlybWVkX2F0OiBwaG9uZSA/IHVzZXJJbmZvLmNyZWF0ZWRfYXQgOiB1bmRlZmluZWQsXG4gICAgICBjb25maXJtZWRfYXQ6IHVzZXJJbmZvLmNyZWF0ZWRfYXQsXG4gICAgICBsYXN0X3NpZ25faW5fYXQ6ICh1c2VySW5mbyBhcyBhbnkpLmxhc3Rfc2lnbl9pbl9hdCxcbiAgICAgIGFwcF9tZXRhZGF0YToge1xuICAgICAgICBwcm92aWRlcjogdXNlckluZm8ubG9naW5UeXBlPy50b0xvd2VyQ2FzZSgpIHx8ICdjbG91ZGJhc2UnLFxuICAgICAgICBwcm92aWRlcnM6IFt1c2VySW5mby5sb2dpblR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJ2Nsb3VkYmFzZSddLFxuICAgICAgfSxcbiAgICAgIHVzZXJfbWV0YWRhdGE6IHtcbiAgICAgICAgLy8gVjMgQVBJIOeUqOaIt+S/oeaBr1xuICAgICAgICBuYW1lOiB1c2VySW5mbz8ubmFtZSxcbiAgICAgICAgcGljdHVyZTogdXNlckluZm8/LnBpY3R1cmUsXG4gICAgICAgIHVzZXJuYW1lOiB1c2VySW5mbz8udXNlcm5hbWUsIC8vIOeUqOaIt+WQjeensO+8jOmVv+W6piA1LTI0IOS9je+8jOaUr+aMgeWtl+espuS4reiLseaWh+OAgeaVsOWtl+OAgeeJueauiuWtl+espu+8iOS7heaUr+aMgV8t77yJ77yM5LiN5pSv5oyB5Lit5paHXG4gICAgICAgIGdlbmRlcjogdXNlckluZm8/LmdlbmRlcixcbiAgICAgICAgbG9jYWxlOiB1c2VySW5mbz8ubG9jYWxlLFxuICAgICAgICAvLyBWMiBBUEkg5YW85a6577yI5L2/55SoIGFueSDpgb/lhY3nsbvlnovplJnor6/vvIlcbiAgICAgICAgdWlkOiB1c2VySW5mby51aWQsXG4gICAgICAgIG5pY2tOYW1lOiB1c2VySW5mby5uaWNrTmFtZSB8fCB1c2VySW5mbz8ubmFtZSxcbiAgICAgICAgYXZhdGFyVXJsOiB1c2VySW5mby5hdmF0YXJVcmwgfHwgdXNlckluZm8ucGljdHVyZSxcbiAgICAgICAgbG9jYXRpb246IHVzZXJJbmZvLmxvY2F0aW9uLFxuICAgICAgICBoYXNQYXNzd29yZDogdXNlckluZm8uaGFzUGFzc3dvcmQsXG4gICAgICB9LFxuICAgICAgaWRlbnRpdGllczpcbiAgICAgICAgdXNlckluZm8/LnByb3ZpZGVycz8ubWFwKHAgPT4gKHtcbiAgICAgICAgICBpZDogcC5pZCB8fCAnJyxcbiAgICAgICAgICBpZGVudGl0eV9pZDogcC5pZCB8fCAnJyxcbiAgICAgICAgICB1c2VyX2lkOiB1c2VySWQsXG4gICAgICAgICAgaWRlbnRpdHlfZGF0YToge1xuICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHAuaWQsXG4gICAgICAgICAgICBwcm92aWRlcl91c2VyX2lkOiBwLnByb3ZpZGVyX3VzZXJfaWQsXG4gICAgICAgICAgICBuYW1lOiBwLm5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwcm92aWRlcjogcC5pZCB8fCAnY2xvdWRiYXNlJyxcbiAgICAgICAgICBjcmVhdGVkX2F0OiB1c2VySW5mby5jcmVhdGVkX2F0LFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IHVzZXJJbmZvLnVwZGF0ZWRfYXQsXG4gICAgICAgICAgbGFzdF9zaWduX2luX2F0OiAodXNlckluZm8gYXMgYW55KS5sYXN0X3NpZ25faW5fYXQsXG4gICAgICAgIH0pKSB8fCBbXSxcbiAgICAgIGNyZWF0ZWRfYXQ6IHVzZXJJbmZvLmNyZWF0ZWRfYXQsXG4gICAgICB1cGRhdGVkX2F0OiB1c2VySW5mby51cGRhdGVkX2F0LFxuICAgICAgaXNfYW5vbnltb3VzOiB1c2VySW5mby5uYW1lID09PSAnYW5vbnltb3VzJyxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Y+C5pWw5qCh6aqM6L6F5Yqp5pa55rOVXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlUGFyYW1zKHBhcmFtczogYW55LCBydWxlczogeyBba2V5OiBzdHJpbmddOiB7IHJlcXVpcmVkPzogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0gfSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgW2tleSwgcnVsZV0gb2YgT2JqZWN0LmVudHJpZXMocnVsZXMpKSB7XG4gICAgICBpZiAocnVsZS5yZXF1aXJlZCAmJiAocGFyYW1zPy5ba2V5XSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtcz8uW2tleV0gPT09IG51bGwgfHwgcGFyYW1zPy5ba2V5XSA9PT0gJycpKSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiBydWxlLm1lc3NhZ2UgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5qCh6aqM5b+F5aGr5Y+C5pWw57uE77yI6Iez5bCR5pyJ5LiA5Liq5Y+C5pWw5b+F6aG75pyJ5YC877yJXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXM6IGFueSwgZmllbGRHcm91cHM6IHN0cmluZ1tdW10sIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGhhc1ZhbHVlID0gZmllbGRHcm91cHMuc29tZShncm91cCA9PiBncm91cC5zb21lKGZpZWxkID0+IHBhcmFtcz8uW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtcz8uW2ZpZWxkXSAhPT0gbnVsbCAmJiBwYXJhbXM/LltmaWVsZF0gIT09ICcnKSwpXG5cbiAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZSB9KVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHsgZXJyb3I6IEVycm9yIHwgbnVsbCB9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQubG9jYWxDcmVkZW50aWFscy5nZXRDcmVkZW50aWFscygpXG4gICAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuSU5JVElBTF9TRVNTSU9OIH0pXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIElnbm9yZSBlcnJvcnMgd2hlbiBjaGVja2luZyBmb3IgZXhpc3RpbmcgY3JlZGVudGlhbHNcbiAgICB9XG5cbiAgICByZXR1cm4geyBlcnJvcjogbnVsbCB9XG4gIH1cbn1cblxudHlwZSBUSW5pdEF1dGhPcHRpb25zID0gUGljazxcbklDbG91ZGJhc2VBdXRoQ29uZmlnLFxuJ3JlZ2lvbicgfCAncGVyc2lzdGVuY2UnIHwgJ2kxOG4nIHwgJ2FjY2Vzc0tleScgfCAndXNlV3hDbG91ZCcgfCAnYXV0aCdcbj4gJlxuUGFydGlhbDxBdXRoT3B0aW9ucz4gJiB7XG4gIGRldGVjdFNlc3Npb25JblVybD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXV0aEluc3RhbmNlKFxuICBjb25maWc6IFRJbml0QXV0aE9wdGlvbnMgJiB7IHNka1ZlcnNpb24/OiBzdHJpbmcgfSxcbiAgb3B0aW9ucz86IHtcbiAgICBjbGllbnRJZDogSUNsb3VkYmFzZUNvbmZpZ1snY2xpZW50SWQnXVxuICAgIGVudjogSUNsb3VkYmFzZUNvbmZpZ1snZW52J11cbiAgICBhcGlPcmlnaW46IHN0cmluZ1xuICAgIGNhY2hlPzogSUNsb3VkYmFzZUNhY2hlXG4gICAgcGxhdGZvcm0/OiBJQ2xvdWRiYXNlWydwbGF0Zm9ybSddXG4gICAgYXBwPzogSUNsb3VkYmFzZVxuICAgIGRlYnVnPzogSUNsb3VkYmFzZUF1dGhDb25maWdbJ2RlYnVnJ11cbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw/OiBJQ2xvdWRiYXNlQXV0aENvbmZpZ1snZGV0ZWN0U2Vzc2lvbkluVXJsJ11cbiAgfSxcbikge1xuICBjb25zdCB7IHJlZ2lvbiA9ICdhcC1zaGFuZ2hhaScsIGkxOG4sIGFjY2Vzc0tleSwgdXNlV3hDbG91ZCB9ID0gY29uZmlnXG4gIGNvbnN0IHBsYXRmb3JtID0gb3B0aW9ucz8ucGxhdGZvcm0gfHwgKHVzZURlZmF1bHRBZGFwdGVyLmJpbmQob3B0aW9ucykoKSBhcyBJQ2xvdWRiYXNlUGxhdGZvcm1JbmZvKVxuICBjb25zdCB7IHJ1bnRpbWUsIGFkYXB0ZXIgfSA9IHBsYXRmb3JtXG5cbiAgY29uc3QgeyBlbnYsIGNsaWVudElkLCBkZWJ1ZywgY2FjaGUsIGFwcDogY2xvdWRiYXNlIH0gPSBvcHRpb25zIHx8IHt9XG4gIGxldCB7IGFwaU9yaWdpbiB9ID0gb3B0aW9ucyB8fCB7fVxuICBpZiAoIWFwaU9yaWdpbikge1xuICAgIGFwaU9yaWdpbiA9IGBodHRwczovLyR7ZW52fS4ke3JlZ2lvbn0udGNiLWFwaS50ZW5jZW50Y2xvdWRhcGkuY29tYFxuICB9XG5cbiAgY29uc3QgY29tbW9uT3B0cyA9IHtcbiAgICBlbnYsXG4gICAgY2xpZW50SWQsXG4gICAgaTE4bixcbiAgICBhY2Nlc3NLZXksXG4gICAgdXNlV3hDbG91ZCxcbiAgICBldmVudEJ1czogbmV3IENsb3VkYmFzZUV2ZW50RW1pdHRlcigpLFxuICB9XG5cbiAgY29uc3Qgb2F1dGhJbnN0YW5jZSA9IG5ldyBDbG91ZGJhc2VPQXV0aCh1c2VBdXRoQWRhcHRlcih7XG4gICAgLi4uY29tbW9uT3B0cyxcbiAgICBhcGlPcmlnaW4sXG4gICAgYXBpUGF0aDogY29uZmlnPy5hcGlQYXRoIHx8IEFVVEhfQVBJX1BSRUZJWCxcbiAgICAvLyBAdG9kbyDku6XkuIvmnIDlpb3otbBhZGFwdG9y5aSE55CG77yM55uu5YmNb2F1dGjmqKHlnZfmsqHmjIlhZGFwdG9y5o6l5Y+j6K6+6K6hXG4gICAgc3RvcmFnZTogY29uZmlnPy5zdG9yYWdlLFxuICAgIGJhc2VSZXF1ZXN0OiBjb25maWc/LmJhc2VSZXF1ZXN0LFxuICAgIHJlcXVlc3Q6IGNvbmZpZz8ucmVxdWVzdCxcbiAgICBhbm9ueW1vdXNTaWduSW5GdW5jOiBjb25maWc/LmFub255bW91c1NpZ25JbkZ1bmMsXG4gICAgY2FwdGNoYU9wdGlvbnM6IGNvbmZpZz8uY2FwdGNoYU9wdGlvbnMsXG4gICAgd3hDbG91ZDogY29uZmlnPy53eENsb3VkLFxuICAgIGFkYXB0ZXIsXG4gICAgb25DcmVkZW50aWFsc0Vycm9yOiBvbkNyZWRlbnRpYWxzRXJyb3IoY29tbW9uT3B0cy5ldmVudEJ1cyksXG4gICAgaGVhZGVyczogeyAnWC1TREstVmVyc2lvbic6IGBAY2xvdWRiYXNlL2pzLXNkay8ke2NvbmZpZy5zZGtWZXJzaW9ufWAsIC4uLihjb25maWcuaGVhZGVycyB8fCB7fSkgfSxcbiAgICBkZXRlY3RTZXNzaW9uSW5Vcmw6IGNvbmZpZy5kZXRlY3RTZXNzaW9uSW5VcmwsXG4gICAgZGVidWcsXG4gICAgYXV0aDogb3B0aW9ucy5hcHA/LmNvbmZpZz8uYXV0aCxcbiAgfSksKVxuXG4gIGNvbnN0IGF1dGhJbnN0YW5jZSA9IG5ldyBBdXRoKHtcbiAgICAuLi5jb21tb25PcHRzLFxuICAgIHJlZ2lvbixcbiAgICBwZXJzaXN0ZW5jZTogY29uZmlnLnBlcnNpc3RlbmNlLFxuICAgIGRlYnVnLFxuICAgIGNhY2hlOlxuICAgICAgY2FjaGUgfHwgbmV3IENsb3VkYmFzZUNhY2hlKHtcbiAgICAgICAgcGVyc2lzdGVuY2U6IGNvbmZpZy5wZXJzaXN0ZW5jZSxcbiAgICAgICAga2V5czogeyB1c2VySW5mb0tleTogYHVzZXJfaW5mb18ke2Vudn1gIH0sXG4gICAgICAgIHBsYXRmb3JtSW5mbzogcGxhdGZvcm0sXG4gICAgICB9KSxcbiAgICBydW50aW1lOiBydW50aW1lIHx8ICd3ZWInLFxuICAgIF9mcm9tQXBwOiBjbG91ZGJhc2UsXG4gICAgb2F1dGhJbnN0YW5jZSxcbiAgICBhdXRoOiBvcHRpb25zLmFwcD8uY29uZmlnPy5hdXRoLFxuICB9KVxuXG4gIC8vIEluaXRpYWxpemUgc2Vzc2lvbiB3aXRoIHVzZXIgaW5mbyBjYWxsYmFja1xuICAvLyBUaGlzIGhhbmRsZXMgT0F1dGggY2FsbGJhY2sgVVJMIGRldGVjdGlvbiBhbmQgY3JlYXRlcyBsb2dpbiBzdGF0ZSBhdG9taWNhbGx5XG4gIG9hdXRoSW5zdGFuY2UuaW5pdGlhbGl6ZVNlc3Npb24oYXN5bmMgKGRhdGEsIGVycm9yKSA9PiB7XG4gICAgaWYgKCFkYXRhKSByZXR1cm5cblxuICAgIGlmIChkYXRhLnR5cGUgPT09IE9BVVRIX1RZUEUuU0lHTl9JTikge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIGNvbW1vbk9wdHMuZXZlbnRCdXMuZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgICAgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9JTixcbiAgICAgICAgICBpbmZvOiB7IC4uLmRhdGEsIGVycm9yIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGRhdGEudXNlcikge1xuICAgICAgICAvLyDkvb/nlKjlt7Lojrflj5bnmoQgdXNlciDkv6Hmga/liJvlu7ogTG9naW5TdGF0Ze+8jOWkjeeUqCBjcmVhdGVMb2dpblN0YXRlIOmAu+i+kVxuICAgICAgICAvLyDkvYbot7Pov4cgcmVmcmVzaCgpIOmBv+WFjeWGjeasoeivt+axgiBBUEkg5a+86Ie05q276ZSBXG4gICAgICAgIGF1dGhJbnN0YW5jZS5jcmVhdGVMb2dpblN0YXRlKHt9LCB7IHVzZXJJbmZvOiBkYXRhLnVzZXIgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gT0FVVEhfVFlQRS5CSU5EX0lERU5USVRZKSB7XG4gICAgICBjb21tb25PcHRzLmV2ZW50QnVzLmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwge1xuICAgICAgICBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuQklORF9JREVOVElUWSxcbiAgICAgICAgaW5mbzogeyAuLi5kYXRhLCBlcnJvciB9LFxuICAgICAgfSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIHsgYXV0aEluc3RhbmNlLCBvYXV0aEluc3RhbmNlIH1cbn1cblxuY29uc3QgTkFNRVNQQUNFID0gJ2F1dGgnXG5cbmNvbnN0IGNvbXBvbmVudDogSUNsb3VkYmFzZUNvbXBvbmVudCA9IHtcbiAgbmFtZTogQ09NUE9ORU5UX05BTUUsXG4gIG5hbWVzcGFjZTogTkFNRVNQQUNFLFxuICBlbnRpdHkoY29uZmlnPzogVEluaXRBdXRoT3B0aW9ucykge1xuICAgIGNvbnN0IGF1dGggPSBmdW5jdGlvbiAoY29uZmlnPzogVEluaXRBdXRoT3B0aW9ucykge1xuICAgICAgaWYgKHRoaXMuYXV0aEluc3RhbmNlICYmICFjb25maWcpIHtcbiAgICAgICAgLy8gcHJpbnRXYXJuKEVSUk9SUy5JTlZBTElEX09QRVJBVElPTiwgJ2V2ZXJ5IGNsb3VkYmFzZSBpbnN0YW5jZSBzaG91bGQgaGFzIG9ubHkgb25lIGF1dGggb2JqZWN0JylcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aEluc3RhbmNlXG4gICAgICB9XG5cbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7XG4gICAgICAgIHJlZ2lvbjogJycsXG4gICAgICAgIHBlcnNpc3RlbmNlOiAnbG9jYWwnLFxuICAgICAgICBhcGlQYXRoOiBBVVRIX0FQSV9QUkVGSVgsXG4gICAgICB9XG4gICAgICBjb25zdCB7IGFkYXB0ZXIgfSA9IHRoaXMucGxhdGZvcm1cbiAgICAgIC8vIOWmguS4jeaYjuehruaMh+WumnBlcnNpc3RlbmNl5YiZ5LyY5YWI5Y+W5ZCE5bmz5Y+wYWRhcHRlcummlumAie+8jOWFtuasoWxvY2FsU3RvcmFnZVxuICAgICAgY29uc3QgbmV3UGVyc2lzdGVuY2UgPSBjb25maWcucGVyc2lzdGVuY2UgfHwgYWRhcHRlci5wcmltYXJ5U3RvcmFnZVxuICAgICAgaWYgKG5ld1BlcnNpc3RlbmNlICYmIG5ld1BlcnNpc3RlbmNlICE9PSB0aGlzLmNvbmZpZy5wZXJzaXN0ZW5jZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh7IHBlcnNpc3RlbmNlOiBuZXdQZXJzaXN0ZW5jZSB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGF1dGhJbnN0YW5jZSwgb2F1dGhJbnN0YW5jZSB9ID0gZ2VuZXJhdGVBdXRoSW5zdGFuY2UoXG4gICAgICAgIHtcbiAgICAgICAgICB3eENsb3VkOiB0aGlzLmNvbmZpZy53eENsb3VkLFxuICAgICAgICAgIHN0b3JhZ2U6IHRoaXMuY29uZmlnLnN0b3JhZ2UsXG4gICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgIHBlcnNpc3RlbmNlOiB0aGlzLmNvbmZpZy5wZXJzaXN0ZW5jZSxcbiAgICAgICAgICBpMThuOiB0aGlzLmNvbmZpZy5pMThuLFxuICAgICAgICAgIGFjY2Vzc0tleTogdGhpcy5jb25maWcuYWNjZXNzS2V5LFxuICAgICAgICAgIHVzZVd4Q2xvdWQ6IHRoaXMuY29uZmlnLnVzZVd4Q2xvdWQsXG4gICAgICAgICAgc2RrVmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgICAgIGRldGVjdFNlc3Npb25JblVybDogdGhpcy5jb25maWcuYXV0aD8uZGV0ZWN0U2Vzc2lvbkluVXJsLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZW52OiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICAgICAgY2xpZW50SWQ6IHRoaXMuY29uZmlnLmNsaWVudElkLFxuICAgICAgICAgIGFwaU9yaWdpbjogdGhpcy5yZXF1ZXN0LmdldEJhc2VFbmRQb2ludCh0aGlzLmNvbmZpZy5lbmRQb2ludE1vZGUgfHwgJ0NMT1VEX0FQSScpLFxuICAgICAgICAgIHBsYXRmb3JtOiB0aGlzLnBsYXRmb3JtLFxuICAgICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICAgIGFwcDogdGhpcyxcbiAgICAgICAgICBkZWJ1ZzogdGhpcy5jb25maWcuZGVidWcsXG4gICAgICAgIH0sXG4gICAgICApXG5cbiAgICAgIHRoaXMub2F1dGhJbnN0YW5jZSA9IG9hdXRoSW5zdGFuY2VcblxuICAgICAgdGhpcy5hdXRoSW5zdGFuY2UgPSBhdXRoSW5zdGFuY2VcblxuICAgICAgcmV0dXJuIHRoaXMuYXV0aEluc3RhbmNlXG4gICAgfVxuXG4gICAgY29uc3QgYXV0aFByb3RvID0gYXV0aC5jYWxsKHRoaXMsIGNvbmZpZylcbiAgICBPYmplY3QuYXNzaWduKGF1dGgsIGF1dGhQcm90bylcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXV0aCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKGF1dGhQcm90bykpXG4gICAgdGhpc1tOQU1FU1BBQ0VdID0gYXV0aFxuICAgIHJldHVybiBhdXRoXG4gIH0sXG59XG5cbnRyeSB7XG4gIC8vIOWwneivleiHquWKqOazqOWGjOiHs+WFqOWxgOWPmOmHj2Nsb3VkYmFzZVxuICAvLyDmraTooYzkuLrlj6rlnKjmtY/op4jlmajnjq/looPkuIvmnInmlYhcbiAgY2xvdWRiYXNlLnJlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudClcbn0gY2F0Y2ggKGUpIHt9XG5cbmV4cG9ydCB7IFVzZXJJbmZvLCBBdXRoIH1cbi8qKlxuICogQGFwaSDmiYvliqjms6jlhozoh7NjbG91ZGJhc2UgYXBwXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckF1dGgoYXBwOiBQaWNrPElDbG91ZGJhc2UsICdyZWdpc3RlckNvbXBvbmVudCc+KSB7XG4gIHRyeSB7XG4gICAgYXBwLnJlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybihlKVxuICB9XG59XG4iXX0=
|
|
2901
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLE9BQU8sRUFDTCxjQUFjLEVBQ2QsZUFBZSxFQUNmLHdCQUF3QixFQUN4QixNQUFNLEVBQ04sdUJBQXVCLEVBQ3ZCLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVix5QkFBeUIsR0FDMUIsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBQzFDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixjQUFjLEVBQ2QsY0FBYyxFQUNkLGlCQUFpQixHQUNsQixNQUFNLGFBQWEsQ0FBQTtBQUNwQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3JHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQWtDNUMsSUFBTSxTQUFTLEdBQUcsY0FBTSxPQUFBLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXLEVBQWhFLENBQWdFLENBQUE7QUFtQ3hGLElBQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQTtBQWtCN0IsSUFBTSxrQkFBa0IsR0FBRyxVQUFBLFFBQVEsSUFBSSxPQUFBLFVBQUMsTUFBTTtJQUM1QyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsd0JBQU8sTUFBTSxLQUFFLFNBQVMsRUFBRSx3QkFBd0IsQ0FBQyxpQkFBaUIsSUFBRyxDQUFBO0FBQ2pILENBQUMsRUFG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QyxFQUFFLEdBQUU7QUFFZCxPQUFPLEVBQVksSUFBSSxFQUFFLENBQUE7QUFJekIsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUEwQztJQUNyRSxJQUFJO1FBQ0YsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFBO0tBQ2pDO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSUNsb3VkYmFzZSwgSUNsb3VkYmFzZUNvbmZpZywgSUNsb3VkYmFzZVBsYXRmb3JtSW5mbyB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMnXG5pbXBvcnQgdHlwZSB7IElDbG91ZGJhc2VDYWNoZSB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvY2FjaGUnXG5pbXBvcnQgdHlwZSB7IElDbG91ZGJhc2VSZXF1ZXN0IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9yZXF1ZXN0J1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQXV0aENvbmZpZywgSVVzZXIsIElMb2dpblN0YXRlIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9hdXRoJ1xuaW1wb3J0IHR5cGUgeyBJQ2xvdWRiYXNlQ29tcG9uZW50IH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jb21wb25lbnQnXG5pbXBvcnQgdHlwZSB7IEF1dGhPcHRpb25zLCBDcmVkZW50aWFscyB9IGZyb20gJ0BjbG91ZGJhc2Uvb2F1dGgnXG5pbXBvcnQge1xuICBDbG91ZGJhc2VPQXV0aCxcbiAgQVVUSF9BUElfUFJFRklYLFxuICBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUsXG4gIEVWRU5UUyxcbiAgQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUsXG4gIE9BVVRIX1RZUEUsXG4gIHdlQXBwSnd0RGVjb2RlQWxsLFxuICBBdXRoRXJyb3IsXG4gIGF1dGhNb2RlbHMsXG4gIERFRkFVTFRfTk9ERV9BQ0NFU1NfU0NPUEUsXG59IGZyb20gJ0BjbG91ZGJhc2Uvb2F1dGgnXG5pbXBvcnQgeyB1c2VBdXRoQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlcidcbmltcG9ydCB7XG4gIHByaW50V2FybixcbiAgdGhyb3dFcnJvcixcbiAgRVJST1JTLFxuICBDT01NVU5JVFlfU0lURV9VUkwsXG4gIGNhdGNoRXJyb3JzRGVjb3JhdG9yLFxuICBDbG91ZGJhc2VFdmVudEVtaXR0ZXIsXG4gIENsb3VkYmFzZUNhY2hlLFxuICBhZGFwdGVyRm9yV3hNcCxcbiAgdXNlRGVmYXVsdEFkYXB0ZXIsXG59IGZyb20gJy4vdXRpbGl0aWVzJ1xuaW1wb3J0IHsgc2F2ZVRvQnJvd3NlclNlc3Npb24sIGdldEJyb3dzZXJTZXNzaW9uLCByZW1vdmVCcm93c2VyU2Vzc2lvbiwgYWRkVXJsU2VhcmNoIH0gZnJvbSAnLi91dGlscydcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSAnQGNsb3VkYmFzZS91dGlsaXRpZXMnXG5pbXBvcnQge1xuICBDb21tb25SZXMsXG4gIERlbGV0ZU1lUmVxLFxuICBHZXRDbGFpbXNSZXMsXG4gIEdldFVzZXJJZGVudGl0aWVzUmVzLFxuICBHZXRVc2VyUmVzLFxuICBMaW5rSWRlbnRpdHlSZXEsXG4gIExpbmtJZGVudGl0eVJlcyxcbiAgT25BdXRoU3RhdGVDaGFuZ2VDYWxsYmFjayxcbiAgUmVhdXRoZW50aWNhdGVSZXMsXG4gIFJlc2VuZFJlcSxcbiAgUmVzZW5kUmVzLFxuICBSZXNldFBhc3N3b3JkRm9yRW1haWxSZXMsXG4gIFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEsXG4gIFNldFNlc3Npb25SZXEsXG4gIFNpZ25JbkFub255bW91c2x5UmVxLFxuICBTaWduSW5PQXV0aFJlcyxcbiAgU2lnbkluUmVzLFxuICBTaWduSW5XaXRoSWRUb2tlblJlcSxcbiAgU2lnbkluV2l0aE9BdXRoUmVxLFxuICBTaWduSW5XaXRoT3RwUmVxLFxuICBTaWduSW5XaXRoT3RwUmVzLFxuICBTaWduSW5XaXRoUGFzc3dvcmRSZXEsXG4gIFNpZ25VcFJlcyxcbiAgVW5saW5rSWRlbnRpdHlSZXEsXG4gIFVwZGF0ZVVzZXJBdHRyaWJ1dGVzLFxuICBVcGRhdGVVc2VyUmVxLFxuICBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcyxcbiAgVmVyaWZ5T0F1dGhSZXEsXG4gIFZlcmlmeU9BdXRoUmVzLFxuICBWZXJpZnlPdHBSZXEsXG59IGZyb20gJy4vdHlwZSdcblxuY29uc3QgaXNCcm93c2VyID0gKCkgPT4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuXG5leHBvcnQgdHlwZSB7XG4gIFNpZ25JblJlcyxcbiAgR2V0VXNlclJlcyxcbiAgQ29tbW9uUmVzLFxuICBTaWduSW5XaXRoT3RwUmVzLFxuICBTaWduSW5PQXV0aFJlcyxcbiAgR2V0Q2xhaW1zUmVzLFxuICBSZXNldFBhc3N3b3JkRm9yRW1haWxSZXMsXG4gIEdldFVzZXJJZGVudGl0aWVzUmVzLFxuICBMaW5rSWRlbnRpdHlSZXMsXG4gIFJlYXV0aGVudGljYXRlUmVzLFxuICBSZXNlbmRSZXMsXG4gIFVwZGF0ZVVzZXJXaXRoVmVyaWZpY2F0aW9uUmVzLFxuICBPbkF1dGhTdGF0ZUNoYW5nZUNhbGxiYWNrLFxuICBTaWduSW5XaXRoUGFzc3dvcmRSZXEsXG4gIFNpZ25JbldpdGhJZFRva2VuUmVxLFxuICBTaWduSW5XaXRoT0F1dGhSZXEsXG4gIFZlcmlmeU9BdXRoUmVxLFxuICBWZXJpZnlPdHBSZXEsXG4gIExpbmtJZGVudGl0eVJlcSxcbiAgVW5saW5rSWRlbnRpdHlSZXEsXG4gIFVwZGF0ZVVzZXJSZXEsXG4gIFNpZ25JbldpdGhPdHBSZXEsXG4gIFJlc2V0UGFzc3dvcmRGb3JPbGRSZXEsXG4gIFJlc2VuZFJlcSxcbiAgU2V0U2Vzc2lvblJlcSxcbiAgRGVsZXRlTWVSZXEsXG4gIFNpZ25VcFJlcyxcbn0gZnJvbSAnLi90eXBlJ1xuXG5kZWNsYXJlIGNvbnN0IGNsb3VkYmFzZTogSUNsb3VkYmFzZVxuZGVjbGFyZSBjb25zdCB3eDogYW55XG5cbmNvbnN0IENPTVBPTkVOVF9OQU1FID0gJ2F1dGgnXG5cbmludGVyZmFjZSBVc2VySW5mbyB7XG4gIHVpZD86IHN0cmluZ1xuICBnZW5kZXI/OiBzdHJpbmdcbiAgcGljdHVyZT86IHN0cmluZ1xuICBlbWFpbD86IHN0cmluZ1xuICBlbWFpbF92ZXJpZmllZD86IGJvb2xlYW5cbiAgcGhvbmVfbnVtYmVyPzogc3RyaW5nXG4gIHVzZXJuYW1lPzogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmdcbiAgYmlydGhkYXRlPzogc3RyaW5nXG4gIHpvbmVpbmZvPzogc3RyaW5nXG4gIGxvY2FsZT86IHN0cmluZ1xuICBzdWI/OiBzdHJpbmdcbiAgY3JlYXRlZF9mcm9tPzogc3RyaW5nXG59XG5cbmNvbnN0IG9uQ3JlZGVudGlhbHNFcnJvciA9IGV2ZW50QnVzID0+IChwYXJhbXMpID0+IHtcbiAgZXZlbnRCdXMuZmlyZShFVkVOVFMuTE9HSU5fU1RBVEVfQ0hBTkdFRCwgeyAuLi5wYXJhbXMsIGV2ZW50VHlwZTogTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLkNSRURFTlRJQUxTX0VSUk9SIH0pXG59XG5cbmludGVyZmFjZSBJVXNlck9wdGlvbnMge1xuICBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyIGltcGxlbWVudHMgSVVzZXIge1xuICBwdWJsaWMgdWlkPzogc3RyaW5nXG4gIHB1YmxpYyBnZW5kZXI/OiBzdHJpbmdcbiAgcHVibGljIHBpY3R1cmU/OiBzdHJpbmdcbiAgcHVibGljIGVtYWlsPzogc3RyaW5nXG4gIHB1YmxpYyBlbWFpbFZlcmlmaWVkPzogYm9vbGVhblxuICBwdWJsaWMgcGhvbmVOdW1iZXI/OiBzdHJpbmdcbiAgcHVibGljIHVzZXJuYW1lPzogc3RyaW5nIC8vIOeUqOaIt+WQjeensO+8jOmVv+W6piA1LTI0IOS9je+8jOaUr+aMgeWtl+espuS4reiLseaWh+OAgeaVsOWtl+OAgeeJueauiuWtl+espu+8iOS7heaUr+aMgV8t77yJ77yM5LiN5pSv5oyB5Lit5paHXG4gIHB1YmxpYyBuYW1lPzogc3RyaW5nXG4gIHB1YmxpYyBwcm92aWRlcnM/OiB7XG4gICAgaWQ/OiBzdHJpbmdcbiAgICBwcm92aWRlclVzZXJJZD86IHN0cmluZ1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgfVtdXG4gIHB1YmxpYyBiaXJ0aGRhdGU/OiBzdHJpbmdcbiAgcHVibGljIHpvbmVpbmZvPzogc3RyaW5nXG4gIHB1YmxpYyBsb2NhbGU/OiBzdHJpbmdcbiAgcHVibGljIHN1Yj86IHN0cmluZ1xuICBwdWJsaWMgY3JlYXRlZEZyb20/OiBzdHJpbmdcblxuICBwcml2YXRlIGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgcHJpdmF0ZSBvYXV0aEluc3RhbmNlOiBDbG91ZGJhc2VPQXV0aCAvLyBDbG91ZGJhc2VPQXV0aCDnsbvlnotcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJVXNlck9wdGlvbnMpIHtcbiAgICBjb25zdCB7IGNhY2hlLCBvYXV0aEluc3RhbmNlIH0gPSBvcHRpb25zXG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy5zZXRVc2VySW5mbygpXG4gIH1cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeUqOaIt+S/oeaBry3lkIzmraVcbiAgICovXG4gIHB1YmxpYyBhc3luYyBjaGVja0xvY2FsSW5mbygpIHtcbiAgICB0aGlzLnVpZCA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygndWlkJykgYXMgc3RyaW5nXG4gICAgdGhpcy5nZW5kZXIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2dlbmRlcicpIGFzIHN0cmluZ1xuICAgIHRoaXMucGljdHVyZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygncGljdHVyZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuZW1haWwgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2VtYWlsJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbFZlcmlmaWVkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdlbWFpbF92ZXJpZmllZCcpIGFzIGJvb2xlYW5cbiAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaG9uZV9udW1iZXInKSBhcyBzdHJpbmdcbiAgICB0aGlzLnVzZXJuYW1lID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd1c2VybmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMubmFtZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbmFtZScpIGFzIHN0cmluZ1xuICAgIHRoaXMuYmlydGhkYXRlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdiaXJ0aGRhdGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnpvbmVpbmZvID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCd6b25laW5mbycpIGFzIHN0cmluZ1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdsb2NhbGUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLnN1YiA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnc3ViJykgYXMgc3RyaW5nXG4gICAgdGhpcy5jcmVhdGVkRnJvbSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnY3JlYXRlZF9mcm9tJykgYXMgc3RyaW5nXG4gICAgdGhpcy5wcm92aWRlcnMgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3Byb3ZpZGVycycpIGFzIGFueVxuICB9XG4gIC8qKlxuICAgKiDojrflj5bmnKzlnLDnlKjmiLfkv6Hmga8t5byC5q2lXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY2hlY2tMb2NhbEluZm9Bc3luYygpIHtcbiAgICB0aGlzLnVpZCA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCd1aWQnKVxuICAgIHRoaXMuZ2VuZGVyID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ2dlbmRlcicpXG4gICAgdGhpcy5waWN0dXJlID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaWN0dXJlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5lbWFpbCA9IGF3YWl0IHRoaXMuZ2V0TG9jYWxVc2VySW5mb0FzeW5jKCdlbWFpbCcpXG4gICAgdGhpcy5lbWFpbFZlcmlmaWVkID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdlbWFpbF92ZXJpZmllZCcpIGFzIGJvb2xlYW5cbiAgICB0aGlzLnBob25lTnVtYmVyID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwaG9uZV9udW1iZXInKSBhcyBzdHJpbmdcbiAgICB0aGlzLnVzZXJuYW1lID0gYXdhaXQgdGhpcy5nZXRMb2NhbFVzZXJJbmZvQXN5bmMoJ3VzZXJuYW1lJylcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ25hbWUnKSBhcyBzdHJpbmdcbiAgICB0aGlzLmJpcnRoZGF0ZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnYmlydGhkYXRlJykgYXMgc3RyaW5nXG4gICAgdGhpcy56b25laW5mbyA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnem9uZWluZm8nKSBhcyBzdHJpbmdcbiAgICB0aGlzLmxvY2FsZSA9IHRoaXMuZ2V0TG9jYWxVc2VySW5mbygnbG9jYWxlJykgYXMgc3RyaW5nXG4gICAgdGhpcy5zdWIgPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ3N1YicpIGFzIHN0cmluZ1xuICAgIHRoaXMuY3JlYXRlZEZyb20gPSB0aGlzLmdldExvY2FsVXNlckluZm8oJ2NyZWF0ZWRfZnJvbScpIGFzIHN0cmluZ1xuICAgIHRoaXMucHJvdmlkZXJzID0gdGhpcy5nZXRMb2NhbFVzZXJJbmZvKCdwcm92aWRlcnMnKSBhcyBhbnlcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDnlKjmiLfkv6Hmga9cbiAgICogQHBhcmFtIHVzZXJJbmZvXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw55So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDnlKjmiLfkv6Hmga/kuK3mmK/lkKbljIXlkKvpnZ7ms5XlgLwnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHVwZGF0ZSh1c2VySW5mbzogYXV0aE1vZGVscy5Vc2VyUHJvZmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNvbnN0IHsgbmFtZSwgZ2VuZGVyLCBhdmF0YXJVcmwsIHByb3ZpbmNlLCBjb3VudHJ5LCBjaXR5IH0gPSB1c2VySW5mb1xuICAgIGNvbnN0IG5ld1VzZXJJbmZvID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0VXNlclByb2ZpbGUoeyAuLi51c2VySW5mbyB9KVxuXG4gICAgdGhpcy5zZXRMb2NhbFVzZXJJbmZvKG5ld1VzZXJJbmZvKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVVzZXJCYXNpY0luZm9SZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudXBkYXRlVXNlckJhc2ljSW5mbyh7IC4uLnBhcmFtcyB9KVxuICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICAvKipcbiAgICog5pu05paw5a+G56CBXG4gICAqIEBwYXJhbSBuZXdQYXNzd29yZFxuICAgKiBAcGFyYW0gb2xkUGFzc3dvcmRcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfmm7TmlrDlr4bnoIHlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggVXNlci51cGRhdGVQYXNzd29yZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAzIC0g5paw5a+G56CB5Lit5piv5ZCm5YyF5ZCr6Z2e5rOV5a2X56ymJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyB1cGRhdGVQYXNzd29yZChuZXdQYXNzd29yZDogc3RyaW5nLCBvbGRQYXNzd29yZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVwZGF0ZVBhc3N3b3JkQnlPbGQoe1xuICAgICAgb2xkX3Bhc3N3b3JkOiBvbGRQYXNzd29yZCxcbiAgICAgIG5ld19wYXNzd29yZDogbmV3UGFzc3dvcmQsXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDnlKjmiLflkI1cbiAgICogQHBhcmFtIHVzZXJuYW1lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5pu05paw55So5oi35ZCN5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIFVzZXIudXBkYXRlVXNlcm5hbWUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOmAmuS6hueUqOaIt+WQjeWvhueggeeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgdXBkYXRlVXNlcm5hbWUodXNlcm5hbWU6IHN0cmluZykge1xuICAgIGlmICh0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3VzZXJuYW1lIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVwZGF0ZSh7XG4gICAgICB1c2VybmFtZSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOWIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+OAguW9k+eUqOaIt+WcqOWFtuS7luWuouaIt+err+abtOaWsOeUqOaIt+S/oeaBr+S5i+WQju+8jOWPr+S7peiwg+eUqOatpOaOpeWPo+WQjOatpeabtOaWsOS5i+WQjueahOS/oeaBr+OAglxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+WIt+aWsOacrOWcsOeUqOaIt+S/oeaBr+Wksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBVc2VyLnJlZnJlc2goKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHJlZnJlc2gocGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9KTogUHJvbWlzZTxhdXRoTW9kZWxzLlVzZXJJbmZvPiB7XG4gICAgY29uc3QgbmV3VXNlckluZm8gPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRVc2VySW5mbyhwYXJhbXMpXG4gICAgaWYgKChuZXdVc2VySW5mbyBhcyBhbnkpLmNvZGUgPT09ICdJTlZBTElEX0FDQ0VTU19UT0tFTicpIHtcbiAgICAgIHRoaXMuc2V0TG9jYWxVc2VySW5mbyh7fSlcbiAgICAgIHRocm93IG5ld1VzZXJJbmZvXG4gICAgfVxuICAgIHRoaXMuc2V0TG9jYWxVc2VySW5mbyhuZXdVc2VySW5mbylcbiAgICByZXR1cm4gbmV3VXNlckluZm9cbiAgfVxuXG4gIHB1YmxpYyBnZXRMb2NhbFVzZXJJbmZvKGtleT86IHN0cmluZyk6IHN0cmluZyB8IGJvb2xlYW4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCB7IHVzZXJJbmZvS2V5IH0gPSB0aGlzLmNhY2hlLmtleXNcbiAgICBjb25zdCB1c2VySW5mbyA9IHRoaXMuY2FjaGUuZ2V0U3RvcmUodXNlckluZm9LZXkpXG5cbiAgICBpZiAoIWtleSkgcmV0dXJuIHVzZXJJbmZvIHx8IHt9XG5cbiAgICByZXR1cm4gdXNlckluZm9ba2V5XVxuICB9XG5cbiAgcHVibGljIHNldExvY2FsVXNlckluZm8odXNlckluZm86IGFueSkge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIHRoaXMuY2FjaGUuc2V0U3RvcmUodXNlckluZm9LZXksIHVzZXJJbmZvKVxuICAgIHRoaXMuc2V0VXNlckluZm8oKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRMb2NhbFVzZXJJbmZvQXN5bmMoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgdGhpcy5jYWNoZS5nZXRTdG9yZUFzeW5jKHVzZXJJbmZvS2V5KVxuICAgIHJldHVybiB1c2VySW5mb1trZXldXG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJJbmZvKCkge1xuICAgIGNvbnN0IHsgdXNlckluZm9LZXkgfSA9IHRoaXMuY2FjaGUua2V5c1xuICAgIGNvbnN0IHVzZXJJbmZvID0gdGhpcy5jYWNoZS5nZXRTdG9yZSh1c2VySW5mb0tleSlcbiAgICA7W1xuICAgICAgJ3VpZCcsXG4gICAgICAnZW1haWwnLFxuICAgICAgJ25hbWUnLFxuICAgICAgJ2dlbmRlcicsXG4gICAgICAncGljdHVyZScsXG4gICAgICAnZW1haWxfdmVyaWZpZWQnLFxuICAgICAgJ3Bob25lX251bWJlcicsXG4gICAgICAnYmlydGhkYXRlJyxcbiAgICAgICd6b25laW5mbycsXG4gICAgICAnbG9jYWxlJyxcbiAgICAgICdzdWInLFxuICAgICAgJ2NyZWF0ZWRfZnJvbScsXG4gICAgICAncHJvdmlkZXJzJyxcbiAgICAgICd1c2VybmFtZScsXG4gICAgICAnY3JlYXRlZF9hdCcsXG4gICAgXS5mb3JFYWNoKChpbmZvS2V5KSA9PiB7XG4gICAgICB0aGlzW2luZm9LZXldID0gdXNlckluZm9baW5mb0tleV1cbiAgICB9KVxuICB9XG59XG5pbnRlcmZhY2UgSUxvZ2luU3RhdGVPcHRpb25zIGV4dGVuZHMgSVVzZXJPcHRpb25zIHtcbiAgZW52SWQ6IHN0cmluZ1xufVxuZXhwb3J0IGNsYXNzIExvZ2luU3RhdGUgaW1wbGVtZW50cyBJTG9naW5TdGF0ZSB7XG4gIHB1YmxpYyB1c2VyOiBVc2VyXG4gIHB1YmxpYyBvYXV0aExvZ2luU3RhdGU6IGFueVxuXG4gIHByaXZhdGUgb2F1dGhJbnN0YW5jZTogQ2xvdWRiYXNlT0F1dGhcbiAgcHJpdmF0ZSBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogSUxvZ2luU3RhdGVPcHRpb25zKSB7XG4gICAgY29uc3QgeyBlbnZJZCwgY2FjaGUsIG9hdXRoSW5zdGFuY2UgfSA9IG9wdGlvbnNcbiAgICBpZiAoIWVudklkKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ2VudklkIGlzIG5vdCBkZWZpbmVkJylcbiAgICB9XG4gICAgdGhpcy5jYWNoZSA9IGNhY2hlXG4gICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgdGhpcy51c2VyID0gbmV3IFVzZXIoe1xuICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICBvYXV0aEluc3RhbmNlLFxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgY2hlY2tMb2NhbFN0YXRlKCkge1xuICAgIHRoaXMub2F1dGhMb2dpblN0YXRlID0gdGhpcy5vYXV0aEluc3RhbmNlPy5hdXRoQXBpLmhhc0xvZ2luU3RhdGVTeW5jKClcbiAgICB0aGlzLnVzZXIuY2hlY2tMb2NhbEluZm8oKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoZWNrTG9jYWxTdGF0ZUFzeW5jKCkge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZT8uYXV0aEFwaS5nZXRMb2dpblN0YXRlKClcbiAgICBhd2FpdCB0aGlzLnVzZXIuY2hlY2tMb2NhbEluZm9Bc3luYygpXG4gIH1cbn1cblxuaW50ZXJmYWNlIElBdXRoQ29uZmlnIGV4dGVuZHMgSUNsb3VkYmFzZUF1dGhDb25maWcge1xuICBjYWNoZTogSUNsb3VkYmFzZUNhY2hlXG4gIHJlcXVlc3Q/OiBJQ2xvdWRiYXNlUmVxdWVzdFxuICBydW50aW1lPzogc3RyaW5nXG59XG5cbmNsYXNzIEF1dGgge1xuICByZWFkb25seSBjb25maWc6IElBdXRoQ29uZmlnXG4gIG9hdXRoSW5zdGFuY2U6IENsb3VkYmFzZU9BdXRoXG4gIHJlYWRvbmx5IGNhY2hlOiBJQ2xvdWRiYXNlQ2FjaGVcbiAgcHJpdmF0ZSBsaXN0ZW5lcnM6IE1hcDxzdHJpbmcsIFNldDxPbkF1dGhTdGF0ZUNoYW5nZUNhbGxiYWNrPj4gPSBuZXcgTWFwKClcbiAgcHJpdmF0ZSBoYXNMaXN0ZW5lclNldFVwID0gZmFsc2VcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IElBdXRoQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgICB0aGlzLm9hdXRoSW5zdGFuY2UgPSBjb25maWcub2F1dGhJbnN0YW5jZVxuICAgIHRoaXMuY2FjaGUgPSBjb25maWcuY2FjaGVcbiAgICB0aGlzLmluaXQoKVxuICAgIHRoaXMuc2V0QWNjZXNzS2V5KClcbiAgfVxuXG4gIC8qKlxuICAgKiDnu5HlrprmiYvmnLrlj7dcbiAgICogQHBhcmFtIHBob25lTnVtYmVyXG4gICAqIEBwYXJhbSBwaG9uZUNvZGVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfnu5HlrprmiYvmnLrlj7flpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmJpbmRQaG9uZU51bWJlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG55+t5L+h6aqM6K+B56CB55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBiaW5kUGhvbmVOdW1iZXIocGFyYW1zOiBhdXRoTW9kZWxzLkJpbmRQaG9uZVJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZWRpdENvbnRhY3QocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIOino+e7keS4ieaWuee7keWumlxuICAgKiBAcGFyYW0gbG9naW5UeXBlXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6Kej6Zmk5LiJ5pa557uR5a6a5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS51bmJpbmRQcm92aWRlcigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN6LSm5oi35piv5ZCm5bey57uP5LiO5q2k55m75b2V5pa55byP6Kej57uRJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyB1bmJpbmRQcm92aWRlcihwYXJhbXM6IGF1dGhNb2RlbHMuVW5iaW5kUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVuYmluZFByb3ZpZGVyKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmm7TmlrDpgq7nrrHlnLDlnYBcbiAgICogQHBhcmFtIGVtYWlsXG4gICAqIEBwYXJhbSBzdWRvX3Rva2VuXG4gICAqIEBwYXJhbSB2ZXJpZmljYXRpb25fdG9rZW5cbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfnu5Hlrprpgq7nrrHlnLDlnYDlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmJpbmRFbWFpbCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG6YKu566x5a+G56CB55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBiaW5kRW1haWwocGFyYW1zOiBhdXRoTW9kZWxzLkJpbmRFbWFpbFJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZWRpdENvbnRhY3QocGFyYW1zKVxuICB9XG5cbiAgLyoqXG4gICAqIHZlcmlmeVxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuVmVyaWZ5UmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuVmVyaWZ5UmVzcG9uc2U+fVxuICAgKiBAbWVtYmVyb2YgVXNlclxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+mqjOivgeeggemqjOivgeWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBhdXRoKCkudmVyaWZ5KCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDlvZPliY3njq/looPmmK/lkKblvIDpgJrkuobmiYvmnLrpqozor4HnoIEv6YKu566x55m75b2VJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnkocGFyYW1zOiBhdXRoTW9kZWxzLlZlcmlmeVJlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuVmVyaWZ5UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudmVyaWZ5KHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bpqozor4HnoIFcbiAgICogQHBhcmFtIHthdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhdXRoTW9kZWxzLkdldFZlcmlmaWNhdGlvblJlc3BvbnNlPn1cbiAgICogQG1lbWJlcm9mIFVzZXJcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bpqozor4HnoIHlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldFZlcmlmaWNhdGlvbigpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICAnICAyIC0g5b2T5YmN546v5aKD5piv5ZCm5byA6YCa5LqG5omL5py66aqM6K+B56CBL+mCrueuseeZu+W9lScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0VmVyaWZpY2F0aW9uKFxuICAgIHBhcmFtczogYXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXF1ZXN0LFxuICAgIG9wdGlvbnM/OiB7IHdpdGhDYXB0Y2hhOiBib29sZWFuIH0sXG4gICk6IFByb21pc2U8YXV0aE1vZGVscy5HZXRWZXJpZmljYXRpb25SZXNwb25zZT4ge1xuICAgIGlmIChwYXJhbXMucGhvbmVfbnVtYmVyKSB7XG4gICAgICBwYXJhbXMucGhvbmVfbnVtYmVyID0gdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmVfbnVtYmVyKVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0VmVyaWZpY2F0aW9uKHBhcmFtcywgb3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5blvZPliY3nmbvlvZXnmoTnlKjmiLfkv6Hmga8t5ZCM5q2lXG4gICAqL1xuICBnZXQgY3VycmVudFVzZXIoKSB7XG4gICAgaWYgKHRoaXMuY2FjaGUubW9kZSA9PT0gJ2FzeW5jJykge1xuICAgICAgLy8gYXN5bmMgc3RvcmFnZeeahOW5s+WPsOiwg+eUqOatpEFQSeaPkOekulxuICAgICAgcHJpbnRXYXJuKFxuICAgICAgICBFUlJPUlMuSU5WQUxJRF9PUEVSQVRJT04sXG4gICAgICAgICdjdXJyZW50IHBsYXRmb3JtXFwncyBzdG9yYWdlIGlzIGFzeW5jaHJvbm91cywgcGxlYXNlIHVzZSBnZXRDdXJyZW50VXNlciBpbnN0ZWFkJyxcbiAgICAgIClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSB0aGlzLmhhc0xvZ2luU3RhdGUoKVxuXG4gICAgaWYgKGxvZ2luU3RhdGUpIHtcbiAgICAgIHJldHVybiBsb2dpblN0YXRlLnVzZXIgfHwgbnVsbFxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluW9k+WJjeeZu+W9leeahOeUqOaIt+S/oeaBry3lvILmraVcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldEN1cnJlbnRVc2VyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBnZXRDdXJyZW50VXNlcigpOiBQcm9taXNlPChhdXRoTW9kZWxzLlVzZXJJbmZvICYgUGFydGlhbDxVc2VyPikgfCBudWxsPiB7XG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0TG9naW5TdGF0ZSgpXG4gICAgaWYgKGxvZ2luU3RhdGUpIHtcbiAgICAgIGNvbnN0IHVzZXJJbmZvID0gbG9naW5TdGF0ZS51c2VyLmdldExvY2FsVXNlckluZm8oKSBhcyBhdXRoTW9kZWxzLlVzZXJJbmZvXG4gICAgICBhd2FpdCBsb2dpblN0YXRlLnVzZXIuY2hlY2tMb2NhbEluZm9Bc3luYygpXG4gICAgICByZXR1cm4geyAuLi5sb2dpblN0YXRlLnVzZXIsIC4uLnVzZXJJbmZvIH0gYXMgdW5rbm93biBhcyBhdXRoTW9kZWxzLlVzZXJJbmZvICYgUGFydGlhbDxVc2VyPlxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIOWMv+WQjeeZu+W9lVxuICAvLyAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgLy8gICogQG1lbWJlcm9mIEF1dGhcbiAgLy8gICovXG4gIC8vIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gIC8vICAgdGl0bGU6ICfljL/lkI3nmbvlvZXlpLHotKUnLFxuICAvLyAgIG1lc3NhZ2VzOiBbXG4gIC8vICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgLy8gICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobljL/lkI3nmbvlvZUnLFxuICAvLyAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluQW5vbnltb3VzbHkoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAvLyAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gIC8vICAgXSxcbiAgLy8gfSlcbiAgLy8gcHVibGljIGFzeW5jIHNpZ25JbkFub255bW91c2x5KGRhdGE6IHtcbiAgLy8gICBwcm92aWRlcl90b2tlbj86IHN0cmluZ1xuICAvLyB9ID0ge30sKTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gIC8vIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbkFub255bW91c2x5KGRhdGEpXG4gIC8vIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAvLyB9XG5cbiAgLyoqXG4gICAqIOWMv+WQjeeZu+W9lVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICflsI/nqIvluo/ljL/lkI3nmbvlvZXlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobljL/lkI3nmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluQW5vbnltb3VzbHlJbld4KCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAgIF0sXG4gIH0pXG4gIHB1YmxpYyBhc3luYyBzaWduSW5Bbm9ueW1vdXNseUluV3goe1xuICAgIHVzZVd4Q2xvdWQsXG4gIH06IHtcbiAgICB1c2VXeENsb3VkPzogYm9vbGVhblxuICB9ID0ge30pOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAgIH1cbiAgICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuXG4gICAgY29uc3QgbWFpbkZ1bmMgPSBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAgICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICBwcm92aWRlcl9jb2RlOiBjb2RlLFxuICAgICAgICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ29wZW5faWQnLFxuICAgICAgICAgICAgICBhcHBpZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VXeENsb3VkLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKChyZXN1bHQgYXMgYW55KT8uZXJyb3JfY29kZSB8fCAhcmVzdWx0LnByb3ZpZGVyX3Rva2VuKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0XG4gICAgICAgIH1cblxuICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbkFub255bW91c2x5KFxuICAgICAgICAgIHsgcHJvdmlkZXJfdG9rZW46IHJlc3VsdC5wcm92aWRlcl90b2tlbiB9LFxuICAgICAgICAgIHVzZVd4Q2xvdWQsXG4gICAgICAgIClcblxuICAgICAgICBpZiAoKGNyZWRlbnRpYWxzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICB0aHJvdyBjcmVkZW50aWFsc1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgc3VjY2VzczogYXN5bmMgKHJlczogeyBjb2RlOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBtYWluRnVuYyhyZXMuY29kZSlcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IocmVzPy5lcnJNc2cpXG4gICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSh1bmRlZmluZWQsIHsgYXN5bmNSZWZyZXNoVXNlcjogdHJ1ZSB9KVxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j+e7keWumk9wZW5JRFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICflsI/nqIvluo/nu5HlrppPcGVuSUTlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuoblsI/nqIvluo9vcGVuSWTpnZnpu5jnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuYmluZE9wZW5JZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgYmluZE9wZW5JZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAgIH1cbiAgICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuXG4gICAgY29uc3QgbWFpbkZ1bmMgPSBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4oe1xuICAgICAgICAgIHByb3ZpZGVyX2lkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgIHByb3ZpZGVyX2NvZGU6IGNvZGUsXG4gICAgICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgICAgICAgICBwcm92aWRlcl9jb2RlX3R5cGU6ICdvcGVuX2lkJyxcbiAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKChyZXN1bHQgYXMgYW55KT8uZXJyb3JfY29kZSB8fCAhcmVzdWx0LnByb3ZpZGVyX3Rva2VuKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHsgcHJvdmlkZXJfdG9rZW46IHJlc3VsdC5wcm92aWRlcl90b2tlbiB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB3eC5sb2dpbih7XG4gICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXM6IHsgY29kZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgbWFpbkZ1bmMocmVzLmNvZGUpXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZhaWw6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHJlcz8uZXJyTXNnKVxuICAgICAgICAgIDsoZXJyb3IgYXMgYW55KS5jb2RlID0gcmVzPy5lcnJub1xuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVyblxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j3VuaW9uSWTpnZnpu5jnmbvlvZVcbiAgICogQHJldHVybnMge1Byb21pc2U8TG9naW5TdGF0ZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn5bCP56iL5bqPdW5pb25JZOmdmem7mOeZu+W9leWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huWwj+eoi+W6j3VuaW9uSWTpnZnpu5jnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluV2l0aFVuaW9uSWQoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhVbmlvbklkKCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgICB0aHJvdyBFcnJvcignd3ggYXBpIHVuZGVmaW5lZCcpXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHd4SW5mbyA9IHd4LmdldEFjY291bnRJbmZvU3luYygpLm1pbmlQcm9ncmFtXG4gICAgICAgIHd4LmxvZ2luKHtcbiAgICAgICAgICBzdWNjZXNzOiBhc3luYyAocmVzOiB7IGNvZGU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm92aWRlcklkID0gd3hJbmZvPy5hcHBJZFxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKHtcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9jb2RlOiByZXMuY29kZSxcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9pZDogcHJvdmlkZXJJZCxcbiAgICAgICAgICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ3VuaW9uX2lkJyxcbiAgICAgICAgICAgICAgICAgIGFwcGlkOiB3eEluZm8/LmFwcElkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgY29uc3QgeyBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbiB9ID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgaWYgKCFwcm92aWRlclRva2VuKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KHJlc3VsdClcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHNpZ25JblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhQcm92aWRlcih7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHByb3ZpZGVySWQsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4sXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgaWYgKChzaWduSW5SZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChzaWduSW5SZXMpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZmFpbDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihyZXM/LmVyck1zZylcbiAgICAgICAgICAgIDsoZXJyb3IgYXMgYW55KS5jb2RlID0gcmVzPy5lcnJub1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICB9XG5cbiAgLyoqXG4gICAqIOWwj+eoi+W6j+efreS/oemqjOivgeeggeeZu+mZhlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfnn63kv6Hpqozor4HnoIHnmbvpmYYnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuoblsI/nqIvluo/nn63kv6Hpqozor4HnoIHnmbvpmYYnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnbkluV2l0aFNtcygpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFNtcyh7XG4gICAgdmVyaWZpY2F0aW9uSW5mbyA9IHsgdmVyaWZpY2F0aW9uX2lkOiAnJywgaXNfdXNlcjogZmFsc2UgfSxcbiAgICB2ZXJpZmljYXRpb25Db2RlID0gJycsXG4gICAgcGhvbmVOdW0gPSAnJyxcbiAgICBiaW5kSW5mbyA9IHVuZGVmaW5lZCxcbiAgfSk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5zaWduSW5XaXRoVXNlcm5hbWUoe1xuICAgICAgICB2ZXJpZmljYXRpb25JbmZvLFxuICAgICAgICB2ZXJpZmljYXRpb25Db2RlLFxuICAgICAgICBiaW5kSW5mbyxcbiAgICAgICAgdXNlcm5hbWU6IHBob25lTnVtLFxuICAgICAgICBsb2dpblR5cGU6ICdzbXMnLFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3JcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog6YKu566x6aqM6K+B56CB55m76ZmGXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgICB0aXRsZTogJ+mCrueusemqjOivgeeggeeZu+mZhicsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6humCrueuseeZu+mZhicsXG4gICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoRW1haWwoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIHNpZ25JbldpdGhFbWFpbCh7XG4gICAgdmVyaWZpY2F0aW9uSW5mbyA9IHsgdmVyaWZpY2F0aW9uX2lkOiAnJywgaXNfdXNlcjogZmFsc2UgfSxcbiAgICB2ZXJpZmljYXRpb25Db2RlID0gJycsXG4gICAgYmluZEluZm8gPSB1bmRlZmluZWQsXG4gICAgZW1haWwgPSAnJyxcbiAgfSk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5zaWduSW5XaXRoVXNlcm5hbWUoe1xuICAgICAgICB2ZXJpZmljYXRpb25JbmZvLFxuICAgICAgICB2ZXJpZmljYXRpb25Db2RlLFxuICAgICAgICBiaW5kSW5mbyxcbiAgICAgICAgdXNlcm5hbWU6IGVtYWlsLFxuICAgICAgICBsb2dpblR5cGU6ICdlbWFpbCcsXG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDorr7nva7ojrflj5boh6rlrprkuYnnmbvlvZUgdGlja2V0IOWHveaVsFxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuR2V0Q3VzdG9tU2lnblRpY2tldEZufSBnZXRUaWNrRm5cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBzZXRDdXN0b21TaWduRnVuYyhnZXRUaWNrRm46IGF1dGhNb2RlbHMuR2V0Q3VzdG9tU2lnblRpY2tldEZuKTogdm9pZCB7XG4gICAgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2V0Q3VzdG9tU2lnbkZ1bmMoZ2V0VGlja0ZuKVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgLy8gQGNhdGNoRXJyb3JzRGVjb3JhdG9yKHtcbiAgLy8gICB0aXRsZTogJ+iHquWumuS5ieeZu+W9leWksei0pScsXG4gIC8vICAgbWVzc2FnZXM6IFtcbiAgLy8gICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAvLyAgICAgJyAgMSAtIOW9k+WJjeeOr+Wig+aYr+WQpuW8gOWQr+S6huiHquWumuS5ieeZu+W9lScsXG4gIC8vICAgICAnICAyIC0g6LCD55SoIGF1dGgoKS5zaWduSW5XaXRoQ3VzdG9tVGlja2V0KCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgLy8gICAgICcgIDMgLSB0aWNrZXQg5piv5ZCm5b2S5bGe5LqO5b2T5YmN546v5aKDJyxcbiAgLy8gICAgICcgIDQgLSDliJvlu7ogdGlja2V0IOeahOiHquWumuS5ieeZu+W9leengemSpeaYr+WQpui/h+acnycsXG4gIC8vICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgLy8gICBdLFxuICAvLyB9KVxuICAvLyBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aEN1c3RvbVRpY2tldCgpOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgLy8gICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoQ3VzdG9tVGlja2V0KClcbiAgLy8gICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgLy8gfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuU2lnbkluUmVxdWVzdH0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPExvZ2luU3RhdGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNpZ25JbihwYXJhbXM6IGF1dGhNb2RlbHMuU2lnbkluUmVxdWVzdCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbihwYXJhbXMpXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZShwYXJhbXMpXG4gIH1cblxuICAvLyAvKipcbiAgLy8gICpcbiAgLy8gICogQHBhcmFtIHthdXRoTW9kZWxzLlNpZ25VcFJlcXVlc3R9IHBhcmFtc1xuICAvLyAgKiBAcmV0dXJucyB7UHJvbWlzZTxMb2dpblN0YXRlPn1cbiAgLy8gICogQG1lbWJlcm9mIEF1dGhcbiAgLy8gICovXG4gIC8vIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gIC8vICAgdGl0bGU6ICfms6jlhozlpLHotKUnLFxuICAvLyAgIG1lc3NhZ2VzOiBbXG4gIC8vICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgLy8gICAgICcgIDEgLSDlvZPliY3njq/looPmmK/lkKblvIDlkK/kuobmjIflrprnmbvlvZXmlrnlvI8nLFxuICAvLyAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuc2lnblVwKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgLy8gICAgIGDlpoLmnpzpl67popjkvp3nhLblrZjlnKjvvIzlu7rorq7liLDlrpjmlrnpl67nrZTnpL7ljLrmj5Dpl67miJblr7vmib7luK7liqnvvJoke0NPTU1VTklUWV9TSVRFX1VSTH1gLFxuICAvLyAgIF0sXG4gIC8vIH0pXG4gIC8vIHB1YmxpYyBhc3luYyBzaWduVXAocGFyYW1zOiBhdXRoTW9kZWxzLlNpZ25VcFJlcXVlc3QpOiBQcm9taXNlPGFueT4ge1xuICAvLyAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25VcChwYXJhbXMpXG4gIC8vICAgcmV0dXJuIHRoaXMuY3JlYXRlTG9naW5TdGF0ZSgpXG4gIC8vIH1cblxuICAvKipcbiAgICog6K6+572u5a+G56CBXG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5TZXRQYXNzd29yZFJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXRQYXNzd29yZChwYXJhbXM6IGF1dGhNb2RlbHMuU2V0UGFzc3dvcmRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNldFBhc3N3b3JkKHBhcmFtcylcbiAgfVxuXG4gIC8qKlxuICAgKiDmo4DmtYvnlKjmiLflkI3mmK/lkKblt7Lnu4/ljaDnlKhcbiAgICogQHBhcmFtIHVzZXJuYW1lXG4gICAqL1xuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W55So5oi35piv5ZCm6KKr5Y2g55So5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5pc1VzZXJuYW1lUmVnaXN0ZXJlZCgpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgaXNVc2VybmFtZVJlZ2lzdGVyZWQodXNlcm5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0eXBlb2YgdXNlcm5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvd0Vycm9yKEVSUk9SUy5JTlZBTElEX1BBUkFNUywgJ3VzZXJuYW1lIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgZXhpc3QgfSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmNoZWNrSWZVc2VyRXhpc3QoeyB1c2VybmFtZSB9KVxuICAgIHJldHVybiBleGlzdFxuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluacrOWcsOeZu+W9leaAgS3lkIzmraVcbiAgICovXG4gIHB1YmxpYyBoYXNMb2dpblN0YXRlKCk6IExvZ2luU3RhdGUgfCBudWxsIHtcbiAgICBpZiAodGhpcy5jYWNoZS5tb2RlID09PSAnYXN5bmMnKSB7XG4gICAgICAvLyBhc3luYyBzdG9yYWdl55qE5bmz5Y+w6LCD55So5q2kQVBJ5o+Q56S6XG4gICAgICBwcmludFdhcm4oXG4gICAgICAgIEVSUk9SUy5JTlZBTElEX09QRVJBVElPTixcbiAgICAgICAgJ2N1cnJlbnQgcGxhdGZvcm1cXCdzIHN0b3JhZ2UgaXMgYXN5bmNocm9ub3VzLCBwbGVhc2UgdXNlIGdldExvZ2luU3RhdGUgaW5zdGVhZCcsXG4gICAgICApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvYXV0aExvZ2luU3RhdGUgPSB0aGlzLm9hdXRoSW5zdGFuY2U/LmF1dGhBcGkuaGFzTG9naW5TdGF0ZVN5bmMoKVxuICAgIGlmIChvYXV0aExvZ2luU3RhdGUpIHtcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBuZXcgTG9naW5TdGF0ZSh7XG4gICAgICAgIGVudklkOiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgICBvYXV0aEluc3RhbmNlOiB0aGlzLm9hdXRoSW5zdGFuY2UsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGxvZ2luU3RhdGVcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bmnKzlnLDnmbvlvZXmgIEt5byC5q2lXG4gICAqIOatpEFQSeS4uuWFvOWuueW8guatpXN0b3JhZ2XnmoTlubPlj7BcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bmnKzlnLDnmbvlvZXmgIHlpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmdldExvZ2luU3RhdGUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldExvZ2luU3RhdGUoKSB7XG4gICAgbGV0IG9hdXRoTG9naW5TdGF0ZSA9IG51bGxcblxuICAgIHRyeSB7XG4gICAgICBvYXV0aExvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRMb2dpblN0YXRlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBpZiAob2F1dGhMb2dpblN0YXRlKSB7XG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gbmV3IExvZ2luU3RhdGUoe1xuICAgICAgICBlbnZJZDogdGhpcy5jb25maWcuZW52LFxuICAgICAgICBjYWNoZTogdGhpcy5jYWNoZSxcbiAgICAgICAgb2F1dGhJbnN0YW5jZTogdGhpcy5vYXV0aEluc3RhbmNlLFxuICAgICAgfSlcbiAgICAgIHJldHVybiBsb2dpblN0YXRlXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCDkvb/nlKggZ2V0Q3VycmVudFVzZXIg5Luj5pu/77yM5Zug5Li65LiObm9kZS1zZGvmlrnms5XlkI3lhrLnqoFcbiAgICogQHJldHVybnNcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfojrflj5bnlKjmiLfkv6Hmga/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDmmK/lkKblt7LnmbvlvZUnLFxuICAgICAgJyAgMiAtIOiwg+eUqCBhdXRoKCkuZ2V0VXNlckluZm8oKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldFVzZXJJbmZvKCk6IFByb21pc2U8KGF1dGhNb2RlbHMuVXNlckluZm8gJiBQYXJ0aWFsPFVzZXI+KSB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdXJyZW50VXNlcigpXG4gIH1cblxuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W5b6u5pCt5o+S5Lu255So5oi35L+h5oGv5aSx6LSlJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g5piv5ZCm5bey55m75b2VJyxcbiAgICAgICcgIDIgLSDosIPnlKggYXV0aCgpLmdldFdlZGFVc2VySW5mbygpIOeahOivreazleaIluWPguaVsOaYr+WQpuato+ehricsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgZ2V0V2VkYVVzZXJJbmZvKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFdlZGFVc2VySW5mbygpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlVXNlckJhc2ljSW5mbyhwYXJhbXM6IGF1dGhNb2RlbHMuTW9kaWZ5VXNlckJhc2ljSW5mb1JlcXVlc3QpIHtcbiAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKClcbiAgICBpZiAobG9naW5TdGF0ZSkge1xuICAgICAgYXdhaXQgKGxvZ2luU3RhdGUudXNlciBhcyBVc2VyKS51cGRhdGVVc2VyQmFzaWNJbmZvKHBhcmFtcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cblxuICAvKipcbiAgICogZ2V0QXV0aEhlYWRlciDlhbzlrrnlpITnkIZcbiAgICog6L+U5Zue56m65a+56LGhXG4gICAqL1xuICBwdWJsaWMgZ2V0QXV0aEhlYWRlcigpOiB7fSB7XG4gICAgY29uc29sZS5lcnJvcignQXV0aC5nZXRBdXRoSGVhZGVyIEFQSSDlt7Llup/lvIMnKVxuICAgIHJldHVybiB7fVxuICB9XG5cbiAgLyoqXG4gICAqIOS4uuW3suaciei0puaIt+e7keesrOS4ieaWuei0puaIt1xuICAgKiBAcGFyYW0ge2F1dGhNb2RlbHMuQmluZFdpdGhQcm92aWRlclJlcXVlc3R9IHBhcmFtc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICogQG1lbWJlcm9mIEF1dGhcbiAgICovXG4gIEBjYXRjaEVycm9yc0RlY29yYXRvcih7XG4gICAgdGl0bGU6ICfnu5HlrprnrKzkuInmlrnnmbvlvZXmlrnlvI/lpLHotKUnLFxuICAgIG1lc3NhZ2VzOiBbXG4gICAgICAn6K+356Gu6K6k5Lul5LiL5ZCE6aG577yaJyxcbiAgICAgICcgIDEgLSDosIPnlKggYXV0aCgpLmJpbmRXaXRoUHJvdmlkZXIoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgJyAgMiAtIOatpOi0puaIt+aYr+WQpuW3sue7j+e7keWumuatpOesrOS4ieaWuScsXG4gICAgICBg5aaC5p6c6Zeu6aKY5L6d54S25a2Y5Zyo77yM5bu66K6u5Yiw5a6Y5pa56Zeu562U56S+5Yy65o+Q6Zeu5oiW5a+75om+5biu5Yqp77yaJHtDT01NVU5JVFlfU0lURV9VUkx9YCxcbiAgICBdLFxuICB9KVxuICBwdWJsaWMgYXN5bmMgYmluZFdpdGhQcm92aWRlcihwYXJhbXM6IGF1dGhNb2RlbHMuQmluZFdpdGhQcm92aWRlclJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuYmluZFdpdGhQcm92aWRlcihwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog5p+l6K+i55So5oi3XG4gICAqIEBwYXJhbSB7YXV0aE1vZGVscy5RdWVyeVVzZXJQcm9maWxlUmVxdWVzdH0gYXBwZW5kZWRfcGFyYW1zXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGF1dGhNb2RlbHMuVXNlclByb2ZpbGU+fVxuICAgKiBAbWVtYmVyb2YgQXV0aFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHF1ZXJ5VXNlcihxdWVyeU9iajogYXV0aE1vZGVscy5RdWVyeVVzZXJQcm9maWxlUmVxdWVzdCk6IFByb21pc2U8YXV0aE1vZGVscy5RdWVyeVVzZXJQcm9maWxlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucXVlcnlVc2VyUHJvZmlsZShxdWVyeU9iailcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBY2Nlc3NUb2tlbigpIHtcbiAgICBjb25zdCBvYXV0aEFjY2Vzc1Rva2VuUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5nZXRBY2Nlc3NUb2tlbigpXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY2Vzc1Rva2VuOiBvYXV0aEFjY2Vzc1Rva2VuUmVzLFxuICAgICAgZW52OiB0aGlzLmNvbmZpZy5lbnYsXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdyYW50UHJvdmlkZXJUb2tlbihwYXJhbXM6IGF1dGhNb2RlbHMuR3JhbnRQcm92aWRlclRva2VuUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuR3JhbnRQcm92aWRlclRva2VuUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ3JhbnRQcm92aWRlclRva2VuKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwYXRjaFByb3ZpZGVyVG9rZW4ocGFyYW1zOiBhdXRoTW9kZWxzLlBhdGNoUHJvdmlkZXJUb2tlblJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLlBhdGNoUHJvdmlkZXJUb2tlblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnBhdGNoUHJvdmlkZXJUb2tlbihwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2lnbkluV2l0aFByb3ZpZGVyKHBhcmFtczogYXV0aE1vZGVscy5TaWduSW5XaXRoUHJvdmlkZXJSZXF1ZXN0KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoV2VjaGF0KHBhcmFtczogYW55ID0ge30pIHtcbiAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoV2VjaGF0KHBhcmFtcylcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVMb2dpblN0YXRlKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBncmFudFRva2VuKHBhcmFtczogYXV0aE1vZGVscy5HcmFudFRva2VuUmVxdWVzdCk6IFByb21pc2U8TG9naW5TdGF0ZT4ge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50VG9rZW4ocGFyYW1zKVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdlblByb3ZpZGVyUmVkaXJlY3RVcmkocGFyYW1zOiBhdXRoTW9kZWxzLkdlblByb3ZpZGVyUmVkaXJlY3RVcmlSZXF1ZXN0LCk6IFByb21pc2U8YXV0aE1vZGVscy5HZW5Qcm92aWRlclJlZGlyZWN0VXJpUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2VuUHJvdmlkZXJSZWRpcmVjdFVyaShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVzZXRQYXNzd29yZChwYXJhbXM6IGF1dGhNb2RlbHMuUmVzZXRQYXNzd29yZFJlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucmVzZXRQYXNzd29yZChwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGV2aWNlQXV0aG9yaXplKHBhcmFtczogYXV0aE1vZGVscy5EZXZpY2VBdXRob3JpemVSZXF1ZXN0KTogUHJvbWlzZTxhdXRoTW9kZWxzLkRldmljZUF1dGhvcml6ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmRldmljZUF1dGhvcml6ZShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3VkbyhwYXJhbXM6IGF1dGhNb2RlbHMuU3Vkb1JlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuU3Vkb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnN1ZG8ocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZU1lKHBhcmFtczogYXV0aE1vZGVscy5XaXRoU3Vkb1JlcXVlc3QpOiBQcm9taXNlPGF1dGhNb2RlbHMuVXNlclByb2ZpbGU+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZGVsZXRlTWUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFByb3ZpZGVycygpOiBQcm9taXNlPGF1dGhNb2RlbHMuUHJvdmlkZXJzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0UHJvdmlkZXJzKClcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2dpblNjb3BlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmxvZ2luU2NvcGUoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvZ2luR3JvdXBzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkubG9naW5Hcm91cHMoKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIG9uTG9naW5TdGF0ZUNoYW5nZWQoY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XG4gICAgdGhpcy5jb25maWcuZXZlbnRCdXM/Lm9uKEVWRU5UUy5MT0dJTl9TVEFURV9DSEFOR0VELCBhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICAvLyBnZXRMb2dpblN0YXRl5Lya6YeN5aSN6Kem5Y+RZ2V0Q3JlZGVudGlhbHPvvIzlr7zoh7Tmrbvlvqrnjq/vvIzmiYDku6VnZXRDcmVkZW50aWFsc+WHuumUmeS4jeWGjeWHuuWPkWdldExvZ2luU3RhdGVcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBwYXJhbXM/LmRhdGE/LmV2ZW50VHlwZSAhPT0gTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLkNSRURFTlRJQUxTX0VSUk9SID8gYXdhaXQgdGhpcy5nZXRMb2dpblN0YXRlKCkgOiB7fVxuICAgICAgY2FsbGJhY2suY2FsbCh0aGlzLCB7IC4uLnBhcmFtcywgLi4ubG9naW5TdGF0ZSB9KVxuICAgIH0pXG4gICAgLy8g56uL5Yi75omn6KGM5LiA5qyh5Zue6LCDXG4gICAgY29uc3QgbG9naW5TdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0TG9naW5TdGF0ZSgpXG4gICAgY2FsbGJhY2suY2FsbCh0aGlzLCBsb2dpblN0YXRlKVxuICB9XG5cbiAgLyoqXG4gICAqIOW8uuWItuWIt+aWsHRva2VuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBhc3luYyByZWZyZXNoVG9rZW5Gb3JjZShwYXJhbXM6IHsgdmVyc2lvbj86IHN0cmluZyB9KTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5yZWZyZXNoVG9rZW5Gb3JjZShwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICog6I635Y+W6Lqr5Lu95L+h5oGvXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q3JlZGVudGlhbHMoKTogUHJvbWlzZTxDcmVkZW50aWFscz4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRDcmVkZW50aWFscygpXG4gIH1cbiAgLyoqXG4gICAqIOWGmeWFpei6q+S7veS/oeaBr1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscykge1xuICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMpXG4gIH1cblxuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIHRpdGxlOiAn6I635Y+W6Lqr5Lu95rqQ57G75Z6LJyxcbiAgICBtZXNzYWdlczogW1xuICAgICAgJ+ivt+ehruiupOS7peS4i+WQhOmhue+8micsXG4gICAgICAnICAxIC0g6LCD55SoIGF1dGgoKS5nZXRQcm92aWRlclN1YlR5cGUoKSDnmoTor63ms5XmiJblj4LmlbDmmK/lkKbmraPnoa4nLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGdldFByb3ZpZGVyU3ViVHlwZSgpOiBQcm9taXNlPGF1dGhNb2RlbHMuUHJvdmlkZXJTdWJUeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFByb3ZpZGVyU3ViVHlwZSgpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlQ2FwdGNoYURhdGEocGFyYW1zOiB7IHN0YXRlOiBzdHJpbmc7IHJlZGlyZWN0X3VyaT86IHN0cmluZyB9KSB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmNyZWF0ZUNhcHRjaGFEYXRhKHBhcmFtcylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB2ZXJpZnlDYXB0Y2hhRGF0YShwYXJhbXM6IHsgdG9rZW46IHN0cmluZzsga2V5OiBzdHJpbmcgfSkge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS52ZXJpZnlDYXB0Y2hhRGF0YShwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWluaVByb2dyYW1RckNvZGUocGFyYW1zOiBhdXRoTW9kZWxzLkdldE1pbmlQcm9ncmFtUXJDb2RlUmVxdWVzdCwpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0TWluaVByb2dyYW1RckNvZGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRNaW5pUHJvZ3JhbUNvZGUocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzKHBhcmFtczogYXV0aE1vZGVscy5HZXRNaW5pUHJvZ3JhbVFyQ29kZVN0YXR1c1JlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLkdldE1pbmlQcm9ncmFtUXJDb2RlU3RhdHVzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuZ2V0TWluaVByb2dyYW1RckNvZGVTdGF0dXMocGFyYW1zKVxuICB9XG5cbiAgcHVibGljIGFzeW5jIG1vZGlmeVBhc3N3b3JkKHBhcmFtczogYXV0aE1vZGVscy5Nb2RpZnlVc2VyQmFzaWNJbmZvUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5tb2RpZnlQYXNzd29yZChwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbW9kaWZ5UGFzc3dvcmRXaXRob3V0TG9naW4ocGFyYW1zOiBhdXRoTW9kZWxzLk1vZGlmeVBhc3N3b3JkV2l0aG91dExvZ2luUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5tb2RpZnlQYXNzd29yZFdpdGhvdXRMb2dpbihwYXJhbXMpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VXNlckJlaGF2aW9yTG9nKHBhcmFtczogYXV0aE1vZGVscy5HZXRVc2VyQmVoYXZpb3JMb2cpOiBQcm9taXNlPGF1dGhNb2RlbHMuR2V0VXNlckJlaGF2aW9yTG9nUmVzPiB7XG4gICAgcmV0dXJuIHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFVzZXJCZWhhdmlvckxvZyhwYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICogc21zL2VtYWlsIOmqjOivgeeggeeZu+W9lS/ms6jlhozvvIzpgLvovpHkuIDoh7TmlLbmlZtcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzaWduSW5XaXRoVXNlcm5hbWUoe1xuICAgIHZlcmlmaWNhdGlvbkluZm8gPSB7IHZlcmlmaWNhdGlvbl9pZDogJycsIGlzX3VzZXI6IGZhbHNlIH0sXG4gICAgdmVyaWZpY2F0aW9uQ29kZSA9ICcnLFxuICAgIHVzZXJuYW1lOiByYXdVc2VybmFtZSA9ICcnLFxuICAgIGJpbmRJbmZvID0gdW5kZWZpbmVkLFxuICAgIGxvZ2luVHlwZSA9ICcnLFxuICB9OiB7XG4gICAgdmVyaWZpY2F0aW9uSW5mbz86IGF1dGhNb2RlbHMuR2V0VmVyaWZpY2F0aW9uUmVzcG9uc2VcbiAgICB2ZXJpZmljYXRpb25Db2RlPzogc3RyaW5nXG4gICAgdXNlcm5hbWU/OiBzdHJpbmdcbiAgICBiaW5kSW5mbz86IGFueVxuICAgIGxvZ2luVHlwZT86IHN0cmluZ1xuICB9KTogUHJvbWlzZTxMb2dpblN0YXRlPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIDEuIOmqjOivgemqjOivgeeggVxuICAgICAgY29uc3QgdmVyaWZ5UmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkudmVyaWZ5KHtcbiAgICAgICAgdmVyaWZpY2F0aW9uX2lkOiB2ZXJpZmljYXRpb25JbmZvLnZlcmlmaWNhdGlvbl9pZCxcbiAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IHZlcmlmaWNhdGlvbkNvZGUsXG4gICAgICB9KVxuXG4gICAgICBpZiAoKHZlcmlmeVJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHRocm93IHZlcmlmeVJlc1xuICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgICBjb25zdCB7IHZlcmlmaWNhdGlvbl90b2tlbiB9ID0gdmVyaWZ5UmVzXG5cbiAgICAgIC8vIOaJi+acuueZu+W9leWPguaVsFxuICAgICAgbGV0IHVzZXJuYW1lID0gL15cXCtcXGR7MSwzfVxccysvLnRlc3QocmF3VXNlcm5hbWUpID8gcmF3VXNlcm5hbWUgOiBgKzg2ICR7cmF3VXNlcm5hbWV9YFxuICAgICAgbGV0IHNpZ25VcFBhcmFtOiBhbnkgPSB7IHBob25lX251bWJlcjogdXNlcm5hbWUgfVxuXG4gICAgICAvLyDpgq7nrrHnmbvlvZXlj4LmlbBcbiAgICAgIGlmIChsb2dpblR5cGUgPT09ICdlbWFpbCcpIHtcbiAgICAgICAgdXNlcm5hbWUgPSByYXdVc2VybmFtZVxuICAgICAgICBzaWduVXBQYXJhbSA9IHsgZW1haWw6IHVzZXJuYW1lIH1cbiAgICAgIH1cblxuICAgICAgLy8gMi4g5qC55o2u5piv5ZCm5bey57uP5piv55So5oi377yM5YiG5Yir6LWw55m75b2V5oiW5rOo5YaM6YC76L6RXG4gICAgICBpZiAodmVyaWZpY2F0aW9uSW5mby5pc191c2VyKSB7XG4gICAgICAgIC8vIOengeacieWMlueOr+Wig+aIluiAheiHquWumuS5ieW6lOeUqOi1sHYx54mI5pys55qE6ICB6YC76L6RXG4gICAgICAgIGNvbnN0IHNpZ25JblJlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25Jbih7XG4gICAgICAgICAgdXNlcm5hbWUsXG4gICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICgoc2lnbkluUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICB0aHJvdyBzaWduSW5SZXNcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiaW5kSW5mbykge1xuICAgICAgICAgIGNvbnN0IGJpbmRSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5iaW5kV2l0aFByb3ZpZGVyKHtcbiAgICAgICAgICAgIHByb3ZpZGVyX3Rva2VuOiAoYmluZEluZm8gYXMgYW55KT8ucHJvdmlkZXJUb2tlbixcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgaWYgKChiaW5kUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgICAgIHRocm93IGJpbmRSZXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOiHquWumuS5ieW6lOeUqOi1sHNpZ25VcOmAu+i+kVxuICAgICAgICBjb25zdCBzaWduVXBSZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduVXAoe1xuICAgICAgICAgIC4uLnNpZ25VcFBhcmFtLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbixcbiAgICAgICAgICBwcm92aWRlcl90b2tlbjogKGJpbmRJbmZvIGFzIGFueSk/LnByb3ZpZGVySWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKChzaWduVXBSZXMgYXMgYW55KT8uZXJyb3JfY29kZSkge1xuICAgICAgICAgIHRocm93IHNpZ25VcFJlc1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvclxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUxvZ2luU3RhdGUoXG4gICAgcGFyYW1zPzogeyB2ZXJzaW9uPzogc3RyaW5nOyBxdWVyeT86IGFueSB9LFxuICAgIG9wdGlvbnM/OiB7IGFzeW5jUmVmcmVzaFVzZXI/OiBib29sZWFuOyB1c2VySW5mbz86IGFueSB9LFxuICApOiBQcm9taXNlPExvZ2luU3RhdGU+IHtcbiAgICBjb25zdCBsb2dpblN0YXRlID0gbmV3IExvZ2luU3RhdGUoe1xuICAgICAgZW52SWQ6IHRoaXMuY29uZmlnLmVudixcbiAgICAgIGNhY2hlOiB0aGlzLmNhY2hlLFxuICAgICAgb2F1dGhJbnN0YW5jZTogdGhpcy5vYXV0aEluc3RhbmNlLFxuICAgIH0pXG5cbiAgICBhd2FpdCBsb2dpblN0YXRlLmNoZWNrTG9jYWxTdGF0ZUFzeW5jKClcblxuICAgIGlmIChvcHRpb25zPy51c2VySW5mbykge1xuICAgICAgbG9naW5TdGF0ZS51c2VyLnNldExvY2FsVXNlckluZm8ob3B0aW9ucy51c2VySW5mbylcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnM/LmFzeW5jUmVmcmVzaFVzZXIpIHtcbiAgICAgICAgbG9naW5TdGF0ZS51c2VyLnJlZnJlc2gocGFyYW1zKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgbG9naW5TdGF0ZS51c2VyLnJlZnJlc2gocGFyYW1zKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5MT0dJTl9TVEFURV9DSEFOR0VELCB7IGV2ZW50VHlwZTogTE9HSU5fU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05fSU4gfSlcblxuICAgIHRoaXMuY29uZmlnLmV2ZW50QnVzPy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnQ6IEFVVEhfU1RBVEVfQ0hBTkdFRF9UWVBFLlNJR05FRF9JTiB9KVxuICAgIHJldHVybiBsb2dpblN0YXRlXG4gIH1cblxuICBhc3luYyBzZXRBY2Nlc3NLZXkoKSB7XG4gICAgbGV0IGFjY2Vzc1Rva2VuID0gJydcbiAgICBsZXQgc2NvcGUgPSAnJ1xuICAgIGlmICh0aGlzLmNvbmZpZy5hY2Nlc3NLZXkpIHtcbiAgICAgIGFjY2Vzc1Rva2VuID0gdGhpcy5jb25maWcuYWNjZXNzS2V5XG4gICAgICBzY29wZSA9ICdhY2Nlc3NLZXknXG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRJZCAmJiB0aGlzLmNvbmZpZy5hdXRoPy5zZWNyZXRLZXkpIHtcbiAgICAgIGFjY2Vzc1Rva2VuID0gJydcbiAgICAgIHNjb3BlID0gREVGQVVMVF9OT0RFX0FDQ0VTU19TQ09QRVxuICAgIH1cblxuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLm9hdXRoSW5zdGFuY2Uub2F1dGgyY2xpZW50LnNldEFjY2Vzc0tleUNyZWRlbnRpYWxzKHtcbiAgICAgICAgYWNjZXNzX3Rva2VuOiBhY2Nlc3NUb2tlbixcbiAgICAgICAgdG9rZW5fdHlwZTogJ0JlYXJlcicsXG4gICAgICAgIHNjb3BlLFxuICAgICAgICBleHBpcmVzX2F0OiBuZXcgRGF0ZSgrbmV3IERhdGUoKSArICtuZXcgRGF0ZSgpKSxcbiAgICAgICAgZXhwaXJlc19pbjogK25ldyBEYXRlKCkgKyArbmV3IERhdGUoKSxcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignYWNjZXNzS2V5IGVycm9yOiAnLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09IG5ldyBhdXRoIGFwaSBtZXRob2RzIG1lcmdlZCBiZWxvdyA9PT09PT09PT09XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW5hbm9ueW1vdXNseVxuICAgKiBTaWduIGluIGEgdXNlciBhbm9ueW1vdXNseS5cbiAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgYXV0aC5zaWduSW5Bbm9ueW1vdXNseSgpO1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zICBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25JbkFub255bW91c2x5KHBhcmFtczogU2lnbkluQW5vbnltb3VzbHlSZXEpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5Bbm9ueW1vdXNseShwYXJhbXMpXG4gICAgICBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICAvLyBsb2dpblN0YXRl6L+U5Zue5piv5Li65LqG5YW85a65djLniYjmnKxcbiAgICAgIHJldHVybiB7IC4uLihsb2dpblN0YXRlIGFzIGFueSksIGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWdudXBcbiAgICogU2lnbiB1cCBhIG5ldyB1c2VyIHdpdGggZW1haWwgb3IgcGhvbmUgdXNpbmcgYSBvbmUtdGltZSBwYXNzd29yZCAoT1RQKS4gSWYgdGhlIGFjY291bnQgbm90IGV4aXN0LCBhIG5ldyBhY2NvdW50IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25VcFJlcz5cbiAgICovXG4gIGFzeW5jIHNpZ25VcChwYXJhbXM6IGF1dGhNb2RlbHMuU2lnblVwUmVxdWVzdCAmIHsgcGhvbmU/OiBzdHJpbmcgfSk6IFByb21pc2U8U2lnblVwUmVzPiB7XG4gICAgaWYgKHBhcmFtcy5waG9uZV9udW1iZXIgfHwgcGFyYW1zLnZlcmlmaWNhdGlvbl9jb2RlIHx8IHBhcmFtcy52ZXJpZmljYXRpb25fdG9rZW4gfHwgcGFyYW1zLnByb3ZpZGVyX3Rva2VuKSB7XG4gICAgICBwYXJhbXMucGhvbmVfbnVtYmVyID0gdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmVfbnVtYmVyKVxuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnblVwKHBhcmFtcylcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKSBhcyBhbnlcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mmVtYWls5oiWcGhvbmXlv4XloavlhbbkuIBcbiAgICAgIHRoaXMudmFsaWRhdGVBdExlYXN0T25lKHBhcmFtcywgW1snZW1haWwnXSwgWydwaG9uZSddXSwgJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlcicpXG5cbiAgICAgIC8vIOesrOS4gOatpe+8muWPkemAgemqjOivgeeggeW5tuWtmOWCqCB2ZXJpZmljYXRpb25JbmZvXG4gICAgICBjb25zdCB2ZXJpZmljYXRpb25JbmZvID0gYXdhaXQgdGhpcy5nZXRWZXJpZmljYXRpb24ocGFyYW1zLmVtYWlsID8geyBlbWFpbDogcGFyYW1zLmVtYWlsIH0gOiB7IHBob25lX251bWJlcjogdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpIH0sKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLy8g56ys5LqM5q2l77ya562J5b6F55So5oi36L6T5YWl6aqM6K+B56CB77yI6YCa6L+HIFByb21pc2Ug5YyF6KOF55So5oi36L6T5YWl5LqL5Lu277yJXG4gICAgICAgICAgdmVyaWZ5T3RwOiBhc3luYyAoeyB0b2tlbiwgbWVzc2FnZUlkID0gdmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25faWQgfSk6IFByb21pc2U8U2lnbkluUmVzPiA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyDnrKzkuInmraXvvJrlvoXnlKjmiLfovpPlhaXlrozpqozor4HnoIHkuYvlkI7vvIzpqozor4Hnn63kv6Hpqozor4HnoIFcbiAgICAgICAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uVG9rZW5SZXMgPSBhd2FpdCB0aGlzLnZlcmlmeSh7XG4gICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2lkOiBtZXNzYWdlSWQgfHwgdmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25faWQsXG4gICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IHRva2VuLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIC8vIOesrOWbm+atpe+8muazqOWGjOW5tueZu+W9leaIluebtOaOpeeZu+W9lVxuICAgICAgICAgICAgICAvLyDlpoLmnpznlKjmiLflt7Lnu4/lrZjlnKjvvIznm7TmjqXnmbvlvZVcbiAgICAgICAgICAgICAgaWYgKHZlcmlmaWNhdGlvbkluZm8uaXNfdXNlcikge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2lnbkluKHtcbiAgICAgICAgICAgICAgICAgIHVzZXJuYW1lOiBwYXJhbXMuZW1haWwgfHwgdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpLFxuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuOiB2ZXJpZmljYXRpb25Ub2tlblJlcy52ZXJpZmljYXRpb25fdG9rZW4sXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpznlKjmiLfkuI3lrZjlnKjvvIzms6jlhoznlKjmiLdcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwYXJhbXMpKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhLmVtYWlsXG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGEucGhvbmVcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25VcCh7XG4gICAgICAgICAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgICAgICAgICAgLi4uKHBhcmFtcy5lbWFpbCA/IHsgZW1haWw6IHBhcmFtcy5lbWFpbCB9IDogeyBwaG9uZV9udW1iZXI6IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSB9KSxcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl90b2tlbjogdmVyaWZpY2F0aW9uVG9rZW5SZXMudmVyaWZpY2F0aW9uX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IHRva2VuLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWdub3V0XG4gICAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGF1dGguc2lnbk91dCgpO1xuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBhc3luYyBzaWduT3V0KHBhcmFtcz86IGF1dGhNb2RlbHMuU2lnbm91dFJlcXVlc3QsKTogUHJvbWlzZTxhdXRoTW9kZWxzLlNpZ25vdXRSZXNwb25zZSAmIHsgZGF0YTogT2JqZWN0OyBlcnJvcjogQXV0aEVycm9yIH0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB1c2VySW5mb0tleSB9ID0gdGhpcy5jYWNoZS5rZXlzXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduT3V0KHBhcmFtcylcbiAgICAgIGF3YWl0IHRoaXMuY2FjaGUucmVtb3ZlU3RvcmVBc3luYyh1c2VySW5mb0tleSlcbiAgICAgIHRoaXMuc2V0QWNjZXNzS2V5KClcblxuICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkxPR0lOX1NUQVRFX0NIQU5HRUQsIHsgZXZlbnRUeXBlOiBMT0dJTl9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTl9PVVQgfSlcblxuICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX09VVCB9KVxuXG4gICAgICAvLyByZXPov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4ucmVzLCBkYXRhOiB7fSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLW9uYXV0aHN0YXRlY2hhbmdlXG4gICAqIFJlY2VpdmUgYSBub3RpZmljYXRpb24gZXZlcnkgdGltZSBhbiBhdXRoIGV2ZW50IGhhcHBlbnMuXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyBQcm9taXNlPHsgZGF0YTogeyBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB9LCBlcnJvcjogRXJyb3IgfCBudWxsIH0+XG4gICAqL1xuICBvbkF1dGhTdGF0ZUNoYW5nZShjYWxsYmFjazogT25BdXRoU3RhdGVDaGFuZ2VDYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lclNldFVwKSB7XG4gICAgICB0aGlzLnNldHVwTGlzdGVuZXJzKClcbiAgICAgIHRoaXMuaGFzTGlzdGVuZXJTZXRVcCA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBpZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpXG5cbiAgICBpZiAoIXRoaXMubGlzdGVuZXJzLmhhcyhpZCkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJzLnNldChpZCwgbmV3IFNldCgpKVxuICAgIH1cblxuICAgIHRoaXMubGlzdGVuZXJzLmdldChpZCkhLmFkZChjYWxsYmFjaylcblxuICAgIC8vIOi/lOWbniBTdWJzY3JpcHRpb24g5a+56LGhXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0ge1xuICAgICAgaWQsXG4gICAgICBjYWxsYmFjayxcbiAgICAgIHVuc3Vic2NyaWJlOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXMubGlzdGVuZXJzLmdldChpZClcbiAgICAgICAgaWYgKGNhbGxiYWNrcykge1xuICAgICAgICAgIGNhbGxiYWNrcy5kZWxldGUoY2FsbGJhY2spXG4gICAgICAgICAgaWYgKGNhbGxiYWNrcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVycy5kZWxldGUoaWQpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiB7IHN1YnNjcmlwdGlvbiB9LFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbmlud2l0aHBhc3N3b3JkXG4gICAqIExvZyBpbiBhbiBleGlzdGluZyB1c2VyIHdpdGggYW4gZW1haWwgYW5kIHBhc3N3b3JkIG9yIHBob25lIGFuZCBwYXNzd29yZCBvciB1c2VybmFtZSBhbmQgcGFzc3dvcmQuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoUGFzc3dvcmQocGFyYW1zOiBTaWduSW5XaXRoUGFzc3dvcmRSZXEpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJp1c2VybmFtZS9lbWFpbC9waG9uZeS4iemAieS4gO+8jHBhc3N3b3Jk5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBbWyd1c2VybmFtZSddLCBbJ2VtYWlsJ10sIFsncGhvbmUnXV0sXG4gICAgICAgICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciB1c2VybmFtZSwgZW1haWwsIG9yIHBob25lJyxcbiAgICAgIClcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHBhc3N3b3JkOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUGFzc3dvcmQgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLnNpZ25Jbih7XG4gICAgICAgIHVzZXJuYW1lOiBwYXJhbXMudXNlcm5hbWUgfHwgcGFyYW1zLmVtYWlsIHx8IHRoaXMuZm9ybWF0UGhvbmUocGFyYW1zLnBob25lKSxcbiAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy5wYXNzd29yZCxcbiAgICAgICAgLi4uKHBhcmFtcy5pc19lbmNyeXB0ID8geyBpc0VuY3J5cHQ6IHRydWUsIHZlcnNpb246ICd2MicgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW53aXRoaWR0b2tlblxuICAgKiDnrKzkuInmlrnlubPlj7DnmbvlvZXjgILlpoLmnpznlKjmiLfkuI3lrZjlnKjvvIzkvJrmoLnmja7kupHlvIDlj5HlubPlj7At55m75b2V5pa55byP5Lit5a+55bqU6Lqr5Lu95rqQ55qE55m75b2V5qih5byP6YWN572u77yM5Yik5pat5piv5ZCm6Ieq5Yqo5rOo5YaMXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoSWRUb2tlbihwYXJhbXM6IFNpZ25JbldpdGhJZFRva2VuUmVxKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yadG9rZW7lv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHRva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnVG9rZW4gaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBhd2FpdCB0aGlzLnNpZ25JbldpdGhQcm92aWRlcih7XG4gICAgICAgIHByb3ZpZGVyX3Rva2VuOiBwYXJhbXMudG9rZW4sXG4gICAgICB9KVxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtc2lnbmlud2l0aG90cFxuICAgKiBMb2cgaW4gYSB1c2VyIHVzaW5nIGEgb25lLXRpbWUgcGFzc3dvcmQgKE9UUCkuXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5XaXRoT3RwUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aE90cChwYXJhbXM6IFNpZ25JbldpdGhPdHBSZXEpOiBQcm9taXNlPFNpZ25JbldpdGhPdHBSZXM+IHtcbiAgICBpZiAocGFyYW1zLm9wdGlvbnM/LnNob3VsZENyZWF0ZVVzZXIgPT09IHVuZGVmaW5lZCB8fCAhIXBhcmFtcy5vcHRpb25zPy5zaG91bGRDcmVhdGVVc2VyKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaWduVXAoe1xuICAgICAgICBlbWFpbDogcGFyYW1zLmVtYWlsLFxuICAgICAgICBwaG9uZTogcGFyYW1zLnBob25lLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8g5Y+C5pWw5qCh6aqM77yaZW1haWzmiJZwaG9uZeW/heWhq+WFtuS4gFxuICAgICAgdGhpcy52YWxpZGF0ZUF0TGVhc3RPbmUocGFyYW1zLCBbWydlbWFpbCddLCBbJ3Bob25lJ11dLCAnWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgYW4gZW1haWwgb3IgcGhvbmUgbnVtYmVyJylcblxuICAgICAgLy8g56ys5LiA5q2l77ya5Y+R6YCB6aqM6K+B56CB5bm25a2Y5YKoIHZlcmlmaWNhdGlvbkluZm9cbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbkluZm8gPSBhd2FpdCB0aGlzLmdldFZlcmlmaWNhdGlvbihwYXJhbXMuZW1haWwgPyB7IGVtYWlsOiBwYXJhbXMuZW1haWwgfSA6IHsgcGhvbmVfbnVtYmVyOiB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfSwpXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICB1c2VyOiBudWxsLFxuICAgICAgICAgIHNlc3Npb246IG51bGwsXG4gICAgICAgICAgLy8g56ys5LqM5q2l77ya562J5b6F55So5oi36L6T5YWl6aqM6K+B56CB77yI6YCa6L+HIFByb21pc2Ug5YyF6KOF55So5oi36L6T5YWl5LqL5Lu277yJXG4gICAgICAgICAgdmVyaWZ5T3RwOiBhc3luYyAoeyB0b2tlbiwgbWVzc2FnZUlkID0gdmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25faWQgfSk6IFByb21pc2U8U2lnbkluUmVzPiA9PiB0aGlzLnZlcmlmeU90cCh7XG4gICAgICAgICAgICBlbWFpbDogcGFyYW1zLmVtYWlsLFxuICAgICAgICAgICAgcGhvbmU6IHBhcmFtcy5waG9uZSxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOagoemqjOesrOS4ieaWueW5s+WPsOaOiOadg+eZu+W9leWbnuiwg1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5T0F1dGgocGFyYW1zPzogVmVyaWZ5T0F1dGhSZXEpOiBQcm9taXNlPFZlcmlmeU9BdXRoUmVzPiB7XG4gICAgY29uc3QgZGF0YTogYW55ID0ge31cbiAgICB0cnkge1xuICAgICAgLy8g5Zue6LCD6IezIHByb3ZpZGVyX3JlZGlyZWN0X3VyaSDlnLDlnYDvvIh1cmwgcXVlcnnkuK3mkLrluKYg5o6I5p2DY29kZe+8jHN0YXRl562J5Y+C5pWw77yJ77yM5q2k5pe25qOA5p+lIHN0YXRlIOaYr+WQpuespuWQiOmihOacn++8iOWmgiDoh6rlt7Horr7nva7nmoQgd3hfb3BlbilcbiAgICAgIGNvbnN0IGNvZGUgPSBwYXJhbXM/LmNvZGUgfHwgdXRpbHMuZ2V0UXVlcnkoJ2NvZGUnKVxuICAgICAgY29uc3Qgc3RhdGUgPSBwYXJhbXM/LnN0YXRlIHx8IHV0aWxzLmdldFF1ZXJ5KCdzdGF0ZScpXG5cbiAgICAgIC8vIOWPguaVsOagoemqjO+8mmNvZGXlkoxzdGF0ZeW/heWhq1xuICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6ICdDb2RlIGlzIHJlcXVpcmVkJyB9KSB9XG4gICAgICB9XG5cbiAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ1N0YXRlIGlzIHJlcXVpcmVkJyB9KSB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IGdldEJyb3dzZXJTZXNzaW9uKHN0YXRlKVxuICAgICAgZGF0YS50eXBlID0gY2FjaGVEYXRhPy50eXBlXG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gcGFyYW1zPy5wcm92aWRlciB8fCBjYWNoZURhdGE/LnByb3ZpZGVyIHx8IHV0aWxzLmdldFF1ZXJ5KCdwcm92aWRlcicpXG5cbiAgICAgIGlmICghcHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiAnUHJvdmlkZXIgaXMgcmVxdWlyZWQnIH0pIH1cbiAgICAgIH1cblxuICAgICAgLy8gc3RhdGXnrKblkIjpooTmnJ/vvIzliJnojrflj5bor6XkuInmlrnlubPlj7B0b2tlblxuICAgICAgY29uc3QgeyBwcm92aWRlcl90b2tlbjogdG9rZW4gfSA9IGF3YWl0IHRoaXMuZ3JhbnRQcm92aWRlclRva2VuKHtcbiAgICAgICAgcHJvdmlkZXJfaWQ6IHByb3ZpZGVyLFxuICAgICAgICBwcm92aWRlcl9yZWRpcmVjdF91cmk6IGxvY2F0aW9uLm9yaWdpbiArIGxvY2F0aW9uLnBhdGhuYW1lLCAvLyDmjIflrprkuInmlrnlubPlj7Dot7Plm57nmoQgdXJsIOWcsOWdgFxuICAgICAgICBwcm92aWRlcl9jb2RlOiBjb2RlLCAvLyDnrKzkuInmlrnlubPlj7Dot7Povazlm57pobXpnaLml7bvvIx1cmwgcGFyYW0g5Lit5pC65bim55qEIGNvZGUg5Y+C5pWwXG4gICAgICB9KVxuXG4gICAgICBsZXQgcmVzOiBWZXJpZnlPQXV0aFJlc1xuXG4gICAgICBpZiAoY2FjaGVEYXRhLnR5cGUgPT09IE9BVVRIX1RZUEUuQklORF9JREVOVElUWSkge1xuICAgICAgICByZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS50b0JpbmRJZGVudGl0eSh7IHByb3ZpZGVyX3Rva2VuOiB0b2tlbiwgcHJvdmlkZXIsIGZpcmVFdmVudDogdHJ1ZSB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8g6YCa6L+HIHByb3ZpZGVyX3Rva2VuIOS7heeZu+W9leaIlueZu+W9leW5tuazqOWGjO+8iOS4juS6keW8gOWPkeW5s+WPsC3nmbvlvZXmlrnlvI8t6Lqr5Lu95rqQ55m75b2V5qih5byP6YWN572u5pyJ5YWz77yJXG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMuc2lnbkluV2l0aElkVG9rZW4oe1xuICAgICAgICAgIHRva2VuLFxuICAgICAgICB9KVxuICAgICAgICByZXMuZGF0YSA9IHsgLi4uZGF0YSwgLi4ucmVzLmRhdGEgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2NhbFNlYXJjaCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMobG9jYXRpb24/LnNlYXJjaClcbiAgICAgIGxvY2FsU2VhcmNoLmRlbGV0ZSgnY29kZScpXG4gICAgICBsb2NhbFNlYXJjaC5kZWxldGUoJ3N0YXRlJylcbiAgICAgIHJlcy5kYXRhLnJlZGlyZWN0VXJsID0gYWRkVXJsU2VhcmNoKFxuICAgICAgICBjYWNoZURhdGE/LnNlYXJjaCA9PT0gdW5kZWZpbmVkID8gYD8ke2xvY2FsU2VhcmNoLnRvU3RyaW5nKCl9YCA6IGNhY2hlRGF0YT8uc2VhcmNoLFxuICAgICAgICBjYWNoZURhdGE/Lmhhc2ggfHwgbG9jYXRpb24uaGFzaCxcbiAgICAgIClcbiAgICAgIHJlbW92ZUJyb3dzZXJTZXNzaW9uKHN0YXRlKVxuXG4gICAgICByZXR1cm4gcmVzXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1zaWduaW53aXRob2F1dGhcbiAgICog55Sf5oiQ56ys5LiJ5pa55bmz5Y+w5o6I5p2DIFVyaSDvvIjlpoLlvq7kv6Hkuoznu7TnoIHmiavnoIHmjojmnYPnvZHpobXvvIlcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25Jbk9BdXRoUmVzPlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aE9BdXRoKHBhcmFtczogU2lnbkluV2l0aE9BdXRoUmVxKTogUHJvbWlzZTxTaWduSW5PQXV0aFJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJpwcm92aWRlcuW/heWhq1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgcHJvdmlkZXI6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQcm92aWRlciBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGhyZWYgPSBwYXJhbXMub3B0aW9ucz8ucmVkaXJlY3RUbyB8fCBsb2NhdGlvbi5ocmVmXG5cbiAgICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyBVUkwoaHJlZilcblxuICAgICAgY29uc3QgcHJvdmlkZXJfcmVkaXJlY3RfdXJpID0gdXJsT2JqZWN0Lm9yaWdpbiArIHVybE9iamVjdC5wYXRobmFtZVxuXG4gICAgICBjb25zdCBzdGF0ZSA9IHBhcmFtcy5vcHRpb25zPy5zdGF0ZSB8fCBgcHJkLSR7cGFyYW1zLnByb3ZpZGVyfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpXG4gICAgICAgIC5zbGljZSgyKX1gXG5cbiAgICAgIGNvbnN0IHsgdXJpIH0gPSBhd2FpdCB0aGlzLmdlblByb3ZpZGVyUmVkaXJlY3RVcmkoe1xuICAgICAgICBwcm92aWRlcl9pZDogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBwcm92aWRlcl9yZWRpcmVjdF91cmksXG4gICAgICAgIHN0YXRlLFxuICAgICAgfSlcblxuICAgICAgLy8g5a+5IFVSTCDov5vooYzop6PnoIFcbiAgICAgIGNvbnN0IGRlY29kZWRVcmkgPSBkZWNvZGVVUklDb21wb25lbnQodXJpKVxuXG4gICAgICAvLyDlkIjlubbpop3lpJbnmoTmn6Xor6Llj4LmlbBcbiAgICAgIGxldCBmaW5hbFVyaSA9IGRlY29kZWRVcmlcblxuICAgICAgaWYgKHBhcmFtcy5vcHRpb25zPy5xdWVyeVBhcmFtcykge1xuICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGRlY29kZWRVcmkpXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHBhcmFtcy5vcHRpb25zLnF1ZXJ5UGFyYW1zKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChrZXksIHZhbHVlKVxuICAgICAgICB9KVxuICAgICAgICBmaW5hbFVyaSA9IHVybC50b1N0cmluZygpXG4gICAgICB9XG5cbiAgICAgIHNhdmVUb0Jyb3dzZXJTZXNzaW9uKHN0YXRlLCB7XG4gICAgICAgIHByb3ZpZGVyOiBwYXJhbXMucHJvdmlkZXIsXG4gICAgICAgIHNlYXJjaDogdXJsT2JqZWN0LnNlYXJjaCxcbiAgICAgICAgaGFzaDogdXJsT2JqZWN0Lmhhc2gsXG4gICAgICAgIHR5cGU6IHBhcmFtcy5vcHRpb25zPy50eXBlIHx8IE9BVVRIX1RZUEUuU0lHTl9JTixcbiAgICAgIH0pXG5cbiAgICAgIGlmIChpc0Jyb3dzZXIoKSAmJiAhcGFyYW1zLm9wdGlvbnM/LnNraXBCcm93c2VyUmVkaXJlY3QpIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihmaW5hbFVyaSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1cmw6IGZpbmFsVXJpLCBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWdldGNsYWltc1xuICBhc3luYyBnZXRDbGFpbXMoKTogUHJvbWlzZTxHZXRDbGFpbXNSZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBhY2Nlc3NUb2tlbiB9ID0gYXdhaXQgdGhpcy5nZXRBY2Nlc3NUb2tlbigpXG4gICAgICBjb25zdCBwYXJzZWRUb2tlbiA9IHdlQXBwSnd0RGVjb2RlQWxsKGFjY2Vzc1Rva2VuKVxuICAgICAgcmV0dXJuIHsgZGF0YTogcGFyc2VkVG9rZW4sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1yZXNldHBhc3N3b3JkZm9yZW1haWxcbiAgICog6YCa6L+HIGVtYWlsIOaIluaJi+acuuWPt+mHjee9ruWvhueggVxuICAgKiBAcGFyYW0gZW1haWxPclBob25lIOmCrueuseaIluaJi+acuuWPt1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFJlc2V0UGFzc3dvcmRGb3JFbWFpbFJlcz5cbiAgICovXG4gIGFzeW5jIHJlc2V0UGFzc3dvcmRGb3JFbWFpbChcbiAgICBlbWFpbE9yUGhvbmU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogeyByZWRpcmVjdFRvPzogc3RyaW5nIH0sXG4gICk6IFByb21pc2U8UmVzZXRQYXNzd29yZEZvckVtYWlsUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mmVtYWlsT3JQaG9uZeW/heWhq1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhcbiAgICAgICAgeyBlbWFpbE9yUGhvbmUgfSxcbiAgICAgICAge1xuICAgICAgICAgIGVtYWlsT3JQaG9uZTogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ0VtYWlsIG9yIHBob25lIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICBjb25zdCB7IHJlZGlyZWN0VG8gfSA9IG9wdGlvbnMgfHwge31cblxuICAgICAgLy8g5Yik5pat5piv6YKu566x6L+Y5piv5omL5py65Y+3XG4gICAgICBjb25zdCBpc0VtYWlsID0gZW1haWxPclBob25lLmluY2x1ZGVzKCdAJylcbiAgICAgIGxldCB2ZXJpZmljYXRpb25QYXJhbXM6IHsgZW1haWw/OiBzdHJpbmc7IHBob25lX251bWJlcj86IHN0cmluZyB9XG5cbiAgICAgIGlmIChpc0VtYWlsKSB7XG4gICAgICAgIHZlcmlmaWNhdGlvblBhcmFtcyA9IHsgZW1haWw6IGVtYWlsT3JQaG9uZSB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDmraPop4TljJbmiYvmnLrlj7dcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkUGhvbmUgPSB0aGlzLmZvcm1hdFBob25lKGVtYWlsT3JQaG9uZSlcbiAgICAgICAgdmVyaWZpY2F0aW9uUGFyYW1zID0geyBwaG9uZV9udW1iZXI6IGZvcm1hdHRlZFBob25lIH1cbiAgICAgIH1cblxuICAgICAgLy8g56ys5LiA5q2l77ya5Y+R6YCB6aqM6K+B56CB5bm25a2Y5YKoIHZlcmlmaWNhdGlvbkluZm9cbiAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbkluZm8gPSBhd2FpdCB0aGlzLmdldFZlcmlmaWNhdGlvbih2ZXJpZmljYXRpb25QYXJhbXMpXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAvLyDnrKzkuozmraXvvJrnrYnlvoXnlKjmiLfovpPlhaXpqozor4HnoIHvvIjpgJrov4cgUHJvbWlzZSDljIXoo4XnlKjmiLfovpPlhaXkuovku7bvvIlcbiAgICAgICAgICB1cGRhdGVVc2VyOiBhc3luYyAoYXR0cmlidXRlczogVXBkYXRlVXNlckF0dHJpYnV0ZXMpOiBQcm9taXNlPFNpZ25JblJlcz4gPT4ge1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhhdHRyaWJ1dGVzLCB7XG4gICAgICAgICAgICAgIG5vbmNlOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnTm9uY2UgaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgICAgICAgIHBhc3N3b3JkOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUGFzc3dvcmQgaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgLy8g56ys5LiJ5q2l77ya5b6F55So5oi36L6T5YWl5a6M6aqM6K+B56CB5LmL5ZCO77yM6aqM6K+B6aqM6K+B56CBXG4gICAgICAgICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvblRva2VuUmVzID0gYXdhaXQgdGhpcy52ZXJpZnkoe1xuICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbl9pZDogdmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25faWQsXG4gICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IGF0dHJpYnV0ZXMubm9uY2UsXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkucmVzZXRQYXNzd29yZCh7XG4gICAgICAgICAgICAgICAgZW1haWw6IGlzRW1haWwgPyBlbWFpbE9yUGhvbmUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcGhvbmVfbnVtYmVyOiAhaXNFbWFpbCA/IGVtYWlsT3JQaG9uZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBuZXdfcGFzc3dvcmQ6IGF0dHJpYnV0ZXMucGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuOiB2ZXJpZmljYXRpb25Ub2tlblJlcy52ZXJpZmljYXRpb25fdG9rZW4sXG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5QQVNTV09SRF9SRUNPVkVSWSxcbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnNpZ25JbldpdGhQYXNzd29yZCh7XG4gICAgICAgICAgICAgICAgZW1haWw6IGlzRW1haWwgPyBlbWFpbE9yUGhvbmUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcGhvbmU6ICFpc0VtYWlsID8gZW1haWxPclBob25lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHBhc3N3b3JkOiBhdHRyaWJ1dGVzLnBhc3N3b3JkLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGlmIChyZWRpcmVjdFRvICYmIGlzQnJvd3NlcigpKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihyZWRpcmVjdFRvKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDpgJrov4fml6flr4bnoIHph43nva7lr4bnoIFcbiAgICogQHBhcmFtIG5ld19wYXNzd29yZFxuICAgKiBAcGFyYW0gb2xkX3Bhc3N3b3JkXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBhc3luYyByZXNldFBhc3N3b3JkRm9yT2xkKHBhcmFtczogUmVzZXRQYXNzd29yZEZvck9sZFJlcSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS51cGRhdGVQYXNzd29yZEJ5T2xkKHtcbiAgICAgICAgb2xkX3Bhc3N3b3JkOiBwYXJhbXMub2xkX3Bhc3N3b3JkLFxuICAgICAgICBuZXdfcGFzc3dvcmQ6IHBhcmFtcy5uZXdfcGFzc3dvcmQsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC12ZXJpZnlvdHBcbiAgICogTG9nIGluIGEgdXNlciBnaXZlbiBhIFVzZXIgc3VwcGxpZWQgT1RQIGFuZCB2ZXJpZmljYXRpb25JZCByZWNlaXZlZCB0aHJvdWdoIG1vYmlsZSBvciBlbWFpbC5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPFNpZ25JblJlcz5cbiAgICovXG4gIGFzeW5jIHZlcmlmeU90cChwYXJhbXM6IFZlcmlmeU90cFJlcSk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgdHlwZSB9ID0gcGFyYW1zXG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJp0b2tlbuWSjHZlcmlmaWNhdGlvbkluZm/lv4XloatcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHRva2VuOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnVG9rZW4gaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgIG1lc3NhZ2VJZDogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ21lc3NhZ2VJZCBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChbJ3Bob25lX2NoYW5nZScsICdlbWFpbF9jaGFuZ2UnXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnZlcmlmeSh7XG4gICAgICAgICAgdmVyaWZpY2F0aW9uX2lkOiBwYXJhbXMubWVzc2FnZUlkLFxuICAgICAgICAgIHZlcmlmaWNhdGlvbl9jb2RlOiBwYXJhbXMudG9rZW4sXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLnNpZ25JbldpdGhVc2VybmFtZSh7XG4gICAgICAgICAgdmVyaWZpY2F0aW9uSW5mbzogeyB2ZXJpZmljYXRpb25faWQ6IHBhcmFtcy5tZXNzYWdlSWQsIGlzX3VzZXI6IHRydWUgfSxcbiAgICAgICAgICB2ZXJpZmljYXRpb25Db2RlOiBwYXJhbXMudG9rZW4sXG4gICAgICAgICAgdXNlcm5hbWU6IHBhcmFtcy5lbWFpbCB8fCB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSkgfHwgJycsXG4gICAgICAgICAgbG9naW5UeXBlOiBwYXJhbXMuZW1haWwgPyAnZW1haWwnIDogJ3Bob25lJyxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtZ2V0U2Vzc2lvblxuICAgKiBSZXR1cm5zIHRoZSBzZXNzaW9uLCByZWZyZXNoaW5nIGl0IGlmIG5lY2Vzc2FyeS5cbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyBnZXRTZXNzaW9uKCk6IFByb21pc2U8U2lnbkluUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQuZ2V0Q3JlZGVudGlhbHMoKVxuXG4gICAgICBpZiAoIWNyZWRlbnRpYWxzIHx8IGNyZWRlbnRpYWxzLnNjb3BlID09PSAnYWNjZXNzS2V5Jykge1xuICAgICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb246IG51bGwgfSwgZXJyb3I6IG51bGwgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgdXNlciB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcigpXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgc2Vzc2lvbjogeyAuLi5jcmVkZW50aWFscywgdXNlciB9LCB1c2VyIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1yZWZyZXNoc2Vzc2lvblxuICAgKiDml6Dorrrov4fmnJ/nirbmgIHlpoLkvZXvvIzpg73ov5Tlm57kuIDkuKrmlrDnmoTkvJror51cbiAgICogQHBhcmFtIHJlZnJlc2hfdG9rZW5cbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyByZWZyZXNoU2Vzc2lvbihyZWZyZXNoX3Rva2VuPzogc3RyaW5nKTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICAgIGNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW4gPSByZWZyZXNoX3Rva2VuIHx8IGNyZWRlbnRpYWxzLnJlZnJlc2hfdG9rZW5cbiAgICAgIGNvbnN0IG5ld1Rva2VucyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQucmVmcmVzaFRva2VuKGNyZWRlbnRpYWxzKVxuICAgICAgY29uc3QgeyBkYXRhOiB7IHVzZXIgfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFVzZXIoKVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXIsIHNlc3Npb246IHsgLi4ubmV3VG9rZW5zLCB1c2VyIH0gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWdldHVzZXJcbiAgICog5aaC5p6c5a2Y5Zyo546w5pyJ5Lya6K+d77yM5YiZ6I635Y+W5b2T5YmN55So5oi36K+m57uG5L+h5oGvXG4gICAqIEByZXR1cm5zIFByb21pc2U8R2V0VXNlclJlcz5cbiAgICovXG4gIGFzeW5jIGdldFVzZXIoKTogUHJvbWlzZTxHZXRVc2VyUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLmNvbnZlcnRUb1VzZXIoYXdhaXQgdGhpcy5nZXRDdXJyZW50VXNlcigpKVxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOWIt+aWsOeUqOaIt+S/oeaBr1xuICAgKiBAcmV0dXJucyBQcm9taXNlPENvbW1vblJlcz5cbiAgICovXG4gIGFzeW5jIHJlZnJlc2hVc2VyKCk6IFByb21pc2U8Q29tbW9uUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY3VycmVudFVzZXIucmVmcmVzaCgpXG5cbiAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC11cGRhdGV1c2VyXG4gICAqIOabtOaWsOeUqOaIt+S/oeaBr1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8R2V0VXNlclJlcyB8IFVwZGF0ZVVzZXJXaXRoVmVyaWZpY2F0aW9uUmVzPlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlVXNlcihwYXJhbXM6IFVwZGF0ZVVzZXJSZXEpOiBQcm9taXNlPEdldFVzZXJSZXMgfCBVcGRhdGVVc2VyV2l0aFZlcmlmaWNhdGlvblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJroh7PlsJHmnInkuIDkuKrmm7TmlrDlrZfmrrXooqvmj5DkvptcbiAgICAgIGNvbnN0IGhhc1ZhbHVlID0gT2JqZWN0LmtleXMocGFyYW1zKS5zb21lKGtleSA9PiBwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtc1trZXldICE9PSBudWxsICYmIHBhcmFtc1trZXldICE9PSAnJywpXG4gICAgICBpZiAoIWhhc1ZhbHVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiAnQXQgbGVhc3Qgb25lIGZpZWxkIG11c3QgYmUgcHJvdmlkZWQgZm9yIHVwZGF0ZScgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBlbWFpbCwgcGhvbmUsIC4uLnJlc3RQYXJhbXMgfSA9IHBhcmFtc1xuXG4gICAgICAvLyDmo4Dmn6XmmK/lkKbpnIDopoHmm7TmlrAgZW1haWwg5oiWIHBob25lXG4gICAgICBjb25zdCBuZWVkc0VtYWlsVmVyaWZpY2F0aW9uID0gZW1haWwgIT09IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbmVlZHNQaG9uZVZlcmlmaWNhdGlvbiA9IHBob25lICE9PSB1bmRlZmluZWRcblxuICAgICAgbGV0IGV4dHJhUmVzID0ge31cblxuICAgICAgaWYgKG5lZWRzRW1haWxWZXJpZmljYXRpb24gfHwgbmVlZHNQaG9uZVZlcmlmaWNhdGlvbikge1xuICAgICAgICAvLyDpnIDopoHlj5HpgIHpqozor4HnoIFcbiAgICAgICAgbGV0IHZlcmlmaWNhdGlvblBhcmFtczogeyBlbWFpbD86IHN0cmluZzsgcGhvbmVfbnVtYmVyPzogc3RyaW5nIH1cbiAgICAgICAgbGV0IHZlcmlmaWNhdGlvblR5cGU6ICdlbWFpbF9jaGFuZ2UnIHwgJ3Bob25lX2NoYW5nZSdcblxuICAgICAgICBpZiAobmVlZHNFbWFpbFZlcmlmaWNhdGlvbikge1xuICAgICAgICAgIHZlcmlmaWNhdGlvblBhcmFtcyA9IHsgZW1haWw6IHBhcmFtcy5lbWFpbCB9XG4gICAgICAgICAgdmVyaWZpY2F0aW9uVHlwZSA9ICdlbWFpbF9jaGFuZ2UnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8g5q2j6KeE5YyW5omL5py65Y+3XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGVkUGhvbmUgPSB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSlcbiAgICAgICAgICB2ZXJpZmljYXRpb25QYXJhbXMgPSB7IHBob25lX251bWJlcjogZm9ybWF0dGVkUGhvbmUgfVxuICAgICAgICAgIHZlcmlmaWNhdGlvblR5cGUgPSAncGhvbmVfY2hhbmdlJ1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g5Y+R6YCB6aqM6K+B56CBXG4gICAgICAgIGNvbnN0IHZlcmlmaWNhdGlvbkluZm8gPSBhd2FpdCB0aGlzLmdldFZlcmlmaWNhdGlvbih2ZXJpZmljYXRpb25QYXJhbXMpXG5cbiAgICAgICAgT2JqZWN0LmtleXMocmVzdFBhcmFtcykubGVuZ3RoID4gMCAmJiAoYXdhaXQgdGhpcy51cGRhdGVVc2VyQmFzaWNJbmZvKHJlc3RQYXJhbXMpKVxuXG4gICAgICAgIGV4dHJhUmVzID0ge1xuICAgICAgICAgIG1lc3NhZ2VJZDogdmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25faWQsXG4gICAgICAgICAgdmVyaWZ5T3RwOiBhc3luYyAodmVyaWZ5UGFyYW1zOiB7IGVtYWlsPzogc3RyaW5nOyBwaG9uZT86IHN0cmluZzsgdG9rZW46IHN0cmluZyB9KTogUHJvbWlzZTxHZXRVc2VyUmVzPiA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpZiAodmVyaWZ5UGFyYW1zLmVtYWlsICYmIHBhcmFtcy5lbWFpbCA9PT0gdmVyaWZ5UGFyYW1zLmVtYWlsKSB7XG4gICAgICAgICAgICAgICAgLy8g6aqM6K+B56CB6aqM6K+BXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52ZXJpZnlPdHAoe1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ2VtYWlsX2NoYW5nZScsXG4gICAgICAgICAgICAgICAgICBlbWFpbDogcGFyYW1zLmVtYWlsLFxuICAgICAgICAgICAgICAgICAgdG9rZW46IHZlcmlmeVBhcmFtcy50b2tlbixcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogdmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25faWQsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVVzZXJCYXNpY0luZm8oeyBlbWFpbDogcGFyYW1zLmVtYWlsIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmVyaWZ5UGFyYW1zLnBob25lICYmIHBhcmFtcy5waG9uZSA9PT0gdmVyaWZ5UGFyYW1zLnBob25lKSB7XG4gICAgICAgICAgICAgICAgLy8g6aqM6K+B56CB6aqM6K+BXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52ZXJpZnlPdHAoe1xuICAgICAgICAgICAgICAgICAgdHlwZTogJ3Bob25lX2NoYW5nZScsXG4gICAgICAgICAgICAgICAgICBwaG9uZTogcGFyYW1zLnBob25lLFxuICAgICAgICAgICAgICAgICAgdG9rZW46IHZlcmlmeVBhcmFtcy50b2tlbixcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogdmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25faWQsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVVzZXJCYXNpY0luZm8oeyBwaG9uZTogdGhpcy5mb3JtYXRQaG9uZShwYXJhbXMucGhvbmUpIH0pXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy52ZXJpZnlPdHAoe1xuICAgICAgICAgICAgICAgICAgdHlwZTogdmVyaWZpY2F0aW9uVHlwZSxcbiAgICAgICAgICAgICAgICAgIGVtYWlsOiBuZWVkc0VtYWlsVmVyaWZpY2F0aW9uID8gcGFyYW1zLmVtYWlsIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgcGhvbmU6ICFuZWVkc0VtYWlsVmVyaWZpY2F0aW9uID8gcGFyYW1zLnBob25lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgdG9rZW46IHZlcmlmeVBhcmFtcy50b2tlbixcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VJZDogdmVyaWZpY2F0aW9uSW5mby52ZXJpZmljYXRpb25faWQsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAvLyDpqozor4HmiJDlip/lkI7mm7TmlrDnlKjmiLfkv6Hmga9cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIGRhdGE6IHsgdXNlciB9LFxuICAgICAgICAgICAgICB9ID0gYXdhaXQgdGhpcy5nZXRVc2VyKClcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuVVNFUl9VUERBVEVEIH0pXG5cbiAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyIH0sIGVycm9yOiBudWxsIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOS4jemcgOimgemqjOivge+8jOebtOaOpeabtOaWsFxuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVVzZXJCYXNpY0luZm8ocGFyYW1zKVxuICAgICAgfVxuICAgICAgY29uc3Qge1xuICAgICAgICBkYXRhOiB7IHVzZXIgfSxcbiAgICAgIH0gPSBhd2FpdCB0aGlzLmdldFVzZXIoKVxuICAgICAgdGhpcy5jb25maWcuZXZlbnRCdXM/LmZpcmUoRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgeyBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuVVNFUl9VUERBVEVEIH0pXG5cbiAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlciwgLi4uZXh0cmFSZXMgfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWdldHVzZXJpZGVudGl0aWVzXG4gICAqIOiOt+WPluaJgOaciei6q+S7vea6kFxuICAgKiBAcmV0dXJucyBQcm9taXNlPEdldFVzZXJJZGVudGl0aWVzUmVzPlxuICAgKi9cbiAgYXN5bmMgZ2V0VXNlcklkZW50aXRpZXMoKTogUHJvbWlzZTxHZXRVc2VySWRlbnRpdGllc1Jlcz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcm92aWRlcnMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5nZXRQcm92aWRlcnMoKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgaWRlbnRpdGllczogcHJvdmlkZXJzPy5kYXRhPy5maWx0ZXIodiA9PiAhIXYuYmluZCkgYXMgdW5rbm93biBhcyBHZXRVc2VySWRlbnRpdGllc1Jlc1snZGF0YSddWydpZGVudGl0aWVzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLWxpbmtpZGVudGl0eVxuICAgKiDnu5Hlrprouqvku73mupDliLDlvZPliY3nlKjmiLdcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPExpbmtJZGVudGl0eVJlcz5cbiAgICovXG4gIGFzeW5jIGxpbmtJZGVudGl0eShwYXJhbXM6IExpbmtJZGVudGl0eVJlcSk6IFByb21pc2U8TGlua0lkZW50aXR5UmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIOWPguaVsOagoemqjO+8mnByb3ZpZGVy5b+F5aGrXG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICBwcm92aWRlcjogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ1Byb3ZpZGVyIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5zaWduSW5XaXRoT0F1dGgoe1xuICAgICAgICBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgdHlwZTogT0FVVEhfVFlQRS5CSU5EX0lERU5USVRZLFxuICAgICAgICB9LFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyBwcm92aWRlcjogcGFyYW1zLnByb3ZpZGVyIH0sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC11bmxpbmtpZGVudGl0eVxuICAgKiDop6Pnu5Houqvku73mupBcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyBQcm9taXNlPENvbW1vblJlcz5cbiAgICovXG4gIGFzeW5jIHVubGlua0lkZW50aXR5KHBhcmFtczogVW5saW5rSWRlbnRpdHlSZXEpOiBQcm9taXNlPENvbW1vblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJpwcm92aWRlcuW/heWhq1xuICAgICAgdGhpcy52YWxpZGF0ZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgcHJvdmlkZXI6IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdQcm92aWRlciBpcyByZXF1aXJlZCcgfSxcbiAgICAgIH0pXG5cbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnVuYmluZFByb3ZpZGVyKHsgcHJvdmlkZXJfaWQ6IHBhcmFtcy5wcm92aWRlciB9KVxuXG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXJlYXV0aGVudGljYXRpb25cbiAgICog6YeN5paw6K6k6K+BXG4gICAqIEByZXR1cm5zIFByb21pc2U8UmVhdXRoZW50aWNhdGVSZXM+XG4gICAqL1xuICBhc3luYyByZWF1dGhlbnRpY2F0ZSgpOiBQcm9taXNlPFJlYXV0aGVudGljYXRlUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZGF0YTogeyB1c2VyIH0sXG4gICAgICB9ID0gYXdhaXQgdGhpcy5nZXRVc2VyKClcblxuICAgICAgdGhpcy52YWxpZGF0ZUF0TGVhc3RPbmUodXNlciwgW1snZW1haWwnLCAncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuICAgICAgY29uc3QgdXNlckluZm8gPSB1c2VyLmVtYWlsID8geyBlbWFpbDogdXNlci5lbWFpbCB9IDogeyBwaG9uZV9udW1iZXI6IHRoaXMuZm9ybWF0UGhvbmUodXNlci5waG9uZSkgfVxuXG4gICAgICAvLyDnrKzkuIDmraXvvJrlj5HpgIHpqozor4HnoIHlubblrZjlgqggdmVyaWZpY2F0aW9uSW5mb1xuICAgICAgY29uc3QgdmVyaWZpY2F0aW9uSW5mbyA9IGF3YWl0IHRoaXMuZ2V0VmVyaWZpY2F0aW9uKHVzZXJJbmZvKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgLy8g56ys5LqM5q2l77ya562J5b6F55So5oi36L6T5YWl6aqM6K+B56CB77yI6YCa6L+HIFByb21pc2Ug5YyF6KOF55So5oi36L6T5YWl5LqL5Lu277yJXG4gICAgICAgICAgdXBkYXRlVXNlcjogYXN5bmMgKGF0dHJpYnV0ZXM6IFVwZGF0ZVVzZXJBdHRyaWJ1dGVzKTogUHJvbWlzZTxTaWduSW5SZXM+ID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMoYXR0cmlidXRlcywge1xuICAgICAgICAgICAgICBub25jZTogeyByZXF1aXJlZDogdHJ1ZSwgbWVzc2FnZTogJ05vbmNlIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgLy8g56ys5LiJ5q2l77ya5b6F55So5oi36L6T5YWl5a6M6aqM6K+B56CB5LmL5ZCO77yM6aqM6K+B6aqM6K+B56CBXG4gICAgICAgICAgICAgICAgY29uc3QgdmVyaWZpY2F0aW9uVG9rZW5SZXMgPSBhd2FpdCB0aGlzLnZlcmlmeSh7XG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25faWQ6IHZlcmlmaWNhdGlvbkluZm8udmVyaWZpY2F0aW9uX2lkLFxuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX2NvZGU6IGF0dHJpYnV0ZXMubm9uY2UsXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIC8vIOesrOWbm+atpe+8muiOt+WPliBzdWRvX3Rva2VuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3Vkb1JlcyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnN1ZG8oe1xuICAgICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uX3Rva2VuOiB2ZXJpZmljYXRpb25Ub2tlblJlcy52ZXJpZmljYXRpb25fdG9rZW4sXG4gICAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNldFBhc3N3b3JkKHtcbiAgICAgICAgICAgICAgICAgIG5ld19wYXNzd29yZDogYXR0cmlidXRlcy5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgIHN1ZG9fdG9rZW46IHN1ZG9SZXMuc3Vkb190b2tlbixcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2lnbkluV2l0aFVzZXJuYW1lKHtcbiAgICAgICAgICAgICAgICAgIHZlcmlmaWNhdGlvbkluZm8sXG4gICAgICAgICAgICAgICAgICB2ZXJpZmljYXRpb25Db2RlOiBhdHRyaWJ1dGVzLm5vbmNlLFxuICAgICAgICAgICAgICAgICAgLi4udXNlckluZm8sXG4gICAgICAgICAgICAgICAgICBsb2dpblR5cGU6IHVzZXJJbmZvLmVtYWlsID8gJ2VtYWlsJyA6ICdwaG9uZScsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IHNlc3Npb24udXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1yZXNlbmRcbiAgICog6YeN5paw5Y+R6YCB6aqM6K+B56CBXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxSZXNlbmRSZXM+XG4gICAqL1xuICBhc3luYyByZXNlbmQocGFyYW1zOiBSZXNlbmRSZXEpOiBQcm9taXNlPFJlc2VuZFJlcz4ge1xuICAgIHRyeSB7XG4gICAgICAvLyDlj4LmlbDmoKHpqozvvJplbWFpbOaIlnBob25l5b+F5aGr5YW25LiAXG4gICAgICB0aGlzLnZhbGlkYXRlQXRMZWFzdE9uZShwYXJhbXMsIFtbJ2VtYWlsJ10sIFsncGhvbmUnXV0sICdZb3UgbXVzdCBwcm92aWRlIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXInKVxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBwYXJhbXMudHlwZSA9PT0gJ3NpZ251cCcgPyAnQU5ZJyA6ICdVU0VSJ1xuICAgICAgY29uc3QgZGF0YTogeyBlbWFpbD86IHN0cmluZzsgcGhvbmVfbnVtYmVyPzogc3RyaW5nOyB0YXJnZXQ6ICdVU0VSJyB8ICdBTlknIH0gPSB7IHRhcmdldCB9XG4gICAgICBpZiAoJ2VtYWlsJyBpbiBwYXJhbXMpIHtcbiAgICAgICAgZGF0YS5lbWFpbCA9IHBhcmFtcy5lbWFpbFxuICAgICAgfVxuXG4gICAgICBpZiAoJ3Bob25lJyBpbiBwYXJhbXMpIHtcbiAgICAgICAgZGF0YS5waG9uZV9udW1iZXIgPSB0aGlzLmZvcm1hdFBob25lKHBhcmFtcy5waG9uZSlcbiAgICAgIH1cblxuICAgICAgLy8g6YeN5paw5Y+R6YCB6aqM6K+B56CBXG4gICAgICBjb25zdCB7IHZlcmlmaWNhdGlvbl9pZDogdmVyaWZpY2F0aW9uSWQgfSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdldFZlcmlmaWNhdGlvbihkYXRhKVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiB7IG1lc3NhZ2VJZDogdmVyaWZpY2F0aW9uSWQgfSxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YToge30sXG4gICAgICAgIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLXNldHNlc3Npb25cbiAgICog5L2/55SoYWNjZXNzX3Rva2Vu5ZKMcmVmcmVzaF90b2tlbuadpeiuvue9ruS8muivnVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbkluUmVzPlxuICAgKi9cbiAgYXN5bmMgc2V0U2Vzc2lvbihwYXJhbXM6IFNldFNlc3Npb25SZXEpOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnZhbGlkYXRlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICBhY2Nlc3NfdG9rZW46IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdBY2Nlc3MgdG9rZW4gaXMgcmVxdWlyZWQnIH0sXG4gICAgICAgIHJlZnJlc2hfdG9rZW46IHsgcmVxdWlyZWQ6IHRydWUsIG1lc3NhZ2U6ICdSZWZyZXNoIHRva2VuIGlzIHJlcXVpcmVkJyB9LFxuICAgICAgfSlcblxuICAgICAgYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5yZWZyZXNoVG9rZW4ocGFyYW1zLCB7IHRocm93RXJyb3I6IHRydWUgfSlcblxuICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7IGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5TSUdORURfSU4gfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL3N1cGFiYXNlLmNvbS9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtZXhjaGFuZ2Vjb2RlZm9yc2Vzc2lvblxuICBhc3luYyBleGNoYW5nZUNvZGVGb3JTZXNzaW9uKCkge1xuICAgIC8vXG4gIH1cblxuICAvKipcbiAgICog5Yig6Zmk5b2T5YmN55So5oi3XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIGRlbGV0ZVVzZXIocGFyYW1zOiBEZWxldGVNZVJlcSk6IFByb21pc2U8Q29tbW9uUmVzPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudmFsaWRhdGVQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgIHBhc3N3b3JkOiB7IHJlcXVpcmVkOiB0cnVlLCBtZXNzYWdlOiAnUGFzc3dvcmQgaXMgcmVxdWlyZWQnIH0sXG4gICAgICB9KVxuXG4gICAgICBjb25zdCB7IHN1ZG9fdG9rZW4gfSA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnN1ZG8ocGFyYW1zKVxuXG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5kZWxldGVNZSh7IHN1ZG9fdG9rZW4gfSlcblxuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOi3s+i9rOezu+e7n+m7mOiupOeZu+W9lemhtVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxhdXRoTW9kZWxzLlRvRGVmYXVsdExvZ2luUGFnZT59XG4gICAqIEBtZW1iZXJvZiBBdXRoXG4gICAqL1xuICBhc3luYyB0b0RlZmF1bHRMb2dpblBhZ2UocGFyYW1zOiBhdXRoTW9kZWxzLlRvRGVmYXVsdExvZ2luUGFnZSA9IHt9KTogUHJvbWlzZTxDb21tb25SZXM+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnVmVyc2lvbiA9IHBhcmFtcy5jb25maWdfdmVyc2lvbiB8fCAnZW52J1xuICAgICAgY29uc3QgcXVlcnkgPSBPYmplY3Qua2V5cyhwYXJhbXMucXVlcnkgfHwge30pXG4gICAgICAgIC5tYXAoa2V5ID0+IGAke2tleX09JHtwYXJhbXMucXVlcnlba2V5XX1gKVxuICAgICAgICAuam9pbignJicpXG5cbiAgICAgIGlmIChhZGFwdGVyRm9yV3hNcC5pc01hdGNoKCkpIHtcbiAgICAgICAgd3gubmF2aWdhdGVUbyh7IHVybDogYC9wYWNrYWdlcy8kd2Rfc3lzdGVtL3BhZ2VzL2xvZ2luL2luZGV4JHtxdWVyeSA/IGA/JHtxdWVyeX1gIDogJyd9YCB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcmVkaXJlY3RVcmkgPSBwYXJhbXMucmVkaXJlY3RfdXJpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgICAgIGNvbnN0IHVybE9iaiA9IG5ldyBVUkwocmVkaXJlY3RVcmkpXG4gICAgICAgIGNvbnN0IGxvZ2luUGFnZSA9IGAke3VybE9iai5vcmlnaW59L19fYXV0aC8/YXBwX2lkPSR7cGFyYW1zLmFwcF9pZCB8fCAnJ30mZW52X2lkPSR7dGhpcy5jb25maWcuZW52fSZjbGllbnRfaWQ9JHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5jbGllbnRJZCB8fCB0aGlzLmNvbmZpZy5lbnZcbiAgICAgICAgfSZjb25maWdfdmVyc2lvbj0ke2NvbmZpZ1ZlcnNpb259JnJlZGlyZWN0X3VyaT0ke2VuY29kZVVSSUNvbXBvbmVudChyZWRpcmVjdFVyaSl9JHtxdWVyeSA/IGAmJHtxdWVyeX1gIDogJyd9YFxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGxvZ2luUGFnZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBudWxsIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKGVycm9yKSB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOiHquWumuS5ieeZu+W9lVxuICAgKiBAcGFyYW0gZ2V0VGlja0ZuICgpID0+IFByb21pc2U8c3RyaW5nPiwg6I635Y+W6Ieq5a6a5LmJ55m75b2VIHRpY2tldCDnmoTlh73mlbBcbiAgICogQHJldHVybnNcbiAgICovXG4gIGFzeW5jIHNpZ25JbldpdGhDdXN0b21UaWNrZXQoZ2V0VGlja0ZuPzogYXV0aE1vZGVscy5HZXRDdXN0b21TaWduVGlja2V0Rm4pOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIGlmIChnZXRUaWNrRm4pIHtcbiAgICAgIHRoaXMuc2V0Q3VzdG9tU2lnbkZ1bmMoZ2V0VGlja0ZuKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoQ3VzdG9tVGlja2V0KClcbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqPb3Blbklk6Z2Z6buY55m75b2VXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoT3BlbklkKHsgdXNlV3hDbG91ZCA9IHRydWUgfSA9IHt9KTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ3d4IGFwaSB1bmRlZmluZWQnKVxuICAgIH1cbiAgICBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuXG4gICAgY29uc3QgbWFpbkZ1bmMgPSBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgbGV0IHJlc3VsdDogYXV0aE1vZGVscy5HcmFudFByb3ZpZGVyVG9rZW5SZXNwb25zZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuICAgICAgbGV0IGNyZWRlbnRpYWxzOiBDcmVkZW50aWFscyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5ncmFudFByb3ZpZGVyVG9rZW4oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZXJfaWQ6IHd4SW5mbz8uYXBwSWQsXG4gICAgICAgICAgICBwcm92aWRlcl9jb2RlOiBjb2RlLFxuICAgICAgICAgICAgcHJvdmlkZXJfcGFyYW1zOiB7XG4gICAgICAgICAgICAgIHByb3ZpZGVyX2NvZGVfdHlwZTogJ29wZW5faWQnLFxuICAgICAgICAgICAgICBhcHBpZDogd3hJbmZvPy5hcHBJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VXeENsb3VkLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKChyZXN1bHQgYXMgYW55KT8uZXJyb3JfY29kZSB8fCAhcmVzdWx0LnByb3ZpZGVyX3Rva2VuKSB7XG4gICAgICAgICAgdGhyb3cgcmVzdWx0XG4gICAgICAgIH1cblxuICAgICAgICBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnNpZ25JbldpdGhQcm92aWRlcihcbiAgICAgICAgICB7IHByb3ZpZGVyX3Rva2VuOiByZXN1bHQucHJvdmlkZXJfdG9rZW4gfSxcbiAgICAgICAgICB1c2VXeENsb3VkLFxuICAgICAgICApXG5cbiAgICAgICAgaWYgKChjcmVkZW50aWFscyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgICAgICAgdGhyb3cgY3JlZGVudGlhbHNcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5vYXV0aDJjbGllbnQuc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHMgYXMgQ3JlZGVudGlhbHMpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgd3gubG9naW4oe1xuICAgICAgICAgIHN1Y2Nlc3M6IGFzeW5jIChyZXM6IHsgY29kZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IG1haW5GdW5jKHJlcy5jb2RlKVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWlsOiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKHJlcz8uZXJyTXNnKVxuICAgICAgICAgICAgOyhlcnJvciBhcyBhbnkpLmNvZGUgPSByZXM/LmVycm5vXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9ID0ge30gfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5bCP56iL5bqP5omL5py65Y+35o6I5p2D55m75b2VXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduSW5SZXM+XG4gICAqL1xuICAvLyBhc3luYyBzaWduSW5XaXRoUGhvbmVBdXRoKHsgcGhvbmVDb2RlID0gJycsIHVzZVd4Q2xvdWQgPSBmYWxzZSB9KTogUHJvbWlzZTxTaWduSW5SZXM+IHtcbiAgYXN5bmMgc2lnbkluV2l0aFBob25lQXV0aCh7IHBob25lQ29kZSA9ICcnIH0pOiBQcm9taXNlPFNpZ25JblJlcz4ge1xuICAgIC8vIGlmICghYWRhcHRlckZvcld4TXAuaXNNYXRjaCgpKSB7XG4gICAgLy8gICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlOiAnd3ggYXBpIHVuZGVmaW5lZCcgfSkgfVxuICAgIC8vIH1cbiAgICAvLyBjb25zdCB3eEluZm8gPSB3eC5nZXRBY2NvdW50SW5mb1N5bmMoKS5taW5pUHJvZ3JhbVxuICAgIC8vIGNvbnN0IHByb3ZpZGVySW5mbyA9IHtcbiAgICAvLyAgIHByb3ZpZGVyX3BhcmFtczogeyBwcm92aWRlcl9jb2RlX3R5cGU6ICdwaG9uZScsIGNvZGU6IHBob25lQ29kZSwgYXBwaWQ6IHd4SW5mby5hcHBJZCB9LFxuICAgIC8vICAgcHJvdmlkZXJfaWQ6IHd4SW5mby5hcHBJZCxcbiAgICAvLyB9XG5cbiAgICAvLyBjb25zdCB7IGNvZGUgfSA9IGF3YWl0IHd4LmxvZ2luKClcbiAgICAvLyA7KHByb3ZpZGVySW5mbyBhcyBhbnkpLnByb3ZpZGVyX2NvZGUgPSBjb2RlXG5cbiAgICAvLyB0cnkge1xuICAgIC8vICAgY29uc3QgcHJvdmlkZXJUb2tlbiA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihwcm92aWRlckluZm8sIHVzZVd4Q2xvdWQpXG4gICAgLy8gICBpZiAocHJvdmlkZXJUb2tlbi5lcnJvcl9jb2RlKSB7XG4gICAgLy8gICAgIHRocm93IHByb3ZpZGVyVG9rZW5cbiAgICAvLyAgIH1cblxuICAgIC8vICAgY29uc3Qgc2lnbkluUmVzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLmF1dGhBcGkuc2lnbkluV2l0aFByb3ZpZGVyKHtcbiAgICAvLyAgICAgcHJvdmlkZXJfdG9rZW46IHByb3ZpZGVyVG9rZW4ucHJvdmlkZXJfdG9rZW4sXG4gICAgLy8gICB9LCB1c2VXeENsb3VkKVxuXG4gICAgLy8gICBpZiAoKHNpZ25JblJlcyBhcyBhbnkpPy5lcnJvcl9jb2RlKSB7XG4gICAgLy8gICAgIHRocm93IHNpZ25JblJlc1xuICAgIC8vICAgfVxuICAgIC8vIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gICByZXR1cm4geyBkYXRhOiB7fSwgZXJyb3I6IG5ldyBBdXRoRXJyb3IoZXJyb3IpIH1cbiAgICAvLyB9XG5cbiAgICAvLyBjb25zdCBsb2dpblN0YXRlID0gYXdhaXQgdGhpcy5jcmVhdGVMb2dpblN0YXRlKClcblxuICAgIC8vIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0gPSB7fSB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKClcblxuICAgIC8vIC8vIGxvZ2luU3RhdGXov5Tlm57mmK/kuLrkuoblhbzlrrl2MueJiOacrFxuICAgIC8vIHJldHVybiB7IC4uLihsb2dpblN0YXRlIGFzIGFueSksIGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH1cbiAgICBpZiAoIWFkYXB0ZXJGb3JXeE1wLmlzTWF0Y2goKSkge1xuICAgICAgcmV0dXJuIHsgZGF0YToge30sIGVycm9yOiBuZXcgQXV0aEVycm9yKHsgbWVzc2FnZTogJ3d4IGFwaSB1bmRlZmluZWQnIH0pIH1cbiAgICB9XG4gICAgY29uc3Qgd3hJbmZvID0gd3guZ2V0QWNjb3VudEluZm9TeW5jKCkubWluaVByb2dyYW1cbiAgICBjb25zdCBwcm92aWRlckluZm8gPSB7XG4gICAgICBwcm92aWRlcl9wYXJhbXM6IHsgcHJvdmlkZXJfY29kZV90eXBlOiAncGhvbmUnIH0sXG4gICAgICBwcm92aWRlcl9pZDogd3hJbmZvLmFwcElkLFxuICAgIH1cblxuICAgIGNvbnN0IHsgY29kZSB9ID0gYXdhaXQgd3gubG9naW4oKVxuICAgIDsocHJvdmlkZXJJbmZvIGFzIGFueSkucHJvdmlkZXJfY29kZSA9IGNvZGVcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcHJvdmlkZXJUb2tlbiA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLmdyYW50UHJvdmlkZXJUb2tlbihwcm92aWRlckluZm8pXG4gICAgICBpZiAocHJvdmlkZXJUb2tlbi5lcnJvcl9jb2RlKSB7XG4gICAgICAgIHRocm93IHByb3ZpZGVyVG9rZW5cbiAgICAgIH1cblxuICAgICAgcHJvdmlkZXJUb2tlbiA9IGF3YWl0IHRoaXMub2F1dGhJbnN0YW5jZS5hdXRoQXBpLnBhdGNoUHJvdmlkZXJUb2tlbih7XG4gICAgICAgIHByb3ZpZGVyX3Rva2VuOiBwcm92aWRlclRva2VuLnByb3ZpZGVyX3Rva2VuLFxuICAgICAgICBwcm92aWRlcl9pZDogd3hJbmZvLmFwcElkLFxuICAgICAgICBwcm92aWRlcl9wYXJhbXM6IHtcbiAgICAgICAgICBjb2RlOiBwaG9uZUNvZGUsXG4gICAgICAgICAgcHJvdmlkZXJfY29kZV90eXBlOiAncGhvbmUnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIGlmIChwcm92aWRlclRva2VuLmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgcHJvdmlkZXJUb2tlblxuICAgICAgfVxuXG4gICAgICBjb25zdCBzaWduSW5SZXMgPSBhd2FpdCB0aGlzLm9hdXRoSW5zdGFuY2UuYXV0aEFwaS5zaWduSW5XaXRoUHJvdmlkZXIoe1xuICAgICAgICBwcm92aWRlcl90b2tlbjogcHJvdmlkZXJUb2tlbi5wcm92aWRlcl90b2tlbixcbiAgICAgIH0pXG5cbiAgICAgIGlmICgoc2lnbkluUmVzIGFzIGFueSk/LmVycm9yX2NvZGUpIHtcbiAgICAgICAgdGhyb3cgc2lnbkluUmVzXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbmV3IEF1dGhFcnJvcihlcnJvcikgfVxuICAgIH1cblxuICAgIGNvbnN0IGxvZ2luU3RhdGUgPSBhd2FpdCB0aGlzLmNyZWF0ZUxvZ2luU3RhdGUoKVxuXG4gICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSA9IHt9IH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKVxuXG4gICAgLy8gbG9naW5TdGF0Zei/lOWbnuaYr+S4uuS6huWFvOWuuXYy54mI5pysXG4gICAgcmV0dXJuIHsgLi4uKGxvZ2luU3RhdGUgYXMgYW55KSwgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRQaG9uZShwaG9uZTogc3RyaW5nKSB7XG4gICAgaWYgKCEvXFxzKy8udGVzdChwaG9uZSkgJiYgL15cXCtcXGR7MSwzfVxcZCsvLnRlc3QocGhvbmUpKSB7XG4gICAgICByZXR1cm4gcGhvbmUucmVwbGFjZSgvXihcXCtcXGR7MSwyfSkoXFxkKykkLywgJyQxICQyJylcbiAgICB9XG4gICAgcmV0dXJuIC9eXFwrXFxkezEsM31cXHMrLy50ZXN0KHBob25lKSA/IHBob25lIDogYCs4NiAke3Bob25lfWBcbiAgfVxuXG4gIHByaXZhdGUgbm90aWZ5TGlzdGVuZXJzKGV2ZW50LCBzZXNzaW9uLCBpbmZvKTogT25BdXRoU3RhdGVDaGFuZ2VDYWxsYmFjayB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZm9yRWFjaCgoY2FsbGJhY2tzKSA9PiB7XG4gICAgICBjYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsYmFjayhldmVudCwgc2Vzc2lvbiwgaW5mbylcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBhdXRoIHN0YXRlIGNoYW5nZSBjYWxsYmFjazonLCBlcnJvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICAgIHJldHVyblxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cExpc3RlbmVycygpIHtcbiAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8ub24oRVZFTlRTLkFVVEhfU1RBVEVfQ0hBTkdFRCwgYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3QgZXZlbnQgPSBwYXJhbXM/LmRhdGE/LmV2ZW50XG4gICAgICBjb25zdCBpbmZvID0gcGFyYW1zPy5kYXRhPy5pbmZvXG4gICAgICBjb25zdCB7XG4gICAgICAgIGRhdGE6IHsgc2Vzc2lvbiB9LFxuICAgICAgfSA9IGF3YWl0IHRoaXMuZ2V0U2Vzc2lvbigpXG5cbiAgICAgIHRoaXMubm90aWZ5TGlzdGVuZXJzKGV2ZW50LCBzZXNzaW9uLCBpbmZvKVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb1VzZXIodXNlckluZm86IGF1dGhNb2RlbHMuVXNlckluZm8gJiBQYXJ0aWFsPFVzZXI+KSB7XG4gICAgaWYgKCF1c2VySW5mbykgcmV0dXJuIG51bGxcblxuICAgIC8vIOS8mOWFiOS9v+eUqCB1c2VySW5mbyDkuK3nmoTmlbDmja7vvIhWMyBBUEnvvIlcbiAgICBjb25zdCBlbWFpbCA9IHVzZXJJbmZvPy5lbWFpbCB8fCAnJ1xuICAgIGNvbnN0IHBob25lID0gdXNlckluZm8/LnBob25lX251bWJlciB8fCAnJ1xuICAgIGNvbnN0IHVzZXJJZCA9IHVzZXJJbmZvPy5zdWIgfHwgdXNlckluZm8/LnVpZCB8fCAnJ1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB1c2VySWQsXG4gICAgICBhdWQ6ICdhdXRoZW50aWNhdGVkJyxcbiAgICAgIHJvbGU6IHVzZXJJbmZvLmdyb3Vwcz8ubWFwPy4oZ3JvdXAgPT4gKHR5cGVvZiBncm91cCA9PT0gJ3N0cmluZycgPyBncm91cCA6IGdyb3VwLmlkKSksXG4gICAgICBlbWFpbDogZW1haWwgfHwgJycsXG4gICAgICBlbWFpbF9jb25maXJtZWRfYXQ6IHVzZXJJbmZvPy5lbWFpbF92ZXJpZmllZCA/IHVzZXJJbmZvLmNyZWF0ZWRfYXQgOiB1c2VySW5mby5jcmVhdGVkX2F0LFxuICAgICAgcGhvbmUsXG4gICAgICBwaG9uZV9jb25maXJtZWRfYXQ6IHBob25lID8gdXNlckluZm8uY3JlYXRlZF9hdCA6IHVuZGVmaW5lZCxcbiAgICAgIGNvbmZpcm1lZF9hdDogdXNlckluZm8uY3JlYXRlZF9hdCxcbiAgICAgIGxhc3Rfc2lnbl9pbl9hdDogKHVzZXJJbmZvIGFzIGFueSkubGFzdF9zaWduX2luX2F0LFxuICAgICAgYXBwX21ldGFkYXRhOiB7XG4gICAgICAgIHByb3ZpZGVyOiB1c2VySW5mby5sb2dpblR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJ2Nsb3VkYmFzZScsXG4gICAgICAgIHByb3ZpZGVyczogW3VzZXJJbmZvLmxvZ2luVHlwZT8udG9Mb3dlckNhc2UoKSB8fCAnY2xvdWRiYXNlJ10sXG4gICAgICB9LFxuICAgICAgdXNlcl9tZXRhZGF0YToge1xuICAgICAgICAvLyBWMyBBUEkg55So5oi35L+h5oGvXG4gICAgICAgIG5hbWU6IHVzZXJJbmZvPy5uYW1lLFxuICAgICAgICBwaWN0dXJlOiB1c2VySW5mbz8ucGljdHVyZSxcbiAgICAgICAgdXNlcm5hbWU6IHVzZXJJbmZvPy51c2VybmFtZSwgLy8g55So5oi35ZCN56ew77yM6ZW/5bqmIDUtMjQg5L2N77yM5pSv5oyB5a2X56ym5Lit6Iux5paH44CB5pWw5a2X44CB54m55q6K5a2X56ym77yI5LuF5pSv5oyBXy3vvInvvIzkuI3mlK/mjIHkuK3mlodcbiAgICAgICAgZ2VuZGVyOiB1c2VySW5mbz8uZ2VuZGVyLFxuICAgICAgICBsb2NhbGU6IHVzZXJJbmZvPy5sb2NhbGUsXG4gICAgICAgIC8vIFYyIEFQSSDlhbzlrrnvvIjkvb/nlKggYW55IOmBv+WFjeexu+Wei+mUmeivr++8iVxuICAgICAgICB1aWQ6IHVzZXJJbmZvLnVpZCxcbiAgICAgICAgbmlja05hbWU6IHVzZXJJbmZvLm5pY2tOYW1lIHx8IHVzZXJJbmZvPy5uYW1lLFxuICAgICAgICBhdmF0YXJVcmw6IHVzZXJJbmZvLmF2YXRhclVybCB8fCB1c2VySW5mby5waWN0dXJlLFxuICAgICAgICBsb2NhdGlvbjogdXNlckluZm8ubG9jYXRpb24sXG4gICAgICAgIGhhc1Bhc3N3b3JkOiB1c2VySW5mby5oYXNQYXNzd29yZCxcbiAgICAgIH0sXG4gICAgICBpZGVudGl0aWVzOlxuICAgICAgICB1c2VySW5mbz8ucHJvdmlkZXJzPy5tYXAocCA9PiAoe1xuICAgICAgICAgIGlkOiBwLmlkIHx8ICcnLFxuICAgICAgICAgIGlkZW50aXR5X2lkOiBwLmlkIHx8ICcnLFxuICAgICAgICAgIHVzZXJfaWQ6IHVzZXJJZCxcbiAgICAgICAgICBpZGVudGl0eV9kYXRhOiB7XG4gICAgICAgICAgICBwcm92aWRlcl9pZDogcC5pZCxcbiAgICAgICAgICAgIHByb3ZpZGVyX3VzZXJfaWQ6IHAucHJvdmlkZXJfdXNlcl9pZCxcbiAgICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByb3ZpZGVyOiBwLmlkIHx8ICdjbG91ZGJhc2UnLFxuICAgICAgICAgIGNyZWF0ZWRfYXQ6IHVzZXJJbmZvLmNyZWF0ZWRfYXQsXG4gICAgICAgICAgdXBkYXRlZF9hdDogdXNlckluZm8udXBkYXRlZF9hdCxcbiAgICAgICAgICBsYXN0X3NpZ25faW5fYXQ6ICh1c2VySW5mbyBhcyBhbnkpLmxhc3Rfc2lnbl9pbl9hdCxcbiAgICAgICAgfSkpIHx8IFtdLFxuICAgICAgY3JlYXRlZF9hdDogdXNlckluZm8uY3JlYXRlZF9hdCxcbiAgICAgIHVwZGF0ZWRfYXQ6IHVzZXJJbmZvLnVwZGF0ZWRfYXQsXG4gICAgICBpc19hbm9ueW1vdXM6IHVzZXJJbmZvLm5hbWUgPT09ICdhbm9ueW1vdXMnLFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDlj4LmlbDmoKHpqozovoXliqnmlrnms5VcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVQYXJhbXMocGFyYW1zOiBhbnksIHJ1bGVzOiB7IFtrZXk6IHN0cmluZ106IHsgcmVxdWlyZWQ/OiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSB9KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBba2V5LCBydWxlXSBvZiBPYmplY3QuZW50cmllcyhydWxlcykpIHtcbiAgICAgIGlmIChydWxlLnJlcXVpcmVkICYmIChwYXJhbXM/LltrZXldID09PSB1bmRlZmluZWQgfHwgcGFyYW1zPy5ba2V5XSA9PT0gbnVsbCB8fCBwYXJhbXM/LltrZXldID09PSAnJykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF1dGhFcnJvcih7IG1lc3NhZ2U6IHJ1bGUubWVzc2FnZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmoKHpqozlv4Xloavlj4LmlbDnu4TvvIjoh7PlsJHmnInkuIDkuKrlj4LmlbDlv4XpobvmnInlgLzvvIlcbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVBdExlYXN0T25lKHBhcmFtczogYW55LCBmaWVsZEdyb3Vwczogc3RyaW5nW11bXSwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaGFzVmFsdWUgPSBmaWVsZEdyb3Vwcy5zb21lKGdyb3VwID0+IGdyb3VwLnNvbWUoZmllbGQgPT4gcGFyYW1zPy5bZmllbGRdICE9PSB1bmRlZmluZWQgJiYgcGFyYW1zPy5bZmllbGRdICE9PSBudWxsICYmIHBhcmFtcz8uW2ZpZWxkXSAhPT0gJycpLClcblxuICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBBdXRoRXJyb3IoeyBtZXNzYWdlIH0pXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0KCk6IFByb21pc2U8eyBlcnJvcjogRXJyb3IgfCBudWxsIH0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5vYXV0aEluc3RhbmNlLm9hdXRoMmNsaWVudC5sb2NhbENyZWRlbnRpYWxzLmdldENyZWRlbnRpYWxzKClcbiAgICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgICB0aGlzLmNvbmZpZy5ldmVudEJ1cz8uZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7IGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5JTklUSUFMX1NFU1NJT04gfSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSWdub3JlIGVycm9ycyB3aGVuIGNoZWNraW5nIGZvciBleGlzdGluZyBjcmVkZW50aWFsc1xuICAgIH1cblxuICAgIHJldHVybiB7IGVycm9yOiBudWxsIH1cbiAgfVxufVxuXG50eXBlIFRJbml0QXV0aE9wdGlvbnMgPSBQaWNrPFxuSUNsb3VkYmFzZUF1dGhDb25maWcsXG4ncmVnaW9uJyB8ICdwZXJzaXN0ZW5jZScgfCAnaTE4bicgfCAnYWNjZXNzS2V5JyB8ICd1c2VXeENsb3VkJyB8ICdhdXRoJ1xuPiAmXG5QYXJ0aWFsPEF1dGhPcHRpb25zPiAmIHtcbiAgZGV0ZWN0U2Vzc2lvbkluVXJsPzogYm9vbGVhblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBdXRoSW5zdGFuY2UoXG4gIGNvbmZpZzogVEluaXRBdXRoT3B0aW9ucyAmIHsgc2RrVmVyc2lvbj86IHN0cmluZyB9LFxuICBvcHRpb25zPzoge1xuICAgIGNsaWVudElkOiBJQ2xvdWRiYXNlQ29uZmlnWydjbGllbnRJZCddXG4gICAgZW52OiBJQ2xvdWRiYXNlQ29uZmlnWydlbnYnXVxuICAgIGFwaU9yaWdpbjogc3RyaW5nXG4gICAgY2FjaGU/OiBJQ2xvdWRiYXNlQ2FjaGVcbiAgICBwbGF0Zm9ybT86IElDbG91ZGJhc2VbJ3BsYXRmb3JtJ11cbiAgICBhcHA/OiBJQ2xvdWRiYXNlXG4gICAgZGVidWc/OiBJQ2xvdWRiYXNlQXV0aENvbmZpZ1snZGVidWcnXVxuICAgIGRldGVjdFNlc3Npb25JblVybD86IElDbG91ZGJhc2VBdXRoQ29uZmlnWydkZXRlY3RTZXNzaW9uSW5VcmwnXVxuICB9LFxuKSB7XG4gIGNvbnN0IHsgcmVnaW9uID0gJ2FwLXNoYW5naGFpJywgaTE4biwgYWNjZXNzS2V5LCB1c2VXeENsb3VkIH0gPSBjb25maWdcbiAgY29uc3QgcGxhdGZvcm0gPSBvcHRpb25zPy5wbGF0Zm9ybSB8fCAodXNlRGVmYXVsdEFkYXB0ZXIuYmluZChvcHRpb25zKSgpIGFzIElDbG91ZGJhc2VQbGF0Zm9ybUluZm8pXG4gIGNvbnN0IHsgcnVudGltZSwgYWRhcHRlciB9ID0gcGxhdGZvcm1cblxuICBjb25zdCB7IGVudiwgY2xpZW50SWQsIGRlYnVnLCBjYWNoZSwgYXBwOiBjbG91ZGJhc2UgfSA9IG9wdGlvbnMgfHwge31cbiAgbGV0IHsgYXBpT3JpZ2luIH0gPSBvcHRpb25zIHx8IHt9XG4gIGlmICghYXBpT3JpZ2luKSB7XG4gICAgYXBpT3JpZ2luID0gYGh0dHBzOi8vJHtlbnZ9LiR7cmVnaW9ufS50Y2ItYXBpLnRlbmNlbnRjbG91ZGFwaS5jb21gXG4gIH1cblxuICBjb25zdCBjb21tb25PcHRzID0ge1xuICAgIGVudixcbiAgICBjbGllbnRJZCxcbiAgICBpMThuLFxuICAgIGFjY2Vzc0tleSxcbiAgICB1c2VXeENsb3VkLFxuICAgIGV2ZW50QnVzOiBuZXcgQ2xvdWRiYXNlRXZlbnRFbWl0dGVyKCksXG4gIH1cblxuICBjb25zdCBvYXV0aEluc3RhbmNlID0gbmV3IENsb3VkYmFzZU9BdXRoKHVzZUF1dGhBZGFwdGVyKHtcbiAgICAuLi5jb21tb25PcHRzLFxuICAgIGFwaU9yaWdpbixcbiAgICBhcGlQYXRoOiBjb25maWc/LmFwaVBhdGggfHwgQVVUSF9BUElfUFJFRklYLFxuICAgIC8vIEB0b2RvIOS7peS4i+acgOWlvei1sGFkYXB0b3LlpITnkIbvvIznm67liY1vYXV0aOaooeWdl+ayoeaMiWFkYXB0b3LmjqXlj6Porr7orqFcbiAgICBzdG9yYWdlOiBjb25maWc/LnN0b3JhZ2UsXG4gICAgYmFzZVJlcXVlc3Q6IGNvbmZpZz8uYmFzZVJlcXVlc3QsXG4gICAgcmVxdWVzdDogY29uZmlnPy5yZXF1ZXN0LFxuICAgIGFub255bW91c1NpZ25JbkZ1bmM6IGNvbmZpZz8uYW5vbnltb3VzU2lnbkluRnVuYyxcbiAgICBjYXB0Y2hhT3B0aW9uczogY29uZmlnPy5jYXB0Y2hhT3B0aW9ucyxcbiAgICB3eENsb3VkOiBjb25maWc/Lnd4Q2xvdWQsXG4gICAgYWRhcHRlcixcbiAgICBvbkNyZWRlbnRpYWxzRXJyb3I6IG9uQ3JlZGVudGlhbHNFcnJvcihjb21tb25PcHRzLmV2ZW50QnVzKSxcbiAgICBoZWFkZXJzOiB7ICdYLVNESy1WZXJzaW9uJzogYEBjbG91ZGJhc2UvanMtc2RrLyR7Y29uZmlnLnNka1ZlcnNpb259YCwgLi4uKGNvbmZpZy5oZWFkZXJzIHx8IHt9KSB9LFxuICAgIGRldGVjdFNlc3Npb25JblVybDogY29uZmlnLmRldGVjdFNlc3Npb25JblVybCxcbiAgICBkZWJ1ZyxcbiAgICBhdXRoOiBvcHRpb25zLmFwcD8uY29uZmlnPy5hdXRoLFxuICB9KSwpXG5cbiAgY29uc3QgYXV0aEluc3RhbmNlID0gbmV3IEF1dGgoe1xuICAgIC4uLmNvbW1vbk9wdHMsXG4gICAgcmVnaW9uLFxuICAgIHBlcnNpc3RlbmNlOiBjb25maWcucGVyc2lzdGVuY2UsXG4gICAgZGVidWcsXG4gICAgY2FjaGU6XG4gICAgICBjYWNoZSB8fCBuZXcgQ2xvdWRiYXNlQ2FjaGUoe1xuICAgICAgICBwZXJzaXN0ZW5jZTogY29uZmlnLnBlcnNpc3RlbmNlLFxuICAgICAgICBrZXlzOiB7IHVzZXJJbmZvS2V5OiBgdXNlcl9pbmZvXyR7ZW52fWAgfSxcbiAgICAgICAgcGxhdGZvcm1JbmZvOiBwbGF0Zm9ybSxcbiAgICAgIH0pLFxuICAgIHJ1bnRpbWU6IHJ1bnRpbWUgfHwgJ3dlYicsXG4gICAgX2Zyb21BcHA6IGNsb3VkYmFzZSxcbiAgICBvYXV0aEluc3RhbmNlLFxuICAgIGF1dGg6IG9wdGlvbnMuYXBwPy5jb25maWc/LmF1dGgsXG4gIH0pXG5cbiAgLy8gSW5pdGlhbGl6ZSBzZXNzaW9uIHdpdGggdXNlciBpbmZvIGNhbGxiYWNrXG4gIC8vIFRoaXMgaGFuZGxlcyBPQXV0aCBjYWxsYmFjayBVUkwgZGV0ZWN0aW9uIGFuZCBjcmVhdGVzIGxvZ2luIHN0YXRlIGF0b21pY2FsbHlcbiAgb2F1dGhJbnN0YW5jZS5pbml0aWFsaXplU2Vzc2lvbihhc3luYyAoZGF0YSwgZXJyb3IpID0+IHtcbiAgICBpZiAoIWRhdGEpIHJldHVyblxuXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gT0FVVEhfVFlQRS5TSUdOX0lOKSB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY29tbW9uT3B0cy5ldmVudEJ1cy5maXJlKEVWRU5UUy5BVVRIX1NUQVRFX0NIQU5HRUQsIHtcbiAgICAgICAgICBldmVudDogQVVUSF9TVEFURV9DSEFOR0VEX1RZUEUuU0lHTkVEX0lOLFxuICAgICAgICAgIGluZm86IHsgLi4uZGF0YSwgZXJyb3IgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS51c2VyKSB7XG4gICAgICAgIC8vIOS9v+eUqOW3suiOt+WPlueahCB1c2VyIOS/oeaBr+WIm+W7uiBMb2dpblN0YXRl77yM5aSN55SoIGNyZWF0ZUxvZ2luU3RhdGUg6YC76L6RXG4gICAgICAgIC8vIOS9hui3s+i/hyByZWZyZXNoKCkg6YG/5YWN5YaN5qyh6K+35rGCIEFQSSDlr7zoh7TmrbvplIFcbiAgICAgICAgYXV0aEluc3RhbmNlLmNyZWF0ZUxvZ2luU3RhdGUoe30sIHsgdXNlckluZm86IGRhdGEudXNlciB9KVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSBPQVVUSF9UWVBFLkJJTkRfSURFTlRJVFkpIHtcbiAgICAgIGNvbW1vbk9wdHMuZXZlbnRCdXMuZmlyZShFVkVOVFMuQVVUSF9TVEFURV9DSEFOR0VELCB7XG4gICAgICAgIGV2ZW50OiBBVVRIX1NUQVRFX0NIQU5HRURfVFlQRS5CSU5EX0lERU5USVRZLFxuICAgICAgICBpbmZvOiB7IC4uLmRhdGEsIGVycm9yIH0sXG4gICAgICB9KVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4geyBhdXRoSW5zdGFuY2UsIG9hdXRoSW5zdGFuY2UgfVxufVxuXG5jb25zdCBOQU1FU1BBQ0UgPSAnYXV0aCdcblxuY29uc3QgY29tcG9uZW50OiBJQ2xvdWRiYXNlQ29tcG9uZW50ID0ge1xuICBuYW1lOiBDT01QT05FTlRfTkFNRSxcbiAgbmFtZXNwYWNlOiBOQU1FU1BBQ0UsXG4gIGVudGl0eShjb25maWc/OiBUSW5pdEF1dGhPcHRpb25zKSB7XG4gICAgY29uc3QgYXV0aCA9IGZ1bmN0aW9uIChjb25maWc/OiBUSW5pdEF1dGhPcHRpb25zKSB7XG4gICAgICBpZiAodGhpcy5hdXRoSW5zdGFuY2UgJiYgIWNvbmZpZykge1xuICAgICAgICAvLyBwcmludFdhcm4oRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLCAnZXZlcnkgY2xvdWRiYXNlIGluc3RhbmNlIHNob3VsZCBoYXMgb25seSBvbmUgYXV0aCBvYmplY3QnKVxuICAgICAgICByZXR1cm4gdGhpcy5hdXRoSW5zdGFuY2VcbiAgICAgIH1cblxuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHtcbiAgICAgICAgcmVnaW9uOiAnJyxcbiAgICAgICAgcGVyc2lzdGVuY2U6ICdsb2NhbCcsXG4gICAgICAgIGFwaVBhdGg6IEFVVEhfQVBJX1BSRUZJWCxcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYWRhcHRlciB9ID0gdGhpcy5wbGF0Zm9ybVxuICAgICAgLy8g5aaC5LiN5piO56Gu5oyH5a6acGVyc2lzdGVuY2XliJnkvJjlhYjlj5blkITlubPlj7BhZGFwdGVy6aaW6YCJ77yM5YW25qyhbG9jYWxTdG9yYWdlXG4gICAgICBjb25zdCBuZXdQZXJzaXN0ZW5jZSA9IGNvbmZpZy5wZXJzaXN0ZW5jZSB8fCBhZGFwdGVyLnByaW1hcnlTdG9yYWdlXG4gICAgICBpZiAobmV3UGVyc2lzdGVuY2UgJiYgbmV3UGVyc2lzdGVuY2UgIT09IHRoaXMuY29uZmlnLnBlcnNpc3RlbmNlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHsgcGVyc2lzdGVuY2U6IG5ld1BlcnNpc3RlbmNlIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXV0aEluc3RhbmNlLCBvYXV0aEluc3RhbmNlIH0gPSBnZW5lcmF0ZUF1dGhJbnN0YW5jZShcbiAgICAgICAge1xuICAgICAgICAgIHd4Q2xvdWQ6IHRoaXMuY29uZmlnLnd4Q2xvdWQsXG4gICAgICAgICAgc3RvcmFnZTogdGhpcy5jb25maWcuc3RvcmFnZSxcbiAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgcGVyc2lzdGVuY2U6IHRoaXMuY29uZmlnLnBlcnNpc3RlbmNlLFxuICAgICAgICAgIGkxOG46IHRoaXMuY29uZmlnLmkxOG4sXG4gICAgICAgICAgYWNjZXNzS2V5OiB0aGlzLmNvbmZpZy5hY2Nlc3NLZXksXG4gICAgICAgICAgdXNlV3hDbG91ZDogdGhpcy5jb25maWcudXNlV3hDbG91ZCxcbiAgICAgICAgICBzZGtWZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgICAgZGV0ZWN0U2Vzc2lvbkluVXJsOiB0aGlzLmNvbmZpZy5hdXRoPy5kZXRlY3RTZXNzaW9uSW5VcmwsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBlbnY6IHRoaXMuY29uZmlnLmVudixcbiAgICAgICAgICBjbGllbnRJZDogdGhpcy5jb25maWcuY2xpZW50SWQsXG4gICAgICAgICAgYXBpT3JpZ2luOiB0aGlzLnJlcXVlc3QuZ2V0QmFzZUVuZFBvaW50KHRoaXMuY29uZmlnLmVuZFBvaW50TW9kZSB8fCAnQ0xPVURfQVBJJyksXG4gICAgICAgICAgcGxhdGZvcm06IHRoaXMucGxhdGZvcm0sXG4gICAgICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICAgICAgYXBwOiB0aGlzLFxuICAgICAgICAgIGRlYnVnOiB0aGlzLmNvbmZpZy5kZWJ1ZyxcbiAgICAgICAgfSxcbiAgICAgIClcblxuICAgICAgdGhpcy5vYXV0aEluc3RhbmNlID0gb2F1dGhJbnN0YW5jZVxuXG4gICAgICB0aGlzLmF1dGhJbnN0YW5jZSA9IGF1dGhJbnN0YW5jZVxuXG4gICAgICByZXR1cm4gdGhpcy5hdXRoSW5zdGFuY2VcbiAgICB9XG5cbiAgICBjb25zdCBhdXRoUHJvdG8gPSBhdXRoLmNhbGwodGhpcywgY29uZmlnKVxuICAgIE9iamVjdC5hc3NpZ24oYXV0aCwgYXV0aFByb3RvKVxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihhdXRoLCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXV0aFByb3RvKSlcbiAgICB0aGlzW05BTUVTUEFDRV0gPSBhdXRoXG4gICAgcmV0dXJuIGF1dGhcbiAgfSxcbn1cblxudHJ5IHtcbiAgLy8g5bCd6K+V6Ieq5Yqo5rOo5YaM6Iez5YWo5bGA5Y+Y6YePY2xvdWRiYXNlXG4gIC8vIOatpOihjOS4uuWPquWcqOa1j+iniOWZqOeOr+Wig+S4i+acieaViFxuICBjbG91ZGJhc2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxufSBjYXRjaCAoZSkge31cblxuZXhwb3J0IHsgVXNlckluZm8sIEF1dGggfVxuLyoqXG4gKiBAYXBpIOaJi+WKqOazqOWGjOiHs2Nsb3VkYmFzZSBhcHBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXV0aChhcHA6IFBpY2s8SUNsb3VkYmFzZSwgJ3JlZ2lzdGVyQ29tcG9uZW50Jz4pIHtcbiAgdHJ5IHtcbiAgICBhcHAucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKGUpXG4gIH1cbn1cbiJdfQ==
|