vcomply-workflow-engine 7.4.3 → 7.4.4
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/esm2022/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.mjs +184 -30
- package/esm2022/lib/constants/responsibility.mjs +44 -1
- package/esm2022/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.mjs +3 -3
- package/esm2022/lib/workflow-compliance/workflow-compliance.component.mjs +28 -5
- package/fesm2022/vcomply-workflow-engine.mjs +254 -34
- package/fesm2022/vcomply-workflow-engine.mjs.map +1 -1
- package/lib/add-multiple-responsibility-with-tab/add-multiple-responsibility-with-tab.component.d.ts +18 -0
- package/lib/constants/responsibility.d.ts +7 -0
- package/lib/sharedComponents/bulk-responsibility-view/bulk-responsibility-view.component.d.ts +1 -0
- package/lib/workflow-compliance/workflow-compliance.component.d.ts +2 -1
- package/lib/workflow-risk/workflow-risk.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -3,7 +3,7 @@ import { cloneDeep } from 'lodash-es';
|
|
|
3
3
|
import moment from 'moment/moment';
|
|
4
4
|
import * as XLSX from 'xlsx';
|
|
5
5
|
import { RESPONSIBILITY } from '../constants/xlsx.constant';
|
|
6
|
-
import { FULL_MONTH_NAMES, RISK_CLASS_LIST, VALIDATION_MESSAGES } from '../constants/responsibility';
|
|
6
|
+
import { ASSIGNEE_TYPE_DROPDOWN_LIST, FREQUENCY_DROPDOWN_LIST, FULL_MONTH_NAMES, PROGRAM_TYPE_DROPDOWN_LIST, RC_TYPE_DROPDOWN_LIST, REVIEWER_TYPE_DROPDOWN_LIST, RISK_CLASS_LIST, VALIDATION_MESSAGES, YES_NO_DROPDOWN_LIST, } from '../constants/responsibility';
|
|
7
7
|
import { REGEX } from '../constants/regix.constants';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
import * as i1 from "../workflow-services/add-risk.service";
|
|
@@ -785,28 +785,27 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
785
785
|
this.templateInfo.assignorsList.push(assignor);
|
|
786
786
|
}
|
|
787
787
|
});
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
// }
|
|
788
|
+
/* Creating a list of child categories and attaching them to their parent program */
|
|
789
|
+
if (this.templateInfo.categoryList?.length) {
|
|
790
|
+
this.templateInfo.categoryList.forEach((program, i) => {
|
|
791
|
+
const index = (tempList[0] || []).findIndex((cell) => cell == program?.programId);
|
|
792
|
+
if (index !== -1) {
|
|
793
|
+
const childCategory = [];
|
|
794
|
+
for (let j = 1; true; j++) {
|
|
795
|
+
if (tempList[j] && tempList[j][index]) {
|
|
796
|
+
childCategory.push({
|
|
797
|
+
name: tempList[j][index - 1],
|
|
798
|
+
id: tempList[j][index],
|
|
799
|
+
});
|
|
800
|
+
}
|
|
801
|
+
else {
|
|
802
|
+
break;
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
this.templateInfo.categoryList[i]['childCategory'] = childCategory;
|
|
806
|
+
}
|
|
807
|
+
});
|
|
808
|
+
}
|
|
810
809
|
}
|
|
811
810
|
getProgramDetails(element, index, type) {
|
|
812
811
|
if (element[index.id] && typeof element[index.id] === 'number') {
|
|
@@ -995,7 +994,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
995
994
|
obj['isValidDueTime'] &&
|
|
996
995
|
obj['isValidEndsAfterOccurrences'] &&
|
|
997
996
|
obj['isValidEndsByDate'];
|
|
998
|
-
return obj;
|
|
997
|
+
return this.withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
|
|
999
998
|
}
|
|
1000
999
|
else {
|
|
1001
1000
|
obj = {
|
|
@@ -1050,7 +1049,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1050
1049
|
obj['isValidDueTime'] &&
|
|
1051
1050
|
obj['isValidEndsAfterOccurrences'] &&
|
|
1052
1051
|
obj['isValidEndsByDate'];
|
|
1053
|
-
return obj;
|
|
1052
|
+
return this.withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
|
|
1054
1053
|
}
|
|
1055
1054
|
break;
|
|
1056
1055
|
}
|
|
@@ -1093,7 +1092,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1093
1092
|
obj['isValidUser'];
|
|
1094
1093
|
obj['isValidUser'] &&
|
|
1095
1094
|
this.isValidRiskClass(obj?.reportClass);
|
|
1096
|
-
return obj;
|
|
1095
|
+
return this.withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
|
|
1097
1096
|
}
|
|
1098
1097
|
else {
|
|
1099
1098
|
obj = {
|
|
@@ -1129,7 +1128,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1129
1128
|
: false;
|
|
1130
1129
|
obj['isValid'] = obj['isValidData'] && obj['isValidUser'] &&
|
|
1131
1130
|
this.isValidRiskClass(obj?.reportClass);
|
|
1132
|
-
return obj;
|
|
1131
|
+
return this.withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
|
|
1133
1132
|
}
|
|
1134
1133
|
}
|
|
1135
1134
|
case 'onCompletion': {
|
|
@@ -1176,7 +1175,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1176
1175
|
obj?.parentResponsibility?.length &&
|
|
1177
1176
|
obj['isValidUser'] &&
|
|
1178
1177
|
this.isValidRiskClass(obj?.reportClass);
|
|
1179
|
-
return obj;
|
|
1178
|
+
return this.withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
|
|
1180
1179
|
}
|
|
1181
1180
|
else {
|
|
1182
1181
|
obj = {
|
|
@@ -1216,7 +1215,7 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1216
1215
|
obj?.parentResponsibility?.length &&
|
|
1217
1216
|
obj['isValidUser'] &&
|
|
1218
1217
|
this.isValidRiskClass(obj?.reportClass);
|
|
1219
|
-
return obj;
|
|
1218
|
+
return this.withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
|
|
1220
1219
|
}
|
|
1221
1220
|
}
|
|
1222
1221
|
default: {
|
|
@@ -1228,6 +1227,161 @@ export class AddMultipleResponsibilityWithTabComponent {
|
|
|
1228
1227
|
return true;
|
|
1229
1228
|
return RISK_CLASS_LIST.includes(riskClass?.toLowerCase());
|
|
1230
1229
|
}
|
|
1230
|
+
/**
|
|
1231
|
+
* Adds dropdown-list checks on top of existing row validation.
|
|
1232
|
+
* Empty optional cells are valid. Frequency / due date / due time are skipped for ongoing.
|
|
1233
|
+
*/
|
|
1234
|
+
withDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns = false) {
|
|
1235
|
+
if (!obj) {
|
|
1236
|
+
return obj;
|
|
1237
|
+
}
|
|
1238
|
+
this.applyDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns);
|
|
1239
|
+
obj['isValid'] = !!obj['isValid'] && !!obj['isValidDropdown'];
|
|
1240
|
+
return obj;
|
|
1241
|
+
}
|
|
1242
|
+
applyDropdownValidation(obj, tabType, isProgram, hasExtendedFrequencyColumns = false) {
|
|
1243
|
+
const reviewerNames = this.getTemplateListNames(this.templateInfo?.reviewerList, 'nameAndEmail');
|
|
1244
|
+
const assigneeNames = this.getTemplateListNames(this.templateInfo?.assigneesList, 'nameAndEmail');
|
|
1245
|
+
const programCategoryNames = this.getProgramCategoryNames();
|
|
1246
|
+
const dropdownValidation = {
|
|
1247
|
+
programType: true,
|
|
1248
|
+
program: true,
|
|
1249
|
+
programCategory: true,
|
|
1250
|
+
assignor: true,
|
|
1251
|
+
assignee: true,
|
|
1252
|
+
assigneeType: true,
|
|
1253
|
+
keyResponsibility: true,
|
|
1254
|
+
frequency: true,
|
|
1255
|
+
day: true,
|
|
1256
|
+
month: true,
|
|
1257
|
+
dueTime: true,
|
|
1258
|
+
responsibilityCenter: true,
|
|
1259
|
+
responsibilityCenterType: true,
|
|
1260
|
+
reportClass: true,
|
|
1261
|
+
isFormat: true,
|
|
1262
|
+
documentEvidenceRequired: true,
|
|
1263
|
+
reviewer: true,
|
|
1264
|
+
reviewerType: true,
|
|
1265
|
+
overseer: true,
|
|
1266
|
+
notifyOnFailure: true,
|
|
1267
|
+
collaborator: true,
|
|
1268
|
+
};
|
|
1269
|
+
if (isProgram) {
|
|
1270
|
+
dropdownValidation.programType = this.isInStaticDropdown(obj?.programType, PROGRAM_TYPE_DROPDOWN_LIST);
|
|
1271
|
+
dropdownValidation.program = this.isInDropdownList(obj?.program, this.getTemplateListNames(this.templateInfo?.categoryList, 'programName'));
|
|
1272
|
+
dropdownValidation.programCategory = programCategoryNames.length
|
|
1273
|
+
? this.isInDropdownList(obj?.programCategory, programCategoryNames)
|
|
1274
|
+
: true;
|
|
1275
|
+
}
|
|
1276
|
+
dropdownValidation.assignor = this.isInUserDropdown(obj?.assignor);
|
|
1277
|
+
dropdownValidation.assignee = this.isInDropdownList(obj?.assignee, assigneeNames);
|
|
1278
|
+
dropdownValidation.assigneeType = this.isInStaticDropdown(obj?.assigneeType, ASSIGNEE_TYPE_DROPDOWN_LIST);
|
|
1279
|
+
dropdownValidation.keyResponsibility = this.isInStaticDropdown(obj?.keyResponsibility, YES_NO_DROPDOWN_LIST);
|
|
1280
|
+
if (tabType === 'frequency') {
|
|
1281
|
+
dropdownValidation.frequency = this.isInStaticDropdown(obj?.frequency, FREQUENCY_DROPDOWN_LIST);
|
|
1282
|
+
dropdownValidation.day = this.isValidDropdownDay(obj?.day);
|
|
1283
|
+
dropdownValidation.month = this.isValidDropdownMonth(obj?.month);
|
|
1284
|
+
if (hasExtendedFrequencyColumns) {
|
|
1285
|
+
dropdownValidation.dueTime = this.isValidDueTime(obj?.dueTime, true);
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1288
|
+
dropdownValidation.responsibilityCenter = this.isInDropdownList(obj?.responsibilityCenter, this.getTemplateListNames(this.templateInfo?.rcList, 'name'));
|
|
1289
|
+
dropdownValidation.responsibilityCenterType = this.isInStaticDropdown(obj?.responsibilityCenterType, RC_TYPE_DROPDOWN_LIST);
|
|
1290
|
+
dropdownValidation.reportClass = this.isValidRiskClass(obj?.reportClass);
|
|
1291
|
+
dropdownValidation.isFormat = this.isInStaticDropdown(obj?.isFormat, YES_NO_DROPDOWN_LIST);
|
|
1292
|
+
dropdownValidation.documentEvidenceRequired = this.isInStaticDropdown(obj?.documentEvidenceRequired, YES_NO_DROPDOWN_LIST);
|
|
1293
|
+
dropdownValidation.reviewer = this.isInDropdownList(obj?.reviewer, reviewerNames);
|
|
1294
|
+
dropdownValidation.reviewerType = this.isInStaticDropdown(obj?.reviewerType, REVIEWER_TYPE_DROPDOWN_LIST);
|
|
1295
|
+
dropdownValidation.overseer = this.isInDropdownList(obj?.overseer, reviewerNames);
|
|
1296
|
+
dropdownValidation.notifyOnFailure = this.isInDropdownList(obj?.notifyOnFailure, reviewerNames);
|
|
1297
|
+
dropdownValidation.collaborator = this.isInDropdownList(obj?.collaborator, [
|
|
1298
|
+
...assigneeNames,
|
|
1299
|
+
...reviewerNames,
|
|
1300
|
+
]);
|
|
1301
|
+
obj['dropdownValidation'] = dropdownValidation;
|
|
1302
|
+
obj['isValidDropdown'] = !Object.values(dropdownValidation).includes(false);
|
|
1303
|
+
}
|
|
1304
|
+
getTemplateListNames(list = [], key) {
|
|
1305
|
+
return (list || [])
|
|
1306
|
+
.map((item) => item?.[key])
|
|
1307
|
+
.filter((name) => this.hasValue(name))
|
|
1308
|
+
.map((name) => String(name).trim());
|
|
1309
|
+
}
|
|
1310
|
+
getProgramCategoryNames() {
|
|
1311
|
+
const names = [];
|
|
1312
|
+
(this.templateInfo?.categoryList || []).forEach((program) => {
|
|
1313
|
+
(program?.childCategory || []).forEach((category) => {
|
|
1314
|
+
if (this.hasValue(category?.name)) {
|
|
1315
|
+
names.push(String(category.name).trim());
|
|
1316
|
+
}
|
|
1317
|
+
});
|
|
1318
|
+
});
|
|
1319
|
+
return names;
|
|
1320
|
+
}
|
|
1321
|
+
getAssignorDropdownNames() {
|
|
1322
|
+
const names = [];
|
|
1323
|
+
(this.templateInfo?.assignorsList || []).forEach((assignor) => {
|
|
1324
|
+
if (this.hasValue(assignor?.nameAndEmail)) {
|
|
1325
|
+
names.push(String(assignor.nameAndEmail).trim());
|
|
1326
|
+
}
|
|
1327
|
+
if (this.hasValue(assignor?.name)) {
|
|
1328
|
+
names.push(String(assignor.name).trim());
|
|
1329
|
+
}
|
|
1330
|
+
if (this.hasValue(assignor?.name) && this.hasValue(assignor?.email)) {
|
|
1331
|
+
names.push(`${String(assignor.name).trim()} (${String(assignor.email).trim()})`);
|
|
1332
|
+
}
|
|
1333
|
+
});
|
|
1334
|
+
return names;
|
|
1335
|
+
}
|
|
1336
|
+
/**
|
|
1337
|
+
* Entrusted By in the xlsx dropdown is the people list in `Name (email)` form
|
|
1338
|
+
* (same source as Entrusted To / Reviewer), not the assignor name-only column.
|
|
1339
|
+
*/
|
|
1340
|
+
isInUserDropdown(value) {
|
|
1341
|
+
if (!this.hasValue(value)) {
|
|
1342
|
+
return true;
|
|
1343
|
+
}
|
|
1344
|
+
if (this.returnIds(value, 'entrusted_to')) {
|
|
1345
|
+
return true;
|
|
1346
|
+
}
|
|
1347
|
+
if (this.returnIds(value, 'reviewer')?.name) {
|
|
1348
|
+
return true;
|
|
1349
|
+
}
|
|
1350
|
+
const peopleNames = [
|
|
1351
|
+
...this.getAssignorDropdownNames(),
|
|
1352
|
+
...this.getTemplateListNames(this.templateInfo?.assigneesList, 'nameAndEmail'),
|
|
1353
|
+
...this.getTemplateListNames(this.templateInfo?.reviewerList, 'nameAndEmail'),
|
|
1354
|
+
];
|
|
1355
|
+
const normalized = String(value).trim().toLowerCase();
|
|
1356
|
+
return peopleNames.some((name) => String(name).trim().toLowerCase() === normalized);
|
|
1357
|
+
}
|
|
1358
|
+
isInStaticDropdown(value, options) {
|
|
1359
|
+
if (!this.hasValue(value)) {
|
|
1360
|
+
return true;
|
|
1361
|
+
}
|
|
1362
|
+
const normalized = String(value).trim().toLowerCase();
|
|
1363
|
+
return options.some((option) => option.toLowerCase() === normalized);
|
|
1364
|
+
}
|
|
1365
|
+
isInDropdownList(value, options) {
|
|
1366
|
+
if (!this.hasValue(value)) {
|
|
1367
|
+
return true;
|
|
1368
|
+
}
|
|
1369
|
+
const normalized = String(value).trim();
|
|
1370
|
+
return options.some((option) => option === normalized);
|
|
1371
|
+
}
|
|
1372
|
+
isValidDropdownDay(value) {
|
|
1373
|
+
if (!this.hasValue(value)) {
|
|
1374
|
+
return true;
|
|
1375
|
+
}
|
|
1376
|
+
const dayNumber = Number(String(value).trim());
|
|
1377
|
+
return Number.isInteger(dayNumber) && dayNumber >= 1 && dayNumber <= 31;
|
|
1378
|
+
}
|
|
1379
|
+
isValidDropdownMonth(value) {
|
|
1380
|
+
if (!this.hasValue(value)) {
|
|
1381
|
+
return true;
|
|
1382
|
+
}
|
|
1383
|
+
return REGEX.ENDS_BY_DATE_MONTH.test(String(value).trim());
|
|
1384
|
+
}
|
|
1231
1385
|
isValidDueTime(dueTime, hasExtendedFrequencyColumns = false) {
|
|
1232
1386
|
if (!hasExtendedFrequencyColumns) {
|
|
1233
1387
|
return true;
|
|
@@ -1600,4 +1754,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1600
1754
|
}], featureflag: [{
|
|
1601
1755
|
type: Input
|
|
1602
1756
|
}] } });
|
|
1603
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBTzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDckcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7Ozs7Ozs7O0FBWXJELE1BQU0sT0FBTyx5Q0FBeUM7SUFzQnBELElBQTJCLGdCQUFnQixDQUFDLElBQVM7UUFDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBMEZELFlBQ1UsV0FBMkIsRUFDM0IscUJBQTRDLEVBQzVDLFdBQXdCLEVBQ3hC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a0JBUnJELFNBQVM7K0JBQ0UsMENBQTBDO2dRQVExQyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRUcsOEJBQThCO3NCQUF2QyxNQUFNO2dCQWdCb0IsZ0JBQWdCO3NCQUExQyxLQUFLO3VCQUFDLGNBQWM7Z0JBR1osVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBa0ZHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC9tb21lbnQnO1xyXG5pbXBvcnQgKiBhcyBYTFNYIGZyb20gJ3hsc3gnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRkUmlza1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hZGQtcmlzay5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGcmVxdWVuY3lCdWxrU2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL2ZyZXF1ZW5jeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvcmVzcG9uc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IElmcmFtZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9pZnJhbWUuc2VydmljZSc7XHJcbmltcG9ydCB7IFJFU1BPTlNJQklMSVRZIH0gZnJvbSAnLi4vY29uc3RhbnRzL3hsc3guY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBGVUxMX01PTlRIX05BTUVTLCBSSVNLX0NMQVNTX0xJU1QsIFZBTElEQVRJT05fTUVTU0FHRVMgfSBmcm9tICcuLi9jb25zdGFudHMvcmVzcG9uc2liaWxpdHknO1xyXG5pbXBvcnQgeyBSRUdFWCB9IGZyb20gJy4uL2NvbnN0YW50cy9yZWdpeC5jb25zdGFudHMnO1xyXG5cclxudHlwZSBBT0EgPSBhbnlbXVtdO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFtcclxuICAgICcuL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQubGVzcycsXHJcbiAgICAnLi4vZm9ybXMubGVzcycsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHlXaXRoVGFiQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAT3V0cHV0KCkgcGlja2VyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgcG9wdWxhdGVPcHRpb24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGRpc2Nvbm5lY3RSZWZyZXNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGlzTm90aWZpY2F0aW9uUGVuZGluZyA9IDA7XHJcbiAgQE91dHB1dCgpIGNsb3NlQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBxdWVyeVBhcmFtOiBzdHJpbmcgPSAnJztcclxuICByZWNlbnRSZXNwb25zaWJpbGl0eVVybDogYW55ID0ge1xyXG4gICAgYnlSZXNwb25zaWJpbGl0aWVzOiB7IHR5cGU6IFsncmVjZW50X3Jlc3BvbnNpYmlsaXRpZXMnXSwgc3ViVHlwZTogWydDQyddIH0sXHJcbiAgICBieVN0YXR1czogeyB0eXBlOiBbXSwgc3ViVHlwZTogW10gfSxcclxuICAgIGZpbHRlck9iamVjdDoge1xyXG4gICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogW10sXHJcbiAgICAgIGVudHJ1c3RlZEJ5OiBbXSxcclxuICAgICAgZW50cnVzdGVkVG86IFtdLFxyXG4gICAgICByaXNrSWRzOiBbXSxcclxuICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogW10sXHJcbiAgICB9LFxyXG4gICAgdGltZVBlcmlvZERldGFpbHM6IHsgdHlwZTogJycsIHNlbGVjdGVkUGVyaW9kOiAnJywgc2VsZWN0ZWRZZWFyOiAnJyB9LFxyXG4gICAgc3RhdHVzOiAnJyxcclxuICB9O1xyXG5cclxuICBASW5wdXQoJ3VwbG9hZGVkRmlsZScpIHNldCB1cGxvYWRlZEZpbGVEYXRhKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy51cGxvYWRlZEZpbGUoZGF0YSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIG9yZ0RldGFpbHMhOiBhbnk7XHJcbiAgQElucHV0KCkgZmVhdHVyZSE6IGFueTtcclxuXHJcbiAgdXJsID1cclxuICAgICdxPXtcImJ5UmVzcG9uc2liaWxpdGllc1wiOntcInR5cGVcIjpbXCJyZXNwb25zaWJpbGl0aWVzX2luX3F1ZXVlXCJdLFwic3ViVHlwZVwiOltcIkNDXCJdfSxcImJ5U3RhdHVzXCI6e1widHlwZVwiOltcInJlc3BvbnNpYmlsaXRpZXNfaW5fcXVldWVcIl0sXCJzdWJUeXBlXCI6W119LFwiZmlsdGVyT2JqZWN0XCI6e1wicmVzcG9uc2liaWxpdHlDZW50ZXJcIjpbXSxcImVudHJ1c3RlZEJ5XCI6W10sXCJlbnRydXN0ZWRUb1wiOltdLFwicmlza0lkc1wiOltdLFwicmVzcG9uc2liaWxpdHlDYXRlZ29yeVwiOltdfSxcInRpbWVQZXJpb2REZXRhaWxzXCI6e1widHlwZVwiOlwiXCIsXCJzZWxlY3RlZFBlcmlvZFwiOlwiXCIsXCJzZWxlY3RlZFllYXJcIjpcIlwifSxcInN0YXR1c1wiOlwiXCJ9JztcclxuICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ6IGFueSA9IHtcclxuICAgIGhlYWRlcjogW10sXHJcbiAgICByZXBvcnRzOiBbXSxcclxuICB9O1xyXG4gIHRhYlR5cGU6ICdmcmVxdWVuY3knIHwgJ29uZ29pbmcnIHwgJ29uQ29tcGxldGlvbicgPSAnZnJlcXVlbmN5JztcclxuICB0YWJJbmRleDogYW55ID0ge1xyXG4gICAgZnJlcXVlbmN5OiAwLFxyXG4gICAgb25nb2luZzogMSxcclxuICAgIG9uQ29tcGxldGlvbjogMixcclxuICB9O1xyXG5cclxuICBidWxrVXBsb2FkOiBhbnkgPSB7XHJcbiAgICBmcmVxdWVuY3k6IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfSxcclxuICAgIG9uZ29pbmc6IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgfSxcclxuICAgIG9uQ29tcGxldGlvbjoge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgcmVwb3J0czogW10sXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIHRlbXBsYXRlSW5mbzogYW55ID0ge1xyXG4gICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgIHJjTGlzdDogW10sXHJcbiAgICBhc3NpZ25vcnNMaXN0OiBbXSxcclxuICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgcmV2aWV3ZXJMaXN0OiBbXSxcclxuICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiBbXSxcclxuICAgIG1lbWJlcklkOiAnJyxcclxuICB9O1xyXG4gIGlzTG9hZGVyID0gZmFsc2U7XHJcbiAgc2hvd0NhdGVnb3J5TGlzdCA9IGZhbHNlO1xyXG4gIHRlbXBsYXRlRG93bmxvYWRlZCA9IGZhbHNlO1xyXG4gIGRvd25sb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gIGxvYWRlciA9IGZhbHNlO1xyXG4gIGlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICBpc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgZmlsZU5hbWU6IGFueTtcclxuICBkYXRhOiBhbnk7XHJcbiAgc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgdXBsb2FkZWRGaWxlczogYW55ID0gW107XHJcbiAgZmlsZVJlc3BvbnNlOiBhbnkgPSBbXTtcclxuICBmaWxlVmFsdWU6IGFueTtcclxuICBtZW1iZXJJZCA9IDA7XHJcbiAgb3JnYW5pemF0aW9uSWQgPSAwO1xyXG4gIGVycm9yTWVzc2FnZSA9ICcgaW52YWxpZCBmaWxlIGVycm9yJztcclxuICBkb3dubG9hZFN0YXR1czogc3RyaW5nID0gJ05PVF9ET1dOTE9BRElORyc7XHJcbiAgZG93bmxvYWRQZXJjZW50ID0gMDtcclxuICBkZWZhdWx0T3duZXIgPSAnJztcclxuICBzbWlsZXlNZXNzYWdlID0gYFlvdSdyZSBBbGwgU2V0ISBXZSdyZSBwcm9jZXNzaW5nIHlvdXIgcmVxdWVzdCBhbmQgeW91IHdpbGwgYmUgbm90aWZpZWQgdmlhIGVtYWlsIHVwb24gY29tcGxldGlvbi5gO1xyXG4gIGFjdGlvbkJ1dHRvbnMgPSBbXHJcbiAgICB7XHJcbiAgICAgIGJ1dHRvblRleHQ6ICdFbnRydXN0IE1vcmUgUmVzcG9uc2liaWxpdGllcycsXHJcbiAgICAgIGNsYXNzOiAnd2hpdGUtYnRuJyxcclxuICAgICAgaWQ6ICdhZGRNb3JlJyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGJ1dHRvblRleHQ6IHRoaXMuaXNOb3RpZmljYXRpb25QZW5kaW5nXHJcbiAgICAgICAgPyAnVmlldyBSZXNwb25zaWJpbGl0aWVzIEluIFF1ZXVlJ1xyXG4gICAgICAgIDogJ1ZpZXcgUmVzcG9uc2liaWxpdGllcycsXHJcbiAgICAgIGNsYXNzOiAnYmx1ZS1idG4nLFxyXG4gICAgICBpZDogJ3ZpZXcnLFxyXG4gICAgfSxcclxuICBdO1xyXG4gIHNob3dTbWlsZXkgPSBmYWxzZTtcclxuICBtZW1iZXJfb2JqX2lkID0gJyc7XHJcbiAgcmlza0NsYXNzRW5hYmxlZDogYW55O1xyXG4gIHVzZXJJbmZvITogYW55O1xyXG4gIHJlc3BvbnNpYmlsaXR5RGF0YSE6IGFueTtcclxuICBASW5wdXQoKSBmZWF0dXJlZmxhZzogYW55O1xyXG4gIGZmQnVsa1VwbG9hZE9wdGltaXphdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFJFU1BPTlNJQklMSVRZID0gUkVTUE9OU0lCSUxJVFk7XHJcblxyXG4gIGlzRGF5SW52YWxpZCA9IGZhbHNlO1xyXG4gIGlzRGF0ZUZvcm1hdEludmFsaWQgPSBmYWxzZTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmlza1NlcnZpY2U6IEFkZFJpc2tTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNwb25zaWJpbGl0eVNlcnZpY2U6IFJlc3BvbnNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmcmVxdWVuY3lTZXJ2aWNlOiBGcmVxdWVuY3lCdWxrU2VydmljZSxcclxuICAgIHByaXZhdGUgc25hY2tCYXI6IFNuYWNrQmFyU2VydmljZSxcclxuICAgIHByaXZhdGUgaWZyYW1lU2VydmljZTogSWZyYW1lU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge31cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucGlja2VyQ2hhbmdlZC5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMub3JnYW5pemF0aW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbklkKCk7XHJcbiAgICB0aGlzLm1lbWJlcl9vYmpfaWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkudXNlci51aWQ7XHJcbiAgICB0aGlzLnVzZXJJbmZvID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyRGV0YWlscygpLnVzZXI7XHJcbiAgICB0aGlzLmRlZmF1bHRPd25lciA9IHRoaXMudXNlckluZm9cclxuICAgICAgPyB0aGlzLnVzZXJJbmZvLm5hbWUgKyAnICgnICsgdGhpcy51c2VySW5mby5lbWFpbCArICcpJ1xyXG4gICAgICA6ICcnO1xyXG4gICAgdGhpcy5nZXRVc2VyRGV0YWlscygpO1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRPcmdhbml6YXRpb25EZXRhaWxzKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnJpc2tDbGFzc0VuYWJsZWQgPSByZXMuZW5hYmxlX3Jpc2tjbGFzcztcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mZkJ1bGtVcGxvYWRPcHRpbWl6YXRpb24gPSB0aGlzLmZlYXR1cmUuaXNGZWF0dXJlRW5hYmxlZChcclxuICAgICAgJ2ZmX2J1bGtfdXBsb2FkX29wdGltaXphdGlvbidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB0cmlnZ2VyQnJvd3NlRmlsZSgpIHtcclxuICAgIGNvbnN0IGdldEZpbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZUlucHV0Jyk7XHJcbiAgICBpZiAoZ2V0RmlsZSkge1xyXG4gICAgICBnZXRGaWxlLmNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFVzZXJEZXRhaWxzKCkge1xyXG4gICAgdGhpcy5hdXRoU2VydmljZS5nZXRVc2VySW5mbygpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmcgPSByZXMubm90aWZpY2F0aW9uX3BlbmRpbmdfZmxhZztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkZWRGaWxlKGV2ZW50OiBhbnksIHRhYlR5cGU/OiBhbnkpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0ge1xyXG4gICAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgICAgcmVwb3J0czogW10sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mbyA9IHtcclxuICAgICAgICBjYXRlZ29yeUxpc3Q6IFtdLFxyXG4gICAgICAgIHJjTGlzdDogW10sXHJcbiAgICAgICAgYXNzaWdub3JzTGlzdDogW10sXHJcbiAgICAgICAgYXNzaWduZWVzTGlzdDogW10sXHJcbiAgICAgICAgcmV2aWV3ZXJMaXN0OiBbXSxcclxuICAgICAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogW10sXHJcbiAgICAgICAgbWVtYmVySWQ6ICcnLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnVwbG9hZGVkRmlsZXMgPSBbXTtcclxuICAgICAgY29uc3QgcmVmZXJlbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3Njcm9sbFJlZmVyZW5jZScpO1xyXG4gICAgICBpZiAocmVmZXJlbmNlKSB7XHJcbiAgICAgICAgcmVmZXJlbmNlLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbGVOYW1lID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdLm5hbWU7XHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlcy5wdXNoKGV2ZW50LnRhcmdldC5maWxlcyk7XHJcbiAgICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gZXZlbnQudGFyZ2V0IGFzIERhdGFUcmFuc2ZlcjtcclxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjdXJseVxyXG4gICAgICBpZiAodGFyZ2V0LmZpbGVzLmxlbmd0aCAhPT0gMSlcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgbXVsdGlwbGUgZmlsZXMnKTtcclxuICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3Qgd2I6IFhMU1guV29ya0Jvb2sgPSBYTFNYLnJlYWQoYnN0ciwgeyB0eXBlOiAnYmluYXJ5JyB9KTtcclxuICAgICAgICBjb25zdCB3c25hbWU6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbUkVTUE9OU0lCSUxJVFkuc2hlZXRJbmRleC5mcmVxdWVuY3lSZXNwb25zaWJpbGl0eV07XHJcbiAgICAgICAgY29uc3Qgc2hlZXQyOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzW1JFU1BPTlNJQklMSVRZLnNoZWV0SW5kZXgub25Hb2luZ1Jlc3BvbnNpYmlsaXR5XTtcclxuICAgICAgICBjb25zdCB3c25hbWUxOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzW1JFU1BPTlNJQklMSVRZLnNoZWV0SW5kZXguZGF0YV07XHJcbiAgICAgICAgY29uc3Qgd3M6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZV07XHJcbiAgICAgICAgY29uc3Qgc2hlZXRSZXBvcnQyOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1tzaGVldDJdO1xyXG4gICAgICAgIGNvbnN0IHRlbXBEYXRhOiBYTFNYLldvcmtTaGVldCA9IHdiLlNoZWV0c1t3c25hbWUxXTtcclxuICAgICAgICBjb25zdCB0RGF0YSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih0ZW1wRGF0YSwgeyBoZWFkZXI6IDEgfSkgYXMgQU9BO1xyXG4gICAgICAgIGNvbnN0IHRlbXBMaXN0ID0gdERhdGEuZmlsdGVyKFxyXG4gICAgICAgICAgKGRhdGFFbGVtZW50OiBhbnkpID0+IGRhdGFFbGVtZW50Lmxlbmd0aCA+IDBcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2V0T3JnYW5pemF0aW9uRGV0YWlscyh0ZW1wTGlzdCk7XHJcbiAgICAgICAgd2IuU2hlZXROYW1lcy5mb3JFYWNoKChzaGVldDogYW55KSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHNoZWV0Py50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2ZyZXF1ZW5jeSByZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzLCBzaGVldCk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ29uZ29pbmcgcmVzcG9uc2liaWxpdGllcyc6XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhRm9yRGlmZmVyZW50VGFicyhzaGVldFJlcG9ydDIsIHNoZWV0KTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0YXJnZXQuZmlsZXNbMF0pO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSB3b3Jrc2hlZXQgYW5kIGEgc2hlZXQgbmFtZSwgYW5kIHRoZW4gaXQgc2V0cyB0aGUgZGF0YSBmb3IgZGlmZmVyZW50IHRhYnMuXHJcbiAgICogQHBhcmFtIHdzIC0gWExTWC5Xb3JrU2hlZXQsIHNoZWV0OiBzdHJpbmdcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2hlZXQgLSBzdHJpbmcgLSB0aGUgbmFtZSBvZiB0aGUgc2hlZXQgaW4gdGhlIGV4Y2VsIGZpbGVcclxuICAgKiBAcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIFwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXCIgd2hpY2ggaXMgYW4gb2JqZWN0LlxyXG4gICAqL1xyXG4gIHNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHdzOiBYTFNYLldvcmtTaGVldCwgc2hlZXQ6IHN0cmluZykge1xyXG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICB9O1xyXG4gICAgbGV0IHNoZWV0VmFsdWUgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2pzb24od3MsIHtcclxuICAgICAgaGVhZGVyOiAxLFxyXG4gICAgICByYXc6IGZhbHNlLFxyXG4gICAgfSkgYXMgQU9BO1xyXG4gICAgbGV0IGRhdGEgPSBzaGVldFZhbHVlLmZpbHRlcigocmVzOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGlzVW5kZWZpbmVkID0gJyc7XHJcbiAgICAgIHJlcy5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgICAgaXNVbmRlZmluZWQgPSBpc1VuZGVmaW5lZCArIGVsO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKHNoZWV0VmFsdWVbMl0gJiYgc2hlZXRWYWx1ZVsyXVsxXSA9PT0gJ1Byb2dyYW0nKSB7XHJcbiAgICAgICAgcmV0dXJuICEocmVzPy5sZW5ndGggPT09IDkgJiYgcmVzWzhdID09PSAnJyAmJiAhaXNVbmRlZmluZWQubGVuZ3RoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gIShyZXM/Lmxlbmd0aCA9PT0gNiAmJiByZXNbNV0gPT09ICcnICYmICFpc1VuZGVmaW5lZC5sZW5ndGgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5maWxlTmFtZS5zdWJzdHIoLTUpICE9PSAnLnhsc3gnKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArXHJcbiAgICAgICAgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlciA9IGNsb25lRGVlcChkYXRhWzJdKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5zdWJIZWFkaW5nID0gY2xvbmVEZWVwKGRhdGFbM10pO1xyXG4gICAgY29uc3QgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gdGhpcy5kZXRlY3RFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMoXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXIsXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5zdWJIZWFkaW5nXHJcbiAgICApO1xyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9XHJcbiAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucztcclxuICAgIGRhdGEgPSBkYXRhLnNsaWNlKDUpO1xyXG4gICAgaWYgKHRoaXMubWVtYmVyX29ial9pZCAhPSB0aGlzLnRlbXBsYXRlSW5mby5tZW1iZXJJZCkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xyXG4gICAgICAgICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5RGF0YSA9IGRhdGEuZmlsdGVyKFxyXG4gICAgICAoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMFxyXG4gICAgKTtcclxuICAgIHJlc3BvbnNpYmlsaXR5RGF0YS5mb3JFYWNoKChyZXBvcnQ6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdmFsaWREYXRlO1xyXG4gICAgICBjb25zdCB2YWxpZFVzZXIgPSB0aGlzLnJldHVybklkcyhyZXBvcnRbMl0sICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgID8gdHJ1ZVxyXG4gICAgICAgIDogZmFsc2U7XHJcbiAgICAgIGlmIChyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSAnUHJvZ3JhbScpIHtcclxuICAgICAgICB2YWxpZERhdGUgPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUocmVwb3J0WzRdLCByZXBvcnRbNV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHZhbGlkRGF0ZSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShyZXBvcnRbNV0sIHJlcG9ydFs2XSk7XHJcbiAgICAgIH1cclxuICAgICAgLyogUHVzaGluZyB0aGUgcmVwb3J0IGRldGFpbHMgaW50byB0aGUgYnVsa1VwbG9hZCBvYmplY3QgYXMgcGVyIHRhYiB0YWJzICovXHJcbiAgICAgIGlmIChzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ2ZyZXF1ZW5jeSByZXNwb25zaWJpbGl0aWVzJykge1xyXG4gICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5yZXBvcnRzLnB1c2goXHJcbiAgICAgICAgICB0aGlzLnNldFJlcG9ydERldGFpbHMoXHJcbiAgICAgICAgICAgIHJlcG9ydCxcclxuICAgICAgICAgICAgJ2ZyZXF1ZW5jeScsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQuZnJlcXVlbmN5LmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5yZXBvcnRzID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID1cclxuICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbmdvaW5nIHJlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcclxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcclxuICAgICAgICAgICAgcmVwb3J0LFxyXG4gICAgICAgICAgICAnb25nb2luZycsXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJyA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcuaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcuc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uZ29pbmcucmVwb3J0cyA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkgPT09ICdvbiBjb21wbGV0aW9uIHJlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcclxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcclxuICAgICAgICAgICAgcmVwb3J0LFxyXG4gICAgICAgICAgICAnb25Db21wbGV0aW9uJyxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0gJ1Byb2dyYW0nID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLmhlYWRlciA9IHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uaGVhZGVyO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbkNvbXBsZXRpb24uc3ViSGVhZGluZyA9XHJcbiAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnN1YkhlYWRpbmc7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5yZXBvcnRzID1cclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8ucmVwb3J0cztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaXNFbXB0eSA9IHRoaXMuY2hlY2tFbXB0eUZpbGUoZGF0YSk7XHJcbiAgICAvKiBDaGVja2luZyBpZiB0aGUgZmlsZSBpcyBlbXB0eSwgaWYgaXQgaXMgZW1wdHkgaXQgd2lsbCByZXR1cm4gYW4gZXJyb3IgbWVzc2FnZS4gSWYgaXQgaXMgbm90XHJcbiAgICBlbXB0eSBpdCB3aWxsIGNoZWNrIGlmIHRoZSBmaWxlIGlzIHRoZSBjb3JyZWN0IGZpbGUsIGlmIGl0IGlzIG5vdCB0aGUgY29ycmVjdCBmaWxlIGl0IHdpbGxcclxuICAgIHJldHVybiBhbiBlcnJvciBtZXNzYWdlLiBJZiBpdCBpcyB0aGUgY29ycmVjdCBmaWxlIGl0IHdpbGwgY2FsbCB0aGUgZmlsZVVwbG9hZCgpIGZ1bmN0aW9uLiAqL1xyXG4gICAgaWYgKGlzRW1wdHkpIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdZb3UgaGF2ZSB1cGxvYWRlZCBhIGJsYW5rIHRlbXBsYXRlLiBQbGVhc2UgYWRkIGRldGFpbHMgZm9yIGFsbCBtYW5kYXRvcnkgZmllbGRzLiBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonICYmXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8uaGVhZGVyWzBdICE9PSAnUmVzcG9uc2liaWxpdHkgTmFtZSonICYmXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uPy5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKidcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xyXG4gICAgICAgICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5maWxlVXBsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dFeGNlbCA9IHRydWU7XHJcbiAgICB0aGlzLmZpbGVWYWx1ZSA9ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0IGhhcyBhIGZyZXF1ZW5jeSBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcclxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIGZyZXF1ZW5jeSBvYmplY3QgYW5kIHNldCB0aGUgdGFiVHlwZSB0byBmcmVxdWVuY3kuIElmIG5vdCwgY2hlY2tcclxuICAgKiBpZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGFuIG9uZ29pbmcgb2JqZWN0IHdpdGggYSByZXBvcnRzIGFycmF5LCBzZXQgdGhlXHJcbiAgICogcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHRvIHRoZSBvbmdvaW5nIG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIG9uZ29pbmcuIElmIG5vdCwgY2hlY2sgaWZcclxuICAgKiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGFuIG9uQ29tcGxldGlvbiBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcclxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIG9uQ29tcGxldGlvbiBvYmplY3QgYW5kIHNldCB0aGUgdGFiVHlwZSB0byBvbkNvbXBsZXRpb24uIElmIG5vdCxcclxuICAgKiByZXR1cm4gdHJ1ZS5cclxuICAgKiA8L2NvZGU+XHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgPSB7XHJcbiAgICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlLlxyXG4gICAqL1xyXG4gIGNoZWNrRW1wdHlGaWxlKGRhdGE/OiBhbnkpIHtcclxuICAgIGxldCBpc0VtcHR5ID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5O1xyXG4gICAgICB0aGlzLnRhYlR5cGUgPSAnZnJlcXVlbmN5JztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nPy5yZXBvcnRzPy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc7XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbmdvaW5nJztcclxuICAgIH0gZWxzZSBpZiAodGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb24/LnJlcG9ydHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25Db21wbGV0aW9uO1xyXG4gICAgICB0aGlzLnRhYlR5cGUgPSAnb25Db21wbGV0aW9uJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlzRW1wdHkgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGlzRW1wdHk7XHJcbiAgfVxyXG5cclxuICBjb21wYXJlV2l0aEN1cnJlbnREYXRlKGRheTogYW55LCBtb250aDogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBjb25zdCBtb250aE5hbWVzID0gW1xyXG4gICAgICB7IHZhbHVlOiAxLCBtb250aDogJ0phbicgfSxcclxuICAgICAgeyB2YWx1ZTogMiwgbW9udGg6ICdGZWInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDMsIG1vbnRoOiAnTWFyJyB9LFxyXG4gICAgICB7IHZhbHVlOiA0LCBtb250aDogJ0FwcicgfSxcclxuICAgICAgeyB2YWx1ZTogNSwgbW9udGg6ICdNYXknIH0sXHJcbiAgICAgIHsgdmFsdWU6IDYsIG1vbnRoOiAnSnVuJyB9LFxyXG4gICAgICB7IHZhbHVlOiA3LCBtb250aDogJ0p1bCcgfSxcclxuICAgICAgeyB2YWx1ZTogOCwgbW9udGg6ICdBdWcnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDksIG1vbnRoOiAnU2VwJyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMCwgbW9udGg6ICdPY3QnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDExLCBtb250aDogJ05vdicgfSxcclxuICAgICAgeyB2YWx1ZTogMTIsIG1vbnRoOiAnRGVjJyB9LFxyXG4gICAgXTtcclxuXHJcbiAgICBpZiAoIShkYXkgfHwgbW9udGgpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICghKGRheSAmJiBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbW9udGhGb3JtYXRSZWdleCA9IFJFR0VYLk1PTlRIO1xyXG4gICAgICBpZiAoIW1vbnRoRm9ybWF0UmVnZXgudGVzdChtb250aCkpIHtcclxuICAgICAgICB0aGlzLmlzRGF0ZUZvcm1hdEludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZighKGRheSA+IDAgJiYgZGF5IDwgMzIpKSB7XHJcbiAgICAgICAgdGhpcy5pc0RheUludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbW9udGhBbmRZZWFyID0gbW9udGguc3BsaXQoXCInXCIpO1xyXG5cclxuICAgICAgY29uc3Qgc3RhcnREYXRlID0gbW9tZW50KFxyXG4gICAgICAgIGRheSArICctJyArIG1vbnRoQW5kWWVhclswXSArICctJyArIDIwICsgbW9udGhBbmRZZWFyWzFdICsgJyAwMDowMDowMCcsXHJcbiAgICAgICAgJ0RELU1NTU0tWVlZWSBISDptbTpzcydcclxuICAgICAgKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKTtcclxuICAgICAgaWYgKHN0YXJ0RGF0ZSA9PSAnSW52YWxpZCBkYXRlJykge1xyXG4gICAgICAgIHRoaXMuaXNEYXlJbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge30sIDUpO1xyXG4gICAgICBjb25zdCBkYXRlX3ZhbHVlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0TW9udGgoXHJcbiAgICAgICAgdHlwZW9mIG1vbnRoICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cclxuICAgICAgICAgICAgICA/LnZhbHVlIC0gMVxyXG4gICAgICAgICAgOiBtb250aFxyXG4gICAgICApO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldEZ1bGxZZWFyKE51bWJlcigyMCArIG1vbnRoLnNwbGl0KFwiJ1wiKVsxXSkpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldERhdGUoTnVtYmVyKGRheSkpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgY3VycmVudERhdGU/LnRvSlNPTigpPy5zcGxpdCgnVCcpWzBdICE9XHJcbiAgICAgICAgICBkYXRlX3ZhbHVlPy50b0pTT04oKT8uc3BsaXQoJ1QnKVswXSAmJlxyXG4gICAgICAgIGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgaXNQYXN0RGF0ZShkYXk6IGFueSwgbW9udGg6IGFueSkge1xyXG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXHJcbiAgICAgIHsgdmFsdWU6IDEsIG1vbnRoOiAnSmFuJyB9LFxyXG4gICAgICB7IHZhbHVlOiAyLCBtb250aDogJ0ZlYicgfSxcclxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDQsIG1vbnRoOiAnQXByJyB9LFxyXG4gICAgICB7IHZhbHVlOiA1LCBtb250aDogJ01heScgfSxcclxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDcsIG1vbnRoOiAnSnVsJyB9LFxyXG4gICAgICB7IHZhbHVlOiA4LCBtb250aDogJ0F1ZycgfSxcclxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEwLCBtb250aDogJ09jdCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTEsIG1vbnRoOiAnTm92JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICghKGRheSB8fCBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICghKGRheSAmJiBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gY29uc3QgcmVwb3J0RGF0ZSA9IG5ldyBEYXRlKGRheSArIG1vbnRoLnNwbGl0KFwiJ1wiKSk7XHJcbiAgICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldE1vbnRoKFxyXG4gICAgICAgIHR5cGVvZiBtb250aCAhPT0gJ251bWJlcidcclxuICAgICAgICAgID8gbW9udGhOYW1lcy5maWx0ZXIoKHgpID0+IHgubW9udGggPT09IG1vbnRoPy5zdWJzdHJpbmcoMCwgMykpWzBdXHJcbiAgICAgICAgICAgICAgPy52YWx1ZSAtIDFcclxuICAgICAgICAgIDogbW9udGhcclxuICAgICAgKTtcclxuICAgICAgZGF0ZV92YWx1ZS5zZXRGdWxsWWVhcihOdW1iZXIoMjAgKyBtb250aC5zcGxpdChcIidcIilbMV0pKTtcclxuICAgICAgZGF0ZV92YWx1ZS5zZXREYXRlKE51bWJlcihkYXkpKTtcclxuICAgICAgaWYgKGN1cnJlbnREYXRlID4gZGF0ZV92YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRUZW1wbGF0ZSgpIHtcclxuICAgIHRoaXMuZG93bmxvYWRTdGF0dXMgPSAnRE9XTkxPQURJTkcnO1xyXG4gICAgdGhpcy5kb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gICAgY29uc3QgZG93bmxvYWREYXRlID0gbmV3IERhdGUoKS50b0RhdGVTdHJpbmcoKS5zcGxpdCgnICcpO1xyXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgRW50cnVzdCBSZXNwb25zaWJpbGl0aWVzLSR7ZG93bmxvYWREYXRlWzJdfS0ke2Rvd25sb2FkRGF0ZVsxXX0tJHtkb3dubG9hZERhdGVbM119Lnhsc3hgO1xyXG5cclxuICAgIHRoaXMucmlza1NlcnZpY2UuZG93bmxvYWRSZXNwb25zaWJpbGl0eVRlbXBsYXRlKCkuc3Vic2NyaWJlKFxyXG4gICAgICAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGEubG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDEwMCAqIChkYXRhLmxvYWRlZCAvIGRhdGEudG90YWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0YS5ib2R5KSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9IHRoaXMucmlza1NlcnZpY2UuZG93bkxvYWRGaWxlKFxyXG4gICAgICAgICAgICAgIGRhdGEuYm9keSxcclxuICAgICAgICAgICAgICAnYXBwbGljYXRpb24veGxzeCcsXHJcbiAgICAgICAgICAgICAgZmlsZU5hbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sIDE1MDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BREVEJztcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdFJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCgpIHtcclxuICAgIHRoaXMubG9hZGVyID0gdHJ1ZTtcclxuICAgIGxldCBwYXlsb2FkOiBhbnkgPSBbXTtcclxuICAgIGxldCByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZDogYW55ID0gW107XHJcbiAgICBsZXQgdmFsaWRSZXNwb25zaWJpbGl0aWVzID0gMDtcclxuICAgIHJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkID1cclxuICAgICAgdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k/LnJlcG9ydHM/LmNvbmNhdChcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LnJlcG9ydHMsXHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb24/LnJlcG9ydHNcclxuICAgICAgKTtcclxuICAgICAgcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/LmZvckVhY2goKHJlcG9ydDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcG9ydD8uaXNWYWxpZCkge1xyXG4gICAgICAgICAgdmFsaWRSZXNwb25zaWJpbGl0aWVzICs9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICBvcmlnaW5hbEZpbGVuYW1lOiB0aGlzLmZpbGVSZXNwb25zZVswXT8ub3JpZ2luYWxfZmlsZW5hbWUsXHJcbiAgICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZVJlc3BvbnNlWzBdPy5maWxlbmFtZSxcclxuICAgICAgICBmaWxlUGF0aDogdGhpcy5maWxlUmVzcG9uc2VbMF0/LmZpbGVwYXRoLFxyXG4gICAgICAgIHRvdGFsUmVzcG9uc2liaWxpdHlDb3VudDogcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQ/Lmxlbmd0aCxcclxuICAgICAgICB2YWxpZFJlc3BvbnNpYmlsaXR5Q291bnQ6IHZhbGlkUmVzcG9uc2liaWxpdGllcyxcclxuICAgICAgfTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmFkZEJ1bGtSZXNwb25zaWJpbGl0eShwYXlsb2FkKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93RXhjZWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dTbWlsZXkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3VibWl0V29ya2Zsb3coKTtcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5RGF0YSA9IHJlcztcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxyXG4gICAgICAgICAgJ2FsZXJ0J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRXb3JrZmxvdygpIHtcclxuICAgIGNvbnN0IG1lc3NhZ2UgPSB7IHR5cGU6ICdzdWJtaXQnIH07XHJcbiAgICBjb25zdCB0YXJnZXRPcmlnaW4gPSB0aGlzLmdldE9yaWdpbigpO1xyXG4gICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShtZXNzYWdlLCB0YXJnZXRPcmlnaW4pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRPcmlnaW4oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuSWRzKGl0ZW06IGFueSwga2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoIChrZXkpIHtcclxuICAgICAgY2FzZSAncmNfaWQnOlxyXG4gICAgICAgIGxldCByY09iaiA9IHsgbmFtZTogJycsIHJjSWQ6IDAsIHBhcmVudElkczogW10gfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QuZm9yRWFjaCgocmNfZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmNfZWxlbWVudC5uYW1lID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgbGV0IG5hbWU7XHJcbiAgICAgICAgICAgIGlmIChyY19lbGVtZW50Lm5hbWUuaW5jbHVkZXMoJ1tXSVRISU5dJykpIHtcclxuICAgICAgICAgICAgICBuYW1lID0gcmNfZWxlbWVudC5uYW1lLnNwbGl0KCcgW1dJVEhJTl0gJylbMF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbmFtZSA9IHJjX2VsZW1lbnQubmFtZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByY09iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgIHJjSWQ6IHJjX2VsZW1lbnQucmNfaWQsXHJcbiAgICAgICAgICAgICAgcGFyZW50SWRzOiByY19lbGVtZW50LnBhcmVudElkcyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmNPYmo7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jldmlld2VyJzpcclxuICAgICAgICBsZXQgcmV2aWV3ZXJPYmogPSB7IG5hbWU6ICcnLCBlbXBsb3llZUlkOiAwLCBlbWFpbDogJycgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKHJldmlld2VyRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmV2aWV3ZXJFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldmlld2VyT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHJldmlld2VyRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IHJldmlld2VyRWxlbWVudC5teV9tZW1iZXJfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IHJldmlld2VyRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmV2aWV3ZXJPYmo7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdhc3NpZ25vcic6XHJcbiAgICAgICAgbGV0IGFzc2lnbm9yT2JqID0geyBuYW1lOiAnJywgbWVtYmVySWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbm9yc0xpc3QuZm9yRWFjaCgoYXNzaWdub3JFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChhc3NpZ25vckVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgYXNzaWdub3JPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogYXNzaWdub3JFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGFzc2lnbm9yRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgICBtZW1iZXJJZDogYXNzaWdub3JFbGVtZW50Lm1lbWJlcl9pZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYXNzaWdub3JPYmo7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdjYyc6XHJcbiAgICAgICAgbGV0IGNjT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKChjY0VsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNjRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBjY09iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBjY0VsZW1lbnQubmFtZSxcclxuICAgICAgICAgICAgICBlbXBsb3llZUlkOiBjY0VsZW1lbnQuZW1wbG95ZWVfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGNjRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2NPYmo7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjRmFpbHVyZSc6XHJcbiAgICAgICAgbGV0IGNjZk9iaiA9IHsgbmFtZTogJycsIGVtcGxveWVlSWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgoY2NmRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2NmRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBjY2ZPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogY2NmRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IGNjZkVsZW1lbnQuZW1wbG95ZWVfaWQsXHJcbiAgICAgICAgICAgICAgZW1haWw6IGNjZkVsZW1lbnQuZW1haWwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGNjZk9iajtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ2VudHJ1c3RlZF90byc6XHJcbiAgICAgICAgbGV0IGVtcElkID0gMDtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25lZXNMaXN0LmZvckVhY2goKGVuRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGVtcElkID0gZW5FbGVtZW50Lm1lbWJlcl9pZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZW1wSWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdwYXJlbnRSZXNwb25zaWJpbGl0eSc6XHJcbiAgICAgICAgbGV0IGlkID0gMDtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5wYXJlbnRSZXNwb25zaWJpbGl0eS5mb3JFYWNoKFxyXG4gICAgICAgICAgKHJlc3BvbnNpYmlsaXR5OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNpYmlsaXR5Py5uYW1lID09PSBpdGVtKSB7XHJcbiAgICAgICAgICAgICAgaWQgPSByZXNwb25zaWJpbGl0eS5pZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAncmlza19jbGFzcyc6XHJcbiAgICAgICAgaWYgKGl0ZW0gPT0gJ0xvdycpIHtcclxuICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnTG93LU1lZGl1bScpIHtcclxuICAgICAgICAgIHJldHVybiAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnTWVkaXVtLUhpZ2gnKSB7XHJcbiAgICAgICAgICByZXR1cm4gMztcclxuICAgICAgICB9IGVsc2UgaWYgKGl0ZW0gPT0gJ0hpZ2gnKSB7XHJcbiAgICAgICAgICByZXR1cm4gNDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHtcclxuICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgcmVwb3J0czogW10sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5idWxrVXBsb2FkID0ge1xyXG4gICAgICBmcmVxdWVuY3k6IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgICBvbmdvaW5nOiB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgfSxcclxuICAgICAgb25Db21wbGV0aW9uOiB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy50ZW1wbGF0ZUluZm8gPSB7XHJcbiAgICAgIGNhdGVnb3J5TGlzdDogW10sXHJcbiAgICAgIHJjTGlzdDogW10sXHJcbiAgICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxyXG4gICAgICBhc3NpZ25lZXNMaXN0OiBbXSxcclxuICAgICAgcmV2aWV3ZXJMaXN0OiBbXSxcclxuICAgICAgbWVtYmVySWQ6ICcnLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgIHRoaXMuZmlsZU5hbWUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmRhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5jbG9zZUFkZE11bHRpcGxlUmVzcG9uc2liaWxpdHkuZW1pdCgpO1xyXG4gIH1cclxuICBhY3Rpb24oZXZlbnQ6IHN0cmluZykge1xyXG4gICAgc3dpdGNoIChldmVudCkge1xyXG4gICAgICBjYXNlICdhZGRNb3JlJzpcclxuICAgICAgICB0aGlzLnJlc2V0KCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3ZpZXcnOlxyXG4gICAgICAgIHRoaXMudmlld1Jlc3BvbnNpYmlsaXRpZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlU21pbGV5KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jbG9zZVdvcmtmbG93LmVtaXQoeyBldnQ6IHRoaXMucmVzcG9uc2liaWxpdHlEYXRhLCBjb25maXJtOiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIHZpZXdSZXNwb25zaWJpbGl0aWVzKCk6IHZvaWQge1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgbGV0IHVybFN1YnN0cmluZyA9ICcvY29tcGxpYW5jZW9wcy9yZXNwb25zaWJpbGl0aWVzLyc7XHJcbiAgICB0aGlzLmRpc2Nvbm5lY3RSZWZyZXNoLmVtaXQoZmFsc2UpO1xyXG4gICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LnN0YXJ0c1dpdGgoJ2xvY2FsaG9zdCcpKSB7XHJcbiAgICAgIHVybCA9ICdodHRwOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdXJsID0gJ2h0dHBzOi8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0ICsgdXJsU3Vic3RyaW5nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pZnJhbWVTZXJ2aWNlLnJlZGlyZWN0SWZJbklmcmFtZSh1cmwsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gVXBsb2FkIEZpbGUgdG8gdGhlIHNlcnZlclxyXG4gIGZpbGVVcGxvYWQoKSB7XHJcbiAgICB0aGlzLmZpbGVSZXNwb25zZSA9IFtdO1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGNvbnN0IGZpbGUgPSB0aGlzLnVwbG9hZGVkRmlsZXNbMF1bMF07XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ3NvdXJjZWZpbGUnLCBmaWxlKTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnZGVzdGluYXRpb24nLCAnYnVsa3VwbG9hZC9lbnRydXN0LycgKyB0aGlzLnVzZXJJbmZvLmVtYWlsKTtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlTZXJ2aWNlLmZpbGVVcGxvYWQoZm9ybURhdGEpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uZmlsZW5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuZmlsZVJlc3BvbnNlLnB1c2gocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdyhcclxuICAgICAgICAgICdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nLFxyXG4gICAgICAgICAgJ2FsZXJ0J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXRPcmdhbml6YXRpb25EZXRhaWxzKHRlbXBMaXN0OiBhbnkpIHtcclxuICAgIGlmICh0ZW1wTGlzdFswXSAhPT0gdW5kZWZpbmVkICYmIHRlbXBMaXN0WzBdW1JFU1BPTlNJQklMSVRZLnVzZXJJbmRleC5jdXJyZW50VXNlcl0pIHtcclxuICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ubWVtYmVySWQgPSB0ZW1wTGlzdFswXVtSRVNQT05TSUJJTElUWS51c2VySW5kZXguY3VycmVudFVzZXJdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICtcclxuICAgICAgICAnIFJFVFJZJztcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRlbXBMaXN0LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG5cclxuICAgICAgY29uc3QgcmVndWxhdGlvbnMgPSB0aGlzLmdldFByb2dyYW1EZXRhaWxzKGVsZW1lbnQsIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5yZWd1bGF0aW9ucywgMSk7XHJcbiAgICAgIGNvbnN0IHN0YW5kYXJkcyA9IHRoaXMuZ2V0UHJvZ3JhbURldGFpbHMoZWxlbWVudCwgUkVTUE9OU0lCSUxJVFkucHJvZ3JhbUluZGV4LnN0YW5kYXJkcywgMik7XHJcbiAgICAgIGNvbnN0IGludGVybmFsQ29udHJvbHMgPSB0aGlzLmdldFByb2dyYW1EZXRhaWxzKGVsZW1lbnQsIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5pbnRlcm5hbENvbnRyb2xzLCAzKTtcclxuICAgICAgY29uc3Qgb3RoZXJzID0gdGhpcy5nZXRQcm9ncmFtRGV0YWlscyhlbGVtZW50LCBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXgub3RoZXJzLCAwKTtcclxuXHJcbiAgICAgIGlmKHJlZ3VsYXRpb25zKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2gocmVndWxhdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihzdGFuZGFyZHMpIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChzdGFuZGFyZHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihpbnRlcm5hbENvbnRyb2xzKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2goaW50ZXJuYWxDb250cm9scyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKG90aGVycykge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5wdXNoKG90aGVycyk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICAvKiBDaGVja2luZyBpZiB0aGUgZWxlbWVudFs5XSBpcyBub3QgbnVsbCBhbmQgbm90IGVtcHR5LiBJZiBpdCBpcyBub3QgbnVsbCBhbmQgbm90IGVtcHR5LCBpdCBpc1xyXG4gICAgICBwdXNoaW5nIHRoZSBlbGVtZW50WzldIChSQykgdG8gdGhlIGFycmF5IChyY0xpc3QpLiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFtSRVNQT05TSUJJTElUWS5yY0luZGV4LmlkXSApIHtcclxuICAgICAgICBjb25zdCByYyA9IHtcclxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmNJbmRleC5uYW1lXSxcclxuICAgICAgICAgIHJjX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJjSW5kZXguaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucmNMaXN0LnB1c2gocmMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBc3NpZ25lZVxyXG4gICAgICBpZiAoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4LmlkXSApIHtcclxuICAgICAgICBjb25zdCBhc3NpZ25lZSA9IHtcclxuICAgICAgICAgIG5hbWVBbmRFbWFpbDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4Lm5hbWVdLFxyXG4gICAgICAgICAgLy8gbmFtZTogZWxlbWVudFsxMV0uc3BsaXQoJyAoJylbMF0sXHJcbiAgICAgICAgICBuYW1lOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbmVlSW5kZXgubmFtZV0uc3BsaXQoJyAoJylbMF0sXHJcbiAgICAgICAgICBlbWFpbDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25lZUluZGV4LmVtYWlsXS5zcGxpdCgnICgnKVsxXS5yZXBsYWNlKCcpJywgJycpLFxyXG4gICAgICAgICAgbWVtYmVyX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbmVlSW5kZXguaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWduZWVzTGlzdC5wdXNoKGFzc2lnbmVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmV2aWV3ZXJcclxuICAgICAgaWYgKGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmV2aWV3ZXJJbmRleC5pZF0gKSB7XHJcbiAgICAgICAgY29uc3QgcmV2aWV3ZXIgPSB7XHJcbiAgICAgICAgICBuYW1lQW5kRW1haWw6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmV2aWV3ZXJJbmRleC5uYW1lXSxcclxuICAgICAgICAgIC8vIG5hbWU6IGVsZW1lbnRbMTFdLnNwbGl0KCcgKCcpWzBdLFxyXG4gICAgICAgICAgbmFtZTogZWxlbWVudFtSRVNQT05TSUJJTElUWS5yZXZpZXdlckluZGV4Lm5hbWVdLnNwbGl0KCcgKCcpWzBdLFxyXG4gICAgICAgICAgZW1haWw6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmV2aWV3ZXJJbmRleC5lbWFpbF0uc3BsaXQoJyAoJylbMV0ucmVwbGFjZSgnKScsICcnKSxcclxuICAgICAgICAgIGVtcGxveWVlX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJldmlld2VySW5kZXguaWRdLFxyXG4gICAgICAgICAgbXlfbWVtYmVyX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJldmlld2VySW5kZXguaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8ucmV2aWV3ZXJMaXN0LnB1c2gocmV2aWV3ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIC8qIENoZWNraW5nIGlmIHRoZSBlbGVtZW50WzJdIGlzIG5vdCBlbXB0eSBhbmQgbm90IGVxdWFsIHRvIHNwYWNlLiBJZiBpdCBpcyBub3QgZW1wdHkgYW5kIG5vdFxyXG4gICAgICBlcXVhbCB0byBzcGFjZSwgaXQgd2lsbCBjcmVhdGUgYW4gb2JqZWN0IGFuZCBwdXNoIGl0IHRvIHRoZSBhc3NpZ25vcnNMaXN0IGFycmF5LiAqL1xyXG4gICAgICBpZiAoZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4LmlkXSApIHtcclxuICAgICAgICBjb25zdCBhc3NpZ25vciA9IHtcclxuICAgICAgICAgIG5hbWVBbmRFbWFpbDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4Lm5hbWVdLFxyXG4gICAgICAgICAgbmFtZTogZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4Lm5hbWVdLFxyXG4gICAgICAgICAgZW1haWw6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5lbWFpbF0sXHJcbiAgICAgICAgICAvLyBuYW1lOiBlbGVtZW50WzE0XS5zcGxpdCgnICgnKVswXSxcclxuICAgICAgICAgIC8vIGVtYWlsOiBlbGVtZW50WzE0XS5zcGxpdCgnICgnKVsxXS5yZXBsYWNlKCcpJywgJycpLFxyXG4gICAgICAgICAgbWVtYmVyX2lkOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXgubWVtYmVyX2lkXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbm9yc0xpc3QucHVzaChhc3NpZ25vcik7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAvKiBDcmVhdGluZyBhIGxpc3Qgb2YgY2hpbGQgY2F0ZWdvcmllcy4gYW5kIHB1c2ggdGhlIGNoaWxkIGNhdGVnb3JpZXMgdG8gdGhlaXIgcGFyZW50IHByb2dyYW0gKi9cclxuICAgIC8vIGlmICh0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgLy8gICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3Q/LmZvckVhY2goKGNhdGVnb3J5OiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgLy8gICAgIGxldCBpbmRleCA9IHRlbXBMaXN0WzBdPy5pbmRleE9mKGNhdGVnb3J5Py5wcm9ncmFtSWQpO1xyXG4gICAgLy8gICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgIC8vICAgICAgIGxldCBjaGlsZENhdGVnb3J5ID0gW107XHJcbiAgICAvLyAgICAgICAvKiBDcmVhdGluZyBhIGxpc3Qgb2YgY2hpbGQgY2F0ZWdvcmllcy4gKi9cclxuICAgIC8vICAgICAgIGZvciAobGV0IGogPSAxOyB0cnVlOyBqKyspIHtcclxuICAgIC8vICAgICAgICAgaWYgKHRlbXBMaXN0W2pdICYmIHRlbXBMaXN0W2pdW2luZGV4XSkge1xyXG4gICAgLy8gICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0ge1xyXG4gICAgLy8gICAgICAgICAgICAgbmFtZTogdGVtcExpc3Rbal1baW5kZXggLSAxXSxcclxuICAgIC8vICAgICAgICAgICAgIGlkOiB0ZW1wTGlzdFtqXVtpbmRleF0sXHJcbiAgICAvLyAgICAgICAgICAgfTtcclxuICAgIC8vICAgICAgICAgICBjaGlsZENhdGVnb3J5LnB1c2goY2F0ZWdvcnkpO1xyXG4gICAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3RbaV1bJ2NoaWxkQ2F0ZWdvcnknXSA9IGNoaWxkQ2F0ZWdvcnk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1EZXRhaWxzKGVsZW1lbnQ6IGFueSwgaW5kZXg6IGFueSwgdHlwZTogbnVtYmVyKSB7XHJcbiAgICBpZihlbGVtZW50W2luZGV4LmlkXSAmJiB0eXBlb2YgZWxlbWVudFtpbmRleC5pZF0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJvZ3JhbU5hbWU6IGVsZW1lbnRbaW5kZXgubmFtZV0sXHJcbiAgICAgICAgcHJvZ3JhbUlkOiBlbGVtZW50W2luZGV4LmlkXSxcclxuICAgICAgICBwcm9ncmFtVHlwZTogdHlwZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGFuIGV2ZW50LCB3aGljaCBpcyBhIHN0cmluZywgYW5kIHRoZW4gaXQgc2V0cyB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHRvXHJcbiAgICogdGhlIHZhbHVlIG9mIHRoZSBidWxrVXBsb2FkIHZhcmlhYmxlLCB3aGljaCBpcyBhbiBvYmplY3QsIGFuZCB0aGVuIGl0IGFjY2Vzc2VzIHRoZSBwcm9wZXJ0eSBvZlxyXG4gICAqIHRoYXQgb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGUgZXZlbnQgc3RyaW5nLlxyXG4gICAqXHJcbiAgICogU28gaWYgdGhlIGV2ZW50IHN0cmluZyBpcyAnZnJlcXVlbmN5JywgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvXHJcbiAgICogdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogSWYgdGhlIGV2ZW50IHN0cmluZyBpcyAnb25nb2luZycsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byB0aGVcclxuICAgKiB2YWx1ZSBvZiB0aGUgb25nb2luZyBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgZXZlbnQgc3RyaW5nIGlzICdvbkNvbXBsZXRpb24nLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG8gdGhlXHJcbiAgICogdmFsdWUgb2YgdGhlIG9uQ29tcGxldGlvbiBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgZXZlbnQgc3RyaW5nIGlzIGFueXRoaW5nIGVsc2UsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0b1xyXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBzdHJpbmcgLSB0aGUgZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGZyb20gdGhlIGNoaWxkIGNvbXBvbmVudCAoZnJlcXVlbmN5IHwgb25nb2luZyB8IG9uQ29tcGxldGlvbilcclxuICAgKi9cclxuICBzZWxlY3RlZFRhYihldmVudDogJ2ZyZXF1ZW5jeScgfCAnb25nb2luZycgfCAnb25Db21wbGV0aW9uJykge1xyXG4gICAgdGhpcy50YWJUeXBlID0gZXZlbnQ7XHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2ZyZXF1ZW5jeSc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb25nb2luZyc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ29uQ29tcGxldGlvbic6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZWN0cyB0aGUgZm91ciBmcmVxdWVuY3kgY29sdW1ucyBhZGRlZCB0byB0aGUgbGF0ZXN0IHhsc3ggdGVtcGxhdGU6XHJcbiAgICogRHVlIFRpbWUsIEVuZHMgQWZ0ZXIgT2NjdXJyZW5jZXMsIEVuZHMgQnkgRGF0ZSAoRGF5KSwgRW5kcyBCeSBEYXRlIChNb250aCkuXHJcbiAgICogT2xkZXIgdGVtcGxhdGVzIHdpdGhvdXQgdGhlc2UgY29sdW1ucyBrZWVwIHRoZSBvcmlnaW5hbCBjb2x1bW4gbWFwcGluZy5cclxuICAgKi9cclxuICBkZXRlY3RFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMoaGVhZGVyOiBhbnlbXSA9IFtdLCBzdWJIZWFkaW5nOiBhbnlbXSA9IFtdKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjZWxscyA9IFsuLi4oaGVhZGVyIHx8IFtdKSwgLi4uKHN1YkhlYWRpbmcgfHwgW10pXTtcclxuICAgIHJldHVybiBjZWxscy5zb21lKChjZWxsOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBjZWxsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gY2VsbC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdkdWUgdGltZScpIHx8XHJcbiAgICAgICAgbm9ybWFsaXplZC5pbmNsdWRlcygncmVzcG9uc2liaWxpdHkgZW5kcyBhZnRlcicpIHx8XHJcbiAgICAgICAgbm9ybWFsaXplZC5pbmNsdWRlcygncmVzcG9uc2liaWxpdHkgZW5kcyBieSBkYXRlJylcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtYXBzIGZyZXF1ZW5jeSBjb2x1bW5zIHdoZW4gdGhlIHVwbG9hZGVkIGZpbGUgaW5jbHVkZXMgdGhlIGZvdXIgbmV3IGZpZWxkcyxcclxuICAgKiBzbyBsYXRlciBjb2x1bW5zIChSQywgcmV2aWV3ZXIsIGV0Yy4pIHN0YXkgYWxpZ25lZC4gT25nb2luZy9vbkNvbXBsZXRpb24gYXJlIHVuY2hhbmdlZC5cclxuICAgKi9cclxuICBhcHBseUV4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyhvYmo6IGFueSwgcmVwb3J0OiBhbnksIGlzUHJvZ3JhbTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGlzUHJvZ3JhbSkge1xyXG4gICAgICBvYmouZHVlVGltZSA9IHJlcG9ydFsxMV07XHJcbiAgICAgIG9iai5yZXNwb25zaWJpbGl0eVdpbmRvdyA9IHJlcG9ydFsxMl07XHJcbiAgICAgIG9iai5mYWlsZWRBZnRlciA9IHJlcG9ydFsxM107XHJcbiAgICAgIG9iai5lbmRzQWZ0ZXJPY2N1cnJlbmNlcyA9IHJlcG9ydFsxNF07XHJcbiAgICAgIG9iai5lbmRzQnlEYXRlRGF5ID0gcmVwb3J0WzE1XTtcclxuICAgICAgb2JqLmVuZHNCeURhdGVNb250aCA9IHJlcG9ydFsxNl07XHJcbiAgICAgIG9iai5yZXNwb25zaWJpbGl0eUNlbnRlciA9IHJlcG9ydFsxN107XHJcbiAgICAgIG9iai5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPSByZXBvcnRbMThdO1xyXG4gICAgICBvYmoucmVwb3J0Q2xhc3MgPSByZXBvcnRbMTldO1xyXG4gICAgICBvYmoub2JqZWN0aXZlID0gcmVwb3J0WzIwXTtcclxuICAgICAgb2JqLm5vdGVzID0gcmVwb3J0WzIxXTtcclxuICAgICAgb2JqLmlzRm9ybWF0ID0gcmVwb3J0WzIyXTtcclxuICAgICAgb2JqLmZvcm1hdEZvclJlc3BvbnNpYmlsaXR5ID0gcmVwb3J0WzIzXTtcclxuICAgICAgb2JqLmRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCA9IHJlcG9ydFsyNF07XHJcbiAgICAgIG9iai5yZXZpZXdlciA9IHJlcG9ydFsyNV07XHJcbiAgICAgIG9iai5yZXZpZXdlclR5cGUgPSByZXBvcnRbMjZdO1xyXG4gICAgICBvYmoucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbiA9IHJlcG9ydFsyN107XHJcbiAgICAgIG9iai5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlciA9IHJlcG9ydFsyOF07XHJcbiAgICAgIG9iai5vdmVyc2VlciA9IHJlcG9ydFsyOV07XHJcbiAgICAgIG9iai5ub3RpZnlPbkZhaWx1cmUgPSByZXBvcnRbMzBdO1xyXG4gICAgICBvYmouY29sbGFib3JhdG9yID0gcmVwb3J0WzMxXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9iai5kdWVUaW1lID0gcmVwb3J0WzhdO1xyXG4gICAgICBvYmoucmVzcG9uc2liaWxpdHlXaW5kb3cgPSByZXBvcnRbOV07XHJcbiAgICAgIG9iai5mYWlsZWRBZnRlciA9IHJlcG9ydFsxMF07XHJcbiAgICAgIG9iai5lbmRzQWZ0ZXJPY2N1cnJlbmNlcyA9IHJlcG9ydFsxMV07XHJcbiAgICAgIG9iai5lbmRzQnlEYXRlRGF5ID0gcmVwb3J0WzEyXTtcclxuICAgICAgb2JqLmVuZHNCeURhdGVNb250aCA9IHJlcG9ydFsxM107XHJcbiAgICAgIG9iai5yZXNwb25zaWJpbGl0eUNlbnRlciA9IHJlcG9ydFsxNF07XHJcbiAgICAgIG9iai5yZXBvcnRDbGFzcyA9IHJlcG9ydFsxNV07XHJcbiAgICAgIG9iai5vYmplY3RpdmUgPSByZXBvcnRbMTZdO1xyXG4gICAgICBvYmoubm90ZXMgPSByZXBvcnRbMTddO1xyXG4gICAgICBvYmouaXNGb3JtYXQgPSByZXBvcnRbMThdO1xyXG4gICAgICBvYmouZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHkgPSByZXBvcnRbMTldO1xyXG4gICAgICBvYmouZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkID0gcmVwb3J0WzIwXTtcclxuICAgICAgb2JqLnJldmlld2VyID0gcmVwb3J0WzIxXTtcclxuICAgICAgb2JqLnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW4gPSByZXBvcnRbMjJdO1xyXG4gICAgICBvYmoucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXIgPSByZXBvcnRbMjNdO1xyXG4gICAgICBvYmoub3ZlcnNlZXIgPSByZXBvcnRbMjRdO1xyXG4gICAgICBvYmoubm90aWZ5T25GYWlsdXJlID0gcmVwb3J0WzI1XTtcclxuICAgICAgb2JqLmNvbGxhYm9yYXRvciA9IHJlcG9ydFsyNl07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBpbiBhIHJlcG9ydCwgYSB0YWIgdHlwZSwgYW5kIGEgYm9vbGVhbiB2YWx1ZS4gSXQgdGhlbiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgYnVuY2ggb2ZcclxuICAgKiBwcm9wZXJ0aWVzLlxyXG4gICAqIDwvY29kZT5cclxuICAgKiBAcGFyYW0ge2FueX0gcmVwb3J0IC0gYW55ID0mZ3Q7IHRoZSBhcnJheSBvZiBkYXRhXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYlR5cGUgLSBzdHJpbmcgLSB0aGlzIGlzIHRoZSB0eXBlIG9mIHRhYiB0aGF0IGlzIHNlbGVjdGVkLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQcm9ncmFtIC0gYm9vbGVhblxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zIC0gd2hldGhlciB0aGUgeGxzeCBpbmNsdWRlcyB0aGUgZm91ciBuZXcgZnJlcXVlbmN5IGNvbHVtbnNcclxuICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICovXHJcbiAgc2V0UmVwb3J0RGV0YWlscyhyZXBvcnQ6IGFueSwgdGFiVHlwZTogc3RyaW5nLCBpc1Byb2dyYW06IGJvb2xlYW4sIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlKSB7XHJcblxyXG4gICAgbGV0IG9iajogYW55O1xyXG4gICAgc3dpdGNoICh0YWJUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ2ZyZXF1ZW5jeSc6IHtcclxuICAgICAgICBpZiAoaXNQcm9ncmFtKSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBwcm9ncmFtVHlwZTogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIHByb2dyYW1DYXRlZ29yeTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIGRheTogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICBtb250aDogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlOiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMjBdLFxyXG5cclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsyMV0gLFxyXG4gICAgICAgICAgICByZXZpZXdlclR5cGU6IHJlcG9ydFsyMl0sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsyM10sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMjRdLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzI1XSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjZdLFxyXG4gICAgICAgICAgICBjb2xsYWJvcmF0b3I6IHJlcG9ydFsyN10sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaWYgKGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5RXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKG9iaiwgcmVwb3J0LCB0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc0RhdGVGb3JtYXRJbnZhbGlkJ10gPSB0aGlzLmlzRGF0ZUZvcm1hdEludmFsaWQ7XHJcbiAgICAgICAgICBvYmpbJ2lzRGF5SW52YWxpZCddID0gdGhpcy5pc0RheUludmFsaWQ7XHJcbiAgICAgICAgICBvYmpbJ2lzUGFzdERhdGUnXSA9IHRoaXMuaXNQYXN0RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREdWVUaW1lJ10gPSB0aGlzLmlzVmFsaWREdWVUaW1lKFxyXG4gICAgICAgICAgICBvYmo/LmR1ZVRpbWUsXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIG9ialsnZW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvciddID0gdGhpcy5nZXRFbmRzQWZ0ZXJPY2N1cnJlbmNlc0Vycm9yKFxyXG4gICAgICAgICAgICBvYmo/LmVuZHNBZnRlck9jY3VycmVuY2VzLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRFbmRzQWZ0ZXJPY2N1cnJlbmNlcyddID0gIW9ialsnZW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvciddO1xyXG4gICAgICAgICAgdGhpcy5hcHBseUVuZHNCeURhdGVWYWxpZGF0aW9uKG9iaiwgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddICYmXHJcbiAgICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gJiZcclxuICAgICAgICAgICAgIW9ialsnaXNQYXN0RGF0ZSddICYmXHJcbiAgICAgICAgICAgIG9iaj8uZnJlcXVlbmN5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREdWVUaW1lJ10gJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRFbmRzQnlEYXRlJ11cclxuICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgZGF5OiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIG1vbnRoOiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBpZiAoaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMob2JqLCByZXBvcnQsIGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc1Bhc3REYXRlJ10gPSB0aGlzLmlzUGFzdERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRHVlVGltZSddID0gdGhpcy5pc1ZhbGlkRHVlVGltZShcclxuICAgICAgICAgICAgb2JqPy5kdWVUaW1lLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXSA9IHRoaXMuZ2V0RW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvcihcclxuICAgICAgICAgICAgb2JqPy5lbmRzQWZ0ZXJPY2N1cnJlbmNlcyxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSA9ICFvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXTtcclxuICAgICAgICAgIHRoaXMuYXBwbHlFbmRzQnlEYXRlVmFsaWRhdGlvbihvYmosIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddICYmXHJcbiAgICAgICAgICAgICFvYmpbJ2lzUGFzdERhdGUnXSAmJlxyXG4gICAgICAgICAgICBvYmo/LmZyZXF1ZW5jeT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRHVlVGltZSddICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZEVuZHNBZnRlck9jY3VycmVuY2VzJ10gJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0J5RGF0ZSddXHJcbiAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdvbmdvaW5nJzoge1xyXG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlclR5cGU6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgcmV2aWV3ZXJUeXBlOiByZXBvcnRbMTddLCBcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogJ09uZ29pbmcnLFxyXG4gICAgICAgICAgICBjb2xsYWJvcmF0b3I6IHJlcG9ydFsyMl0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddO1xyXG5cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSBcclxuICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgc2V0UmVtaW5kZXI6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAgZnJlcXVlbmN5UmVtaW5kZXI6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzIwXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9IG9ialsnaXNWYWxpZERhdGEnXSAmJiBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSBcclxuICAgICAgICAgIHJldHVybiBvYmo7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ29uQ29tcGxldGlvbic6IHtcclxuICAgICAgICBpZiAoaXNQcm9ncmFtKSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBwcm9ncmFtVHlwZTogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIHByb2dyYW1DYXRlZ29yeTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIGR1ZURhdGU6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzIwXSxcclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsyMl0sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMjNdLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzI0XSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjVdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddICYmXHJcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSkuaW5jbHVkZXMoZmFsc2UpICYmXHJcbiAgICAgICAgICAgIG9iaj8ucGFyZW50UmVzcG9uc2liaWxpdHk/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxyXG4gICAgICAgICAgcmV0dXJuIG9iajtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBkdWVEYXRlOiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgb2JqPy5wYXJlbnRSZXNwb25zaWJpbGl0eT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgXHJcbiAgICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OiB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVmFsaWRSaXNrQ2xhc3Mocmlza0NsYXNzOiBhbnkpIHtcclxuICAgIGlmKCFyaXNrQ2xhc3MpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIFJJU0tfQ0xBU1NfTElTVC5pbmNsdWRlcyhyaXNrQ2xhc3M/LnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZER1ZVRpbWUoZHVlVGltZTogYW55LCBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMubm9ybWFsaXplRHVlVGltZShkdWVUaW1lKTtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gUkVHRVguRFVFX1RJTUUudGVzdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcHRpb25hbCBmaWVsZC4gV2hlbiBmaWxsZWQsIHRoZSB2YWx1ZSBtdXN0IGJlIG51bWVyaWMgYW5kIGdyZWF0ZXIgdGhhbiAwLlxyXG4gICAqL1xyXG4gIGdldEVuZHNBZnRlck9jY3VycmVuY2VzRXJyb3IoXHJcbiAgICB2YWx1ZTogYW55LFxyXG4gICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2VcclxuICApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgU3RyaW5nKHZhbHVlKS50cmltKCkgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuICAgIGlmICghL14tP1xcZCsoXFwuXFxkKyk/JC8udGVzdChub3JtYWxpemVkKSkge1xyXG4gICAgICByZXR1cm4gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0FGVEVSX09DQ1VSUkVOQ0VTX05VTUVSSUM7XHJcbiAgICB9XHJcbiAgICBpZiAoTnVtYmVyKG5vcm1hbGl6ZWQpIDw9IDApIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19BRlRFUl9PQ0NVUlJFTkNFU19HUkVBVEVSX1RIQU5fWkVSTztcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGFwcGx5RW5kc0J5RGF0ZVZhbGlkYXRpb24ob2JqOiBhbnksIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpcy5nZXRFbmRzQnlEYXRlVmFsaWRhdGlvbihcclxuICAgICAgb2JqPy5lbmRzQnlEYXRlRGF5LFxyXG4gICAgICBvYmo/LmVuZHNCeURhdGVNb250aCxcclxuICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zLFxyXG4gICAgICBvYmo/LmVuZHNBZnRlck9jY3VycmVuY2VzXHJcbiAgICApO1xyXG4gICAgb2JqWydlbmRzQnlEYXRlRGF5RXJyb3InXSA9IHZhbGlkYXRpb24uZGF5RXJyb3I7XHJcbiAgICBvYmpbJ2VuZHNCeURhdGVNb250aEVycm9yJ10gPSB2YWxpZGF0aW9uLm1vbnRoRXJyb3I7XHJcbiAgICBvYmpbJ2lzVmFsaWRFbmRzQnlEYXRlRGF5J10gPSAhdmFsaWRhdGlvbi5kYXlFcnJvcjtcclxuICAgIG9ialsnaXNWYWxpZEVuZHNCeURhdGVNb250aCddID0gIXZhbGlkYXRpb24ubW9udGhFcnJvcjtcclxuICAgIG9ialsnaXNWYWxpZEVuZHNCeURhdGUnXSA9IHZhbGlkYXRpb24uaXNWYWxpZDtcclxuICB9XHJcblxyXG4gIGhhc1ZhbHVlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIFN0cmluZyh2YWx1ZSkudHJpbSgpICE9PSAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIHVubGVzcyBlaXRoZXIgZGF5IG9yIG1vbnRoIGlzIGZpbGxlZC4gQ2Fubm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBFbmRzIEFmdGVyIE9jY3VycmVuY2VzLlxyXG4gICAqIERheSBtdXN0IGJlIG51bWVyaWMsIGdyZWF0ZXIgdGhhbiAwLCBhbmQgYXQgbW9zdCAzMS4gTW9udGggbXVzdCBiZSBmdWxsIG1vbnRoIG5hbWUgKyAnICsgdHdvLWRpZ2l0XHJcbiAgICogeWVhciAoSmFudWFyeScyOCkuIENvbWJpbmVkIGRhdGUgbXVzdCBleGlzdCwgaW5jbHVkaW5nIGxlYXAteWVhciBGZWJydWFyeSAyOS5cclxuICAgKi9cclxuICBnZXRFbmRzQnlEYXRlVmFsaWRhdGlvbihcclxuICAgIGRheTogYW55LFxyXG4gICAgbW9udGg6IGFueSxcclxuICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlLFxyXG4gICAgZW5kc0FmdGVyT2NjdXJyZW5jZXM/OiBhbnlcclxuICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGRheUVycm9yOiBzdHJpbmc7IG1vbnRoRXJyb3I6IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IHZhbGlkID0geyBpc1ZhbGlkOiB0cnVlLCBkYXlFcnJvcjogJycsIG1vbnRoRXJyb3I6ICcnIH07XHJcbiAgICBpZiAoIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICByZXR1cm4gdmFsaWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXlWYWx1ZSA9IGRheSA9PSBudWxsID8gJycgOiBTdHJpbmcoZGF5KS50cmltKCk7XHJcbiAgICBjb25zdCBtb250aFZhbHVlID0gbW9udGggPT0gbnVsbCA/ICcnIDogU3RyaW5nKG1vbnRoKS50cmltKCk7XHJcbiAgICBpZiAoIWRheVZhbHVlICYmICFtb250aFZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB2YWxpZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5oYXNWYWx1ZShlbmRzQWZ0ZXJPY2N1cnJlbmNlcykgJiYgKGRheVZhbHVlIHx8IG1vbnRoVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IGRheVZhbHVlID8gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfQ09ORkxJQ1QgOiAnJyxcclxuICAgICAgICBtb250aEVycm9yOiBtb250aFZhbHVlID8gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfQ09ORkxJQ1QgOiAnJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWRheVZhbHVlIHx8ICFtb250aFZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOQ09NUExFVEUsXHJcbiAgICAgICAgbW9udGhFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5DT01QTEVURSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkYXlFcnJvciA9IHRoaXMuZ2V0RW5kc0J5RGF0ZURheUVycm9yKGRheVZhbHVlKTtcclxuICAgIGNvbnN0IG1vbnRoRXJyb3IgPSB0aGlzLmdldEVuZHNCeURhdGVNb250aEVycm9yKG1vbnRoVmFsdWUpO1xyXG4gICAgaWYgKGRheUVycm9yIHx8IG1vbnRoRXJyb3IpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBkYXlFcnJvcixcclxuICAgICAgICBtb250aEVycm9yLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pc1ZhbGlkRW5kc0J5Q2FsZW5kYXJEYXRlKGRheVZhbHVlLCBtb250aFZhbHVlKSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGRheUVycm9yOiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTlZBTElEX1ZBTFVFLFxyXG4gICAgICAgIG1vbnRoRXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUUsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNFbmRzQnlEYXRlSW5QYXN0KGRheVZhbHVlLCBtb250aFZhbHVlKSkge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGRheUVycm9yOiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9QQVNULFxyXG4gICAgICAgIG1vbnRoRXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX1BBU1QsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbGlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0RW5kc0J5RGF0ZURheUVycm9yKGRheTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghL14tP1xcZCsoXFwuXFxkKyk/JC8udGVzdChkYXkpKSB7XHJcbiAgICAgIHJldHVybiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTlZBTElEX1ZBTFVFO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKGRheSk7XHJcbiAgICBpZiAoZGF5TnVtYmVyIDw9IDAgfHwgZGF5TnVtYmVyID4gMzEpIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBnZXRFbmRzQnlEYXRlTW9udGhFcnJvcihtb250aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghUkVHRVguRU5EU19CWV9EQVRFX01PTlRILnRlc3QobW9udGgpKSB7XHJcbiAgICAgIHJldHVybiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTlZBTElEX1ZBTFVFO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZEVuZHNCeUNhbGVuZGFyRGF0ZShkYXk6IHN0cmluZywgbW9udGg6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbW9udGhNYXRjaCA9IG1vbnRoLm1hdGNoKFJFR0VYLkVORFNfQllfREFURV9NT05USCk7XHJcbiAgICBpZiAoIW1vbnRoTWF0Y2gpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbW9udGhJbmRleCA9IEZVTExfTU9OVEhfTkFNRVMuaW5kZXhPZihtb250aE1hdGNoWzFdKTtcclxuICAgIGNvbnN0IHllYXIgPSAyMDAwICsgTnVtYmVyKG1vbnRoTWF0Y2hbMl0pO1xyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKGRheSk7XHJcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZGF5TnVtYmVyKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5TnVtYmVyKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSA9PT0geWVhciAmJlxyXG4gICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoSW5kZXggJiZcclxuICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGRheU51bWJlclxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGlzRW5kc0J5RGF0ZUluUGFzdChkYXk6IHN0cmluZywgbW9udGg6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbW9udGhNYXRjaCA9IG1vbnRoLm1hdGNoKFJFR0VYLkVORFNfQllfREFURV9NT05USCk7XHJcbiAgICBpZiAoIW1vbnRoTWF0Y2gpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbW9udGhJbmRleCA9IEZVTExfTU9OVEhfTkFNRVMuaW5kZXhPZihtb250aE1hdGNoWzFdKTtcclxuICAgIGNvbnN0IHllYXIgPSAyMDAwICsgTnVtYmVyKG1vbnRoTWF0Y2hbMl0pO1xyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKGRheSk7XHJcbiAgICBjb25zdCBlbmRzQnlEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGhJbmRleCwgZGF5TnVtYmVyKTtcclxuICAgIGVuZHNCeURhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICB0b2RheS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIHJldHVybiBlbmRzQnlEYXRlIDwgdG9kYXk7XHJcbiAgfVxyXG5cclxuICBub3JtYWxpemVEdWVUaW1lKGR1ZVRpbWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoZHVlVGltZSA9PSBudWxsIHx8IGR1ZVRpbWUgPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGxldCB2YWx1ZSA9IFN0cmluZyhkdWVUaW1lKS50cmltKCkucmVwbGFjZSgvXFxzKy9nLCAnICcpO1xyXG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9eKFxcZHsxLDJ9KTooXFxkezJ9KTpcXGR7Mn1cXHMqKEFNfFBNKSQvaSwgJyQxOiQyICQzJyk7XHJcbiAgICBjb25zdCBtYXRjaCA9IHZhbHVlLm1hdGNoKC9eKFxcZHsxLDJ9KTooXFxkezJ9KVxccyooQU18UE0pJC9pKTtcclxuICAgIGlmICghbWF0Y2gpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgbGV0IGhvdXIgPSBOdW1iZXIobWF0Y2hbMV0pO1xyXG4gICAgaWYgKGhvdXIgPT09IDApIHtcclxuICAgICAgaG91ciA9IDEyO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGAke2hvdXJ9OiR7bWF0Y2hbMl19ICR7bWF0Y2hbM10udG9VcHBlckNhc2UoKX1gO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGEgc3RyaW5nLCByZW1vdmVzIGFsbCB3aGl0ZXNwYWNlLCBhbmQgcmV0dXJucyB0aGUgc3RyaW5nXHJcbiAgICogQHBhcmFtIHthbnl9IG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgcmVzcG9uc2liaWxpdHlcclxuICAgKiBAcmV0dXJucyB0aGUgdHJpbW1lZE5hbWUgdmFyaWFibGUuXHJcbiAgICovXHJcbiAgY2hlY2tWYWxpZFJlc3BvbnNpYmlsaXR5TmFtZShuYW1lOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlID0gLyZuYnNwO3w8YnI+L2c7XHJcbiAgICBpZiAobmFtZSkge1xyXG4gICAgICB2YXIgdHJpbW1lZE5hbWUgPSBuYW1lLnRvU3RyaW5nKCkucmVwbGFjZShyZSwgJycpLnRyaW0oKTtcclxuICAgICAgdHJpbW1lZE5hbWUgPSB0cmltbWVkTmFtZS5yZXBsYWNlKC8gICsvZywgJyAnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cmltbWVkTmFtZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSByZXNwb25zaWJpbGl0eSBuYW1lIGlzIHZhbGlkLCBhbmQgdGhlIGFzc2lnbmVlIGFuZCBhc3NpZ25vciBhcmUgbm90IGVtcHR5LCB0aGVuIHJldHVyblxyXG4gICAqIHRydWUuIE90aGVyd2lzZSwgcmV0dXJuIGZhbHNlXHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgLSB0aGUgZGF0YSB0aGF0IGlzIGJlaW5nIHBhc3NlZCBpblxyXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cclxuICAgKi9cclxuICBpc1ZhbGlkRGF0YShkYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IHJlc3BvbnNpYmlsaXR5ID0gdGhpcy5jaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKFxyXG4gICAgICBkYXRhPy5yZXNwb25zaWJpbGl0eU5hbWVcclxuICAgICk/Lmxlbmd0aFxyXG4gICAgICA/IHRydWVcclxuICAgICAgOiBmYWxzZTtcclxuICAgIGNvbnN0IGFzc2lnbmVlID0gZGF0YT8uYXNzaWduZWU/Lmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcclxuICAgIGNvbnN0IGZyZXF1ZW5jeSA9IGRhdGE/LmZyZXF1ZW5jeT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgaWYgKGFzc2lnbmVlICYmIHJlc3BvbnNpYmlsaXR5ICYmIGZyZXF1ZW5jeSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBhc3NpZ25vciBpcyB0aGUgc2FtZSBhcyB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbm9yIGlzIG5vdCBzZXRcclxuICAgKiBhbmQgdGhlIGRlZmF1bHRPd25lciBpcyB0aGUgc2FtZSBhcyB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbmVlIGlzIHRoZVxyXG4gICAqIHNhbWUgYXMgdGhlIHJldmlld2VyLCBvdmVyc2Vlciwgb3IgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgbm90IHNldCBhbmQgdGhlXHJcbiAgICogZGVmYXVsdE93bmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgcmV2aWV3ZXIgaXMgdGhlIHNhbWUgYXNcclxuICAgKiB0aGUgb3ZlcnNlZXIgb3IgdGhlIE5vdGlmeU9uRmFpbHVyZSwgb3IgaWYgdGhlIGFzc2lnbmVlIGlzIG5vdCBzZXQsIHRoZW4gcmV0dXJuIGZhbHNlLiBPdGhlcndpc2UsXHJcbiAgICogcmV0dXJuIHRydWVcclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSAtIHRoaXMgaXMgdGhlIGRhdGEgdGhhdCBpcyBwYXNzZWQgaW4gZnJvbSB0aGUgZm9ybS5cclxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUuXHJcbiAgICovXHJcbiAgaXNWYWxpZFVzZXJzKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAoZGF0YT8uYXNzaWdub3IgJiZcclxuICAgICAgICAoZGF0YT8uYXNzaWdub3IgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIGRhdGE/LmFzc2lnbm9yID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgICghZGF0YT8uYXNzaWdub3IgJiZcclxuICAgICAgICAodGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgIChkYXRhPy5hc3NpZ25lZSAmJlxyXG4gICAgICAgIChkYXRhPy5hc3NpZ25lZSA9PSBkYXRhPy5yZXZpZXdlciB8fFxyXG4gICAgICAgICAgZGF0YT8uYXNzaWduZWUgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIGRhdGE/LmFzc2lnbmVlID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgICghZGF0YT8uYXNzaWduZWUgJiZcclxuICAgICAgICAodGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ub3ZlcnNlZXIgfHxcclxuICAgICAgICAgIHRoaXMuZGVmYXVsdE93bmVyID09IGRhdGE/Lm5vdGlmeU9uRmFpbHVyZSkpIHx8XHJcbiAgICAgIChkYXRhPy5yZXZpZXdlciAmJlxyXG4gICAgICAgIChkYXRhPy5yZXZpZXdlciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgZGF0YT8ucmV2aWV3ZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgIWRhdGE/LmFzc2lnbmVlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBpbiBhIGRhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGFuIG9iamVjdCB3aXRoIDQgYm9vbGVhbiBwcm9wZXJ0aWVzLlxyXG4gICAqIFRoZSBib29sZWFuIHByb3BlcnRpZXMgYXJlIGRldGVybWluZWQgYnkgdGhlIHZhbHVlcyBvZiB0aGUgZGF0YSBvYmplY3QuXHJcbiAgICogQHBhcmFtIHthbnl9IGRhdGEgLSBhbnkgPSB7XHJcbiAgICogQHJldHVybnMge1xyXG4gICAqICAgaXNWYWxpZEFzc2lnbmVlOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZEFzc2lnbm9yOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZFJldmlld2VyOiB0cnVlLFxyXG4gICAqICAgaXNWYWxpZE92ZXJzZWVyOiB0cnVlXHJcbiAgICogfVxyXG4gICAqL1xyXG4gIHZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKGRhdGE6IGFueSk6IGFueSB7XHJcbiAgICBjb25zdCBwcm9ncmFtID0gdGhpcy50ZW1wbGF0ZUluZm8/LmNhdGVnb3J5TGlzdD8uZmlsdGVyKFxyXG4gICAgICAocHJvZ3JhbTogYW55KSA9PiBwcm9ncmFtPy5wcm9ncmFtTmFtZSA9PT0gZGF0YT8ucHJvZ3JhbVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQXNzaWduZWUgPSB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdD8uZmlsdGVyKFxyXG4gICAgICAoYXNzaWduZWU6IGFueSkgPT4gYXNzaWduZWU/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8uYXNzaWduZWVcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZEFzc2lnbm9yID0gdGhpcy50ZW1wbGF0ZUluZm8/LmFzc2lnbm9yc0xpc3Q/LmZpbHRlcihcclxuICAgICAgKGFzc2lnbm9yOiBhbnkpID0+IGFzc2lnbm9yPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LmFzc2lnbm9yXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRSZXZpZXdlciA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcclxuICAgICAgKHJldmlld2VyOiBhbnkpID0+IHJldmlld2VyPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/LnJldmlld2VyXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRPdmVyc2VlciA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcclxuICAgICAgKG92ZXJzZWVyOiBhbnkpID0+IG92ZXJzZWVyPy5uYW1lQW5kRW1haWwgPT09IGRhdGE/Lm92ZXJzZWVyXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWROb3RpZnlPbkZhaWx1cmUgPSB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChub3RpZnlPbkZhaWx1cmU6IGFueSkgPT5cclxuICAgICAgICBub3RpZnlPbkZhaWx1cmU/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlXHJcbiAgICApO1xyXG4gICAgbGV0IGlzVmFsaWRBc3NpZ25lZSA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZEFzc2lnbm9yID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkUmV2aWV3ZXIgPSB0cnVlO1xyXG4gICAgbGV0IGlzVmFsaWRPdmVyc2VlciA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZE5vdGlmeU9uRmFpbHVyZSA9IHRydWU7XHJcbiAgICBpZiAocHJvZ3JhbSAmJiB0aGlzLm9yZ0RldGFpbHM/Lmhhc1Byb2dyYW1GdWxsUGVybWlzc2lvbikge1xyXG4gICAgICBpZiAocHJvZ3JhbVswXT8uYXNzaWduZWU/Lmxlbmd0aCAmJiBzZWxlY3RlZEFzc2lnbmVlPy5sZW5ndGgpIHtcclxuICAgICAgICBpc1ZhbGlkQXNzaWduZWUgPSBwcm9ncmFtWzBdPy5hc3NpZ25lZT8uaW5jbHVkZXMoXHJcbiAgICAgICAgICBzZWxlY3RlZEFzc2lnbmVlWzBdPy5teV9tZW1iZXJfaWRcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb2dyYW1bMF0/LnJldmlld2VyPy5sZW5ndGggJiYgc2VsZWN0ZWRSZXZpZXdlcj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaXNWYWxpZFJldmlld2VyID0gcHJvZ3JhbVswXT8ucmV2aWV3ZXI/LmluY2x1ZGVzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRSZXZpZXdlclswXT8ubXlfbWVtYmVyX2lkXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9ncmFtWzBdPy5vdmVyc2Vlcj8ubGVuZ3RoICYmIHNlbGVjdGVkT3ZlcnNlZXI/Lmxlbmd0aCkge1xyXG4gICAgICAgIGlzVmFsaWRPdmVyc2VlciA9IHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5pbmNsdWRlcyhcclxuICAgICAgICAgIHNlbGVjdGVkT3ZlcnNlZXJbMF0/Lm15X21lbWJlcl9pZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJvZ3JhbVswXT8ub3ZlcnNlZXI/Lmxlbmd0aCAmJiBzZWxlY3RlZE5vdGlmeU9uRmFpbHVyZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaXNWYWxpZE5vdGlmeU9uRmFpbHVyZSA9IHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5pbmNsdWRlcyhcclxuICAgICAgICAgIHNlbGVjdGVkTm90aWZ5T25GYWlsdXJlWzBdPy5teV9tZW1iZXJfaWRcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlzVmFsaWRBc3NpZ25lZTogaXNWYWxpZEFzc2lnbmVlLFxyXG4gICAgICBpc1ZhbGlkQXNzaWdub3I6IGlzVmFsaWRBc3NpZ25vcixcclxuICAgICAgaXNWYWxpZFJldmlld2VyOiBpc1ZhbGlkUmV2aWV3ZXIsXHJcbiAgICAgIGlzVmFsaWRPdmVyc2VlcjogaXNWYWxpZE92ZXJzZWVyLFxyXG4gICAgICBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlOiBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIHR3byBzdHJpbmdzIGFzIGFyZ3VtZW50cywgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhyZWUgcHJvcGVydGllc1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9ncmFtTmFtZSAtIHN0cmluZyAtJmd0OyBOYW1lIG9mIHRoZSBwcm9ncmFtXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtjaGlsZVByb2dyYW1dIC0gc3RyaW5nID0mZ3Q7IHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHN1Yi1wcm9ncmFtXHJcbiAgICogQHJldHVybnMge1xyXG4gICAqICAgcHJvZ3JhbUlkOiAxLFxyXG4gICAqICAgY2hpbGRQcm9ncmFtSWQ6IDIsXHJcbiAgICogICBjYXRlZ29yeUlkOiAnMSwyJ1xyXG4gICAqIH1cclxuICAgKi9cclxuICBnZXRQcm9ncmFtSWQocHJvZ3JhbU5hbWU6IHN0cmluZywgY2hpbGVQcm9ncmFtPzogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChwcm9ncmFtOiBhbnkpID0+IHByb2dyYW0/LnByb2dyYW1OYW1lID09PSBwcm9ncmFtTmFtZVxyXG4gICAgKTtcclxuICAgIGxldCBzdWJQcm9ncmFtO1xyXG4gICAgbGV0IHN1YlByb2dyYW1JZDtcclxuICAgIGxldCBjYXRlZ29yeUlkO1xyXG4gICAgaWYgKGNoaWxlUHJvZ3JhbT8ubGVuZ3RoICYmIHByb2dyYW0/Lmxlbmd0aCkge1xyXG4gICAgICBzdWJQcm9ncmFtID0gcHJvZ3JhbVswXT8uY2hpbGRDYXRlZ29yeT8uZmlsdGVyKFxyXG4gICAgICAgIChzdWJQcm9ncmFtOiBhbnkpID0+IHN1YlByb2dyYW0/Lm5hbWUgPT09IGNoaWxlUHJvZ3JhbVxyXG4gICAgICApO1xyXG4gICAgICBzdWJQcm9ncmFtSWQgPSBzdWJQcm9ncmFtPy5sZW5ndGggPyBzdWJQcm9ncmFtWzBdPy5pZCA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc3ViUHJvZ3JhbUlkICYmIHByb2dyYW0/Lmxlbmd0aCkge1xyXG4gICAgICBjYXRlZ29yeUlkID1cclxuICAgICAgICBwcm9ncmFtWzBdPy5wcm9ncmFtSWQ/LnRvU3RyaW5nKCkgKyAnLCcgKyBzdWJQcm9ncmFtSWQ/LnRvU3RyaW5nKCk7XHJcbiAgICB9IGVsc2UgaWYgKHByb2dyYW0/Lmxlbmd0aCkge1xyXG4gICAgICBjYXRlZ29yeUlkID0gcHJvZ3JhbVswXT8ucHJvZ3JhbUlkPy50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcHJvZ3JhbUlkOiBwcm9ncmFtPy5sZW5ndGggPyBwcm9ncmFtWzBdPy5wcm9ncmFtSWQgOiB1bmRlZmluZWQsXHJcbiAgICAgIGNoaWxkUHJvZ3JhbUlkOiBzdWJQcm9ncmFtSWQsXHJcbiAgICAgIGNhdGVnb3J5SWQ6IGNhdGVnb3J5SWQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcgYXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgYSBzdHJpbmcuXHJcbiAgICogQHBhcmFtIHthbnl9IGl0ZW0gLSB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBncm91cCB0aGF0IGlzIHNlbGVjdGVkIGZyb20gdGhlIGRyb3Bkb3duLlxyXG4gICAqIGl0IHdpbGwgcmV0dXJuIGVtcGxveWVlIGlkIGluIHRoaXMgZm9ybSAnMTIzNCwyMzQ1Jy5cclxuICAgKi9cclxuICBnZXRFbXBsb3llZUlkRnJvbUdyb3VwKGl0ZW06IGFueSkge1xyXG4gICAgbGV0IGVtcElkOiBhbnkgPSBbXTtcclxuICAgIGxldCBlbXBsb3llZV9pZDogYW55ID0gW107XHJcbiAgICB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdD8uZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVuRWxlbWVudD8ubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICBlbXBJZCA9IGVuRWxlbWVudD8ubXlfbWVtYmVyX2lkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChlbXBJZD8ubGVuZ3RoKSB7XHJcbiAgICAgIGVtcElkPy5mb3JFYWNoKChpZDogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKCh1c2VyOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh1c2VyPy5teV9tZW1iZXJfaWQgPT0gaWQpIHtcclxuICAgICAgICAgICAgZW1wbG95ZWVfaWQ/LnB1c2godXNlcj8uZW1wbG95ZWVfaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBlbXBsb3llZV9pZD8udG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElmIHRoZSBpdGVtIGlzIGEgZ3JvdXAsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqIEBwYXJhbSB7YW55fSBpdGVtIC0gYW55IC0gdGhlIGl0ZW0gdGhhdCBpcyBiZWluZyBjaGVja2VkXHJcbiAgICovXHJcbiAgaXNHcm91cFNlbGVjdGVkKGl0ZW06IGFueSkge1xyXG4gICAgbGV0IGlzR3JvdXAgPSBmYWxzZTtcclxuICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QuZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpOiBhbnkgPT4ge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZW5FbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtICYmXHJcbiAgICAgICAgKGl0ZW0/LmluY2x1ZGVzKCdVc2VycyknKSB8fCBpdGVtPy5pbmNsdWRlcygnVXNlciknKSkgJiZcclxuICAgICAgICB0eXBlb2YgZW5FbGVtZW50Py5teV9tZW1iZXJfaWQgPT0gJ29iamVjdCdcclxuICAgICAgKSB7XHJcbiAgICAgICAgaXNHcm91cCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGlzR3JvdXA7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gPGRpdiBjbGFzcz1cImFkZC1tdWx0aXBsZS1yaXNrXCIgW2F0dHIuaWRdPVwiJ3Njcm9sbFJlZmVyZW5jZSdcIiA+XHJcbiAgICA8IS0gLSBtYWluIGNvbnRhaW5lciBzdGFydHMgaGVyZSAtIC0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2stYm9keVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlzay1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvd29ya2Zsb3ctZW5naW5lL2Fzc2V0cy93b3JrZmxvdy9zcHJlYWRzaGVldC1tdWx0aXBsZS1jYXRlZ29yeS5zdmdcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGg0PllvdSBjYW4gZW50cnVzdCBtdWx0aXBsZSByZXNwb25zaWJpbGl0aWVzIGluIGp1c3QgdHdvIGVhc3kgc3RlcHM6PC9oND5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpPkRvd25sb2FkIHRoZSB0ZW1wbGF0ZSBhbmQgZmlsbCBpbiB0aGUgZGV0YWlscy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPlVwbG9hZCB0aGUgLnhsc3ggZmlsZSBhbmQgeW914oCZcmUgZ29vZCB0byBnbyE8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImRvd25sb2FkXCIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ05PVF9ET1dOTE9BRElORydcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCIgdHlwZT1cImJ1dHRvblwiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFiOzwvaT4gRG93bmxvYWQgVGVtcGxhdGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLXByb2dyZXNzXCIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ0RPV05MT0FESU5HJ1wiPlxyXG4gICAgICAgICAgICAgICAgRG93bmxvYWQgaW4gUHJvZ3Jlc3NcclxuICAgICAgICAgICAgICAgIDxhcHAtbGluZS1sb2FkZXIgW2xvYWRlckhlaWdodF09XCInMidcIj48L2FwcC1saW5lLWxvYWRlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkb3dubG9hZFN0YXR1cyA9PT0gJ0RPV05MT0FERUQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIj48aSBjbGFzcz1cImljb25zXCI+JiN4ZTkxYzs8L2k+RG93bmxvYWQgQ29tcGxldGU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1hZ2FpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIElzIHRoZSBmaWxlIG5vdCBkb3dubG9hZGVkP1xyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRvd25sb2FkVGVtcGxhdGUoKVwiPlJldHJ5IERvd25sb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwiaXNXcm9uZ0ZpbGUgfHwgaXNXcm9uZ0Zvcm1hdHx8IGlzRmlsZUVtcHR5XCJcclxuICAgICAgICAgICAgPnt7ZXJyb3JNZXNzYWdlfX08L3A+ICBcclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4gLS0+XHJcbjxhcHAtYnVsay1yZXNwb25zaWJpbGl0eS12aWV3ICpuZ0lmPVwic2hvd0V4Y2VsXCJcclxuICAgIFtyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWRdPVwicmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkXCJcclxuICAgIFtidWxrVXBsb2FkXT1cImJ1bGtVcGxvYWRcIlxyXG4gICAgW2ZpbGVOYW1lXT1cImZpbGVOYW1lXCJcclxuICAgIFtsb2FkZXJdPVwibG9hZGVyXCJcclxuICAgIFtkZWZhdWx0T3duZXJdPVwiZGVmYXVsdE93bmVyXCJcclxuICAgIFt0YWJUeXBlXT1cInRhYlR5cGVcIlxyXG4gICAgW2J1bGtVcGxvYWRdPVwiYnVsa1VwbG9hZFwiXHJcbiAgICAoc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKT1cInN1Ym1pdFJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCgpXCJcclxuICAgIChzZWxlY3RlZFRhYik9XCJzZWxlY3RlZFRhYigkZXZlbnQpXCJcclxuICAgIChjYW5jZWwpPVwicmVzZXQoKVwiXHJcbiAgICBbcmVzcG9uc2liaWxpdHlUeXBlXT1cIidtdWx0aVRhYidcIj5cclxuPC9hcHAtYnVsay1yZXNwb25zaWJpbGl0eS12aWV3PlxyXG48YXBwLWxvYWRlci1pbmxpbmUgKm5nSWY9XCJsb2FkZXJcIj48L2FwcC1sb2FkZXItaW5saW5lPlxyXG5cclxuPGlucHV0IHR5cGU9XCJmaWxlXCIgWyhuZ01vZGVsKV09XCJmaWxlVmFsdWVcIiBpZD1cImZpbGVJbnB1dFwiIGNsYXNzPVwiaGlkZGVuLWlucHV0XCIgYWNjZXB0PVwiLnhsc3hcIiAoY2hhbmdlKT1cInVwbG9hZGVkRmlsZSgkZXZlbnQpXCIgbXVsdGlwbGUgLz5cclxuPGFwcC1zbWlsZXktZGlhbG9nLWlubGluZSAqbmdJZj1cInNob3dTbWlsZXlcIiBbbWVzc2FnZV09XCJzbWlsZXlNZXNzYWdlXCIgW2FjdGlvbkJ1dHRvbnNdPVwiYWN0aW9uQnV0dG9uc1wiIChhY3Rpb24pPVwiYWN0aW9uKCRldmVudClcIiAoY2xvc2VTbWlsZXkpPVwiY2xvc2VTbWlsZXkoJGV2ZW50KVwiPjwvYXBwLXNtaWxleS1kaWFsb2ctaW5saW5lPiJdfQ==
|
|
1757
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Z4LXdvcmtmbG93LWVuZ2luZS9zcmMvbGliL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiL2FkZC1tdWx0aXBsZS1yZXNwb25zaWJpbGl0eS13aXRoLXRhYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQUliLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxNQUFNLE1BQU0sZUFBZSxDQUFDO0FBQ25DLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBTzdCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixnQkFBZ0IsRUFDaEIsMEJBQTBCLEVBQzFCLHFCQUFxQixFQUNyQiwyQkFBMkIsRUFDM0IsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixvQkFBb0IsR0FDckIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFZckQsTUFBTSxPQUFPLHlDQUF5QztJQXNCcEQsSUFBMkIsZ0JBQWdCLENBQUMsSUFBUztRQUNuRCxJQUFJLENBQUMsWUFB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LFNBQVMsQ0FBQyxZQUFZLElBQUksSUFBSTtnQkFDOUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JELE9BQU8sU0FBUyxFQUFFLFlBQVksSUFBSSxRQUFRLEVBQzFDO2dCQUNBLE9BQU8sR0FBRyxJQUFJLENBQUM7YUFDaEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7K0dBcitEVSx5Q0FBeUM7bUdBQXpDLHlDQUF5Qyw0Y0MzQ3RELCtxRkErQ2dNOzs0RkRKbkwseUNBQXlDO2tCQVJyRCxTQUFTOytCQUNFLDBDQUEwQztnUUFRMUMsYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLDhCQUE4QjtzQkFBdkMsTUFBTTtnQkFnQm9CLGdCQUFnQjtzQkFBMUMsS0FBSzt1QkFBQyxjQUFjO2dCQUdaLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQWtGRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE9uSW5pdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50JztcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4JztcclxuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3NuYWNrLWJhci9zbmFjay1iYXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkZFJpc2tTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYWRkLXJpc2suc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vd29ya2Zsb3ctc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRnJlcXVlbmN5QnVsa1NlcnZpY2UgfSBmcm9tICcuLi93b3JrZmxvdy1zZXJ2aWNlcy9mcmVxdWVuY3kuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlc3BvbnNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL3dvcmtmbG93LXNlcnZpY2VzL3Jlc3BvbnNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJZnJhbWVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaWZyYW1lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSRVNQT05TSUJJTElUWSB9IGZyb20gJy4uL2NvbnN0YW50cy94bHN4LmNvbnN0YW50JztcclxuaW1wb3J0IHtcclxuICBBU1NJR05FRV9UWVBFX0RST1BET1dOX0xJU1QsXHJcbiAgRlJFUVVFTkNZX0RST1BET1dOX0xJU1QsXHJcbiAgRlVMTF9NT05USF9OQU1FUyxcclxuICBQUk9HUkFNX1RZUEVfRFJPUERPV05fTElTVCxcclxuICBSQ19UWVBFX0RST1BET1dOX0xJU1QsXHJcbiAgUkVWSUVXRVJfVFlQRV9EUk9QRE9XTl9MSVNULFxyXG4gIFJJU0tfQ0xBU1NfTElTVCxcclxuICBWQUxJREFUSU9OX01FU1NBR0VTLFxyXG4gIFlFU19OT19EUk9QRE9XTl9MSVNULFxyXG59IGZyb20gJy4uL2NvbnN0YW50cy9yZXNwb25zaWJpbGl0eSc7XHJcbmltcG9ydCB7IFJFR0VYIH0gZnJvbSAnLi4vY29uc3RhbnRzL3JlZ2l4LmNvbnN0YW50cyc7XHJcblxyXG50eXBlIEFPQSA9IGFueVtdW107XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtbXVsdGlwbGUtcmVzcG9uc2liaWxpdHktd2l0aC10YWIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogW1xyXG4gICAgJy4vYWRkLW11bHRpcGxlLXJlc3BvbnNpYmlsaXR5LXdpdGgtdGFiLmNvbXBvbmVudC5sZXNzJyxcclxuICAgICcuLi9mb3Jtcy5sZXNzJyxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eVdpdGhUYWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBPdXRwdXQoKSBwaWNrZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBwb3B1bGF0ZU9wdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZGlzY29ubmVjdFJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgaXNOb3RpZmljYXRpb25QZW5kaW5nID0gMDtcclxuICBAT3V0cHV0KCkgY2xvc2VBZGRNdWx0aXBsZVJlc3BvbnNpYmlsaXR5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHF1ZXJ5UGFyYW06IHN0cmluZyA9ICcnO1xyXG4gIHJlY2VudFJlc3BvbnNpYmlsaXR5VXJsOiBhbnkgPSB7XHJcbiAgICBieVJlc3BvbnNpYmlsaXRpZXM6IHsgdHlwZTogWydyZWNlbnRfcmVzcG9uc2liaWxpdGllcyddLCBzdWJUeXBlOiBbJ0NDJ10gfSxcclxuICAgIGJ5U3RhdHVzOiB7IHR5cGU6IFtdLCBzdWJUeXBlOiBbXSB9LFxyXG4gICAgZmlsdGVyT2JqZWN0OiB7XHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiBbXSxcclxuICAgICAgZW50cnVzdGVkQnk6IFtdLFxyXG4gICAgICBlbnRydXN0ZWRUbzogW10sXHJcbiAgICAgIHJpc2tJZHM6IFtdLFxyXG4gICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBbXSxcclxuICAgIH0sXHJcbiAgICB0aW1lUGVyaW9kRGV0YWlsczogeyB0eXBlOiAnJywgc2VsZWN0ZWRQZXJpb2Q6ICcnLCBzZWxlY3RlZFllYXI6ICcnIH0sXHJcbiAgICBzdGF0dXM6ICcnLFxyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgndXBsb2FkZWRGaWxlJykgc2V0IHVwbG9hZGVkRmlsZURhdGEoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnVwbG9hZGVkRmlsZShkYXRhKTtcclxuICB9XHJcbiAgQElucHV0KCkgb3JnRGV0YWlscyE6IGFueTtcclxuICBASW5wdXQoKSBmZWF0dXJlITogYW55O1xyXG5cclxuICB1cmwgPVxyXG4gICAgJ3E9e1wiYnlSZXNwb25zaWJpbGl0aWVzXCI6e1widHlwZVwiOltcInJlc3BvbnNpYmlsaXRpZXNfaW5fcXVldWVcIl0sXCJzdWJUeXBlXCI6W1wiQ0NcIl19LFwiYnlTdGF0dXNcIjp7XCJ0eXBlXCI6W1wicmVzcG9uc2liaWxpdGllc19pbl9xdWV1ZVwiXSxcInN1YlR5cGVcIjpbXX0sXCJmaWx0ZXJPYmplY3RcIjp7XCJyZXNwb25zaWJpbGl0eUNlbnRlclwiOltdLFwiZW50cnVzdGVkQnlcIjpbXSxcImVudHJ1c3RlZFRvXCI6W10sXCJyaXNrSWRzXCI6W10sXCJyZXNwb25zaWJpbGl0eUNhdGVnb3J5XCI6W119LFwidGltZVBlcmlvZERldGFpbHNcIjp7XCJ0eXBlXCI6XCJcIixcInNlbGVjdGVkUGVyaW9kXCI6XCJcIixcInNlbGVjdGVkWWVhclwiOlwiXCJ9LFwic3RhdHVzXCI6XCJcIn0nO1xyXG4gIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZDogYW55ID0ge1xyXG4gICAgaGVhZGVyOiBbXSxcclxuICAgIHJlcG9ydHM6IFtdLFxyXG4gIH07XHJcbiAgdGFiVHlwZTogJ2ZyZXF1ZW5jeScgfCAnb25nb2luZycgfCAnb25Db21wbGV0aW9uJyA9ICdmcmVxdWVuY3knO1xyXG4gIHRhYkluZGV4OiBhbnkgPSB7XHJcbiAgICBmcmVxdWVuY3k6IDAsXHJcbiAgICBvbmdvaW5nOiAxLFxyXG4gICAgb25Db21wbGV0aW9uOiAyLFxyXG4gIH07XHJcblxyXG4gIGJ1bGtVcGxvYWQ6IGFueSA9IHtcclxuICAgIGZyZXF1ZW5jeToge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgcmVwb3J0czogW10sXHJcbiAgICB9LFxyXG4gICAgb25nb2luZzoge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgICAgcmVwb3J0czogW10sXHJcbiAgICB9LFxyXG4gICAgb25Db21wbGV0aW9uOiB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH0sXHJcbiAgfTtcclxuXHJcbiAgdGVtcGxhdGVJbmZvOiBhbnkgPSB7XHJcbiAgICBjYXRlZ29yeUxpc3Q6IFtdLFxyXG4gICAgcmNMaXN0OiBbXSxcclxuICAgIGFzc2lnbm9yc0xpc3Q6IFtdLFxyXG4gICAgYXNzaWduZWVzTGlzdDogW10sXHJcbiAgICByZXZpZXdlckxpc3Q6IFtdLFxyXG4gICAgcGFyZW50UmVzcG9uc2liaWxpdHk6IFtdLFxyXG4gICAgbWVtYmVySWQ6ICcnLFxyXG4gIH07XHJcbiAgaXNMb2FkZXIgPSBmYWxzZTtcclxuICBzaG93Q2F0ZWdvcnlMaXN0ID0gZmFsc2U7XHJcbiAgdGVtcGxhdGVEb3dubG9hZGVkID0gZmFsc2U7XHJcbiAgZG93bmxvYWRJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgbG9hZGVyID0gZmFsc2U7XHJcbiAgaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICBpc1dyb25nRmlsZSA9IGZhbHNlO1xyXG4gIGlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICBmaWxlTmFtZTogYW55O1xyXG4gIGRhdGE6IGFueTtcclxuICBzaG93RXhjZWwgPSBmYWxzZTtcclxuICB1cGxvYWRlZEZpbGVzOiBhbnkgPSBbXTtcclxuICBmaWxlUmVzcG9uc2U6IGFueSA9IFtdO1xyXG4gIGZpbGVWYWx1ZTogYW55O1xyXG4gIG1lbWJlcklkID0gMDtcclxuICBvcmdhbml6YXRpb25JZCA9IDA7XHJcbiAgZXJyb3JNZXNzYWdlID0gJyBpbnZhbGlkIGZpbGUgZXJyb3InO1xyXG4gIGRvd25sb2FkU3RhdHVzOiBzdHJpbmcgPSAnTk9UX0RPV05MT0FESU5HJztcclxuICBkb3dubG9hZFBlcmNlbnQgPSAwO1xyXG4gIGRlZmF1bHRPd25lciA9ICcnO1xyXG4gIHNtaWxleU1lc3NhZ2UgPSBgWW91J3JlIEFsbCBTZXQhIFdlJ3JlIHByb2Nlc3NpbmcgeW91ciByZXF1ZXN0IGFuZCB5b3Ugd2lsbCBiZSBub3RpZmllZCB2aWEgZW1haWwgdXBvbiBjb21wbGV0aW9uLmA7XHJcbiAgYWN0aW9uQnV0dG9ucyA9IFtcclxuICAgIHtcclxuICAgICAgYnV0dG9uVGV4dDogJ0VudHJ1c3QgTW9yZSBSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgY2xhc3M6ICd3aGl0ZS1idG4nLFxyXG4gICAgICBpZDogJ2FkZE1vcmUnLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgYnV0dG9uVGV4dDogdGhpcy5pc05vdGlmaWNhdGlvblBlbmRpbmdcclxuICAgICAgICA/ICdWaWV3IFJlc3BvbnNpYmlsaXRpZXMgSW4gUXVldWUnXHJcbiAgICAgICAgOiAnVmlldyBSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgY2xhc3M6ICdibHVlLWJ0bicsXHJcbiAgICAgIGlkOiAndmlldycsXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgc2hvd1NtaWxleSA9IGZhbHNlO1xyXG4gIG1lbWJlcl9vYmpfaWQgPSAnJztcclxuICByaXNrQ2xhc3NFbmFibGVkOiBhbnk7XHJcbiAgdXNlckluZm8hOiBhbnk7XHJcbiAgcmVzcG9uc2liaWxpdHlEYXRhITogYW55O1xyXG4gIEBJbnB1dCgpIGZlYXR1cmVmbGFnOiBhbnk7XHJcbiAgZmZCdWxrVXBsb2FkT3B0aW1pemF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgUkVTUE9OU0lCSUxJVFkgPSBSRVNQT05TSUJJTElUWTtcclxuXHJcbiAgaXNEYXlJbnZhbGlkID0gZmFsc2U7XHJcbiAgaXNEYXRlRm9ybWF0SW52YWxpZCA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByaXNrU2VydmljZTogQWRkUmlza1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc3BvbnNpYmlsaXR5U2VydmljZTogUmVzcG9uc2liaWxpdHlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZyZXF1ZW5jeVNlcnZpY2U6IEZyZXF1ZW5jeUJ1bGtTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpZnJhbWVTZXJ2aWNlOiBJZnJhbWVTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7fVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5waWNrZXJDaGFuZ2VkLmVtaXQoZmFsc2UpO1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb25JZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uSWQoKTtcclxuICAgIHRoaXMubWVtYmVyX29ial9pZCA9IHRoaXMuYXV0aFNlcnZpY2UuZ2V0VXNlckRldGFpbHMoKS51c2VyLnVpZDtcclxuICAgIHRoaXMudXNlckluZm8gPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJEZXRhaWxzKCkudXNlcjtcclxuICAgIHRoaXMuZGVmYXVsdE93bmVyID0gdGhpcy51c2VySW5mb1xyXG4gICAgICA/IHRoaXMudXNlckluZm8ubmFtZSArICcgKCcgKyB0aGlzLnVzZXJJbmZvLmVtYWlsICsgJyknXHJcbiAgICAgIDogJyc7XHJcbiAgICB0aGlzLmdldFVzZXJEZXRhaWxzKCk7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldE9yZ2FuaXphdGlvbkRldGFpbHMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMucmlza0NsYXNzRW5hYmxlZCA9IHJlcy5lbmFibGVfcmlza2NsYXNzO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZmQnVsa1VwbG9hZE9wdGltaXphdGlvbiA9IHRoaXMuZmVhdHVyZS5pc0ZlYXR1cmVFbmFibGVkKFxyXG4gICAgICAnZmZfYnVsa191cGxvYWRfb3B0aW1pemF0aW9uJ1xyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJCcm93c2VGaWxlKCkge1xyXG4gICAgY29uc3QgZ2V0RmlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlSW5wdXQnKTtcclxuICAgIGlmIChnZXRGaWxlKSB7XHJcbiAgICAgIGdldEZpbGUuY2xpY2soKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0VXNlckRldGFpbHMoKSB7XHJcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmlzTm90aWZpY2F0aW9uUGVuZGluZyA9IHJlcy5ub3RpZmljYXRpb25fcGVuZGluZ19mbGFnO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRlZEZpbGUoZXZlbnQ6IGFueSwgdGFiVHlwZT86IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB7XHJcbiAgICAgICAgaGVhZGVyOiBbXSxcclxuICAgICAgICByZXBvcnRzOiBbXSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvID0ge1xyXG4gICAgICAgIGNhdGVnb3J5TGlzdDogW10sXHJcbiAgICAgICAgcmNMaXN0OiBbXSxcclxuICAgICAgICBhc3NpZ25vcnNMaXN0OiBbXSxcclxuICAgICAgICBhc3NpZ25lZXNMaXN0OiBbXSxcclxuICAgICAgICByZXZpZXdlckxpc3Q6IFtdLFxyXG4gICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiBbXSxcclxuICAgICAgICBtZW1iZXJJZDogJycsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMudXBsb2FkZWRGaWxlcyA9IFtdO1xyXG4gICAgICBjb25zdCByZWZlcmVuY2UgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc2Nyb2xsUmVmZXJlbmNlJyk7XHJcbiAgICAgIGlmIChyZWZlcmVuY2UpIHtcclxuICAgICAgICByZWZlcmVuY2Uuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnY2VudGVyJyB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBldmVudC50YXJnZXQuZmlsZXNbMF0ubmFtZTtcclxuICAgICAgdGhpcy51cGxvYWRlZEZpbGVzLnB1c2goZXZlbnQudGFyZ2V0LmZpbGVzKTtcclxuICAgICAgY29uc3QgdGFyZ2V0OiBEYXRhVHJhbnNmZXIgPSBldmVudC50YXJnZXQgYXMgRGF0YVRyYW5zZmVyO1xyXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGN1cmx5XHJcbiAgICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoICE9PSAxKVxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBtdWx0aXBsZSBmaWxlcycpO1xyXG4gICAgICBjb25zdCByZWFkZXI6IEZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJzdHI6IHN0cmluZyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBjb25zdCB3YjogWExTWC5Xb3JrQm9vayA9IFhMU1gucmVhZChic3RyLCB7IHR5cGU6ICdiaW5hcnknIH0pO1xyXG4gICAgICAgIGNvbnN0IHdzbmFtZTogc3RyaW5nID0gd2IuU2hlZXROYW1lc1tSRVNQT05TSUJJTElUWS5zaGVldEluZGV4LmZyZXF1ZW5jeVJlc3BvbnNpYmlsaXR5XTtcclxuICAgICAgICBjb25zdCBzaGVldDI6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbUkVTUE9OU0lCSUxJVFkuc2hlZXRJbmRleC5vbkdvaW5nUmVzcG9uc2liaWxpdHldO1xyXG4gICAgICAgIGNvbnN0IHdzbmFtZTE6IHN0cmluZyA9IHdiLlNoZWV0TmFtZXNbUkVTUE9OU0lCSUxJVFkuc2hlZXRJbmRleC5kYXRhXTtcclxuICAgICAgICBjb25zdCB3czogWExTWC5Xb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lXTtcclxuICAgICAgICBjb25zdCBzaGVldFJlcG9ydDI6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3NoZWV0Ml07XHJcbiAgICAgICAgY29uc3QgdGVtcERhdGE6IFhMU1guV29ya1NoZWV0ID0gd2IuU2hlZXRzW3dzbmFtZTFdO1xyXG4gICAgICAgIGNvbnN0IHREYXRhID0gWExTWC51dGlscy5zaGVldF90b19qc29uKHRlbXBEYXRhLCB7IGhlYWRlcjogMSB9KSBhcyBBT0E7XHJcbiAgICAgICAgY29uc3QgdGVtcExpc3QgPSB0RGF0YS5maWx0ZXIoXHJcbiAgICAgICAgICAoZGF0YUVsZW1lbnQ6IGFueSkgPT4gZGF0YUVsZW1lbnQubGVuZ3RoID4gMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRPcmdhbml6YXRpb25EZXRhaWxzKHRlbXBMaXN0KTtcclxuICAgICAgICB3Yi5TaGVldE5hbWVzLmZvckVhY2goKHNoZWV0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHN3aXRjaCAoc2hlZXQ/LnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgY2FzZSAnZnJlcXVlbmN5IHJlc3BvbnNpYmlsaXRpZXMnOlxyXG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUZvckRpZmZlcmVudFRhYnMod3MsIHNoZWV0KTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnb25nb2luZyByZXNwb25zaWJpbGl0aWVzJzpcclxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFGb3JEaWZmZXJlbnRUYWJzKHNoZWV0UmVwb3J0Miwgc2hlZXQpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9O1xyXG4gICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRhcmdldC5maWxlc1swXSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIHdvcmtzaGVldCBhbmQgYSBzaGVldCBuYW1lLCBhbmQgdGhlbiBpdCBzZXRzIHRoZSBkYXRhIGZvciBkaWZmZXJlbnQgdGFicy5cclxuICAgKiBAcGFyYW0gd3MgLSBYTFNYLldvcmtTaGVldCwgc2hlZXQ6IHN0cmluZ1xyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzaGVldCAtIHN0cmluZyAtIHRoZSBuYW1lIG9mIHRoZSBzaGVldCBpbiB0aGUgZXhjZWwgZmlsZVxyXG4gICAqIEByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgXCJyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWRcIiB3aGljaCBpcyBhbiBvYmplY3QuXHJcbiAgICovXHJcbiAgc2V0RGF0YUZvckRpZmZlcmVudFRhYnMod3M6IFhMU1guV29ya1NoZWV0LCBzaGVldDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkOiBhbnkgPSB7XHJcbiAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICBzdWJIZWFkaW5nOiBbXSxcclxuICAgIH07XHJcbiAgICBsZXQgc2hlZXRWYWx1ZSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fanNvbih3cywge1xyXG4gICAgICBoZWFkZXI6IDEsXHJcbiAgICAgIHJhdzogZmFsc2UsXHJcbiAgICB9KSBhcyBBT0E7XHJcbiAgICBsZXQgZGF0YSA9IHNoZWV0VmFsdWUuZmlsdGVyKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgaXNVbmRlZmluZWQgPSAnJztcclxuICAgICAgcmVzLmZvckVhY2goKGVsOiBhbnkpID0+IHtcclxuICAgICAgICBpc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkICsgZWw7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoc2hlZXRWYWx1ZVsyXSAmJiBzaGVldFZhbHVlWzJdWzFdID09PSAnUHJvZ3JhbScpIHtcclxuICAgICAgICByZXR1cm4gIShyZXM/Lmxlbmd0aCA9PT0gOSAmJiByZXNbOF0gPT09ICcnICYmICFpc1VuZGVmaW5lZC5sZW5ndGgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiAhKHJlcz8ubGVuZ3RoID09PSA2ICYmIHJlc1s1XSA9PT0gJycgJiYgIWlzVW5kZWZpbmVkLmxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmZpbGVOYW1lLnN1YnN0cigtNSkgIT09ICcueGxzeCcpIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICdUaGUgaW5jb3JyZWN0IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQuIFBsZWFzZSB1cGxvYWQgdGhlIHRlbXBsYXRlIHdoaWNoIHlvdSBkb3dubG9hZGVkIGZyb20gaGVyZS4nICtcclxuICAgICAgICAnIFJFVFJZJztcclxuICAgICAgdGhpcy5pc1dyb25nRmlsZSA9IHRydWU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyID0gY2xvbmVEZWVwKGRhdGFbMl0pO1xyXG4gICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnN1YkhlYWRpbmcgPSBjbG9uZURlZXAoZGF0YVszXSk7XHJcbiAgICBjb25zdCBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSB0aGlzLmRldGVjdEV4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyhcclxuICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlcixcclxuICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnN1YkhlYWRpbmdcclxuICAgICk7XHJcbiAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID1cclxuICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zO1xyXG4gICAgZGF0YSA9IGRhdGEuc2xpY2UoNSk7XHJcbiAgICBpZiAodGhpcy5tZW1iZXJfb2JqX2lkICE9IHRoaXMudGVtcGxhdGVJbmZvLm1lbWJlcklkKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArXHJcbiAgICAgICAgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2liaWxpdHlEYXRhID0gZGF0YS5maWx0ZXIoXHJcbiAgICAgIChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5sZW5ndGggPiAwXHJcbiAgICApO1xyXG4gICAgcmVzcG9uc2liaWxpdHlEYXRhLmZvckVhY2goKHJlcG9ydDogYW55KSA9PiB7XHJcbiAgICAgIGxldCB2YWxpZERhdGU7XHJcbiAgICAgIGNvbnN0IHZhbGlkVXNlciA9IHRoaXMucmV0dXJuSWRzKHJlcG9ydFsyXSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgOiBmYWxzZTtcclxuICAgICAgaWYgKHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZC5oZWFkZXJbMV0gPT09ICdQcm9ncmFtJykge1xyXG4gICAgICAgIHZhbGlkRGF0ZSA9IHRoaXMuY29tcGFyZVdpdGhDdXJyZW50RGF0ZShyZXBvcnRbNF0sIHJlcG9ydFs1XSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdmFsaWREYXRlID0gdGhpcy5jb21wYXJlV2l0aEN1cnJlbnREYXRlKHJlcG9ydFs1XSwgcmVwb3J0WzZdKTtcclxuICAgICAgfVxyXG4gICAgICAvKiBQdXNoaW5nIHRoZSByZXBvcnQgZGV0YWlscyBpbnRvIHRoZSBidWxrVXBsb2FkIG9iamVjdCBhcyBwZXIgdGFiIHRhYnMgKi9cclxuICAgICAgaWYgKHNoZWV0Py50b0xvd2VyQ2FzZSgpID09PSAnZnJlcXVlbmN5IHJlc3BvbnNpYmlsaXRpZXMnKSB7XHJcbiAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLnJlcG9ydHMucHVzaChcclxuICAgICAgICAgIHRoaXMuc2V0UmVwb3J0RGV0YWlscyhcclxuICAgICAgICAgICAgcmVwb3J0LFxyXG4gICAgICAgICAgICAnZnJlcXVlbmN5JyxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0gJ1Byb2dyYW0nID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5mcmVxdWVuY3kuaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5zdWJIZWFkaW5nID1cclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uc3ViSGVhZGluZztcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQuZnJlcXVlbmN5LnJlcG9ydHMgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LnJlcG9ydHM7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLmZyZXF1ZW5jeS5oYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPVxyXG4gICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ29uZ29pbmcgcmVzcG9uc2liaWxpdGllcycpIHtcclxuICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQucmVwb3J0cy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5zZXRSZXBvcnREZXRhaWxzKFxyXG4gICAgICAgICAgICByZXBvcnQsXHJcbiAgICAgICAgICAgICdvbmdvaW5nJyxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkLmhlYWRlclsxXSA9PT0gJ1Byb2dyYW0nID8gdHJ1ZSA6IGZhbHNlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25nb2luZy5oZWFkZXIgPSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQ/LmhlYWRlcjtcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25nb2luZy5zdWJIZWFkaW5nID1cclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uc3ViSGVhZGluZztcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25nb2luZy5yZXBvcnRzID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzaGVldD8udG9Mb3dlckNhc2UoKSA9PT0gJ29uIGNvbXBsZXRpb24gcmVzcG9uc2liaWxpdGllcycpIHtcclxuICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQucmVwb3J0cy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5zZXRSZXBvcnREZXRhaWxzKFxyXG4gICAgICAgICAgICByZXBvcnQsXHJcbiAgICAgICAgICAgICdvbkNvbXBsZXRpb24nLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQuaGVhZGVyWzFdID09PSAnUHJvZ3JhbScgPyB0cnVlIDogZmFsc2VcclxuICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZC5vbkNvbXBsZXRpb24uaGVhZGVyID0gcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5oZWFkZXI7XHJcbiAgICAgICAgdGhpcy5idWxrVXBsb2FkLm9uQ29tcGxldGlvbi5zdWJIZWFkaW5nID1cclxuICAgICAgICAgIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZD8uc3ViSGVhZGluZztcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQub25Db21wbGV0aW9uLnJlcG9ydHMgPVxyXG4gICAgICAgICAgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkPy5yZXBvcnRzO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBpc0VtcHR5ID0gdGhpcy5jaGVja0VtcHR5RmlsZShkYXRhKTtcclxuICAgIC8qIENoZWNraW5nIGlmIHRoZSBmaWxlIGlzIGVtcHR5LCBpZiBpdCBpcyBlbXB0eSBpdCB3aWxsIHJldHVybiBhbiBlcnJvciBtZXNzYWdlLiBJZiBpdCBpcyBub3RcclxuICAgIGVtcHR5IGl0IHdpbGwgY2hlY2sgaWYgdGhlIGZpbGUgaXMgdGhlIGNvcnJlY3QgZmlsZSwgaWYgaXQgaXMgbm90IHRoZSBjb3JyZWN0IGZpbGUgaXQgd2lsbFxyXG4gICAgcmV0dXJuIGFuIGVycm9yIG1lc3NhZ2UuIElmIGl0IGlzIHRoZSBjb3JyZWN0IGZpbGUgaXQgd2lsbCBjYWxsIHRoZSBmaWxlVXBsb2FkKCkgZnVuY3Rpb24uICovXHJcbiAgICBpZiAoaXNFbXB0eSkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgJ1lvdSBoYXZlIHVwbG9hZGVkIGEgYmxhbmsgdGVtcGxhdGUuIFBsZWFzZSBhZGQgZGV0YWlscyBmb3IgYWxsIG1hbmRhdG9yeSBmaWVsZHMuIFJFVFJZJztcclxuICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5Py5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKicgJiZcclxuICAgICAgdGhpcy5idWxrVXBsb2FkPy5vbmdvaW5nPy5oZWFkZXJbMF0gIT09ICdSZXNwb25zaWJpbGl0eSBOYW1lKicgJiZcclxuICAgICAgdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb24/LmhlYWRlclswXSAhPT0gJ1Jlc3BvbnNpYmlsaXR5IE5hbWUqJ1xyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAnVGhlIGluY29ycmVjdCBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkLiBQbGVhc2UgdXBsb2FkIHRoZSB0ZW1wbGF0ZSB3aGljaCB5b3UgZG93bmxvYWRlZCBmcm9tIGhlcmUuJyArXHJcbiAgICAgICAgJyBSRVRSWSc7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1dyb25nRm9ybWF0ID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0ZpbGVFbXB0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbGVVcGxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlzRmlsZUVtcHR5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGaWxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzV3JvbmdGb3JtYXQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gdHJ1ZTtcclxuICAgIHRoaXMuZmlsZVZhbHVlID0gJyc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QgaGFzIGEgZnJlcXVlbmN5IG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxyXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgZnJlcXVlbmN5IG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIGZyZXF1ZW5jeS4gSWYgbm90LCBjaGVja1xyXG4gICAqIGlmIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYW4gb25nb2luZyBvYmplY3Qgd2l0aCBhIHJlcG9ydHMgYXJyYXksIHNldCB0aGVcclxuICAgKiByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdG8gdGhlIG9uZ29pbmcgb2JqZWN0IGFuZCBzZXQgdGhlIHRhYlR5cGUgdG8gb25nb2luZy4gSWYgbm90LCBjaGVjayBpZlxyXG4gICAqIHRoZSBidWxrVXBsb2FkIG9iamVjdCBoYXMgYW4gb25Db21wbGV0aW9uIG9iamVjdCB3aXRoIGEgcmVwb3J0cyBhcnJheSwgc2V0IHRoZVxyXG4gICAqIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB0byB0aGUgb25Db21wbGV0aW9uIG9iamVjdCBhbmQgc2V0IHRoZSB0YWJUeXBlIHRvIG9uQ29tcGxldGlvbi4gSWYgbm90LFxyXG4gICAqIHJldHVybiB0cnVlLlxyXG4gICAqIDwvY29kZT5cclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSA9IHtcclxuICAgKiBAcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUuXHJcbiAgICovXHJcbiAgY2hlY2tFbXB0eUZpbGUoZGF0YT86IGFueSkge1xyXG4gICAgbGV0IGlzRW1wdHkgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5mcmVxdWVuY3k7XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdmcmVxdWVuY3knO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc/LnJlcG9ydHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZztcclxuICAgICAgdGhpcy50YWJUeXBlID0gJ29uZ29pbmcnO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8ucmVwb3J0cz8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0gdGhpcy5idWxrVXBsb2FkPy5vbkNvbXBsZXRpb247XHJcbiAgICAgIHRoaXMudGFiVHlwZSA9ICdvbkNvbXBsZXRpb24nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNFbXB0eSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNFbXB0eTtcclxuICB9XHJcblxyXG4gIGNvbXBhcmVXaXRoQ3VycmVudERhdGUoZGF5OiBhbnksIG1vbnRoOiBhbnkpIHtcclxuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXHJcbiAgICAgIHsgdmFsdWU6IDEsIG1vbnRoOiAnSmFuJyB9LFxyXG4gICAgICB7IHZhbHVlOiAyLCBtb250aDogJ0ZlYicgfSxcclxuICAgICAgeyB2YWx1ZTogMywgbW9udGg6ICdNYXInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDQsIG1vbnRoOiAnQXByJyB9LFxyXG4gICAgICB7IHZhbHVlOiA1LCBtb250aDogJ01heScgfSxcclxuICAgICAgeyB2YWx1ZTogNiwgbW9udGg6ICdKdW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDcsIG1vbnRoOiAnSnVsJyB9LFxyXG4gICAgICB7IHZhbHVlOiA4LCBtb250aDogJ0F1ZycgfSxcclxuICAgICAgeyB2YWx1ZTogOSwgbW9udGg6ICdTZXAnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEwLCBtb250aDogJ09jdCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTEsIG1vbnRoOiAnTm92JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMiwgbW9udGg6ICdEZWMnIH0sXHJcbiAgICBdO1xyXG5cclxuICAgIGlmICghKGRheSB8fCBtb250aCkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKCEoZGF5ICYmIG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBtb250aEZvcm1hdFJlZ2V4ID0gUkVHRVguTU9OVEg7XHJcbiAgICAgIGlmICghbW9udGhGb3JtYXRSZWdleC50ZXN0KG1vbnRoKSkge1xyXG4gICAgICAgIHRoaXMuaXNEYXRlRm9ybWF0SW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKCEoZGF5ID4gMCAmJiBkYXkgPCAzMikpIHtcclxuICAgICAgICB0aGlzLmlzRGF5SW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtb250aEFuZFllYXIgPSBtb250aC5zcGxpdChcIidcIik7XHJcblxyXG4gICAgICBjb25zdCBzdGFydERhdGUgPSBtb21lbnQoXHJcbiAgICAgICAgZGF5ICsgJy0nICsgbW9udGhBbmRZZWFyWzBdICsgJy0nICsgMjAgKyBtb250aEFuZFllYXJbMV0gKyAnIDAwOjAwOjAwJyxcclxuICAgICAgICAnREQtTU1NTS1ZWVlZIEhIOm1tOnNzJ1xyXG4gICAgICApLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpO1xyXG4gICAgICBpZiAoc3RhcnREYXRlID09ICdJbnZhbGlkIGRhdGUnKSB7XHJcbiAgICAgICAgdGhpcy5pc0RheUludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7fSwgNSk7XHJcbiAgICAgIGNvbnN0IGRhdGVfdmFsdWUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgICAgZGF0ZV92YWx1ZS5zZXRNb250aChcclxuICAgICAgICB0eXBlb2YgbW9udGggIT09ICdudW1iZXInXHJcbiAgICAgICAgICA/IG1vbnRoTmFtZXMuZmlsdGVyKCh4KSA9PiB4Lm1vbnRoID09PSBtb250aD8uc3Vic3RyaW5nKDAsIDMpKVswXVxyXG4gICAgICAgICAgICAgID8udmFsdWUgLSAxXHJcbiAgICAgICAgICA6IG1vbnRoXHJcbiAgICAgICk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0RnVsbFllYXIoTnVtYmVyKDIwICsgbW9udGguc3BsaXQoXCInXCIpWzFdKSk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0RGF0ZShOdW1iZXIoZGF5KSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBjdXJyZW50RGF0ZT8udG9KU09OKCk/LnNwbGl0KCdUJylbMF0gIT1cclxuICAgICAgICAgIGRhdGVfdmFsdWU/LnRvSlNPTigpPy5zcGxpdCgnVCcpWzBdICYmXHJcbiAgICAgICAgY3VycmVudERhdGUgPiBkYXRlX3ZhbHVlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBpc1Bhc3REYXRlKGRheTogYW55LCBtb250aDogYW55KSB7XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtcclxuICAgICAgeyB2YWx1ZTogMSwgbW9udGg6ICdKYW4nIH0sXHJcbiAgICAgIHsgdmFsdWU6IDIsIG1vbnRoOiAnRmViJyB9LFxyXG4gICAgICB7IHZhbHVlOiAzLCBtb250aDogJ01hcicgfSxcclxuICAgICAgeyB2YWx1ZTogNCwgbW9udGg6ICdBcHInIH0sXHJcbiAgICAgIHsgdmFsdWU6IDUsIG1vbnRoOiAnTWF5JyB9LFxyXG4gICAgICB7IHZhbHVlOiA2LCBtb250aDogJ0p1bicgfSxcclxuICAgICAgeyB2YWx1ZTogNywgbW9udGg6ICdKdWwnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDgsIG1vbnRoOiAnQXVnJyB9LFxyXG4gICAgICB7IHZhbHVlOiA5LCBtb250aDogJ1NlcCcgfSxcclxuICAgICAgeyB2YWx1ZTogMTAsIG1vbnRoOiAnT2N0JyB9LFxyXG4gICAgICB7IHZhbHVlOiAxMSwgbW9udGg6ICdOb3YnIH0sXHJcbiAgICAgIHsgdmFsdWU6IDEyLCBtb250aDogJ0RlYycgfSxcclxuICAgIF07XHJcblxyXG4gICAgaWYgKCEoZGF5IHx8IG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKCEoZGF5ICYmIG1vbnRoKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBjb25zdCByZXBvcnREYXRlID0gbmV3IERhdGUoZGF5ICsgbW9udGguc3BsaXQoXCInXCIpKTtcclxuICAgICAgY29uc3QgZGF0ZV92YWx1ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGRhdGVfdmFsdWUuc2V0TW9udGgoXHJcbiAgICAgICAgdHlwZW9mIG1vbnRoICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgPyBtb250aE5hbWVzLmZpbHRlcigoeCkgPT4geC5tb250aCA9PT0gbW9udGg/LnN1YnN0cmluZygwLCAzKSlbMF1cclxuICAgICAgICAgICAgICA/LnZhbHVlIC0gMVxyXG4gICAgICAgICAgOiBtb250aFxyXG4gICAgICApO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldEZ1bGxZZWFyKE51bWJlcigyMCArIG1vbnRoLnNwbGl0KFwiJ1wiKVsxXSkpO1xyXG4gICAgICBkYXRlX3ZhbHVlLnNldERhdGUoTnVtYmVyKGRheSkpO1xyXG4gICAgICBpZiAoY3VycmVudERhdGUgPiBkYXRlX3ZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFRlbXBsYXRlKCkge1xyXG4gICAgdGhpcy5kb3dubG9hZFN0YXR1cyA9ICdET1dOTE9BRElORyc7XHJcbiAgICB0aGlzLmRvd25sb2FkUGVyY2VudCA9IDA7XHJcbiAgICBjb25zdCBkb3dubG9hZERhdGUgPSBuZXcgRGF0ZSgpLnRvRGF0ZVN0cmluZygpLnNwbGl0KCcgJyk7XHJcbiAgICBjb25zdCBmaWxlTmFtZSA9IGBFbnRydXN0IFJlc3BvbnNpYmlsaXRpZXMtJHtkb3dubG9hZERhdGVbMl19LSR7ZG93bmxvYWREYXRlWzFdfS0ke2Rvd25sb2FkRGF0ZVszXX0ueGxzeGA7XHJcblxyXG4gICAgdGhpcy5yaXNrU2VydmljZS5kb3dubG9hZFJlc3BvbnNpYmlsaXR5VGVtcGxhdGUoKS5zdWJzY3JpYmUoXHJcbiAgICAgIChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZGF0YS5sb2FkZWQpIHtcclxuICAgICAgICAgIHRoaXMuZG93bmxvYWRQZXJjZW50ID0gMTAwICogKGRhdGEubG9hZGVkIC8gZGF0YS50b3RhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkYXRhLmJvZHkpIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gdGhpcy5yaXNrU2VydmljZS5kb3duTG9hZEZpbGUoXHJcbiAgICAgICAgICAgICAgZGF0YS5ib2R5LFxyXG4gICAgICAgICAgICAgICdhcHBsaWNhdGlvbi94bHN4JyxcclxuICAgICAgICAgICAgICBmaWxlTmFtZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSwgMTUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aGlzLmRvd25sb2FkU3RhdHVzID0gJ0RPV05MT0FERUQnO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKCkge1xyXG4gICAgdGhpcy5sb2FkZXIgPSB0cnVlO1xyXG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IFtdO1xyXG4gICAgbGV0IHJlc3BvbnNpYmlsaXR5TXVsdGlUYWJCdWxrVXBsb2FkOiBhbnkgPSBbXTtcclxuICAgIGxldCB2YWxpZFJlc3BvbnNpYmlsaXRpZXMgPSAwO1xyXG4gICAgcmVzcG9uc2liaWxpdHlNdWx0aVRhYkJ1bGtVcGxvYWQgPVxyXG4gICAgICB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeT8ucmVwb3J0cz8uY29uY2F0KFxyXG4gICAgICAgIHRoaXMuYnVsa1VwbG9hZD8ub25nb2luZz8ucmVwb3J0cyxcclxuICAgICAgICB0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbj8ucmVwb3J0c1xyXG4gICAgICApO1xyXG4gICAgICByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZD8uZm9yRWFjaCgocmVwb3J0OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVwb3J0Py5pc1ZhbGlkKSB7XHJcbiAgICAgICAgICB2YWxpZFJlc3BvbnNpYmlsaXRpZXMgKz0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBwYXlsb2FkID0ge1xyXG4gICAgICAgIG9yaWdpbmFsRmlsZW5hbWU6IHRoaXMuZmlsZVJlc3BvbnNlWzBdPy5vcmlnaW5hbF9maWxlbmFtZSxcclxuICAgICAgICBmaWxlTmFtZTogdGhpcy5maWxlUmVzcG9uc2VbMF0/LmZpbGVuYW1lLFxyXG4gICAgICAgIGZpbGVQYXRoOiB0aGlzLmZpbGVSZXNwb25zZVswXT8uZmlsZXBhdGgsXHJcbiAgICAgICAgdG90YWxSZXNwb25zaWJpbGl0eUNvdW50OiByZXNwb25zaWJpbGl0eU11bHRpVGFiQnVsa1VwbG9hZD8ubGVuZ3RoLFxyXG4gICAgICAgIHZhbGlkUmVzcG9uc2liaWxpdHlDb3VudDogdmFsaWRSZXNwb25zaWJpbGl0aWVzLFxyXG4gICAgICB9O1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuYWRkQnVsa1Jlc3BvbnNpYmlsaXR5KHBheWxvYWQpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dFeGNlbCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd1NtaWxleSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJtaXRXb3JrZmxvdygpO1xyXG4gICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlEYXRhID0gcmVzO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxyXG4gICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXHJcbiAgICAgICAgICAnYWxlcnQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdFdvcmtmbG93KCkge1xyXG4gICAgY29uc3QgbWVzc2FnZSA9IHsgdHlwZTogJ3N1Ym1pdCcgfTtcclxuICAgIGNvbnN0IHRhcmdldE9yaWdpbiA9IHRoaXMuZ2V0T3JpZ2luKCk7XHJcbiAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRhcmdldE9yaWdpbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE9yaWdpbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XHJcbiAgfVxyXG5cclxuICByZXR1cm5JZHMoaXRlbTogYW55LCBrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICBzd2l0Y2ggKGtleSkge1xyXG4gICAgICBjYXNlICdyY19pZCc6XHJcbiAgICAgICAgbGV0IHJjT2JqID0geyBuYW1lOiAnJywgcmNJZDogMCwgcGFyZW50SWRzOiBbXSB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnJjTGlzdC5mb3JFYWNoKChyY19lbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyY19lbGVtZW50Lm5hbWUgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBsZXQgbmFtZTtcclxuICAgICAgICAgICAgaWYgKHJjX2VsZW1lbnQubmFtZS5pbmNsdWRlcygnW1dJVEhJTl0nKSkge1xyXG4gICAgICAgICAgICAgIG5hbWUgPSByY19lbGVtZW50Lm5hbWUuc3BsaXQoJyBbV0lUSElOXSAnKVswXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBuYW1lID0gcmNfZWxlbWVudC5uYW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJjT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWUsXHJcbiAgICAgICAgICAgICAgcmNJZDogcmNfZWxlbWVudC5yY19pZCxcclxuICAgICAgICAgICAgICBwYXJlbnRJZHM6IHJjX2VsZW1lbnQucGFyZW50SWRzLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByY09iajtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAncmV2aWV3ZXInOlxyXG4gICAgICAgIGxldCByZXZpZXdlck9iaiA9IHsgbmFtZTogJycsIGVtcGxveWVlSWQ6IDAsIGVtYWlsOiAnJyB9O1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3QuZm9yRWFjaCgocmV2aWV3ZXJFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChyZXZpZXdlckVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV2aWV3ZXJPYmogPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogcmV2aWV3ZXJFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1wbG95ZWVJZDogcmV2aWV3ZXJFbGVtZW50Lm15X21lbWJlcl9pZCxcclxuICAgICAgICAgICAgICBlbWFpbDogcmV2aWV3ZXJFbGVtZW50LmVtYWlsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXZpZXdlck9iajtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Fzc2lnbm9yJzpcclxuICAgICAgICBsZXQgYXNzaWdub3JPYmogPSB7IG5hbWU6ICcnLCBtZW1iZXJJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWdub3JzTGlzdC5mb3JFYWNoKChhc3NpZ25vckVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGFzc2lnbm9yRWxlbWVudC5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgICAgICBhc3NpZ25vck9iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBhc3NpZ25vckVsZW1lbnQubmFtZSxcclxuICAgICAgICAgICAgICBlbWFpbDogYXNzaWdub3JFbGVtZW50LmVtYWlsLFxyXG4gICAgICAgICAgICAgIG1lbWJlcklkOiBhc3NpZ25vckVsZW1lbnQubWVtYmVyX2lkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhc3NpZ25vck9iajtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2NjJzpcclxuICAgICAgICBsZXQgY2NPYmogPSB7IG5hbWU6ICcnLCBlbXBsb3llZUlkOiAwLCBlbWFpbDogJycgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKGNjRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2NFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGNjT2JqID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IGNjRWxlbWVudC5uYW1lLFxyXG4gICAgICAgICAgICAgIGVtcGxveWVlSWQ6IGNjRWxlbWVudC5lbXBsb3llZV9pZCxcclxuICAgICAgICAgICAgICBlbWFpbDogY2NFbGVtZW50LmVtYWlsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBjY09iajtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY2NGYWlsdXJlJzpcclxuICAgICAgICBsZXQgY2NmT2JqID0geyBuYW1lOiAnJywgZW1wbG95ZWVJZDogMCwgZW1haWw6ICcnIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdC5mb3JFYWNoKChjY2ZFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjY2ZFbGVtZW50Lm5hbWVBbmRFbWFpbCA9PSBpdGVtKSB7XHJcbiAgICAgICAgICAgIGNjZk9iaiA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBjY2ZFbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgZW1wbG95ZWVJZDogY2NmRWxlbWVudC5lbXBsb3llZV9pZCxcclxuICAgICAgICAgICAgICBlbWFpbDogY2NmRWxlbWVudC5lbWFpbCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gY2NmT2JqO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnZW50cnVzdGVkX3RvJzpcclxuICAgICAgICBsZXQgZW1wSWQgPSAwO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmFzc2lnbmVlc0xpc3QuZm9yRWFjaCgoZW5FbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChlbkVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0pIHtcclxuICAgICAgICAgICAgZW1wSWQgPSBlbkVsZW1lbnQubWVtYmVyX2lkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBlbXBJZDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgJ3BhcmVudFJlc3BvbnNpYmlsaXR5JzpcclxuICAgICAgICBsZXQgaWQgPSAwO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLnBhcmVudFJlc3BvbnNpYmlsaXR5LmZvckVhY2goXHJcbiAgICAgICAgICAocmVzcG9uc2liaWxpdHk6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2liaWxpdHk/Lm5hbWUgPT09IGl0ZW0pIHtcclxuICAgICAgICAgICAgICBpZCA9IHJlc3BvbnNpYmlsaXR5LmlkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdyaXNrX2NsYXNzJzpcclxuICAgICAgICBpZiAoaXRlbSA9PSAnTG93Jykge1xyXG4gICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdMb3ctTWVkaXVtJykge1xyXG4gICAgICAgICAgcmV0dXJuIDI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtID09ICdNZWRpdW0tSGlnaCcpIHtcclxuICAgICAgICAgIHJldHVybiAzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbSA9PSAnSGlnaCcpIHtcclxuICAgICAgICAgIHJldHVybiA0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMucmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkID0ge1xyXG4gICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICByZXBvcnRzOiBbXSxcclxuICAgIH07XHJcbiAgICB0aGlzLmJ1bGtVcGxvYWQgPSB7XHJcbiAgICAgIGZyZXF1ZW5jeToge1xyXG4gICAgICAgIGhlYWRlcjogW10sXHJcbiAgICAgICAgc3ViSGVhZGluZzogW10sXHJcbiAgICAgICAgcmVwb3J0czogW10sXHJcbiAgICAgIH0sXHJcbiAgICAgIG9uZ29pbmc6IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgICBvbkNvbXBsZXRpb246IHtcclxuICAgICAgICBoZWFkZXI6IFtdLFxyXG4gICAgICAgIHN1YkhlYWRpbmc6IFtdLFxyXG4gICAgICAgIHJlcG9ydHM6IFtdLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnRlbXBsYXRlSW5mbyA9IHtcclxuICAgICAgY2F0ZWdvcnlMaXN0OiBbXSxcclxuICAgICAgcmNMaXN0OiBbXSxcclxuICAgICAgYXNzaWdub3JzTGlzdDogW10sXHJcbiAgICAgIGFzc2lnbmVlc0xpc3Q6IFtdLFxyXG4gICAgICByZXZpZXdlckxpc3Q6IFtdLFxyXG4gICAgICBtZW1iZXJJZDogJycsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuaXNGaWxlRW1wdHkgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNXcm9uZ0ZpbGUgPSBmYWxzZTtcclxuICAgIHRoaXMuaXNXcm9uZ0Zvcm1hdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5maWxlTmFtZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZGF0YSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuc2hvd0V4Y2VsID0gZmFsc2U7XHJcbiAgICB0aGlzLnNob3dTbWlsZXkgPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmNsb3NlQWRkTXVsdGlwbGVSZXNwb25zaWJpbGl0eS5lbWl0KCk7XHJcbiAgfVxyXG4gIGFjdGlvbihldmVudDogc3RyaW5nKSB7XHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2FkZE1vcmUnOlxyXG4gICAgICAgIHRoaXMucmVzZXQoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndmlldyc6XHJcbiAgICAgICAgdGhpcy52aWV3UmVzcG9uc2liaWxpdGllcygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VTbWlsZXkoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaG93U21pbGV5ID0gZmFsc2U7XHJcbiAgICB0aGlzLmNsb3NlV29ya2Zsb3cuZW1pdCh7IGV2dDogdGhpcy5yZXNwb25zaWJpbGl0eURhdGEsIGNvbmZpcm06IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgdmlld1Jlc3BvbnNpYmlsaXRpZXMoKTogdm9pZCB7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICBsZXQgdXJsU3Vic3RyaW5nID0gJy9jb21wbGlhbmNlb3BzL3Jlc3BvbnNpYmlsaXRpZXMvJztcclxuICAgIHRoaXMuZGlzY29ubmVjdFJlZnJlc2guZW1pdChmYWxzZSk7XHJcbiAgICBpZiAod2luZG93LmxvY2F0aW9uLmhvc3Quc3RhcnRzV2l0aCgnbG9jYWxob3N0JykpIHtcclxuICAgICAgdXJsID0gJ2h0dHA6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyB1cmxTdWJzdHJpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB1cmwgPSAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3QgKyB1cmxTdWJzdHJpbmc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlmcmFtZVNlcnZpY2UucmVkaXJlY3RJZkluSWZyYW1lKHVybCwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyBVcGxvYWQgRmlsZSB0byB0aGUgc2VydmVyXHJcbiAgZmlsZVVwbG9hZCgpIHtcclxuICAgIHRoaXMuZmlsZVJlc3BvbnNlID0gW107XHJcbiAgICB0aGlzLmxvYWRlciA9IHRydWU7XHJcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgY29uc3QgZmlsZSA9IHRoaXMudXBsb2FkZWRGaWxlc1swXVswXTtcclxuICAgIGZvcm1EYXRhLmFwcGVuZCgnc291cmNlZmlsZScsIGZpbGUpO1xyXG4gICAgZm9ybURhdGEuYXBwZW5kKCdkZXN0aW5hdGlvbicsICdidWxrdXBsb2FkL2VudHJ1c3QvJyArIHRoaXMudXNlckluZm8uZW1haWwpO1xyXG4gICAgdGhpcy5yZXNwb25zaWJpbGl0eVNlcnZpY2UuZmlsZVVwbG9hZChmb3JtRGF0YSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5maWxlbmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5maWxlUmVzcG9uc2UucHVzaChyZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KFxyXG4gICAgICAgICAgJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycsXHJcbiAgICAgICAgICAnYWxlcnQnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldE9yZ2FuaXphdGlvbkRldGFpbHModGVtcExpc3Q6IGFueSkge1xyXG4gICAgaWYgKHRlbXBMaXN0WzBdICE9PSB1bmRlZmluZWQgJiYgdGVtcExpc3RbMF1bUkVTUE9OU0lCSUxJVFkudXNlckluZGV4LmN1cnJlbnRVc2VyXSkge1xyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mby5tZW1iZXJJZCA9IHRlbXBMaXN0WzBdW1JFU1BPTlNJQklMSVRZLnVzZXJJbmRleC5jdXJyZW50VXNlcl07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgJ1RoZSBpbmNvcnJlY3QgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZC4gUGxlYXNlIHVwbG9hZCB0aGUgdGVtcGxhdGUgd2hpY2ggeW91IGRvd25sb2FkZWQgZnJvbSBoZXJlLicgK1xyXG4gICAgICAgICcgUkVUUlknO1xyXG4gICAgICB0aGlzLmlzV3JvbmdGaWxlID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGVtcExpc3QuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcblxyXG4gICAgICBjb25zdCByZWd1bGF0aW9ucyA9IHRoaXMuZ2V0UHJvZ3JhbURldGFpbHMoZWxlbWVudCwgUkVTUE9OU0lCSUxJVFkucHJvZ3JhbUluZGV4LnJlZ3VsYXRpb25zLCAxKTtcclxuICAgICAgY29uc3Qgc3RhbmRhcmRzID0gdGhpcy5nZXRQcm9ncmFtRGV0YWlscyhlbGVtZW50LCBSRVNQT05TSUJJTElUWS5wcm9ncmFtSW5kZXguc3RhbmRhcmRzLCAyKTtcclxuICAgICAgY29uc3QgaW50ZXJuYWxDb250cm9scyA9IHRoaXMuZ2V0UHJvZ3JhbURldGFpbHMoZWxlbWVudCwgUkVTUE9OU0lCSUxJVFkucHJvZ3JhbUluZGV4LmludGVybmFsQ29udHJvbHMsIDMpO1xyXG4gICAgICBjb25zdCBvdGhlcnMgPSB0aGlzLmdldFByb2dyYW1EZXRhaWxzKGVsZW1lbnQsIFJFU1BPTlNJQklMSVRZLnByb2dyYW1JbmRleC5vdGhlcnMsIDApO1xyXG5cclxuICAgICAgaWYocmVndWxhdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChyZWd1bGF0aW9ucyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKHN0YW5kYXJkcykge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5wdXNoKHN0YW5kYXJkcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGludGVybmFsQ29udHJvbHMpIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3QucHVzaChpbnRlcm5hbENvbnRyb2xzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYob3RoZXJzKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uY2F0ZWdvcnlMaXN0LnB1c2gob3RoZXJzKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8qIENoZWNraW5nIGlmIHRoZSBlbGVtZW50WzldIGlzIG5vdCBudWxsIGFuZCBub3QgZW1wdHkuIElmIGl0IGlzIG5vdCBudWxsIGFuZCBub3QgZW1wdHksIGl0IGlzXHJcbiAgICAgIHB1c2hpbmcgdGhlIGVsZW1lbnRbOV0gKFJDKSB0byB0aGUgYXJyYXkgKHJjTGlzdCkuICovXHJcbiAgICAgIGlmIChlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJjSW5kZXguaWRdICkge1xyXG4gICAgICAgIGNvbnN0IHJjID0ge1xyXG4gICAgICAgICAgbmFtZTogZWxlbWVudFtSRVNQT05TSUJJTElUWS5yY0luZGV4Lm5hbWVdLFxyXG4gICAgICAgICAgcmNfaWQ6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmNJbmRleC5pZF0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yY0xpc3QucHVzaChyYyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFzc2lnbmVlXHJcbiAgICAgIGlmIChlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbmVlSW5kZXguaWRdICkge1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbmVlID0ge1xyXG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbmVlSW5kZXgubmFtZV0sXHJcbiAgICAgICAgICAvLyBuYW1lOiBlbGVtZW50WzExXS5zcGxpdCgnICgnKVswXSxcclxuICAgICAgICAgIG5hbWU6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWduZWVJbmRleC5uYW1lXS5zcGxpdCgnICgnKVswXSxcclxuICAgICAgICAgIGVtYWlsOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbmVlSW5kZXguZW1haWxdLnNwbGl0KCcgKCcpWzFdLnJlcGxhY2UoJyknLCAnJyksXHJcbiAgICAgICAgICBtZW1iZXJfaWQ6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWduZWVJbmRleC5pZF0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5hc3NpZ25lZXNMaXN0LnB1c2goYXNzaWduZWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZXZpZXdlclxyXG4gICAgICBpZiAoZWxlbWVudFtSRVNQT05TSUJJTElUWS5yZXZpZXdlckluZGV4LmlkXSApIHtcclxuICAgICAgICBjb25zdCByZXZpZXdlciA9IHtcclxuICAgICAgICAgIG5hbWVBbmRFbWFpbDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5yZXZpZXdlckluZGV4Lm5hbWVdLFxyXG4gICAgICAgICAgLy8gbmFtZTogZWxlbWVudFsxMV0uc3BsaXQoJyAoJylbMF0sXHJcbiAgICAgICAgICBuYW1lOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLnJldmlld2VySW5kZXgubmFtZV0uc3BsaXQoJyAoJylbMF0sXHJcbiAgICAgICAgICBlbWFpbDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5yZXZpZXdlckluZGV4LmVtYWlsXS5zcGxpdCgnICgnKVsxXS5yZXBsYWNlKCcpJywgJycpLFxyXG4gICAgICAgICAgZW1wbG95ZWVfaWQ6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmV2aWV3ZXJJbmRleC5pZF0sXHJcbiAgICAgICAgICBteV9tZW1iZXJfaWQ6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkucmV2aWV3ZXJJbmRleC5pZF0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5yZXZpZXdlckxpc3QucHVzaChyZXZpZXdlcik7XHJcbiAgICAgIH1cclxuICAgICAgLyogQ2hlY2tpbmcgaWYgdGhlIGVsZW1lbnRbMl0gaXMgbm90IGVtcHR5IGFuZCBub3QgZXF1YWwgdG8gc3BhY2UuIElmIGl0IGlzIG5vdCBlbXB0eSBhbmQgbm90XHJcbiAgICAgIGVxdWFsIHRvIHNwYWNlLCBpdCB3aWxsIGNyZWF0ZSBhbiBvYmplY3QgYW5kIHB1c2ggaXQgdG8gdGhlIGFzc2lnbm9yc0xpc3QgYXJyYXkuICovXHJcbiAgICAgIGlmIChlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXguaWRdICkge1xyXG4gICAgICAgIGNvbnN0IGFzc2lnbm9yID0ge1xyXG4gICAgICAgICAgbmFtZUFuZEVtYWlsOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXgubmFtZV0sXHJcbiAgICAgICAgICBuYW1lOiBlbGVtZW50W1JFU1BPTlNJQklMSVRZLmFzc2lnbm9ySW5kZXgubmFtZV0sXHJcbiAgICAgICAgICBlbWFpbDogZWxlbWVudFtSRVNQT05TSUJJTElUWS5hc3NpZ25vckluZGV4LmVtYWlsXSxcclxuICAgICAgICAgIC8vIG5hbWU6IGVsZW1lbnRbMTRdLnNwbGl0KCcgKCcpWzBdLFxyXG4gICAgICAgICAgLy8gZW1haWw6IGVsZW1lbnRbMTRdLnNwbGl0KCcgKCcpWzFdLnJlcGxhY2UoJyknLCAnJyksXHJcbiAgICAgICAgICBtZW1iZXJfaWQ6IGVsZW1lbnRbUkVTUE9OU0lCSUxJVFkuYXNzaWdub3JJbmRleC5tZW1iZXJfaWRdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWdub3JzTGlzdC5wdXNoKGFzc2lnbm9yKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuICAgIC8qIENyZWF0aW5nIGEgbGlzdCBvZiBjaGlsZCBjYXRlZ29yaWVzIGFuZCBhdHRhY2hpbmcgdGhlbSB0byB0aGVpciBwYXJlbnQgcHJvZ3JhbSAqL1xyXG4gICAgaWYgKHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudGVtcGxhdGVJbmZvLmNhdGVnb3J5TGlzdC5mb3JFYWNoKChwcm9ncmFtOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gKHRlbXBMaXN0WzBdIHx8IFtdKS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoY2VsbDogYW55KSA9PiBjZWxsID09IHByb2dyYW0/LnByb2dyYW1JZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgY29uc3QgY2hpbGRDYXRlZ29yeSA9IFtdO1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDE7IHRydWU7IGorKykge1xyXG4gICAgICAgICAgICBpZiAodGVtcExpc3Rbal0gJiYgdGVtcExpc3Rbal1baW5kZXhdKSB7XHJcbiAgICAgICAgICAgICAgY2hpbGRDYXRlZ29yeS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHRlbXBMaXN0W2pdW2luZGV4IC0gMV0sXHJcbiAgICAgICAgICAgICAgICBpZDogdGVtcExpc3Rbal1baW5kZXhdLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5mby5jYXRlZ29yeUxpc3RbaV1bJ2NoaWxkQ2F0ZWdvcnknXSA9IGNoaWxkQ2F0ZWdvcnk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByb2dyYW1EZXRhaWxzKGVsZW1lbnQ6IGFueSwgaW5kZXg6IGFueSwgdHlwZTogbnVtYmVyKSB7XHJcbiAgICBpZihlbGVtZW50W2luZGV4LmlkXSAmJiB0eXBlb2YgZWxlbWVudFtpbmRleC5pZF0gPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgcHJvZ3JhbU5hbWU6IGVsZW1lbnRbaW5kZXgubmFtZV0sXHJcbiAgICAgICAgcHJvZ3JhbUlkOiBlbGVtZW50W2luZGV4LmlkXSxcclxuICAgICAgICBwcm9ncmFtVHlwZTogdHlwZVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGFuIGV2ZW50LCB3aGljaCBpcyBhIHN0cmluZywgYW5kIHRoZW4gaXQgc2V0cyB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHRvXHJcbiAgICogdGhlIHZhbHVlIG9mIHRoZSBidWxrVXBsb2FkIHZhcmlhYmxlLCB3aGljaCBpcyBhbiBvYmplY3QsIGFuZCB0aGVuIGl0IGFjY2Vzc2VzIHRoZSBwcm9wZXJ0eSBvZlxyXG4gICAqIHRoYXQgb2JqZWN0IHRoYXQgbWF0Y2hlcyB0aGUgZXZlbnQgc3RyaW5nLlxyXG4gICAqXHJcbiAgICogU28gaWYgdGhlIGV2ZW50IHN0cmluZyBpcyAnZnJlcXVlbmN5JywgdGhlbiB0aGUgcmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkIHZhcmlhYmxlIHdpbGwgYmUgc2V0IHRvXHJcbiAgICogdGhlIHZhbHVlIG9mIHRoZSBmcmVxdWVuY3kgcHJvcGVydHkgb2YgdGhlIGJ1bGtVcGxvYWQgb2JqZWN0LlxyXG4gICAqXHJcbiAgICogSWYgdGhlIGV2ZW50IHN0cmluZyBpcyAnb25nb2luZycsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byB0aGVcclxuICAgKiB2YWx1ZSBvZiB0aGUgb25nb2luZyBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgZXZlbnQgc3RyaW5nIGlzICdvbkNvbXBsZXRpb24nLCB0aGVuIHRoZSByZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgdmFyaWFibGUgd2lsbCBiZSBzZXQgdG8gdGhlXHJcbiAgICogdmFsdWUgb2YgdGhlIG9uQ29tcGxldGlvbiBwcm9wZXJ0eSBvZiB0aGUgYnVsa1VwbG9hZCBvYmplY3QuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgZXZlbnQgc3RyaW5nIGlzIGFueXRoaW5nIGVsc2UsIHRoZW4gdGhlIHJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCB2YXJpYWJsZSB3aWxsIGJlIHNldCB0b1xyXG4gICAqIHRoZSB2YWx1ZSBvZiB0aGUgZnJlcXVlbmN5IHByb3BlcnR5IG9mIHRoZSBidWxrVXBsb2FkIG9iamVjdC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBzdHJpbmcgLSB0aGUgZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGZyb20gdGhlIGNoaWxkIGNvbXBvbmVudCAoZnJlcXVlbmN5IHwgb25nb2luZyB8IG9uQ29tcGxldGlvbilcclxuICAgKi9cclxuICBzZWxlY3RlZFRhYihldmVudDogJ2ZyZXF1ZW5jeScgfCAnb25nb2luZycgfCAnb25Db21wbGV0aW9uJykge1xyXG4gICAgdGhpcy50YWJUeXBlID0gZXZlbnQ7XHJcbiAgICBzd2l0Y2ggKGV2ZW50KSB7XHJcbiAgICAgIGNhc2UgJ2ZyZXF1ZW5jeSc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/LmZyZXF1ZW5jeTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnb25nb2luZyc6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/Lm9uZ29pbmc7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ29uQ29tcGxldGlvbic6XHJcbiAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQgPSB0aGlzLmJ1bGtVcGxvYWQ/Lm9uQ29tcGxldGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZCA9IHRoaXMuYnVsa1VwbG9hZD8uZnJlcXVlbmN5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGV0ZWN0cyB0aGUgZm91ciBmcmVxdWVuY3kgY29sdW1ucyBhZGRlZCB0byB0aGUgbGF0ZXN0IHhsc3ggdGVtcGxhdGU6XHJcbiAgICogRHVlIFRpbWUsIEVuZHMgQWZ0ZXIgT2NjdXJyZW5jZXMsIEVuZHMgQnkgRGF0ZSAoRGF5KSwgRW5kcyBCeSBEYXRlIChNb250aCkuXHJcbiAgICogT2xkZXIgdGVtcGxhdGVzIHdpdGhvdXQgdGhlc2UgY29sdW1ucyBrZWVwIHRoZSBvcmlnaW5hbCBjb2x1bW4gbWFwcGluZy5cclxuICAgKi9cclxuICBkZXRlY3RFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMoaGVhZGVyOiBhbnlbXSA9IFtdLCBzdWJIZWFkaW5nOiBhbnlbXSA9IFtdKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBjZWxscyA9IFsuLi4oaGVhZGVyIHx8IFtdKSwgLi4uKHN1YkhlYWRpbmcgfHwgW10pXTtcclxuICAgIHJldHVybiBjZWxscy5zb21lKChjZWxsOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHR5cGVvZiBjZWxsICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gY2VsbC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccysvZywgJyAnKTtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdkdWUgdGltZScpIHx8XHJcbiAgICAgICAgbm9ybWFsaXplZC5pbmNsdWRlcygncmVzcG9uc2liaWxpdHkgZW5kcyBhZnRlcicpIHx8XHJcbiAgICAgICAgbm9ybWFsaXplZC5pbmNsdWRlcygncmVzcG9uc2liaWxpdHkgZW5kcyBieSBkYXRlJylcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtYXBzIGZyZXF1ZW5jeSBjb2x1bW5zIHdoZW4gdGhlIHVwbG9hZGVkIGZpbGUgaW5jbHVkZXMgdGhlIGZvdXIgbmV3IGZpZWxkcyxcclxuICAgKiBzbyBsYXRlciBjb2x1bW5zIChSQywgcmV2aWV3ZXIsIGV0Yy4pIHN0YXkgYWxpZ25lZC4gT25nb2luZy9vbkNvbXBsZXRpb24gYXJlIHVuY2hhbmdlZC5cclxuICAgKi9cclxuICBhcHBseUV4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyhvYmo6IGFueSwgcmVwb3J0OiBhbnksIGlzUHJvZ3JhbTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGlzUHJvZ3JhbSkge1xyXG4gICAgICBvYmouZHVlVGltZSA9IHJlcG9ydFsxMV07XHJcbiAgICAgIG9iai5yZXNwb25zaWJpbGl0eVdpbmRvdyA9IHJlcG9ydFsxMl07XHJcbiAgICAgIG9iai5mYWlsZWRBZnRlciA9IHJlcG9ydFsxM107XHJcbiAgICAgIG9iai5lbmRzQWZ0ZXJPY2N1cnJlbmNlcyA9IHJlcG9ydFsxNF07XHJcbiAgICAgIG9iai5lbmRzQnlEYXRlRGF5ID0gcmVwb3J0WzE1XTtcclxuICAgICAgb2JqLmVuZHNCeURhdGVNb250aCA9IHJlcG9ydFsxNl07XHJcbiAgICAgIG9iai5yZXNwb25zaWJpbGl0eUNlbnRlciA9IHJlcG9ydFsxN107XHJcbiAgICAgIG9iai5yZXNwb25zaWJpbGl0eUNlbnRlclR5cGUgPSByZXBvcnRbMThdO1xyXG4gICAgICBvYmoucmVwb3J0Q2xhc3MgPSByZXBvcnRbMTldO1xyXG4gICAgICBvYmoub2JqZWN0aXZlID0gcmVwb3J0WzIwXTtcclxuICAgICAgb2JqLm5vdGVzID0gcmVwb3J0WzIxXTtcclxuICAgICAgb2JqLmlzRm9ybWF0ID0gcmVwb3J0WzIyXTtcclxuICAgICAgb2JqLmZvcm1hdEZvclJlc3BvbnNpYmlsaXR5ID0gcmVwb3J0WzIzXTtcclxuICAgICAgb2JqLmRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZCA9IHJlcG9ydFsyNF07XHJcbiAgICAgIG9iai5yZXZpZXdlciA9IHJlcG9ydFsyNV07XHJcbiAgICAgIG9iai5yZXZpZXdlclR5cGUgPSByZXBvcnRbMjZdO1xyXG4gICAgICBvYmoucmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbiA9IHJlcG9ydFsyN107XHJcbiAgICAgIG9iai5yZXZpZXdXaWxsQmVGYWlsZWRBZnRlciA9IHJlcG9ydFsyOF07XHJcbiAgICAgIG9iai5vdmVyc2VlciA9IHJlcG9ydFsyOV07XHJcbiAgICAgIG9iai5ub3RpZnlPbkZhaWx1cmUgPSByZXBvcnRbMzBdO1xyXG4gICAgICBvYmouY29sbGFib3JhdG9yID0gcmVwb3J0WzMxXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG9iai5kdWVUaW1lID0gcmVwb3J0WzhdO1xyXG4gICAgICBvYmoucmVzcG9uc2liaWxpdHlXaW5kb3cgPSByZXBvcnRbOV07XHJcbiAgICAgIG9iai5mYWlsZWRBZnRlciA9IHJlcG9ydFsxMF07XHJcbiAgICAgIG9iai5lbmRzQWZ0ZXJPY2N1cnJlbmNlcyA9IHJlcG9ydFsxMV07XHJcbiAgICAgIG9iai5lbmRzQnlEYXRlRGF5ID0gcmVwb3J0WzEyXTtcclxuICAgICAgb2JqLmVuZHNCeURhdGVNb250aCA9IHJlcG9ydFsxM107XHJcbiAgICAgIG9iai5yZXNwb25zaWJpbGl0eUNlbnRlciA9IHJlcG9ydFsxNF07XHJcbiAgICAgIG9iai5yZXBvcnRDbGFzcyA9IHJlcG9ydFsxNV07XHJcbiAgICAgIG9iai5vYmplY3RpdmUgPSByZXBvcnRbMTZdO1xyXG4gICAgICBvYmoubm90ZXMgPSByZXBvcnRbMTddO1xyXG4gICAgICBvYmouaXNGb3JtYXQgPSByZXBvcnRbMThdO1xyXG4gICAgICBvYmouZm9ybWF0Rm9yUmVzcG9uc2liaWxpdHkgPSByZXBvcnRbMTldO1xyXG4gICAgICBvYmouZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkID0gcmVwb3J0WzIwXTtcclxuICAgICAgb2JqLnJldmlld2VyID0gcmVwb3J0WzIxXTtcclxuICAgICAgb2JqLnJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW4gPSByZXBvcnRbMjJdO1xyXG4gICAgICBvYmoucmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXIgPSByZXBvcnRbMjNdO1xyXG4gICAgICBvYmoub3ZlcnNlZXIgPSByZXBvcnRbMjRdO1xyXG4gICAgICBvYmoubm90aWZ5T25GYWlsdXJlID0gcmVwb3J0WzI1XTtcclxuICAgICAgb2JqLmNvbGxhYm9yYXRvciA9IHJlcG9ydFsyNl07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBpbiBhIHJlcG9ydCwgYSB0YWIgdHlwZSwgYW5kIGEgYm9vbGVhbiB2YWx1ZS4gSXQgdGhlbiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgYnVuY2ggb2ZcclxuICAgKiBwcm9wZXJ0aWVzLlxyXG4gICAqIDwvY29kZT5cclxuICAgKiBAcGFyYW0ge2FueX0gcmVwb3J0IC0gYW55ID0mZ3Q7IHRoZSBhcnJheSBvZiBkYXRhXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYlR5cGUgLSBzdHJpbmcgLSB0aGlzIGlzIHRoZSB0eXBlIG9mIHRhYiB0aGF0IGlzIHNlbGVjdGVkLlxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNQcm9ncmFtIC0gYm9vbGVhblxyXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zIC0gd2hldGhlciB0aGUgeGxzeCBpbmNsdWRlcyB0aGUgZm91ciBuZXcgZnJlcXVlbmN5IGNvbHVtbnNcclxuICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcbiAgICovXHJcbiAgc2V0UmVwb3J0RGV0YWlscyhyZXBvcnQ6IGFueSwgdGFiVHlwZTogc3RyaW5nLCBpc1Byb2dyYW06IGJvb2xlYW4sIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlKSB7XHJcblxyXG4gICAgbGV0IG9iajogYW55O1xyXG4gICAgc3dpdGNoICh0YWJUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ2ZyZXF1ZW5jeSc6IHtcclxuICAgICAgICBpZiAoaXNQcm9ncmFtKSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBwcm9ncmFtVHlwZTogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIHByb2dyYW1DYXRlZ29yeTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIGRheTogcmVwb3J0WzldLFxyXG4gICAgICAgICAgICBtb250aDogcmVwb3J0WzEwXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlXaW5kb3c6IHJlcG9ydFsxMV0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlOiByZXBvcnRbMTRdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTZdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxOF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsyMF0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMjBdLFxyXG5cclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsyMV0gLFxyXG4gICAgICAgICAgICByZXZpZXdlclR5cGU6IHJlcG9ydFsyMl0sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsyM10sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMjRdLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzI1XSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjZdLFxyXG4gICAgICAgICAgICBjb2xsYWJvcmF0b3I6IHJlcG9ydFsyN10sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgaWYgKGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICAgICAgICB0aGlzLmFwcGx5RXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKG9iaiwgcmVwb3J0LCB0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc0RhdGVGb3JtYXRJbnZhbGlkJ10gPSB0aGlzLmlzRGF0ZUZvcm1hdEludmFsaWQ7XHJcbiAgICAgICAgICBvYmpbJ2lzRGF5SW52YWxpZCddID0gdGhpcy5pc0RheUludmFsaWQ7XHJcbiAgICAgICAgICBvYmpbJ2lzUGFzdERhdGUnXSA9IHRoaXMuaXNQYXN0RGF0ZShvYmo/LmRheSwgb2JqPy5tb250aCk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREdWVUaW1lJ10gPSB0aGlzLmlzVmFsaWREdWVUaW1lKFxyXG4gICAgICAgICAgICBvYmo/LmR1ZVRpbWUsXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIG9ialsnZW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvciddID0gdGhpcy5nZXRFbmRzQWZ0ZXJPY2N1cnJlbmNlc0Vycm9yKFxyXG4gICAgICAgICAgICBvYmo/LmVuZHNBZnRlck9jY3VycmVuY2VzLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRFbmRzQWZ0ZXJPY2N1cnJlbmNlcyddID0gIW9ialsnZW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvciddO1xyXG4gICAgICAgICAgdGhpcy5hcHBseUVuZHNCeURhdGVWYWxpZGF0aW9uKG9iaiwgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddICYmXHJcbiAgICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gJiZcclxuICAgICAgICAgICAgIW9ialsnaXNQYXN0RGF0ZSddICYmXHJcbiAgICAgICAgICAgIG9iaj8uZnJlcXVlbmN5Py5sZW5ndGggJiZcclxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREdWVUaW1lJ10gJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRFbmRzQnlEYXRlJ11cclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgZGF5OiByZXBvcnRbNl0sXHJcbiAgICAgICAgICAgIG1vbnRoOiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzIyXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBpZiAoaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMob2JqLCByZXBvcnQsIGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsndmFsaWREYXRlJ10gPSB0aGlzLmNvbXBhcmVXaXRoQ3VycmVudERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc1Bhc3REYXRlJ10gPSB0aGlzLmlzUGFzdERhdGUob2JqPy5kYXksIG9iaj8ubW9udGgpO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRHVlVGltZSddID0gdGhpcy5pc1ZhbGlkRHVlVGltZShcclxuICAgICAgICAgICAgb2JqPy5kdWVUaW1lLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXSA9IHRoaXMuZ2V0RW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvcihcclxuICAgICAgICAgICAgb2JqPy5lbmRzQWZ0ZXJPY2N1cnJlbmNlcyxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0FmdGVyT2NjdXJyZW5jZXMnXSA9ICFvYmpbJ2VuZHNBZnRlck9jY3VycmVuY2VzRXJyb3InXTtcclxuICAgICAgICAgIHRoaXMuYXBwbHlFbmRzQnlEYXRlVmFsaWRhdGlvbihvYmosIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyk7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9XHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSAmJlxyXG4gICAgICAgICAgICBvYmpbJ3ZhbGlkRGF0ZSddICYmXHJcbiAgICAgICAgICAgICFvYmpbJ2lzUGFzdERhdGUnXSAmJlxyXG4gICAgICAgICAgICBvYmo/LmZyZXF1ZW5jeT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRHVlVGltZSddICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZEVuZHNBZnRlck9jY3VycmVuY2VzJ10gJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRW5kc0J5RGF0ZSddXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAgIHRhYlR5cGUsXHJcbiAgICAgICAgICAgIGlzUHJvZ3JhbSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjYXNlICdvbmdvaW5nJzoge1xyXG4gICAgICAgIGlmIChpc1Byb2dyYW0pIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIHByb2dyYW1UeXBlOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIHByb2dyYW06IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgcHJvZ3JhbUNhdGVnb3J5OiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbNV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzddLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogcmVwb3J0WzhdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNlbnRlclR5cGU6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgcmV2aWV3ZXJUeXBlOiByZXBvcnRbMTddLCBcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogJ09uZ29pbmcnLFxyXG4gICAgICAgICAgICBjb2xsYWJvcmF0b3I6IHJlcG9ydFsyMl0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgIU9iamVjdC52YWx1ZXMob2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddKS5pbmNsdWRlcyhmYWxzZSkgJiZcclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddO1xyXG5cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddICYmXHJcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSBcclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlOYW1lOiByZXBvcnRbMF0sXHJcbiAgICAgICAgICAgIGFzc2lnbm9yOiByZXBvcnRbMV0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIGFzc2lnbmVlVHlwZTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBrZXlSZXNwb25zaWJpbGl0eTogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eUNhdGVnb3J5OiBudWxsLFxyXG4gICAgICAgICAgICBmcmVxdWVuY3k6IHJlcG9ydFs1XSxcclxuICAgICAgICAgICAgc2V0UmVtaW5kZXI6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAgZnJlcXVlbmN5UmVtaW5kZXI6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFs4XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFs5XSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxMl0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTNdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE1XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIGNvbGxhYm9yYXRvcjogcmVwb3J0WzIwXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gPSB0aGlzLmlzVmFsaWREYXRhKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ3VzZXJWYWxpZGF0ZVdpdGhQcm9ncmFtJ10gPSB0aGlzLnZhbGlkYXRlRGF0YVdpdGhQcm9ncmFtKG9iaik7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gPSB0aGlzLnJldHVybklkcyhvYmo/LmFzc2lnbmVlLCAnZW50cnVzdGVkX3RvJylcclxuICAgICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICBvYmpbJ2lzVmFsaWQnXSA9IG9ialsnaXNWYWxpZERhdGEnXSAmJiBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgIHRoaXMuaXNWYWxpZFJpc2tDbGFzcyhvYmo/LnJlcG9ydENsYXNzKSBcclxuICAgICAgICAgIHJldHVybiB0aGlzLndpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgIG9iaixcclxuICAgICAgICAgICAgdGFiVHlwZSxcclxuICAgICAgICAgICAgaXNQcm9ncmFtLFxyXG4gICAgICAgICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNhc2UgJ29uQ29tcGxldGlvbic6IHtcclxuICAgICAgICBpZiAoaXNQcm9ncmFtKSB7XHJcbiAgICAgICAgICBvYmogPSB7XHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5TmFtZTogcmVwb3J0WzBdLFxyXG4gICAgICAgICAgICBwcm9ncmFtVHlwZTogcmVwb3J0WzFdLFxyXG4gICAgICAgICAgICBwcm9ncmFtOiByZXBvcnRbMl0sXHJcbiAgICAgICAgICAgIHByb2dyYW1DYXRlZ29yeTogcmVwb3J0WzNdLFxyXG4gICAgICAgICAgICBhc3NpZ25vcjogcmVwb3J0WzRdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBhc3NpZ25lZVR5cGU6IHJlcG9ydFs2XSxcclxuICAgICAgICAgICAga2V5UmVzcG9uc2liaWxpdHk6IHJlcG9ydFs3XSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDYXRlZ29yeTogbnVsbCxcclxuICAgICAgICAgICAgZnJlcXVlbmN5OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIHBhcmVudFJlc3BvbnNpYmlsaXR5OiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIGR1ZURhdGU6IHJlcG9ydFsxMF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbMTFdLFxyXG4gICAgICAgICAgICBmYWlsZWRBZnRlcjogcmVwb3J0WzEyXSxcclxuICAgICAgICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXI6IHJlcG9ydFsxM10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyVHlwZTogcmVwb3J0WzE0XSxcclxuICAgICAgICAgICAgcmVwb3J0Q2xhc3M6IHJlcG9ydFsxNV0sXHJcbiAgICAgICAgICAgIG9iamVjdGl2ZTogcmVwb3J0WzE2XSxcclxuICAgICAgICAgICAgbm90ZXM6IHJlcG9ydFsxN10sXHJcbiAgICAgICAgICAgIGlzRm9ybWF0OiByZXBvcnRbMThdLFxyXG4gICAgICAgICAgICBmb3JtYXRGb3JSZXNwb25zaWJpbGl0eTogcmVwb3J0WzE5XSxcclxuICAgICAgICAgICAgZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICAvLyBldmlkZW5jZU5vdGVzOiByZXBvcnRbMTldLFxyXG4gICAgICAgICAgICAvLyBhc3Nlc3NtZW50czogcmVwb3J0WzIwXSxcclxuICAgICAgICAgICAgcmV2aWV3ZXI6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICAgIHJldmlld1RvQmVDb21wbGV0ZWRXaXRoaW46IHJlcG9ydFsyMl0sXHJcbiAgICAgICAgICAgIHJldmlld1dpbGxCZUZhaWxlZEFmdGVyOiByZXBvcnRbMjNdLFxyXG4gICAgICAgICAgICBvdmVyc2VlcjogcmVwb3J0WzI0XSxcclxuICAgICAgICAgICAgbm90aWZ5T25GYWlsdXJlOiByZXBvcnRbMjVdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZERhdGEnXSA9IHRoaXMuaXNWYWxpZERhdGEob2JqKTtcclxuICAgICAgICAgIG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSA9IHRoaXMudmFsaWRhdGVEYXRhV2l0aFByb2dyYW0ob2JqKTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSA9IHRoaXMucmV0dXJuSWRzKG9iaj8uYXNzaWduZWUsICdlbnRydXN0ZWRfdG8nKVxyXG4gICAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgICAgIG9ialsnaXNWYWxpZCddID1cclxuICAgICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddICYmXHJcbiAgICAgICAgICAgICFPYmplY3QudmFsdWVzKG9ialsndXNlclZhbGlkYXRlV2l0aFByb2dyYW0nXSkuaW5jbHVkZXMoZmFsc2UpICYmXHJcbiAgICAgICAgICAgIG9iaj8ucGFyZW50UmVzcG9uc2liaWxpdHk/Lmxlbmd0aCAmJlxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWRVc2VyJ10gJiZcclxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmlza0NsYXNzKG9iaj8ucmVwb3J0Q2xhc3MpIFxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMud2l0aERyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgICAgICAgICAgb2JqLFxyXG4gICAgICAgICAgICB0YWJUeXBlLFxyXG4gICAgICAgICAgICBpc1Byb2dyYW0sXHJcbiAgICAgICAgICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgb2JqID0ge1xyXG4gICAgICAgICAgICByZXNwb25zaWJpbGl0eU5hbWU6IHJlcG9ydFswXSxcclxuICAgICAgICAgICAgYXNzaWdub3I6IHJlcG9ydFsxXSxcclxuICAgICAgICAgICAgYXNzaWduZWU6IHJlcG9ydFsyXSxcclxuICAgICAgICAgICAgYXNzaWduZWVUeXBlOiByZXBvcnRbM10sXHJcbiAgICAgICAgICAgIGtleVJlc3BvbnNpYmlsaXR5OiByZXBvcnRbNF0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcnk6IG51bGwsXHJcbiAgICAgICAgICAgIGZyZXF1ZW5jeTogcmVwb3J0WzVdLFxyXG4gICAgICAgICAgICBwYXJlbnRSZXNwb25zaWJpbGl0eTogcmVwb3J0WzZdLFxyXG4gICAgICAgICAgICBkdWVEYXRlOiByZXBvcnRbN10sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5V2luZG93OiByZXBvcnRbOF0sXHJcbiAgICAgICAgICAgIGZhaWxlZEFmdGVyOiByZXBvcnRbOV0sXHJcbiAgICAgICAgICAgIHJlc3BvbnNpYmlsaXR5Q2VudGVyOiByZXBvcnRbMTBdLFxyXG4gICAgICAgICAgICByZXBvcnRDbGFzczogcmVwb3J0WzExXSxcclxuICAgICAgICAgICAgb2JqZWN0aXZlOiByZXBvcnRbMTJdLFxyXG4gICAgICAgICAgICBub3RlczogcmVwb3J0WzEzXSxcclxuICAgICAgICAgICAgaXNGb3JtYXQ6IHJlcG9ydFsxNF0sXHJcbiAgICAgICAgICAgIGZvcm1hdEZvclJlc3BvbnNpYmlsaXR5OiByZXBvcnRbMTVdLFxyXG4gICAgICAgICAgICBkb2N1bWVudEV2aWRlbmNlUmVxdWlyZWQ6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGV2aWRlbmNlTm90ZXM6IHJlcG9ydFsxNl0sXHJcbiAgICAgICAgICAgIC8vIGFzc2Vzc21lbnRzOiByZXBvcnRbMTddLFxyXG4gICAgICAgICAgICByZXZpZXdlcjogcmVwb3J0WzE3XSxcclxuICAgICAgICAgICAgcmV2aWV3VG9CZUNvbXBsZXRlZFdpdGhpbjogcmVwb3J0WzE4XSxcclxuICAgICAgICAgICAgcmV2aWV3V2lsbEJlRmFpbGVkQWZ0ZXI6IHJlcG9ydFsxOV0sXHJcbiAgICAgICAgICAgIG92ZXJzZWVyOiByZXBvcnRbMjBdLFxyXG4gICAgICAgICAgICBub3RpZnlPbkZhaWx1cmU6IHJlcG9ydFsyMV0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkRGF0YSddID0gdGhpcy5pc1ZhbGlkRGF0YShvYmopO1xyXG4gICAgICAgICAgb2JqWyd1c2VyVmFsaWRhdGVXaXRoUHJvZ3JhbSddID0gdGhpcy52YWxpZGF0ZURhdGFXaXRoUHJvZ3JhbShvYmopO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkVXNlciddID0gdGhpcy5yZXR1cm5JZHMob2JqPy5hc3NpZ25lZSwgJ2VudHJ1c3RlZF90bycpXHJcbiAgICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgICAgb2JqWydpc1ZhbGlkJ10gPVxyXG4gICAgICAgICAgICBvYmpbJ2lzVmFsaWREYXRhJ10gJiZcclxuICAgICAgICAgICAgb2JqPy5wYXJlbnRSZXNwb25zaWJpbGl0eT8ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgIG9ialsnaXNWYWxpZFVzZXInXSAmJlxyXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcykgXHJcbiAgICAgICAgICByZXR1cm4gdGhpcy53aXRoRHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgICAgICAgICBvYmosXHJcbiAgICAgICAgICAgIHRhYlR5cGUsXHJcbiAgICAgICAgICAgIGlzUHJvZ3JhbSxcclxuICAgICAgICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBkZWZhdWx0OiB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVmFsaWRSaXNrQ2xhc3Mocmlza0NsYXNzOiBhbnkpIHtcclxuICAgIGlmKCFyaXNrQ2xhc3MpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIFJJU0tfQ0xBU1NfTElTVC5pbmNsdWRlcyhyaXNrQ2xhc3M/LnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBkcm9wZG93bi1saXN0IGNoZWNrcyBvbiB0b3Agb2YgZXhpc3Rpbmcgcm93IHZhbGlkYXRpb24uXHJcbiAgICogRW1wdHkgb3B0aW9uYWwgY2VsbHMgYXJlIHZhbGlkLiBGcmVxdWVuY3kgLyBkdWUgZGF0ZSAvIGR1ZSB0aW1lIGFyZSBza2lwcGVkIGZvciBvbmdvaW5nLlxyXG4gICAqL1xyXG4gIHdpdGhEcm9wZG93blZhbGlkYXRpb24oXHJcbiAgICBvYmo6IGFueSxcclxuICAgIHRhYlR5cGU6IHN0cmluZyxcclxuICAgIGlzUHJvZ3JhbTogYm9vbGVhbixcclxuICAgIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlXHJcbiAgKTogYW55IHtcclxuICAgIGlmICghb2JqKSB7XHJcbiAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcGx5RHJvcGRvd25WYWxpZGF0aW9uKFxyXG4gICAgICBvYmosXHJcbiAgICAgIHRhYlR5cGUsXHJcbiAgICAgIGlzUHJvZ3JhbSxcclxuICAgICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zXHJcbiAgICApO1xyXG4gICAgb2JqWydpc1ZhbGlkJ10gPSAhIW9ialsnaXNWYWxpZCddICYmICEhb2JqWydpc1ZhbGlkRHJvcGRvd24nXTtcclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG5cclxuICBhcHBseURyb3Bkb3duVmFsaWRhdGlvbihcclxuICAgIG9iajogYW55LFxyXG4gICAgdGFiVHlwZTogc3RyaW5nLFxyXG4gICAgaXNQcm9ncmFtOiBib29sZWFuLFxyXG4gICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2VcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IHJldmlld2VyTmFtZXMgPSB0aGlzLmdldFRlbXBsYXRlTGlzdE5hbWVzKFxyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LFxyXG4gICAgICAnbmFtZUFuZEVtYWlsJ1xyXG4gICAgKTtcclxuICAgIGNvbnN0IGFzc2lnbmVlTmFtZXMgPSB0aGlzLmdldFRlbXBsYXRlTGlzdE5hbWVzKFxyXG4gICAgICB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWduZWVzTGlzdCxcclxuICAgICAgJ25hbWVBbmRFbWFpbCdcclxuICAgICk7XHJcbiAgICBjb25zdCBwcm9ncmFtQ2F0ZWdvcnlOYW1lcyA9IHRoaXMuZ2V0UHJvZ3JhbUNhdGVnb3J5TmFtZXMoKTtcclxuICAgIGNvbnN0IGRyb3Bkb3duVmFsaWRhdGlvbjogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7XHJcbiAgICAgIHByb2dyYW1UeXBlOiB0cnVlLFxyXG4gICAgICBwcm9ncmFtOiB0cnVlLFxyXG4gICAgICBwcm9ncmFtQ2F0ZWdvcnk6IHRydWUsXHJcbiAgICAgIGFzc2lnbm9yOiB0cnVlLFxyXG4gICAgICBhc3NpZ25lZTogdHJ1ZSxcclxuICAgICAgYXNzaWduZWVUeXBlOiB0cnVlLFxyXG4gICAgICBrZXlSZXNwb25zaWJpbGl0eTogdHJ1ZSxcclxuICAgICAgZnJlcXVlbmN5OiB0cnVlLFxyXG4gICAgICBkYXk6IHRydWUsXHJcbiAgICAgIG1vbnRoOiB0cnVlLFxyXG4gICAgICBkdWVUaW1lOiB0cnVlLFxyXG4gICAgICByZXNwb25zaWJpbGl0eUNlbnRlcjogdHJ1ZSxcclxuICAgICAgcmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlOiB0cnVlLFxyXG4gICAgICByZXBvcnRDbGFzczogdHJ1ZSxcclxuICAgICAgaXNGb3JtYXQ6IHRydWUsXHJcbiAgICAgIGRvY3VtZW50RXZpZGVuY2VSZXF1aXJlZDogdHJ1ZSxcclxuICAgICAgcmV2aWV3ZXI6IHRydWUsXHJcbiAgICAgIHJldmlld2VyVHlwZTogdHJ1ZSxcclxuICAgICAgb3ZlcnNlZXI6IHRydWUsXHJcbiAgICAgIG5vdGlmeU9uRmFpbHVyZTogdHJ1ZSxcclxuICAgICAgY29sbGFib3JhdG9yOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoaXNQcm9ncmFtKSB7XHJcbiAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5wcm9ncmFtVHlwZSA9IHRoaXMuaXNJblN0YXRpY0Ryb3Bkb3duKFxyXG4gICAgICAgIG9iaj8ucHJvZ3JhbVR5cGUsXHJcbiAgICAgICAgUFJPR1JBTV9UWVBFX0RST1BET1dOX0xJU1RcclxuICAgICAgKTtcclxuICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLnByb2dyYW0gPSB0aGlzLmlzSW5Ecm9wZG93bkxpc3QoXHJcbiAgICAgICAgb2JqPy5wcm9ncmFtLFxyXG4gICAgICAgIHRoaXMuZ2V0VGVtcGxhdGVMaXN0TmFtZXModGhpcy50ZW1wbGF0ZUluZm8/LmNhdGVnb3J5TGlzdCwgJ3Byb2dyYW1OYW1lJylcclxuICAgICAgKTtcclxuICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLnByb2dyYW1DYXRlZ29yeSA9IHByb2dyYW1DYXRlZ29yeU5hbWVzLmxlbmd0aFxyXG4gICAgICAgID8gdGhpcy5pc0luRHJvcGRvd25MaXN0KG9iaj8ucHJvZ3JhbUNhdGVnb3J5LCBwcm9ncmFtQ2F0ZWdvcnlOYW1lcylcclxuICAgICAgICA6IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmFzc2lnbm9yID0gdGhpcy5pc0luVXNlckRyb3Bkb3duKG9iaj8uYXNzaWdub3IpO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmFzc2lnbmVlID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICBvYmo/LmFzc2lnbmVlLFxyXG4gICAgICBhc3NpZ25lZU5hbWVzXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmFzc2lnbmVlVHlwZSA9IHRoaXMuaXNJblN0YXRpY0Ryb3Bkb3duKFxyXG4gICAgICBvYmo/LmFzc2lnbmVlVHlwZSxcclxuICAgICAgQVNTSUdORUVfVFlQRV9EUk9QRE9XTl9MSVNUXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmtleVJlc3BvbnNpYmlsaXR5ID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgIG9iaj8ua2V5UmVzcG9uc2liaWxpdHksXHJcbiAgICAgIFlFU19OT19EUk9QRE9XTl9MSVNUXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0YWJUeXBlID09PSAnZnJlcXVlbmN5Jykge1xyXG4gICAgICBkcm9wZG93blZhbGlkYXRpb24uZnJlcXVlbmN5ID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgICAgb2JqPy5mcmVxdWVuY3ksXHJcbiAgICAgICAgRlJFUVVFTkNZX0RST1BET1dOX0xJU1RcclxuICAgICAgKTtcclxuICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLmRheSA9IHRoaXMuaXNWYWxpZERyb3Bkb3duRGF5KG9iaj8uZGF5KTtcclxuICAgICAgZHJvcGRvd25WYWxpZGF0aW9uLm1vbnRoID0gdGhpcy5pc1ZhbGlkRHJvcGRvd25Nb250aChvYmo/Lm1vbnRoKTtcclxuICAgICAgaWYgKGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5kdWVUaW1lID0gdGhpcy5pc1ZhbGlkRHVlVGltZShvYmo/LmR1ZVRpbWUsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLnJlc3BvbnNpYmlsaXR5Q2VudGVyID0gdGhpcy5pc0luRHJvcGRvd25MaXN0KFxyXG4gICAgICBvYmo/LnJlc3BvbnNpYmlsaXR5Q2VudGVyLFxyXG4gICAgICB0aGlzLmdldFRlbXBsYXRlTGlzdE5hbWVzKHRoaXMudGVtcGxhdGVJbmZvPy5yY0xpc3QsICduYW1lJylcclxuICAgICk7XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24ucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgIG9iaj8ucmVzcG9uc2liaWxpdHlDZW50ZXJUeXBlLFxyXG4gICAgICBSQ19UWVBFX0RST1BET1dOX0xJU1RcclxuICAgICk7XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24ucmVwb3J0Q2xhc3MgPSB0aGlzLmlzVmFsaWRSaXNrQ2xhc3Mob2JqPy5yZXBvcnRDbGFzcyk7XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24uaXNGb3JtYXQgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgb2JqPy5pc0Zvcm1hdCxcclxuICAgICAgWUVTX05PX0RST1BET1dOX0xJU1RcclxuICAgICk7XHJcbiAgICBkcm9wZG93blZhbGlkYXRpb24uZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkID0gdGhpcy5pc0luU3RhdGljRHJvcGRvd24oXHJcbiAgICAgIG9iaj8uZG9jdW1lbnRFdmlkZW5jZVJlcXVpcmVkLFxyXG4gICAgICBZRVNfTk9fRFJPUERPV05fTElTVFxyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXZpZXdlciA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgb2JqPy5yZXZpZXdlcixcclxuICAgICAgcmV2aWV3ZXJOYW1lc1xyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5yZXZpZXdlclR5cGUgPSB0aGlzLmlzSW5TdGF0aWNEcm9wZG93bihcclxuICAgICAgb2JqPy5yZXZpZXdlclR5cGUsXHJcbiAgICAgIFJFVklFV0VSX1RZUEVfRFJPUERPV05fTElTVFxyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5vdmVyc2VlciA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChcclxuICAgICAgb2JqPy5vdmVyc2VlcixcclxuICAgICAgcmV2aWV3ZXJOYW1lc1xyXG4gICAgKTtcclxuICAgIGRyb3Bkb3duVmFsaWRhdGlvbi5ub3RpZnlPbkZhaWx1cmUgPSB0aGlzLmlzSW5Ecm9wZG93bkxpc3QoXHJcbiAgICAgIG9iaj8ubm90aWZ5T25GYWlsdXJlLFxyXG4gICAgICByZXZpZXdlck5hbWVzXHJcbiAgICApO1xyXG4gICAgZHJvcGRvd25WYWxpZGF0aW9uLmNvbGxhYm9yYXRvciA9IHRoaXMuaXNJbkRyb3Bkb3duTGlzdChvYmo/LmNvbGxhYm9yYXRvciwgW1xyXG4gICAgICAuLi5hc3NpZ25lZU5hbWVzLFxyXG4gICAgICAuLi5yZXZpZXdlck5hbWVzLFxyXG4gICAgXSk7XHJcblxyXG4gICAgb2JqWydkcm9wZG93blZhbGlkYXRpb24nXSA9IGRyb3Bkb3duVmFsaWRhdGlvbjtcclxuICAgIG9ialsnaXNWYWxpZERyb3Bkb3duJ10gPSAhT2JqZWN0LnZhbHVlcyhkcm9wZG93blZhbGlkYXRpb24pLmluY2x1ZGVzKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGdldFRlbXBsYXRlTGlzdE5hbWVzKGxpc3Q6IGFueVtdID0gW10sIGtleTogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIChsaXN0IHx8IFtdKVxyXG4gICAgICAubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/LltrZXldKVxyXG4gICAgICAuZmlsdGVyKChuYW1lOiBhbnkpID0+IHRoaXMuaGFzVmFsdWUobmFtZSkpXHJcbiAgICAgIC5tYXAoKG5hbWU6IGFueSkgPT4gU3RyaW5nKG5hbWUpLnRyaW0oKSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcm9ncmFtQ2F0ZWdvcnlOYW1lcygpOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBuYW1lczogc3RyaW5nW10gPSBbXTtcclxuICAgICh0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0IHx8IFtdKS5mb3JFYWNoKChwcm9ncmFtOiBhbnkpID0+IHtcclxuICAgICAgKHByb2dyYW0/LmNoaWxkQ2F0ZWdvcnkgfHwgW10pLmZvckVhY2goKGNhdGVnb3J5OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZShjYXRlZ29yeT8ubmFtZSkpIHtcclxuICAgICAgICAgIG5hbWVzLnB1c2goU3RyaW5nKGNhdGVnb3J5Lm5hbWUpLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5hbWVzO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzaWdub3JEcm9wZG93bk5hbWVzKCk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IG5hbWVzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgKHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25vcnNMaXN0IHx8IFtdKS5mb3JFYWNoKChhc3NpZ25vcjogYW55KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmhhc1ZhbHVlKGFzc2lnbm9yPy5uYW1lQW5kRW1haWwpKSB7XHJcbiAgICAgICAgbmFtZXMucHVzaChTdHJpbmcoYXNzaWdub3IubmFtZUFuZEVtYWlsKS50cmltKCkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmhhc1ZhbHVlKGFzc2lnbm9yPy5uYW1lKSkge1xyXG4gICAgICAgIG5hbWVzLnB1c2goU3RyaW5nKGFzc2lnbm9yLm5hbWUpLnRyaW0oKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaGFzVmFsdWUoYXNzaWdub3I/Lm5hbWUpICYmIHRoaXMuaGFzVmFsdWUoYXNzaWdub3I/LmVtYWlsKSkge1xyXG4gICAgICAgIG5hbWVzLnB1c2goXHJcbiAgICAgICAgICBgJHtTdHJpbmcoYXNzaWdub3IubmFtZSkudHJpbSgpfSAoJHtTdHJpbmcoYXNzaWdub3IuZW1haWwpLnRyaW0oKX0pYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5hbWVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW50cnVzdGVkIEJ5IGluIHRoZSB4bHN4IGRyb3Bkb3duIGlzIHRoZSBwZW9wbGUgbGlzdCBpbiBgTmFtZSAoZW1haWwpYCBmb3JtXHJcbiAgICogKHNhbWUgc291cmNlIGFzIEVudHJ1c3RlZCBUbyAvIFJldmlld2VyKSwgbm90IHRoZSBhc3NpZ25vciBuYW1lLW9ubHkgY29sdW1uLlxyXG4gICAqL1xyXG4gIGlzSW5Vc2VyRHJvcGRvd24odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJldHVybklkcyh2YWx1ZSwgJ2VudHJ1c3RlZF90bycpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucmV0dXJuSWRzKHZhbHVlLCAncmV2aWV3ZXInKT8ubmFtZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBlb3BsZU5hbWVzID0gW1xyXG4gICAgICAuLi50aGlzLmdldEFzc2lnbm9yRHJvcGRvd25OYW1lcygpLFxyXG4gICAgICAuLi50aGlzLmdldFRlbXBsYXRlTGlzdE5hbWVzKFxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0LFxyXG4gICAgICAgICduYW1lQW5kRW1haWwnXHJcbiAgICAgICksXHJcbiAgICAgIC4uLnRoaXMuZ2V0VGVtcGxhdGVMaXN0TmFtZXMoXHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdCxcclxuICAgICAgICAnbmFtZUFuZEVtYWlsJ1xyXG4gICAgICApLFxyXG4gICAgXTtcclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBTdHJpbmcodmFsdWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHBlb3BsZU5hbWVzLnNvbWUoXHJcbiAgICAgIChuYW1lKSA9PiBTdHJpbmcobmFtZSkudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWRcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBpc0luU3RhdGljRHJvcGRvd24odmFsdWU6IGFueSwgb3B0aW9uczogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5oYXNWYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBub3JtYWxpemVkID0gU3RyaW5nKHZhbHVlKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiBvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uLnRvTG93ZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWQpO1xyXG4gIH1cclxuXHJcbiAgaXNJbkRyb3Bkb3duTGlzdCh2YWx1ZTogYW55LCBvcHRpb25zOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBTdHJpbmcodmFsdWUpLnRyaW0oKTtcclxuICAgIHJldHVybiBvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gb3B0aW9uID09PSBub3JtYWxpemVkKTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWREcm9wZG93bkRheSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuaGFzVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF5TnVtYmVyID0gTnVtYmVyKFN0cmluZyh2YWx1ZSkudHJpbSgpKTtcclxuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGRheU51bWJlcikgJiYgZGF5TnVtYmVyID49IDEgJiYgZGF5TnVtYmVyIDw9IDMxO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZERyb3Bkb3duTW9udGgodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmhhc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBSRUdFWC5FTkRTX0JZX0RBVEVfTU9OVEgudGVzdChTdHJpbmcodmFsdWUpLnRyaW0oKSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRHVlVGltZShkdWVUaW1lOiBhbnksIGhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucyA9IGZhbHNlKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5ub3JtYWxpemVEdWVUaW1lKGR1ZVRpbWUpO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBSRUdFWC5EVUVfVElNRS50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGZpZWxkLiBXaGVuIGZpbGxlZCwgdGhlIHZhbHVlIG11c3QgYmUgbnVtZXJpYyBhbmQgZ3JlYXRlciB0aGFuIDAuXHJcbiAgICovXHJcbiAgZ2V0RW5kc0FmdGVyT2NjdXJyZW5jZXNFcnJvcihcclxuICAgIHZhbHVlOiBhbnksXHJcbiAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMgPSBmYWxzZVxyXG4gICk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWhhc0V4dGVuZGVkRnJlcXVlbmN5Q29sdW1ucykge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBTdHJpbmcodmFsdWUpLnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IFN0cmluZyh2YWx1ZSkudHJpbSgpO1xyXG4gICAgaWYgKCEvXi0/XFxkKyhcXC5cXGQrKT8kLy50ZXN0KG5vcm1hbGl6ZWQpKSB7XHJcbiAgICAgIHJldHVybiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQUZURVJfT0NDVVJSRU5DRVNfTlVNRVJJQztcclxuICAgIH1cclxuICAgIGlmIChOdW1iZXIobm9ybWFsaXplZCkgPD0gMCkge1xyXG4gICAgICByZXR1cm4gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0FGVEVSX09DQ1VSUkVOQ0VTX0dSRUFURVJfVEhBTl9aRVJPO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlFbmRzQnlEYXRlVmFsaWRhdGlvbihvYmo6IGFueSwgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IHZhbGlkYXRpb24gPSB0aGlzLmdldEVuZHNCeURhdGVWYWxpZGF0aW9uKFxyXG4gICAgICBvYmo/LmVuZHNCeURhdGVEYXksXHJcbiAgICAgIG9iaj8uZW5kc0J5RGF0ZU1vbnRoLFxyXG4gICAgICBoYXNFeHRlbmRlZEZyZXF1ZW5jeUNvbHVtbnMsXHJcbiAgICAgIG9iaj8uZW5kc0FmdGVyT2NjdXJyZW5jZXNcclxuICAgICk7XHJcbiAgICBvYmpbJ2VuZHNCeURhdGVEYXlFcnJvciddID0gdmFsaWRhdGlvbi5kYXlFcnJvcjtcclxuICAgIG9ialsnZW5kc0J5RGF0ZU1vbnRoRXJyb3InXSA9IHZhbGlkYXRpb24ubW9udGhFcnJvcjtcclxuICAgIG9ialsnaXNWYWxpZEVuZHNCeURhdGVEYXknXSA9ICF2YWxpZGF0aW9uLmRheUVycm9yO1xyXG4gICAgb2JqWydpc1ZhbGlkRW5kc0J5RGF0ZU1vbnRoJ10gPSAhdmFsaWRhdGlvbi5tb250aEVycm9yO1xyXG4gICAgb2JqWydpc1ZhbGlkRW5kc0J5RGF0ZSddID0gdmFsaWRhdGlvbi5pc1ZhbGlkO1xyXG4gIH1cclxuXHJcbiAgaGFzVmFsdWUodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgU3RyaW5nKHZhbHVlKS50cmltKCkgIT09ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgdW5sZXNzIGVpdGhlciBkYXkgb3IgbW9udGggaXMgZmlsbGVkLiBDYW5ub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIEVuZHMgQWZ0ZXIgT2NjdXJyZW5jZXMuXHJcbiAgICogRGF5IG11c3QgYmUgbnVtZXJpYywgZ3JlYXRlciB0aGFuIDAsIGFuZCBhdCBtb3N0IDMxLiBNb250aCBtdXN0IGJlIGZ1bGwgbW9udGggbmFtZSArICcgKyB0d28tZGlnaXRcclxuICAgKiB5ZWFyIChKYW51YXJ5JzI4KS4gQ29tYmluZWQgZGF0ZSBtdXN0IGV4aXN0LCBpbmNsdWRpbmcgbGVhcC15ZWFyIEZlYnJ1YXJ5IDI5LlxyXG4gICAqL1xyXG4gIGdldEVuZHNCeURhdGVWYWxpZGF0aW9uKFxyXG4gICAgZGF5OiBhbnksXHJcbiAgICBtb250aDogYW55LFxyXG4gICAgaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zID0gZmFsc2UsXHJcbiAgICBlbmRzQWZ0ZXJPY2N1cnJlbmNlcz86IGFueVxyXG4gICk6IHsgaXNWYWxpZDogYm9vbGVhbjsgZGF5RXJyb3I6IHN0cmluZzsgbW9udGhFcnJvcjogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgdmFsaWQgPSB7IGlzVmFsaWQ6IHRydWUsIGRheUVycm9yOiAnJywgbW9udGhFcnJvcjogJycgfTtcclxuICAgIGlmICghaGFzRXh0ZW5kZWRGcmVxdWVuY3lDb2x1bW5zKSB7XHJcbiAgICAgIHJldHVybiB2YWxpZDtcclxuICAgIH1cclxuICAgIGNvbnN0IGRheVZhbHVlID0gZGF5ID09IG51bGwgPyAnJyA6IFN0cmluZyhkYXkpLnRyaW0oKTtcclxuICAgIGNvbnN0IG1vbnRoVmFsdWUgPSBtb250aCA9PSBudWxsID8gJycgOiBTdHJpbmcobW9udGgpLnRyaW0oKTtcclxuICAgIGlmICghZGF5VmFsdWUgJiYgIW1vbnRoVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHZhbGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmhhc1ZhbHVlKGVuZHNBZnRlck9jY3VycmVuY2VzKSAmJiAoZGF5VmFsdWUgfHwgbW9udGhWYWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBkYXlFcnJvcjogZGF5VmFsdWUgPyBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9DT05GTElDVCA6ICcnLFxyXG4gICAgICAgIG1vbnRoRXJyb3I6IG1vbnRoVmFsdWUgPyBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9DT05GTElDVCA6ICcnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZGF5VmFsdWUgfHwgIW1vbnRoVmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgICAgICBkYXlFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5DT01QTEVURSxcclxuICAgICAgICBtb250aEVycm9yOiBWQUxJREFUSU9OX01FU1NBR0VTLkVORFNfQllfREFURV9JTkNPTVBMRVRFLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRheUVycm9yID0gdGhpcy5nZXRFbmRzQnlEYXRlRGF5RXJyb3IoZGF5VmFsdWUpO1xyXG4gICAgY29uc3QgbW9udGhFcnJvciA9IHRoaXMuZ2V0RW5kc0J5RGF0ZU1vbnRoRXJyb3IobW9udGhWYWx1ZSk7XHJcbiAgICBpZiAoZGF5RXJyb3IgfHwgbW9udGhFcnJvcikge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgIGRheUVycm9yLFxyXG4gICAgICAgIG1vbnRoRXJyb3IsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRFbmRzQnlDYWxlbmRhckRhdGUoZGF5VmFsdWUsIG1vbnRoVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUUsXHJcbiAgICAgICAgbW9udGhFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5WQUxJRF9WQUxVRSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5pc0VuZHNCeURhdGVJblBhc3QoZGF5VmFsdWUsIG1vbnRoVmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICAgICAgZGF5RXJyb3I6IFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX1BBU1QsXHJcbiAgICAgICAgbW9udGhFcnJvcjogVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfUEFTVCxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRFbmRzQnlEYXRlRGF5RXJyb3IoZGF5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCEvXi0/XFxkKyhcXC5cXGQrKT8kLy50ZXN0KGRheSkpIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUU7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXlOdW1iZXIgPSBOdW1iZXIoZGF5KTtcclxuICAgIGlmIChkYXlOdW1iZXIgPD0gMCB8fCBkYXlOdW1iZXIgPiAzMSkge1xyXG4gICAgICByZXR1cm4gVkFMSURBVElPTl9NRVNTQUdFUy5FTkRTX0JZX0RBVEVfSU5WQUxJRF9WQUxVRTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGdldEVuZHNCeURhdGVNb250aEVycm9yKG1vbnRoOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFSRUdFWC5FTkRTX0JZX0RBVEVfTU9OVEgudGVzdChtb250aCkpIHtcclxuICAgICAgcmV0dXJuIFZBTElEQVRJT05fTUVTU0FHRVMuRU5EU19CWV9EQVRFX0lOVkFMSURfVkFMVUU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkRW5kc0J5Q2FsZW5kYXJEYXRlKGRheTogc3RyaW5nLCBtb250aDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBtb250aE1hdGNoID0gbW9udGgubWF0Y2goUkVHRVguRU5EU19CWV9EQVRFX01PTlRIKTtcclxuICAgIGlmICghbW9udGhNYXRjaCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtb250aEluZGV4ID0gRlVMTF9NT05USF9OQU1FUy5pbmRleE9mKG1vbnRoTWF0Y2hbMV0pO1xyXG4gICAgY29uc3QgeWVhciA9IDIwMDAgKyBOdW1iZXIobW9udGhNYXRjaFsyXSk7XHJcbiAgICBjb25zdCBkYXlOdW1iZXIgPSBOdW1iZXIoZGF5KTtcclxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihkYXlOdW1iZXIpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXlOdW1iZXIpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXHJcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGhJbmRleCAmJlxyXG4gICAgICBkYXRlLmdldERhdGUoKSA9PT0gZGF5TnVtYmVyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaXNFbmRzQnlEYXRlSW5QYXN0KGRheTogc3RyaW5nLCBtb250aDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBtb250aE1hdGNoID0gbW9udGgubWF0Y2goUkVHRVguRU5EU19CWV9EQVRFX01PTlRIKTtcclxuICAgIGlmICghbW9udGhNYXRjaCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtb250aEluZGV4ID0gRlVMTF9NT05USF9OQU1FUy5pbmRleE9mKG1vbnRoTWF0Y2hbMV0pO1xyXG4gICAgY29uc3QgeWVhciA9IDIwMDAgKyBOdW1iZXIobW9udGhNYXRjaFsyXSk7XHJcbiAgICBjb25zdCBkYXlOdW1iZXIgPSBOdW1iZXIoZGF5KTtcclxuICAgIGNvbnN0IGVuZHNCeURhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXlOdW1iZXIpO1xyXG4gICAgZW5kc0J5RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIHRvZGF5LnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG4gICAgcmV0dXJuIGVuZHNCeURhdGUgPCB0b2RheTtcclxuICB9XHJcblxyXG4gIG5vcm1hbGl6ZUR1ZVRpbWUoZHVlVGltZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChkdWVUaW1lID09IG51bGwgfHwgZHVlVGltZSA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbHVlID0gU3RyaW5nKGR1ZVRpbWUpLnRyaW0oKS5yZXBsYWNlKC9cXHMrL2csICcgJyk7XHJcbiAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL14oXFxkezEsMn0pOihcXGR7Mn0pOlxcZHsyfVxccyooQU18UE0pJC9pLCAnJDE6JDIgJDMnKTtcclxuICAgIGNvbnN0IG1hdGNoID0gdmFsdWUubWF0Y2goL14oXFxkezEsMn0pOihcXGR7Mn0pXFxzKihBTXxQTSkkL2kpO1xyXG4gICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBsZXQgaG91ciA9IE51bWJlcihtYXRjaFsxXSk7XHJcbiAgICBpZiAoaG91ciA9PT0gMCkge1xyXG4gICAgICBob3VyID0gMTI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7aG91cn06JHttYXRjaFsyXX0gJHttYXRjaFszXS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgYSBzdHJpbmcsIHJlbW92ZXMgYWxsIHdoaXRlc3BhY2UsIGFuZCByZXR1cm5zIHRoZSBzdHJpbmdcclxuICAgKiBAcGFyYW0ge2FueX0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSByZXNwb25zaWJpbGl0eVxyXG4gICAqIEByZXR1cm5zIHRoZSB0cmltbWVkTmFtZSB2YXJpYWJsZS5cclxuICAgKi9cclxuICBjaGVja1ZhbGlkUmVzcG9uc2liaWxpdHlOYW1lKG5hbWU6IGFueSkge1xyXG4gICAgY29uc3QgcmUgPSAvJm5ic3A7fDxicj4vZztcclxuICAgIGlmIChuYW1lKSB7XHJcbiAgICAgIHZhciB0cmltbWVkTmFtZSA9IG5hbWUudG9TdHJpbmcoKS5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xyXG4gICAgICB0cmltbWVkTmFtZSA9IHRyaW1tZWROYW1lLnJlcGxhY2UoLyAgKy9nLCAnICcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRyaW1tZWROYW1lO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIHJlc3BvbnNpYmlsaXR5IG5hbWUgaXMgdmFsaWQsIGFuZCB0aGUgYXNzaWduZWUgYW5kIGFzc2lnbm9yIGFyZSBub3QgZW1wdHksIHRoZW4gcmV0dXJuXHJcbiAgICogdHJ1ZS4gT3RoZXJ3aXNlLCByZXR1cm4gZmFsc2VcclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSAtIHRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgcGFzc2VkIGluXHJcbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlLlxyXG4gICAqL1xyXG4gIGlzVmFsaWREYXRhKGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgcmVzcG9uc2liaWxpdHkgPSB0aGlzLmNoZWNrVmFsaWRSZXNwb25zaWJpbGl0eU5hbWUoXHJcbiAgICAgIGRhdGE/LnJlc3BvbnNpYmlsaXR5TmFtZVxyXG4gICAgKT8ubGVuZ3RoXHJcbiAgICAgID8gdHJ1ZVxyXG4gICAgICA6IGZhbHNlO1xyXG4gICAgY29uc3QgYXNzaWduZWUgPSBkYXRhPy5hc3NpZ25lZT8ubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgY29uc3QgZnJlcXVlbmN5ID0gZGF0YT8uZnJlcXVlbmN5Py5sZW5ndGggPyB0cnVlIDogZmFsc2U7XHJcbiAgICBpZiAoYXNzaWduZWUgJiYgcmVzcG9uc2liaWxpdHkgJiYgZnJlcXVlbmN5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGFzc2lnbm9yIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWdub3IgaXMgbm90IHNldFxyXG4gICAqIGFuZCB0aGUgZGVmYXVsdE93bmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgdGhlXHJcbiAgICogc2FtZSBhcyB0aGUgcmV2aWV3ZXIsIG92ZXJzZWVyLCBvciBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSBhc3NpZ25lZSBpcyBub3Qgc2V0IGFuZCB0aGVcclxuICAgKiBkZWZhdWx0T3duZXIgaXMgdGhlIHNhbWUgYXMgdGhlIG92ZXJzZWVyIG9yIHRoZSBOb3RpZnlPbkZhaWx1cmUsIG9yIGlmIHRoZSByZXZpZXdlciBpcyB0aGUgc2FtZSBhc1xyXG4gICAqIHRoZSBvdmVyc2VlciBvciB0aGUgTm90aWZ5T25GYWlsdXJlLCBvciBpZiB0aGUgYXNzaWduZWUgaXMgbm90IHNldCwgdGhlbiByZXR1cm4gZmFsc2UuIE90aGVyd2lzZSxcclxuICAgKiByZXR1cm4gdHJ1ZVxyXG4gICAqIEBwYXJhbSB7YW55fSBkYXRhIC0gYW55IC0gdGhpcyBpcyB0aGUgZGF0YSB0aGF0IGlzIHBhc3NlZCBpbiBmcm9tIHRoZSBmb3JtLlxyXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZS5cclxuICAgKi9cclxuICBpc1ZhbGlkVXNlcnMoZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIChkYXRhPy5hc3NpZ25vciAmJlxyXG4gICAgICAgIChkYXRhPy5hc3NpZ25vciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgZGF0YT8uYXNzaWdub3IgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKCFkYXRhPy5hc3NpZ25vciAmJlxyXG4gICAgICAgICh0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKGRhdGE/LmFzc2lnbmVlICYmXHJcbiAgICAgICAgKGRhdGE/LmFzc2lnbmVlID09IGRhdGE/LnJldmlld2VyIHx8XHJcbiAgICAgICAgICBkYXRhPy5hc3NpZ25lZSA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgZGF0YT8uYXNzaWduZWUgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKCFkYXRhPy5hc3NpZ25lZSAmJlxyXG4gICAgICAgICh0aGlzLmRlZmF1bHRPd25lciA9PSBkYXRhPy5vdmVyc2VlciB8fFxyXG4gICAgICAgICAgdGhpcy5kZWZhdWx0T3duZXIgPT0gZGF0YT8ubm90aWZ5T25GYWlsdXJlKSkgfHxcclxuICAgICAgKGRhdGE/LnJldmlld2VyICYmXHJcbiAgICAgICAgKGRhdGE/LnJldmlld2VyID09IGRhdGE/Lm92ZXJzZWVyIHx8XHJcbiAgICAgICAgICBkYXRhPy5yZXZpZXdlciA9PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmUpKSB8fFxyXG4gICAgICAhZGF0YT8uYXNzaWduZWVcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEl0IHRha2VzIGluIGEgZGF0YSBvYmplY3QgYW5kIHJldHVybnMgYW4gb2JqZWN0IHdpdGggNCBib29sZWFuIHByb3BlcnRpZXMuXHJcbiAgICogVGhlIGJvb2xlYW4gcHJvcGVydGllcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWVzIG9mIHRoZSBkYXRhIG9iamVjdC5cclxuICAgKiBAcGFyYW0ge2FueX0gZGF0YSAtIGFueSA9IHtcclxuICAgKiBAcmV0dXJucyB7XHJcbiAgICogICBpc1ZhbGlkQXNzaWduZWU6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkQXNzaWdub3I6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkUmV2aWV3ZXI6IHRydWUsXHJcbiAgICogICBpc1ZhbGlkT3ZlcnNlZXI6IHRydWVcclxuICAgKiB9XHJcbiAgICovXHJcbiAgdmFsaWRhdGVEYXRhV2l0aFByb2dyYW0oZGF0YTogYW55KTogYW55IHtcclxuICAgIGNvbnN0IHByb2dyYW0gPSB0aGlzLnRlbXBsYXRlSW5mbz8uY2F0ZWdvcnlMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChwcm9ncmFtOiBhbnkpID0+IHByb2dyYW0/LnByb2dyYW1OYW1lID09PSBkYXRhPy5wcm9ncmFtXHJcbiAgICApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRBc3NpZ25lZSA9IHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0Py5maWx0ZXIoXHJcbiAgICAgIChhc3NpZ25lZTogYW55KSA9PiBhc3NpZ25lZT8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5hc3NpZ25lZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkQXNzaWdub3IgPSB0aGlzLnRlbXBsYXRlSW5mbz8uYXNzaWdub3JzTGlzdD8uZmlsdGVyKFxyXG4gICAgICAoYXNzaWdub3I6IGFueSkgPT4gYXNzaWdub3I/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8uYXNzaWdub3JcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZFJldmlld2VyID0gdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdD8uZmlsdGVyKFxyXG4gICAgICAocmV2aWV3ZXI6IGFueSkgPT4gcmV2aWV3ZXI/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8ucmV2aWV3ZXJcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZE92ZXJzZWVyID0gdGhpcy50ZW1wbGF0ZUluZm8/LnJldmlld2VyTGlzdD8uZmlsdGVyKFxyXG4gICAgICAob3ZlcnNlZXI6IGFueSkgPT4gb3ZlcnNlZXI/Lm5hbWVBbmRFbWFpbCA9PT0gZGF0YT8ub3ZlcnNlZXJcclxuICAgICk7XHJcbiAgICBjb25zdCBzZWxlY3RlZE5vdGlmeU9uRmFpbHVyZSA9IHRoaXMudGVtcGxhdGVJbmZvPy5yZXZpZXdlckxpc3Q/LmZpbHRlcihcclxuICAgICAgKG5vdGlmeU9uRmFpbHVyZTogYW55KSA9PlxyXG4gICAgICAgIG5vdGlmeU9uRmFpbHVyZT8ubmFtZUFuZEVtYWlsID09PSBkYXRhPy5ub3RpZnlPbkZhaWx1cmVcclxuICAgICk7XHJcbiAgICBsZXQgaXNWYWxpZEFzc2lnbmVlID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkQXNzaWdub3IgPSB0cnVlO1xyXG4gICAgbGV0IGlzVmFsaWRSZXZpZXdlciA9IHRydWU7XHJcbiAgICBsZXQgaXNWYWxpZE92ZXJzZWVyID0gdHJ1ZTtcclxuICAgIGxldCBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlID0gdHJ1ZTtcclxuICAgIGlmIChwcm9ncmFtICYmIHRoaXMub3JnRGV0YWlscz8uaGFzUHJvZ3JhbUZ1bGxQZXJtaXNzaW9uKSB7XHJcbiAgICAgIGlmIChwcm9ncmFtWzBdPy5hc3NpZ25lZT8ubGVuZ3RoICYmIHNlbGVjdGVkQXNzaWduZWU/Lmxlbmd0aCkge1xyXG4gICAgICAgIGlzVmFsaWRBc3NpZ25lZSA9IHByb2dyYW1bMF0/LmFzc2lnbmVlPy5pbmNsdWRlcyhcclxuICAgICAgICAgIHNlbGVjdGVkQXNzaWduZWVbMF0/Lm15X21lbWJlcl9pZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJvZ3JhbVswXT8ucmV2aWV3ZXI/Lmxlbmd0aCAmJiBzZWxlY3RlZFJldmlld2VyPy5sZW5ndGgpIHtcclxuICAgICAgICBpc1ZhbGlkUmV2aWV3ZXIgPSBwcm9ncmFtWzBdPy5yZXZpZXdlcj8uaW5jbHVkZXMoXHJcbiAgICAgICAgICBzZWxlY3RlZFJldmlld2VyWzBdPy5teV9tZW1iZXJfaWRcclxuICAgICAgICApXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb2dyYW1bMF0/Lm92ZXJzZWVyPy5sZW5ndGggJiYgc2VsZWN0ZWRPdmVyc2Vlcj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaXNWYWxpZE92ZXJzZWVyID0gcHJvZ3JhbVswXT8ub3ZlcnNlZXI/LmluY2x1ZGVzKFxyXG4gICAgICAgICAgc2VsZWN0ZWRPdmVyc2VlclswXT8ubXlfbWVtYmVyX2lkXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgPyB0cnVlXHJcbiAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9ncmFtWzBdPy5vdmVyc2Vlcj8ubGVuZ3RoICYmIHNlbGVjdGVkTm90aWZ5T25GYWlsdXJlPy5sZW5ndGgpIHtcclxuICAgICAgICBpc1ZhbGlkTm90aWZ5T25GYWlsdXJlID0gcHJvZ3JhbVswXT8ub3ZlcnNlZXI/LmluY2x1ZGVzKFxyXG4gICAgICAgICAgc2VsZWN0ZWROb3RpZnlPbkZhaWx1cmVbMF0/Lm15X21lbWJlcl9pZFxyXG4gICAgICAgIClcclxuICAgICAgICAgID8gdHJ1ZVxyXG4gICAgICAgICAgOiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaXNWYWxpZEFzc2lnbmVlOiBpc1ZhbGlkQXNzaWduZWUsXHJcbiAgICAgIGlzVmFsaWRBc3NpZ25vcjogaXNWYWxpZEFzc2lnbm9yLFxyXG4gICAgICBpc1ZhbGlkUmV2aWV3ZXI6IGlzVmFsaWRSZXZpZXdlcixcclxuICAgICAgaXNWYWxpZE92ZXJzZWVyOiBpc1ZhbGlkT3ZlcnNlZXIsXHJcbiAgICAgIGlzVmFsaWROb3RpZnlPbkZhaWx1cmU6IGlzVmFsaWROb3RpZnlPbkZhaWx1cmUsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSXQgdGFrZXMgdHdvIHN0cmluZ3MgYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aHJlZSBwcm9wZXJ0aWVzXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByb2dyYW1OYW1lIC0gc3RyaW5nIC0mZ3Q7IE5hbWUgb2YgdGhlIHByb2dyYW1cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2NoaWxlUHJvZ3JhbV0gLSBzdHJpbmcgPSZndDsgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgc3ViLXByb2dyYW1cclxuICAgKiBAcmV0dXJucyB7XHJcbiAgICogICBwcm9ncmFtSWQ6IDEsXHJcbiAgICogICBjaGlsZFByb2dyYW1JZDogMixcclxuICAgKiAgIGNhdGVnb3J5SWQ6ICcxLDInXHJcbiAgICogfVxyXG4gICAqL1xyXG4gIGdldFByb2dyYW1JZChwcm9ncmFtTmFtZTogc3RyaW5nLCBjaGlsZVByb2dyYW0/OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3QgcHJvZ3JhbSA9IHRoaXMudGVtcGxhdGVJbmZvPy5jYXRlZ29yeUxpc3Q/LmZpbHRlcihcclxuICAgICAgKHByb2dyYW06IGFueSkgPT4gcHJvZ3JhbT8ucHJvZ3JhbU5hbWUgPT09IHByb2dyYW1OYW1lXHJcbiAgICApO1xyXG4gICAgbGV0IHN1YlByb2dyYW07XHJcbiAgICBsZXQgc3ViUHJvZ3JhbUlkO1xyXG4gICAgbGV0IGNhdGVnb3J5SWQ7XHJcbiAgICBpZiAoY2hpbGVQcm9ncmFtPy5sZW5ndGggJiYgcHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIHN1YlByb2dyYW0gPSBwcm9ncmFtWzBdPy5jaGlsZENhdGVnb3J5Py5maWx0ZXIoXHJcbiAgICAgICAgKHN1YlByb2dyYW06IGFueSkgPT4gc3ViUHJvZ3JhbT8ubmFtZSA9PT0gY2hpbGVQcm9ncmFtXHJcbiAgICAgICk7XHJcbiAgICAgIHN1YlByb2dyYW1JZCA9IHN1YlByb2dyYW0/Lmxlbmd0aCA/IHN1YlByb2dyYW1bMF0/LmlkIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzdWJQcm9ncmFtSWQgJiYgcHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNhdGVnb3J5SWQgPVxyXG4gICAgICAgIHByb2dyYW1bMF0/LnByb2dyYW1JZD8udG9TdHJpbmcoKSArICcsJyArIHN1YlByb2dyYW1JZD8udG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSBpZiAocHJvZ3JhbT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNhdGVnb3J5SWQgPSBwcm9ncmFtWzBdPy5wcm9ncmFtSWQ/LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwcm9ncmFtSWQ6IHByb2dyYW0/Lmxlbmd0aCA/IHByb2dyYW1bMF0/LnByb2dyYW1JZCA6IHVuZGVmaW5lZCxcclxuICAgICAgY2hpbGRQcm9ncmFtSWQ6IHN1YlByb2dyYW1JZCxcclxuICAgICAgY2F0ZWdvcnlJZDogY2F0ZWdvcnlJZCxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJdCB0YWtlcyBhIHN0cmluZyBhcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBhIHN0cmluZy5cclxuICAgKiBAcGFyYW0ge2FueX0gaXRlbSAtIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGdyb3VwIHRoYXQgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgZHJvcGRvd24uXHJcbiAgICogaXQgd2lsbCByZXR1cm4gZW1wbG95ZWUgaWQgaW4gdGhpcyBmb3JtICcxMjM0LDIzNDUnLlxyXG4gICAqL1xyXG4gIGdldEVtcGxveWVlSWRGcm9tR3JvdXAoaXRlbTogYW55KSB7XHJcbiAgICBsZXQgZW1wSWQ6IGFueSA9IFtdO1xyXG4gICAgbGV0IGVtcGxveWVlX2lkOiBhbnkgPSBbXTtcclxuICAgIHRoaXMudGVtcGxhdGVJbmZvPy5hc3NpZ25lZXNMaXN0Py5mb3JFYWNoKChlbkVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZW5FbGVtZW50Py5uYW1lQW5kRW1haWwgPT0gaXRlbSkge1xyXG4gICAgICAgIGVtcElkID0gZW5FbGVtZW50Py5teV9tZW1iZXJfaWQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKGVtcElkPy5sZW5ndGgpIHtcclxuICAgICAgZW1wSWQ/LmZvckVhY2goKGlkOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlSW5mbz8ucmV2aWV3ZXJMaXN0LmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHVzZXI/Lm15X21lbWJlcl9pZCA9PSBpZCkge1xyXG4gICAgICAgICAgICBlbXBsb3llZV9pZD8ucHVzaCh1c2VyPy5lbXBsb3llZV9pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVtcGxveWVlX2lkPy50b1N0cmluZygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWYgdGhlIGl0ZW0gaXMgYSBncm91cCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICogQHBhcmFtIHthbnl9IGl0ZW0gLSBhbnkgLSB0aGUgaXRlbSB0aGF0IGlzIGJlaW5nIGNoZWNrZWRcclxuICAgKi9cclxuICBpc0dyb3VwU2VsZWN0ZWQoaXRlbTogYW55KSB7XHJcbiAgICBsZXQgaXNHcm91cCA9IGZhbHNlO1xyXG4gICAgdGhpcy50ZW1wbGF0ZUluZm8uYXNzaWduZWVzTGlzdC5mb3JFYWNoKChlbkVsZW1lbnQ6IGFueSk6IGFueSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBlbkVsZW1lbnQubmFtZUFuZEVtYWlsID09IGl0ZW0gJiZcclxuICAgICAgICAoaXRlbT8uaW5jbHVkZXMoJ1VzZXJzKScpIHx8IGl0ZW0/LmluY2x1ZGVzKCdVc2VyKScpKSAmJlxyXG4gICAgICAgIHR5cGVvZiBlbkVsZW1lbnQ/Lm15X21lbWJlcl9pZCA9PSAnb2JqZWN0J1xyXG4gICAgICApIHtcclxuICAgICAgICBpc0dyb3VwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXNHcm91cDtcclxuICB9XHJcbn1cclxuIiwiPCEtLSA8ZGl2IGNsYXNzPVwiYWRkLW11bHRpcGxlLXJpc2tcIiBbYXR0ci5pZF09XCInc2Nyb2xsUmVmZXJlbmNlJ1wiID5cclxuICAgIDwhLSAtIG1haW4gY29udGFpbmVyIHN0YXJ0cyBoZXJlIC0gLT5cclxuICAgIDxkaXYgY2xhc3M9XCJhZGQtbXVsdGlwbGUtcmlzay1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1tdWx0aXBsZS1yaXNrLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy93b3JrZmxvdy1lbmdpbmUvYXNzZXRzL3dvcmtmbG93L3NwcmVhZHNoZWV0LW11bHRpcGxlLWNhdGVnb3J5LnN2Z1wiIGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8aDQ+WW91IGNhbiBlbnRydXN0IG11bHRpcGxlIHJlc3BvbnNpYmlsaXRpZXMgaW4ganVzdCB0d28gZWFzeSBzdGVwczo8L2g0PlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0XCI+XHJcbiAgICAgICAgICAgICAgICA8bGk+RG93bmxvYWQgdGhlIHRlbXBsYXRlIGFuZCBmaWxsIGluIHRoZSBkZXRhaWxzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGk+VXBsb2FkIHRoZSAueGxzeCBmaWxlIGFuZCB5b3XigJlyZSBnb29kIHRvIGdvITwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZG93bmxvYWRcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnTk9UX0RPV05MT0FESU5HJ1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZFRlbXBsYXRlKClcIiB0eXBlPVwiYnV0dG9uXCI+PGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWI7PC9pPiBEb3dubG9hZCBUZW1wbGF0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnVsay1idG4tcHJvZ3Jlc3NcIiAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURJTkcnXCI+XHJcbiAgICAgICAgICAgICAgICBEb3dubG9hZCBpbiBQcm9ncmVzc1xyXG4gICAgICAgICAgICAgICAgPGFwcC1saW5lLWxvYWRlciBbbG9hZGVySGVpZ2h0XT1cIicyJ1wiPjwvYXBwLWxpbmUtbG9hZGVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkU3RhdHVzID09PSAnRE9XTkxPQURFRCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidWxrLWJ0bi1wcm9ncmVzc1wiPjxpIGNsYXNzPVwiaWNvbnNcIj4mI3hlOTFjOzwvaT5Eb3dubG9hZCBDb21wbGV0ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1bGstYnRuLWFnYWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgSXMgdGhlIGZpbGUgbm90IGRvd25sb2FkZWQ/XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZG93bmxvYWRUZW1wbGF0ZSgpXCI+UmV0cnkgRG93bmxvYWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJpc1dyb25nRmlsZSB8fCBpc1dyb25nRm9ybWF0fHwgaXNGaWxlRW1wdHlcIlxyXG4gICAgICAgICAgICA+e3tlcnJvck1lc3NhZ2V9fTwvcD4gIFxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuPGFwcC1idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXcgKm5nSWY9XCJzaG93RXhjZWxcIlxyXG4gICAgW3Jlc3BvbnNpYmlsaXR5QnVsa1VwbG9hZF09XCJyZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWRcIlxyXG4gICAgW2J1bGtVcGxvYWRdPVwiYnVsa1VwbG9hZFwiXHJcbiAgICBbZmlsZU5hbWVdPVwiZmlsZU5hbWVcIlxyXG4gICAgW2xvYWRlcl09XCJsb2FkZXJcIlxyXG4gICAgW2RlZmF1bHRPd25lcl09XCJkZWZhdWx0T3duZXJcIlxyXG4gICAgW3RhYlR5cGVdPVwidGFiVHlwZVwiXHJcbiAgICBbYnVsa1VwbG9hZF09XCJidWxrVXBsb2FkXCJcclxuICAgIChzdWJtaXRSZXNwb25zaWJpbGl0eUJ1bGtVcGxvYWQpPVwic3VibWl0UmVzcG9uc2liaWxpdHlCdWxrVXBsb2FkKClcIlxyXG4gICAgKHNlbGVjdGVkVGFiKT1cInNlbGVjdGVkVGFiKCRldmVudClcIlxyXG4gICAgKGNhbmNlbCk9XCJyZXNldCgpXCJcclxuICAgIFtyZXNwb25zaWJpbGl0eVR5cGVdPVwiJ211bHRpVGFiJ1wiPlxyXG48L2FwcC1idWxrLXJlc3BvbnNpYmlsaXR5LXZpZXc+XHJcbjxhcHAtbG9hZGVyLWlubGluZSAqbmdJZj1cImxvYWRlclwiPjwvYXBwLWxvYWRlci1pbmxpbmU+XHJcblxyXG48aW5wdXQgdHlwZT1cImZpbGVcIiBbKG5nTW9kZWwpXT1cImZpbGVWYWx1ZVwiIGlkPVwiZmlsZUlucHV0XCIgY2xhc3M9XCJoaWRkZW4taW5wdXRcIiBhY2NlcHQ9XCIueGxzeFwiIChjaGFuZ2UpPVwidXBsb2FkZWRGaWxlKCRldmVudClcIiBtdWx0aXBsZSAvPlxyXG48YXBwLXNtaWxleS1kaWFsb2ctaW5saW5lICpuZ0lmPVwic2hvd1NtaWxleVwiIFttZXNzYWdlXT1cInNtaWxleU1lc3NhZ2VcIiBbYWN0aW9uQnV0dG9uc109XCJhY3Rpb25CdXR0b25zXCIgKGFjdGlvbik9XCJhY3Rpb24oJGV2ZW50KVwiIChjbG9zZVNtaWxleSk9XCJjbG9zZVNtaWxleSgkZXZlbnQpXCI+PC9hcHAtc21pbGV5LWRpYWxvZy1pbmxpbmU+Il19
|