@churchillliving/se-ui-toolkit 6.56.52 → 6.56.54
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.
|
@@ -2206,7 +2206,12 @@ export class GridComponent {
|
|
|
2206
2206
|
else {
|
|
2207
2207
|
if (this.checklist.length > 0) {
|
|
2208
2208
|
const checklistRows = this.setRowsData(this.checklist);
|
|
2209
|
-
|
|
2209
|
+
// addDataKeyValue means dataKey is a real field (e.g. alias grid's 'id'), not a
|
|
2210
|
+
// throwaway temp_id, so it must survive to be matched against originalRows below;
|
|
2211
|
+
// otherwise keep the legacy delete-before-match order unchanged for existing consumers
|
|
2212
|
+
if (!this.addDataKeyValue) {
|
|
2213
|
+
checklistRows.forEach(row => delete row[this.dataKey]);
|
|
2214
|
+
}
|
|
2210
2215
|
if (this.originalRows.length > 0) {
|
|
2211
2216
|
const filteredRows = getChangedRows(checklistRows, this.originalRows, this.columns, this.dataKey);
|
|
2212
2217
|
this.onRowUpdate.emit(this.prepareRowsForEmit(filteredRows));
|
|
@@ -2216,7 +2221,9 @@ export class GridComponent {
|
|
|
2216
2221
|
}
|
|
2217
2222
|
}
|
|
2218
2223
|
else {
|
|
2219
|
-
|
|
2224
|
+
if (!this.addDataKeyValue) {
|
|
2225
|
+
delete obj[this.dataKey]; // remove temp_id before emitting
|
|
2226
|
+
}
|
|
2220
2227
|
if (this.originalRows.length > 0) {
|
|
2221
2228
|
const singleRowArray = [obj];
|
|
2222
2229
|
const filteredRows = getChangedRows(singleRowArray, this.originalRows, this.columns, this.dataKey);
|
|
@@ -3439,7 +3446,11 @@ export class GridComponent {
|
|
|
3439
3446
|
if (this.gridService.isGridValid) {
|
|
3440
3447
|
if (this.checklist.length > 0) {
|
|
3441
3448
|
const checklistRows = this.setRowsData(this.checklist);
|
|
3442
|
-
|
|
3449
|
+
// see the equivalent onRowEditSave branch above for why addDataKeyValue must
|
|
3450
|
+
// survive to the getChangedRows match before being stripped
|
|
3451
|
+
if (!this.addDataKeyValue) {
|
|
3452
|
+
checklistRows.forEach(row => delete row[this.dataKey]);
|
|
3453
|
+
}
|
|
3443
3454
|
if (this.originalRows.length > 0) {
|
|
3444
3455
|
const filteredRows = getChangedRows(checklistRows, this.originalRows, this.columns, this.dataKey);
|
|
3445
3456
|
this.onRowUpdate.emit(this.prepareRowsForEmit(filteredRows));
|
|
@@ -3501,7 +3512,9 @@ export class GridComponent {
|
|
|
3501
3512
|
dirtyRows = dirtyRows.map(normalizedRow => this.saveRecordArray.find(r => r[this.dataKey] === normalizedRow[this.dataKey])).filter(r => r);
|
|
3502
3513
|
}
|
|
3503
3514
|
if (dirtyRows.length > 0) {
|
|
3504
|
-
|
|
3515
|
+
if (!this.addDataKeyValue) {
|
|
3516
|
+
dirtyRows.forEach(row => delete row[this.dataKey]); // remove temp_id before emitting — it's only used for dirty-row comparison
|
|
3517
|
+
}
|
|
3505
3518
|
this.onRowUpdate.emit(this.prepareRowsForEmit(dirtyRows));
|
|
3506
3519
|
}
|
|
3507
3520
|
}
|
|
@@ -4315,4 +4328,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
4315
4328
|
type: HostListener,
|
|
4316
4329
|
args: ['window:beforeunload', ['$event']]
|
|
4317
4330
|
}] } });
|
|
4318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFFBQVEsRUFFUixZQUFZLEVBR1osU0FBUyxFQUNULFlBQVksRUFFWixnQkFBZ0IsR0FLakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBUXJFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBU0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixrQkFBa0IsRUFFbEIsY0FBYyxFQUNkLGVBQWUsRUFFZixjQUFjLEVBQ2QscUJBQXFCLEVBRXJCLFVBQVUsRUFDVixnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLHdDQUF3QyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJNU8sT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1B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QUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ25MLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUN0TCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDL0wsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQy9MLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtRQUNsTCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFO1lBQ3pELEdBQUcsVUFBVTtZQUNiLFVBQVUsRUFBRSxjQUFjO1lBQzFCLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQ3hELElBQUksRUFBRTtnQkFDSixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7Z0JBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQzFCLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUztnQkFDdkQsR0FBRyxNQUFNLENBQUMsT0FBTzthQUNsQjtZQUNELFFBQVEsRUFBRSxJQUFJO1lBQ2QsV0FBVyxFQUFFLEtBQUs7U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw4Q0FBOEM7YUFDNUQsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxDQUFDO1FBRUwscUJBQXFCO1FBQ3JCLDBEQUEwRDtRQUMxRCxpRUFBaUU7UUFDakUsV0FBVztRQUVYLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ3JELElBQUksYUFBYSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxTQUFjLEVBQUUsS0FBVTtRQUM3QyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2QsU0FBUyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2RSxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RSxNQUFNLFVBQVUsR0FBRyxDQUFDLGNBQWMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BJLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixJQUFJLE9BQU8sQ0FBQyxzRUFBc0UsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BGLFNBQVMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1lBQzVDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsbUJBQW1CLENBQUMsR0FBRztRQUNyQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRSxNQUFNLGdCQUFnQixHQUFHLFNBQVMsRUFBRSxRQUFrQyxDQUFDO1FBQ3ZFLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDNUQsZ0JBQWdCLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNILGlCQUFpQixDQUFDLE1BQVcsRUFBRSxHQUFTO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksR0FBRyxHQUFRLElBQUksQ0FBQyxxQkFBcUIsQ0FDdkMsR0FBRyxFQUNILE1BQU0sRUFDTixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUk7WUFDbkQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLENBQzlGLENBQUM7UUFFRixHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUM7UUFDakssTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7YUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDhDQUE4QzthQUM1RCxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsZUFBZSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUNqRSxDQUFDLENBQUMsQ0FBQztRQUNMLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUNuQixDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ04sSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNuQixHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDdkIsQ0FBQztnQkFDRCxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLEtBQUssR0FBRyxpQkFBaUIsQ0FDM0IsTUFBTSxFQUNOLE1BQU0sQ0FBQyxhQUFhLEVBQ3BCLEdBQUcsQ0FDSixDQUFDO2dCQUNGLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxTQUFTLEdBQUcsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUN0RSxJQUFJLFNBQVMsR0FBRyxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQ3RFLElBQUksV0FBVyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQy9DLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUN4QixJQUFJLEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7d0JBQzVELEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUM1RCxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO29CQUMzRyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHOzRCQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUNwRSxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7eUJBQ2hELENBQUE7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDaEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLFdBQVcsQ0FBQztvQkFDN0IsSUFBSSxTQUFTLElBQUksU0FBUyxFQUFFLENBQUM7d0JBQzNCLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRzs0QkFDakIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUNqRCxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7eUJBQ25ELENBQUM7b0JBQ0osQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUNqQyxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUUsQ0FBQzt3QkFDM0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHOzRCQUNqQixJQUFJLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDOzRCQUMzRSxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7eUJBQ3JELENBQUM7b0JBQ0osQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3RDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQzVDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN4RixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDO1lBQy9DLENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQy9CLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDL0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbkssQ0FBQztxQkFBTSxDQUFDO29CQUNOLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNwSSxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNmLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUosQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNwQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM1QixDQUFDO1lBQ0QsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLEVBQ0QsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDWixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlLENBQUMsTUFBVztRQUN6QixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsc0JBQXNCLENBQUMsR0FBRyxFQUFFLE1BQU07UUFDaEMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzdKLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ2hELENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDMUIsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ25DLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxtQkFBbUIsQ0FBQyxNQUFXLEVBQUUsR0FBUTtRQUN2QyxJQUFJLFdBQVcsR0FBWSxLQUFLLENBQUM7UUFDakMsSUFDRSxNQUFNLENBQUMsUUFBUTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsU0FBUyxDQUFDLEVBQzlELENBQUM7WUFDRCxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7YUFBTSxJQUNMLE1BQU0sQ0FBQyxRQUFRO1lBQ2YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxrQkFBa0IsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLGtCQUFrQixDQUFDLEVBQ3ZFLENBQUM7WUFDRCxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLENBQUM7YUFBTSxJQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxDQUFDO1lBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxZQUFZLENBQUMsRUFDakUsQ0FBQztZQUNELFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7WUFDbEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFFNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO2lCQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsOENBQThDO2lCQUM1RCxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztZQUNMLHFCQUFxQjtZQUNyQix5Q0FBeUM7WUFDekMsV0FBVztZQUNYLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNwQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsMEJBQTBCLENBQUMsTUFBVyxFQUFFLEdBQVEsRUFBRSxRQUFhLEVBQUU7UUFDL0QsSUFBSSxLQUFLLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDakMsSUFBSSxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN6QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFlBQVksSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkYsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUM3RyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDN0UsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNsQixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDdEksQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUN2SCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN6QixLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDMUIsQ0FBQztJQUVILENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUc7UUFDeEMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNoRCxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQzNFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxxRkFBcUY7Z0JBQ3JGLElBQUksT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssb0JBQW9CLENBQUMsRUFBRSxDQUFDO29CQUN0RSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQzt3QkFDckIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVc7NkJBQzNCLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQzs2QkFDbkUsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFFVCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQ0FDcEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQzs0QkFDMUMsQ0FBQzt3QkFDSCxDQUFDLENBQUMsQ0FBQztvQkFDUCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxZQUFZLENBQUMsTUFBbUIsRUFBRSxHQUFRO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsdURBQXVEO1FBQ3ZELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFtQixFQUFFLEdBQVEsRUFBRSxRQUFhLEVBQUU7UUFDNUQsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ2pDLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUYsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7WUFDcEYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixDQUFDO2lCQUFNLElBQ0wsTUFBTSxDQUFDLFFBQVE7Z0JBQ2YsTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsWUFBWSxFQUM1QyxDQUFDO2dCQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQXNCLEVBQUUsR0FBUTtRQUM1QyxJQUFJLE1BQU0sR0FBUSxFQUFFLENBQUM7UUFDckIsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDM0IsQ0FBQzthQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDckgsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGVBQWUsQ0FBQztRQUN2RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQXNCLEVBQUUsR0FBUTtRQUM5QyxJQUFJLFlBQVksR0FBVSxFQUFFLENBQUM7UUFDN0IsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUMxRyxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsV0FBVyxDQUFDO1FBQ3pFLENBQUM7YUFBTSxDQUFDO1lBQ04sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDL0IsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFRLEVBQUUsTUFBWSxFQUFFLEtBQVc7UUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxNQUFXO1FBQ2xDLE9BQU8sT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO0lBQzdKLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBZ0IsRUFBRSxNQUFZLEVBQUUsS0FBVztRQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuRSxNQUFNLFNBQVMsR0FBUSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDbEMsK0JBQStCO1FBQy9CLElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksU0FBUyxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwSCxTQUFTLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkcsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsT0FBTyxJQUFJLFNBQVMsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUsscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckksSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQztZQUNsQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoRCxTQUFTLENBQUMsV0FBVyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMvRyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxTQUFTLENBQUMsR0FBUTtRQUNoQixNQUFNLEdBQUcsR0FBRztZQUNWLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztZQUNoQixTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxZQUFZO1lBQ3RILFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQzdDLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2hELEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7U0FDbk4sQ0FBQztRQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFXLEVBQUUsS0FBVSxFQUFFLE1BQVc7UUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzFELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEQsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtRQUN6QyxDQUFDO2FBQU0sSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDOUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0QsQ0FBQzthQUFNLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE9BQU8sSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUN0SixJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM3QyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO2dCQUMvQixNQUFNLENBQUMsV0FBVyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDMUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3QixDQUFDO2lCQUNJLENBQUM7Z0JBQ0osTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksTUFBTSxFQUFFLENBQUM7WUFDbEIsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQW1CLEVBQUUsTUFBVyxFQUFFLEtBQVU7UUFDN0QsSUFBSSxNQUFNLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFVLEVBQUUsTUFBVztRQUNwQyxJQUNFLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVztZQUN6QixDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQzFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtnQkFDckMsTUFBTSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsRUFDOUIsQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxDQUFDO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUMvRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFXO1FBQzNCLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdkYsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLGVBQWUsQ0FBQyxLQUFVLEVBQUUsTUFBbUI7UUFDN0MsaUVBQWlFO1FBQ2pFLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLElBQUksS0FBSyxjQUFjLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ2xGLElBQ0UsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDO1lBQ3RELE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxJQUFJLG1CQUFtQixFQUNuRSxDQUFDO1lBQ0QsMkNBQTJDO1lBQzNDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDbEMsTUFBYyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDekMsQ0FBQztZQUNELElBQUksYUFBYSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDcEQsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFRLENBQUMsQ0FBQztZQUN4SCxDQUFDO2lCQUFNLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNwRyxDQUFDO1lBQ0QsSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMzQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyQyxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDekMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FDckMsQ0FBQztvQkFDRixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNmLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsQ0FBQzs0QkFDckUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7NEJBQ3ZGLFlBQVksQ0FBQyxVQUFVLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUN4RixDQUFDOzZCQUFNLENBQUM7NEJBQ04sYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0NBQ3BELFlBQVksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7NEJBQ3BILENBQUM7aUNBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0NBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsYUFBYSxDQUFDOzRCQUNwRyxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsa0NBQWtDO0lBQ2xDLGFBQWEsQ0FBQyxNQUFXLEVBQUUsR0FBUTtRQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLFlBQVksQ0FBQyxNQUFXLEVBQUUsR0FBUTtRQUNoQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqSyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxpRUFBaUU7UUFDakUsb0NBQW9DO1FBQ3BDLElBQUk7UUFDSixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLElBQ0wsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNsQixNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJO1lBQ3BDLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxlQUFlLEVBQ3RCLENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFDRCxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsUUFBUSxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hOLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsR0FBRztRQUM3QixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzNELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNqRixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFDLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BELENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHO1FBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQU0sRUFBRSxHQUFHO1FBQ3RCLElBQUksTUFBTSxFQUFFLElBQUksS0FBSyxlQUFlLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLGFBQWEsQ0FBQyxNQUFXLEVBQUUsR0FBUTtRQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxxRUFBcUU7UUFDckUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ3RDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUTthQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQTtRQUNqQyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFBO1FBQ2pDLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFVLEVBQUUsTUFBbUIsRUFBRSxHQUFHO1FBQ3RELElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztRQUMxQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUE7UUFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxxRUFBcUU7SUFDckUseUJBQXlCLENBQUMsTUFBVyxFQUFFLEdBQVE7UUFDN0MsSUFDRSxNQUFNLEVBQUUsSUFBSSxLQUFLLGVBQWUsQ0FBQyxRQUFRO1lBQ3pDLE1BQU0sQ0FBQyxZQUFZO1lBQ25CLE1BQU0sQ0FBQyxZQUFZLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFDL0IsQ0FBQztZQUNELE1BQU0sR0FBRyxHQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUNyQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ1YsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQy9ELENBQUM7WUFDRixNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUN4QyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQ2QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUU7Z0JBQ3RDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQ2hDLENBQUM7WUFDRixJQUFJLEdBQUcsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUM3QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ25ELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixVQUFVLENBQUMsS0FBVSxFQUFFLE1BQVcsRUFBRSxHQUFRO1FBQzFDLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUMzQixNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtJQUNmLFdBQVc7UUFDVCxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNsRSxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUMvQyxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsc0JBQXNCO0lBQ3RCLHFCQUFxQjtRQUNuQixNQUFNLHlCQUF5QixHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQ3ZELHNCQUFzQixDQUN2QixDQUFDO1FBQ0YsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQzlCLHlCQUF5QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2hDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdEcsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDdEMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNuQyxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLElBQUksSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDcEosSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQzVCLENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBQzNCLENBQUM7cUJBQ0ksQ0FBQztvQkFDSixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDNUIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLG1CQUFtQjtRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUM3QixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDdEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ2xELENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDO1FBRUgsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNwRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxZQUFvQixFQUFFO1FBQzNDLElBQUksT0FBTyxHQUFZLEtBQUssQ0FBQztRQUM3QixJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBUSxJQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2RixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDZixJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3BDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFFcEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDakMsSUFBSSxHQUFHLEVBQUUsQ0FBQzt3QkFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFOzRCQUN0QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNoQixDQUFDLENBQUMsQ0FBQzt3QkFDSCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUN2QixHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDeEIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7NEJBQzlCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDOzRCQUN2RCxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7NEJBQ3ZELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0NBQ2pDLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQ0FDbEcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7NEJBQy9ELENBQUM7aUNBQU0sQ0FBQztnQ0FDTixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs0QkFDaEUsQ0FBQzt3QkFDSCxDQUFDOzZCQUFNLENBQUM7NEJBQ04sSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQzs0QkFDakMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQ0FDckMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFNLEVBQUUsRUFBRTtvQ0FDOUIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO3dDQUFFLE9BQU8sSUFBSSxDQUFDO29DQUN2QyxJQUFJLENBQUMsWUFBWSxJQUFJO3dDQUFFLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQ0FDNUQsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3Q0FBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0NBQ25GLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7d0NBQUUsT0FBTyxDQUFDLENBQUM7b0NBQ3JFLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dDQUNqRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dDQUMvQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0NBQzVELENBQUM7b0NBQ0QsT0FBTyxDQUFDLENBQUM7Z0NBQ1gsQ0FBQyxDQUFDO2dDQUNGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPO3FDQUNoQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQztxQ0FDMUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dDQUNwQyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO2dDQUNyQyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29DQUNqQyw0RkFBNEY7b0NBQzVGLDJEQUEyRDtvQ0FDM0QsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTt3Q0FDckQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3Q0FDNUUsOEJBQThCO3dDQUM5QixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDOzRDQUNyQixVQUFVLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0NBQ25ELENBQUM7NkNBQU0sSUFBSSxVQUFVLEVBQUUsQ0FBQzs0Q0FDdEIsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dDQUM3QyxDQUFDO3dDQUNELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO29DQUNqRCxDQUFDLENBQUMsQ0FBQztvQ0FDSCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dDQUNuRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dDQUM1RSw4QkFBOEI7d0NBQzlCLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUM7NENBQ3JCLFVBQVUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3Q0FDbkQsQ0FBQzs2Q0FBTSxJQUFJLFVBQVUsRUFBRSxDQUFDOzRDQUN0QixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7d0NBQzdDLENBQUM7d0NBQ0QsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7b0NBQ2pELENBQUMsQ0FBQyxDQUFDO29DQUdILGlFQUFpRTtvQ0FDakUsU0FBUyxHQUFHLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQ0FFOUYsdUVBQXVFO29DQUN2RSxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUN4QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUNoRixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUNuQixDQUFDO2dDQUNELElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQ0FDekIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsMkVBQTJFO29DQUMvSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQ0FDNUQsQ0FBQzs0QkFDSCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLFNBQVMsSUFBSSxXQUFXLEVBQUUsQ0FBQztvQkFDN0IsS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQzt3QkFDekIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNmLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELHVDQUF1QztJQUN2QyxVQUFVLENBQUMsTUFBVztRQUNwQixRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsOENBQThDO0lBQzlDLGtCQUFrQjtRQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDckMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFFN0IsSUFBSSxjQUFjLEdBQVEsUUFBUSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksb0JBQW9CLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckUsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoRCxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNsRSxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQixlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDaEMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDL0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEUsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FDMUIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsMEJBQTBCLENBQUMsS0FBVTtRQUNuQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ2hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBRTlELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztRQUNyQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxLQUFVO1FBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLG9CQUFvQixDQUFDLE9BQVksRUFBRSxLQUFVO1FBQzNDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFFaEMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7WUFDaEMsQ0FBQztpQkFDSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFDdEIsQ0FBQztZQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxTQUFTLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0IsQ0FBQztpQkFBTSxJQUFJLFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQzVGLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQzthQUVJLENBQUM7WUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxXQUFXLENBQUMsUUFBUTtRQUNsQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM1QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQzVCLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QixHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFRO1FBQ25CLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbkIsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsc0JBQXNCLENBQUMsR0FBUTtRQUM3QixJQUFJLENBQUMsR0FBRztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQWlCO1FBQzFDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QyxnR0FBZ0c7UUFDaEcsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2xELElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsMkJBQTJCO1lBQ25ELElBQUksR0FBRyxFQUFFLFNBQVM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDaEMsMEVBQTBFO1lBQzFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUMxQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLENBQzNFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILDJGQUEyRjtRQUMzRixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDeEUsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpGLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzdCLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxDQUFDO1FBRUQsc0VBQXNFO1FBQ3RFLFFBQVEsR0FBRyxRQUFRO2FBQ2hCLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsMENBQTBDO2FBQ3BFLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2hCLE1BQU0sVUFBVSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDcEMsMkNBQTJDO2dCQUMzQyxJQUFJLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNoRixVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDMUMsQ0FBQztnQkFDRCx3QkFBd0I7Z0JBQ3hCLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDekUsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUwsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsbUJBQW1CLENBQUMsTUFBVyxFQUFFLEtBQVU7UUFDekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBVyxFQUFFLEtBQVUsRUFBRSxNQUFXO1FBQ3ZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3ZFLHFDQUFxQztRQUNyQyw2Q0FBNkM7UUFDN0MsSUFBSTtJQUNOLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFtQixFQUFFLEdBQVM7UUFDN0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDdkUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDNUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkIsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDeEIsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDeEcsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ3JDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBVSxFQUFFLEdBQVEsRUFBRSxNQUFtQjtRQUM3RCxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzRCxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ2xELENBQUM7YUFBTSxJQUFJLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvRCxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNuRSxDQUFDO2FBQ0ksQ0FBQztZQUNKLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLG1CQUFtQixDQUFDLE1BQW1CLEVBQUUsS0FBSztRQUM1QyxNQUFNLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxQixJQUNFLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE9BQU87O29CQUV2QyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxVQUFVLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLEVBQ2hFLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDNUIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxRQUFRLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUNyRixHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQzt3QkFDckIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO29CQUN4RCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELGlFQUFpRTtJQUNqRSxzQkFBc0IsQ0FBQyxLQUFVO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELHdDQUF3QztJQUN4QyxrQkFBa0IsQ0FBQyxNQUFXLEVBQUUsR0FBUSxFQUFFLGFBQWEsR0FBRyxLQUFLO1FBQzdELElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDcEYsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN2QyxJQUFJLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEtBQUssZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUMxRixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsdUJBQXVCLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQ3RGLENBQUM7eUJBQ0ksSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ3pDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQzt3QkFDeEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDdkMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxhQUFhLEVBQUUsQ0FBQzt3QkFDbEIsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNqRixDQUFDO29CQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO29CQUNqQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hGLENBQUM7cUJBQU0sSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDcEMsSUFBSSxhQUFhLEVBQUUsQ0FBQzt3QkFDbEIsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO29CQUNwRCxDQUFDO29CQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO2dCQUNsQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBRUgsQ0FBQztJQUNELGtCQUFrQixDQUFDLE1BQU0sRUFBRSxHQUFHO1FBQzVCLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUM1SyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWpJLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUEyQjtRQUMxQyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDcEUsTUFBTSxxQkFBcUIsR0FBRyxZQUFZLEVBQUUsU0FBUyxDQUFDO1FBQ3RELE1BQU0sc0JBQXNCLEdBQUcsWUFBWSxFQUFFLFVBQVUsQ0FBQztRQUN4RCxJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQztZQUM3QyxJQUFJLENBQUMsZUFBZSxHQUFHLHNCQUFzQixDQUFDO1FBQ2hELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQzlDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxzRUFBc0UsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzVGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUNuQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDNUMsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7aUJBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztnQkFDdEMsQ0FBQztxQkFDSSxDQUFDO29CQUNKLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzdELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsSUFBSSxxQkFBcUIsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDaEMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO3FCQUNJLENBQUM7b0JBQ0osWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDcEUsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRLEVBQUUsTUFBVztRQUN0QyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzdCLE9BQU8sT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUssQ0FBQztRQUVELElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDN0MsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7WUFDaEgsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO1FBQ2hELENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQW1CLEVBQUUsR0FBUTtRQUNoRCxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksSUFBSSxNQUFNLEVBQUUsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7SUFDaEcsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQW1CLEVBQUUsR0FBUTtRQUNqRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFELE9BQU8sVUFBVSxFQUFFLFVBQVUsS0FBSyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUVELG1CQUFtQixDQUFDLE1BQW1CLEVBQUUsR0FBUTtRQUMvQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBVTtRQUNsQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQVEsRUFBRSxNQUFtQixFQUFFLEtBQVU7UUFDM0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDM0QsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV4QyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLGVBQWUsQ0FBQztRQUNwQyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxlQUFlLENBQUM7UUFDekMsQ0FBQztRQUNELEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRztZQUNmLEdBQUcsVUFBVTtZQUNiLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7U0FDL0UsQ0FBQztJQUNKLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxNQUFtQixFQUFFLEdBQVEsRUFBRSxTQUFpQixFQUFFLFVBQWtCO1FBQy9GLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5RixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNuRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUVuRixNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDOUQsSUFDRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssV0FBVztnQkFDbEMsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLFNBQVM7Z0JBQ2hDLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxTQUFTO2dCQUNoQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssU0FBUztnQkFDaEMsS0FBSyxLQUFLLFNBQVM7Z0JBQ25CLEtBQUssS0FBSyxJQUFJO2dCQUNkLEtBQUssS0FBSyxFQUFFO2dCQUNaLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFDekIsQ0FBQztnQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNYLEtBQUssRUFBRSxHQUFHO29CQUNWLFNBQVMsRUFBRSxVQUFVLENBQUMsTUFBTTtvQkFDNUIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxHQUFHO29CQUN2QixLQUFLO2lCQUNOLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDWCxLQUFLLEVBQUUsU0FBUztZQUNoQixTQUFTLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDNUIsUUFBUSxFQUFFLFNBQVMsQ0FBQyxHQUFHO1lBQ3ZCLEtBQUssRUFBRSxVQUFVO1NBQ2xCLENBQUMsQ0FBQztRQUVILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLLENBQUMsMkJBQTJCLENBQUMsTUFBbUIsRUFBRSxHQUFRLEVBQUUsU0FBaUIsRUFBRSxVQUFrQjtRQUNwRyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0QsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDO1FBRTlDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBUSxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQWEsYUFBYSxFQUFFO2dCQUNqRCxTQUFTO2dCQUNULE9BQU8sRUFBRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDO2dCQUM5RSxRQUFRLEVBQUUsQ0FBQztnQkFDWCxJQUFJLEVBQUUsQ0FBQzthQUNSLENBQUMsQ0FBQyxTQUFTLENBQ1YsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFDckIsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUNwQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUN2RSxDQUFDO0lBRUQseUJBQXlCLENBQUMsR0FBUSxFQUFFLE1BQW1CLEVBQUUsY0FBbUI7UUFDMUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ25GLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ25GLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFFcEgsSUFBSSxhQUFhLEtBQUssU0FBUyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM5RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQztRQUNsQyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUN6RCxDQUFDO1FBQ0QsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUc7WUFDM0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7U0FDbkQsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxNQUFtQixFQUFFLEdBQVE7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDO1FBQ3hFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsU0FBUyxDQUFDO1FBRXBFLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDOUMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsV0FBVztZQUM3QixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDO1lBQzlFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFVCxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDN0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsU0FBUztZQUMxQixDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDO1lBQzVFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFVCxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDNUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQ2QsU0FBUyxJQUFJLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxTQUFTLEVBQUUsV0FBVyxFQUFFO1lBQ2hFLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUM7WUFDNUUsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVYLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCx3QkFBd0IsQ0FBQyxHQUFRLEVBQUUsTUFBVyxFQUFFLEtBQVU7UUFDeEQsd0VBQXdFO1FBQ3hFLElBQUksR0FBRyxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQzNCLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQ2hDLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQXFCLEVBQUUsTUFBbUIsRUFBRSxHQUFRO1FBQzNFLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0MsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTztRQUNULENBQUM7UUFFRCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbkQsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBb0IsRUFBRSxNQUFtQixFQUFFLEdBQVE7UUFDMUUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFDaEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3BDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbEQsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWhDLElBQ0UsVUFBVTtZQUNWLENBQUMsVUFBVTtZQUNYLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxxQkFBcUI7WUFDNUIsTUFBTSxDQUFDLFNBQVMsRUFDaEIsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLHNCQUFzQixVQUFVLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztnQkFDL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDekYsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3BCLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDM0MsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUdELHNCQUFzQixDQUFDLEdBQVEsRUFBRSxNQUFXO1FBQzFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUM7WUFDN0MsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3JFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLHlCQUF5QixDQUFDLEdBQVEsRUFBRSxNQUFXLEVBQUUsS0FBVTtRQUN6RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFRLEVBQUUsTUFBVztRQUNuQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyxDQUFFLGtEQUFrRDtRQUNoRSxDQUFDO1FBRUQseURBQXlEO1FBQ3pELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNyRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMxQyxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUUsa0NBQWtDO0lBQy9ELENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsa0JBQWtCLENBQUMsR0FBUSxFQUFFLE1BQVcsRUFBRSxLQUFVO1FBQ2xELHlFQUF5RTtRQUN6RSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDMUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUMzQyxDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBQ0QsYUFBYSxDQUFDLEtBQVUsRUFBRSxHQUFRLEVBQUUsTUFBVztRQUM3QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBUSxFQUFFLE1BQW1CO1FBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXJDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQVU7UUFDbEIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBQ0QsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxHQUFRO1FBQzNCLE1BQU0sS0FBSyxHQUFlLEVBQUUsQ0FBQztRQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUM5QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQztZQUN6RCxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxFQUFFLFNBQVMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFM0UsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUNyQixLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVM7b0JBQ3JDLE1BQU0sRUFBRSxHQUFHLENBQUMsWUFBWSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUk7aUJBQzlGLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxTQUFTO1lBQ1gsQ0FBQztZQUVELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3hDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDcEYsU0FBUztZQUNYLENBQUM7WUFDRCxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDaEIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUUsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsWUFBWSxDQUFDLEdBQVE7UUFDbkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVUsRUFBRSxHQUFRO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7a0lBejdJVSxhQUFhO3NIQUFiLGFBQWEscXJHQUNlLGdCQUFnQiw2U0NwRnpELHE0NERBdTdCQTs7NEZEcDJCYSxhQUFhO2tCQUx6QixTQUFTOytCQUNFLFNBQVM7OzBCQTJnQmhCLFFBQVE7OzBCQUNSLFFBQVE7eUNBdGdCSix5QkFBeUI7c0JBRC9CLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHOUMsT0FBTztzQkFBL0IsWUFBWTt1QkFBQyxTQUFTO2dCQUNiLGVBQWU7c0JBQXhCLE1BQU07Z0JBU00sY0FBYztzQkFBMUIsS0FBSztnQkE2RVcsS0FBSztzQkFBckIsU0FBUzt1QkFBQyxJQUFJO2dCQUNRLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFHWixZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFTVSxjQUFjO3NCQUE3QixLQUFLO2dCQUVVLGNBQWM7c0JBQTdCLEtBQUs7Z0JBUUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdVLE9BQU87c0JBQXRCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUdHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQU1NLElBQUk7c0JBQWhCLEtBQUs7Z0JBb0RPLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFpR0csT0FBTztzQkFBZixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBR0csYUFBYTtzQkFBckIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFFTyxrQkFBa0I7c0JBQTlCLEtBQUs7Z0JBWUksVUFBVTtzQkFBbkIsTUFBTTtnQkFHRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBR0csYUFBYTtzQkFBdEIsTUFBTTtnQkFHRyxZQUFZO3NCQUFyQixNQUFNO2dCQUdHLGNBQWM7c0JBQXZCLE1BQU07Z0JBR0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUdHLGFBQWE7c0JBQXRCLE1BQU07Z0JBR0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUlQLHVCQUF1QjtzQkFEdEIsTUFBTTtnQkFNUCxZQUFZO3NCQURYLE1BQU07Z0JBSUcsV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBR0csZUFBZTtzQkFBeEIsTUFBTTtnQkFHRyxXQUFXO3NCQUFwQixNQUFNO2dCQUdHLFFBQVE7c0JBQWpCLE1BQU07Z0JBR0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUdFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsV0FBVztzQkFBbkIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNO2dCQUdHLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUUsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBeUpOLGVBQWU7c0JBRmQsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUMvQixZQUFZO3VCQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXVyxPQUFPO3NCQUFoRCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFReEMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25EZXN0cm95LFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBOZ1pvbmUsXG4gIEFmdGVyVmlld0luaXQsXG4gIFJlbmRlcmVyMixcbiAgQXBwbGljYXRpb25SZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0Q2hhbmdlZFJvd3MgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtcbiAgRHluYW1pY0RpYWxvZ1JlZixcbiAgRHluYW1pY0RpYWxvZ0NvbmZpZyxcbiAgRGlhbG9nU2VydmljZSxcbiAgRHluYW1pY0RpYWxvZ0NvbXBvbmVudCxcbn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XG5pbXBvcnQge1xuICBJR3JpZENvbHVtbixcbiAgSUdyaWRTb3J0LFxuICBJR3JpZFNlcnZlclNpZGVFdmVudCxcbiAgSUdyaWRQYWdpbmF0aW9uRXZlbnQsXG4gIElHbG9iYWxGaWx0ZXIsXG4gIElHcmlkRmlsdGVyLFxuICBJR3JpZENvbHVtbkFjdGlvbixcbiAgSUdyaWRSb3dBY3Rpb24sXG4gIEVHcmlkU2VsZWN0aW9uVHlwZSxcbiAgRUdyaWRDb2x1bW5UeXBlLFxuICBFR3JpZFNvcnREaXJlY3Rpb24sXG4gIElHcmlkRGF0YUV4cG9ydCxcbiAgRUdyaWRBZ2dyZWdhdGUsXG4gIEVHcmlkRm9ybWF0VHlwZSxcbiAgSUdyaWRGaWx0ZXJJbmZvLFxuICBFR3JpZFZhbGlkYXRvcixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICB1c2VyU2V0dGluZyxcbiAgRUdyaWRFeGNlbCxcbiAgRUdyaWRSb3dQcm9wTmFtZSxcbiAgSUdyaWRSZXBvcnRCdG4sXG4gIEVHcmlkbGluayxcbiAgRUdyaWRGb3JtYXR0ZXIsXG59IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEVQZXJtaXNzaW9uVHlwZSwgSVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBJZnJhbWVDb21wb25lbnQgfSBmcm9tICcuLi9pZnJhbWUvaWZyYW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgYXV0b1NldExvb2t1cERhdGEsIGNoYW5nZUNvbHVtbnNTdGF0ZSwgY3VycmVudFVybCwgZHJhZ2dhYmxlRGlhbG9nLCBvYmpDb252ZXJ0VG9Mb3dlciwgc2V0RGlhbG9nUmVzcG9uc2UsIHNldE1pbnV0ZXNJbnRlcnZhbCwgc2V0VGltZUluRGF0ZSwgb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBNZW51IH0gZnJvbSAncHJpbWVuZy9tZW51JztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgRUZvcm1hdFR5cGUsIEVNYXRjaE1vZGUsIEVPcGVyYXRvciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h5cGVybGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdER0byB9IGZyb20gJ3Byb2plY3RzL3NlLXVpLXRvb2xraXQvc3JjL2xpYi9tb2RlbHMvcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBTeXN0ZW1Db25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3lzdGVtLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEVtYWlsRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZW1haWwvZW1haWwtZmlsdGVyL2VtYWlsLWZpbHRlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgndmlld0NvbnRhaW5lclJlZicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBwYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXG5cbiAgQFZpZXdDaGlsZHJlbignZ3JpZFJvdycpIGdyaWRSb3c6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQE91dHB1dCgpIGlubGluZVJvd0NhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgZ3JpZFNldHRpbmc6IGFueTtcbiAgc2VhcmNoYnRuSWQgPSAnc2VhcmNoR2xvYmFsRmlsdGVyQnRuJztcbiAgY3VycmVudFBhZ2U6IG51bWJlciA9IDA7XG4gIFBhZ2VDaGFuZ2U6IGJvb2xlYW47XG4gIHRlbXBTYXZlZFJvdzogYW55W10gPSBbXTtcbiAgc29ydERhdGE6IElHcmlkU29ydCA9IHt9O1xuICAvLyBGdWxsIHNvcnQgb3JkZXIgKHByaW1hcnksIHNlY29uZGFyeSwg4oCmKSBzbyBtdWx0aS1jb2x1bW4gc29ydGluZyBpcyBob25vdXJlZCwgbm90IGp1c3QgdGhlIGZpcnN0LlxuICBtdWx0aVNvcnREYXRhOiBJR3JpZFNvcnRbXSA9IFtdO1xuICBASW5wdXQoKSBzZXQgYWN0aXZlVGVzdE1vZGUodmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cbiAgc2VydmVyRmlsdGVyczogSUdyaWRTZXJ2ZXJTaWRlRXZlbnQgPSB7fTtcbiAgcm93c0RhdGE6IGFueVtdID0gW107XG4gIG9yaWdpbmFsUm93czogYW55W10gPSBbXTtcbiAgZ3JpZElkOiBzdHJpbmcgPSAnJztcbiAgcm93c0RhdGFDb3B5OiBhbnlbXSA9IFtdO1xuICBudW1lcmljVmFsdWU6IGFueSA9IHt9XG4gIHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBpc0NvbHVtbkhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuICByb3dDbGlja0RhdGE6IElHcmlkQ29sdW1uO1xuICBjb21wb25lbnRUYWJsZVJlZjogYW55O1xuICBsb29rdXBGaWx0ZXJPYmo6IGFueTtcbiAgY2hlY2tsaXN0OiBhbnlbXSA9IFtdXG4gIGxvb2t1cEJsdXI6IGJvb2xlYW4gPSB0cnVlO1xuICBnbG9iYWxGaWx0ZXJzQXJyYXk6IGFueVtdID0gW107XG4gIGNoZWNrQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyUHJldmlvdXNWYWx1ZTogc3RyaW5nID0gJyc7XG4gIGdyaWRGaWx0ZXJPYmo6IElHcmlkRmlsdGVySW5mbztcbiAgZGVmYXVsdERhdGU6IGFueTtcbiAgb3ZlcmxheVBhbmVsU3R5bGU6IHt9O1xuICAvLyBIb2xkcyB0aGUgaXRlbXMgdG8gZGlzcGxheSBpbiB0aGUgcGVyLXJvdyBcIk1vcmVcIiBtZW51IChQcmltZU5HIE1lbnUgbW9kZWwpXG4gIGN1cnJlbnRNb3JlTWVudTogTWVudUl0ZW1bXSA9IFtdO1xuICBncmlkZmlsdGVyOiBhbnk7XG4gIGRyb3BEb3duRmlsdGVyOiBhbnkgPSB7fTtcbiAgZHJvcGRvd25JbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlQWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGdlbmVyYXRlUm93c0RhdGFDb3B5OiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdEFsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYW5jZWxBbGxSZWNvcmRzOiBib29sZWFuID0gZmFsc2U7XG4gIGFkZE5ld1Jvd0NoZWNrOiBib29sZWFuID0gZmFsc2U7XG4gIGluRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2F2ZVJlY29yZEFycmF5OiBhbnlbXSA9IFtdO1xuICBkaXNhYmxlZFNhdmVCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VsZWN0ZWRBbGxSb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIENoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlXG4gIHVuQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlXG4gIGVkaXRNb2RlQ2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRNb2RldW5Da2Vja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyRm9ybWF0OiBzdHJpbmcgPSBcIm1tL2RkL3l5XCJcbiAgc2V0RHJvcGRvd25GaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICByZWxvYWRQYWdlOiBTdWJzY3JpcHRpb247XG4gIHNldERyb3Bkb3duZGF0YVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0ZpbHRlcmJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHRvb2dsZVNvcnRPcmRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaWFsb2dSZWY6IGFueVxuICB1c2VyU2V0dGluZzogdXNlclNldHRpbmcgPSB7fTtcbiAgcm93VXBkYXRlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VydmVyU2lkZUV2ZW50SW5pdGFsVHJpZ2dlcmVkID0gbmV3IFN1YmplY3QoKVxuXG4gIC8vYXBwbHkgQWRkL0RlbGV0ZS9FZGl0IHByb3AgZm9yIHRoZSBncmlkIHBlcm1pc3Npb25cbiAgYWRkUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGRlbGV0ZVJvd1Blcm1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xuICBlZGl0Um93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRpbmdDZWxsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvLyBBcHBseSBwcm9wIHNldEFnZ3JlZ2F0ZUZvb3RlciBvbiBGb290ZXIgb2YgdGhlIFRhYmxlIGZvciBhZ2dyZWdhdGUuXG4gIHNldEFnZ3JlZ2F0ZUZvb3Rlcjogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBjbGlja1RpbWVvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IEhpZGUgQWdncmVnYXRlIEZvb3RlciBXaGVuIEFnZ3JlZ2F0ZSBub3QgQXBwbHkgb24gVGFibGUuXG4gIGFnZ3JlZ2F0ZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE1haW50YWlucyBwcmV2aW91cyBzdGF0ZSBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0Um93c1JlY29yZHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgLy8gTWFpbnRhaW5zIHJlY29yZCBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0aW5nUm93S2V5czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBjdXJyZW50VXJsOiBzdHJpbmcgPSBjdXJyZW50VXJsKCk7XG4gIG9uQ2xpY2tFdmVudFRyaWdnZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHJlbWFpbmluZ1Jvd3NEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIEBWaWV3Q2hpbGQoJ2R0JykgdGFibGU6IFRhYmxlO1xuICBAVmlld0NoaWxkKCdtb3JlTWVudScpIG1vcmVNZW51OiBNZW51O1xuXG4gIC8vIFNlbGVjdHMgaXRlbXMgaW4gdGhlIGdyaWQgYmFzZWQgb24gcGFzc2VkIG9uIGRhdGFcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnkgPSBbXTtcblxuICBASW5wdXQoKSBzZXRHcmlkUmVmcmVzaFRpbWU6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgYWRkRGF0YUtleVZhbHVlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc3RvcERpYWxvZ0Nsb3NlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9DaGVja05ld1JvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZ2xvYmFsRGF0YTogSUdyaWRGaWx0ZXJbXSA9IFtdO1xuXG4gIHNvcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNvcnRJY29uSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGVkaXRBbGxyb3dzQXRPbmVUaW1lOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2hvd1JlZnJlc2hCdG46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBwdWJsaWMgaGlkZVJlZnJlc2hCdG46IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFN0b3JlcyBzZWxlY3RlZCBjb2x1bW5zXG4gIHByaXZhdGUgX3NlbGVjdGVkQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuICBzZWxlY3RlZFRvZ2dsZUNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcblxuICB2aXNpYmxlQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgaG9yaXpvbnRhbCBTY3JvbGwgb24gVGFibGUuXG4gIEBJbnB1dCgpIGhvcml6b250YWxTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgZGVsZXRlIHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVEZWxldGVCdG4gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgZWRpdCByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlRWRpdEJ0biA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBhZGQgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZUFkZEJ0biA9IGZhbHNlO1xuXG4gIC8vIFByb3AgdG8gaGFuZGxlIGxvYWRlciBvZiBncmlkXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLy90aGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gaGFuZGxlIHNlcnZlciBzaWRlIGV2ZW50IGJ5IGRlZmF1bHQgaXQgaXMgdHJ1ZSB3aGVuIGl0IGZhbHNlIHNlcnZlciBzaWRlIGV2ZW50IHdpbGwgbm90IGJlIGNhbGxlZFxuICBASW5wdXQoKSBhdXRvTG9hZERhdGE6IGJvb2xlYW4gPSB0cnVlO1xuXG5cbiAgLy90YWJsZSByb3cgc3R5bGVzXG4gIEBJbnB1dCgpIHJvd1N0eWxlOiBzdHJpbmc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGNoZWNrIHdoZXJlIHNlbGVjdGVkIGlzIGFsbG93ZWQgb3Igbm90LlxuICBASW5wdXQoKSBhbGxvd1NlbGVjdGlvbiA9IGZhbHNlO1xuXG4gIC8vIFNldCBjb2x1bW4gd2lkdGggb2Ygc2VsZWN0ZWQgcm93LlxuICBASW5wdXQoKSBzZWxlY3Rpb25Db2x1bW5XaWR0aDogc3RyaW5nID0gJzgwcHgnO1xuXG4gIC8vIHNldCBzZWxlY3Rpb24gY2hlY2tCb3ggaGVhZGVyXG4gIEBJbnB1dCgpIGFsbG93U2VsZWN0aW9uSGVhZGVyOiBzdHJpbmcgPSAnJztcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgc2F2ZSBidXR0b24gb24gdG9wIG9mIGdyaWQuXG4gIEBJbnB1dCgpIGhpZGVHcmlkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBzYXZlIGJ1dHRvbiBvbiB0b3Agb2YgZ3JpZC5cbiAgQElucHV0KCkgaGlkZUdyaWRDYW5jZWxCdXR0b24gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgZXhwb3J0IHRvIHBkZi5cbiAgQElucHV0KCkgYWxsb3dFeHBvcnRUb1BkZiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gZXhjZWwuXG4gIEBJbnB1dCgpIGFsbG93RXhwb3J0VG9FeGNlbCA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBzZXQgdGhlIGFjdGlvbiBjb2x1bW4gYXMgZmlyc3QgY29sdW1uLlxuICBASW5wdXQoKSBzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ID0gZmFsc2U7XG5cbiAgLy8gSWYgdHJ1ZSwgZW5hYmxlcyBvcHRpb25zIHRvIHBlcmZvcm0gQ1JVRCB1c2luZyBpbmxpbmUgcm93IGZ1bmN0aW9uYWxpdHlcbiAgQElucHV0KCkgdXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAvLyBpZiB0cnVlLCBpdCB3b250IGFkZCBhIG5ldyByb3cgd2hlbiBjbGljayBhZGRcbiAgQElucHV0KCkgcHJldmVudE5ld1JvdyA9IGZhbHNlO1xuXG4gIC8vIEFycmF5IG9mIHJvdyBhY3Rpb25zXG4gIEBJbnB1dCgpIHJvd0FjdGlvbnM6IElHcmlkUm93QWN0aW9uW10gPSBbXTtcblxuICAvLyBTZXRzIHNlbGVjdGlvbiB0eXBlIGkuZTogc2luZ2xlL211bHRpcGxlIHNlbGVjdGlvblxuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiBFR3JpZFNlbGVjdGlvblR5cGUgPSBFR3JpZFNlbGVjdGlvblR5cGUuU0lOR0xFO1xuXG4gIC8vIFVuaXF1ZSBrZXkgcmVxdWlyZXMgZm9yIGJ1aWx0LWluIHJvdyBzZWxlY3Rpb24gb2YgcHJpbWVOZyBncmlkXG4gIEBJbnB1dCgpIGRhdGFLZXk6IHN0cmluZyA9ICd0ZW1wX2lkJztcblxuICAvLyBGbGFnIGZvciBjbGVhciBmaWx0ZXIgdmFsdWVzIGJ1dHRvblxuICBASW5wdXQoKSBjbGVhckdyaWRGaWx0ZXIgPSB0cnVlO1xuXG4gIC8vIEZsYWcgZm9yIHNlYXJjaCBmaWx0ZXIgdmFsdWVzIGJ1dHRvblxuICBASW5wdXQoKSBzZWFyY2hHcmlkRmlsdGVyID0gdHJ1ZTtcblxuICAvLyBGbGFnIGluIGNhc2UgdGFibGUgaXMgc2Nyb2xsYWJsZVxuICBASW5wdXQoKSBzY3JvbGxhYmxlID0gdHJ1ZTtcblxuICAvLyBTZXRzIHNjcm9sbCBoZWlnaHQgZm9yIHRoZSB0YWJsZVxuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQgPSAnODB2aCc7XG5cbiAgLy8gVGFibGUgc3R5bGVcbiAgQElucHV0KCkgdGFibGVTdHlsZSA9ICcnO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyB0byB3cmFwIG9yIHVuV3JhcCB0aGUgZ3JpZC5cbiAgQElucHV0KCkgd29yZFdyYXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBlbGxpcHNpczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG5ld0dyaWRSb3c6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpIGZpbHRlcmluZyA9IHRydWU7XG5cbiAgQElucHV0KCkgcmVwb3J0QnV0dG9uczogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXJPcHRpb25zOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBhdXRvQ29tcGxldGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFNldHMgcGFnZW5hdGlvbiBmb3IgdGhlIHRhYmxlIERhdGEuXG4gIEBJbnB1dCgpIHNldFBhZ2luYXRpb25MZW5ndGg6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcblxuICAvLyBzZXQgdGhlIGNoYW5nZSBpbiB0aGUgcm93RGF0YVxuICBAT3V0cHV0KCkgcm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgbG9hZGVyIGFuZCBzZXRzIHRoZSBkYXRhIHRvIGdyaWRcbiAgICogQ2xlYXJzIHRoZSBlZGl0aW5nIHN0YWNrXG4gICAqIFNjcm9sbHMgdG8gc2VsZWN0ZWQgZWxlbWVudCBpZiBzZWxlY3Rpb24gZm91bmRcbiAgICovXG4gIEBJbnB1dCgpIHNldCByb3dzKGRhdGE6IGFueVtdKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5yZW1haW5pbmdSb3dzRGF0YSA9IFtdO1xuICAgIGlmICghdGhpcy5yb3dVcGRhdGVDaGFuZ2UpIHtcbiAgICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGFLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUtleSA9ICd0ZW1wX2lkJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgcm93c0RhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMoZGF0YSwgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsUm93cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm93c0RhdGEpKTtcbiAgICAgICAgICBpZiAoZGF0YT8ubGVuZ3RoID4gNDAgJiYgIXRoaXMuZ3JpZFNlcnZpY2U/LnJvd1VwZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbGl6ZURhdGEgPSBbLi4ucm93c0RhdGFdO1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IGluaXRpYWxpemVEYXRhLnNwbGljZSgwLCA0MCk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtYWluaW5nUm93c0RhdGEgPSByb3dzRGF0YS5zcGxpY2UoNDAsIHJvd3NEYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4/LmFnZ3JlZ2F0ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm93c0RhdGEgPSByb3dzRGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5lZGl0Um93c1JlY29yZHMgPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cyAmJiB0aGlzLmdyaWRSb3c/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudFJlZiA9IHRoaXMuZ3JpZFJvdy5maW5kKFxuICAgICAgICAgICAgICAoeCkgPT4geC5uYXRpdmVFbGVtZW50LmlkID09PSB0aGlzLnNlbGVjdGVkUm93c1t0aGlzLmRhdGFLZXldXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmICYmXG4gICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MVGFibGVSb3dFbGVtZW50XG4gICAgICAgICAgICAgICkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy9tYW5pcHVsYXRlIGNoZWNrYm94IHN0cmluZyB2YWx1ZSB0byB0cnVlIGFuZCBmYWxzZS5cbiAgICAgICAgICB0aGlzLmNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKTtcbiAgICAgICAgICB0aGlzLnNldE51bWVyaWNWYWx1ZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBHbG9iYWwgZmlsdGVyIHNlcnZlciByZXF1ZXN0XG4gIEBJbnB1dCgpIHNldCBnbG9iYWxGaWx0ZXJEYXRhKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSkge1xuICAgIHRoaXMuZ2xvYmFsRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2VcbiAgICAgIC5wcmVwYXJlR2xvYmFsRmlsdGVycyhnbG9iYWxGaWx0ZXJzKVxuICAgICAgPy5maWx0ZXIoKHgpID0+IHg/LnZhbHVlICE9PSBmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5lbmFibGVDbGllbnRTaWRlRmlsdGVyaW5nKSB7XG4gICAgICBjb25zdCBnbG9iYWxTZWFyY2hWYWx1ZSA9IGdsb2JhbEZpbHRlcnM/LmZpbmQoeCA9PiB4LmZpZWxkID09PSAnZ2xvYmFsU2VhcmNoJyk/LnZhbHVlO1xuICAgICAgaWYgKGdsb2JhbFNlYXJjaFZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy50YWJsZSkge1xuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckdsb2JhbChnbG9iYWxTZWFyY2hWYWx1ZSwgJ2NvbnRhaW5zJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzXG4gICAgICA/IHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzLmNvbmNhdCh0aGlzLmdsb2JhbERhdGEpXG4gICAgICA6IHRoaXMuZ2xvYmFsRGF0YTtcblxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbHlGaWx0ZXInKSA9PT0gJ2ZhbHNlJykge1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheT8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmNvbmNhdChbLi4uc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNdKVxuICAgICAgICA6IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5O1xuICAgIH1cbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICd0cnVlJykge1xuICAgICAgZ2xvYmFsRmlsdGVycy5mb3JFYWNoKChnbG9iYWxGaWx0ZXIpID0+IHtcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZm9yRWFjaCgoZmlsdGVyQXJyYXkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWx0ZXJBcnJheS5maWVsZCA9PT0gZ2xvYmFsRmlsdGVyLmZpZWxkICYmXG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWUgJiZcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlICE9PSBnbG9iYWxGaWx0ZXIudmFsdWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlID0gZ2xvYmFsRmlsdGVyLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaW5kZXgpID0+IGluZGV4LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiYgIWdsb2JhbEZpbHRlci52YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGZpbmRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZS8vdGhpcy5hdXRvTG9hZERhdGE7XG4gICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50IHx8IHRoaXMuYXV0b0xvYWREYXRhKSB7XG4gICAgICAgIHRoaXMub25BcHBseUZpbHRlci5lbWl0KCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmNvbmNhdChcbiAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBBcnJheS5mcm9tKFxuICAgICAgICBuZXcgU2V0KFxuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAubWFwKChmaWx0ZXI6IGFueSkgPT4gZmlsdGVyLmZpZWxkKVxuICAgICAgICApXG4gICAgICApLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbmQoKHg6IGFueSkgPT4geC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgfSk7XG4gICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbHRlcihcbiAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgIG9iaj8udmFsdWUgJiYgb2JqLnZhbHVlPy50b1N0cmluZygpPy5sZW5ndGggPiAwICYmIG9iai5maWVsZFxuICAgICAgKTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IHNlcnZlckZpbHRlclZhbHVlcztcbiAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEgPT09IHRydWUpIHtcbiAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgYXMgZmlyc3RcbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRSb3dzICYmIHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5wYWdlU2l6ZSA9IHRoaXMuZGVmYXVsdFJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCkge1xuICAgICAgICAgIHRoaXMuc2V0dXBFbnRlckxpc3RlbmVyKClcbiAgICAgICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnYXBwbHlGaWx0ZXInKTtcbiAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgbnVtYmVyIFVJXG4gICAgICAgIHRoaXMudGFibGUuX2ZpcnN0ID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc2V0dXBFbnRlckxpc3RlbmVyKCkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5oYW5kbGVLZXlVcCk7XG4gIH1cbiAgaGFuZGxlS2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBjb25zdCBmb2N1c2VkRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGZvY3VzZWRFbGVtZW50LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNlbGVjdFJvb3RFbGVtZW50KGZvY3VzZWRFbGVtZW50KS5ibHVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIElucHV0IGRlY29yYXRvciB0byByZWNlaXZlIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkIGluIGhlYWRlclxuICBASW5wdXQoKSBjb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG5cbiAgQElucHV0KCkgcGVybWlzc2lvbnM6IElQZXJtaXNzaW9uW10gPSBbXTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSB0b2dnbGluZyBvZiBjb2x1bW5zXG4gIEBJbnB1dCgpIGFsbG93Q29sdW1uVG9nZ2xlID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoaWRlIGZpbHRlcmluZyBvZiBjb2x1bW5zXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXIgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBsb29rdXAgZmlsdGVyc1xuICBASW5wdXQoKSBsb29rdXBGaWx0ZXJzID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgcGFnaW5hdGlvblxuICBASW5wdXQoKSBwYWdpbmF0aW9uID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgc2hvdyBDdXJyZW50UGFnZSBSZXBvcnRcbiAgQElucHV0KCkgc2hvd0N1cnJlbnRQYWdlUmVwb3J0ID0gZmFsc2U7XG5cbiAgLy8gRGlzcGxheXMgdG90YWwgbnVtYmVyIG9mIHJlY29yZHNcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDtcblxuICAvLyBEaXNwbGF5cyBhZ2dyZWdhdGUgdGhhdCBmZXRjaCBmcm9tIHJlY29yZHNcbiAgQElucHV0KCkgYWdncmVnYXRlZFJlc3VsdDogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSBzaG93Y29uZmlybURpYWxvZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgc2F2ZUFsbERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTZXRzIG51bWJlciBvZiByb3dzIHRvIGJlIHNob3duIHRoZSBncmlkXG4gIEBJbnB1dCgpIGRlZmF1bHRSb3dzOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpIGNvbHVtbkFjdGlvbnM6IElHcmlkQ29sdW1uQWN0aW9uW10gPSBbXTtcblxuICAvLyBEZWNpZGVzIHRoZSBncmlkJ3MgYmVoYXZpb3IgZWl0aGVyIGZvciBjbGllbnQgc2lkZSBvciBzZXJ2ZXIgc2lkZSBldmVudHNcbiAgQElucHV0KCkgdXNlU2VydmVyU2lkZUV2ZW50cyA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVDbGllbnRTaWRlRmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2dsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHNldCBnbG9iYWxGaWx0ZXJGaWVsZHMoZmllbGRzOiBzdHJpbmdbXSkge1xuICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2dsb2JhbEZpbHRlckZpZWxkcyA9IGZpZWxkcy5tYXAoZiA9PiBmLnRvTG93ZXJDYXNlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9nbG9iYWxGaWx0ZXJGaWVsZHMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGdldCBnbG9iYWxGaWx0ZXJGaWVsZHMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9nbG9iYWxGaWx0ZXJGaWVsZHM7XG4gIH1cblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBjbGlja1xuICBAT3V0cHV0KCkgb25Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGVtaXQgd2hlbiBjbGljayBvbiBncmlkIGNoZWNrYm94IGZpbHRlclxuICBAT3V0cHV0KCkgb25DaGVja0JveEZpbHRlckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBDaGVja0JveFxuICBAT3V0cHV0KCkgb25Sb3dDaGVja0JveDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gc29ydCBjaGFuZ2VcbiAgQE91dHB1dCgpIG9uU29ydENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gZmlsdGVyIGNoYW5nZVxuICBAT3V0cHV0KCkgb25GaWx0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBpbnZva2UgdGhlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XG4gIEBPdXRwdXQoKSBvbk11bHRpU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBDYWxscyB3aGVuZXZlciBhIGdyaWQgYW5kIGdsb2JhbEZpbHRlcnMgY2FsbGVkXG4gIEBPdXRwdXQoKSBvbkFwcGx5RmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxuICBAT3V0cHV0KCkgaXNJbmNsdWRlZEFsbENvbHVtbnM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgbGF6eSBldmVudCBpcyBkaXNwYXRjaGVkXG4gIEBPdXRwdXQoKVxuICBvblNlcnZlclNpZGVFdmVudENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU2VydmVyU2lkZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byB0cmlnZ2VyIG9uIHBhZ2luYXRpb25cbiAgQE91dHB1dCgpXG4gIG9uUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkUGFnaW5hdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBlZGl0IHJvd1xuICBAT3V0cHV0KCkgb25Sb3dVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIG9uUm93T3JkZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIGNhbmNlbCBhbGwgcm93c1xuICBAT3V0cHV0KCkgb25DYW5jZWxBbGxSb3dzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGRlbGV0ZSByb3dcbiAgQE91dHB1dCgpIG9uUm93RGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gYWRkIHJvd1xuICBAT3V0cHV0KCkgb25Sb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQsIHVwZGF0ZSBhbmQgZGVsZXRlIHJvd1xuICBAT3V0cHV0KCkgb25HcmlkUm93QWN0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBzZXQgcHJvcGVydHkgYWxsb3dDYWNoaW5nIGZvciBMb2NhbFN0b3JhZ2VcbiAgQElucHV0KCkgYWxsb3dDYWNoaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9zZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbnNcbiAgQElucHV0KCkgYWxsb3dQZXJzaXN0ZW5jZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gc2V0IHByb3BlcnR5IHNvZnRDYWNoaW5nIGZvciBzZXR0aW5nIHRoZSB2YWx1ZXMgb2YgZ3JpZEZpbHRlclxuICBASW5wdXQoKSBzb2Z0Q2FjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGVkaXRBbGxSb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIHNldCB0aGUgcm93IFdoZW4gRWRpdCB0aGUgcm93IG9uIEdyaWRcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gc2V0IHRoZSByb3cgV2hlbiBhZGRpbmcgdGhlIG5ldyBSb3cgb24gR3JpZFxuICBAT3V0cHV0KCkgb25HcmlkUm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgpIGdyaWROYW1lOiBzdHJpbmcgPSAnJztcbiAgaXNHcmlkSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9SZXNpemU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWxsb3dUZXh0Q29weTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgcm93c1BlclBhZ2VPcHRpb25zOiBhbnlbXSA9IFs1LCAxMCwgMTUsIHsgc2hvd0FsbDogJ0FsbCcgfV07XG4gIGN1c3RvbVdpZHRoQ29sdW1uczogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBzZWxlY3RlZFJvd1JlY29yZDogYW55O1xuICBzY3JvbGxQb3NpdGlvblk6IG51bWJlciA9IDA7XG4gIHNjcm9sbFBvc2l0aW9uWDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBTeXN0ZW1Db25maWdTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHB1YmxpYyBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXG4gICAgcHJpdmF0ZSBwYWdlTG9nZ2VyU2VydmljZTogUGFnZUxvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBoeXBlcmxpbmtTZXJ2aWNlOiBIeXBlcmxpbmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwdWJsaWMgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlcXVlc3RTZXJ2aWNlOiBSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcmVmOiBEeW5hbWljRGlhbG9nUmVmXG4gICkgeyB9XG5cbiAgY29uc29sZUxvZyhtZXNzYWdlOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgfVxuXG4gICBtb3VzZUxlYXZlRXZlbnQob3ZlcmxheVBhbmVsKSB7XG4gICAgb3ZlcmxheVBhbmVsLmhpZGUoKTtcbiAgfVxuICBvbkNvbHVtblJlc2l6ZShldmVudDogYW55LCBkdCkge1xuICAgIGlmIChkdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkKSB7XG4gICAgICB0aGlzLmdyaWRJZCA9IGR0LmVsLm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgfVxuICAgIGNvbnN0IG5ld1dpZHRoID0gZXZlbnQuZWxlbWVudC5jbGllbnRXaWR0aCArIDI7XG4gICAgbGV0IGNvbHVtbkhlYWRlciA9IGV2ZW50Py5lbGVtZW50Py5pZD8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoY29sdW1uSGVhZGVyKSB7XG4gICAgICBsZXQgaW5kZXg6IGFueSA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoY29sdW1uKSA9PiBjb2x1bW4uaGVhZGVyPy50b0xvd2VyQ2FzZSgpID09IGNvbHVtbkhlYWRlcik7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBpZiAobmV3V2lkdGgpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1tpbmRleF1bJ2N1c3RvbVdpZHRoJ10gPSBwYXJzZUludChuZXdXaWR0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zYXZlQ29sdW1uV2lkdGhzKCk7XG4gIH1cblxuICBzYXZlQ29sdW1uV2lkdGhzKHRvZ2dsZUNvbHVtbnM6IGFueVtdID0gW10pIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW4uZmllbGQgJiYgY29sdW1uLmN1c3RvbVdpZHRoKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tV2lkdGhDb2x1bW5zW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4uY3VzdG9tV2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGaWVsZHMgPSB0b2dnbGVDb2x1bW5zPy5sZW5ndGggPiAwID8gdG9nZ2xlQ29sdW1ucyA6IHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5tYXAoKHgpID0+IHguZmllbGQpO1xuICAgIHRoaXMuc2V0TXVsdGlTZWxlY3RUb2dnbGVDb2x1bW4oc2VsZWN0ZWRGaWVsZHMpO1xuICB9XG4gIGxvYWRDb2x1bW5XaWR0aHMoKSB7XG4gICAgbGV0IGN1cnJlbnRVc2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpKTtcbiAgICBpZiAoY3VycmVudFVzZXJJbmZvICYmIGN1cnJlbnRVc2VySW5mby5wYWdlU2V0dGluZykge1xuICAgICAgbGV0IHBhZ2VTZXR0aW5ncyA9IEpTT04ucGFyc2UoY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKVxuICAgICAgcGFnZVNldHRpbmdzLnBhZ2VTZXR0aW5ncy5tYXAocGFnZSA9PiB7XG4gICAgICAgIGlmIChwYWdlLnVybCA9PT0gdGhpcy5yb3V0ZXIudXJsKSB7XG4gICAgICAgICAgcGFnZS5ncmlkU2V0dGluZ3MubWFwKGdyaWRTZXR0aW5nID0+IHtcbiAgICAgICAgICAgIGlmIChncmlkU2V0dGluZy5ncmlkSWQgPT09IHRoaXMuZ3JpZElkICYmIGdyaWRTZXR0aW5nPy5jdXN0b21Db2x1bW5zV2lkdGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29sdW1uc1dpZHRoS2V5cyA9IE9iamVjdC5rZXlzKGdyaWRTZXR0aW5nPy5jdXN0b21Db2x1bW5zV2lkdGgpO1xuICAgICAgICAgICAgICBjb2x1bW5zV2lkdGhLZXlzLmZvckVhY2goKGNvbHVtbktleTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KChzZWxlY3RlZENvbHVtbikgPT4gc2VsZWN0ZWRDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbktleT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tpbmRleF1bJ2N1c3RvbVdpZHRoJ10gPSBncmlkU2V0dGluZz8uY3VzdG9tQ29sdW1uc1dpZHRoW2NvbHVtbktleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByb2Nlc3NIb3ZlckRhdGEoaG92ZXJEYXRhOiBhbnksIHJvdzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLmhvdmVyRGF0YT8uZGF0YSB9O1xuICAgICAgY29uc3QgZGF0YUtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICAgIGNvbnN0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgaWYgKGRhdGFLZXlzPy5sZW5ndGggPiAwICYmIHJvd0tleXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGF0YUtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSAmJiB2YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnfScpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoXCJ7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIsIFwiXCIpO1xuICAgICAgICAgICAgbGV0IHJvd0tleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIHZhciBjb3JyZWN0VmFsdWUgPSByb3dbcm93S2V5XTtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IGNvcnJlY3RWYWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hLZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoS2V5ICYmICFkYXRhW2tleV0pIHtcbiAgICAgICAgICAgICAgZGF0YVtrZXldID0gcm93W21hdGNoS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGhvdmVyRGF0YT8uc3R5bGUgPyB0aGlzLm92ZXJsYXlQYW5lbFN0eWxlID0gaG92ZXJEYXRhPy5zdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgIGlmICh0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXIgJiYgaG92ZXJEYXRhPy5jb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmOiBhbnkgPSB0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXI/LmNyZWF0ZUNvbXBvbmVudChob3ZlckRhdGE/LmNvbXBvbmVudCk7XG4gICAgICAgIGlmIChob3ZlckRhdGEuZGF0YSkge1xuICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb25maWcgPSBbXTtcbiAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KGhvdmVyRGF0YTogYW55LCBvdmVybGF5UGFuZWw6IGFueSwgZXZlbnQ6IGFueSwgcm93OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnByb2Nlc3NIb3ZlckRhdGEoaG92ZXJEYXRhLCByb3cpO1xuICAgIG92ZXJsYXlQYW5lbC5zaG93KGV2ZW50KTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZENvbHVtbnMoKTogSUdyaWRDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1ucztcbiAgfVxuXG4gIHNldCBzZWxlY3RlZENvbHVtbnModmFsOiBJR3JpZENvbHVtbltdKSB7XG4gICAgLy8gUmVzcGVjdCBgc2hvd0luTW9yZWA6IGRvIG5vdCBhbGxvdyBzZWxlY3RpbmcgY29sdW1ucyB0aGF0IGFyZSBpbnRlbmRlZCBmb3IgTW9yZSBtZW51XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT5cbiAgICAgICFjb2wuc2hvd0luTW9yZSAmJiB2YWw/LnNvbWUoKHYpID0+IHYuZmllbGQgPT09IGNvbC5maWVsZCAmJiB2LmhlYWRlciA9PT0gY29sLmhlYWRlcilcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuYWxsb3dQZXJzaXN0ZW5jZSAmJiB0aGlzLmFsbG93Q29sdW1uVG9nZ2xlKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5tYXAoKHgpID0+IHguZmllbGQpO1xuICAgICAgdGhpcy5zYXZlQ29sdW1uV2lkdGhzKHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG4gIH1cbiAgLy8gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT4gdmFsLmluY2x1ZGVzKGNvbCkpO1xuICAvLyBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgLy8gICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHZhbC5tYXAoKHgpID0+IHguZmllbGQpO1xuICAvLyAgIHRoaXMuc2F2ZUNvbHVtbldpZHRocyhzZWxlY3RlZEZpZWxkcyk7XG4gIC8vIH1cbiAgLy8gdW5hYmxlIHRvIGFsbG93IHVzZXIgdG8gY29weSB0ZXh0IGZyb20gZ3JpZCB3aGVuIHRoaXMuYWxsb3dUZXh0Q29weSBpcyBzZXQgdG8gZmFsc2UuXG4gIEBIb3N0TGlzdGVuZXIoJ2NvcHknLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdjdXQnLCBbJyRldmVudCddKVxuICBoYW5kbGVDb3B5T3JDdXQoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnkgPSB3aW5kb3c/LmdldFNlbGVjdGlvbigpPy50b1N0cmluZygpIHx8ICcnO1xuICAgIGNvbnN0IGlzTXVsdGlDZWxsU2VsZWN0aW9uID0gc2VsZWN0aW9uLnNwbGl0KC9bXFxuXFx0XSsvKT8uZmlsdGVyKCh4KSA9PiB4ICE9PSAnJyk7XG5cbiAgICBpZiAoIXRoaXMuYWxsb3dUZXh0Q29weSAmJiBpc011bHRpQ2VsbFNlbGVjdGlvbj8ubGVuZ3RoID4gMSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pIG9uQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZWRpdEFsbFJvd3MgJiYgIXRoaXMuaW5FZGl0TW9kZSAmJiB0aGlzLnNlbGVjdGVkUm93UmVjb3JkKSB7XG4gICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJyb3dzZXIgY2xvc2UgZXZlbnRcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmRpc3BsYXlMZWF2ZVdhcm5pbmcgJiYgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ25tZW50IG9mIHNlbGVjdGVkIGNvbHVtbnMgb24gcGFnZSBsb2FkXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmluY3JlbWVudENhbGxzKCk7XG4gICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuZ2V0TnVtYmVyT2ZDYWxscygpID09PSAxKSB7XG4gICAgICB0aGlzLnNlYXJjaGJ0bklkID0gJ3NlYXJjaEdsb2JhbEZpbHRlckJ0bic7XG4gICAgICBpZiAodGhpcy50YWJsZSlcbiAgICAgICAgdGhpcy50YWJsZS5pZCA9ICdHcmlkQ29tcG9uZW50VGFibGUtJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hidG5JZCA9IGBGaWx0ZXJfJHtjdXJyZW50VXJsKCl9XyR7dGhpcy5ncmlkU2VydmljZS5nZXROdW1iZXJPZkNhbGxzKCl9YDtcbiAgICAgIGlmICh0aGlzLnRhYmxlKVxuICAgICAgICB0aGlzLnRhYmxlLmlkID0gJ0dyaWRDb21wb25lbnRfJyArIHRoaXMuZ3JpZFNlcnZpY2UuZ2V0TnVtYmVyT2ZDYWxscygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVmcmVzaEdyaWQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vblJvd1VwZGF0ZT8ub2JzZXJ2ZXJzPy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5oaWRlRWRpdEJ0biA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRpdEFsbFJvd3MgJiYgdGhpcy5vblJvd0RlbGV0ZS5vYnNlcnZlcnMubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnRuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgfSk7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLnNldE51bWVyaWNWYWx1ZXMoKTtcbiAgICAvLyB9LCA1MDApO1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgaWYgKHRoaXMucm93c0NoYW5nZS5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgIC8vICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9LCAyMDAwKTtcbiAgfVxuICAvLyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gIC8vICAgb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgLy8gICAgIHRoaXMuY2hlY2tsaXN0ID0gcmVzcG9uc2U7XG4gIC8vICAgfSlcbiAgLy8gICAvLyB0aGlzLmFkZER5bmFtaWNQYW5lbE92ZXJsYXlDb21wb25lbnQoKVxuICAvLyAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAvLyAgIGNvbnN0IGxvb2t1cE1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxvb2t1cC1tb2RlbCcpO1xuICAvLyAgIGlmIChsb29rdXBNb2RhbCkge1xuICAvLyAgICAgY29uc3QgZm9ybUNvbnRhaW5lciA9IGxvb2t1cE1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy5mb3JtLWNvbnRhaW5lcicpOyBcbiAgLy8gICAgIGlmICghZm9ybUNvbnRhaW5lcikge1xuICAvLyAgICAgdGhpcy5zZXRGb2N1c091dFRvZmlsdGVycyhsb29rdXBNb2RhbCk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyAgIGVsc2V7XG4gIC8vICAgICB0aGlzLnNldEZvY3VzT3V0VG9maWx0ZXJzKCk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMuaXNBcGlFcnJvck9jY3VyZWQoKTtcbiAgLy8gICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gIC8vICAgICBjb25zdCBrZXkgPSB0aGlzLnRhYmxlPy5pZCArIHRoaXMuY3VycmVudFVybDtcbiAgLy8gICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc29mdENhY2hpbmdcbiAgLy8gICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1trZXldXG4gIC8vICAgICAgIDogSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsga2V5KSB8fCAnbnVsbCcpO1xuICAvLyAgICAgaWYgKCFjYWNoZWQ/LmZpbHRlcnM/Lmxlbmd0aCkgcmV0dXJuO1xuICAvLyAgICAgaWYgKHRoaXMudXNlU2VydmVyU2lkZUV2ZW50cykge1xuICAvLyAgICAgICB0aGlzLnRhYmxlICYmICh0aGlzLnRhYmxlLl9maXJzdCA9IDApO1xuICAvLyAgICAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoY2FjaGVkKTtcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGNhY2hlZC5maWx0ZXJzLmZvckVhY2goKGY6IGFueSkgPT4gdGhpcy50YWJsZT8uZmlsdGVyPy4oZi52YWx1ZSwgZi5maWVsZCwgZi5tYXRjaE1vZGUgfHwgJ3N0YXJ0c1dpdGgnKSk7XG4gIC8vICAgICB9XG4gIC8vICAgfSk7XG4gIC8vIH1cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIG9uR2xvYmFsRmlsdGVyQ29udHJvbFJpZ2h0QnRuU3RhdGVDaGFuZ2UoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IHJlc3BvbnNlO1xuICAgIH0pXG4gICAgLy8gdGhpcy5hZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KClcbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICBjb25zdCBsb29rdXBNb2RhbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sb29rdXAtbW9kZWwnKTtcbiAgICBpZiAobG9va3VwTW9kYWwpIHtcbiAgICAgIGNvbnN0IGZvcm1Db250YWluZXIgPSBsb29rdXBNb2RhbC5xdWVyeVNlbGVjdG9yKCcuZm9ybS1jb250YWluZXInKTtcbiAgICAgIGlmICghZm9ybUNvbnRhaW5lcikge1xuICAgICAgICB0aGlzLnNldEZvY3VzT3V0VG9maWx0ZXJzKGxvb2t1cE1vZGFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNldEZvY3VzT3V0VG9maWx0ZXJzKCk7XG4gICAgfVxuICAgIHRoaXMuaXNBcGlFcnJvck9jY3VyZWQoKTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLnRhYmxlPy5pZCArIHRoaXMuY3VycmVudFVybDtcbiAgICAgIGlmICghdGhpcy5hbGxvd0NhY2hpbmcgJiYgIXRoaXMuc29mdENhY2hpbmcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIGtleSk7XG4gICAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1trZXldKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFsbG93Q2FjaGluZyB8fCB0aGlzLnNvZnRDYWNoaW5nKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc29mdENhY2hpbmdcbiAgICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW2tleV1cbiAgICAgICAgICA6IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIGtleSkgfHwgJ251bGwnKTtcblxuICAgICAgICBpZiAoY2FjaGVkPy5maWx0ZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICBjYWNoZWQuZmlsdGVycy5mb3JFYWNoKChmOiBhbnkpID0+IHRoaXMudGFibGU/LmZpbHRlcj8uKGYudmFsdWUsIGYuZmllbGQsIGYubWF0Y2hNb2RlIHx8ICdzdGFydHNXaXRoJykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBjb25zdCB0ZXh0YXJlYXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCcucHJpbWUtdGV4dGFyZWEnKTtcbiAgICB0ZXh0YXJlYXMuZm9yRWFjaCh0ID0+IHRoaXMuYXV0b0dyb3codCkpO1xuICB9XG5cbiAgaXNBcGlFcnJvck9jY3VyZWQoKSB7XG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZS5pc0Vycm9yT2NjdXJlZCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgaWYgKHRoaXMudGVtcFNhdmVkUm93Py5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuZWRpdEFsbFJvd3MpIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1t0aGlzLnJvd3NEYXRhW3RoaXMudGVtcFNhdmVkUm93WzBdXVt0aGlzLmRhdGFLZXldXSA9IHJlcztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBzZXRGb2N1c091dFRvZmlsdGVycyhsb29rdXBNb2RhbD8pIHtcbiAgICBsZXQgZmlsdGVycyA9IDgwMDtcbiAgICBsZXQgZmlsdGVyOiBTdWJzY3JpcHRpb24gPSBpbnRlcnZhbChmaWx0ZXJzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgZmlsdGVycyA9IDA7XG4gICAgICBmaWx0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuY29sdW1ucz8uZmluZCgoY29sdW1uKSA9PiAhdGhpcy5oaWRlRmlsdGVyICYmICFjb2x1bW4/LmhpZGRlbiAmJiBjb2x1bW4/LmZpbHRlciAmJiAoY29sdW1uPy5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uPy5maWx0ZXJpbmcgPT09IHVuZGVmaW5lZCkpO1xuICAgICAgY29uc3QgZmlsdGVyRmllbGQ6IGFueSA9IGxvb2t1cE1vZGFsPy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZpbHRlckNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgY29uc3QgZmlsdGVyRmllbGRzOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZpbHRlckNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGZpbHRlckZpZWxkIHx8IGZpbHRlckZpZWxkcykge1xuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICBpZiAoYWN0aXZlICYmIGFjdGl2ZSAhPT0gZG9jdW1lbnQuYm9keSAmJiAoWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXS5pbmNsdWRlcyhhY3RpdmUudGFnTmFtZSkgfHwgKGFjdGl2ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGFjdGl2ZS5pc0NvbnRlbnRFZGl0YWJsZSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmVsPy5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCdbZGF0YS1mb2N1cy1kZWNsaW5lZD1cInRydWVcIl0nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlsdGVyRmllbGQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpbHRlckZpZWxkWzBdPy5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpbHRlckZpZWxkc1swXT8uZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKCk7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yZXNldENhbGxzKCk7XG4gIH1cblxuICAvLyBzZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbiAvL1xuICBzZXRNdWx0aVNlbGVjdFRvZ2dsZUNvbHVtbihzZWxlY3RlZEZpZWxkczogYW55W10gPSBbXSkge1xuICAgIGlmICh0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoVXJsID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzPy5maW5kSW5kZXgoKHBhZ2UpID0+IHBhZ2U/LnVybCA9PT0gdGhpcy5yb3V0ZXIudXJsKVxuICAgICAgaWYgKG1hdGNoVXJsID4gLTEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hHcmlkID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kSW5kZXgoKGdyaWRTZXR0aW5nKSA9PiBncmlkU2V0dGluZz8uZ3JpZElkID09PSB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCk7XG4gICAgICAgIGlmIChtYXRjaEdyaWQgPiAtMSkge1xuICAgICAgICAgIHRoaXMudXNlclNldHRpbmc/LnBhZ2VTZXR0aW5nc1ttYXRjaFVybF0/LmdyaWRTZXR0aW5ncy5zcGxpY2UobWF0Y2hHcmlkLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRncmlkU2V0dGluZ3Moc2VsZWN0ZWRGaWVsZHMsIG1hdGNoVXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MgPSBbXTtcbiAgICAgIHRoaXMuc2V0Z3JpZFNldHRpbmdzKHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZWxlY3RlZENvbEZyb21Mb2NhbFN0cm9yYWdlKHNlbGVjdGVkQ29sdW1uKSB7XG4gICAgbGV0IGFyciA9IFtdO1xuICAgIGlmIChzZWxlY3RlZENvbHVtbiAmJiBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXRjaFVybCA9IHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3M/LmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZT8udXJsID09PSB0aGlzLnJvdXRlci51cmwpXG4gICAgICBpZiAobWF0Y2hVcmwgPiAtMSkge1xuICAgICAgICBjb25zdCBtYXRjaEdyaWQgPSBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kKChncmlkU2V0dGluZykgPT4gZ3JpZFNldHRpbmc/LmdyaWRJZCA9PT0gdGhpcy5ncmlkSWQpO1xuICAgICAgICBpZiAobWF0Y2hHcmlkICYmIG1hdGNoR3JpZC5zZWxlY3RlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAobWF0Y2hHcmlkLnNlbGVjdGVkQ29sdW1ucy5zb21lKChmaWVsZE5hbWUpID0+IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgYXJyLnB1c2goY29sdW1uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFycj8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHNldGdyaWRTZXR0aW5ncyhzZWxlY3RlZEZpZWxkczogYW55LCBtYXRjaFVybD86IGFueSkge1xuICAgIGlmIChzZWxlY3RlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgZ3JpZFNldHRpbmdzOiBhbnlbXSA9IFtdO1xuICAgICAgZ3JpZFNldHRpbmdzLnB1c2goe1xuICAgICAgICBncmlkSWQ6IHRoaXMuZ3JpZElkLFxuICAgICAgICBzZWxlY3RlZENvbHVtbnM6IHNlbGVjdGVkRmllbGRzLFxuICAgICAgICBjdXN0b21Db2x1bW5zV2lkdGg6IHRoaXMuY3VzdG9tV2lkdGhDb2x1bW5zLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHBhZ2VTZXR0aW5nID0ge1xuICAgICAgICB1cmw6IHRoaXMucm91dGVyLnVybCxcbiAgICAgICAgZ3JpZFNldHRpbmdzOiBncmlkU2V0dGluZ3MsXG4gICAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpXG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJTZXR0aW5nLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKTtcbiAgICAgIGlmIChtYXRjaFVybCA+IC0xKSB7XG4gICAgICAgIHRoaXMudXNlclNldHRpbmcucGFnZVNldHRpbmdzW21hdGNoVXJsXSA9IHBhZ2VTZXR0aW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MucHVzaChwYWdlU2V0dGluZyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IEpTT04uc3RyaW5naWZ5KHRoaXMudXNlclNldHRpbmcpO1xuICAgICAgY2hhbmdlQ29sdW1uc1N0YXRlKHsgcGFnZVNldHRpbmc6IHBhZ2VJbmZvIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcbiAgYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcblxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSUdyaWRDb2x1bW4pID0+IHtcbiAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBJUGVybWlzc2lvbltdID0gY29sdW1uLnBlcm1pc3Npb25zO1xuICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnJvbGVzICYmIHBlcm1pc3Npb24ucm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRvdGFsRmllbGRzKys7XG4gICAgICAgIGlmIChjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgaGlkZGVuRmllbGRzKys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzQ29sdW1uSGlkZGVuID0gdG90YWxGaWVsZHMgPiAwICYmIHRvdGFsRmllbGRzID09PSBoaWRkZW5GaWVsZHM7XG4gICAgfVxuICB9XG5cbiAgLy8gYXBwbHkgZ2xvYmFsIHBlcm1pc3Npb25zIG9uIGVudGlyZSBncmlkXG4gIGFwcGx5R3JpZFBlcm1pc3Npb25zKCkge1xuICAgIGlmICh0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgICAgLy8gY2hlY2sgaWYgYW55IGNvbHVtbiBoYXMgYW55IHBlcm1pc3Npb25cbiAgICAgIGxldCBoYXNDb2x1bW5QZXJtaXNzaW9ucyA9IHRoaXMuY29sdW1ucz8uc29tZShcbiAgICAgICAgKHgpID0+IHg/LnBlcm1pc3Npb25zICYmIHgucGVybWlzc2lvbnMubGVuZ3RoID4gMFxuICAgICAgKTtcblxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQ1JVRCAmJiAhaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSB0cnVlO1xuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiAhaGFzQ29sdW1uUGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNHcmlkSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVkaXRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuREVMRVRFICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQUREUk9XICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblJvd0FkZC5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2U6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmdSb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YSwgLi4udGhpcy5yZW1haW5pbmdSb3dzRGF0YV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgJiYgIXRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlKSB7XG4gICAgICB0aGlzLnNldEdyaWRJZCgpXG4gICAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICAgIGxldCBnZXRTZWxlY3RlZENvbCA9IFtdXG4gICAgICBpZiAodGhpcy5hbGxvd0NhY2hpbmcgIT09IGZhbHNlICYmIHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLmFsbG93Q2FjaGluZyA9IHRoaXMucGFnaW5hdGlvbjtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZCBkZWZhdWx0Um93IGluIHBhZ2luYXRpb24gYXJyYXlcbiAgICAgIGlmICghdGhpcy5zZXRQYWdpbmF0aW9uTGVuZ3RoLmluY2x1ZGVzKHRoaXMuZGVmYXVsdFJvd3MpKSB7XG4gICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC51bnNoaWZ0KHRoaXMuZGVmYXVsdFJvd3MpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzQ29sdW1uczogYm9vbGVhbiA9IHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMDtcbiAgICAgIGlmIChoYXNDb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmllbGRzKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUb2dnbGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKHgpID0+ICF4LmhpZGRlbiAmJiAheC5zaG93SW5Nb3JlKTtcbiAgICAgICAgY29uc3QgY3VycmVudFVzZXJJbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ3VycmVudFVzZXJJbmZvJykpO1xuICAgICAgICAvL3NldCBnZXRTZWxlY3RlZENvbCBjb2x1bW5zIGZvciB0b2dnbGVDb3VsbW4gXG4gICAgICAgIGlmICh0aGlzLmFsbG93UGVyc2lzdGVuY2UgJiYgdGhpcy5hbGxvd0NvbHVtblRvZ2dsZSkge1xuICAgICAgICAgIGlmIChjdXJyZW50VXNlckluZm8gJiYgY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKSB7XG4gICAgICAgICAgICBnZXRTZWxlY3RlZENvbCA9IHRoaXMuZ2V0U2VsZWN0ZWRDb2xGcm9tTG9jYWxTdHJvcmFnZShKU09OLnBhcnNlKGN1cnJlbnRVc2VySW5mby5wYWdlU2V0dGluZykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvbGVzID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUm9sZXMoKTtcblxuICAgICAgICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZ3JpZCBjb2x1bW5zXG4gICAgICAgIHRoaXMuYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKTtcblxuICAgICAgICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcbiAgICAgICAgdGhpcy5hcHBseUdyaWRQZXJtaXNzaW9ucygpO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeCkgPT4gKHguc2hvdyA9PT0gdHJ1ZSB8fCB4LnNob3cgPT09IHVuZGVmaW5lZCkgJiYgIXguaGlkZGVuICYmICF4LnNob3dJbk1vcmUpO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgLy9sb2FkIGNvbHVtbiB3aXRkdGggb24gcGFnZSByZWxvYWRcbiAgICAgICAgdGhpcy5sb2FkQ29sdW1uV2lkdGhzKCk7XG4gICAgICAgIGlmICh0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnNldFRvb2x0aXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNraW5nIGZpbHRlciBleGlzdCBvciBub3RcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnNvbWUoXG4gICAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLmhpZGVGaWx0ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWx0ZXJGb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBzZXQgaXNSZXF1aXJlZCB0cnVlIGZvciByZXF1aXJlZCBjb2x1bW4gdG8gc2hvdyBhc3RyaWMgaW4gY29sdW1uIGhlYWRlclxuICAgICAgICAgIGlmIChjb2x1bW4udmFsaWRhdGlvbnM/LmZpbmQodmFsaWRhdGlvbiA9PiB2YWxpZGF0aW9uLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUkVRVUlSRUQpKSB7XG4gICAgICAgICAgICBjb2x1bW4uaXNSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBudW1lcmljIG51bGwgb3IgdW5kZWZpbmUgZGF0YSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgaWYgKChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMgfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuVEVYVCB8fCBjb2x1bW4udHlwZSA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSB8fCBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSAmJiBjb2x1bW4udmFsdWUgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi52YWx1ZSAmJiAocm93W2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy52YWx1ZSA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy52YWx1ZSA6IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9zZXQgdGV4dFR5cGUgZm9yIGEgY29sdW1uIHRoYXQgaXMgZm9ybWF0dGVkIHRvIGJlIGEgcGFzc3dvcmRcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdCA9PSAncGFzc3dvcmQnICYmICghY29sdW1uLnRleHRUeXBlIHx8IGNvbHVtbi50ZXh0VHlwZSAhPT0gJ3RleHQnKSkge1xuICAgICAgICAgICAgY29sdW1uLnRleHRUeXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgICAgICB9IGVsc2UgY29sdW1uLnRleHRUeXBlID0gJ3RleHQnO1xuICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRpbWUgaW50byB0aGUgZGF0ZVxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykgfHxcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi5taW51dGVzSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdzdHJpbmcnICYmICFyb3dbY29sdW1uLmZpZWxkXS5pbmNsdWRlcygnVCcpKSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHJvd1tjb2x1bW4uZmllbGRdIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmhpZGVGaWx0ZXIgJiYgY29sdW1uLmZpbHRlclZhbHVlICYmIGNvbHVtbi5maWx0ZXIgJiYgY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIHNldCBmaWx0ZXIgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uKTtcbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlGaWVsZFZhbHVlKGNvbHVtbik7XG5cbiAgICAgICAgICAvL0FnZ3JlZ2F0ZSBzY2VuYXJpb1xuICAgICAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XG4gICAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMudGFibGU/LmlkKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMudGFibGU/LmlkICsgdGhpcy5jdXJyZW50VXJsKSBhcyBhbnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRhYmxlPy5pZCkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMudGFibGU/LmlkICsgdGhpcy5jdXJyZW50VXJsXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuaGlkZUZpbHRlciAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHguZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiB4LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oeC52YWx1ZSwgJ01NLWRkLXl5eXknKTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QgJiYgIUFycmF5LmlzQXJyYXkoeC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IHgudmFsdWU/LnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVfb2JqJykgPyBjb2x1bW5bJ2ZpbHRlclZhbHVlX29iaiddPy50ZXh0IDogeC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb252ZXJ0aW5nIGRpc3BsYXlGaWVsZCB0b0xvd2VyY2FzZVxuICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZXQgQXV0b0NvbXBsZXRlIERhdGFcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGhhdCBjb250YWlucyBjb21tYSBpbnRvIGFycmF5c1xuICAgICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJzsnKSkge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICAgID8ubWFwKCh2YWx1ZTogYW55KSA9PiAoeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KS5maW5kKCh4KSA9PiB4ID09PSBjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgc2ltcGxlIHN0cmluZyBpbnRvIGFycmF5XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dba2V5XSkgJiYgcm93W2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldIH1dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm9wdGlvbkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldLCBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vd2hlbiB3ZSBhZGQgYSBuZXcgcm93LCBpdCBzZXQgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICBpZiAoY29sdW1uLnZhbHVlKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXModGhpcy5uZXdHcmlkUm93KS5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgICB0aGlzLm5ld0dyaWRSb3dbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSB7XG4gICAgICAgICAgICB0aGlzLnNldExpbmtUYWJTZXR0aW5ncyhjb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dQZXJzaXN0ZW5jZSAmJiBnZXRTZWxlY3RlZENvbD8ubGVuZ3RoID4gMCAmJiB0aGlzLmFsbG93Q29sdW1uVG9nZ2xlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RDb2x1bW5zKGdldFNlbGVjdGVkQ29sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnbG9iYWxGaWx0ZXJCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNlYXJjaGJ0bklkKTtcbiAgICAgICAgaWYgKGdsb2JhbEZpbHRlckJ0bikge1xuICAgICAgICAgIHRoaXMuc2hvd0ZpbHRlcmJ0biA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZS5yb3dzKSB7XG4gICAgICAgICAgY29uc3QgY2xhc3NFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGlnaGxpZ2h0ZWQtcm93Jyk7XG4gICAgICAgICAgaWYgKGNsYXNzRWxlbWVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbGFzc0VsZW1lbnRbMF0uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEodGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZWRpdEFsbFJvd3MpICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc29ydEljb25IaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ3VzdG9tU29ydGluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUgPSB0cnVlO1xuICAgICAgY29uc3QgZ2xvYmFsU2VhcmNoYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dsb2JhbFNlYXJjaGJ0bicpO1xuICAgICAgaWYgKGdsb2JhbFNlYXJjaGJ0bikge1xuICAgICAgICB0aGlzLnNlYXJjaEdyaWRGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkpIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucm93c0RhdGEpKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5zdG9wRGlhbG9nQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0Um93Q2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuXG4gIH1cblxuICBoYW5kbGVDdXN0b21Tb3J0aW5nKCkge1xuICAgIHRoaXMuUGFnZUNoYW5nZSA9IGZhbHNlO1xuICAgIC8vIFNvcnQgYnkgZXZlcnkgYWN0aXZlIGNvbHVtbiBpbiBwcmlvcml0eSBvcmRlciwgZmFsbGluZyBiYWNrIHRvIHRoZSBzaW5nbGUgc29ydERhdGEuXG4gICAgY29uc3Qgc29ydExpc3Q6IElHcmlkU29ydFtdID0gKHRoaXMubXVsdGlTb3J0RGF0YSAmJiB0aGlzLm11bHRpU29ydERhdGEubGVuZ3RoKVxuICAgICAgPyB0aGlzLm11bHRpU29ydERhdGFcbiAgICAgIDogKHRoaXMuc29ydERhdGEgJiYgdGhpcy5zb3J0RGF0YS5maWVsZCA/IFt0aGlzLnNvcnREYXRhXSA6IFtdKTtcbiAgICBpZiAoIXNvcnRMaXN0Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKHZhbDogYW55KSA9PlxuICAgICAgdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcodmFsKS50cmltKCk7XG5cbiAgICAvLyBDb21wYXJlcyB0d28gcm93cyBieSBhIHNpbmdsZSBjb2x1bW47IGVtcHRpZXMgc29ydCBmaXJzdCBhbmQgbnVtZXJpYyB2YWx1ZXMgY29tcGFyZSBhcyBudW1iZXJzLlxuICAgIGNvbnN0IGNvbXBhcmVCeUZpZWxkID0gKGE6IGFueSwgYjogYW55LCBmaWVsZDogc3RyaW5nLCBkaXJlY3Rpb246IEVHcmlkU29ydERpcmVjdGlvbik6IG51bWJlciA9PiB7XG4gICAgICBjb25zdCBBU0MgPSBkaXJlY3Rpb24gPT09IEVHcmlkU29ydERpcmVjdGlvbi5BU0M7XG4gICAgICBjb25zdCBhVmFsID0gbm9ybWFsaXplKGFbZmllbGRdKTtcbiAgICAgIGNvbnN0IGJWYWwgPSBub3JtYWxpemUoYltmaWVsZF0pO1xuXG4gICAgICBjb25zdCBhRW1wdHkgPSBhVmFsID09PSAnJztcbiAgICAgIGNvbnN0IGJFbXB0eSA9IGJWYWwgPT09ICcnO1xuXG4gICAgICBpZiAoYUVtcHR5ICYmIGJFbXB0eSkgcmV0dXJuIDA7XG4gICAgICBpZiAoYUVtcHR5KSByZXR1cm4gQVNDID8gLTEgOiAxO1xuICAgICAgaWYgKGJFbXB0eSkgcmV0dXJuIEFTQyA/IDEgOiAtMTtcblxuICAgICAgY29uc3QgYU51bSA9IHBhcnNlRmxvYXQoYVZhbCk7XG4gICAgICBjb25zdCBiTnVtID0gcGFyc2VGbG9hdChiVmFsKTtcbiAgICAgIGlmICghaXNOYU4oYU51bSkgJiYgIWlzTmFOKGJOdW0pKSByZXR1cm4gQVNDID8gYU51bSAtIGJOdW0gOiBiTnVtIC0gYU51bTtcblxuICAgICAgcmV0dXJuIEFTQyA/IGFWYWwubG9jYWxlQ29tcGFyZShiVmFsKSA6IGJWYWwubG9jYWxlQ29tcGFyZShhVmFsKTtcbiAgICB9O1xuXG4gICAgLy8gV2FsayB0aGUgY29sdW1ucyBpbiBvcmRlcjsgdGhlIGZpcnN0IHRoYXQgc2VwYXJhdGVzIHRoZSB0d28gcm93cyBkZWNpZGVzLCBzbyBsYXRlciBjb2x1bW5zXG4gICAgLy8gb25seSBicmVhayB0aWVzIGxlZnQgYnkgdGhlIGVhcmxpZXIgb25lcyDigJQgdGhhdCBpcyB3aGF0IG1ha2VzIHRoZSBzZWNvbmRhcnkgc29ydCB0YWtlIGVmZmVjdC5cbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4udGhpcy5yb3dzRGF0YV0uc29ydCgoYSwgYikgPT4ge1xuICAgICAgZm9yIChjb25zdCBzb3J0IG9mIHNvcnRMaXN0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBhcmVCeUZpZWxkKGEsIGIsIHNvcnQuZmllbGQsIHNvcnQuZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gMCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yb3dzRGF0YSA9IHNvcnRlZDtcbiAgICB0aGlzLnRhYmxlLnNvcnRGaWVsZCA9IHNvcnRMaXN0WzBdLmZpZWxkO1xuICAgIHRoaXMudGFibGUuc29ydE9yZGVyID0gc29ydExpc3RbMF0uZGlyZWN0aW9uID09PSBFR3JpZFNvcnREaXJlY3Rpb24uQVNDID8gMSA6IC0xO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNldExpbmtUYWJTZXR0aW5ncyhjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgY29uc3QgdXNlclNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJTZXR0aW5nXCIpO1xuICAgIGlmICh1c2VyU2V0dGluZykge1xuICAgICAgY29uc3QgcGFyc2VkU2V0dGluZyA9IEpTT04ucGFyc2UodXNlclNldHRpbmcpO1xuICAgICAgaWYgKGNvbHVtbj8udGFyZ2V0VXNlVXNlclByZWYpIHtcbiAgICAgICAgY29sdW1uLnRhcmdldCA9IHBhcnNlZFNldHRpbmc/LnZhbHVlID09PSBcIm9wZW5MaW5rSW5DdXJyZW50VGFiXCIgPyBFR3JpZGxpbmsuU0VMRiA6IEVHcmlkbGluay5CTEFOSztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRHcmlkSWQoKSB7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCB0YWJsZXMgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdwLXRhYmxlJyk7XG4gICAgaWYgKHRhYmxlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGFibGVzLmZvckVhY2goKHRhYmxlLCBpbmRleCkgPT4ge1xuICAgICAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy5jdXJyZW50VXJsICsgY291bnRlcisrKTtcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIHNldFNlbGVjdENvbHVtbnMoY29sdW1ucykge1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IFtdO1xuICAgIGNvbHVtbnM/LmZvckVhY2goKHgsIGkpID0+IHtcbiAgICAgIGlmICgoeC5zaG93ID09PSB0cnVlIHx8IHguc2hvdyA9PT0gdW5kZWZpbmVkKSAmJiAheC5oaWRkZW4gJiYgIXguc2hvd0luTW9yZSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnNbaV0pIHtcbiAgICAgICAgICB4LnZhbHVlID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbaV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnB1c2goeCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhdXRvQ29tcGxldGVTZWxlY3RlZFZhbHVlKHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCB2YWx1ZSkge1xuICAgIGlmIChjb2x1bW4ub3B0aW9uTGFiZWwpIHtcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gY29sdW1uLm9wdGlvblZhbHVlID8gY29sdW1uLm9wdGlvblZhbHVlIDogY29sdW1uLmZpZWxkO1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbLi4ucm93W2NvbHVtbi5maWVsZF0sIHtcbiAgICAgICAgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV0sIFt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXSxcbiAgICAgICAgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXVxuICAgICAgfV07XG4gICAgICBjb25zdCBpbmRleCA9IHJvd1tjb2x1bW4uZmllbGRdPy5maW5kSW5kZXgoKHgpID0+IEpTT04uc3RyaW5naWZ5KHgpID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgdGhpcy5yb3dzRGF0YT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICBFR3JpZENvbHVtblR5cGUuRElBTE9HIHx8XG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5JRlJBTUVcbiAgICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddO1xuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlUZXh0ICYmIGNvbHVtbi5kaXNwbGF5VGV4dC5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgY29uc3QgZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKTtcbiAgICAgICAgICBpZiAoZGlzcGxheVRleHQgJiYgZmllbGQpIHtcbiAgICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gcm93W2Rpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgZmllbGQpIHtcbiAgICAgICAgICBmaWVsZC5kaXNwbGF5VGV4dCA9IGNvbHVtbi5kaXNwbGF5VGV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGlzcGxheUZpZWxkVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddO1xuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZCA9IGNvbHVtbi5kaXNwbGF5RmllbGQ7XG4gICAgICAgICAgaWYgKGRpc3BsYXlGaWVsZCAmJiBmaWVsZCkge1xuICAgICAgICAgICAgZmllbGQuZGlzcGxheUZpZWxkID0gcm93W2Rpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkICYmIGZpZWxkKSB7XG4gICAgICAgICAgZmllbGQuZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25UZXh0YXJlYUJsdXIoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBjb25zdCBpZCA9IGNvbHVtbi5maWVsZCArICctJyArIHJvd1t0aGlzLmRhdGFLZXldO1xuICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgdGV4dGFyZWFbZGF0YS1jZWxsPVwiJHtpZH1cIl1gKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuXG4gICAgaWYgKHRleHRhcmVhKSB7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgIHRleHRhcmVhLnN0eWxlLndpZHRoID0gJyc7XG4gICAgfVxuICAgIHRoaXMuZWRpdGluZ0NlbGwgPSBudWxsO1xuICAgIHRoaXMub25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIG9uVGV4dGFyZWFFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQuY3RybEtleSAmJiBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm9uVGV4dGFyZWFCbHVyKGNvbHVtbiwgcm93KTtcbiAgICB9XG4gIH1cbiAgb25JbnB1dEZvY3VzKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgaWYgKHRoaXMuZWRpdGluZ0NlbGwgJiYgIXRoaXMuZWRpdGluZ0NlbGwuc3RhcnRzV2l0aChjb2x1bW4uZmllbGQpKSB7XG4gICAgICB0aGlzLmVkaXRpbmdDZWxsID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgc2V0TnVtZXJpY01pbkZyYWN0aW9uKGNvbHVtbjogYW55KSB7XG4gICAgbGV0IG1pbkZyYWN0aW9uRGlnaXRzID0gMjtcbiAgICBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50JyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8ubWluRnJhY3Rpb25EaWdpdHMgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/Lm1pbkZyYWN0aW9uRGlnaXRzICE9IG51bGwpIHtcbiAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubWluRnJhY3Rpb25EaWdpdHM7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IE51bWJlcihjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvKTtcbiAgICB9XG4gICAgcmV0dXJuIG1pbkZyYWN0aW9uRGlnaXRzO1xuICB9XG5cbiAgc2V0TnVtZXJpY01heEZyYWN0aW9uKGNvbHVtbjogYW55KSB7XG4gICAgbGV0IG1heEZyYWN0aW9uRGlnaXRzID0gMjtcbiAgICBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50JyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8ubWF4RnJhY3Rpb25EaWdpdHMgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/Lm1heEZyYWN0aW9uRGlnaXRzICE9IG51bGwpIHtcbiAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IE51bWJlcihjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvKTtcbiAgICB9XG4gICAgcmV0dXJuIG1heEZyYWN0aW9uRGlnaXRzO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBmb3JtYXQgb2YgY3VycmVuY3kgJiYgbnVtYmVyICYmIGRlY2ltYWwgJiYgcGVyY2VudFxuICBzZXROdW1lcmljRm9ybWF0KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIHJvdyA9IG9iakNvbnZlcnRUb0xvd2VyKHJvdyk7XG4gICAgbGV0IHZhbHVlOiBhbnkgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgOiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgPT09IDAgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgPT09IG51bGwpXG4gICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0IDogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKHRoaXMudHlwZU9mKHZhbHVlKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPT09IDApIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgbGV0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICBpZiAoY29sdW1uLmZvcm1hdCAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKGNvbHVtbi5mb3JtYXQ/LnR5cGUpIHtcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuQ1VSUkVOQ1k6XG4gICAgICAgICAgdmFsdWUgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG4gICAgICAgICAgICBmb3JtYXRQYXJhbXM/LmxvY2FsZSA/IGZvcm1hdFBhcmFtcy5sb2NhbGUgOiAnZW4tVVMnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgY3VycmVuY3k6IGZvcm1hdFBhcmFtcz8uY3VycmVuY3kgPyBmb3JtYXRQYXJhbXMuY3VycmVuY3kgOiAnVVNEJyxcbiAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLnNldE51bWVyaWNNaW5GcmFjdGlvbihjb2x1bW4pLFxuICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuc2V0TnVtZXJpY01heEZyYWN0aW9uKGNvbHVtbiksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKT8uZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuREVDSU1BTDpcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcbiAgICAgICAgICAgIGZvcm1hdFBhcmFtcz8ubG9jYWxlID8gZm9ybWF0UGFyYW1zLmxvY2FsZSA6ICdlbi1VUycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0eWxlOiAnZGVjaW1hbCcsXG4gICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5zZXROdW1lcmljTWluRnJhY3Rpb24oY29sdW1uKSxcbiAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLnNldE51bWVyaWNNYXhGcmFjdGlvbihjb2x1bW4pLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk/LmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlBFUkNFTlQ6XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSArICclJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy9DaGFuZ2UgZHJvcGRvd24gdmx1ZSBiYXNlZCBvbiBvcHRpb24gbGFiZWwgYW5kIG9wdGlvbnZhbHVlXG4gIHNldERyb3Bkb3duVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRSb3c/OiBhbnksIGNoYW5nZT86IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXkpID0+IGtleSA9PT0gY29sdW1uLmZpZWxkKSkge1xuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25MYWJlbCA9IGNvbHVtbi5vcHRpb25MYWJlbFxuICAgICAgICAgICAgICA/IGNvbHVtbi5vcHRpb25MYWJlbFxuICAgICAgICAgICAgICA6ICdsYWJlbCc7XG4gICAgICAgICAgICBjb2x1bW4ub3B0aW9uVmFsdWUgPSBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICAgICAgICAgPyBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICAgICAgICAgOiAndmFsdWUnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKFxuICAgICAgICAgICAgKHJlY29yZDogYW55KSA9PlxuICAgICAgICAgICAgICByZWNvcmRbY29sdW1uLm9wdGlvblZhbHVlXT8udG9TdHJpbmcoKSA9PT1cbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGVkaXRlZFJvdyA9IHNlbGVjdGVkUm93ICYmIE9iamVjdC5rZXlzKHNlbGVjdGVkUm93KS5sZW5ndGggPiAwID8gc2VsZWN0ZWRSb3dbdGhpcy5kYXRhS2V5XSA9PT0gcm93W3RoaXMuZGF0YUtleV0gOiBmYWxzZTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgZWRpdGVkUm93KSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV07XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiBjaGFuZ2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XG4gICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ11bJ29wdGlvblZhbHVlJ10gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uVmFsdWVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IG9wdGlvblZhbHVlOiB2YWx1ZVtjb2x1bW4ub3B0aW9uVmFsdWVdIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxuICBjaGFuZ2VDaGVja2JveFN0cmluZ1ZhbHVlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29sdW1ucyAmJlxuICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCB7fSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzAnKSkgfHxcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJyB8fFxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ04nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPVxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnMScgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJ1xuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvd0RhdGFcbiAgICogUGFzc2VzIGRhdGEgb2YgY2xpY2tlZCByb3cgdG8gcGFyZW50XG4gICAqL1xuICBoYW5kbGVSb3dDbGljayhyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvd0RhdGE7XG4gICAgaWYgKCF0aGlzLmVkaXRBbGxSb3dzKSB7XG4gICAgICB0aGlzLm9uUm93Q2xpY2suZW1pdChyb3dEYXRhKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gaW52b2tlIG9uUm93Q2xpY2sgZXZlbnQgd2hlbiBvbmx5IG9uZSByZWNvcmQgZXhpc3Q7XG4gIGRlZmF1bHRSb3dDbGljaygpIHtcbiAgICBsZXQgZGlhbG9nRXhpc3Q6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJyk7XG4gICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID09PSAxICYmIHRoaXMub25Sb3dDbGljay5vYnNlcnZlcnM/Lmxlbmd0aCAmJiB0aGlzLmdyaWRTZXJ2aWNlLnVzZXJTZWFyY2hlZCAmJiBkaWFsb2dFeGlzdC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkID0gZmFsc2U7XG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUm93Q2xpY2sodGhpcy5yb3dzRGF0YVswXSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvbHVtbkRhdGFcbiAgICogUGFzc2VzIHNvcnRpbmcgaW5mb3JtYXRpb24gdG8gcGFyZW50IG9uIHNvcnQgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVTb3J0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICAvLyBDYXB0dXJlIGV2ZXJ5IHNvcnRlZCBjb2x1bW4gKHByaW1hcnksIHNlY29uZGFyeSwg4oCmKSBzbyBtdWx0aS1jb2x1bW4gc29ydCB0YWtlcyBlZmZlY3QsIG5vdFxuICAgIC8vIGp1c3QgdGhlIGZpcnN0LiBQcmltZU5HIGVtaXRzIHRoZSBmdWxsIG9yZGVyIGFzIGBtdWx0aXNvcnRtZXRhYCBpbiBtdWx0aXBsZS1zb3J0IG1vZGUuXG4gICAgY29uc3QgbWV0YTogYW55W10gPSAoZXZlbnQubXVsdGlzb3J0bWV0YSB8fCBbXSkuZmlsdGVyKFxuICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbSAmJiBpdGVtLm9yZGVyICE9IG51bGxcbiAgICApO1xuICAgIHRoaXMubXVsdGlTb3J0RGF0YSA9IG1ldGEubWFwKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpOiBJR3JpZFNvcnQgPT4gKHtcbiAgICAgIGZpZWxkOiBpdGVtLmZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBpdGVtLm9yZGVyID09IDEgPyBFR3JpZFNvcnREaXJlY3Rpb24uQVNDIDogRUdyaWRTb3J0RGlyZWN0aW9uLkRFU0MsXG4gICAgICBwcmlvcml0eTogaW5kZXggKyAxLFxuICAgIH0pKTtcblxuICAgIC8vIEtlZXAgdGhlIHNpbmdsZSBzb3J0RGF0YSBwb3B1bGF0ZWQgZm9yIGV4aXN0aW5nIGNvbnN1bWVycyBhbmQgdGhlIG9uU29ydENoYW5nZSBldmVudC5cbiAgICBsZXQgc29ydHM6IElHcmlkU29ydCA9IHtcbiAgICAgIGZpZWxkOiB0aGlzLm11bHRpU29ydERhdGEubGVuZ3RoID8gdGhpcy5tdWx0aVNvcnREYXRhWzBdLmZpZWxkIDogJycsXG4gICAgICBkaXJlY3Rpb246ICh0aGlzLm11bHRpU29ydERhdGEubGVuZ3RoID8gdGhpcy5tdWx0aVNvcnREYXRhWzBdLmRpcmVjdGlvbiA6IG51bGwpIGFzIEVHcmlkU29ydERpcmVjdGlvbixcbiAgICAgIHByaW9yaXR5OiAwLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbiB8fCAodGhpcy5wYWdpbmF0aW9uICYmICF0aGlzLmVkaXRBbGxSb3dzKSkge1xuICAgICAgdGhpcy5zb3J0RGF0YSA9IHNvcnRzO1xuICAgICAgdGhpcy5oYW5kbGVDdXN0b21Tb3J0aW5nKCk7XG4gICAgfVxuICAgIHRoaXMub25Tb3J0Q2hhbmdlLmVtaXQoc29ydHMpO1xuICB9XG5cbiAgc2hvdWxkUnVuU2VydmVyU2lkZShldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKChldmVudC5zb3J0RmllbGQgJiYgISh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUm93cykgJiYgIXRoaXMuUGFnZUNoYW5nZSkgfHwgKGV2ZW50Lm11bHRpU29ydE1ldGEgJiYgZXZlbnQubXVsdGlTb3J0TWV0YS5sZW5ndGggJiYgISh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUm93cykgJiYgIXRoaXMuUGFnZUNoYW5nZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50LnNvcnRGaWVsZCAmJiAodGhpcy5wYWdpbmF0aW9uICYmICF0aGlzLmVkaXRBbGxSb3dzKSAmJiB0aGlzLlBhZ2VDaGFuZ2UpIHx8IChldmVudC5tdWx0aVNvcnRNZXRhICYmIGV2ZW50Lm11bHRpU29ydE1ldGEubGVuZ3RoICYmICh0aGlzLnBhZ2luYXRpb24gJiYgIXRoaXMuZWRpdEFsbFJvd3MpICYmIHRoaXMuUGFnZUNoYW5nZSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZUV2ZW50cyhldmVudCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXV0b0xvYWREYXRhICYmIHRoaXMudXNlU2VydmVyU2lkZUV2ZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUGFzc2VzIGFwcGxpZWQgZmlsdGVycyB0byBwYXJlbnQgb24gZmlsdGVyIGNoYW5nZVxuICAgKi9cbiAgaGFuZGxlRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgIGlmICghZXZlbnQuZmlsdGVyc1tmaWx0ZXIuZmllbGRdPy52YWx1ZSAmJiAhZmlsdGVyLnZhbHVlKSB7XG4gICAgICAgIGZpbHRlci52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IDogRXZlbnRcbiAgICogQHBhcmFtIGNvbHVtbkFjdGlvbiA6IElHcmlkQ29sdW1uQWN0aW9uXG4gICAqIEBwYXJhbSByb3cgOiBhbnlcbiAgICogU3RvcCB0aGUgY2xpY2sgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50XG4gICAqIENhbGxiYWNrcyB0aGUgcm93IGRhdGEgdG8gcGFyZW50XG4gICAqL1xuXG4gIC8qKlxuICAgKiBpbnZva2Ugb25DbGljayBldmVudCAmIG9wZW4gSWZyYW1lIGluIGdyaWRcbiAgICovXG4gIGdyaWRJRnJhbWUoY29sdW1uOiBhbnksIHJvd3M6IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG4gICAgICB3aWR0aDogJzgwJScsXG4gICAgICBoZWlnaHQ6ICc4MCUnLFxuICAgICAgY2xvc2FibGU6IHRydWUsXG4gICAgICBmb2N1c09uU2hvdzogZmFsc2UsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHZhbHVlOiByb3dzLFxuICAgICAgICBpRnJhbWVJZDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogY29sdW1uLmZpZWxkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgfSBlbHNlIGlmIChyZXMgJiYgY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbHVtbi5vbkNoYW5nZShyZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkTmV3Um93KHJvdzogYW55LCBhZGRSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKCk7XG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgIGlmIChjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIGNvbC5jb21wb25lbnQpIHtcbiAgICAgICAgKGFkZFJvdyA/IHRoaXMucm93c0RhdGFbMF0gOiByb3cpW2NvbC5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgICB9XG4gICAgICBpZiAoY29sLmFnZ3JlZ2F0ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSBFR3JpZFNlbGVjdGlvblR5cGUuTVVMVElQTEUgJiYgdGhpcy5hdXRvQ2hlY2tOZXdSb3cpIHtcbiAgICAgIGNvbnN0IGFkZGVkUm93ID0gdGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhWzBdO1xuICAgICAgaWYgKGFkZGVkUm93ICYmICFhZGRlZFJvdy5faXNFZGl0ZWQpIHtcbiAgICAgICAgYWRkZWRSb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZFJvd3MpIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG5cbiAgICAgIGlmIChhZGRlZFJvdyAmJiAhdGhpcy5zZWxlY3RlZFJvd3Muc29tZShyID0+IHJbdGhpcy5kYXRhS2V5XSA9PT0gYWRkZWRSb3dbdGhpcy5kYXRhS2V5XSkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIGFkZGVkUm93XTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzXTtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gYWRkZWRSb3c7XG4gICAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gdHJ1ZTtcbiAgICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IGZhbHNlO1xuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpXG4gICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIHRoaXMub25HcmlkUm93QWRkLmVtaXQoYWRkZWRSb3cpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IHRydWU7XG4gICAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgdGhpcy5vbkdyaWRSb3dBZGQuZW1pdChyb3cpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIG9wZW4gRGlhbG9nIGluIGdyaWRcbiAgICovXG4gIG9wZW5HcmlkRGlhbG9nKGNvbHVtbjogSUdyaWRDb2x1bW4gfCBhbnksIHJvdzogYW55LCBldmVudD86IGFueSkge1xuICAgIGNvbnN0IGRhdGFQYXJhbXMgPSBjb2x1bW4uZGF0YT8uZGF0YSA/IGNvbHVtbi5kYXRhPy5kYXRhIDoge307XG4gICAgaWYgKChldmVudCAmJiBldmVudC5jdHJsS2V5KSB8fCBjb2x1bW4ub3BlbkluTmV3VGFiKSB7XG4gICAgICB0aGlzLmh5cGVybGlua1NlcnZpY2Uub3BlbkRpYWxvZ0luTmV3VGFiKGNvbHVtbi5jb21wb25lbnQsIGRhdGFQYXJhbXMsIHJvdyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5vcGVuQ29tcG9uZW50SW5EaWFsb2coY29sdW1uLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5Db21wb25lbnRJbkRpYWxvZyhjb2x1bW46IElHcmlkQ29sdW1uIHwgYW55LCByb3c6IGFueSkge1xuICAgIHZhciBpc0Rpc2FibGVkID0gY29sdW1uLmRpc2FibGVkXG4gICAgICA/IHRydWVcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlO1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBsZXQgZGF0YTogYW55ID0ge307XG4gICAgZGF0YSA9IHsgLi4uY29sdW1uPy5kYXRhIH07XG4gICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3c7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5kYXRhICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5tYXRjaERhdGEpIHtcbiAgICAgIGRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhPy5kYXRhID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpYWxvZ0RhdGEuZGF0YSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4uY29tcG9uZW50ICYmIHRoaXMucm93Q2xpY2tEYXRhICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmRhdGEgPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICBkYXRhLmRhdGEsXG4gICAgICAgICAgdGhpcy5yb3dDbGlja0RhdGFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIGhlaWdodDogZGF0YS5oZWlnaHQgPyBkYXRhLmhlaWdodCA6ICc5MHZoJywgY2xvc2FibGU6IHRydWUsIGZvY3VzT25TaG93OiBmYWxzZSB9XG4gICAgICBjb25zdCBvYmpGaWVsZCA9IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArIFwiX29ialwiO1xuICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihyb3dbb2JqRmllbGRdICYmIHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA/IHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA6IGNvbHVtbi5jb21wb25lbnQsIGRhdGEpO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcywgdGhpcy5kaWFsb2dSZWYpO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgLy8gfSwgODAwKTtcblxuICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5kcmFnZ2FibGUgfHwgY29sdW1uLmRyYWdnYWJsZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKGRhdGEsIHRoaXMucm93Q2xpY2tEYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25DaGFuZ2UoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBicm93c2VyQ2xvc2VFdmVudChldmVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlLnJlc3RvcmVMZWF2ZVdhcm5pbmcoKTtcbiAgICB9XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgaWYgKHNlbGVjdGVkVmFsdWUgJiYgY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSAmJiBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLCcpPy5tYXAoKHZhbHVlKSA9PiBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCkgPT09IHZhbHVlPy50b1N0cmluZygpKT8ubGFiZWwpPy50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuICBhdXRvR3JvdyhldmVudDogRXZlbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgY29uc3QgdGV4dGFyZWEgPSBldmVudCBpbnN0YW5jZW9mIEV2ZW50ID8gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBldmVudDtcbiAgICBpZiAodGV4dGFyZWEpIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IHRleHRhcmVhLnNjcm9sbEhlaWdodCArICdweCc7XG4gICAgfVxuICB9XG5cblxuICBzZXRUZXh0Qm94UmVhZE9ubHlWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoY29sdW1uLmRpc3BsYXlUZXh0KSB7XG4gICAgICB2YWx1ZSA9IGNvbHVtbi5kaXNwbGF5VGV4dDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dCkge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHQ7XG4gICAgfSBlbHNlIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGNvbmRpdGlvbmFsIGJhc2UgdmFsdWUgYW5kIHRpdGxlXG4gICAqL1xuICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICBsZXQgbmV3VmFsdWU6IGFueTtcbiAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuc2V0VGltZUZvcm1hdChuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGZvcm1hdCA9IHRoaXMuc2V0Rm9ybWF0KGNvbHVtbik7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShuZXdWYWx1ZT8udG9TdHJpbmcoKSA9PT0gXCJJbnZhbGlkIERhdGVcIiA/IG51bGwgOiBuZXdWYWx1ZSwgZm9ybWF0ID8gZm9ybWF0IDogY29sdW1uLnNob3dUaW1lID8gXCJNTS9kZC95eXl5LCBoOm1tIGFcIiA6IFwiTU0vZGQveXl5eVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKSA6XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldICE9IHVuZGVmaW5lZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGRcbiAgICAgICAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCAmJiBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPR1xuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HID9cbiAgICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkgP1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0IDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsICdoaDptbSBhJylcbiAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uaWNvbiA/IGNvbHVtbi5oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRGb3JtYXQoY29sdW1uKSB7XG4gICAgbGV0IGZvcm1hdCA9ICcnO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdCkge1xuICAgICAgY29sdW1uLmZvcm1hdCA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPyBjb2x1bW4uZm9ybWF0LnR5cGUgOiBjb2x1bW4uZm9ybWF0O1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLk1FRElVTURBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTSBkLCB5eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQveXksIGg6bW0gYSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSSU9EOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL3l5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgZm9ybWF0ID0gY29sdW1uLmZvcm1hdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICA6IGNvbHVtbi5kYXRhPy5maW5kKGRyb3Bkb3duVmFsID0+IGRyb3Bkb3duVmFsPy52YWx1ZSA9PSByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgPyBjb2x1bW4uZGF0YT8uZmluZChkcm9wZG93blZhbCA9PiBkcm9wZG93blZhbD8udmFsdWUgPT0gcm93W2NvbHVtbi5maWVsZF0pPy5sYWJlbFxuICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG9uUm93UmVvcmRlcihldmVudCkge1xuICAgIHRoaXMub25Sb3dPcmRlckNoYW5nZWQuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERlbGV0ZSBDb25maXJtYXRpb24gZGlhbG9nIHdoZW4gY2xpY2sgb24gZGVsZXRlIGljb24gaW4gQWN0aW9uIGNvbHVtblxuICAgKi9cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2x1bW5BY3Rpb246IElHcmlkQ29sdW1uQWN0aW9uLCByb3c6IGFueSkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHZhciBtZXNzYWdlOiBzdHJpbmc7XG4gICAgaWYgKHJvdy5jaGlsZGZvbGRlcmNvdW50ID4gMCkge1xuICAgICAgbWVzc2FnZSA9IGBEZWxldGluZyB0aGlzIGZvbGRlciB3aWxsIGFsc28gZGVsZXRlICR7cm93LmNoaWxkZm9sZGVyY291bnR9IGNoaWxkIGZvbGRlciR7cm93LmNoaWxkZm9sZGVyY291bnQgPiAxID8gJ3MnIDogJyd9IGFsb25nIHdpdGggYWxsIGFzc29jaWF0ZWQgZG9jdW1lbnRzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcHJvY2VlZD9gO1xuICAgIH1cbiAgICBpZiAoY29sdW1uQWN0aW9uLnRvb2x0aXAudG9Mb3dlckNhc2UoKSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGlmIChjb2x1bW5BY3Rpb24uY29uZmlybURpYWxvZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlID8/ICdBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcbiAgICAgICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgICAgICBpY29uOiAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxuICAgICAgICAgIGtleTogJ2hhbmRsZWNvbHVtbkFjdGlvbnMnLFxuICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IDogTGF6eUxvYWRFdmVudFxuICAgKiBUcmlnZ2VycyBldmVyeXRpbWUgYSBzZXJ2ZXIgc2lkZSBmaWx0ZXIgaXMgdHJpZ2dlclxuICAgKi9cbiAgaGFuZGxlU2VydmVyU2lkZUV2ZW50cyhldmVudDogYW55LCBkdDogYW55ID0gJycpIHtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuaXNTZXJ2ZXJTaWRlRXZlbnRJbml0YWxUcmlnZ2VyZWQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWRJZCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkZmlsdGVyID0gZXZlbnQ7XG5cbiAgICAgICAgICAgIGlmIChkdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Py5maWx0ZXJzW3guZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICBldmVudC5maWx0ZXJzW3guZmllbGRdLnZhbHVlID0geC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QgPyB4LmZpbHRlclZhbHVlPy50b1N0cmluZygpIDogeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgeC5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVfb2JqJykgPyB4WydmaWx0ZXJWYWx1ZV9vYmonXT8udmFsdWUgOiB4LmZpbHRlclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzID0ge1xuICAgICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmxvb2t1cEZpbHRlcnNcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZEZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKVxuICAgICAgICAgICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5wcmVwYXJlQmFzaWNGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXG4gICAgICAgICAgICAgIHNvcnRzOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTb3J0cyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxuICAgICAgICAgICAgICAuLi4odGhpcy5wYWdpbmF0aW9uICYmIHtcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRQYWdpbmF0aW9uKGV2ZW50KSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogZXZlbnQucm93cyB8fCAxMCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycyAmJlxuICAgICAgICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAodGhpcy5hbGxvd0NhY2hpbmcgfHwgdGhpcy5zb2Z0Q2FjaGluZylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy50YWJsZT8uaWQpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy50YWJsZT8uaWQgKyB0aGlzLmN1cnJlbnRVcmwsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gKHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzIHx8IFtdKS5jb25jYXQodGhpcy5nbG9iYWxEYXRhKTtcblxuICAgICAgICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGxldCBjb250YWluc0VtcHR5RmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5zRW1wdHlGaWVsZCkge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbmRJbmRleCgoZmlsdGVyKSA9PiAhZmlsdGVyLmZpZWxkKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5zRW1wdHlGaWVsZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVFdmVudEluaXRhbFRyaWdnZXJlZC5uZXh0KCcnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuXG5cbiAgLy9zZXQgZ3JpZCBpZCBvbiBwYWdlIGxvYWQgZm9yIGxvYWQgY29sdW1uIHdpZHRoc1xuICBzZXRDbGFzc2FBbmRJZChkdDogYW55KSB7XG4gICAgaWYgKGR0Py5lbD8ubmF0aXZlRWxlbWVudD8uaWQpIHtcbiAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbFNjcm9sbCkge1xuICAgICAgcmV0dXJuIHsgJ2hvcml6b250YWwtc2Nyb2xsJzogdHJ1ZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7ICdob3Jpem9udGFsLXNjcm9sbCc6IGZhbHNlIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFBhc3NlcyBhcHBsaWVkIHBhZ2luYXRpb24gdG8gcGFyZW50IG9uIHBhZ2UgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbihldmVudDogSUdyaWRQYWdpbmF0aW9uRXZlbnQpIHtcbiAgICB0aGlzLmVkaXRpbmdSb3dLZXlzID0ge307XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IGV2ZW50LmZpcnN0O1xuICAgIHRoaXMuUGFnZUNoYW5nZSA9IHRydWU7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbiAmJiB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhID0gW107XG4gICAgfVxuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMgJiYgdGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZWxlY3RlZFJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMub25Sb3dDaGVja0JveC5lbWl0KHJvdyk7XG4gIH1cblxuICAvLyBzZXQgdGltZSBmb3JtYXRcbiAgc2V0VGltZUZvcm1hdChkYXRlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicgfHwgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oTnVtYmVyKGRhdGUpKSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpc1RpbWVJbkFNID0gdGhpcy5jaGVja1RpbWVGb3JtYXQoZGF0ZSwgJ2FtJyk7XG4gICAgY29uc3QgaXNUaW1lSW5QTSA9IHRoaXMuY2hlY2tUaW1lRm9ybWF0KGRhdGUsICdwbScpO1xuICAgIGNvbnN0IGlzVEluY2x1ZGUgPSB0aGlzLmNoZWNrVGltZUZvcm1hdChkYXRlLCAndCcpO1xuXG4gICAgaWYgKChpc1RpbWVJbkFNIHx8IGlzVGltZUluUE0pICYmICghaXNUSW5jbHVkZSkpIHtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja1RpbWVGb3JtYXQoZGF0ZSwgJzonKSAmJiAoIWlzVGltZUluQU0gJiYgIWlzVGltZUluUE0gJiYgIWlzVEluY2x1ZGUpKSB7XG4gICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gZGF0ZVN0cmluZz8uc3BsaXQoJzonKT8ubWFwKE51bWJlcik7XG4gICAgICBjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nO1xuICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgICAgcmV0dXJuIGAke2Zvcm1hdHRlZEhvdXJzfToke1N0cmluZyhtaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnaGg6bW0gYScpIHx8ICcnO1xuICB9XG5cbiAgY2hlY2tUaW1lRm9ybWF0KGRhdGUsIGlzSW5jbHVkZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRhdGU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKGlzSW5jbHVkZSk7XG4gIH1cblxuICAvL29wZW4gaHlwZXJsaW5rIGluIGVkaXQgY2FzZVxuICBvcGVuTGluayh1cmw6IGFueSkge1xuICAgIGlmICh1cmwpIHtcbiAgICAgIGNvbnN0IGxpbms6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3dcbiAgICogU2V0cyB2YWx1ZXMgdG8gZWRpdGFibGUgcm93XG4gICAqIFJvdydzIGRhdGEgaXMgcHJlc2V2ZWQgdG8gcHJldmVudCBtdXRhdGlvblxuICAgKiBSb3cgZGF0YUtleSBpcyBwcmVzZXJ2ZWQgdG8ga2VlcCB0aGUgcm93IHVuaXF1ZSBhbmQgaW4gZWRpdGFibGUgc3RhdGUgYXMgbG9uZyBhcyBub3Qgc2F2ZWRcbiAgICovXG5cbiAgcmVmcmVzaEdyaWRUZXJtaW5hdG9yKCkge1xuICAgIGlmICh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdlPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0T3JpZ2luYWxSb3dzKCkge1xuICAgIHRoaXMub3JpZ2luYWxSb3dzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gIH1cblxuICBvblJvd0VkaXRJbml0KHJvdzogYW55KSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKVxuICAgIGxldCBzZWxlY3RlZFJvdyA9IHsgLi4ucm93IH07XG4gICAgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRSb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXTogYW55KSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sLCByb3csIGtleSk7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93bkZpbHRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgYXV0b0NvbXBsZXRlIFZhbHVlIGluIGVkaXQgbW9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY29sLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sLmZpZWxkXS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfdGVtcCddID0gcm93W2NvbC5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sLmRpc3BsYXlGaWVsZF0gPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZS5tYXAoKHg6IGFueSkgPT4geFtjb2wuZGlzcGxheUZpZWxkXSk7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG5ld1ZhbHVlXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXG4gICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICA/Lm1hcCgoeDogYW55KSA9PiAoeyBbY29sLmRpc3BsYXlGaWVsZCA/IGNvbC5kaXNwbGF5RmllbGQgOiBjb2wuZmllbGRdOiB4LCBbY29sLmZpZWxkICsgJ190ZW1wJ106IHZhbHVlWzBdW2NvbC5maWVsZF0gfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICAgICAgbGV0IG9wdGlvbiA9IGNvbD8uZGF0YT8uZmluZChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2wsIHJvdylcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2wuZmllbGRdICE9PSBudWxsICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocm93W2tleSArICdfb2JqJ10gJiYgT2JqZWN0LmtleXMocm93W2tleSArICdfb2JqJ10pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJvd1trZXkgKyAnX29iaiddLnRleHQgPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIHRoZSBNaW51dGVzIHBhdHRlcm5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcbiAgICAgICAgICAgIGNvbC5taW51dGVzSW50ZXJ2YWwgJiZcbiAgICAgICAgICAgIHJvd1trZXldXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKHNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIChjb2wuYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbC5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGNvbC5lZGl0TGluayA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID0gcm93W2NvbC5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaztcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID0gJyc7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB7IC4uLnJvdyB9O1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLm9uR3JpZFJvd0VkaXQuZW1pdChyb3cpO1xuICB9XG5cbiAgdHlwZU9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkcm9wZG93biBmaWx0ZXIgdmFsdWVcbiAgICovXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbC5kcm9wRG93blByb3ApIHtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKGNvbCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IGtleSkpIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbC5kcm9wRG93blByb3A7XG4gICAgICAgIGxldCBuZXdGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgICAgaWYgKG9iai5maWx0ZXJzICYmIG9iai5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvYmouZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XG4gICAgICAgICAgICBsZXQgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMocm93KS5maW5kKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5OiBzdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZT8uaW5jbHVkZXMoJ3snKSAmJlxuICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXRjaEtleSA9IGtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hLZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHtcbiAgICAgICAgICAgICAgbmV3RmlsdGVyLnZhbHVlID0gcm93W2ZpbHRlcktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdGaWx0ZXJzLnB1c2gobmV3RmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbCxcbiAgICAgICAgICBvYmoudW5pcXVlS2V5LFxuICAgICAgICAgIG9iai52YWx1ZVByb3AsXG4gICAgICAgICAgb2JqLmxhYmVsUHJvcCxcbiAgICAgICAgICBuZXdGaWx0ZXJzLFxuICAgICAgICAgIHJvd1xuICAgICAgICApO1xuXG4gICAgICAgIGxldCBvcHRpb24gPSBjb2wuZGF0YS5maW5kKFxuICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFBhc3NlcyB0aGUgZWRpdGVkIG9yIG5ld2x5IGNyZWF0ZWQgZGF0YSB0byBwYXJlbnRcbiAgICogSW4gY2FzZSBvZiBuZXdseSBjcmVhdGVkIGRhdGEsIGRhdGFLZXkgYW5kIGlzTmV3IHByb3AgaXMgcmVtb3ZlZFxuICAgKi9cbiAgb25Sb3dFZGl0U2F2ZShzZWxlY3RlZFJvdzogYW55KSB7XG4gICAgdGhpcy50ZW1wU2F2ZWRSb3cgPSBbXTtcbiAgICBsZXQgYXV0b21Db21wbGV0ZVRlbXBEYXRhID0gW107XG4gICAgbGV0IGxvb2t1cEluZm86IGFueSA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ107XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ107XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICkge1xuICAgICAgICBpZiAodHlwZW9mIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpIHtcbiAgICAgICAgICBsb29rdXBJbmZvW2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gJ2NoYXInKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICdZJyA6ICdOJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnbnVtZXJpYycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID09PSB0cnVlID8gJzEnIDogJzAnO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkUm93ID0geyAuLi5zZWxlY3RlZFJvdywgW2NvbHVtbi5maWVsZF06IHZhbHVlIH07XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkcm9wRG93biBvcHRpb25MYWJlbCBpbnRvIG9wdGlvblZhbHVlXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sdW1uLmRhdGE/Lmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKSB7XG4gICAgICAgIGxldCBvcHRpb25MYWJlbDtcbiAgICAgICAgaWYgKGlzTmFOKE51bWJlcihzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSkpIHtcbiAgICAgICAgICBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9uTGFiZWw/LnZhbHVlKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IG9wdGlvbkxhYmVsLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFXG4gICAgICApIHtcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udGltZU9ubHkgJiYgIWNvbHVtbi5zYXZlQXNTdHJpbmcgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4uZm9ybWF0ID09PSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEUpKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pPy50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBhbGxvd0NhbGN1bGF0ZT10cnVlLCBkaXZpZGUgdGhlIHBlcmNlbnQgYnkgMTAwXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgIGlmICh0aGlzLm51bWVyaWNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMubnVtZXJpY1ZhbHVlID0ge31cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnLicpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGNhbGN1bGF0ZWRWYWx1ZSA/IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gOiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwO1xuICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gLyAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBtdWx0aXNlbGVjdCBhcnJheSBpbnRvIHN0cmluZ1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cbiAgICAgICkge1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2aW5nIEF1dG9Db21wbGV0ZSBEYXRhXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8ubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIGF1dG9tQ29tcGxldGVUZW1wRGF0YSA9IFsuLi5zZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lm1hcCgocm93KSA9PiBjb2x1bW4/Lm9wdGlvblZhbHVlICYmIHJvd1tjb2x1bW4ub3B0aW9uVmFsdWU/LnRvTG93ZXJDYXNlKCldID9cbiAgICAgICAgICByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldKT8udG9TdHJpbmcoKT8ucmVwbGFjZUFsbCgnLCcsICc7Jyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgcm93OiBhbnkgPSB7IC4uLnNlbGVjdGVkUm93IH07XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgbGV0IG9iajogYW55ID0gcm93W2tleV1cbiAgICAgICAgaWYgKHRoaXMuY2hlY2tBY3Rpb24gPT09IGZhbHNlICYmIG9iaj8udHlwZSAmJiAob2JqLnR5cGUgPT09ICdsaW5rJyB8fCBvYmoudHlwZSA9PT0gJ2lmcmFtZScgfHwgb2JqLnR5cGUgPT09ICdkaWFsb2cnKSkge1xuICAgICAgICAgIHJvdyA9IHsgLi4ucm93LCBba2V5LnNwbGl0KCdfJylbMF1dOiByb3dba2V5XS5kaXNwbGF5VGV4dCB9O1xuICAgICAgICAgIHRoaXMuY2hlY2tBY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmogJiYgKG9iai50eXBlID09PSAnbGluaycgfHwgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8IG9iai50eXBlID09PSAnZGlhbG9nJykpIHtcbiAgICAgICAgICBpZiAoIW9iai5kaXNwbGF5VGV4dCAmJiBvYmouZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0ga2V5LnNwbGl0KCdfJylbMF0/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIG9iai5kaXNwbGF5VGV4dCA9IHJvd1trZXkuc3BsaXQoJ18nKVswXV1cbiAgICAgICAgICB9XG4gICAgICAgICAgcm93ID0geyAuLi5yb3csIFtrZXkuc3BsaXQoJ18nKVswXV06IHJvd1trZXldLmRpc3BsYXlUZXh0IH07XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICoganVzdCBlbWl0IHRob3NlIGZpZWxkcyB3aG8gZXhpc3QgaW4gdGhlIHRhYmxlXG4gICAgICovXG4gICAgcm93ID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3cpO1xuICAgIC8vb25zb2xlLmxvZygncm93IGluIHNhdmUnLCByb3cpXG4gICAgbGV0IG9iajogYW55ID0ge307XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNhdmVBbGxEYXRhKVxuICAgICAgKSB7XG4gICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxuICAgICAgICAgIGNvbHVtbi5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdLFxuICAgICAgICAgICAgJ3l5eXktTU0tZGRUMDA6MDA6MDAuMDAwWidcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgIXJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgZGlnaXRzSW5mbyA9ICcuMDAnO1xuICAgICAgICAgIGxldCB6ZXJvID0gJzAnO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICAgICAgICBjb25zdCBmcmFjRGlnaXRzID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICBpZiAoZnJhY0RpZ2l0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcbiAgICAgICAgICAgICAgemVybyA9IHplcm8gKyAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSArIGRpZ2l0c0luZm87XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHJvdy5pc05ldyB8fCByb3cuaXNuZXcgJiZcbiAgICAgICAgKGNvbHVtbi5hbGxvd1NhdmUgPT09IGZhbHNlIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgIXRoaXMuc2F2ZUFsbERhdGEpXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuICAgICAgY29sdW1uLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgY29uc3Qgb2JqS2V5ID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgIGlmIChzZWxlY3RlZFJvd1tvYmpLZXldPy5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W29iaktleV0uZXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRlbGV0ZSBzZWxlY3RlZFJvd1sndW5kZWZpbmVkJ107XG4gICAgb2JqW3RoaXMuZGF0YUtleV0gPSByb3dbdGhpcy5kYXRhS2V5XTsgLy8gZW5zdXJlIGRhdGFLZXkgKHRlbXBfaWQpIGlzIGF2YWlsYWJsZSBmb3IgZGlydHktcm93IGNvbXBhcmlzb25cblxuICAgIGNvbnN0IG5vcm1hbGl6ZUZvckNvbXBhcmUgPSAocjogYW55KSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ncmlkU2VydmljZS5nZXRBbGxvd1NhdmVSb3dsaXN0KFt7IC4uLnIgfV0sIHRoaXMuY29sdW1ucylbMF0gPz8ge307XG4gICAgICBub3JtYWxpemVkW3RoaXMuZGF0YUtleV0gPSByW3RoaXMuZGF0YUtleV07XG4gICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVOdW1lcmljVmFsdWVzKG5vcm1hbGl6ZWQpO1xuICAgIH07XG4gICAgY29uc3Qgb3JpZ2luYWxSb3cgPSB0aGlzLm9yaWdpbmFsUm93cy5maW5kKChyKSA9PiByW3RoaXMuZGF0YUtleV0gPT09IHJvd1t0aGlzLmRhdGFLZXldKTtcbiAgICBjb25zdCBpc0RpcnR5Um93ID0gcm93LmlzTmV3IHx8IHJvdy5pc25ldyB8fCAhb3JpZ2luYWxSb3cgfHwgZ2V0Q2hhbmdlZFJvd3MoW25vcm1hbGl6ZUZvckNvbXBhcmUocm93KV0sW25vcm1hbGl6ZUZvckNvbXBhcmUob3JpZ2luYWxSb3cpXSwgdGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFLZXkpLmxlbmd0aCA+IDA7XG5cbiAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgaWYgKGlzRGlydHlSb3cpIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eSh0aGlzLmNvbHVtbnMsIHJvdyk7XG4gICAgICBpc1ZhbGlkID0gdGhpcy5ncmlkVmFsaWRhdGlvbih0aGlzLmNvbHVtbnMsIHJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4geyBjb2x1bW4uZXJyb3JNZXNzYWdlID0gJyc7IGNvbHVtbi5pc3ZhbGlkID0gdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gc2V0IHRoZSBncmlkIHVwZGF0ZWQvaW5zZXJ0ZWQgZGF0YVxuICAgICAgdGhpcy5yb3dBY3Rpb25FdmVudHMoc2VsZWN0ZWRSb3cpO1xuICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudChmYWxzZSk7XG4gICAgICBpZiAocm93LmlzTmV3IHx8IHJvdy5pc25ldykge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucm93c0RhdGEuZmluZEluZGV4KCh4KSA9PiB4LnRlbXBfaWQgPT0gcm93LnRlbXBfaWQpO1xuICAgICAgICB0aGlzLnRlbXBTYXZlZFJvdy5wdXNoKGluZGV4KTtcbiAgICAgICAgbGV0IHsgaXNOZXcsIGlzbmV3LCAuLi5uZXdSb3dPYmogfSA9IHJvdztcbiAgICAgICAgbmV3Um93T2JqID0gdGhpcy5ncmlkU2VydmljZS5yZW1vdmVFeHRyYU5ld1Jvd09iaihuZXdSb3dPYmosIHRoaXMuY29sdW1ucyk7XG4gICAgICAgIGlmICghdGhpcy5hZGREYXRhS2V5VmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgbmV3Um93T2JqW3RoaXMuZGF0YUtleV07XG4gICAgICAgIH1cbiAgICAgICAgbmV3Um93T2JqID0gdGhpcy5zZXRSb3dzRGF0YShuZXdSb3dPYmopO1xuICAgICAgICBpZiAodGhpcy5zYXZlQWxsUmVjb3JkKSB7XG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChuZXdSb3dPYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25Sb3dBZGQuZW1pdChuZXdSb3dPYmopO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucm93c0RhdGEuZmluZEluZGV4KCh4KSA9PiB4LnRlbXBfaWQgPT0gc2VsZWN0ZWRSb3cudGVtcF9pZCk7XG4gICAgICAgIHRoaXMudGVtcFNhdmVkUm93LnB1c2goaW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5zYXZlQWxsUmVjb3JkKSB7XG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjaGVja2xpc3RSb3dzID0gdGhpcy5zZXRSb3dzRGF0YSh0aGlzLmNoZWNrbGlzdCk7XG4gICAgICAgICAgICBjaGVja2xpc3RSb3dzLmZvckVhY2gocm93ID0+IGRlbGV0ZSByb3dbdGhpcy5kYXRhS2V5XSk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcmlnaW5hbFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJvd3MgPSBnZXRDaGFuZ2VkUm93cyhjaGVja2xpc3RSb3dzLCB0aGlzLm9yaWdpbmFsUm93cywgdGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFLZXkpO1xuICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5wcmVwYXJlUm93c0ZvckVtaXQoZmlsdGVyZWRSb3dzKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5wcmVwYXJlUm93c0ZvckVtaXQoY2hlY2tsaXN0Um93cykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBvYmpbdGhpcy5kYXRhS2V5XTsgLy8gcmVtb3ZlIHRlbXBfaWQgYmVmb3JlIGVtaXR0aW5nXG4gICAgICAgICAgICBpZiAodGhpcy5vcmlnaW5hbFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBzaW5nbGVSb3dBcnJheSA9IFtvYmpdO1xuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFJvd3MgPSBnZXRDaGFuZ2VkUm93cyhzaW5nbGVSb3dBcnJheSwgdGhpcy5vcmlnaW5hbFJvd3MsIHRoaXMuY29sdW1ucywgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMucHJlcGFyZVJvd3NGb3JFbWl0KGZpbHRlcmVkUm93cy5sZW5ndGggPiAwID8gZmlsdGVyZWRSb3dzWzBdIDogbnVsbCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMucHJlcGFyZVJvd3NGb3JFbWl0KG9iaikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1tyb3dbdGhpcy5kYXRhS2V5XV0gPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddKSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IC4uLnNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10gPSB7IGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gaWYgYWxsIHJvd3MgaW4gcmVhZCBvbmx5IG1vZGUgdGhlbiBzaG93IGVkaXRBbGxSb3dzIGJ1dHRvbi4gICAgXG4gICAgaWYgKE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKSA9PiAhdmFsdWUpKSB7XG4gICAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAvLyBjb252ZXJ0IGRhdGUgaW50byB0aW1lXG4gICAgICBpZiAoXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgICAgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdQTScpIHx8XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJ0FNJykpXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNldFRpbWVJbkRhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uYWxsb3dDYWxjdWxhdGUpIHtcbiAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBwYXJzZUZsb2F0KChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICogMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICogMTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBhdXRvY29tcGVsZXQgYXJyYXkgZGF0YSBhZnRlciBzYXZlIHJvd1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gYXV0b21Db21wbGV0ZVRlbXBEYXRhO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJiAoY29sdW1uLmFsbG93U2F2ZSA9PT0gdHJ1ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWQpXG4gICAgICApIHtcbiAgICAgICAgLy8gc2V0IExPT0tVUF9JTlBVVCBkYXRhIGFmdGVyIHNhdmUgcm93XG4gICAgICAgIGlmIChsb29rdXBJbmZvW2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gbG9va3VwSW5mb1tjb2x1bW4uZmllbGRdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmXG4gICAgICAgIGNvbHVtbi5vcHRpb25MYWJlbCAmJlxuICAgICAgICBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCBzZWxlY3RlZFJvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IGZhbHNlO1xuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKSAmJiB0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgIH1cbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLy8gY2hlY2sgdGhlIHZhbGlkYXRpb24gb2YgdGhlIGZpZWxkXG4gIGdyaWRWYWxpZGF0aW9uKGNvbHVtbnM6IGFueSwgcm93OiBhbnksIHNpbmdsZUNlbGw6IGJvb2xlYW4gPSBmYWxzZSk6IGJvb2xlYW4ge1xuICAgIGlmIChzaW5nbGVDZWxsID09IHRydWUpIHtcbiAgICAgIGNvbHVtbnMgPSBbeyAuLi5jb2x1bW5zIH1dXG4gICAgfVxuICAgIGlmICghdGhpcy5ncmlkU2VydmljZS5jaGVja1ZhbGlkaXR5KGNvbHVtbnMsIHJvdywgc2luZ2xlQ2VsbCkpIHtcbiAgICAgIGxldCBlcnJvck1lc3NhZ2VEZXRhaWxzOiBzdHJpbmcgPSAnJztcbiAgICAgIGNvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIGVycm9yTWVzc2FnZURldGFpbHMgPSBlcnJvck1lc3NhZ2VEZXRhaWxzID8gZXJyb3JNZXNzYWdlRGV0YWlscyArICcgLCAnICsgY29sdW1uLmVycm9yTWVzc2FnZSA6IGNvbHVtbi5lcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBsZXQgaXNSZXF1aXJlZCA9IGNvbHVtbnMuc29tZShcbiAgICAgICAgKGNvbHVtbjogYW55KSA9PiBjb2x1bW4uZXJyb3JNZXNzYWdlICYmIChyb3dbY29sdW1uLmZpZWxkXSA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gdW5kZWZpbmVkIHx8IHJvd1tjb2x1bW4uZmllbGRdID09PSAnJylcbiAgICAgICk7XG4gICAgICBpZiAoaXNSZXF1aXJlZCAmJiAhc2luZ2xlQ2VsbCkge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcbiAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzLFxuICAgICAgICAgIDUwMDAsXG4gICAgICAgICAgJ1JFUVVJUkVEIEZJRUxEJ1xuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlRGV0YWlscywgNTAwMCwgJ0lOVkFMSUQgRklFTEQnKTtcbiAgICAgICAgaWYgKHNpbmdsZUNlbGwpIHtcbiAgICAgICAgICB0aGlzLnNldEVycm9yQ2VsbChjb2x1bW5zWzBdLCByb3cpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNpbmdsZUNlbGwpIHtcbiAgICAgICAgdGhpcy5zZXRFcnJvckNlbGwoY29sdW1uc1swXSwgcm93KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHNldEVycm9yQ2VsbChjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4uZXJyb3JNZXNzYWdlKSB7XG4gICAgICBpZiAocm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSkge1xuICAgICAgICByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAocm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSkge1xuICAgICAgICBkZWxldGUgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXS5lcnJvck1lc3NhZ2VcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3cgOiBhbnlcbiAgICogQHBhcmFtIGluZGV4IDogbnVtYmVyXG4gICAqIENsZWFycyBvdXQgdGhlIGVkaXQgcm93IGFuZCByZXBsYWNlIHdpdGggcmVhZGFibGUgb25lXG4gICAqL1xuICBvblJvd0VkaXRDYW5jZWwocm93OiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgcm93SW5FZGl0TW9kZTogYm9vbGVhbiA9IE9iamVjdC52YWx1ZXModGhpcy5lZGl0aW5nUm93S2V5cykuZXZlcnkoKHZhbHVlKSA9PiAhdmFsdWUpO1xuICAgIGlmIChyb3c/LmlzTmV3KSB7XG4gICAgICB0aGlzLnJvd3NEYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm93c0RhdGFbaW5kZXhdID0gdGhpcy5lZGl0Um93c1JlY29yZHNbcm93W3RoaXMuZGF0YUtleV1dO1xuICAgICAgZGVsZXRlIHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICB9XG4gICAgZGVsZXRlIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dO1xuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YVtpbmRleF1bY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmluRWRpdE1vZGUgPSBmYWxzZTtcbiAgICBpZiAocm93SW5FZGl0TW9kZSkge1xuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IGZhbHNlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5pbmxpbmVSb3dDYW5jZWwuZW1pdChyb3cpO1xuICAgIGlmIChyb3dJbkVkaXRNb2RlICYmIHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICB0aGlzLnJlZnJlc2hHcmlkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFNlbmRzIHRoZSByb3cgcGF5bG9hZCB0byBwYXJlbnQgZm9yIGRlbGV0aW9uc1xuICAgKi9cblxuICAvKipcbiAgKnNldCB0aGUgZ3JpZERhdGEgb24gcm93IGFjdGlvbnMgZXZlbnRzXG4gICovXG4gIHJvd0FjdGlvbkV2ZW50cyhyb3dJbmZvLCBkZWxldGVSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGxldCBhY3Rpb246IHN0cmluZyA9ICcnO1xuICAgIGxldCBncmlkUm93c0RhdGE6IGFueVtdID0gWy4uLnRoaXMucm93c0RhdGFdO1xuICAgIGNvbnN0IGluZGV4ID0gZ3JpZFJvd3NEYXRhLmZpbmRJbmRleCgocm93RGF0YSkgPT4gcm93SW5mb1t0aGlzLmRhdGFLZXldID09PSByb3dEYXRhW3RoaXMuZGF0YUtleV0pO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBpZiAoZGVsZXRlUm93KSB7XG4gICAgICAgIGdyaWRSb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJvd3NEYXRhID0gWy4uLmdyaWRSb3dzRGF0YV07XG4gICAgICAgIGFjdGlvbiA9ICdkZWxldGUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuYWRkTmV3Um93Q2hlY2spIHtcbiAgICAgICAgICBhY3Rpb24gPSAnaW5zZXJ0JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3Rpb24gPSAndXBkYXRlJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vbkdyaWRSb3dBY3Rpb25zLm9ic2VydmVycy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICByb3dJbmZvWydyb3dBY3Rpb24nXSA9IGFjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBncmlkUm93c0RhdGFbaW5kZXhdID0gcm93SW5mbztcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgdGhpcy5vbkdyaWRSb3dBY3Rpb25zLmVtaXQoZ3JpZFJvd3NEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERlbGV0ZSBjb25maXJtYXRpb24gZGlhbG9nIHdoZW4gdHJ5aW5nIHRvIGRlbGV0ZSByb3dcbiAgICovXG4gIGRlbGV0ZVJlY29yZChyb3c6IGFueSkge1xuICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgIG1lc3NhZ2U6ICdBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcbiAgICAgIGhlYWRlcjogJ0RlbGV0ZSBDb25maXJtYXRpb24nLFxuICAgICAgaWNvbjogJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgIGtleTogJ2hhbmRsZUlubGluZUNSVUQnLFxuICAgICAgYWNjZXB0OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMpIHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgZ3JpZCBkZWxldGVkIGRhdGEgXG4gICAgICAgIHRoaXMucm93QWN0aW9uRXZlbnRzKHJvdywgdHJ1ZSk7XG4gICAgICAgIHRoaXMub25Sb3dEZWxldGUuZW1pdChyb3cpO1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIHJlamVjdDogKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG8gc2V0IGRpc2FibGVkIHRoZSBjb250cm9sXG4gICAqL1xuICBhbGxvd0Rpc2FibGVkKGNvbHVtbjogYW55LCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCB2YWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJiB0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LmtleXMocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pPy5pbmNsdWRlcygnZGlzYWJsZWQnKSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzYWJsZWQgPT09IHRydWVcbiAgICAgICkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgT2JqZWN0LmtleXMocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pPy5pbmNsdWRlcygncm93RGlzYWJsZWQnKSAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ucm93RGlzYWJsZWQgPT09IHRydWVcbiAgICAgICkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgIHZhbHVlID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBhZ2dyZWdhdGUgaW4gZ3JpZCBmb290ZXJcbiAgICovXG4gIHNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIGlmIChjb2x1bW4/LmFnZ3JlZ2F0ZSkge1xuICAgICAgY29sdW1uLmFnZ3JlZ2F0ZS5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZXQgY29sdW1uVHlwZTogRUdyaWRBZ2dyZWdhdGUgPSBjb2wudHlwZTtcbiAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuQ09VTlQpIHtcbiAgICAgICAgICAgIGxldCBjb3VudCA9IHRoaXMucm93c0RhdGEubGVuZ3RoO1xuICAgICAgICAgICAgY291bnQgPSB0aGlzLnNldEZldGNoQWdncmVnYXRlZFZhbHVlKGNvbHVtbiwgY291bnQsIDEpO1xuICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIGNvdW50LCAnQ291bnQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5TVU0gfHxcbiAgICAgICAgICAgIGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkFWRVJBR0VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlczogbnVtYmVyW10gPSB0aGlzLmdldENvbHVtblZhbHVlcyhjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNvbFZhbHVlcyAmJiBjb2xWYWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsZXQgc3VtID0gY29sVmFsdWVzLnJlZHVjZSgoYWNjLCBjdXIpID0+IGFjYyArIGN1ciwgMCk7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5TVU0pIHtcbiAgICAgICAgICAgICAgICBzdW0gPSB0aGlzLnNldEZldGNoQWdncmVnYXRlZFZhbHVlKGNvbHVtbiwgc3VtLCAyKTtcbiAgICAgICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbCwgc3VtLCAnU3VtJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkFWRVJBR0UpIHtcbiAgICAgICAgICAgICAgICBsZXQgYXZlcmFnZSA9IHN1bSAvIGNvbFZhbHVlcy5sZW5ndGggfHwgMDtcbiAgICAgICAgICAgICAgICBhdmVyYWdlID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIGF2ZXJhZ2UsIDMpO1xuICAgICAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoXG4gICAgICAgICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICAgICAgICBhdmVyYWdlLFxuICAgICAgICAgICAgICAgICAgJ0F2ZydcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IHRoZSBhZ2dyZWdhdGFpb24gdmFsdWUgdGhhdCBjb21pbmcgZnJvbSBmZXRjaFxuICBzZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIGFnZ3JlZ2F0ZVZhbHVlLCBhZ2dyZWdhdGVBY3Rpb24pIHtcbiAgICBpZiAodGhpcy5hZ2dyZWdhdGVkUmVzdWx0Py5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBhZ2dyZWdhdGVkQ29sdW1uID0gdGhpcy5hZ2dyZWdhdGVkUmVzdWx0LmZpbmQoKGFnZ3JlZ2F0ZSkgPT4gYWdncmVnYXRlLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgJiYgYWdncmVnYXRlLmFnZ3JlZ2F0aW9uT3BlcmF0aW9uID09PSBhZ2dyZWdhdGVBY3Rpb24pO1xuICAgICAgaWYgKGFnZ3JlZ2F0ZWRDb2x1bW4pIHtcbiAgICAgICAgYWdncmVnYXRlVmFsdWUgPSBhZ2dyZWdhdGVkQ29sdW1uPy52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgYWdncmVnYXRlVmFsdWUgPSBpc05hTihOdW1iZXIoYWdncmVnYXRlVmFsdWUpKSA/IDAgOiBOdW1iZXIoYWdncmVnYXRlVmFsdWUpO1xuICAgIHJldHVybiBhZ2dyZWdhdGVWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgZ3JpZCBBZ2dyZWdhdGUgdmFsdWVzXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVGb290ZXJUZXh0KGNvbHVtbjogYW55LCB2YWx1ZTogbnVtYmVyLCBkZWZhdWx0Q2FwdGlvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNEZWNpbWFsID0gY29sdW1uLmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnO1xuICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uLmZvcm1hdD8uZGlnaXRzSW5mbztcbiAgICBjb25zdCBtaW5GcmFjdGlvbkRpZ2l0cyA9IGZvcm1hdFBhcmFtcz8ubWluRnJhY3Rpb25EaWdpdHMgPz8gZGlnaXRzSW5mbyA/PyAyO1xuICAgIGNvbnN0IG1heEZyYWN0aW9uRGlnaXRzID0gZm9ybWF0UGFyYW1zPy5tYXhGcmFjdGlvbkRpZ2l0cyA/PyBkaWdpdHNJbmZvID8/IDI7XG4gICAgY29uc3QgY2FwdGlvbiA9IGNvbHVtbi5jYXB0aW9uPy5sZW5ndGggPiAwID8gY29sdW1uLmNhcHRpb24gOiBkZWZhdWx0Q2FwdGlvbjtcblxuICAgIGlmICghaXNEZWNpbWFsKSByZXR1cm4gYCR7Y2FwdGlvbn0gJHt2YWx1ZT8udG9GaXhlZCgwKT8ucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgJywnKX0gPC9icj5gO1xuICAgIGNvbnN0IGRlY2ltYWxQb2ludCA9ICgoKSA9PiB7XG4gICAgICBjb25zdCBmYWN0b3IgPSAxMCAqKiBtYXhGcmFjdGlvbkRpZ2l0cztcbiAgICAgIGNvbnN0IFtpbnRQYXJ0LCBkZWNQYXJ0ID0gJyddID0gKE1hdGgudHJ1bmModmFsdWUgKiBmYWN0b3IpIC8gZmFjdG9yKT8udG9TdHJpbmcoKT8uc3BsaXQoJy4nKTtcbiAgICAgIHJldHVybiBpbnRQYXJ0LnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJykgKyAnLicgKyBkZWNQYXJ0Py5wYWRFbmQobWluRnJhY3Rpb25EaWdpdHMsICcwJyk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYCR7Y2FwdGlvbn0gJHtkZWNpbWFsUG9pbnR9IDwvYnI+YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZXQgZGVjaW1hdCBhbmQgbnVtZXJpYyB2YWx1ZXNcbiAgICovXG4gIGFsbG93TGVhZGluZ0RvdChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQ/LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmIChldmVudD8ua2V5ID09PSAnLicgJiYgaW5wdXQ/LnNlbGVjdGlvblN0YXJ0ID09PSAwKSB7XG4gICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlucHV0LnZhbHVlID0gJzAuJztcbiAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRvdEluZGV4ID0gaW5wdXQudmFsdWUuaW5kZXhPZignLicpO1xuICAgICAgICBpZiAoZG90SW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UoZG90SW5kZXggKyAxLCBkb3RJbmRleCArIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGlucHV0LnZhbHVlLmxlbmd0aCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlR3JpZE51bWVyaWNDaGFuZ2UoY29sdW1uOiBhbnksIHJvdzogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlPy50b1N0cmluZygpLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KCcwJyArIHZhbHVlLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmZpZWxkICsgJ19vYmonICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbGVhZGluZ0RvdEhhbmRsZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGdyaWREZWNpbWFsUGFydCA9ICcnO1xuXG4gIGhhbmRsZUdyaWROdW1lcmljS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgIC8vIEhhbmRsZSBsZWFkaW5nIGRvdCAtIHdoZW4gdXNlciB0eXBlcyAuIGluIGFuIGVtcHR5IGZpZWxkIG9yIHdpdGggYWxsIHRleHQgc2VsZWN0ZWRcbiAgICBjb25zdCBpc0FsbFNlbGVjdGVkID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQgPT09IDAgJiYgaW5wdXQuc2VsZWN0aW9uRW5kID09PSBpbnB1dC52YWx1ZS5sZW5ndGg7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJy4nICYmICghaW5wdXQudmFsdWUgfHwgaXNBbGxTZWxlY3RlZCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmxlYWRpbmdEb3RIYW5kbGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ3JpZERlY2ltYWxQYXJ0ID0gJyc7XG4gICAgICBpbnB1dC52YWx1ZSA9ICcwLic7XG4gICAgICAvLyBVcGRhdGUgbW9kZWwgdmFsdWVcbiAgICAgIGlmIChjb2x1bW4uZmllbGQgKyAnX29iaicgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCkge1xuICAgICAgICByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSAwO1xuICAgICAgfVxuICAgICAgLy8gUG9zaXRpb24gY3Vyc29yIGFmdGVyIGRlY2ltYWxcbiAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKDIsIDIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFmdGVyIGxlYWRpbmcgZG90LCBpbnRlcmNlcHQgbnVtZXJpYyBpbnB1dCB0byBidWlsZCB2YWx1ZSBjb3JyZWN0bHlcbiAgICBpZiAodGhpcy5sZWFkaW5nRG90SGFuZGxlZCAmJiAvXlxcZCQvLnRlc3QoZXZlbnQua2V5KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgdGhpcy5ncmlkRGVjaW1hbFBhcnQgPSAodGhpcy5ncmlkRGVjaW1hbFBhcnQgKyBldmVudC5rZXkpLnNsaWNlKDAsIDIpO1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBwYXJzZUZsb2F0KCcwLicgKyB0aGlzLmdyaWREZWNpbWFsUGFydCk7XG5cbiAgICAgIC8vIFVwZGF0ZSBtb2RlbCB2YWx1ZVxuICAgICAgaWYgKGNvbHVtbi5maWVsZCArICdfb2JqJyAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9IG5ld1ZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBuZXdWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgaW5wdXQudmFsdWUgPSBuZXdWYWx1ZS50b1N0cmluZygpO1xuICAgICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ICE9PSAnLicgJiYgZXZlbnQua2V5ICE9PSAnQmFja3NwYWNlJykge1xuICAgICAgdGhpcy5sZWFkaW5nRG90SGFuZGxlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5ncmlkRGVjaW1hbFBhcnQgPSAnJztcbiAgICB9XG4gIH1cblxuICBmaXhHcmlkTnVtZXJpY0lucHV0Q3Vyc29yKGV2ZW50OiBFdmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dC52YWx1ZTtcblxuICAgIC8vIEZpbmQgZGVjaW1hbCBwb2ludCBhbmQgcG9zaXRpb24gY3Vyc29yIHJpZ2h0IGFmdGVyIGl0XG4gICAgY29uc3QgZG90SW5kZXggPSB2YWx1ZS5pbmRleE9mKCcuJyk7XG4gICAgaWYgKGRvdEluZGV4ICE9PSAtMSAmJiBkb3RJbmRleCA8IHZhbHVlLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vIE9ubHkgcmVwb3NpdGlvbiBpZiB0aGVyZSdzIGNvbnRlbnQgYWZ0ZXIgdGhlIGRlY2ltYWxcbiAgICAgIGNvbnN0IGRlc2lyZWRQb3MgPSBkb3RJbmRleCArIDE7XG4gICAgICBpZiAoaW5wdXQuc2VsZWN0aW9uU3RhcnQgIT09IGRlc2lyZWRQb3MpIHtcbiAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UoZGVzaXJlZFBvcywgZGVzaXJlZFBvcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZml4Q3VycmVuY3lJbnB1dEN1cnNvcihldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAvLyBBZnRlciBhbnkgZm9ybWF0dGluZyAoY3VycmVuY3kgb3IgZGVjaW1hbCksIHJlcG9zaXRpb24gY3Vyc29yIGFmdGVyIGRlY2ltYWwgcG9pbnRcbiAgICBjb25zdCBkb3RJbmRleCA9IGlucHV0LnZhbHVlLmluZGV4T2YoJy4nKTtcbiAgICBpZiAoZG90SW5kZXggIT09IC0xKSB7XG4gICAgICAvLyBSZXBvc2l0aW9uIGN1cnNvciByaWdodCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludFxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UoZG90SW5kZXggKyAxLCBkb3RJbmRleCArIDEpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0TnVtZXJpY1ZhbHVlcygpIHtcbiAgICBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm87XG4gICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ3BlcmNlbnQnICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgocm93W2NvbHVtbi5maWVsZF0gKiAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pOyAgICAgICAgIC8vVEhFU0UgQ09NTUVOVEVEIE9VVCBMSU5FUyBTSE9VTEQgUlVOIE9OIFNBVkVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSAqIDEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZChkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8udHlwZSA9PT0gJ2RlY2ltYWwnICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdChyb3dbY29sdW1uLmZpZWxkXSkudG9GaXhlZCgzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZ2V0IGNvbHVtbiB2YWx1ZSBiYXNlZCBvbiBjb2x1bW4gZmllbGRcbiAgICovXG4gIGdldENvbHVtblZhbHVlcyhjb2x1bW46IElHcmlkQ29sdW1uKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLnJvd3NEYXRhXG4gICAgICAubWFwKChyb3cpID0+IHtcbiAgICAgICAgY29uc3Qgb2JqVGV4dCA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0O1xuICAgICAgICBsZXQgdmFsdWUgPSBvYmpUZXh0ICE9IG51bGwgPyBvYmpUZXh0IDogcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIHJldHVybiBpc05hTihOdW1iZXIodmFsdWUpKSA/IDAgOiBOdW1iZXIodmFsdWUpO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHZhbCkgPT4gdmFsICE9IG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEV4cG9ydCB0byBQREZcbiAgICovXG4gIGV4cG9ydFBkZigpIHtcbiAgICB2YXIgZXhwb3J0RGF0YSA9IHRoaXMuc2V0RXhwb3J0RGF0YShbLi4udGhpcy5yb3dzRGF0YV0sIHRydWUpO1xuICAgIGxldCBkb2MgPSBuZXcganNQREYoJ3AnLCAncHQnKTtcbiAgICBkb2MudGFibGUoMSwgMSwgZXhwb3J0RGF0YS5yb3dzLCBleHBvcnREYXRhLmhlYWRpbmdzLCB7IGF1dG9TaXplOiB0cnVlIH0pO1xuICAgIGRvYy5zYXZlKCdFeHBvcnQucGRmJyk7XG4gIH1cblxuICAvKipcbiAgICogIFN1Yi1mdW5jdGlvbiB0byBzZXQgcm93cyBmb3IgZXhwb3J0IHRvIFBkZiwgYW5kIEV4Y2VsXG4gICAqIEByb3dzIHBhcmFtIGZvciByb3dzXG4gICAqIEBpc0V4Y2VsIHBhcmFtIGZvciBleHBvcnQgdG8gZXhjZWwgaW5kaWNhdGlvblxuICAgKi9cbiAgc2V0RXhwb3J0RGF0YShyb3dzOiBhbnlbXSA9IFtdLCBpc1BkZjogYm9vbGVhbiA9IGZhbHNlKTogSUdyaWREYXRhRXhwb3J0IHtcbiAgICBjb25zdCBoZWFkaW5nczogYW55ID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQpO1xuICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBmb3IgKHZhciBwcm9wIGluIHJvdykge1xuICAgICAgICBpZiAoIWhlYWRpbmdzLmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1twcm9wXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQZGYpIHtcbiAgICAgICAgICByb3dbcHJvcF0gPVxuICAgICAgICAgICAgIXJvd1twcm9wXSAmJiB0eXBlb2Ygcm93W3Byb3BdICE9PSAnYm9vbGVhbidcbiAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICA6IHJvd1twcm9wXS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHsgcm93cywgaGVhZGluZ3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBFeHBvcnQgdG8gRXhjZWxcbiAgICovXG4gIGV4cG9ydEV4Y2VsKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuZXhwb3J0VG9FeGNlbD8udW5pcXVlS2V5KSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5nZXRVc2Vyc0RhdGEoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGxldCByb3dzID0gdGhpcy5ncmlkU2VydmljZS5zZXREYXRhRmllbGRzKHJlc3BvbnNlPy5yZWNvcmRzKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXhwb3J0RmlsZShyb3dzKTtcbiAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXhwb3J0RmlsZSh0aGlzLnJvd3NEYXRhKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnRGaWxlKHJlY29yZHMpIHtcbiAgICBsZXQgYXJyOiBhbnkgPSBbXTtcbiAgICByZWNvcmRzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICBsZXQgb2JqOiBhbnkgPSB7fTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGdyaWRIZWFkZXIgPSBjb2x1bW4uaGVhZGVyO1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSB7XG4gICAgICAgICAgY29uc3QgbGlua09iaiA9IHJvd1tjb2x1bW4uZGlzcGxheVRleHQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddO1xuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdICsgJ3wnICsgbGlua09iaj8uaHlwZXJsaW5rO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ialtncmlkSGVhZGVyXSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGFyci5wdXNoKG9iaik7XG4gICAgfSk7XG4gICAgdGhpcy5ncmlkU2VydmljZS5leHBvcnRFeGNlbChhcnIsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLCBFR3JpZEV4Y2VsLkVYUE9SVCk7XG4gIH1cbiAgZ2V0VXNlcnNEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RTZXJ2aWNlLmdldDxhbnlbXSwgUmVxdWVzdER0bz4oJy9EYXRhL0ZldGNoJywge1xuICAgICAgdW5pcXVlS2V5OiB0aGlzLmNvbmZpZ1NlcnZpY2UuZXhwb3J0VG9FeGNlbD8udW5pcXVlS2V5LFxuICAgICAgZmlsdGVyczogdGhpcy5jb25maWdTZXJ2aWNlLmV4cG9ydFRvRXhjZWw/LmZpbHRlcnMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqc2V0IGNvbmZpZyBkYXRhIG9mIGxvb2t1cCBjb250cm9sIGRpYWxvZ1xuICAgKi9cbiAgc2V0TG9va3VwRGlhbG9nQ29uZmlnKHJvdzogYW55LCBjb2x1bW46IGFueSwgZGF0YTogYW55KSB7XG4gICAgbGV0IHNlbGVjdGlvbjogc3RyaW5nID0gJyc7XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZmllbGRdLnRleHQ7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkICYmIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSkge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLmZpZWxkICYmIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICBuZXdSb3dbY29sdW1uLmZpZWxkXSA9IG5ld1Jvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgIHJvdyA9IHsgLi4ubmV3Um93IH07XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGRhdGEpIHtcbiAgICAgIGxldCBvYmogPSBhdXRvU2V0TG9va3VwRGF0YShkYXRhLCByb3cpO1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddID0gb2JqO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcm93RGF0YTogcm93W2NvbHVtbi5maWVsZCArICctZGF0YSddLFxuICAgICAgc2VsZWN0aW9uOiBzZWxlY3Rpb24sXG4gICAgICBjb2x1bW46IGNvbHVtbixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gbGluayBvbiBsb29rdXBDb250cm9sIGNvbnRyb2wgaW4gcmVhZCBvbmx5IG1vZGUgd2hlbiBlZGl0TGluayBzZXQgdHJ1ZVxuICAgKi9cbiAgb3Blbkxvb2t1cEh5cGVybGluayhjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSkge1xuICAgIGNvbnN0IGxvb2t1cEluZm8gPSBjb2x1bW4ubG9va3VwQ29udHJvbDtcbiAgICBpZiAoY29sdW1uLmVkaXRMaW5rID09PSB0cnVlICYmIGxvb2t1cEluZm8uY29tcG9uZW50KSB7XG4gICAgICBjb25zdCBkYXRhID0gbG9va3VwSW5mby5kYXRhID8gbG9va3VwSW5mby5kYXRhIDogbG9va3VwSW5mby5kYXRhLmRhdGE7XG4gICAgICBsZXQgb2JqOiBhbnkgPSB0aGlzLnNldExvb2t1cERpYWxvZ0NvbmZpZyhyb3csIGNvbHVtbiwgZGF0YSk7XG4gICAgICBvYmpbJ2NvbXBvbmVudCddID0gbG9va3VwSW5mby5jb21wb25lbnQ7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLm9wZW5Mb29rdXBEaWFsb2cob2JqKTtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgZHJhZ2dhYmxlRGlhbG9nKGNvbHVtbj8uZmllbGQgPyBjb2x1bW4/LmZpZWxkIDogY29sdW1uPy5oZWFkZXIpXG4gICAgICAgIH0pO1xuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcyAmJiBjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gbG9va3VwIERpYWxvZ1xuICAgKi9cbiAgb3Blbkxvb2t1cERpYWxvZyhjb2x1bW4/OiBhbnksIHJvdzogYW55ID0ge30pIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbHVtbkRhdGEgPSBjb2x1bW4uY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhID8gY29sdW1uLmNvbHVtbi5sb29rdXBDb250cm9sLmRhdGEgOiBjb2x1bW4uY29sdW1uLmRhdGE7XG4gICAgaWYgKHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbCkge1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWFkZXIgPyBjb2x1bW5EYXRhLmhlYWRlciA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVhZGVyIDogJydcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ud2lkdGggPyBjb2x1bW5EYXRhLndpZHRoID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy53aWR0aCA6ICcnXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlaWdodCA/IGNvbHVtbkRhdGEuaGVpZ2h0ID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWlnaHQgOiAnJ1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZVByb3AgPyBjb2x1bW5EYXRhLnZhbHVlUHJvcCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wIDogXCJcIlxuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3AgPyBjb2x1bW5EYXRhLmxhYmVsUHJvcCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wIDogXCJcIlxuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhID8gY29sdW1uRGF0YS5kYXRhID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhIDogJydcbiAgICB9XG5cbiAgICB0aGlzLmRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKGNvbHVtbi5jb21wb25lbnQsIHtcbiAgICAgIC4uLmNvbHVtbkRhdGEsXG4gICAgICBzdHlsZUNsYXNzOiAnbG9va3VwLW1vZGVsJyxcbiAgICAgIGhlaWdodDogY29sdW1uRGF0YT8uaGVpZ2h0ID8gY29sdW1uRGF0YT8uaGVpZ2h0IDogJzkwdmgnLFxuICAgICAgZGF0YToge1xuICAgICAgICBzZWxlY3Rpb246IGNvbHVtbi5zZWxlY3Rpb24sXG4gICAgICAgIGZpZWxkOiBjb2x1bW4uY29sdW1uLmZpZWxkLFxuICAgICAgICBsYWJlbFByb3A6IGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wLFxuICAgICAgICAuLi5jb2x1bW4ucm93RGF0YSxcbiAgICAgIH0sXG4gICAgICBjbG9zYWJsZTogdHJ1ZSxcbiAgICAgIGZvY3VzT25TaG93OiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWZbJ2RpYWxvZ0Nsb3NlJ10gPSB0aGlzLmRpYWxvZ1JlZi5jbG9zZTtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcywgdGhpcy5kaWFsb2dSZWYpO1xuICAgICAgfSk7XG5cbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgLy8gICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSA9IHRoaXMuaW50ZXJjZXB0RGlhbG9nQ2xvc2UuYmluZCh0aGlzKTtcbiAgICAvLyB9LCA4MDApO1xuXG4gICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gcm93W2NvbHVtbi5jb2x1bW4uZmllbGRdPy5uYW1lO1xuICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICB0aGlzLnBhZ2VMb2dnZXJTZXJ2aWNlLnNhdmVQYWdlTG9nZ2VySW5mbyh0aGlzLnJvdXRlci51cmw/LnN1YnN0cmluZygxKSwgY29tcG9uZW50TmFtZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRpYWxvZ1JlZjtcbiAgfVxuXG4gIGludGVyY2VwdERpYWxvZ0Nsb3NlKGRpYWxvZ1JlZjogYW55LCBldmVudDogYW55KSB7XG4gICAgY29uc3QgZGlhbG9nRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdwLWRpYWxvZycpO1xuICAgIGlmICghZGlhbG9nRWwpIHtcbiAgICAgIGRpYWxvZ1JlZj8uZGlhbG9nQ2xvc2UoZXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmb3JtU2F2ZUJ1dHRvbiA9IGRpYWxvZ0VsWzBdPy5xdWVyeVNlbGVjdG9yKCcuZm9ybS1zYXZlLWJ1dHRvbicpO1xuICAgIGNvbnN0IGdyaWRTYXZlQWxsQnV0dG9uID0gZGlhbG9nRWxbMF0/LnF1ZXJ5U2VsZWN0b3IoJy5zYXZlLWFsbC1ncmlkJyk7XG4gICAgY29uc3QgaGFzVW5zYXZlZCA9IChmb3JtU2F2ZUJ1dHRvbiB8fCBncmlkU2F2ZUFsbEJ1dHRvbikgJiYgKHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCB8fCB0aGlzLmZvcm1TZXJ2aWNlLmZpZWxkRm9jdXNlZE91dCk7XG4gICAgaWYgKGhhc1Vuc2F2ZWQpIHtcbiAgICAgIGlmIChjb25maXJtKFwiWW91IHdpbGwgbG9zZSBjaGFuZ2VzIG5vdCBzYXZlZCBvbiBwYWdlLiBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZT9cIikpIHtcbiAgICAgICAgZGlhbG9nUmVmPy5kaWFsb2dDbG9zZShldmVudCk7XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkaWFsb2dSZWY/LmRpYWxvZ0Nsb3NlKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgZGlhbG9nIHJlZiB3aGVuIHBvcHVwIG9wZW5cbiAgc2V0RHluYW1pY0RpYWxvZ1JlZihyZWYpIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwLmdldChyZWYpO1xuICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnQgPSBkaWFsb2dSZWY/Lmluc3RhbmNlIGFzIER5bmFtaWNEaWFsb2dDb21wb25lbnQ7XG4gICAgY29uc3QgYXJpYUxhYmVsbGVkQnkgPSBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5KCk7XG4gICAgZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSA9ICgpID0+IGFyaWFMYWJlbGxlZEJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIG9wZW4gZGlhbG9nIG9uIGxvb2t1cENvbnRyb2wgZmllbGRcbiAgICovXG4gIHNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbjogYW55LCByb3c/OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgbGV0IG9iajogYW55ID0gdGhpcy5zZXRMb29rdXBEaWFsb2dDb25maWcoXG4gICAgICByb3csXG4gICAgICBjb2x1bW4sXG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YVxuICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhIDogY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhXG4gICAgKTtcblxuICAgIG9ialsnY29tcG9uZW50J10gPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uY29tcG9uZW50ID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCA6IGNvbHVtbi5sb29rdXBDb250cm9sPy5jb21wb25lbnQ7XG4gICAgY29uc3QgcmVmID0gdGhpcy5vcGVuTG9va3VwRGlhbG9nKG9iaiwgcm93KTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICAgICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy5ncmlkU2VydmljZS51c2VyU2VhcmNoZWQgPSBmYWxzZTtcbiAgICAgICAgICBsZXQgdmFsdWUgPSBzZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgcmVzXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXMgPSBvYmpDb252ZXJ0VG9Mb3dlcihyZXMpO1xuICAgICAgICAgIGxldCBsYWJlbFByb3AgPSBjb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBsZXQgdmFsdWVQcm9wID0gY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy52YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgbGV0IGNvbHVtbkZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgaWYgKHJvdz8uaGFzT3duUHJvcGVydHkoY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiBjb2x1bW5GaWVsZF07XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiBjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW3ZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IGNvbHVtbkZpZWxkXSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlWydmaWVsZCddID0gY29sdW1uRmllbGQ7XG4gICAgICAgICAgICBpZiAobGFiZWxQcm9wIHx8IHZhbHVlUHJvcCkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiByZXNbbGFiZWxQcm9wXV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiByZXNbbGFiZWxQcm9wXV0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0gdmFsdWUudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChsYWJlbFByb3AgfHwgdmFsdWVQcm9wKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dDogcmVzW2xhYmVsUHJvcCA/IGxhYmVsUHJvcCA6IHZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IHJlc1tjb2x1bW5GaWVsZF1dLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogcmVzW2NvbHVtbkZpZWxkXV0sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0gcmVzW2NvbHVtbkZpZWxkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZF0pID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCB0ZXh0OiByb3dbY29sdW1uLmZpZWxkXSB9O1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0/LnZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogeyB0ZXh0OiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0sIHZhbHVlOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSB9IH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyB0ZXh0OiB7IHRleHQ6IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSwgdmFsdWU6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldIH0gfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmVzKSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IC4uLnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCB0ZXh0OiB7IHRleHQ6IHJlc1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldLCB2YWx1ZTogcmVzW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gfSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzLCByb3cpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAhPT0gb2JqLnNlbGVjdGlvbikge1xuICAgICAgICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNldEZpbHRlckxvb2t1cChjb2x1bW46IGFueSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0TG9va1VwRmlsdGVyKGNvbHVtbiwgdGhpcy5kaWFsb2dTZXJ2aWNlKTtcbiAgfVxuXG4gIC8vIHNldCBsb29rdXAgdmFsdWUgdGhhdCBkaXNwbGF5IGluIHJlYWRPbmx5TW9kZVxuICBzZXRMb29rdXBSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKSB7XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgaWYgKHR5cGVvZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpID09PSBcIm9iamVjdFwiICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0ICYmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCk/Lmhhc093blByb3BlcnR5KCd0ZXh0JykpIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQudGV4dDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy8gQ2hlY2sgY2FsZW5kYXIgdmFsdWUgaXMgY2hhbmdlZCBvciBub3RcbiAgY2FsZW5kYXJDaGFuZ2VFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBsZXQgdmFsdWVDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBjb2x1bW4udGltZU9ubHkgJiZcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAnaGg6bW0gYScpICE9PVxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUsICdoaDptbSBhJylcbiAgICApIHtcbiAgICAgIHZhbHVlQ2hhbmdlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgY29sdW1uLnNob3dUaW1lICYmXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQgaGg6bW0nKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCBoaDptbScpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCcpICE9PVxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUsICd5eXl5LU1NLWRkJylcbiAgICApIHtcbiAgICAgIHZhbHVlQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlQ2hhbmdlKSB7XG4gICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlO1xuICAgICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSB0cnVlO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIC8vIH0sIDI1MCk7XG4gICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSA9ICcnO1xuICB9XG5cbiAgc2V0QXV0b0NvbXBsZXRldmFsdWVPblR5cGUoY29sdW1uOiBhbnksIHJvdzogYW55LCBldmVudDogYW55ID0gW10pIHtcbiAgICBsZXQgdmFsdWUgPSBldmVudD8udGFyZ2V0Py52YWx1ZTtcbiAgICBsZXQgZmllbGQgPSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJiB2YWx1ZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gY29sdW1uLm9wdGlvblZhbHVlID8gY29sdW1uLm9wdGlvblZhbHVlIDogZmllbGQ7XG4gICAgICBjb25zdCBsYWJlbEtleSA9IGNvbHVtbi5vcHRpb25MYWJlbCA/IGNvbHVtbi5vcHRpb25MYWJlbCA6IGNvbHVtbi5kaXNwbGF5RmllbGQgPyBjb2x1bW4uZGlzcGxheUZpZWxkIDogZmllbGQ7XG4gICAgICBpZiAocm93W2ZpZWxkXT8ubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBhbHJlYWR5RXhpc3QgPSByb3dbZmllbGRdPy5maW5kKChyb3dJbmZvKSA9PiByb3dJbmZvW2ZpZWxkXSA9PT0gdmFsdWUpO1xuICAgICAgICBpZiAoIWFscmVhZHlFeGlzdCkge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSBbLi4ucm93W2ZpZWxkXSwgeyBbbGFiZWxLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFtmaWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlIH1dO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb3dbZmllbGRdID0gW3sgW2xhYmVsS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSB9XTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV2ZW50Py50YXJnZXQ/LnZhbHVlKSB7XG4gICAgICBldmVudC50YXJnZXQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgfVxuXG4gIG9uQXV0b0NvbXBsZXRlS2V5RW50ZXJFdmVudChlLCBjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFKSB7XG4gICAgICBpZiAoY29sdW1uLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSAmJiBlLnRhcmdldC52YWx1ZSAmJiAhY29sdW1uLmRhdGE/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNldEF1dG9Db21wbGV0ZXZhbHVlT25UeXBlKGNvbHVtbiwgcm93LCBlKTtcbiAgICAgICAgLy8vY2hlY2sgdGhlIGNvcnJlY3QgZm9ybWF0IGlmIGRhdGEuY29udGFpbnMgY3V6IGl0cyBhbiBhcnJheSBvZiBhcnJheXMgd2l0aCBvYmplY3RzLlxuICAgICAgICBpZiAoY29uZmlybShgRG8geW91IHdhbnQgdG8gYWRkICR7ZS50YXJnZXQudmFsdWV9IHRvIHRoZSBzZWxlY3Rpb24/YCkpIHtcbiAgICAgICAgICBpZiAoY29sdW1uLnVuaXF1ZUtleSkge1xuICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLmdyaWRTZXJ2aWNlXG4gICAgICAgICAgICAgIC5hZGRBdXRvQ29tcGxldGVWYWx1ZShjb2x1bW4udW5pcXVlS2V5LCBlLnRhcmdldC52YWx1ZSwgY29sdW1uLCByb3cpXG4gICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcblxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihlLnRhcmdldC52YWx1ZSwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBvbkZvY3VzRXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm51bWVyaWNWYWx1ZVtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgLy8gUmVzZXQgbGVhZGluZyBkb3QgZmxhZyB3aGVuIGZvY3VzaW5nIG9uIG51bWVyaWMgY2VsbFxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMpIHtcbiAgICAgIHRoaXMubGVhZGluZ0RvdEhhbmRsZWQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBvbkZvY3VzT3V0RXZlbnQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnksIGV2ZW50OiBhbnkgPSAnJykge1xuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMgJiYgdGhpcy5udW1lcmljVmFsdWVbY29sdW1uLmZpZWxkXSAhPT0gcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgIHRoaXMub25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcbiAgICB9XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIHRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgdGhpcy5yZXNvbHZlTG9va3VwSW5wdXRWYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSB8fCAoIWNvbHVtbi5hbGxvd0F1dG9Db21wbGV0ZVNhdmUpKSB7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLmNoZWNrVmFsaWRpdHkoW2NvbHVtbl0sIHJvdyk7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJDaGFuZ2VFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1uLm9uRm9jdXNPdXQpIHtcbiAgICAgICAgY29sdW1uLm9uRm9jdXNPdXQocm93KTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi5vblJldHVybiAmJlxuICAgICAgICBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVFxuICAgICAgKSB7XG4gICAgICAgIGNvbHVtbi5vblJldHVybihyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gIH1cblxuICBzZXRSZXBvcnROYW1lKGNvbHVtbjogSUdyaWRSZXBvcnRCdG4sIHJvdzogYW55KSB7XG4gICAgbGV0IHJlcG9ydDogYW55ID0gJyc7XG4gICAgaWYgKGNvbHVtbi5yZXBvcnRJZCkge1xuICAgICAgcmVwb3J0ID0gY29sdW1uLnJlcG9ydElkO1xuICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddICYmIHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ucmVwb3J0VW5pcXVlS2V5KSB7XG4gICAgICByZXBvcnQgPSByb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnJlcG9ydFVuaXF1ZUtleTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwb3J0ID0gY29sdW1uLnJlcG9ydFVuaXF1ZUtleTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcG9ydDtcbiAgfVxuXG4gIHNldFJlcG9ydFBhcmFtcyhjb2x1bW46IElHcmlkUmVwb3J0QnRuLCByb3c6IGFueSkge1xuICAgIGxldCByZXBvcnRQYXJhbXM6IGFueVtdID0gW107XG4gICAgaWYgKHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSAmJiByb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnJlcG9ydFBhcmFtKSB7XG4gICAgICByZXBvcnRQYXJhbXMgPSByb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnJlcG9ydFBhcmFtO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXBvcnRQYXJhbXMgPSBjb2x1bW4ucGFyYW1zO1xuICAgIH1cbiAgICByZXR1cm4gcmVwb3J0UGFyYW1zO1xuICB9XG5cbiAgc2V0RmlsdGVyRm9jdXNPdXQoY29sOiBhbnksIGZpbHRlcj86IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICB0aGlzLnNldEdyaWRGaWx0ZXIoY29sLCBmaWx0ZXIsIGV2ZW50KTtcbiAgfVxuXG4gIGxvb2t1cEZpbHRlcklucHV0TmdNb2RlbChjb2x1bW46IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjb2x1bW5bJ2ZpbHRlclZhbHVlX29iaiddID09PSAnb2JqZWN0JyAmJiBjb2x1bW5bJ2ZpbHRlclZhbHVlX29iaiddPy50ZXh0ICE9IHVuZGVmaW5lZCA/IGNvbHVtblsnZmlsdGVyVmFsdWVfb2JqJ10udGV4dCA6IGNvbHVtbi5maWx0ZXJWYWx1ZTtcbiAgfVxuXG4gIHNldEdyaWRGaWx0ZXIoY29sOiBJR3JpZENvbHVtbiwgZmlsdGVyPzogYW55LCBldmVudD86IGFueSkge1xuICAgIHRoaXMuZ3JpZEZpbHRlck9iaiA9IHsgY29sdW1uOiBjb2wsIGZpbHRlcjogZmlsdGVyLCBldmVudDogZXZlbnQgfTtcbiAgICBjb25zdCBuZXdDb2x1bW46IGFueSA9IHsgLi4uY29sIH07XG4gICAgLy9jaGFuZ2UgZmlsdGVyIGNhbGVuZGFyIGZvcm1hdFxuICAgIGlmIChuZXdDb2x1bW4udHlwZSA9PT0gJ2RhdGUnICYmIG5ld0NvbHVtbi5maWx0ZXJWYWx1ZSAmJiBuZXdDb2x1bW4uZmlsdGVyPy50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVIpIHtcbiAgICAgIG5ld0NvbHVtbi5maWx0ZXJWYWx1ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGNvbC5maWx0ZXJWYWx1ZS50b1N0cmluZygpLnRyaW0oKSwgJ3l5eXktTU0tZGQnKTtcbiAgICB9XG4gICAgaWYgKG5ld0NvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiAmJiBuZXdDb2x1bW4uZmlsdGVyVmFsdWUgJiYgbmV3Q29sdW1uLmZpbHRlcj8udHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YKSB7XG4gICAgICBsZXQgdmFsdWUgPSBuZXdDb2x1bW4uZmlsdGVyVmFsdWU7XG4gICAgICBpZiAobmV3Q29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQ0hBUikge1xuICAgICAgICBuZXdDb2x1bW4uZmlsdGVyVmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnWScgOiAnTic7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyT2JqKG5ld0NvbHVtbik7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2FwcGx5RmlsdGVyJywgSlNPTi5zdHJpbmdpZnkoZmFsc2UpKTtcbiAgfVxuXG4gIGZpbHRlck9iaihjb2w6IGFueSkge1xuICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICBtYXRjaE1vZGU6IGNvbC5tYXRjaE1vZGUgPyBjb2wubWF0Y2hNb2RlIDogY29sLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCA/IEVNYXRjaE1vZGUuRVFVQUxTIDogJ3N0YXJ0c1dpdGgnLFxuICAgICAgb3BlcmF0b3I6IGNvbC5vcGVyYXRvciA/IGNvbC5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgdGFibGVBbGlhczogY29sLnRhYmxlQWxpYXMgPyBjb2wudGFibGVBbGlhcyA6ICcnLFxuICAgICAgdmFsdWU6IGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QgPyBjb2wuZmlsdGVyVmFsdWUudG9TdHJpbmcoKSA6IGNvbC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgY29sLmhhc093blByb3BlcnR5KCdmaWx0ZXJWYWx1ZV9vYmonKSA/IGNvbFsnZmlsdGVyVmFsdWVfb2JqJ10/LnZhbHVlIDogY29sLmZpbHRlclZhbHVlLFxuICAgIH07XG4gICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkucHVzaChvYmopO1xuICB9XG5cbiAgYXBwbHlFbnRlckV2ZW50KGZpbHRlcjogYW55LCBldmVudDogYW55LCBjb2x1bW46IGFueSkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgPSB0cnVlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG4gICAgdGhpcy5hdXRvTG9hZERhdGEgPSB0cnVlO1xuICAgIC8vdGhpcy5sb2FkaW5nPXRydWU7XG4gICAgdGhpcy5vbkFwcGx5RmlsdGVyLmVtaXQoKTtcbiAgICB0aGlzLmZpbHRlck9iaihjb2x1bW4pO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KHRydWUpKTtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVCkge1xuICAgICAgZmlsdGVyKGNvbHVtbj8uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkpXG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gdGhpcy5kcm9wRG93bkZpbHRlcj8uY29sdW1uPy5maWx0ZXI/LnR5cGUpIHtcbiAgICAgIHRoaXMuZHJvcERvd25GaWx0ZXIuZmlsdGVyKHRoaXMuZHJvcERvd25GaWx0ZXIuZXZlbnQudGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWCAmJiBjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZSkge1xuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gY29sdW1uLmZpbHRlclZhbHVlO1xuICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnWScgOiAnTic7XG4gICAgICAgIGZpbHRlcihjb2x1bW4uZmlsdGVyVmFsdWUpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGZpbHRlcihldmVudD8uY2hlY2tlZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIpIHtcbiAgICAgIGZpbHRlcihldmVudD8udGFyZ2V0Py52YWx1ZSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmdsb2JhbERhdGE/Lmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmhhbmRsZVNlcnZlclNpZGVFdmVudHModGhpcy5ncmlkZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVOdWxsQ2FsZW5kYXIoY29sdW1uOiBJR3JpZENvbHVtbiwgZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoY29sdW1uLmZpbHRlclZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCBldmVudCk7XG4gICAgfVxuICB9XG5cbiAgYmFja3NwYWNlRXZlbnQoZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnICYmXG4gICAgICAoY29sdW1uLmZpbHRlclZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMSB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWU/LnRvU3RyaW5nKCkgPT09ICcnIHx8XG4gICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9PT0gbnVsbClcbiAgICApIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJiBjb2x1bW4uZmlsdGVyVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMucmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVOdWxsRmlsdGVycyhjb2x1bW46IGFueSkge1xuICAgIGlmICh0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSAmJiB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgYXJyID0gWy4uLnRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5XTtcbiAgICAgIGxldCBpbmRleCA9IGFyci5maW5kSW5kZXgoKGkpID0+IGkuZmllbGQgPT09IGNvbHVtbi5maWVsZCk7XG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5ID0gYXJyO1xuICAgIH1cbiAgICBsZXQgaW5kZXggPSB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnM/LmZpbmRJbmRleCgoaSkgPT4geyBpLmZpZWxkID09PSBjb2x1bW4uZmllbGQgfSlcbiAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnM/LnNwbGljZShpbmRleCwgMSlcbiAgfVxuXG4gIC8vIFJlbW92aW5nIEhlYWRlciBGaWx0ZXIgVmFsdWUgdXNpbmcgQmFja3NwYWNlIGtleSBFdmVudCBvciBEZWxldGUga2V5IEV2ZW50LlxuICByZW1vdmluZ0ZpbHRlcnMoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIC8vIEZvciBsb29rdXAgZmlsdGVycywgYWxzbyBjaGVjayBmaWx0ZXJWYWx1ZV9vYmogd2hlbiBpdCdzIGVtcHR5XG4gICAgY29uc3QgaXNMb29rdXBGaWx0ZXJFbXB0eSA9IGNvbHVtbi50eXBlID09PSAnbG9va3VwX2lucHV0JyAmJiAhY29sdW1uLmZpbHRlclZhbHVlO1xuICAgIGlmIChcbiAgICAgICgoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyB8fCBldmVudC5rZXkgPT09ICdEZWxldGUnKSAmJlxuICAgICAgY29sdW1uLmZpbHRlclZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PT0gMCkgfHwgaXNMb29rdXBGaWx0ZXJFbXB0eVxuICAgICkge1xuICAgICAgLy8gQ2xlYXIgZmlsdGVyVmFsdWVfb2JqIGZvciBsb29rdXAgZmlsdGVyc1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnbG9va3VwX2lucHV0Jykge1xuICAgICAgICAoY29sdW1uIGFzIGFueSkuZmlsdGVyVmFsdWVfb2JqID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGxldCBzZWFyY2hGaWx0ZXJzO1xuICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIHNlYXJjaEZpbHRlcnMgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCkgYXMgYW55KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWFyY2hGaWx0ZXJzICYmIHNlYXJjaEZpbHRlcnMuZmlsdGVycykge1xuICAgICAgICBpZiAoc2VhcmNoRmlsdGVycy5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZXQgaW5kZXggPSBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMuZmluZEluZGV4KFxuICAgICAgICAgICAgKHg6IGFueSkgPT4geC5maWVsZCA9PT0gY29sdW1uLmZpZWxkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgaWYgKHNlYXJjaEZpbHRlcnMuZmlsdGVycy5sZW5ndGggPT09IDEgJiYgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gW107XG4gICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsLCBKU09OLnN0cmluZ2lmeShzZWFyY2hGaWx0ZXJzKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSBzZWFyY2hGaWx0ZXJzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIENsaWNrIEJ1dHRvbiBFdmVudCBvbiBHcmlkLlxuICBvbkNsaWNrQnV0dG9uKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIHRoaXMub3BlbkdyaWREaWFsb2coY29sdW1uLCByb3cpO1xuICB9XG5cbiAgLy8gSW52b2tlIG9uQ2xpY2sgRXZlbnQuXG4gIG9uQ2xpY2tFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LICYmIChjb2x1bW4uZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbHVtbi5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSAmJiBjb2x1bW4uZWRpdGFibGUgIT09IHRydWUgJiYgY29sdW1uLmRpc2FibGVkICE9PSB0cnVlKSB7XG4gICAgICB0aGlzLm9uQ2xpY2tFdmVudFRyaWdnZXJlZCA9IHRydWU7XG4gICAgfVxuICAgIC8vIGlmKGNvbHVtbi50eXBlPT09RUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJiByb3dbY29sdW1uLmZpZWxkXSl7XG4gICAgLy8gICB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbHVtbixyb3cpXG4gICAgLy8gfVxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICFyb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmXG4gICAgICAoY29sdW1uLnNob3dUaW1lIHx8IGNvbHVtbi50aW1lT25seSkgJiZcbiAgICAgIGNvbHVtbi5taW51dGVzSW50ZXJ2YWxcbiAgICApIHtcbiAgICAgIHRoaXMuZGVmYXVsdERhdGUgPSBuZXcgRGF0ZShzZXRNaW51dGVzSW50ZXJ2YWwobmV3IERhdGUoKSkpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5vbkNsaWNrICYmIGNvbHVtbi5kaXNhYmxlZCAhPT0gdHJ1ZSAmJiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmFjdGlvbj8uZGlzYWJsZWQgIT09IHRydWUgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkICE9PSB0cnVlICYmIGNvbHVtbi50eXBlICE9PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTikpIHtcbiAgICAgIGNvbHVtbi5vbkNsaWNrKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2x1bW4sIHJvdykge1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAmJiAhQXJyYXkuaXNBcnJheShyb3dbY29sdW1uLmZpZWxkXSkpIHtcbiAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJzdHJpbmdcIiAmJiAhcm93W2NvbHVtbi5maWVsZF0/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbcm93W2NvbHVtbi5maWVsZF1dO1xuICAgICAgfSBlbHNlIGlmIChyb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKT8uaW5jbHVkZXMoJywnKSkge1xuICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdPy5zcGxpdCgnLCcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZF07XG4gIH1cblxuICAvLyBzZXQgdGhlIHNlbGVjdCB2YWx1ZSBvZiBtdWx0aS1zZWxlY3RcbiAgc2hvd09wdGlvbihjb2x1bW4sIHJvdykge1xuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5zZXRNdWx0aVNlbGVjdFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIG9uQ2xlYXJWYWx1ZShjb2x1bW4sIHJvdykge1xuICAgIGlmIChjb2x1bW4/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJiAhcm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyBJbnZva2Ugb25DaGFuZ2UgRXZlbnRcbiAgb25DaGFuZ2VFdmVudChjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBzZXQgZHJvcGRvd24gZGlzcGxheUZpZWxkIHZhbHVlIGJhc2Ugb24gb3B0aW9uTGFiZWwgJiBvcHRpb25WYWx1ZS5cbiAgICB0aGlzLmdyaWRWYWxpZGF0aW9uKGNvbHVtbiwgcm93LCB0cnVlKVxuICAgIHRoaXMuZGlzcGxheUZpZWxkRHJvcGRvd25WYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5vbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSB0cnVlO1xuICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgIH1cbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5vbkNsaWNrRXZlbnRUcmlnZ2VyZWQgPT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUgPSBmYWxzZVxuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLmdlbmVyYXRlUm93c0RhdGFDb3B5ID0gZmFsc2VcbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrQm94Q2hhbmdlRXZlbnQoZXZlbnQ6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93KSB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgcm93W2NvbHVtbi5maWVsZF0gPSBldmVudDtcbiAgICBpZiAodGhpcy5yb3dzQ2hhbmdlLm9ic2VydmVycz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlXG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSB0cnVlO1xuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIGlmIChjb2x1bW4ub25DbGljaykge1xuICAgICAgY29sdW1uLm9uQ2xpY2socm93KTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gIGRpc3BsYXlGaWVsZERyb3Bkb3duVmFsdWUoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKFxuICAgICAgY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQ/Lmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KT8uZmluZChcbiAgICAgICAgKHJvd0luZm8pID0+XG4gICAgICAgICAgcm93SW5mbz8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgICAgY29uc3QgZGlzcGxheUZpZWxkVmFsdWUgPSBjb2x1bW4uZGF0YS5maW5kKFxuICAgICAgICAocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgcmVjb3JkW2NvbHVtbi5vcHRpb25WYWx1ZV0/LnRvU3RyaW5nKCkgPT09XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICk7XG4gICAgICBpZiAoa2V5ICYmIGRpc3BsYXlGaWVsZFZhbHVlKSB7XG4gICAgICAgIHJvd1trZXldID0gZGlzcGxheUZpZWxkVmFsdWVbY29sdW1uLm9wdGlvbkxhYmVsXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgYXV0b1NlYXJjaCBvbiBHcmlkLlxuICBhdXRvU2VhcmNoKGV2ZW50OiBhbnksIGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChldmVudCAmJiBjb2x1bW4gJiYgcm93KSB7XG4gICAgICBjb2x1bW4ub25SZXR1cm4oZXZlbnQucXVlcnksIGNvbHVtbiwgcm93KTtcbiAgICB9XG4gIH1cblxuICAvLyBSZWZyZXNoIGdyaWRcbiAgcmVmcmVzaEdyaWQoKSB7XG4gICAgdGhpcy5yZWxvYWRQYWdlID0gaW50ZXJ2YWwodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZGZpbHRlciA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5ncmlkZmlsdGVyID0geyBmaWx0ZXJzOiBbXSwgc29ydHM6IFtdIH07XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKHRoaXMuZ3JpZGZpbHRlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZW1vdmUgRmlsdGVyVmFsdWVzXG4gIGNsZWFyZ3JpZEZpbHRlcnNWYWx1ZSgpIHtcbiAgICBjb25zdCBnbG9iYWxGaWx0ZXJDbGVhclZhbHVlQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAnY2xlYXJHbG9iYWxGaWx0ZXJCdG4nXG4gICAgKTtcbiAgICBpZiAoZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bikge1xuICAgICAgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0bi5jbGljaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzLmZpbHRlcnMgPSBbXTtcbiAgICAgIGxldCBzZWFyY2hGaWx0ZXJzID0gdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdO1xuICAgICAgc2VhcmNoRmlsdGVycz8uZmlsdGVycz8uZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgIGNvbC52YWx1ZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb2wuZmlsdGVyVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbHRlck9iaihjb2wpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZWRpdEFsbFJvd3NBdE9uY2UoKSB7XG4gICAgaWYgKHRoaXMuZWRpdFJvd1Blcm1pc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ2VkaXRSb3cnKSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMuc29tZSgoY29sdW1uKSA9PiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgKGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkKSkpIHtcbiAgICAgICAgICB0aGlzLmVkaXRBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUmVjb3JkKSB7XG4gICAgICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzYXZlQWxsUm93c0F0T25jZSgpIHtcbiAgICB0aGlzLmdldENsYXNzRm9yRWRpdEFsbFJvd3MoJ3NhdmVSb3cnKTtcbiAgfVxuXG4gIC8vIHJlc2V0IHRoZSBncmlkIHJvd3NWYWx1ZSB0byBvcmlnbmFsIHZhbHVlc1xuICBjYW5jZWxBbGxSb3dzQXRPbmNlKCkge1xuICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YUNvcHldO1xuICAgIHRoaXMucm93c0RhdGFDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnM/LmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLnJvd3NEYXRhPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3IERhdGUocm93W2NvbHVtbi5maWVsZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgIH0pO1xuICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMub25DYW5jZWxBbGxSb3dzLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gIH1cbiAgZ2V0Q2xhc3NGb3JFZGl0QWxsUm93cyhjbGFzc05hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgbGV0IHN1Y2Nlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoY2xhc3NOYW1lID09PSAnZWRpdFJvdycpIHtcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICB0aGlzLm9uUm93RWRpdEluaXQocm93KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldEJ0bnM6IGFueSA9IHRoaXMuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudD8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuICAgIGlmIChnZXRCdG5zICYmIGdldEJ0bnMubGVuZ3RoID4gMCkge1xuICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICBpZiAoY2xhc3NOYW1lID09PSAnc2F2ZVJvdycpIHtcbiAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IHRydWU7XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuaXNHcmlkVmFsaWQgPSB0cnVlO1xuICAgICAgICBjb25zdCByZWNvcmRzJCA9IFtdO1xuICAgICAgICBjb25zdCBhbGxCdG5zID0gQXJyYXkuZnJvbShnZXRCdG5zKTtcblxuICAgICAgICBhbGxCdG5zLmZvckVhY2goKGl0ZW06IGFueSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLnJvd3NEYXRhW2luZGV4XTtcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICBjb25zdCByb3dTYXZlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgICAgaXRlbS5jbGljaygpO1xuICAgICAgICAgICAgICByZXNvbHZlKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZWNvcmRzJC5wdXNoKHJvd1NhdmUpO1xuICAgICAgICAgICAgcm93Ll9pc0VkaXRlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgUHJvbWlzZS5hbGwocmVjb3JkcyQpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuaXNHcmlkVmFsaWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoZWNrbGlzdFJvd3MgPSB0aGlzLnNldFJvd3NEYXRhKHRoaXMuY2hlY2tsaXN0KTtcbiAgICAgICAgICAgICAgY2hlY2tsaXN0Um93cy5mb3JFYWNoKHJvdyA9PiBkZWxldGUgcm93W3RoaXMuZGF0YUtleV0pO1xuICAgICAgICAgICAgICBpZiAodGhpcy5vcmlnaW5hbFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUm93cyA9IGdldENoYW5nZWRSb3dzKGNoZWNrbGlzdFJvd3MsIHRoaXMub3JpZ2luYWxSb3dzLCB0aGlzLmNvbHVtbnMsIHRoaXMuZGF0YUtleSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMucHJlcGFyZVJvd3NGb3JFbWl0KGZpbHRlcmVkUm93cykpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnByZXBhcmVSb3dzRm9yRW1pdChjaGVja2xpc3RSb3dzKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSB0cnVlO1xuICAgICAgICAgICAgICBpZiAodGhpcy5zYXZlUmVjb3JkQXJyYXk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVWYWwgPSAodjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodiA9PSBudWxsIHx8IHYgPT09ICcnKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIHYudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VC8udGVzdCh2KSkgcmV0dXJuIHYuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QodikpIHJldHVybiB2O1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiAvXlxcZHsxLDJ9XFwvXFxkezEsMn1cXC9cXGR7NH0kLy50ZXN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFttLCBkLCB5XSA9IHYuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke3l9LSR7bS5wYWRTdGFydCgyLCAnMCcpfS0ke2QucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0YWJsZUZpZWxkcyA9IHRoaXMuY29sdW1uc1xuICAgICAgICAgICAgICAgICAgLmZpbHRlcihjID0+IGMuZWRpdGFibGUgIT09IGZhbHNlICYmIGMuYWxsb3dTYXZlICE9PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgIC5tYXAoYyA9PiBjLmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICBsZXQgZGlydHlSb3dzID0gdGhpcy5zYXZlUmVjb3JkQXJyYXk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIC8vIE5vcm1hbGl6ZSBib3RoIGN1cnJlbnQgYW5kIG9yaWdpbmFsIHJvd3MgZm9yIGZhaXIgY29tcGFyaXNvbiAocmVtb3ZlcyBkaXNwbGF5IHByb3BlcnRpZXMpXG4gICAgICAgICAgICAgICAgICAvLyBidXQga2VlcCB0aGUgZGF0YUtleSBzbyB3ZSBjYW4gbWFwIGJhY2sgdG8gb3JpZ2luYWwgcm93c1xuICAgICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEN1cnJlbnQgPSB0aGlzLnNhdmVSZWNvcmRBcnJheS5tYXAociA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBub3JtYWxpemVkID0gdGhpcy5ncmlkU2VydmljZS5nZXRBbGxvd1NhdmVSb3dsaXN0KFtyXSwgdGhpcy5jb2x1bW5zKVswXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIGRhdGFLZXkgaXMgcHJlc2VydmVkXG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9ybWFsaXplZCAmJiByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9IHsgW3RoaXMuZGF0YUtleV06IHJbdGhpcy5kYXRhS2V5XSB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkW3RoaXMuZGF0YUtleV0gPSByW3RoaXMuZGF0YUtleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplTnVtZXJpY1ZhbHVlcyhub3JtYWxpemVkKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZE9yaWdpbmFsID0gdGhpcy5vcmlnaW5hbFJvd3MubWFwKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbm9ybWFsaXplZCA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0QWxsb3dTYXZlUm93bGlzdChbcl0sIHRoaXMuY29sdW1ucylbMF07XG4gICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBkYXRhS2V5IGlzIHByZXNlcnZlZFxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5vcm1hbGl6ZWQgJiYgcikge1xuICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQgPSB7IFt0aGlzLmRhdGFLZXldOiByW3RoaXMuZGF0YUtleV0gfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFt0aGlzLmRhdGFLZXldID0gclt0aGlzLmRhdGFLZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZU51bWVyaWNWYWx1ZXMobm9ybWFsaXplZCk7XG4gICAgICAgICAgICAgICAgICB9KTtcblxuXG4gICAgICAgICAgICAgICAgICAvLyBDb21wYXJlIG5vcm1hbGl6ZWQgcm93cywgd2hpY2ggcmVtb3ZlcyBkaXNwbGF5LW9ubHkgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgZGlydHlSb3dzID0gZ2V0Q2hhbmdlZFJvd3Mobm9ybWFsaXplZEN1cnJlbnQsIG5vcm1hbGl6ZWRPcmlnaW5hbCwgdGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFLZXkpO1xuXG4gICAgICAgICAgICAgICAgICAvLyBNYXAgYmFjayB0byBvcmlnaW5hbCBzYXZlUmVjb3JkQXJyYXkgcm93cyB3aXRoIGFsbCBwcm9wZXJ0aWVzIGludGFjdFxuICAgICAgICAgICAgICAgICAgZGlydHlSb3dzID0gZGlydHlSb3dzLm1hcChub3JtYWxpemVkUm93ID0+XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5LmZpbmQociA9PiByW3RoaXMuZGF0YUtleV0gPT09IG5vcm1hbGl6ZWRSb3dbdGhpcy5kYXRhS2V5XSlcbiAgICAgICAgICAgICAgICAgICkuZmlsdGVyKHIgPT4gcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkaXJ0eVJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgZGlydHlSb3dzLmZvckVhY2gocm93ID0+IGRlbGV0ZSByb3dbdGhpcy5kYXRhS2V5XSk7IC8vIHJlbW92ZSB0ZW1wX2lkIGJlZm9yZSBlbWl0dGluZyDigJQgaXQncyBvbmx5IHVzZWQgZm9yIGRpcnR5LXJvdyBjb21wYXJpc29uXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5wcmVwYXJlUm93c0ZvckVtaXQoZGlydHlSb3dzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2F2ZVJlY29yZEFycmF5ID0gW107XG4gICAgICAgICAgdGhpcy5lZGl0QWxsUm93c0F0T25jZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2F2ZUFsbFJlY29yZCA9IGZhbHNlO1xuICAgICAgICBpZiAoY2xhc3NOYW1lID09ICdjYW5jZWxSb3cnKSB7XG4gICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBnZXRCdG5zKSB7XG4gICAgICAgICAgICBpdGVtLmNsaWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG4gIC8vRm9jdXNlZCBjYWxlbmRhciBpbnB1dCBvbiBzZWxlY3QgZGF0ZVxuICBzZWxlY3REYXRlKGNvbHVtbjogYW55KSB7XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkKT8uZm9jdXMoKTtcbiAgfVxuXG4gIC8vYXBwbHkgZmlsdGVyIG9uIGdyaWQgd2hlbiBzZWFyY2ggYnRuIGNsaWNrZWRcbiAgYXBwbHlHcmlkRmlsdGVyQnRuKCkge1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkID0gdHJ1ZTtcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcblxuICAgIGxldCBmaWx0ZXJJbkRpYWxvZzogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICBsZXQgZ2xvYmFsRmlsdGVyQXBwbHlCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNlYXJjaGJ0bklkKTtcbiAgICBpZiAoZmlsdGVySW5EaWFsb2cgJiYgZmlsdGVySW5EaWFsb2cubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZ2xvYmFsU2VhcmNoQnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgICBpZiAoZ2xvYmFsU2VhcmNoQnRuKSB7XG4gICAgICAgIGdsb2JhbFNlYXJjaEJ0bi5jbGljaygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsRmlsdGVyQXBwbHlCdG4pIHtcbiAgICAgIGdsb2JhbEZpbHRlckFwcGx5QnRuLmNsaWNrKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ3JpZEZpbHRlck9iaiAmJiBPYmplY3Qua2V5cyh0aGlzLmdyaWRGaWx0ZXJPYmopPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFwcGx5RW50ZXJFdmVudChcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmZpbHRlcixcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmV2ZW50LFxuICAgICAgICB0aGlzLmdyaWRGaWx0ZXJPYmouY29sdW1uXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuY2hlY2tsaXN0ID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTtcbiAgfVxuXG4gIGhhbmRsZUhlYWRlckNoZWNrYm94Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC5jaGVja2VkO1xuICAgIGNvbnN0IGRhdGFUb1NlbGVjdCA9IHRoaXMudGFibGU/LnZhbHVlIHx8IHRoaXMucm93c0RhdGEgfHwgW107XG5cbiAgICBpZiAoaXNDaGVja2VkKSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IFsuLi5kYXRhVG9TZWxlY3RdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IFtdO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFsuLi50aGlzLmNoZWNrbGlzdF07XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSB0cnVlO1xuICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcbiAgICB0aGlzLm9uTXVsdGlTZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkUm93cyk7XG4gIH1cblxuICBvblRhYmxlU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IGV2ZW50IHx8IFtdO1xuICAgIHRoaXMuY2hlY2tsaXN0ID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzXTtcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IHRydWU7XG4gICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgLy8gaW52b2tlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XG4gIG11bHRpQ2hlY2tCb3hPbmNsaWNrKHJvd0luZm86IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LmNoZWNrZWQ7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSBFR3JpZFNlbGVjdGlvblR5cGUuTVVMVElQTEUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIHJvd0luZm8/Lmxlbmd0aCA+IDAgJiYgaXNDaGVja2VkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0ID0gWy4uLnJvd0luZm9dO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyb3dJbmZvKSAmJiAhaXNDaGVja2VkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW107XG4gICAgICB9XG4gICAgICBjb25zdCBhbHJlYWR5RXhpc3QgPSB0aGlzLmNoZWNrbGlzdC5zb21lKChyb3cpID0+IHJvd1t0aGlzLmRhdGFLZXldID09IHJvd0luZm9bdGhpcy5kYXRhS2V5XSk7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgaXNDaGVja2VkICYmICFhbHJlYWR5RXhpc3QpIHtcbiAgICAgICAgdGhpcy5jaGVja2xpc3QucHVzaChyb3dJbmZvKTtcbiAgICAgIH0gZWxzZSBpZiAoYWxyZWFkeUV4aXN0ICYmICFpc0NoZWNrZWQpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrbGlzdC5maW5kSW5kZXgoKHJvdykgPT4gcm93W3RoaXMuZGF0YUtleV0gPT0gcm93SW5mb1t0aGlzLmRhdGFLZXldKTtcbiAgICAgICAgdGhpcy5jaGVja2xpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gW3Jvd0luZm9dXG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gWy4uLnRoaXMuY2hlY2tsaXN0XTtcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IHRydWU7XG4gICAgdGhpcy5hcHBSZWYudGljaygpO1xuICAgIHRoaXMub25NdWx0aVNlbGVjdGlvbkNoYW5nZS5lbWl0KCh0aGlzLnNlbGVjdGVkUm93cykpO1xuICB9XG5cbiAgc2V0Um93c0RhdGEocm93c0RhdGEpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dzRGF0YSkpIHtcbiAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJvdyA9IHRoaXMucmVtb3ZlUm93T2JqKHJvdyk7XG4gICAgICAgIHJvdyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Um93VmFsdWUocm93KTtcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd3NEYXRhID0gdGhpcy5yZW1vdmVSb3dPYmoocm93c0RhdGEpO1xuICAgICAgcm93c0RhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldFJvd1ZhbHVlKHJvd3NEYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd3NEYXRhO1xuICB9XG5cbiAgcmVtb3ZlUm93T2JqKHJvdzogYW55KSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgaWYgKGtleXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ19vYmonKSkge1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIG5vcm1hbGl6ZU51bWVyaWNWYWx1ZXMocm93OiBhbnkpOiBhbnkge1xuICAgIGlmICghcm93KSByZXR1cm4gcm93O1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7IC4uLnJvdyB9O1xuICAgIE9iamVjdC5rZXlzKG5vcm1hbGl6ZWQpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBub3JtYWxpemVkW2tleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZSAhPT0gJycgJiYgIWlzTmFOKE51bWJlcih2YWx1ZSkpKSB7XG4gICAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVSb3dzRm9yRW1pdChyb3dzOiBhbnkgfCBhbnlbXSk6IGFueSB8IGFueVtdIHtcbiAgICBpZiAoIXJvd3MpIHJldHVybiByb3dzO1xuICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHJvd3MpO1xuICAgIGNvbnN0IHJvd3NUb0ZpbHRlciA9IGlzQXJyYXkgPyByb3dzIDogW3Jvd3NdO1xuXG4gICAgLy8gRmlsdGVyIHRvIG9ubHkgcm93cyB0aGF0IHdlcmUgYWN0dWFsbHkgZWRpdGVkIChjaGVjayBfaXNFZGl0ZWQgZmxhZyBvciBsb29rdXAgb2JqZWN0IGNoYW5nZXMpXG4gICAgY29uc3QgZWRpdGVkUm93cyA9IHJvd3NUb0ZpbHRlci5maWx0ZXIoKHJvdzogYW55KSA9PiB7XG4gICAgICBpZiAoIXJvdykgcmV0dXJuIGZhbHNlOyAvLyBTa2lwIG51bGwvdW5kZWZpbmVkIHJvd3NcbiAgICAgIGlmIChyb3c/Ll9pc0VkaXRlZCkgcmV0dXJuIHRydWU7XG4gICAgICAvLyBDaGVjayBpZiByb3cgaGFzIGxvb2t1cCBmaWVsZHMgd2l0aCBvYmplY3QgdmFsdWVzIChpbmRpY2F0aW5nIGEgY2hhbmdlKVxuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocm93KS5zb21lKCh2YWw6IGFueSkgPT5cbiAgICAgICAgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsICYmICd2YWx1ZScgaW4gdmFsICYmICd0ZXh0JyBpbiB2YWxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBJZiBubyByb3dzIG1hcmtlZCBhcyBlZGl0ZWQsIHVzZSBhbGwgcm93cyAoaW4gY2FzZSBnZXRDaGFuZ2VkUm93cyBhbHJlYWR5IGZpbHRlcmVkIHRoZW0pXG4gICAgY29uc3Qgcm93c1RvUHJvY2VzcyA9IGVkaXRlZFJvd3MubGVuZ3RoID4gMCA/IGVkaXRlZFJvd3MgOiByb3dzVG9GaWx0ZXI7XG4gICAgbGV0IGZpbHRlcmVkID0gdGhpcy5ncmlkU2VydmljZS5nZXRBbGxvd1NhdmVSb3dsaXN0KHJvd3NUb1Byb2Nlc3MsIHRoaXMuY29sdW1ucyk7XG5cbiAgICAvLyBFbnN1cmUgZmlsdGVyZWQgaXMgYW4gYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmlsdGVyZWQpKSB7XG4gICAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkID8gW2ZpbHRlcmVkXSA6IFtdO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3Qgc2NhbGFyIHZhbHVlcyBmcm9tIGxvb2t1cCBvYmplY3RzIGFuZCByZW1vdmUgaW50ZXJuYWwgZmxhZ3NcbiAgICBmaWx0ZXJlZCA9IGZpbHRlcmVkXG4gICAgICAuZmlsdGVyKChyb3c6IGFueSkgPT4gcm93KSAvLyBSZW1vdmUgbnVsbC91bmRlZmluZWQgYmVmb3JlIHByb2Nlc3NpbmdcbiAgICAgIC5tYXAoKHJvdzogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7IC4uLnJvdyB9O1xuICAgICAgICBPYmplY3Qua2V5cyhub3JtYWxpemVkKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgLy8gRXh0cmFjdCBzY2FsYXIgdmFsdWUgZnJvbSBsb29rdXAgb2JqZWN0c1xuICAgICAgICAgIGlmICh0eXBlb2Ygbm9ybWFsaXplZFtrZXldID09PSAnb2JqZWN0JyAmJiBub3JtYWxpemVkW2tleV0/LnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IG5vcm1hbGl6ZWRba2V5XS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gUmVtb3ZlIGludGVybmFsIGZsYWdzXG4gICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKCdfJykgfHwga2V5LmVuZHNXaXRoKCdfb2JqJykgfHwga2V5LmVuZHNXaXRoKCctZGF0YScpKSB7XG4gICAgICAgICAgICBkZWxldGUgbm9ybWFsaXplZFtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gaXNBcnJheSA/IGZpbHRlcmVkIDogKGZpbHRlcmVkLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZFswXSA6IG51bGwpO1xuICB9XG5cbiAgYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGZpbHRlcihldmVudC50YXJnZXQpO1xuICB9XG5cbiAgc2VhcmNoRHJvcGRvd25GaWx0ZXIoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgZXZlbnQpO1xuICAgIHRoaXMuZHJvcERvd25GaWx0ZXIgPSB7IGZpbHRlcjogZmlsdGVyLCBldmVudDogZXZlbnQsIGNvbHVtbjogY29sdW1uIH07XG4gICAgLy8gaWYgKGNvbHVtbi5hbGxvd1NlYXJjaCAhPT0gdHJ1ZSkge1xuICAgIC8vICAgdGhpcy5hcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlciwgZXZlbnQpO1xuICAgIC8vIH1cbiAgfVxuXG4gIGxvb2t1cENsZWFyVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93PzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29sdW1uLmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9ICcnIDogJydcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0ID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udGV4dCA9ICcnIDogJydcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gJyc7XG4gICAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgZGVsZXRlIGNvbHVtblsnZmlsdGVyVmFsdWVfb2JqJ107XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGNvbCkgPT4gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zW2luZGV4XS5maWx0ZXJWYWx1ZSA9ICcnO1xuICAgICAgICBkZWxldGUgdGhpcy5jb2x1bW5zW2luZGV4XVsnZmlsdGVyVmFsdWVfb2JqJ107XG4gICAgICB9XG4gICAgICB0aGlzLnNldEZpbHRlckZvY3VzT3V0KGNvbHVtbik7XG4gICAgfVxuICAgIHRoaXMuYnJvd3NlckNsb3NlRXZlbnQodHJ1ZSk7XG4gICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgY29sdW1uLm9uQ2hhbmdlKHJvdyk7XG4gICAgfVxuICB9XG5cbiAgb25DYWxlbmRhck1vZGVsQ2hhbmdlKHZhbHVlOiBhbnksIHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uKTogdm9pZCB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheUZpZWxkID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAmJiBjb2x1bW4uZm9ybWF0ID09IEVHcmlkRm9ybWF0VHlwZS5TSE9SVERBVEUpIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdNTS9kZC95eXl5Jyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICAvLyBpbnZva2Ugd2hlbiBjbGljayBoZWFkZXIgY2hlY2tib3ggZmlsdGVyXG4gIGNsaWNrQ2hlY2tCb3hGaWx0ZXIoY29sdW1uOiBJR3JpZENvbHVtbiwgZXZlbnQpIHtcbiAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBldmVudDtcbiAgICBpZiAoY29sdW1uLmFsbG93U2VsZWN0QWxsKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTlxuICAgICAgICAmJlxuICAgICAgICBjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NoZWNrYm94JyAmJiBjb2x1bW4uZmlsdGVyaW5nICE9IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LmRpc2FibGVkICE9PSB0cnVlICYmICFjb2x1bW4uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gPSBjb2x1bW4uZmlsdGVyVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvd3NDaGFuZ2Uub2JzZXJ2ZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vbkNoZWNrQm94RmlsdGVyQ2xpY2suZW1pdChjb2x1bW4pO1xuICB9XG4gIC8vc2V0IGhlYWRlciBjaGVja2JveCB2YWx1ZSBmb3IgZ2V0dGluZyBhbGwgY29sdW1ucyBvbiBzdGF5IGFkbWluXG4gIHNldEhlYWRlckNoZWNrQm94VmFsdWUodmFsdWU6IGFueSkge1xuICAgIHRoaXMuaXNJbmNsdWRlZEFsbENvbHVtbnMuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICAvLyBzZXQgY2FsZW5kYXIgMiBPciA0IGRpZ2l0IHllYXIgZm9ybWF0XG4gIGNhbGVuZGFySW5wdXRWYWx1ZShjb2x1bW46IGFueSwgcm93OiBhbnksIGlzRmlsdGVySW5wdXQgPSBmYWxzZSkge1xuICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmICghY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICBjb25zdCBjbGFzc05hbWUgPSBpc0ZpbHRlcklucHV0ID8gY29sdW1uLmZpZWxkICsgJy1maWx0ZXItaW5wdXQnIDogY29sdW1uLmZpZWxkICsgcm93W3RoaXMuZGF0YUtleV07XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSlbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKHZhbDogYW55KSA9PiB7XG4gICAgICAgIGlmICghdmFsPy50YXJnZXQ/LnZhbHVlPy5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgICAgaWYgKHZhbD8udGFyZ2V0Py52YWx1ZT8ubGVuZ3RoID09IDggfHwgY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09IEVHcmlkRm9ybWF0VHlwZS5TSE9SVERBVEUpIHtcbiAgICAgICAgICAgIHZhbC50YXJnZXQudmFsdWUgPSB2YWw/LnRhcmdldD8udmFsdWU/LnJlcGxhY2UoLyhcXGR7Mn0pKFxcZHsyfSkoXFxkezR9KS8sICckMS8kMi8kMycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmICh2YWw/LnRhcmdldD8udmFsdWU/Lmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KSg/PVxcZCkvZywgJyQxLycpO1xuICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWwudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5ZWFyID0gdmFsPy50YXJnZXQ/LnZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLycpWzJdO1xuICAgICAgICBpZiAoeWVhciAmJiB5ZWFyLmxlbmd0aCA9PSA0KSB7XG4gICAgICAgICAgaWYgKGlzRmlsdGVySW5wdXQpIHtcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk/LnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLVVTXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3l5JztcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHZhbD8udGFyZ2V0Py52YWx1ZSk/LnRvTG9jYWxlRGF0ZVN0cmluZyhcImVuLVVTXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPT0gMikge1xuICAgICAgICAgIGlmIChpc0ZpbHRlcklucHV0KSB7XG4gICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBuZXcgRGF0ZSh2YWw/LnRhcmdldD8udmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNhbGVuZGFyRm9ybWF0ID0gJ21tL2RkL3knO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuICBjaGFuZ2VQYXNzd29yZFR5cGUoY29sdW1uLCByb3cpIHtcbiAgICB2YXIgdGV4dFR5cGUgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA/IChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS50ZXh0VHlwZSA9PSAncGFzc3dvcmQnID8gJ3RleHQnIDogJ3Bhc3N3b3JkJykgOiBjb2x1bW4udGV4dFR5cGUgPT0gJ3Bhc3N3b3JkJyA/ICd0ZXh0JyA6ICdwYXNzd29yZCc7XG4gICAgdGhpcy5ncmlkU2VydmljZS5zZXRHcmlkUm93UHJvcFZhbHVlKHJvdywgW3sgcHJvcE5hbWU6IEVHcmlkUm93UHJvcE5hbWUuVEVYVFRZUEUsIHByb3BWYWx1ZTogdGV4dFR5cGUsIGZpZWxkOiBjb2x1bW4uZmllbGQgfV0pO1xuXG4gIH1cblxuICBzaG93Q29uZmlybWF0aW9uKGV2ZW50OiBJR3JpZFBhZ2luYXRpb25FdmVudCkge1xuICAgIGNvbnN0IHRhYmxlV3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIucC1kYXRhdGFibGUtd3JhcHBlclwiKTtcbiAgICBjb25zdCB0YWJsZVdyYXBwZXJTY3JvbGxUb3AgPSB0YWJsZVdyYXBwZXI/LnNjcm9sbFRvcDtcbiAgICBjb25zdCB0YWJsZVdyYXBwZXJTY3JvbGxMZWZ0ID0gdGFibGVXcmFwcGVyPy5zY3JvbGxMZWZ0O1xuICAgIGlmICh0YWJsZVdyYXBwZXJTY3JvbGxUb3ApIHtcbiAgICAgIHRoaXMuc2Nyb2xsUG9zaXRpb25ZID0gdGFibGVXcmFwcGVyU2Nyb2xsVG9wO1xuICAgICAgdGhpcy5zY3JvbGxQb3NpdGlvblggPSB0YWJsZVdyYXBwZXJTY3JvbGxMZWZ0O1xuICAgIH1cblxuICAgIGlmICghdGhpcy5QYWdlQ2hhbmdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzO1xuICAgIH1cbiAgICBpZiAoY29uZmlybShcIllvdSB3aWxsIGxvc2UgY2hhbmdlcyBub3Qgc2F2ZWQgb24gcGFnZS4gV291bGQgeW91IGxpa2UgdG8gY29udGludWU/XCIpID09IHRydWUpIHtcbiAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gdHJ1ZTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpXG4gICAgICB0aGlzLmhhbmRsZVNlcnZlclNpZGVQYWdpbmF0aW9uKGV2ZW50KTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY29sdW1uRm9jdXNlZE91dCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLlBhZ2VDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuZmlyc3QgPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuZmlyc3QgPSBNYXRoLmZsb29yKHRoaXMuY3VycmVudFBhZ2UgLyBldmVudC5yb3dzKTtcbiAgICAgICAgICAgIHRoaXMudGFibGUucm93cyA9IGV2ZW50LnJvd3M7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0YWJsZVdyYXBwZXJTY3JvbGxUb3AgPT09IDApIHtcbiAgICAgICAgICAgIHRhYmxlV3JhcHBlci5zY3JvbGxUbyh0aGlzLnNjcm9sbFBvc2l0aW9uWCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFibGVXcmFwcGVyLnNjcm9sbFRvKHRoaXMuc2Nyb2xsUG9zaXRpb25YLCB0aGlzLnNjcm9sbFBvc2l0aW9uWSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIHRoaXMuYXV0b0xvYWREYXRhID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbG9va3VwSW5wdXROZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSk6IGFueSB7XG4gICAgaWYgKHJvdz8uaXNOZXcgfHwgcm93Py5pc25ldykge1xuICAgICAgcmV0dXJuIHR5cGVvZiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQ/LnRleHQgIT0gdW5kZWZpbmVkID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQ/LnRleHQgOiByb3dbY29sdW1uLmZpZWxkXTtcbiAgICB9XG5cbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCkge1xuICAgICAgcmV0dXJuIHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0ID09PSAnb2JqZWN0JyAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dD8udGV4dCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dD8udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uLmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICB9XG5cbiAgZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiByb3c/Lltjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhIHx8IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YSB8fCB7fTtcbiAgfVxuXG4gIGlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxvb2t1cERhdGEgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KTtcbiAgICByZXR1cm4gbG9va3VwRGF0YT8uYWxsb3dJbnB1dCA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldExvb2t1cENvbmZpZ0RhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8uZGF0YSB8fCB7fTtcbiAgfVxuXG4gIG5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh2YWx1ZSA/PyAnJykudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCAnICcpLnRyaW0oKTtcbiAgfVxuXG4gIHNldExvb2t1cElucHV0VmFsdWUocm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLm5vcm1hbGl6ZUxvb2t1cElucHV0VmFsdWUodmFsdWUpO1xuICAgIGNvbnN0IGRpc3BsYXlGaWVsZEtleSA9IGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3Qgcm93T2JqS2V5ID0gY29sdW1uLmZpZWxkICsgJ19vYmonO1xuICAgIGNvbnN0IGN1cnJlbnRPYmogPSByb3dbcm93T2JqS2V5XSB8fCB7fTtcblxuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbm9ybWFsaXplZFZhbHVlO1xuICAgIGlmIChkaXNwbGF5RmllbGRLZXkpIHtcbiAgICAgIHJvd1tkaXNwbGF5RmllbGRLZXldID0gbm9ybWFsaXplZFZhbHVlO1xuICAgIH1cbiAgICByb3dbcm93T2JqS2V5XSA9IHtcbiAgICAgIC4uLmN1cnJlbnRPYmosXG4gICAgICB0ZXh0OiBub3JtYWxpemVkVmFsdWUgPyB7IHRleHQ6IG5vcm1hbGl6ZWRWYWx1ZSwgdmFsdWU6IG5vcm1hbGl6ZWRWYWx1ZSB9IDogJycsXG4gICAgfTtcbiAgfVxuXG4gIGJ1aWxkTG9va3VwUmVzb2x1dGlvbkZpbHRlcnMoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnksIGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZFZhbHVlOiBzdHJpbmcpOiBhbnlbXSB7XG4gICAgY29uc3QgbG9va3VwQ29uZmlnRGF0YSA9IHRoaXMuZ2V0TG9va3VwQ29uZmlnRGF0YShjb2x1bW4sIHJvdyk7XG4gICAgY29uc3QgZmlsdGVycyA9IEFycmF5LmlzQXJyYXkobG9va3VwQ29uZmlnRGF0YT8uZmlsdGVycykgPyBbLi4ubG9va3VwQ29uZmlnRGF0YS5maWx0ZXJzXSA6IFtdO1xuICAgIGNvbnN0IGxhYmVsUHJvcCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdmFsdWVQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LnZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKTtcblxuICAgIE9iamVjdC5lbnRyaWVzKGxvb2t1cENvbmZpZ0RhdGEgfHwge30pLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBrZXk/LnRvTG93ZXJDYXNlKCkgIT09ICd1bmlxdWVrZXknICYmXG4gICAgICAgIGtleT8udG9Mb3dlckNhc2UoKSAhPT0gJ2ZpbHRlcnMnICYmXG4gICAgICAgIGtleT8udG9Mb3dlckNhc2UoKSAhPT0gbGFiZWxQcm9wICYmXG4gICAgICAgIGtleT8udG9Mb3dlckNhc2UoKSAhPT0gdmFsdWVQcm9wICYmXG4gICAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdmFsdWUgIT09IG51bGwgJiZcbiAgICAgICAgdmFsdWUgIT09ICcnICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCdcbiAgICAgICkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgIGZpZWxkOiBrZXksXG4gICAgICAgICAgbWF0Y2hNb2RlOiBFTWF0Y2hNb2RlLkVRVUFMUyxcbiAgICAgICAgICBvcGVyYXRvcjogRU9wZXJhdG9yLkFORCxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgZmllbGQ6IGZpZWxkTmFtZSxcbiAgICAgIG1hdGNoTW9kZTogRU1hdGNoTW9kZS5FUVVBTFMsXG4gICAgICBvcGVyYXRvcjogRU9wZXJhdG9yLkFORCxcbiAgICAgIHZhbHVlOiBmaWVsZFZhbHVlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICBhc3luYyBmZXRjaExvb2t1cFJlc29sdXRpb25SZWNvcmQoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnksIGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZFZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IGxvb2t1cENvbmZpZ0RhdGEgPSB0aGlzLmdldExvb2t1cENvbmZpZ0RhdGEoY29sdW1uLCByb3cpO1xuICAgIGNvbnN0IHVuaXF1ZUtleSA9IGxvb2t1cENvbmZpZ0RhdGE/LnVuaXF1ZUtleTtcblxuICAgIGlmICghdW5pcXVlS2V5IHx8ICFmaWVsZE5hbWUgfHwgIWZpZWxkVmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5yZXF1ZXN0U2VydmljZS5nZXQ8YW55W10sIGFueT4oJy9EYXRhL0ZldGNoJywge1xuICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgIGZpbHRlcnM6IHRoaXMuYnVpbGRMb29rdXBSZXNvbHV0aW9uRmlsdGVycyhjb2x1bW4sIHJvdywgZmllbGROYW1lLCBmaWVsZFZhbHVlKSxcbiAgICAgICAgcGFnZVNpemU6IDEsXG4gICAgICAgIHBhZ2U6IDEsXG4gICAgICB9KS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXMpID0+IHJlc29sdmUocmVzKSxcbiAgICAgICAgKCkgPT4gcmVzb2x2ZShudWxsKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2U/LnJlY29yZHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKT8uWzBdIHx8IG51bGw7XG4gIH1cblxuICBhcHBseVJlc29sdmVkTG9va3VwUmVjb3JkKHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCByZXNvbHZlZFJlY29yZDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFyZXNvbHZlZFJlY29yZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGxhYmVsUHJvcCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgdmFsdWVQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LnZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlID0gcmVzb2x2ZWRSZWNvcmRbdmFsdWVQcm9wIHx8IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgY29uc3QgcmVzb2x2ZWRUZXh0ID0gcmVzb2x2ZWRSZWNvcmRbbGFiZWxQcm9wIHx8IGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgfHwgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcblxuICAgIGlmIChyZXNvbHZlZFZhbHVlID09PSB1bmRlZmluZWQgfHwgcmVzb2x2ZWRUZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJlc29sdmVkVmFsdWU7XG4gICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA9IHJlc29sdmVkVGV4dDtcbiAgICB9XG4gICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7XG4gICAgICAuLi4ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gfHwge30pLFxuICAgICAgdGV4dDogeyB0ZXh0OiByZXNvbHZlZFRleHQsIHZhbHVlOiByZXNvbHZlZFZhbHVlIH0sXG4gICAgfTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHJlc29sdmVMb29rdXBJbnB1dFZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlZFZhbHVlID0gdGhpcy5ub3JtYWxpemVMb29rdXBJbnB1dFZhbHVlKHRoaXMubG9va3VwSW5wdXROZ01vZGVsKHJvdywgY29sdW1uKSk7XG4gICAgY29uc3Qgc2VhcmNoRmllbGQgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8uc2VhcmNoRmllbGQ7XG4gICAgY29uc3QgbGFiZWxQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LmxhYmVsUHJvcDtcbiAgICBjb25zdCB2YWx1ZVByb3AgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8udmFsdWVQcm9wO1xuXG4gICAgaWYgKCF0eXBlZFZhbHVlIHx8ICghbGFiZWxQcm9wICYmICF2YWx1ZVByb3ApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoTWF0Y2ggPSBzZWFyY2hGaWVsZFxuICAgICAgPyBhd2FpdCB0aGlzLmZldGNoTG9va3VwUmVzb2x1dGlvblJlY29yZChjb2x1bW4sIHJvdywgc2VhcmNoRmllbGQsIHR5cGVkVmFsdWUpXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAodGhpcy5hcHBseVJlc29sdmVkTG9va3VwUmVjb3JkKHJvdywgY29sdW1uLCBzZWFyY2hNYXRjaCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGxhYmVsTWF0Y2ggPSBsYWJlbFByb3BcbiAgICAgID8gYXdhaXQgdGhpcy5mZXRjaExvb2t1cFJlc29sdXRpb25SZWNvcmQoY29sdW1uLCByb3csIGxhYmVsUHJvcCwgdHlwZWRWYWx1ZSlcbiAgICAgIDogbnVsbDtcblxuICAgIGlmICh0aGlzLmFwcGx5UmVzb2x2ZWRMb29rdXBSZWNvcmQocm93LCBjb2x1bW4sIGxhYmVsTWF0Y2gpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZU1hdGNoID1cbiAgICAgIHZhbHVlUHJvcCAmJiB2YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCkgIT09IGxhYmVsUHJvcD8udG9Mb3dlckNhc2UoKVxuICAgICAgICA/IGF3YWl0IHRoaXMuZmV0Y2hMb29rdXBSZXNvbHV0aW9uUmVjb3JkKGNvbHVtbiwgcm93LCB2YWx1ZVByb3AsIHR5cGVkVmFsdWUpXG4gICAgICAgIDogbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmFwcGx5UmVzb2x2ZWRMb29rdXBSZWNvcmQocm93LCBjb2x1bW4sIHZhbHVlTWF0Y2gpO1xuICB9XG5cbiAgLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHdoZW4gc2V0dGluZyB0aGUgbmdNb2RlbCB2YWx1ZVxuICBjaGFuZ2VMb29rdXBJbnB1dE5nTW9kZWwocm93OiBhbnksIGNvbHVtbjogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGhlYWRlciBmaWx0ZXIgbG9va3VwIGNsZWFyICh3aGVuIHJvdyBpcyAnbG9va3VwRmlsdGVyJyBzdHJpbmcpXG4gICAgaWYgKHJvdyA9PT0gJ2xvb2t1cEZpbHRlcicpIHtcbiAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgLy8gQ2xlYXIgZmlsdGVyVmFsdWVfb2JqIHdoZW4gaW5wdXQgaXMgY2xlYXJlZFxuICAgICAgaWYgKCF2YWx1ZSB8fCB2YWx1ZS50b1N0cmluZygpLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlX29iaiA9IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgaWYgKHRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgdGhpcy5zZXRMb29rdXBJbnB1dFZhbHVlKHJvdywgY29sdW1uLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb25Mb29rdXBJbnB1dFBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3RlZFZhbHVlID0gdGhpcy5ub3JtYWxpemVMb29rdXBJbnB1dFZhbHVlKGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSk7XG4gICAgaWYgKCFwYXN0ZWRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZXRMb29rdXBJbnB1dFZhbHVlKHJvdywgY29sdW1uLCBwYXN0ZWRWYWx1ZSk7XG4gICAgYXdhaXQgdGhpcy5yZXNvbHZlTG9va3VwSW5wdXRWYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5vbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIGFzeW5jIG9uTG9va3VwSW5wdXRFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCB0eXBlZFZhbHVlID0gdGhpcy5ub3JtYWxpemVMb29rdXBJbnB1dFZhbHVlKHRhcmdldD8udmFsdWUpO1xuXG4gICAgaWYgKCF0aGlzLmlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLnNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbiwgcm93KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNldExvb2t1cElucHV0VmFsdWUocm93LCBjb2x1bW4sIHR5cGVkVmFsdWUpO1xuICAgIGNvbnN0IGlzUmVzb2x2ZWQgPSBhd2FpdCB0aGlzLnJlc29sdmVMb29rdXBJbnB1dFZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpO1xuXG4gICAgaWYgKFxuICAgICAgdHlwZWRWYWx1ZSAmJlxuICAgICAgIWlzUmVzb2x2ZWQgJiZcbiAgICAgIHRoaXMuaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSAmJlxuICAgICAgY29sdW1uLmFsbG93QXV0b0NvbXBsZXRlU2F2ZSAmJlxuICAgICAgY29sdW1uLnVuaXF1ZUtleVxuICAgICkge1xuICAgICAgaWYgKGNvbmZpcm0oYERvIHlvdSB3YW50IHRvIGFkZCAke3R5cGVkVmFsdWV9IHRvIHRoZSBsb29rdXA/YCkpIHtcbiAgICAgICAgdGhpcy5ncmlkU2VydmljZS5hZGRBdXRvQ29tcGxldGVWYWx1ZShjb2x1bW4udW5pcXVlS2V5LCB0eXBlZFZhbHVlLCBjb2x1bW4sIHJvdykudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHR5cGVkVmFsdWUsIGNvbHVtbiwgcm93KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZ2V0QXV0b0NvbXBsZXRlTmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBhbnkge1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICByZXR1cm4gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZF0/LnRleHQpIHtcbiAgICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkXT8udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZF07XG4gIH1cblxuICAvLyBGdW5jdGlvbiB0byBzZXQgbmdNb2RlbCB2YWx1ZVxuICBjaGFuZ2VBdXRvQ29tcGxldGVOZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IGZpZWxkID0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgIHJvd1tmaWVsZF0gPSB2YWx1ZTtcbiAgfVxuXG4gIHNldElucHV0TmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBhbnkge1xuICAgIGlmIChyb3cudW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gJyc7ICAvLyBJZiAncm93LnVuZGVmaW5lZCcgaXMgdHJ1ZSwgcmV0dXJuIGVtcHR5IHN0cmluZ1xuICAgIH1cblxuICAgIC8vIEV2YWx1YXRlIG90aGVyIGNvbmRpdGlvbnMgYmFzZWQgb24gcm93IGFuZCBjb2x1bW4gZGF0YVxuICAgIGlmICh0aGlzLmFsbG93RGlzYWJsZWQoY29sdW1uLCByb3cpICYmIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSkge1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICB9XG5cbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWUpIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWU7XG4gICAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGRdOyAgLy8gRmFsbGJhY2sgdG8gJ3Jvd1tjb2x1bW4uZmllbGRdJ1xuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZSAod2hlbiBuZ01vZGVsIGNoYW5nZXMpXG4gIGNoYW5nZUlucHV0TmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHVwZGF0ZSB5b3VyIGRhdGEgbW9kZWwgYmFzZWQgb24gdGhlIHZhbHVlXG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlO1xuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udmFsdWUgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgb25JbnB1dENoYW5nZSh2YWx1ZTogYW55LCByb3c6IGFueSwgY29sdW1uOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoYW5nZUlucHV0TmdNb2RlbChyb3csIGNvbHVtbiwgdmFsdWUpO1xuICB9XG5cbiAgZ2V0Q2hlY2tib3hWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGlmICghcm93W2NvbHVtbi5maWVsZF0pIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS50ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NoZWNrZWQodmFsdWUudGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXNDaGVja2VkKHZhbHVlKTtcbiAgfVxuXG4gIGlzQ2hlY2tlZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbWF0Y2hWYWx1ZSA9IFsnMScsICd0cnVlJywgJ3knXTtcbiAgICByZXR1cm4gbWF0Y2hWYWx1ZS5pbmNsdWRlcyh2YWx1ZT8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuICBnZXRNb3JlQ29sdW1ucygpOiBJR3JpZENvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zPy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbj8uc2hvd0luTW9yZSkgPz8gW107XG4gIH1cblxuICBidWlsZE1vcmVJdGVtc0ZvclJvdyhyb3c6IGFueSk6IE1lbnVJdGVtW10ge1xuICAgIGNvbnN0IGl0ZW1zOiBNZW51SXRlbVtdID0gW107XG4gICAgY29uc3QgbW9yZUNvbHVtbnMgPSB0aGlzLmdldE1vcmVDb2x1bW5zKCk7XG5cbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBtb3JlQ29sdW1ucykge1xuICAgICAgY29uc3QgbGFiZWwgPSBjb2wuaGVhZGVyIHx8IGNvbC5kaXNwbGF5VGV4dCB8fCBjb2wuZmllbGQ7XG4gICAgICBjb25zdCBoeXBlcmxpbmsgPSByb3c/LltgJHtjb2wuZmllbGR9X29iamBdPy5oeXBlcmxpbmsgfHwgcm93Py5bY29sLmZpZWxkXTtcblxuICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xuICAgICAgICBpdGVtcy5wdXNoKGh5cGVybGluayA/IHtcbiAgICAgICAgICBsYWJlbCwgaWNvbjogY29sLmljb24sIHVybDogaHlwZXJsaW5rLFxuICAgICAgICAgIHRhcmdldDogY29sLm9wZW5Jbk5ld1RhYiB8fCBjb2wudGFyZ2V0ID09PSBFR3JpZGxpbmsuQkxBTksgPyBFR3JpZGxpbmsuQkxBTksgOiBFR3JpZGxpbmsuU0VMRlxuICAgICAgICB9IDogeyBsYWJlbCwgaWNvbjogY29sLmljb24sIGNvbW1hbmQ6ICgpID0+IGNvbC5vbkNsaWNrPy4ocm93KSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRykge1xuICAgICAgICBpdGVtcy5wdXNoKHsgbGFiZWwsIGljb246IGNvbC5pY29uLCBjb21tYW5kOiAoKSA9PiB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbCwgcm93KSB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoY29sLm9uQ2xpY2spIHtcbiAgICAgICAgaXRlbXMucHVzaCh7IGxhYmVsLCBpY29uOiBjb2wuaWNvbiwgY29tbWFuZDogKCkgPT4gY29sLm9uQ2xpY2shKHJvdykgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGhhc01vcmVDb2x1bW5zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldE1vcmVDb2x1bW5zKCk/Lmxlbmd0aCA+IDA7XG4gIH1cblxuICBoYXNNb3JlSXRlbXMocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZE1vcmVJdGVtc0ZvclJvdyhyb3cpPy5sZW5ndGggPiAwO1xuICB9XG5cbiAgc2hvd01vcmUoZXZlbnQ6IGFueSwgcm93OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRNb3JlTWVudSA9IHRoaXMuYnVpbGRNb3JlSXRlbXNGb3JSb3cocm93KTtcbiAgICB0aGlzLm1vcmVNZW51Py50b2dnbGUoZXZlbnQpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJncmlkLWNvbXBvbmVudC13cmFwcGVyXCI+XG4gIDxwLWNvbmZpcm1EaWFsb2cgW3N0eWxlXT1cInsgd2lkdGg6ICc1MHZ3JyB9XCIgKm5nSWY9XCJ1c2VJbmxpbmVDUlVEXCIga2V5PVwiaGFuZGxlSW5saW5lQ1JVRFwiPjwvcC1jb25maXJtRGlhbG9nPlxuICA8cC1jb25maXJtRGlhbG9nIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtY29uZmlybS1kaWFsb2dcIiAqbmdJZj1cImNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAga2V5PVwiaGFuZGxlY29sdW1uQWN0aW9uc1wiPjwvcC1jb25maXJtRGlhbG9nPlxuICA8ZGl2IGNsYXNzPVwiZ2xvYmFsLWZpbHRlci1idXR0b25zLXdyYXBwZXIgZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cblxuICAgIDwhLS0gYnV0dG9uIGZvciBhcHBseSB2YWx1ZSBvbiBHcmlkIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCIoKGZpbHRlcmluZyAmJiAhaGlkZUZpbHRlciApIHx8IHNob3dGaWx0ZXJidG4pXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLXNlYXJjaFwiXG4gICAgICAoY2xpY2spPVwiYXBwbHlHcmlkRmlsdGVyQnRuKClcIiBbY2xhc3NdPVwiXG4gIHNlYXJjaEdyaWRGaWx0ZXIgPyAncC1idXR0b24tc3VjY2VzcyBhcHBseS1maWx0ZXItYnRuIGZpbHRlci1idG4nIDogJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbiBhcHBseS1maWx0ZXItYnRuIGZpbHRlci1idG4nXG4gIFwiPjwvYnV0dG9uPlxuXG4gICAgPCEtLSBidXR0b24gZm9yIGNsZWFyIHZhbHVlIG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cIigoZmlsdGVyaW5nICYmICFoaWRlRmlsdGVyICl8fCBzaG93RmlsdGVyYnRuKVwiIHBCdXR0b24gaWQ9XCJjbGVhckdyaWRGaWx0ZXJWYWx1ZXNCdXR0b25cIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGljb249XCJwaSBwaS1yZXBsYXlcIiAoY2xpY2spPVwiY2xlYXJncmlkRmlsdGVyc1ZhbHVlKClcIiBbY2xhc3NdPVwiXG4gICAgICBjbGVhckdyaWRGaWx0ZXIgPyAnZmlsdGVyLWJ0bicgOiAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uIGZpbHRlci1idG4nXG4gICAgICBcIiBjbGFzcz0nZ2xvYmFsLXJlZnJlc2ggZ2xvYmFsLWJ0bic+PC9idXR0b24+XG5cbiAgICA8IS0tIGJ1dHRvbiBmb3Igc2F2ZSBhbGwgZ3JpZCBhdCBvbmNlIC0tPlxuICAgIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cImVkaXRBbGxSb3dzICYmIGVkaXRSb3dQZXJtaXNzaW9uXCIgaWQ9XCJzYXZlQWxsR3JpZFZhbHVlc1wiIGljb249XCJwaSBwaS1jaGVja1wiIFtsYWJlbF09XCInU2F2ZSdcIlxuICAgICAgW2NsYXNzXT1cImhpZGVHcmlkU2F2ZUJ1dHRvbiA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24gc2F2ZS1hbGwtZ3JpZCcgOiAndWktYnV0dG9uLWluZm8gc2F2ZS1hbGwtZ3JpZCdcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzYXZlQWxsUm93c0F0T25jZSgpXCI+PC9idXR0b24+XG5cbiAgICA8IS0tIGJ1dHRvbiBmb3IgY2FuY2VsIGFsbCBncmlkIGF0IG9uY2UgLS0+XG4gICAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwiZWRpdEFsbFJvd3MgJiYgIWhpZGVHcmlkQ2FuY2VsQnV0dG9uXCIgaWQ9XCJlZGl0QnRuR2xvYmFsdmFsdWVzXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbbGFiZWxdPVwiJ0NhbmNlbCdcIiBpY29uPVwicGkgcGktdGltZXNcIiBjbGFzcz1cInVpLWJ1dHRvbi1pbmZvXCIgKGNsaWNrKT1cImNhbmNlbEFsbFJvd3NBdE9uY2UoKVwiPjwvYnV0dG9uPlxuXG4gICAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBtdWx0aVNlbGVjdCBvbiBHcmlkIC0tPlxuICAgIDxzcGFuICpuZ0lmPVwiYWxsb3dDb2x1bW5Ub2dnbGVcIj5cbiAgICAgIDxwLW11bHRpU2VsZWN0IFtzaG93VG9nZ2xlQWxsXT1cImZhbHNlXCIgb3B0aW9uRGlzYWJsZWQ9XCJmYWxzZVwiIFtvcHRpb25zXT1cInNlbGVjdGVkVG9nZ2xlQ29sdW1uc1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb2x1bW5zXCIgb3B0aW9uTGFiZWw9XCJoZWFkZXJcIiBzZWxlY3RlZEl0ZW1zTGFiZWw9XCJ7MH0gY29sdW1ucyBzZWxlY3RlZFwiXG4gICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtbXVsdGlzZWxlY3QtaGVhZGVyLWJ1dHRvblwiIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIENvbHVtbnNcIj5cbiAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICA8L3NwYW4+XG5cbiAgICA8IS0tIGhlYWRlciBCdXR0b24gZm9yIEFkZGluZyBuZXcgUm93IG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiBwQnV0dG9uICpuZ0lmPVwidXNlSW5saW5lQ1JVRCAmJiBhZGRSb3dQZXJtaXNzaW9uICYmICFoaWRlQWRkQnRuXCIgdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCInQWRkJ1wiIHBBZGRSb3dcbiAgICAgIFt0YWJsZV09XCJjb21wb25lbnRUYWJsZVJlZlwiIFtwcmV2ZW50TmV3Um93XT1cInByZXZlbnROZXdSb3dcIiBbbmV3Um93XT1cIm5ld0dyaWRSb3dcIiBbaWRdPVwiZGF0YUtleVwiXG4gICAgICBwVG9vbHRpcD1cIkFkZCBOZXcgUm93XCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgaWNvbj1cInBpIHBpLXBsdXNcIlxuICAgICAgW2NsYXNzXT1cIid1aS1idXR0b24taW5mbyBnbG9iYWwtYWRkLWJ0bicrZ3JpZE5hbWVcIiAoY2xpY2spPVwiYWRkTmV3Um93KG5ld0dyaWRSb3csIHRydWUpXCIgcFJpcHBsZT48L2J1dHRvbj5cblxuXG4gICAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBFeGNlbCBGaWxlIG9uIEdyaWQgLS0+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImFsbG93RXhwb3J0VG9FeGNlbFwiIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1maWxlLWV4Y2VsXCIgKGNsaWNrKT1cImV4cG9ydEV4Y2VsKClcIlxuICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzXCIgcFRvb2x0aXA9XCJFeHBvcnQgdG8gRXhjZWxcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG4gICAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBQREYgRmlsZSBvbiBHcmlkIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCJhbGxvd0V4cG9ydFRvUGRmXCIgdHlwZT1cImJ1dHRvblwiIHBCdXR0b24gaWNvbj1cInBpIHBpLWZpbGUtcGRmXCIgKGNsaWNrKT1cImV4cG9ydFBkZigpXCJcbiAgICAgIGNsYXNzPVwicC1idXR0b24td2FybmluZyBtci0yIG1sLTJcIiBwVG9vbHRpcD1cIkV4cG9ydCB0byBQZGZcIiB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIiBwUmlwcGxlPjwvYnV0dG9uPlxuXG4gICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCByZXBvcnRCdXR0b24gb2YgcmVwb3J0QnV0dG9uc1wiIGNsYXNzPVwidWktYnV0dG9uLWluZm8gbXItMiBtbC0yXCI+XG4gICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gKm5nSWYgPVwiIXJlcG9ydEJ1dHRvbi5oaWRkZW5cIltyZXBJZF09XCJyZXBvcnRCdXR0b24ucmVwb3J0SWRcIiBbbGFiZWxdPVwicmVwb3J0QnV0dG9uLmxhYmVsXCIgW3BhcmFtc109XCJyZXBvcnRCdXR0b24ucGFyYW1zXCJcbiAgICAgIFtzaG93RGlhbG9nXT1cInJlcG9ydEJ1dHRvbi5zaG93RGlhbG9nXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICA8L2Rpdj4gLS0+XG5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZXBvcnRCdXR0b24gb2YgcmVwb3J0QnV0dG9uc1wiPlxuICAgICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gKm5nSWY9XCIhcmVwb3J0QnV0dG9uLmhpZGRlblwiIFtyZXBJbmZvXT1cInJlcG9ydEJ1dHRvblwiIFtsYWJlbF09XCJyZXBvcnRCdXR0b24ubGFiZWxcIlxuICAgICAgICBbcGFyYW1zXT1cInJlcG9ydEJ1dHRvbi5wYXJhbXNcIiBbaWNvbl09XCJyZXBvcnRCdXR0b24uaWNvblwiIFtjbGFzc109XCJyZXBvcnRCdXR0b24uY2xhc3NcIlxuICAgICAgICBbc2hvd0RpYWxvZ109XCJyZXBvcnRCdXR0b24uc2hvd0RpYWxvZ1wiIFtyZXBvcnRUeXBlXT1cIiByZXBvcnRCdXR0b24ucmVwb3J0VHlwZVwiXG4gICAgICAgIFtyZXBvcnRIZWFkZXJdPVwicmVwb3J0QnV0dG9uLnJlcG9ydEhlYWRlclwiIFtyZXBvcnRGb290ZXJdPVwicmVwb3J0QnV0dG9uLnJlcG9ydEZvb3RlclwiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICA8L2Rpdj5cblxuICA8cC10YWJsZSAqbmdJZj1cIiFpc0dyaWRIaWRkZW5cIiBpZD1cIm15LXRhYmxlXCIgW3ZhbHVlXT1cInJvd3NEYXRhXCIgW2NvbHVtbnNdPVwic2VsZWN0ZWRDb2x1bW5zXCIgc29ydE1vZGU9XCJtdWx0aXBsZVwiXG4gICAgW2xhenldPVwidXNlU2VydmVyU2lkZUV2ZW50cyB8fCBwYWdpbmF0aW9uXCIgW3BhZ2luYXRvcl09XCJwYWdpbmF0aW9uXCJcbiAgICBbYWx3YXlzU2hvd1BhZ2luYXRvcl09XCJwYWdpbmF0aW9uICYmIHRvdGFsUmVjb3JkcyA+IDBcIiBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXG4gICAgW2NsYXNzXT1cIicgZ3JpZC1jb21wb25lbnQtbWFpbi10YWJsZSAnICsgKHBhZ2luYXRpb24gfHwgIXJvd3NEYXRhLmxlbmd0aCA/ICcgcGFnaW5hdGlvbiAnIDogJycpICsgKHRhYmxlU3R5bGUuaW5jbHVkZXMoJ3dpZHRoJykgPyAnIGhhc1RhYmxlV2lkdGhTdHlsZSAnIDogJycpICsgKGF1dG9SZXNpemUgPyAnJyA6ICd0YWJsZS1sYXlvdXQtYXV0bycpIFwiXG4gICAgKG9uQ29sUmVzaXplKT1cIm9uQ29sdW1uUmVzaXplKCRldmVudCxkdClcIiBbcmVzaXphYmxlQ29sdW1uc109XCJ0cnVlXCIgcmVzcG9uc2l2ZUxheW91dD1cInNjcm9sbFwiXG4gICAgY29sdW1uUmVzaXplTW9kZT1cImV4cGFuZFwiIFtyb3dzXT1cImRlZmF1bHRSb3dzXCIgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwic2V0UGFnaW5hdGlvbkxlbmd0aFwiIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwic2hvd0N1cnJlbnRQYWdlUmVwb3J0XCJcbiAgICBjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlPVwiU2hvd2luZyB7Zmlyc3R9IHRvIHtsYXN0fSBvZiB7e1xuICAgICAgdG90YWxSZWNvcmRzXG4gICAgfX0gZW50cmllc1wiIFtsb2FkaW5nXT1cIiFzZXRHcmlkUmVmcmVzaFRpbWUgPyBsb2FkaW5nIDogZmFsc2VcIlxuICAgIChvblNvcnQpPVwic29ydERpc2FibGVkID8gJycgOiBoYW5kbGVTb3J0Q2hhbmdlKCRldmVudClcIiAob25GaWx0ZXIpPVwiaGFuZGxlRmlsdGVyQ2hhbmdlKCRldmVudClcIlxuICAgIChvbkxhenlMb2FkKT1cInNob3VsZFJ1blNlcnZlclNpZGUoJGV2ZW50KSA/IGhhbmRsZVNlcnZlclNpZGVFdmVudHMoJGV2ZW50LCBkdCkgOiBudWxsXCJcbiAgICAob25QYWdlKT1cImdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPyBzaG93Q29uZmlybWF0aW9uKCRldmVudCkgOiBoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbigkZXZlbnQpXCIgI2R0XG4gICAgW2RhdGFLZXldPVwiZGF0YUtleVwiIFtzZWxlY3Rpb25dPVwic2VsZWN0ZWRSb3dzXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblRhYmxlU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIiBzZWxlY3Rpb25Nb2RlPVwibXVsdGlwbGVcIiBbc2Nyb2xsYWJsZV09XCJzY3JvbGxhYmxlXCJcbiAgICBbdGFibGVTdHlsZV09XCJ0YWJsZVN0eWxlXCIgW3Njcm9sbEhlaWdodF09XCJzY3JvbGxIZWlnaHRcIiBlZGl0TW9kZT1cInJvd1wiIFtlZGl0aW5nUm93S2V5c109XCJlZGl0aW5nUm93S2V5c1wiXG4gICAgW3Jvd0hvdmVyXT1cInJvd0hvdmVyXCIgW25nQ2xhc3NdPVwic2V0Q2xhc3NhQW5kSWQoZHQpXCIgKG9uUm93UmVvcmRlcik9XCJvblJvd1Jlb3JkZXIoJGV2ZW50KVwiPlxuXG4gICAgPGRpdiAqbmdJZj1cInJvd0FjdGlvbnMubGVuZ3RoID4gMCAmJiByb3dBY3Rpb25zLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHJvd0FjdGlvbiBvZiByb3dBY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2xhYmVsXT1cInJvd0FjdGlvbi50aXRsZVwiIFtjbGFzc109XCJyb3dBY3Rpb24uY2xhc3NcIlxuICAgICAgICAgIChjbGljayk9XCJyb3dBY3Rpb24ub25DbGljayhzZWxlY3RlZFJvd3MpXCI+PC9idXR0b24+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGhlYWRlciBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2xzPlxuICAgICAgPHRyPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uICYmIHNlbGVjdGlvblR5cGUgPT09ICdtdWx0aXBsZSdcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXNlbGVjdGlvblwiXG4gICAgICAgICAgaWQ9XCJ7e2FsbG93U2VsZWN0aW9uSGVhZGVyfX1cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRoLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXRhYmxlLWhlYWRlci1pbm5lci1kaXYtMlxuICAgICAgICAgICAgICAgICAgdGFibGUtaGVhZGVyLWlubmVyLWRpdiBkaXYtbGFzdC1pbm5lci1odG1sLWlzLWljb25cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LWdyb3ctMVwiPiB7e2FsbG93U2VsZWN0aW9uSGVhZGVyfX0gPC9zcGFuPlxuICAgICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94ICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiIGJpbmFyeT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJoYW5kbGVIZWFkZXJDaGVja2JveENoYW5nZSgkZXZlbnQpXCI+PC9wLXRhYmxlSGVhZGVyQ2hlY2tib3g+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb24gJiYgc2VsZWN0aW9uVHlwZSA9PT0gJ3NpbmdsZSdcIiBpZD1cIlNlbGVjdFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIlxuICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtc2VsZWN0aW9uXCI+XG4gICAgICAgICAgU2VsZWN0XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uIGlkPVwiQWN0aW9uc1wiXG4gICAgICAgICAgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bicgXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPlxuICAgICAgICAgIEFjdGlvbnNcbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2xzXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uPy5jb2x1bW5XaWR0aCA/IGNvbHVtbj8uY29sdW1uV2lkdGgrJ3B4JyA6IGNvbHVtbj8uY3VzdG9tV2lkdGgrJ3B4J1wiXG4gICAgICAgICAgaWQ9XCJ7e2NvbHVtbi5oZWFkZXJ9fVwiIFthdHRyLmRhdGEtY29sdW1uLWhlYWRlcl09XCJjb2x1bW4/LmhlYWRlclwiIFtwU29ydGFibGVDb2x1bW5dPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLnR5cGUgPT09ICdib29sZWFuJyA/ICdjaGVja2JveC10aCcgOiAnJ1wiXG4gICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cInNvcnREaXNhYmxlZCAmJiB1c2VTZXJ2ZXJTaWRlRXZlbnRzID8gdHJ1ZSA6IGNvbHVtbi5zb3J0aW5nID09PSBmYWxzZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGgtY29udGVudC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtdGFibGUtaGVhZGVyLWlubmVyLWRpdi0xIHRhYmxlLWhlYWRlci1pbm5lci1kaXYgZGl2LWxhc3QtaW5uZXItaHRtbC1pcy1pY29uXCI+XG4gICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCInc2VsZidcIiBbY2xhc3NdPVwiJ2ZsZXgtZ3Jvdy0xJ1wiPnt7IGNvbHVtbi5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5pc1JlcXVpcmVkXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudCByZXF1aXJlZC1zdGFyXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8cC1zb3J0SWNvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1uLnNvcnRpbmcgIT09IGZhbHNlICYmIGNvbHVtbj8udHlwZSAhPT0gJ211bHRpcGxlJyAmJiAoIShlZGl0QWxsUm93cyAmJiBwYWdpbmF0aW9uKSB8fCBzb3J0SWNvbkhpZGRlbilcIlxuICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiAoY2xpY2spPVwiaGFuZGxlQ3VzdG9tU29ydGluZygpXCI+PC9wLXNvcnRJY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggKm5nSWY9XCJoYXNNb3JlQ29sdW1ucygpXCIgcFJlc2l6YWJsZUNvbHVtbiBpZD1cIk1vcmVBY3Rpb25zXCIgY2xhc3M9XCJtb3JlLWFjdGlvbnMtdGhcIj5Nb3JlPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gaWQ9XCJBY3Rpb25zXCJcbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCI+QWN0aW9uczwvdGg+XG4gICAgICA8L3RyPlxuICAgICAgPHRyICpuZ0lmPVwiZmlsdGVyaW5nICYmICFoaWRlRmlsdGVyXCI+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb25cIiBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj48L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgIWRpc2FibGVkU2F2ZUJ0biAmJiB1c2VJbmxpbmVDUlVEXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2xzXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sdW1uPy5jb2x1bW5XaWR0aCA/IGNvbHVtbj8uY29sdW1uV2lkdGgrJ3B4JyA6IGNvbHVtbj8uY3VzdG9tV2lkdGgrJ3B4J1wiXG4gICAgICAgICAgaWQ9XCJ7e2NvbHVtbi5oZWFkZXJ9fVwiIFtuZ1N3aXRjaF09XCJjb2x1bW4/LmZpbHRlcj8udHlwZVwiXG4gICAgICAgICAgW2NsYXNzXT1cImhpZGVGaWx0ZXJPcHRpb25zID8gJ2hpZGUtdGFibGUtZmlsdGVyIHRlbXAnIDogJ3RlbXAnXCI+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uZmlsdGVyaW5nICE9PSBmYWxzZVwiIFtjbGFzc109XCJjb2x1bW4uZmlsdGVyPy5zaG93RmlsdGVyID8gJycgOiAnaGlkZS1maWx0ZXItaWNvbidcIj5cbiAgICAgICAgICAgIDwhLS0gVGV4dCBpbnB1dCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCIndGV4dCdcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidpbnB1dCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIFtjbGFzc109XCJjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiBbbmFtZV09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIihjb2x1bW4uYXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBjb2x1bW4uZmlsdGVyQXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBhdXRvQ29tcGxldGUgPT09IGZhbHNlKSA/ICdvZmYnIDogJ29uJ1wiXG4gICAgICAgICAgICAgICAgICAoa2V5dXApPVwicmVtb3ZpbmdGaWx0ZXJzKCRldmVudCwgY29sdW1uKTtiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIiBwSW5wdXRUZXh0IC8+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIE51bWVyaWMgaW5wdXQgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW3R5cGVdPVwiJ251bWVyaWMnXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtZXJpY19pbnB1dCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIFtjbGFzc109XCJjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKG9uQmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXApPVwicmVtb3ZpbmdGaWx0ZXJzKCRldmVudCwgY29sdW1uKTtiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXV0b2NvbXBsZXRlXT1cImNvbHVtbi5maWx0ZXJBdXRvQ29tcGxldGUgPT09IHRydWUgPyAnb24nIDogJ29mZidcIj48L3AtaW5wdXROdW1iZXI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGxvb2t1cCBpbnB1dCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbdHlwZV09XCIndGV4dCdcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiZXF1YWxzXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidsb29rdXBfaW5wdXQnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlciBncmlkLWNvbXBvbmVudCBsb29rdXAtZmlsdGVyLXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb29rdXAtZmlsdGVyLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtpZF09XCJjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX2ZpbHRlcidcIiBjbGFzcz1cImdyaWQtY29tcG9uZW50IGxvb2t1cC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCIoY29sdW1uLmF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgY29sdW1uLmZpbHRlckF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgYXV0b0NvbXBsZXRlID09PSBmYWxzZSkgPyAnb2ZmJyA6ICdvbidcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCIgW25nTW9kZWxdPVwibG9va3VwRmlsdGVySW5wdXROZ01vZGVsKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxvb2t1cElucHV0TmdNb2RlbCgnbG9va3VwRmlsdGVyJywgY29sdW1uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RmlsdGVyTG9va3VwKGNvbHVtbilcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInJlbW92aW5nRmlsdGVycygkZXZlbnQsIGNvbHVtbik7YmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCIgcElucHV0VGV4dCAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlyZWN0LXdyYXBwZXItY2xvc2UtaWNvbi1sb29rdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIGljb249XCJwaSBwaS10aW1lc1wiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvb2t1cENsZWFyVmFsdWUoY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBjaGVja2JveCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiB0eXBlPVwiYm9vbGVhblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IFtiaW5hcnldPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJjb2x1bW4uZGlzYWJsZWRcIiBbbmdNb2RlbF09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2xpY2tDaGVja0JveEZpbHRlcihjb2x1bW4sICRldmVudClcIiAoa2V5ZG93bik9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICA8L3AtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIG11bHRpU2VsZWN0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJpblwiIFtzaG93TWVudV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbXVsdGktc2VsZWN0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgW29wdGlvbnNdPVwiY29sdW1uLmZpbHRlci5kYXRhIHx8IFtdXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICBbbmFtZV09XCJjb2x1bW4uZmllbGRcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIiBbb3B0aW9uTGFiZWxdPVwiY29sdW1uLm9wdGlvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIChrZXlkb3duKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiPlxuXG4gICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBkcm9wZG93biBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2Ryb3Bkb3duJ1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtzaG93Q2xlYXJdPVwidHJ1ZVwiIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0J1wiIFtmaWx0ZXJdPVwiY29sdW1uLmFsbG93U2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbHVtbi5maWx0ZXIuZGF0YSB8fCBbXVwiIChvbkNoYW5nZSk9XCJzZWFyY2hEcm9wZG93bkZpbHRlcihmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgZmlsdGVyTWF0Y2hNb2RlPVwic3RhcnRzV2l0aFwiPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2FsZW5kYXIgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImluXCIgW3Nob3dNZW51XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidjYWxlbmRhcidcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1kYXRlcGlja2VyIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0LURhdGUnXCIgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5maWVsZCArICctZmlsdGVyLWlucHV0J1wiIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCIgKG9uU2VsZWN0KT1cInNlbGVjdERhdGUoY29sdW1uKVwiIFtpbnB1dElkXT1cImNvbHVtbi5maWVsZFwiIGhvdXJGb3JtYXQ9XCIxMlwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuYmFja3NwYWNlKT1cInJlbW92ZU51bGxDYWxlbmRhcihjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiIFtzaG93QnV0dG9uQmFyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xvc2UpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiBbZGF0ZUZvcm1hdF09XCJjYWxlbmRhckZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjYWxlbmRhcklucHV0VmFsdWUoY29sdW1uLCB7fSwgdHJ1ZSlcIiAob25DbGVhckNsaWNrKT1cImJhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJzZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvcC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBEZWZhdWx0IEZpbHRlciBGb3IgSGVhZGVyICAtLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW3R5cGVdPVwiXG4gICAgICAgICAgICAgICAgY29sdW1uLnR5cGUgJiYgY29sdW1uLnR5cGUgIT09ICdsaW5rJyA/IGNvbHVtbi50eXBlIDogJ3RleHQnXG4gICAgICAgICAgICAgIFwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBkaXNwbGF5PVwibWVudVwiICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoICpuZ0lmPVwiaGFzTW9yZUNvbHVtbnMoKVwiIHBSZXNpemFibGVDb2x1bW4gY2xhc3M9XCJtb3JlLWFjdGlvbnMtdGhcIj48L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtblxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgIWRpc2FibGVkU2F2ZUJ0biAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIChjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDAgfHwgKHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pKSlcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEJvZHkgY29sdW1ucyBvbiBHcmlkIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LXJvdyBsZXQtZWRpdGluZz1cImVkaXRpbmdcIiBsZXQtcmk9XCJyb3dJbmRleFwiPlxuICAgICAgPHRyIFtzdHlsZV09XCJyb3dTdHlsZVwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2hpZ2hsaWdodGVkLXJvdyc6IHJvdz8uaGlnaGxpZ2h0cm93LFxuICAgICAgICAnZWxsaXBzaXMtdHJ1ZSc6IGVsbGlwc2lzLFxuICAgICAgICAncC1zZWxlY3RhYmxlLXJvdyB3b3JkV3JhcFRydWUnOiB3b3JkV3JhcCxcbiAgICAgICAgJ3dvcmRXcmFwRmFsc2UgcC1zZWxlY3RhYmxlLXJvdyc6ICF3b3JkV3JhcFxuICAgICAgfVwiIChjbGljayk9XCJzZWxlY3RlZFJvd1JlY29yZCA9IHJvd1wiIFtwRWRpdGFibGVSb3ddPVwicm93XCIgW3BSZW9yZGVyYWJsZVJvd109XCJyaVwiICNncmlkUm93IFtpZF09XCJyb3dbZGF0YUtleV1cIj5cbiAgICAgICAgPHRkICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb25cIiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXNlbGVjdGlvblwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICA8cC10YWJsZVJhZGlvQnV0dG9uIFt2YWx1ZV09XCJyb3dcIiAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdzaW5nbGUnXCI+PC9wLXRhYmxlUmFkaW9CdXR0b24+XG4gICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwicm93XCIgKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAnbXVsdGlwbGUnXCI+PC9wLXRhYmxlQ2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPCEtLSBmaXJzdCBhY3Rpb25zIGNvbHVtbiAtLT5cbiAgICAgICAgPCEtLSA8dGQgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWJ0blwiICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uQWN0aW9uc1wiPlxuICAgICAgICAgICAgPGkgW3RpdGxlXT1cImFjdGlvbi50b29sdGlwXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWN0aW9uLCByb3cpXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD4gLS0+XG4gICAgICAgIDx0ZCAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbHVtbkFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWJ0blwiICpuZ0lmPVwiYWN0aW9uLnZpc2libGUgPyBhY3Rpb24udmlzaWJsZShyb3cpIDogdHJ1ZVwiPlxuICAgICAgICAgICAgICA8aSBbdGl0bGVdPVwiYWN0aW9uLnRvb2x0aXBcIiBbY2xhc3NdPVwiYWN0aW9uLmljb25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3Rpb24tYnRuLWRpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZCA/IGFjdGlvbi5kaXNhYmxlZChyb3cpIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIoYWN0aW9uLmRpc2FibGVkICYmIGFjdGlvbi5kaXNhYmxlZChyb3cpKSA/IG51bGwgOiBoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFjdGlvbiwgcm93KVwiPjwvaT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiB1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJkaXNhYmxlZFNhdmVCdG4gPyAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uJyA6ICcnXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXRBY3Rpb25Db2x1bW5XaWR0aFwiPlxuICAgICAgICAgICAgPHNlLWdyaWQtcm93LWFjdGlvbnMgW2VkaXRpbmddPVwiZWRpdGluZ1wiIFtlZGl0Um93UGVybWlzc2lvbl09XCJlZGl0Um93UGVybWlzc2lvblwiXG4gICAgICAgICAgICAgIFtkZWxldGVSb3dQZXJtaXNzaW9uXT1cImRlbGV0ZVJvd1Blcm1pc3Npb25cIiBbaGlkZURlbGV0ZUJ0bl09XCJoaWRlRGVsZXRlQnRuXCIgW2hpZGVFZGl0QnRuXT1cImhpZGVFZGl0QnRuXCJcbiAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIiAob25Sb3dFZGl0SW5pdEJ0bik9XCJvblJvd0VkaXRJbml0KCRldmVudClcIiAoZGVsZXRlUmVjb3JkQnRuKT1cImRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uUm93RWRpdFNhdmVCdG4pPVwib25Sb3dFZGl0U2F2ZSgkZXZlbnQpXCIgKG9uUm93RWRpdENhbmNlbEJ0bik9XCJvblJvd0VkaXRDYW5jZWwoJGV2ZW50LCByaSlcIlxuICAgICAgICAgICAgICBbZWRpdEFsbFJvd3NdPVwiZWRpdEFsbFJvd3NcIj5cbiAgICAgICAgICAgIDwvc2UtZ3JpZC1yb3ctYWN0aW9ucz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPCEtLSBHcmlkIFJvd3MgRGF0YSBCaW5kaW5ncyBTdGFydCAtLT5cbiAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zXCIgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5zdHlsZSA/ICcnIDogJ3ctc3RhdGljLWNvbCdcIiBbYXR0ci5kYXRhLWNvbHVtbi1maWVsZF09XCJjb2x1bW4/LmZpZWxkXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uaG92ZXJEYXRhICYmICFjb2x1bW4uaXNUZXh0YXJlYSA/ICd0ZC1vdmVybGF5JyA6ICcnXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImNvbHVtbi5ob3ZlckRhdGEgJiYgIWNvbHVtbi5pc1RleHRhcmVhID8gJ3RkLXdyYXBwZXInIDogJydcIlxuICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiKGNvbHVtbi5ob3ZlckRhdGEgJiYgY29sdW1uLmhvdmVyRGF0YS5jb21wb25lbnQgJiYgIWNvbHVtbi5pc1RleHRhcmVhKSA/IGFkZER5bmFtaWNQYW5lbE92ZXJsYXlDb21wb25lbnQoY29sdW1uLmhvdmVyRGF0YSwgb3ZlcmxheVBhbmVsLCAkZXZlbnQsIHJvdykgOiAnJ1wiXG4gICAgICAgICAgICAobW91c2VsZWF2ZSk9XCIoY29sdW1uLmhvdmVyRGF0YSAmJiBjb2x1bW4uaG92ZXJEYXRhLmNvbXBvbmVudCAmJiAhY29sdW1uLmlzVGV4dGFyZWEpID8gIG1vdXNlTGVhdmVFdmVudChvdmVybGF5UGFuZWwpIDogJydcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGQtY29udGVudC13cmFwcGVyXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiPlxuXG4gICAgICAgICAgICAgIDwhLS0gQm9vbGVhbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiPlxuICAgICAgICA8dGQgKm5nSWY9XCIhZWRpdGluZyAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uc2hvdyAhPSBmYWxzZVwiPlxuICAgICAgICAgIDxwLWNoZWNrYm94IFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQtY2hlY2tib3gnOiBjb2x1bW4uZGlzYWJsZWR9XCIgW2JpbmFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQm94Q2hhbmdlRXZlbnQoJGV2ZW50LCBjb2x1bW4sIHJvdylcIiAoY2hhbmdlKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0Q2hlY2tib3hWYWx1ZShyb3csIGNvbHVtbilcIj5cbiAgICAgICAgICA8L3AtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cImVkaXRpbmdcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDwhLS0gZm9yIGVkaXQgY2hlY2tCb3ggLS0+XG4gICAgICAgICAgICAgIDxwLWNoZWNrYm94IChuZ01vZGVsQ2hhbmdlKT1cImNoZWNrQm94Q2hhbmdlRXZlbnQoJGV2ZW50LCBjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgW2JpbmFyeV09XCJ0cnVlXCIgW25nTW9kZWxdPVwiZ2V0Q2hlY2tib3hWYWx1ZShyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiPjwvcC1jaGVja2JveD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBsaW5rIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnYSxpbnB1dCdcIiAqbmdTd2l0Y2hDYXNlPVwiJ2xpbmsnXCI+XG4gICAgICAgICAgPCEtLSBsaW5rIGNvbHVtbiBmb3IgSHlwZXJMaW5rIENhc2UgLS0+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uYWxsb3dTYXZlID09PSBmYWxzZVwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udGFyZ2V0ICE9PSAnX3NlbGYnXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdhJ1wiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuXG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmVcIiBbaHJlZl09XCJjb2x1bW4uZGlzYWJsZWQ/Jyc6cm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIiBbY2xhc3NdPVwiY29sdW1uLmljb25cIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLnRhcmdldCA9PT0gJ19zZWxmJ1wiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnYSdcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cIiBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG5cbiAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCJcbiAgICAgICAgICAgICAgICBbdGFyZ2V0XT0nY29sdW1uLnRhcmdldCcgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIiBbY2xhc3NdPVwiY29sdW1uLmljb25cIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPCEtLSBsaW5rIGNvbHVtbiBmb3IgRWRpdCBDYXNlIC0tPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmFsbG93U2F2ZSB8fCBjb2x1bW4uYWxsb3dTYXZlID09PSB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiKGNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZSApICYmIChjb2x1bW4uZWRpdExpbmsgPT09IHRydWUgKVwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIXJvdy5pc05ld1wiIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCB8fCByb3dbY29sdW1uLmZpZWxkXSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5RmllbGQgPSAkZXZlbnQgOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIihjb2x1bW4uYXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBhdXRvQ29tcGxldGUgPT09IGZhbHNlKSA/ICdvZmYnIDogJ29uJ1wiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHBJbnB1dFRleHQgKm5nSWY9XCJyb3cuaXNOZXdcIiB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBbYXR0ci5hdXRvY29tcGxldGVdPVwiKGNvbHVtbi5hdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGF1dG9Db21wbGV0ZSA9PT0gZmFsc2UpID8gJ29mZicgOiAnb24nXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIC8+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlfHwgY29sdW1uLmVkaXRhYmxlID09PSB1bmRlZmluZWRcIiA+XG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjdXN0b20tbGlua1wiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPSdjb2x1bW4udGFyZ2V0J1xuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZTsgZWxzZSBub0ljb25cIltjbGFzc109XCJjb2x1bW4uaWNvblwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIihjb2x1bW4uZWRpdExpbmsgPT09IGZhbHNlfHwgY29sdW1uLmVkaXRMaW5rID09PSB1bmRlZmluZWQpJiYoY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZXx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gdW5kZWZpbmVkKVwiPlxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXQgPyBjb2x1bW4udGFyZ2V0IDogJ19ibGFuaydcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSA/ICcnIDogYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlIHx8IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZVwiIFtocmVmXT1cImNvbHVtbi5kaXNhYmxlZD8nJzpyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJjb2x1bW4udGFyZ2V0ID8gY29sdW1uLnRhcmdldCA6ICdfYmxhbmsnXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiIFtjbGFzc109XCJjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU/Jyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gSWZyYW1lIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2lmcmFtZSdcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1saW5rXCIgKGNsaWNrKT1cImdyaWRJRnJhbWUoY29sdW1uLCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rLCByb3cpXCIgW3RpdGxlXT1cIlxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmXG4gICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSBudWxsIHx8IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID09PSAnJylcbiAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZF0gOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA/IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkXVxuXG4gICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImN1c3RvbS1pY29uLWJ0blwiICpuZ0lmPVwiY29sdW1uLmljb247IGVsc2Ugbm9JY29uXCIgW2Rpc2FibGVkXT1cImNvbHVtbi5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+XG4gICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmXG4gICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gJycpXG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZF0gOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICA6IGNvbHVtbi5kaXNwbGF5VGV4dCA/IGNvbHVtbi5kaXNwbGF5VGV4dCA6IHJvd1tjb2x1bW4uZmllbGRdXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gZGlhbG9nIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2RpYWxvZydcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgIT09ICdjYWxlbmRhcicgJiYgIXJvdz8uaGlkZWdyaWRidG5cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgdHlwZT1cInRleHRcIiBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInJvd1tjb2x1bW4uZmllbGRdXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgLz5cblxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiAqbmdJZj1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgY29sdW1uLmVkaXRhYmxlID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgIGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1xuICAgICAgICAgICAgICAgICAgICBcIiAoY2xpY2spPVwib3BlbkdyaWREaWFsb2coY29sdW1uLCByb3csICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKGNvbHVtbi5pY29uIHx8IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbikgJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgOyBlbHNlIG5vSWNvblwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+e3sgKCFjb2x1bW4uZGlzcGxheVRleHQgJiYgcm93LmlzTmV3ICkgfHxcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA/ICcnIDogc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sdW1uLmVkaXRhYmxlID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnaW5wdXQnXCI+XG4gICAgICAgICAgICAgICAgPHAtZGF0ZXBpY2tlclxuICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIChvbkNsb3NlKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgW21pbkRhdGVdPVwiY29sdW1uLm1pbkRhdGVcIiBbbWF4RGF0ZV09XCJjb2x1bW4ubWF4RGF0ZVwiIFthcHBlbmRUb109XCInYm9keSdcIiBob3VyRm9ybWF0PVwiMTJcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cImNvbHVtbi5zaG93VGltZVwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW3RpbWVPbmx5XT1cImNvbHVtbi50aW1lT25seVwiXG4gICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgP1xuICAgICAgICAgICAgICAgICAgcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXSA9ICRldmVudFwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiPjwvcC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgIWNvbHVtbi5lZGl0YWJsZVwiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cuZGlzYWJsZWQgICB8fCBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdywgJGV2ZW50KVwiPnt7IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgPyAnJyA6XG4gICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS1saW5rXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZVxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3cuZGlzYWJsZWQgICB8fCBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuR3JpZERpYWxvZyhjb2x1bW4sIHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIoY29sdW1uLmljb24gfHwgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uKSAmJiAhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA7IGVsc2Ugbm9JY29uXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaG92ZXJEYXRhID8gJycgOiBjb2x1bW4uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvbj57eyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlID8gJycgOiBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LFxuICAgICAgICAgICAgICAgICAgY29sdW1uKSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPCEtLSB7eyBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCArICdfc2Vjb25kVHlwZSddICYmICFyb3cuaGlkZWdyaWRidG5cIiAtLT5cblxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSB0ZXN0IC0tPlxuICAgICAgICA8IS0tIGxvb2t1cCBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidsb29rdXBfaW5wdXQnXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvbi13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiXG4gICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiIWlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdylcIiB0eXBlPVwidGV4dFwiIFtuZ01vZGVsXT1cImxvb2t1cElucHV0TmdNb2RlbChyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTG9va3VwSW5wdXROZ01vZGVsKHJvdywgY29sdW1uLCAkZXZlbnQpXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogc2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAoa2V5ZG93bi5lbnRlcik9XCJvbkxvb2t1cElucHV0RW50ZXIoJGV2ZW50LCBjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uTG9va3VwSW5wdXRQYXN0ZSgkZXZlbnQsIGNvbHVtbiwgcm93KVwiIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJ3ByaW1lLWlucHV0J1wiXG4gICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIihjb2x1bW4uYXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBhdXRvQ29tcGxldGUgPT09IGZhbHNlKSA/ICdvZmYnIDogJ29uJ1wiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMb29rdXBJbnB1dEVkaXRhYmxlKGNvbHVtbiwgcm93KSAmJiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCB8fCBjb2x1bW4ubG9va3VwQ29udHJvbD8uY29tcG9uZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1zZWFyY2hcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicm93W2NvbHVtbi5maWVsZF0gJiYgdHlwZU9mKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkXS50ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi5kaXNhYmxlZFwiIGljb249XCJwaSBwaS10aW1lc1wiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb29rdXBDbGVhclZhbHVlKGNvbHVtbixyb3cpXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4ubGlua0lkXCI+XG4gICAgICAgICAgICAgICAgPGEgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgW2hyZWZdPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiXG4gICAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImNvbHVtbi50YXJnZXQgPT09ICdfc2VsZicgPyAnJyA6ICAnX2JsYW5rJ1wiPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIHNldExvb2t1cFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIiAqbmdJZj1cIiFjb2x1bW4ubGlua0lkXCIgW3N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5sb29rdXBDb250cm9sPy5jb21wb25lbnQgJiYgY29sdW1uLmVkaXRMaW5rID09PSB0cnVlID8gJ2N1c3RvbS1saW5rJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbkxvb2t1cEh5cGVybGluayhjb2x1bW4sIHJvdylcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIHNldExvb2t1cFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gTnVtZXJpYyBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1lcmljJ1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPCEtLSBmb3IgQ3VycmVuY3kgJiYgRGVjaW1hbCAmJiBQZXJjZW50IC0tPlxuICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnaW5wdXQnXCIgY2xhc3M9XCJpbnB1dC1udW1iZXJcIj5cbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlciAjZ3JpZE51bWVyaWNJbnB1dCBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZy1pbnZhbGlkIG5nLWRpcnR5J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZm9ybS1jb250cm9sJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbc2hvd0J1dHRvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaGFuZGxlR3JpZE51bWVyaWNDaGFuZ2UoY29sdW1uLCByb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLmZpZWxkXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiAob25Gb2N1cyk9XCJvbkZvY3VzRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChrZXlkb3duKT1cImhhbmRsZUdyaWROdW1lcmljS2V5ZG93bigkZXZlbnQsIGNvbHVtbiwgcm93KVwiIFttb2RlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ2N1cnJlbmN5J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZGVjaW1hbCdcbiAgICAgICAgICAgICAgICAgICAgXCIgW2N1cnJlbmN5XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeScgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmN1cnJlbmN5XG4gICAgICAgICAgICAgICAgICAgICAgICA6ICdVU0QnXG4gICAgICAgICAgICAgICAgICAgIFwiIFtsb2NhbGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ2N1cnJlbmN5JyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubG9jYWxlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnZW4tVVMnXG4gICAgICAgICAgICAgICAgICAgIFwiIFttaW5GcmFjdGlvbkRpZ2l0c109XCJjb2x1bW4uZm9ybWF0ID8gc2V0TnVtZXJpY01pbkZyYWN0aW9uKGNvbHVtbikgOiAnMCdcIlxuICAgICAgICAgICAgICAgICAgW21heEZyYWN0aW9uRGlnaXRzXT1cImNvbHVtbi5mb3JtYXQgPyBzZXROdW1lcmljTWF4RnJhY3Rpb24oY29sdW1uKSA6ICcwJ1wiIFtzdWZmaXhdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gJ3BlcmNlbnQnICYmIFxuICAgICAgICAgICAgICAgICAgICAgICAgJyUnXG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgPC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9ja2VkX2ZpZWxkPjxzcGFuICpuZ0lmPVwiIXJvdy5pc05ld1wiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGF5b3V0LWZpeGVkXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgIHNldE51bWVyaWNGb3JtYXQoY29sdW1uLCByb3cpXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2FkZF9idXR0b24nXCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhcm93LmhpZGVncmlkYnRuXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2ljb25dPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uIDogY29sdW1uLmljb25cIlxuICAgICAgICAgICAgICBbbmFtZV09XCJjb2x1bW4uaGVhZGVyXCIgY2xhc3M9XCJtZXJnZS1idG5cIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0ID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA6IGNvbHVtbi52YWx1ZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtZ3JpZC1hZGQtYnRuXCIgKGNsaWNrKT1cIm9uQ2xpY2tCdXR0b24oY29sdW1uLCByb3cpXCI+PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIEdlbmVyYXRlIEZpbGUgQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2dlbmVyYXRlX2ZpbGVfYnV0dG9uJ1wiPlxuICAgICAgICAgIDxzZS1nZW5lcmF0ZS1pbXBvcnQtZmlsZVxuICAgICAgICAgICAgW2xhYmVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0IDogY29sdW1uLnZhbHVlXCJcbiAgICAgICAgICAgIFtpY29uXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgIFtkaWFsb2dEYXRhXT1cImNvbHVtbi5kYXRhXCIgW3NlbGVjdGVkUm93XT1cInJvd1wiPjwvc2UtZ2VuZXJhdGUtaW1wb3J0LWZpbGU+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIFNlbmQgZW1haWwgQnV0dG9uIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3NlbmRfZW1haWxfYnV0dG9uJ1wiPlxuICAgICAgICAgIDxzZS1lbWFpbC1nZW5lcmF0ZS1idG5cbiAgICAgICAgICAgIFtsYWJlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0ID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA6IGNvbHVtbi52YWx1ZVwiXG4gICAgICAgICAgICBbaWNvbl09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZFJvd109XCJyb3dcIj48L3NlLWVtYWlsLWdlbmVyYXRlLWJ0bj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gRGF0ZSBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPCEtLSBjYWxlbmRhciBzZWxlY3RvciAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiXG4gICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGE/IG51bGw6IGVkaXRBbGxSb3dzID8gJ2lucHV0JyA6ICdzZWxmJyBcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICA8cC1kYXRlcGlja2VyIFttaW5EYXRlXT1cImNvbHVtbi5taW5EYXRlXCIgW21heERhdGVdPVwiY29sdW1uLm1heERhdGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHkgJyArIGNvbHVtbi5maWVsZCArIHJvd1tkYXRhS2V5XSA6IGNvbHVtbi5maWVsZCArIHJvd1tkYXRhS2V5XVwiXG4gICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiAob25DbG9zZSk9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgaG91ckZvcm1hdD1cIjEyXCIgW2RlZmF1bHREYXRlXT1cImRlZmF1bHREYXRlXCJcbiAgICAgICAgICAgICAgICBbc3RlcE1pbnV0ZV09XCJjb2x1bW4ubWludXRlc0ludGVydmFsID8gY29sdW1uLm1pbnV0ZXNJbnRlcnZhbCA6IDFcIiBbc2hvd1RpbWVdPVwiY29sdW1uLnNob3dUaW1lXCJcbiAgICAgICAgICAgICAgICBbdGltZU9ubHldPVwiY29sdW1uLnRpbWVPbmx5XCIgW2RhdGVGb3JtYXRdPVwiY29sdW1uLmZvcm1hdCA/IGNvbHVtbi5mb3JtYXQudHlwZSA6IGNhbGVuZGFyRm9ybWF0XCJcbiAgICAgICAgICAgICAgICAoa2V5dXApPVwiY2FsZW5kYXJJbnB1dFZhbHVlKGNvbHVtbiwgcm93KVwiIChvblNob3cpPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZCA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNhbGVuZGFyTW9kZWxDaGFuZ2UoJGV2ZW50LCByb3csIGNvbHVtbilcIiBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgW3Nob3dCdXR0b25CYXJdPVwiIWNvbHVtbi50aW1lT25seVwiPjwvcC1kYXRlcGlja2VyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxheW91dC1maXhlZCB3aGl0ZS1zcGFjZS1ub3dyYXAgdGV4dC1jZW50ZXIgYm9yZGVyLXJlYWRvbmx5XCI+XG4gICAgICAgICAgICAgICAge3sgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdyxjb2x1bW4pIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuXG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgPHNwYW4gW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XG4gICAgICAgICAgICA8IS0tIERyb3Bkb3duIGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIiBbY2xhc3NdPVwiZHJvcGRvd25JbnB1dCA/ICcnIDogJ291dHB1dC1kcm9wZG93bidcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiIGNvbHVtbi5ob3ZlckRhdGE/IG51bGw6IGVkaXRBbGxSb3dzID8gJy5wLWRyb3Bkb3duLWxhYmVsJyA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRkZW5cIiBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkrJ19kYXRhJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKydfZGF0YSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uLmRhdGFcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwicm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF0gPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIFtwbGFjZWhvbGRlcl09XCJyb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF0gPyByb3dbY29sdW1uLmZpZWxkXSA6ICdTZWxlY3QnXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJyb3dbY29sdW1uLmZpZWxkXSA/IHRydWUgOiBmYWxzZVwiIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtmaWx0ZXJdPVwiY29sdW1uLmFsbG93U2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyTWF0Y2hNb2RlPVwic3RhcnRzV2l0aFwiPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYXlvdXQtZml4ZWQgYm9yZGVyLXJlYWRvbmx5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YSAqbmdJZj1cImNvbHVtbi5kaXNwbGF5QXNMaW5rXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjb2x1bW4uZGlzYWJsZWQ/Jyc6cm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiIFt0YXJnZXRdPSdjb2x1bW4udGFyZ2V0Jz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNldERyb3Bkd29uUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sdW1uLmRpc3BsYXlBc0xpbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNldERyb3Bkd29uUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIE11bHRpU2VsZWN0IGNvbHVtbiBvbiBHcmlkIC0tPlxuICAgICAgICAgICAgPCEtLSBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDpcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdXCIgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXNlbGVjdCdcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnLnAtbXVsdGlzZWxlY3QtbGFiZWwnXCI+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfZGF0YSddID8gcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19kYXRhJ10gOiBjb2x1bW4uZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25MYWJlbF09XCJjb2x1bW4ub3B0aW9uTGFiZWxcIiBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgKG9uUGFuZWxTaG93KT1cInNob3dPcHRpb24oY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiPlxuICAgICAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXVxuICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSA6XG4gICAgICAgICAgICAgICAgICAgIHNldE11bHRpU2VsZWN0RGF0YShjb2x1bW4sIHJvd1tjb2x1bW4uZmllbGRdKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8IS0tIEF1dG9Db21wbGV0ZSBTZWFyY2ggLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ0F1dG9Db21wbGV0ZSdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiBbbmFtZV09XCJjb2x1bW4uaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1Z2dlc3Rpb25zXT1cImNvbHVtbi5kYXRhXCIgKG9uU2VsZWN0KT1cImF1dG9Db21wbGV0ZVNlbGVjdGVkVmFsdWUocm93LCBjb2x1bW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sdW1uLm9wdGlvbkxhYmVsID8gY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpIDogY29sdW1uLmRpc3BsYXlGaWVsZCA/IGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgOiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRBdXRvQ29tcGxldGVOZ01vZGVsKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUF1dG9Db21wbGV0ZU5nTW9kZWwocm93LCBjb2x1bW4sICRldmVudClcIiBbZHJvcGRvd25dPVwiY29sdW1uLnNob3dPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cImF1dG9TZWFyY2goJGV2ZW50LCBjb2x1bW4sIHJvdylcIiAob25CbHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25BdXRvQ29tcGxldGVLZXlFbnRlckV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3dbY29sdW1uLmZpZWxkXSAmJiByb3dbY29sdW1uLmZpZWxkXVswXSAmJiAgcm93W2NvbHVtbi5maWVsZF1bMF1bY29sdW1uLmRpc3BsYXlGaWVsZF1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHJvd1tjb2x1bW4uZmllbGRdOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoID4gMSA/IHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCAtMSA9PT0gaSA/XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVbY29sdW1uLmRpc3BsYXlGaWVsZF0gOiB2YWx1ZVtjb2x1bW4uZGlzcGxheUZpZWxkXSArICc7JyA6IHZhbHVlW2NvbHVtbi5kaXNwbGF5RmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF1bMF0gJiYgIHJvd1tjb2x1bW4uZmllbGRdWzBdW2NvbHVtbi5maWVsZF0gJiYgIWNvbHVtbi5kaXNwbGF5RmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHJvd1tjb2x1bW4uZmllbGRdOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF0ubGVuZ3RoID4gMSA/IHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCAtMSA9PT0gaSA/XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVbY29sdW1uLmZpZWxkXSA6IHZhbHVlW2NvbHVtbi5maWVsZF0gKyAnOycgOiB2YWx1ZVtjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwhLS0gQWRkIEdlbmVyYXRlIFJlcG9ydCBCdXR0b24gLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3JlcG9ydCdcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biBbcmVwSW5mb109XCJzZXRSZXBvcnROYW1lKGNvbHVtbiwgcm93KVwiIFtsYWJlbF09XCJjb2x1bW4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zXT1cInNldFJlcG9ydFBhcmFtcyhjb2x1bW4sIHJvdylcIiBbY2xhc3NdPVwiY29sdW1uLmNsYXNzXCIgW3Nob3dEaWFsb2ddPVwiY29sdW1uLnNob3dEaWFsb2dcIlxuICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJjb2x1bW4uaWNvblwiIFtyZXBvcnRUeXBlXT1cImNvbHVtbi5yZXBvcnRUeXBlXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c2UtZ2VuZXJhdGUtcmVwb3J0LWJ0biBbcmVwSW5mb109XCJzZXRSZXBvcnROYW1lKGNvbHVtbiwgcm93KVwiIFtsYWJlbF09XCJjb2x1bW4ubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbcGFyYW1zXT1cInNldFJlcG9ydFBhcmFtcyhjb2x1bW4sIHJvdylcIiBbaWNvbl09XCJjb2x1bW4uaWNvblwiIFtjbGFzc109XCJjb2x1bW4uY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0RpYWxvZ109XCJjb2x1bW4uc2hvd0RpYWxvZ1wiIFtyZXBvcnRUeXBlXT1cImNvbHVtbi5yZXBvcnRUeXBlXCI+PC9zZS1nZW5lcmF0ZS1yZXBvcnQtYnRuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0IFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdpbnB1dCdcIj5cbiAgICAgICAgICAgICAgPCEtLSBJbnB1dCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZV09XCJjb2x1bW4uc3R5bGUgPyBjb2x1bW4uc3R5bGUgOiAnZGlzcGxheTpmbGV4J1wiPlxuXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSAqbmdJZj1cImNvbHVtbi5pc1RleHRhcmVhICYmIChlZGl0QWxsUm93cyB8fCBlZGl0aW5nUm93S2V5c1tyb3dbZGF0YUtleV1dKVwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkXVwiIFthdHRyLmRhdGEtY2VsbF09XCJjb2x1bW4uZmllbGQgKyAnLScgKyByb3dbZGF0YUtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJpbWUtdGV4dGFyZWFcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwicmVzaXplOiBub25lOyBtaW4td2lkdGg6IDIwMHB4OyBtaW4taGVpZ2h0OiA0MHB4OyB3b3JkLWJyZWFrOiBicmVhay13b3JkOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyBvdmVyZmxvdzogaGlkZGVuO1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiAoYmx1cik9XCJvblRleHRhcmVhQmx1cihjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uVGV4dGFyZWFFbnRlcigkZXZlbnQsIGNvbHVtbiwgcm93KVwiIGF1dG9mb2N1cz48L3RleHRhcmVhPlxuXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi5pc1RleHRhcmVhICYmIChlZGl0QWxsUm93cyB8fCBlZGl0aW5nUm93S2V5c1tyb3dbZGF0YUtleV1dKSAmJiAgY29sdW1uLmZpZWxkICE9PSBkYXRhS2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHRUeXBlP3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGU6Y29sdW1uLnRleHRUeXBlP2NvbHVtbi50ZXh0VHlwZTondGV4dCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJ3ByaW1lLWlucHV0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiBbbmdNb2RlbF09XCJzZXRJbnB1dE5nTW9kZWwocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbklucHV0Q2hhbmdlKCRldmVudCwgcm93LCBjb2x1bW4pXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja0J1dHRvbihjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiEoZWRpdEFsbFJvd3MgfHwgZWRpdGluZ1Jvd0tleXNbcm93W2RhdGFLZXldXSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbG9hdDpyaWdodFwiICpuZ0lmPVwiY29sdW1uLmZvcm1hdD09J3Bhc3N3b3JkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/KHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXS50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGkgcGktZXllJzoncGkgcGktZXllLXNsYXNoJyk6Y29sdW1uLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwaSBwaS1leWUnOidwaSBwaS1leWUtc2xhc2gnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZFR5cGUoY29sdW1uLCByb3cpXCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9ja2VkX2ZpZWxkPjxzcGFuICpuZ0lmPVwiIXJvdy5pc05ld1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGF5b3V0LWZpeGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZV09XCJjb2x1bW4uc3R5bGUgPyBjb2x1bW4uc3R5bGUgOiAnZGlzcGxheTpmbGV4J1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJyBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8udGV4dFR5cGUgPyhyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHRUeXBlPT0ncGFzc3dvcmQnICA/J3Bhc3N3b3JkJzonJykgOmNvbHVtbi50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGFzc3dvcmQnOicnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZXRUZXh0Qm94UmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9XCJmbG9hdDpyaWdodFwiICpuZ0lmPVwiY29sdW1uLmZvcm1hdD09J3Bhc3N3b3JkJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8ocm93W2NvbHVtbi5maWVsZCsnX29iaiddLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwaSBwaS1leWUnOidwaSBwaS1leWUtc2xhc2gnKTpjb2x1bW4udGV4dFR5cGU9PSdwYXNzd29yZCc/J3BpIHBpLWV5ZSc6J3BpIHBpLWV5ZS1zbGFzaCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiIChjbGljayk9XCJjaGFuZ2VQYXNzd29yZFR5cGUoY29sdW1uLCByb3cpXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDwhLS0gR3JpZCBSb3dzIERhdGEgQmluZGluZ3MgRW5kIC0tPlxuXG4gICAgICAgIDwhLS0gTW9yZSBhY3Rpb25zIGNvbHVtbiAoZWxsaXBzaXMpIC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCJoYXNNb3JlSXRlbXMocm93KVwiIGNsYXNzPVwiZm9yLW1vcmUtYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgaWNvbj1cInBpIHBpLWVsbGlwc2lzLXZcIiBjbGFzcz1cInAtYnV0dG9uLXRleHRcIiAoY2xpY2spPVwic2hvd01vcmUoJGV2ZW50LCByb3cpXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJNb3JlIGFjdGlvbnNcIj48L2J1dHRvbj5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIEFjdGlvbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPCEtLSA8dGQgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgY2xhc3M9XCJmb3ItYnV0dG9uc1wiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8aSBbdGl0bGVdPVwiYWN0aW9uLnRvb2x0aXBcIiBbY2xhc3NdPVwiYWN0aW9uLmljb25cIiAoY2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPiAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIiBjbGFzcz1cImZvci1idXR0b25zXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uQWN0aW9uc1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhY3Rpb24tYnRuXCIgKm5nSWY9XCJhY3Rpb24udmlzaWJsZSA/IGFjdGlvbi52aXNpYmxlKHJvdykgOiB0cnVlXCI+XG4gICAgICAgICAgICAgIDxpIFt0aXRsZV09XCJhY3Rpb24udG9vbHRpcFwiIFtjbGFzc109XCJhY3Rpb24uaWNvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbi1idG4tZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkID8gYWN0aW9uLmRpc2FibGVkKHJvdykgOiBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIihhY3Rpb24uZGlzYWJsZWQgJiYgYWN0aW9uLmRpc2FibGVkKHJvdykpID8gbnVsbCA6IGhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWN0aW9uLCByb3cpXCI+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiIGNsYXNzPVwiZm9yLWJ1dHRvbnNcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkU2F2ZUJ0biA/ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24nIDogJydcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz0nc2V0QWN0aW9uQ29sdW1uV2lkdGgnPlxuICAgICAgICAgICAgPHNlLWdyaWQtcm93LWFjdGlvbnMgW2VkaXRpbmddPVwiZWRpdGluZ1wiIFtlZGl0Um93UGVybWlzc2lvbl09XCJlZGl0Um93UGVybWlzc2lvblwiXG4gICAgICAgICAgICAgIFtkZWxldGVSb3dQZXJtaXNzaW9uXT1cImRlbGV0ZVJvd1Blcm1pc3Npb25cIiBbaGlkZURlbGV0ZUJ0bl09XCJoaWRlRGVsZXRlQnRuXCIgW2hpZGVFZGl0QnRuXT1cImhpZGVFZGl0QnRuXCJcbiAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIiAob25Sb3dFZGl0SW5pdEJ0bik9XCJvblJvd0VkaXRJbml0KCRldmVudClcIiAoZGVsZXRlUmVjb3JkQnRuKT1cImRlbGV0ZVJlY29yZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG9uUm93RWRpdFNhdmVCdG4pPVwib25Sb3dFZGl0U2F2ZSgkZXZlbnQpXCIgKG9uUm93RWRpdENhbmNlbEJ0bik9XCJvblJvd0VkaXRDYW5jZWwoJGV2ZW50LCByaSlcIlxuICAgICAgICAgICAgICBbZWRpdEFsbFJvd3NdPVwiZWRpdEFsbFJvd3NcIj5cbiAgICAgICAgICAgIDwvc2UtZ3JpZC1yb3ctYWN0aW9ucz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEZvb3RlciBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgPHRyICpuZ0lmPVwiYWdncmVnYXRlRm9vdGVyXCI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj48L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJhbGxvd1NlbGVjdGlvblwiIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPjwvdGQ+XG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgb3V0ZXJDb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1vdXRlci1jb2x1bW5cIiBbc3R5bGVdPVwib3V0ZXJDb2x1bW4uc3R5bGVcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpbm5lckNvbHVtbiBvZiBzZWxlY3RlZENvbHVtbnNcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFnZ3Igb2YgaW5uZXJDb2x1bW4/LmFnZ3JlZ2F0ZVwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWdnci5hZ2dyVmFsdWU/Lmxlbmd0aCAmJiAoKCFhZ2dyLmRpc3BsYXlGaWVsZCAmJiBpbm5lckNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gb3V0ZXJDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgICAgICAgICAgICBhZ2dyLmRpc3BsYXlGaWVsZCAmJiBhZ2dyLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gb3V0ZXJDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImFnZ3IuYWdnclZhbHVlXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJkaXNhYmxlZFNhdmVCdG4gPyAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uJyA6ICcnXCI+PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gRm9vdGVyIGZvciBFbXB0eSBNZXNzYWdlIGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICA8dHIgY2xhc3M9XCJncmlkLWNvbXBvbmVudCBuby1yZWNvcmRzLWZvdW5kXCI+XG4gICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInNlbGVjdGVkQ29sdW1ucz8ubGVuZ3RoICsgMVwiPnt7dG90YWxSZWNvcmRzPT0wPyAnTm8gcmVjb3JkcyBmb3VuZCc6Jyd9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT5cbiAgPHAtb3ZlcmxheVBhbmVsIFtzdHlsZV09XCJvdmVybGF5UGFuZWxTdHlsZVwiICNvdmVybGF5UGFuZWw+XG4gICAgPG5nLWNvbnRhaW5lciAjdmlld0NvbnRhaW5lclJlZj48L25nLWNvbnRhaW5lcj5cbiAgPC9wLW92ZXJsYXlQYW5lbD5cbiAgPHAtbWVudSAjbW9yZU1lbnUgW3BvcHVwXT1cInRydWVcIiBbbW9kZWxdPVwiY3VycmVudE1vcmVNZW51XCIgYXBwZW5kVG89XCJib2R5XCIgc3R5bGVDbGFzcz1cImdyaWQtbW9yZS1tZW51XCI+PC9wLW1lbnU+XG48L2Rpdj5cbiJdfQ==
|
|
4331
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZS11aS10b29sa2l0L3NyYy9saWIvY29tcG9uZW50cy9iYXNlL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFFBQVEsRUFFUixZQUFZLEVBR1osU0FBUyxFQUNULFlBQVksRUFFWixnQkFBZ0IsR0FLakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBUXJFLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBU0wsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixrQkFBa0IsRUFFbEIsY0FBYyxFQUNkLGVBQWUsRUFFZixjQUFjLEVBQ2QscUJBQXFCLEVBRXJCLFVBQVUsRUFDVixnQkFBZ0IsRUFFaEIsU0FBUyxFQUNULGNBQWMsR0FDZixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxpQ0FBaUMsQ0FBQztBQUcvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLHdDQUF3QyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFJNU8sT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1B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RUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQ3RMLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtZQUNuTCxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7WUFDdEwsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1lBQy9MLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxh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QWE7c0JBQXJCLEtBQUs7Z0JBeUpOLGVBQWU7c0JBRmQsWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUMvQixZQUFZO3VCQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXVyxPQUFPO3NCQUFoRCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFReEMsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25EZXN0cm95LFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBOZ1pvbmUsXG4gIEFmdGVyVmlld0luaXQsXG4gIFJlbmRlcmVyMixcbiAgQXBwbGljYXRpb25SZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0Q2hhbmdlZFJvd3MgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtcbiAgRHluYW1pY0RpYWxvZ1JlZixcbiAgRHluYW1pY0RpYWxvZ0NvbmZpZyxcbiAgRGlhbG9nU2VydmljZSxcbiAgRHluYW1pY0RpYWxvZ0NvbXBvbmVudCxcbn0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCBqc1BERiBmcm9tICdqc3BkZic7XG5pbXBvcnQgeyBHcmlkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2dyaWQuc2VydmljZSc7XG5pbXBvcnQge1xuICBJR3JpZENvbHVtbixcbiAgSUdyaWRTb3J0LFxuICBJR3JpZFNlcnZlclNpZGVFdmVudCxcbiAgSUdyaWRQYWdpbmF0aW9uRXZlbnQsXG4gIElHbG9iYWxGaWx0ZXIsXG4gIElHcmlkRmlsdGVyLFxuICBJR3JpZENvbHVtbkFjdGlvbixcbiAgSUdyaWRSb3dBY3Rpb24sXG4gIEVHcmlkU2VsZWN0aW9uVHlwZSxcbiAgRUdyaWRDb2x1bW5UeXBlLFxuICBFR3JpZFNvcnREaXJlY3Rpb24sXG4gIElHcmlkRGF0YUV4cG9ydCxcbiAgRUdyaWRBZ2dyZWdhdGUsXG4gIEVHcmlkRm9ybWF0VHlwZSxcbiAgSUdyaWRGaWx0ZXJJbmZvLFxuICBFR3JpZFZhbGlkYXRvcixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICB1c2VyU2V0dGluZyxcbiAgRUdyaWRFeGNlbCxcbiAgRUdyaWRSb3dQcm9wTmFtZSxcbiAgSUdyaWRSZXBvcnRCdG4sXG4gIEVHcmlkbGluayxcbiAgRUdyaWRGb3JtYXR0ZXIsXG59IGZyb20gJy4uLy4uLy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEVQZXJtaXNzaW9uVHlwZSwgSVBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGhlbnRpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBJZnJhbWVDb21wb25lbnQgfSBmcm9tICcuLi9pZnJhbWUvaWZyYW1lLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgYXV0b1NldExvb2t1cERhdGEsIGNoYW5nZUNvbHVtbnNTdGF0ZSwgY3VycmVudFVybCwgZHJhZ2dhYmxlRGlhbG9nLCBvYmpDb252ZXJ0VG9Mb3dlciwgc2V0RGlhbG9nUmVzcG9uc2UsIHNldE1pbnV0ZXNJbnRlcnZhbCwgc2V0VGltZUluRGF0ZSwgb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRhYmxlIH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQgeyBNZW51IH0gZnJvbSAncHJpbWVuZy9tZW51JztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgRUZvcm1hdFR5cGUsIEVNYXRjaE1vZGUsIEVPcGVyYXRvciB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IFBhZ2VMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2h5cGVybGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL2xpYi9zZXJ2aWNlcy9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdER0byB9IGZyb20gJ3Byb2plY3RzL3NlLXVpLXRvb2xraXQvc3JjL2xpYi9tb2RlbHMvcmVxdWVzdC5tb2RlbCc7XG5pbXBvcnQgeyBTeXN0ZW1Db25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3lzdGVtLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEVtYWlsRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vZW1haWwvZW1haWwtZmlsdGVyL2VtYWlsLWZpbHRlci5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgQFZpZXdDaGlsZCgndmlld0NvbnRhaW5lclJlZicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBwYW5lbE92ZXJsYXlWaWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmXG5cbiAgQFZpZXdDaGlsZHJlbignZ3JpZFJvdycpIGdyaWRSb3c6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQE91dHB1dCgpIGlubGluZVJvd0NhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgZ3JpZFNldHRpbmc6IGFueTtcbiAgc2VhcmNoYnRuSWQgPSAnc2VhcmNoR2xvYmFsRmlsdGVyQnRuJztcbiAgY3VycmVudFBhZ2U6IG51bWJlciA9IDA7XG4gIFBhZ2VDaGFuZ2U6IGJvb2xlYW47XG4gIHRlbXBTYXZlZFJvdzogYW55W10gPSBbXTtcbiAgc29ydERhdGE6IElHcmlkU29ydCA9IHt9O1xuICAvLyBGdWxsIHNvcnQgb3JkZXIgKHByaW1hcnksIHNlY29uZGFyeSwg4oCmKSBzbyBtdWx0aS1jb2x1bW4gc29ydGluZyBpcyBob25vdXJlZCwgbm90IGp1c3QgdGhlIGZpcnN0LlxuICBtdWx0aVNvcnREYXRhOiBJR3JpZFNvcnRbXSA9IFtdO1xuICBASW5wdXQoKSBzZXQgYWN0aXZlVGVzdE1vZGUodmFsOiBhbnkpIHtcbiAgICBpZiAodmFsID09PSB0cnVlKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cbiAgc2VydmVyRmlsdGVyczogSUdyaWRTZXJ2ZXJTaWRlRXZlbnQgPSB7fTtcbiAgcm93c0RhdGE6IGFueVtdID0gW107XG4gIG9yaWdpbmFsUm93czogYW55W10gPSBbXTtcbiAgZ3JpZElkOiBzdHJpbmcgPSAnJztcbiAgcm93c0RhdGFDb3B5OiBhbnlbXSA9IFtdO1xuICBudW1lcmljVmFsdWU6IGFueSA9IHt9XG4gIHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBpc0NvbHVtbkhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuICByb3dDbGlja0RhdGE6IElHcmlkQ29sdW1uO1xuICBjb21wb25lbnRUYWJsZVJlZjogYW55O1xuICBsb29rdXBGaWx0ZXJPYmo6IGFueTtcbiAgY2hlY2tsaXN0OiBhbnlbXSA9IFtdXG4gIGxvb2t1cEJsdXI6IGJvb2xlYW4gPSB0cnVlO1xuICBnbG9iYWxGaWx0ZXJzQXJyYXk6IGFueVtdID0gW107XG4gIGNoZWNrQWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyUHJldmlvdXNWYWx1ZTogc3RyaW5nID0gJyc7XG4gIGdyaWRGaWx0ZXJPYmo6IElHcmlkRmlsdGVySW5mbztcbiAgZGVmYXVsdERhdGU6IGFueTtcbiAgb3ZlcmxheVBhbmVsU3R5bGU6IHt9O1xuICAvLyBIb2xkcyB0aGUgaXRlbXMgdG8gZGlzcGxheSBpbiB0aGUgcGVyLXJvdyBcIk1vcmVcIiBtZW51IChQcmltZU5HIE1lbnUgbW9kZWwpXG4gIGN1cnJlbnRNb3JlTWVudTogTWVudUl0ZW1bXSA9IFtdO1xuICBncmlkZmlsdGVyOiBhbnk7XG4gIGRyb3BEb3duRmlsdGVyOiBhbnkgPSB7fTtcbiAgZHJvcGRvd25JbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBzYXZlQWxsUmVjb3JkOiBib29sZWFuID0gZmFsc2U7XG4gIGdlbmVyYXRlUm93c0RhdGFDb3B5OiBib29sZWFuID0gdHJ1ZTtcbiAgZWRpdEFsbFJlY29yZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjYW5jZWxBbGxSZWNvcmRzOiBib29sZWFuID0gZmFsc2U7XG4gIGFkZE5ld1Jvd0NoZWNrOiBib29sZWFuID0gZmFsc2U7XG4gIGluRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2F2ZVJlY29yZEFycmF5OiBhbnlbXSA9IFtdO1xuICBkaXNhYmxlZFNhdmVCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VsZWN0ZWRBbGxSb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIENoZWNrZWQ6IGJvb2xlYW4gPSB0cnVlXG4gIHVuQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlXG4gIGVkaXRNb2RlQ2hlY2tlZDogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRNb2RldW5Da2Vja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGNhbGVuZGFyRm9ybWF0OiBzdHJpbmcgPSBcIm1tL2RkL3l5XCJcbiAgc2V0RHJvcGRvd25GaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICByZWxvYWRQYWdlOiBTdWJzY3JpcHRpb247XG4gIHNldERyb3Bkb3duZGF0YVZhbHVlOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0ZpbHRlcmJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHRvb2dsZVNvcnRPcmRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBkaWFsb2dSZWY6IGFueVxuICB1c2VyU2V0dGluZzogdXNlclNldHRpbmcgPSB7fTtcbiAgcm93VXBkYXRlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU2VydmVyU2lkZUV2ZW50SW5pdGFsVHJpZ2dlcmVkID0gbmV3IFN1YmplY3QoKVxuXG4gIC8vYXBwbHkgQWRkL0RlbGV0ZS9FZGl0IHByb3AgZm9yIHRoZSBncmlkIHBlcm1pc3Npb25cbiAgYWRkUm93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGRlbGV0ZVJvd1Blcm1pc3Npb246IGJvb2xlYW4gPSB0cnVlO1xuICBlZGl0Um93UGVybWlzc2lvbjogYm9vbGVhbiA9IHRydWU7XG4gIGVkaXRpbmdDZWxsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvLyBBcHBseSBwcm9wIHNldEFnZ3JlZ2F0ZUZvb3RlciBvbiBGb290ZXIgb2YgdGhlIFRhYmxlIGZvciBhZ2dyZWdhdGUuXG4gIHNldEFnZ3JlZ2F0ZUZvb3Rlcjogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBjbGlja1RpbWVvdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGFsbG93IEhpZGUgQWdncmVnYXRlIEZvb3RlciBXaGVuIEFnZ3JlZ2F0ZSBub3QgQXBwbHkgb24gVGFibGUuXG4gIGFnZ3JlZ2F0ZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE1haW50YWlucyBwcmV2aW91cyBzdGF0ZSBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0Um93c1JlY29yZHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgLy8gTWFpbnRhaW5zIHJlY29yZCBvZiByb3dzIGJlaW5nIGVkaXRlZFxuICBlZGl0aW5nUm93S2V5czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBjdXJyZW50VXJsOiBzdHJpbmcgPSBjdXJyZW50VXJsKCk7XG4gIG9uQ2xpY2tFdmVudFRyaWdnZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHJlbWFpbmluZ1Jvd3NEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIEBWaWV3Q2hpbGQoJ2R0JykgdGFibGU6IFRhYmxlO1xuICBAVmlld0NoaWxkKCdtb3JlTWVudScpIG1vcmVNZW51OiBNZW51O1xuXG4gIC8vIFNlbGVjdHMgaXRlbXMgaW4gdGhlIGdyaWQgYmFzZWQgb24gcGFzc2VkIG9uIGRhdGFcbiAgQElucHV0KCkgc2VsZWN0ZWRSb3dzOiBhbnkgPSBbXTtcblxuICBASW5wdXQoKSBzZXRHcmlkUmVmcmVzaFRpbWU6IG51bWJlciA9IDA7XG5cbiAgQElucHV0KCkgYWRkRGF0YUtleVZhbHVlID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc3RvcERpYWxvZ0Nsb3NlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9DaGVja05ld1JvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgZ2xvYmFsRGF0YTogSUdyaWRGaWx0ZXJbXSA9IFtdO1xuXG4gIHNvcnREaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHNvcnRJY29uSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGVkaXRBbGxyb3dzQXRPbmVUaW1lOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2hvd1JlZnJlc2hCdG46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBwdWJsaWMgaGlkZVJlZnJlc2hCdG46IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFN0b3JlcyBzZWxlY3RlZCBjb2x1bW5zXG4gIHByaXZhdGUgX3NlbGVjdGVkQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuICBzZWxlY3RlZFRvZ2dsZUNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXTtcblxuICB2aXNpYmxlQ29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdO1xuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgaG9yaXpvbnRhbCBTY3JvbGwgb24gVGFibGUuXG4gIEBJbnB1dCgpIGhvcml6b250YWxTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgZGVsZXRlIHJvdyBidXR0b24uXG4gIEBJbnB1dCgpIGhpZGVEZWxldGVCdG4gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgZWRpdCByb3cgYnV0dG9uLlxuICBASW5wdXQoKSBoaWRlRWRpdEJ0biA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBhZGQgcm93IGJ1dHRvbi5cbiAgQElucHV0KCkgaGlkZUFkZEJ0biA9IGZhbHNlO1xuXG4gIC8vIFByb3AgdG8gaGFuZGxlIGxvYWRlciBvZiBncmlkXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgLy90aGlzIHByb3BlcnR5IGlzIHVzZWQgdG8gaGFuZGxlIHNlcnZlciBzaWRlIGV2ZW50IGJ5IGRlZmF1bHQgaXQgaXMgdHJ1ZSB3aGVuIGl0IGZhbHNlIHNlcnZlciBzaWRlIGV2ZW50IHdpbGwgbm90IGJlIGNhbGxlZFxuICBASW5wdXQoKSBhdXRvTG9hZERhdGE6IGJvb2xlYW4gPSB0cnVlO1xuXG5cbiAgLy90YWJsZSByb3cgc3R5bGVzXG4gIEBJbnB1dCgpIHJvd1N0eWxlOiBzdHJpbmc7XG5cbiAgLy8gQm9vbGVhbiBwcm9wIHRvIGNoZWNrIHdoZXJlIHNlbGVjdGVkIGlzIGFsbG93ZWQgb3Igbm90LlxuICBASW5wdXQoKSBhbGxvd1NlbGVjdGlvbiA9IGZhbHNlO1xuXG4gIC8vIFNldCBjb2x1bW4gd2lkdGggb2Ygc2VsZWN0ZWQgcm93LlxuICBASW5wdXQoKSBzZWxlY3Rpb25Db2x1bW5XaWR0aDogc3RyaW5nID0gJzgwcHgnO1xuXG4gIC8vIHNldCBzZWxlY3Rpb24gY2hlY2tCb3ggaGVhZGVyXG4gIEBJbnB1dCgpIGFsbG93U2VsZWN0aW9uSGVhZGVyOiBzdHJpbmcgPSAnJztcblxuICAvLyBCb29sZWFuIHByb3AgdG8gaGlkZSB0aGUgc2F2ZSBidXR0b24gb24gdG9wIG9mIGdyaWQuXG4gIEBJbnB1dCgpIGhpZGVHcmlkU2F2ZUJ1dHRvbiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBoaWRlIHRoZSBzYXZlIGJ1dHRvbiBvbiB0b3Agb2YgZ3JpZC5cbiAgQElucHV0KCkgaGlkZUdyaWRDYW5jZWxCdXR0b24gPSBmYWxzZTtcblxuICAvLyBCb29sZWFuIHByb3AgdG8gYWxsb3cgZXhwb3J0IHRvIHBkZi5cbiAgQElucHV0KCkgYWxsb3dFeHBvcnRUb1BkZiA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyBleHBvcnQgdG8gZXhjZWwuXG4gIEBJbnB1dCgpIGFsbG93RXhwb3J0VG9FeGNlbCA9IGZhbHNlO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBzZXQgdGhlIGFjdGlvbiBjb2x1bW4gYXMgZmlyc3QgY29sdW1uLlxuICBASW5wdXQoKSBzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ID0gZmFsc2U7XG5cbiAgLy8gSWYgdHJ1ZSwgZW5hYmxlcyBvcHRpb25zIHRvIHBlcmZvcm0gQ1JVRCB1c2luZyBpbmxpbmUgcm93IGZ1bmN0aW9uYWxpdHlcbiAgQElucHV0KCkgdXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAvLyBpZiB0cnVlLCBpdCB3b250IGFkZCBhIG5ldyByb3cgd2hlbiBjbGljayBhZGRcbiAgQElucHV0KCkgcHJldmVudE5ld1JvdyA9IGZhbHNlO1xuXG4gIC8vIEFycmF5IG9mIHJvdyBhY3Rpb25zXG4gIEBJbnB1dCgpIHJvd0FjdGlvbnM6IElHcmlkUm93QWN0aW9uW10gPSBbXTtcblxuICAvLyBTZXRzIHNlbGVjdGlvbiB0eXBlIGkuZTogc2luZ2xlL211bHRpcGxlIHNlbGVjdGlvblxuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiBFR3JpZFNlbGVjdGlvblR5cGUgPSBFR3JpZFNlbGVjdGlvblR5cGUuU0lOR0xFO1xuXG4gIC8vIFVuaXF1ZSBrZXkgcmVxdWlyZXMgZm9yIGJ1aWx0LWluIHJvdyBzZWxlY3Rpb24gb2YgcHJpbWVOZyBncmlkXG4gIEBJbnB1dCgpIGRhdGFLZXk6IHN0cmluZyA9ICd0ZW1wX2lkJztcblxuICAvLyBGbGFnIGZvciBjbGVhciBmaWx0ZXIgdmFsdWVzIGJ1dHRvblxuICBASW5wdXQoKSBjbGVhckdyaWRGaWx0ZXIgPSB0cnVlO1xuXG4gIC8vIEZsYWcgZm9yIHNlYXJjaCBmaWx0ZXIgdmFsdWVzIGJ1dHRvblxuICBASW5wdXQoKSBzZWFyY2hHcmlkRmlsdGVyID0gdHJ1ZTtcblxuICAvLyBGbGFnIGluIGNhc2UgdGFibGUgaXMgc2Nyb2xsYWJsZVxuICBASW5wdXQoKSBzY3JvbGxhYmxlID0gdHJ1ZTtcblxuICAvLyBTZXRzIHNjcm9sbCBoZWlnaHQgZm9yIHRoZSB0YWJsZVxuICBASW5wdXQoKSBzY3JvbGxIZWlnaHQgPSAnODB2aCc7XG5cbiAgLy8gVGFibGUgc3R5bGVcbiAgQElucHV0KCkgdGFibGVTdHlsZSA9ICcnO1xuXG4gIC8vIEJvb2xlYW4gcHJvcCB0byBhbGxvdyB0byB3cmFwIG9yIHVuV3JhcCB0aGUgZ3JpZC5cbiAgQElucHV0KCkgd29yZFdyYXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBlbGxpcHNpczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIG5ld0dyaWRSb3c6IGFueSA9IHt9O1xuXG4gIEBJbnB1dCgpIGZpbHRlcmluZyA9IHRydWU7XG5cbiAgQElucHV0KCkgcmVwb3J0QnV0dG9uczogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSByb3dIb3ZlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXJPcHRpb25zOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKSBhdXRvQ29tcGxldGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFNldHMgcGFnZW5hdGlvbiBmb3IgdGhlIHRhYmxlIERhdGEuXG4gIEBJbnB1dCgpIHNldFBhZ2luYXRpb25MZW5ndGg6IGFueVtdID0gWzUsIDEwLCAxNSwgeyBzaG93QWxsOiAnQWxsJyB9XTtcblxuICAvLyBzZXQgdGhlIGNoYW5nZSBpbiB0aGUgcm93RGF0YVxuICBAT3V0cHV0KCkgcm93c0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgbG9hZGVyIGFuZCBzZXRzIHRoZSBkYXRhIHRvIGdyaWRcbiAgICogQ2xlYXJzIHRoZSBlZGl0aW5nIHN0YWNrXG4gICAqIFNjcm9sbHMgdG8gc2VsZWN0ZWQgZWxlbWVudCBpZiBzZWxlY3Rpb24gZm91bmRcbiAgICovXG4gIEBJbnB1dCgpIHNldCByb3dzKGRhdGE6IGFueVtdKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5yZW1haW5pbmdSb3dzRGF0YSA9IFtdO1xuICAgIGlmICghdGhpcy5yb3dVcGRhdGVDaGFuZ2UpIHtcbiAgICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQpIHtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGFLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUtleSA9ICd0ZW1wX2lkJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgcm93c0RhdGEgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMoZGF0YSwgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICB0aGlzLm9yaWdpbmFsUm93cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm93c0RhdGEpKTtcbiAgICAgICAgICBpZiAoZGF0YT8ubGVuZ3RoID4gNDAgJiYgIXRoaXMuZ3JpZFNlcnZpY2U/LnJvd1VwZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbGl6ZURhdGEgPSBbLi4ucm93c0RhdGFdO1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSA9IGluaXRpYWxpemVEYXRhLnNwbGljZSgwLCA0MCk7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtYWluaW5nUm93c0RhdGEgPSByb3dzRGF0YS5zcGxpY2UoNDAsIHJvd3NEYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucz8uZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW4/LmFnZ3JlZ2F0ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm93c0RhdGEgPSByb3dzRGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5lZGl0Um93c1JlY29yZHMgPSB7fTtcblxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUm93cyAmJiB0aGlzLmdyaWRSb3c/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudFJlZiA9IHRoaXMuZ3JpZFJvdy5maW5kKFxuICAgICAgICAgICAgICAoeCkgPT4geC5uYXRpdmVFbGVtZW50LmlkID09PSB0aGlzLnNlbGVjdGVkUm93c1t0aGlzLmRhdGFLZXldXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50UmVmICYmXG4gICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MVGFibGVSb3dFbGVtZW50XG4gICAgICAgICAgICAgICkuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy9tYW5pcHVsYXRlIGNoZWNrYm94IHN0cmluZyB2YWx1ZSB0byB0cnVlIGFuZCBmYWxzZS5cbiAgICAgICAgICB0aGlzLmNoYW5nZUNoZWNrYm94U3RyaW5nVmFsdWUoKTtcbiAgICAgICAgICB0aGlzLnNldE51bWVyaWNWYWx1ZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJvd3NEYXRhID0gW107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBHbG9iYWwgZmlsdGVyIHNlcnZlciByZXF1ZXN0XG4gIEBJbnB1dCgpIHNldCBnbG9iYWxGaWx0ZXJEYXRhKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSkge1xuICAgIHRoaXMuZ2xvYmFsRGF0YSA9IHRoaXMuZ3JpZFNlcnZpY2VcbiAgICAgIC5wcmVwYXJlR2xvYmFsRmlsdGVycyhnbG9iYWxGaWx0ZXJzKVxuICAgICAgPy5maWx0ZXIoKHgpID0+IHg/LnZhbHVlICE9PSBmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5lbmFibGVDbGllbnRTaWRlRmlsdGVyaW5nKSB7XG4gICAgICBjb25zdCBnbG9iYWxTZWFyY2hWYWx1ZSA9IGdsb2JhbEZpbHRlcnM/LmZpbmQoeCA9PiB4LmZpZWxkID09PSAnZ2xvYmFsU2VhcmNoJyk/LnZhbHVlO1xuICAgICAgaWYgKGdsb2JhbFNlYXJjaFZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy50YWJsZSkge1xuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckdsb2JhbChnbG9iYWxTZWFyY2hWYWx1ZSwgJ2NvbnRhaW5zJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzXG4gICAgICA/IHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzLmNvbmNhdCh0aGlzLmdsb2JhbERhdGEpXG4gICAgICA6IHRoaXMuZ2xvYmFsRGF0YTtcblxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYXBwbHlGaWx0ZXInKSA9PT0gJ2ZhbHNlJykge1xuICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgPSB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheT8ubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LmNvbmNhdChbLi4uc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnNdKVxuICAgICAgICA6IHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5O1xuICAgIH1cbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FwcGx5RmlsdGVyJykgPT09ICd0cnVlJykge1xuICAgICAgZ2xvYmFsRmlsdGVycy5mb3JFYWNoKChnbG9iYWxGaWx0ZXIpID0+IHtcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkuZm9yRWFjaCgoZmlsdGVyQXJyYXkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBmaWx0ZXJBcnJheS5maWVsZCA9PT0gZ2xvYmFsRmlsdGVyLmZpZWxkICYmXG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXIudmFsdWUgJiZcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlICE9PSBnbG9iYWxGaWx0ZXIudmFsdWVcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZpbHRlckFycmF5LnZhbHVlID0gZ2xvYmFsRmlsdGVyLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheS5maW5kSW5kZXgoXG4gICAgICAgICAgICAoaW5kZXgpID0+IGluZGV4LmZpZWxkID09PSBnbG9iYWxGaWx0ZXIuZmllbGQgJiYgIWdsb2JhbEZpbHRlci52YWx1ZVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGZpbmRJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZS8vdGhpcy5hdXRvTG9hZERhdGE7XG4gICAgICBpZiAodGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50IHx8IHRoaXMuYXV0b0xvYWREYXRhKSB7XG4gICAgICAgIHRoaXMub25BcHBseUZpbHRlci5lbWl0KCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmNvbmNhdChcbiAgICAgICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLmZpbHRlcnMgPSBBcnJheS5mcm9tKFxuICAgICAgICBuZXcgU2V0KFxuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgICAgICAubWFwKChmaWx0ZXI6IGFueSkgPT4gZmlsdGVyLmZpZWxkKVxuICAgICAgICApXG4gICAgICApLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbmQoKHg6IGFueSkgPT4geC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgfSk7XG4gICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycyA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbHRlcihcbiAgICAgICAgKG9iajogYW55KSA9PlxuICAgICAgICAgIG9iaj8udmFsdWUgJiYgb2JqLnZhbHVlPy50b1N0cmluZygpPy5sZW5ndGggPiAwICYmIG9iai5maWVsZFxuICAgICAgKTtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IHNlcnZlckZpbHRlclZhbHVlcztcbiAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmFwcGx5RmlsdGVyRXZlbnQgfHwgdGhpcy5hdXRvTG9hZERhdGEgPT09IHRydWUpIHtcbiAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgYXMgZmlyc3RcbiAgICAgICAgc2VydmVyRmlsdGVyVmFsdWVzLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRSb3dzICYmIHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5wYWdlU2l6ZSA9IHRoaXMuZGVmYXVsdFJvd3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuYXBwbHlGaWx0ZXJFdmVudCkge1xuICAgICAgICAgIHRoaXMuc2V0dXBFbnRlckxpc3RlbmVyKClcbiAgICAgICAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnYXBwbHlGaWx0ZXInKTtcbiAgICAgICAgLy8gc2V0dGluZyBwYWdpbmF0aW9uIHBhZ2UgbnVtYmVyIFVJXG4gICAgICAgIHRoaXMudGFibGUuX2ZpcnN0ID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgc2V0dXBFbnRlckxpc3RlbmVyKCkge1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5oYW5kbGVLZXlVcCk7XG4gIH1cbiAgaGFuZGxlS2V5VXAgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICBjb25zdCBmb2N1c2VkRWxlbWVudCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoZm9jdXNlZEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGZvY3VzZWRFbGVtZW50LnR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNlbGVjdFJvb3RFbGVtZW50KGZvY3VzZWRFbGVtZW50KS5ibHVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIElucHV0IGRlY29yYXRvciB0byByZWNlaXZlIGNvbHVtbnMgdG8gYmUgZGlzcGxheWVkIGluIGhlYWRlclxuICBASW5wdXQoKSBjb2x1bW5zOiBJR3JpZENvbHVtbltdID0gW107XG5cbiAgQElucHV0KCkgcGVybWlzc2lvbnM6IElQZXJtaXNzaW9uW10gPSBbXTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSB0b2dnbGluZyBvZiBjb2x1bW5zXG4gIEBJbnB1dCgpIGFsbG93Q29sdW1uVG9nZ2xlID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoaWRlIGZpbHRlcmluZyBvZiBjb2x1bW5zXG4gIEBJbnB1dCgpIGhpZGVGaWx0ZXIgPSBmYWxzZTtcblxuICAvLyBPcHRpb25hbCBwcm9wIHRvIGhhbmRsZSBsb29rdXAgZmlsdGVyc1xuICBASW5wdXQoKSBsb29rdXBGaWx0ZXJzID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgcGFnaW5hdGlvblxuICBASW5wdXQoKSBwYWdpbmF0aW9uID0gZmFsc2U7XG5cbiAgLy8gT3B0aW9uYWwgcHJvcCB0byBoYW5kbGUgc2hvdyBDdXJyZW50UGFnZSBSZXBvcnRcbiAgQElucHV0KCkgc2hvd0N1cnJlbnRQYWdlUmVwb3J0ID0gZmFsc2U7XG5cbiAgLy8gRGlzcGxheXMgdG90YWwgbnVtYmVyIG9mIHJlY29yZHNcbiAgQElucHV0KCkgdG90YWxSZWNvcmRzID0gMDtcblxuICAvLyBEaXNwbGF5cyBhZ2dyZWdhdGUgdGhhdCBmZXRjaCBmcm9tIHJlY29yZHNcbiAgQElucHV0KCkgYWdncmVnYXRlZFJlc3VsdDogYW55W10gPSBbXTtcblxuICBASW5wdXQoKSBzaG93Y29uZmlybURpYWxvZzogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KCkgc2F2ZUFsbERhdGE6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTZXRzIG51bWJlciBvZiByb3dzIHRvIGJlIHNob3duIHRoZSBncmlkXG4gIEBJbnB1dCgpIGRlZmF1bHRSb3dzOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpIGNvbHVtbkFjdGlvbnM6IElHcmlkQ29sdW1uQWN0aW9uW10gPSBbXTtcblxuICAvLyBEZWNpZGVzIHRoZSBncmlkJ3MgYmVoYXZpb3IgZWl0aGVyIGZvciBjbGllbnQgc2lkZSBvciBzZXJ2ZXIgc2lkZSBldmVudHNcbiAgQElucHV0KCkgdXNlU2VydmVyU2lkZUV2ZW50cyA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVDbGllbnRTaWRlRmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2dsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHNldCBnbG9iYWxGaWx0ZXJGaWVsZHMoZmllbGRzOiBzdHJpbmdbXSkge1xuICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2dsb2JhbEZpbHRlckZpZWxkcyA9IGZpZWxkcy5tYXAoZiA9PiBmLnRvTG93ZXJDYXNlKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9nbG9iYWxGaWx0ZXJGaWVsZHMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIGdldCBnbG9iYWxGaWx0ZXJGaWVsZHMoKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9nbG9iYWxGaWx0ZXJGaWVsZHM7XG4gIH1cblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBjbGlja1xuICBAT3V0cHV0KCkgb25Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IGVtaXQgd2hlbiBjbGljayBvbiBncmlkIGNoZWNrYm94IGZpbHRlclxuICBAT3V0cHV0KCkgb25DaGVja0JveEZpbHRlckNsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBPdXRwdXQgZXZlbnQgdG8gaGFuZGxlIHJvdyBDaGVja0JveFxuICBAT3V0cHV0KCkgb25Sb3dDaGVja0JveDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gc29ydCBjaGFuZ2VcbiAgQE91dHB1dCgpIG9uU29ydENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU29ydD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gT3V0cHV0IGV2ZW50IHRvIHRyaWdnZXIgb24gZmlsdGVyIGNoYW5nZVxuICBAT3V0cHV0KCkgb25GaWx0ZXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byBpbnZva2UgdGhlIG11bHRpU2VsZWN0aW9uIGNsaWNrIGV2ZW50XG4gIEBPdXRwdXQoKSBvbk11bHRpU2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBDYWxscyB3aGVuZXZlciBhIGdyaWQgYW5kIGdsb2JhbEZpbHRlcnMgY2FsbGVkXG4gIEBPdXRwdXQoKSBvbkFwcGx5RmlsdGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxuICBAT3V0cHV0KCkgaXNJbmNsdWRlZEFsbENvbHVtbnM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIENhbGxzIHdoZW5ldmVyIGEgbGF6eSBldmVudCBpcyBkaXNwYXRjaGVkXG4gIEBPdXRwdXQoKVxuICBvblNlcnZlclNpZGVFdmVudENoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkU2VydmVyU2lkZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIE91dHB1dCBldmVudCB0byB0cmlnZ2VyIG9uIHBhZ2luYXRpb25cbiAgQE91dHB1dCgpXG4gIG9uUGFnZUNoYW5nZTogRXZlbnRFbWl0dGVyPElHcmlkUGFnaW5hdGlvbkV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBEaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBlZGl0IHJvd1xuICBAT3V0cHV0KCkgb25Sb3dVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpIG9uUm93T3JkZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIGNhbmNlbCBhbGwgcm93c1xuICBAT3V0cHV0KCkgb25DYW5jZWxBbGxSb3dzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vIERpc3BhdGNoIG91dHB1dCBldmVudCB0cmlnZ2VyIG9uIGRlbGV0ZSByb3dcbiAgQE91dHB1dCgpIG9uUm93RGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8vRGlzcGF0Y2ggb3V0cHV0IGV2ZW50IHRyaWdnZXIgb24gYWRkIHJvd1xuICBAT3V0cHV0KCkgb25Sb3dBZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy9EaXNwYXRjaCBvdXRwdXQgZXZlbnQgdHJpZ2dlciBvbiBhZGQsIHVwZGF0ZSBhbmQgZGVsZXRlIHJvd1xuICBAT3V0cHV0KCkgb25HcmlkUm93QWN0aW9ucyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvLyBzZXQgcHJvcGVydHkgYWxsb3dDYWNoaW5nIGZvciBMb2NhbFN0b3JhZ2VcbiAgQElucHV0KCkgYWxsb3dDYWNoaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy9zZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbnNcbiAgQElucHV0KCkgYWxsb3dQZXJzaXN0ZW5jZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gc2V0IHByb3BlcnR5IHNvZnRDYWNoaW5nIGZvciBzZXR0aW5nIHRoZSB2YWx1ZXMgb2YgZ3JpZEZpbHRlclxuICBASW5wdXQoKSBzb2Z0Q2FjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGVkaXRBbGxSb3dzOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIHNldCB0aGUgcm93IFdoZW4gRWRpdCB0aGUgcm93IG9uIEdyaWRcbiAgQE91dHB1dCgpIG9uR3JpZFJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLy8gc2V0IHRoZSByb3cgV2hlbiBhZGRpbmcgdGhlIG5ldyBSb3cgb24gR3JpZFxuICBAT3V0cHV0KCkgb25HcmlkUm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBJbnB1dCgpIGdyaWROYW1lOiBzdHJpbmcgPSAnJztcbiAgaXNHcmlkSGlkZGVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1dG9SZXNpemU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWxsb3dUZXh0Q29weTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cbiAgcm93c1BlclBhZ2VPcHRpb25zOiBhbnlbXSA9IFs1LCAxMCwgMTUsIHsgc2hvd0FsbDogJ0FsbCcgfV07XG4gIGN1c3RvbVdpZHRoQ29sdW1uczogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xuICBzZWxlY3RlZFJvd1JlY29yZDogYW55O1xuICBzY3JvbGxQb3NpdGlvblk6IG51bWJlciA9IDA7XG4gIHNjcm9sbFBvc2l0aW9uWDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBTeXN0ZW1Db25maWdTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlLFxuICAgIHB1YmxpYyBncmlkU2VydmljZTogR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoZW50aWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBkZWNpbWFsUGlwZTogRGVjaW1hbFBpcGUsXG4gICAgcHJpdmF0ZSBwYWdlTG9nZ2VyU2VydmljZTogUGFnZUxvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBoeXBlcmxpbmtTZXJ2aWNlOiBIeXBlcmxpbmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwdWJsaWMgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIHJlcXVlc3RTZXJ2aWNlOiBSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIGNvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyxcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgcmVmOiBEeW5hbWljRGlhbG9nUmVmXG4gICkgeyB9XG5cbiAgY29uc29sZUxvZyhtZXNzYWdlOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgfVxuXG4gICBtb3VzZUxlYXZlRXZlbnQob3ZlcmxheVBhbmVsKSB7XG4gICAgb3ZlcmxheVBhbmVsLmhpZGUoKTtcbiAgfVxuICBvbkNvbHVtblJlc2l6ZShldmVudDogYW55LCBkdCkge1xuICAgIGlmIChkdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkKSB7XG4gICAgICB0aGlzLmdyaWRJZCA9IGR0LmVsLm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgfVxuICAgIGNvbnN0IG5ld1dpZHRoID0gZXZlbnQuZWxlbWVudC5jbGllbnRXaWR0aCArIDI7XG4gICAgbGV0IGNvbHVtbkhlYWRlciA9IGV2ZW50Py5lbGVtZW50Py5pZD8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoY29sdW1uSGVhZGVyKSB7XG4gICAgICBsZXQgaW5kZXg6IGFueSA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoY29sdW1uKSA9PiBjb2x1bW4uaGVhZGVyPy50b0xvd2VyQ2FzZSgpID09IGNvbHVtbkhlYWRlcik7XG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICBpZiAobmV3V2lkdGgpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1uc1tpbmRleF1bJ2N1c3RvbVdpZHRoJ10gPSBwYXJzZUludChuZXdXaWR0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zYXZlQ29sdW1uV2lkdGhzKCk7XG4gIH1cblxuICBzYXZlQ29sdW1uV2lkdGhzKHRvZ2dsZUNvbHVtbnM6IGFueVtdID0gW10pIHtcbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW4uZmllbGQgJiYgY29sdW1uLmN1c3RvbVdpZHRoKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tV2lkdGhDb2x1bW5zW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4uY3VzdG9tV2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGaWVsZHMgPSB0b2dnbGVDb2x1bW5zPy5sZW5ndGggPiAwID8gdG9nZ2xlQ29sdW1ucyA6IHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5tYXAoKHgpID0+IHguZmllbGQpO1xuICAgIHRoaXMuc2V0TXVsdGlTZWxlY3RUb2dnbGVDb2x1bW4oc2VsZWN0ZWRGaWVsZHMpO1xuICB9XG4gIGxvYWRDb2x1bW5XaWR0aHMoKSB7XG4gICAgbGV0IGN1cnJlbnRVc2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ0N1cnJlbnRVc2VySW5mbycpKTtcbiAgICBpZiAoY3VycmVudFVzZXJJbmZvICYmIGN1cnJlbnRVc2VySW5mby5wYWdlU2V0dGluZykge1xuICAgICAgbGV0IHBhZ2VTZXR0aW5ncyA9IEpTT04ucGFyc2UoY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKVxuICAgICAgcGFnZVNldHRpbmdzLnBhZ2VTZXR0aW5ncy5tYXAocGFnZSA9PiB7XG4gICAgICAgIGlmIChwYWdlLnVybCA9PT0gdGhpcy5yb3V0ZXIudXJsKSB7XG4gICAgICAgICAgcGFnZS5ncmlkU2V0dGluZ3MubWFwKGdyaWRTZXR0aW5nID0+IHtcbiAgICAgICAgICAgIGlmIChncmlkU2V0dGluZy5ncmlkSWQgPT09IHRoaXMuZ3JpZElkICYmIGdyaWRTZXR0aW5nPy5jdXN0b21Db2x1bW5zV2lkdGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29sdW1uc1dpZHRoS2V5cyA9IE9iamVjdC5rZXlzKGdyaWRTZXR0aW5nPy5jdXN0b21Db2x1bW5zV2lkdGgpO1xuICAgICAgICAgICAgICBjb2x1bW5zV2lkdGhLZXlzLmZvckVhY2goKGNvbHVtbktleTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KChzZWxlY3RlZENvbHVtbikgPT4gc2VsZWN0ZWRDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbktleT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tpbmRleF1bJ2N1c3RvbVdpZHRoJ10gPSBncmlkU2V0dGluZz8uY3VzdG9tQ29sdW1uc1dpZHRoW2NvbHVtbktleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHByb2Nlc3NIb3ZlckRhdGEoaG92ZXJEYXRhOiBhbnksIHJvdzogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLmhvdmVyRGF0YT8uZGF0YSB9O1xuICAgICAgY29uc3QgZGF0YUtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICAgIGNvbnN0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgaWYgKGRhdGFLZXlzPy5sZW5ndGggPiAwICYmIHJvd0tleXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGF0YUtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWU/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSAmJiB2YWx1ZT8udG9TdHJpbmcoKS5pbmNsdWRlcygnfScpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoXCJ7XCIsIFwiXCIpLnJlcGxhY2UoXCJ9XCIsIFwiXCIpO1xuICAgICAgICAgICAgbGV0IHJvd0tleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgIHZhciBjb3JyZWN0VmFsdWUgPSByb3dbcm93S2V5XTtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9IGNvcnJlY3RWYWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hLZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoS2V5ICYmICFkYXRhW2tleV0pIHtcbiAgICAgICAgICAgICAgZGF0YVtrZXldID0gcm93W21hdGNoS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGhvdmVyRGF0YT8uc3R5bGUgPyB0aGlzLm92ZXJsYXlQYW5lbFN0eWxlID0gaG92ZXJEYXRhPy5zdHlsZSA6IFwiXCI7XG4gICAgICB0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICAgIGlmICh0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXIgJiYgaG92ZXJEYXRhPy5jb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmOiBhbnkgPSB0aGlzLnBhbmVsT3ZlcmxheVZpZXdDb250YWluZXI/LmNyZWF0ZUNvbXBvbmVudChob3ZlckRhdGE/LmNvbXBvbmVudCk7XG4gICAgICAgIGlmIChob3ZlckRhdGEuZGF0YSkge1xuICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jb25maWcgPSBbXTtcbiAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuY29uZmlnLmRhdGEgPSBkYXRhO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KGhvdmVyRGF0YTogYW55LCBvdmVybGF5UGFuZWw6IGFueSwgZXZlbnQ6IGFueSwgcm93OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnByb2Nlc3NIb3ZlckRhdGEoaG92ZXJEYXRhLCByb3cpO1xuICAgIG92ZXJsYXlQYW5lbC5zaG93KGV2ZW50KTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZENvbHVtbnMoKTogSUdyaWRDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1ucztcbiAgfVxuXG4gIHNldCBzZWxlY3RlZENvbHVtbnModmFsOiBJR3JpZENvbHVtbltdKSB7XG4gICAgLy8gUmVzcGVjdCBgc2hvd0luTW9yZWA6IGRvIG5vdCBhbGxvdyBzZWxlY3RpbmcgY29sdW1ucyB0aGF0IGFyZSBpbnRlbmRlZCBmb3IgTW9yZSBtZW51XG4gICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT5cbiAgICAgICFjb2wuc2hvd0luTW9yZSAmJiB2YWw/LnNvbWUoKHYpID0+IHYuZmllbGQgPT09IGNvbC5maWVsZCAmJiB2LmhlYWRlciA9PT0gY29sLmhlYWRlcilcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuYWxsb3dQZXJzaXN0ZW5jZSAmJiB0aGlzLmFsbG93Q29sdW1uVG9nZ2xlKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHRoaXMuX3NlbGVjdGVkQ29sdW1ucy5tYXAoKHgpID0+IHguZmllbGQpO1xuICAgICAgdGhpcy5zYXZlQ29sdW1uV2lkdGhzKHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG4gIH1cbiAgLy8gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKGNvbCkgPT4gdmFsLmluY2x1ZGVzKGNvbCkpO1xuICAvLyBpZiAodGhpcy5hbGxvd1BlcnNpc3RlbmNlICYmIHRoaXMuYWxsb3dDb2x1bW5Ub2dnbGUpIHtcbiAgLy8gICBjb25zdCBzZWxlY3RlZEZpZWxkcyA9IHZhbC5tYXAoKHgpID0+IHguZmllbGQpO1xuICAvLyAgIHRoaXMuc2F2ZUNvbHVtbldpZHRocyhzZWxlY3RlZEZpZWxkcyk7XG4gIC8vIH1cbiAgLy8gdW5hYmxlIHRvIGFsbG93IHVzZXIgdG8gY29weSB0ZXh0IGZyb20gZ3JpZCB3aGVuIHRoaXMuYWxsb3dUZXh0Q29weSBpcyBzZXQgdG8gZmFsc2UuXG4gIEBIb3N0TGlzdGVuZXIoJ2NvcHknLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdjdXQnLCBbJyRldmVudCddKVxuICBoYW5kbGVDb3B5T3JDdXQoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnkgPSB3aW5kb3c/LmdldFNlbGVjdGlvbigpPy50b1N0cmluZygpIHx8ICcnO1xuICAgIGNvbnN0IGlzTXVsdGlDZWxsU2VsZWN0aW9uID0gc2VsZWN0aW9uLnNwbGl0KC9bXFxuXFx0XSsvKT8uZmlsdGVyKCh4KSA9PiB4ICE9PSAnJyk7XG5cbiAgICBpZiAoIXRoaXMuYWxsb3dUZXh0Q29weSAmJiBpc011bHRpQ2VsbFNlbGVjdGlvbj8ubGVuZ3RoID4gMSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pIG9uQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZWRpdEFsbFJvd3MgJiYgIXRoaXMuaW5FZGl0TW9kZSAmJiB0aGlzLnNlbGVjdGVkUm93UmVjb3JkKSB7XG4gICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGJyb3dzZXIgY2xvc2UgZXZlbnRcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFsnJGV2ZW50J10pXG4gIGJlZm9yZXVubG9hZEhhbmRsZXIoZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLmZvcm1TZXJ2aWNlLmRpc3BsYXlMZWF2ZVdhcm5pbmcgJiYgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ25tZW50IG9mIHNlbGVjdGVkIGNvbHVtbnMgb24gcGFnZSBsb2FkXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLmluY3JlbWVudENhbGxzKCk7XG4gICAgaWYgKHRoaXMuZ3JpZFNlcnZpY2UuZ2V0TnVtYmVyT2ZDYWxscygpID09PSAxKSB7XG4gICAgICB0aGlzLnNlYXJjaGJ0bklkID0gJ3NlYXJjaEdsb2JhbEZpbHRlckJ0bic7XG4gICAgICBpZiAodGhpcy50YWJsZSlcbiAgICAgICAgdGhpcy50YWJsZS5pZCA9ICdHcmlkQ29tcG9uZW50VGFibGUtJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWFyY2hidG5JZCA9IGBGaWx0ZXJfJHtjdXJyZW50VXJsKCl9XyR7dGhpcy5ncmlkU2VydmljZS5nZXROdW1iZXJPZkNhbGxzKCl9YDtcbiAgICAgIGlmICh0aGlzLnRhYmxlKVxuICAgICAgICB0aGlzLnRhYmxlLmlkID0gJ0dyaWRDb21wb25lbnRfJyArIHRoaXMuZ3JpZFNlcnZpY2UuZ2V0TnVtYmVyT2ZDYWxscygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVmcmVzaEdyaWQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vblJvd1VwZGF0ZT8ub2JzZXJ2ZXJzPy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5oaWRlRWRpdEJ0biA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRpdEFsbFJvd3MgJiYgdGhpcy5vblJvd0RlbGV0ZS5vYnNlcnZlcnMubGVuZ3RoID09IDApIHtcbiAgICAgIHRoaXMuZGlzYWJsZWRTYXZlQnRuID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgfSk7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLnNldE51bWVyaWNWYWx1ZXMoKTtcbiAgICAvLyB9LCA1MDApO1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgaWYgKHRoaXMucm93c0NoYW5nZS5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgIC8vICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9LCAyMDAwKTtcbiAgfVxuICAvLyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gIC8vICAgb25HbG9iYWxGaWx0ZXJDb250cm9sUmlnaHRCdG5TdGF0ZUNoYW5nZSgpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgLy8gICAgIHRoaXMuY2hlY2tsaXN0ID0gcmVzcG9uc2U7XG4gIC8vICAgfSlcbiAgLy8gICAvLyB0aGlzLmFkZER5bmFtaWNQYW5lbE92ZXJsYXlDb21wb25lbnQoKVxuICAvLyAgIHRoaXMuY29tcG9uZW50VGFibGVSZWYgPSB0aGlzLnRhYmxlO1xuICAvLyAgIGNvbnN0IGxvb2t1cE1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmxvb2t1cC1tb2RlbCcpO1xuICAvLyAgIGlmIChsb29rdXBNb2RhbCkge1xuICAvLyAgICAgY29uc3QgZm9ybUNvbnRhaW5lciA9IGxvb2t1cE1vZGFsLnF1ZXJ5U2VsZWN0b3IoJy5mb3JtLWNvbnRhaW5lcicpOyBcbiAgLy8gICAgIGlmICghZm9ybUNvbnRhaW5lcikge1xuICAvLyAgICAgdGhpcy5zZXRGb2N1c091dFRvZmlsdGVycyhsb29rdXBNb2RhbCk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyAgIGVsc2V7XG4gIC8vICAgICB0aGlzLnNldEZvY3VzT3V0VG9maWx0ZXJzKCk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMuaXNBcGlFcnJvck9jY3VyZWQoKTtcbiAgLy8gICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gIC8vICAgICBjb25zdCBrZXkgPSB0aGlzLnRhYmxlPy5pZCArIHRoaXMuY3VycmVudFVybDtcbiAgLy8gICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc29mdENhY2hpbmdcbiAgLy8gICAgICAgPyB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1trZXldXG4gIC8vICAgICAgIDogSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsga2V5KSB8fCAnbnVsbCcpO1xuICAvLyAgICAgaWYgKCFjYWNoZWQ/LmZpbHRlcnM/Lmxlbmd0aCkgcmV0dXJuO1xuICAvLyAgICAgaWYgKHRoaXMudXNlU2VydmVyU2lkZUV2ZW50cykge1xuICAvLyAgICAgICB0aGlzLnRhYmxlICYmICh0aGlzLnRhYmxlLl9maXJzdCA9IDApO1xuICAvLyAgICAgICB0aGlzLm9uU2VydmVyU2lkZUV2ZW50Q2hhbmdlLmVtaXQoY2FjaGVkKTtcbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGNhY2hlZC5maWx0ZXJzLmZvckVhY2goKGY6IGFueSkgPT4gdGhpcy50YWJsZT8uZmlsdGVyPy4oZi52YWx1ZSwgZi5maWVsZCwgZi5tYXRjaE1vZGUgfHwgJ3N0YXJ0c1dpdGgnKSk7XG4gIC8vICAgICB9XG4gIC8vICAgfSk7XG4gIC8vIH1cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIG9uR2xvYmFsRmlsdGVyQ29udHJvbFJpZ2h0QnRuU3RhdGVDaGFuZ2UoKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IHJlc3BvbnNlO1xuICAgIH0pXG4gICAgLy8gdGhpcy5hZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KClcbiAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICBjb25zdCBsb29rdXBNb2RhbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sb29rdXAtbW9kZWwnKTtcbiAgICBpZiAobG9va3VwTW9kYWwpIHtcbiAgICAgIGNvbnN0IGZvcm1Db250YWluZXIgPSBsb29rdXBNb2RhbC5xdWVyeVNlbGVjdG9yKCcuZm9ybS1jb250YWluZXInKTtcbiAgICAgIGlmICghZm9ybUNvbnRhaW5lcikge1xuICAgICAgICB0aGlzLnNldEZvY3VzT3V0VG9maWx0ZXJzKGxvb2t1cE1vZGFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNldEZvY3VzT3V0VG9maWx0ZXJzKCk7XG4gICAgfVxuICAgIHRoaXMuaXNBcGlFcnJvck9jY3VyZWQoKTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLnRhYmxlPy5pZCArIHRoaXMuY3VycmVudFVybDtcbiAgICAgIGlmICghdGhpcy5hbGxvd0NhY2hpbmcgJiYgIXRoaXMuc29mdENhY2hpbmcpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIGtleSk7XG4gICAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1trZXldKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFsbG93Q2FjaGluZyB8fCB0aGlzLnNvZnRDYWNoaW5nKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc29mdENhY2hpbmdcbiAgICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW2tleV1cbiAgICAgICAgICA6IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIGtleSkgfHwgJ251bGwnKTtcblxuICAgICAgICBpZiAoY2FjaGVkPy5maWx0ZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICBjYWNoZWQuZmlsdGVycy5mb3JFYWNoKChmOiBhbnkpID0+IHRoaXMudGFibGU/LmZpbHRlcj8uKGYudmFsdWUsIGYuZmllbGQsIGYubWF0Y2hNb2RlIHx8ICdzdGFydHNXaXRoJykpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBjb25zdCB0ZXh0YXJlYXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCcucHJpbWUtdGV4dGFyZWEnKTtcbiAgICB0ZXh0YXJlYXMuZm9yRWFjaCh0ID0+IHRoaXMuYXV0b0dyb3codCkpO1xuICB9XG5cbiAgaXNBcGlFcnJvck9jY3VyZWQoKSB7XG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZS5pc0Vycm9yT2NjdXJlZCgpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgaWYgKHRoaXMudGVtcFNhdmVkUm93Py5sZW5ndGggPiAwICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDAgJiYgIXRoaXMuZWRpdEFsbFJvd3MpIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nUm93S2V5c1t0aGlzLnJvd3NEYXRhW3RoaXMudGVtcFNhdmVkUm93WzBdXVt0aGlzLmRhdGFLZXldXSA9IHJlcztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBzZXRGb2N1c091dFRvZmlsdGVycyhsb29rdXBNb2RhbD8pIHtcbiAgICBsZXQgZmlsdGVycyA9IDgwMDtcbiAgICBsZXQgZmlsdGVyOiBTdWJzY3JpcHRpb24gPSBpbnRlcnZhbChmaWx0ZXJzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgZmlsdGVycyA9IDA7XG4gICAgICBmaWx0ZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuY29sdW1ucz8uZmluZCgoY29sdW1uKSA9PiAhdGhpcy5oaWRlRmlsdGVyICYmICFjb2x1bW4/LmhpZGRlbiAmJiBjb2x1bW4/LmZpbHRlciAmJiAoY29sdW1uPy5maWx0ZXJpbmcgPT09IHRydWUgfHwgY29sdW1uPy5maWx0ZXJpbmcgPT09IHVuZGVmaW5lZCkpO1xuICAgICAgY29uc3QgZmlsdGVyRmllbGQ6IGFueSA9IGxvb2t1cE1vZGFsPy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZpbHRlckNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgY29uc3QgZmlsdGVyRmllbGRzOiBhbnkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGZpbHRlckNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGZpbHRlckZpZWxkIHx8IGZpbHRlckZpZWxkcykge1xuICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aXZlID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICBpZiAoYWN0aXZlICYmIGFjdGl2ZSAhPT0gZG9jdW1lbnQuYm9keSAmJiAoWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXS5pbmNsdWRlcyhhY3RpdmUudGFnTmFtZSkgfHwgKGFjdGl2ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGFjdGl2ZS5pc0NvbnRlbnRFZGl0YWJsZSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmVsPy5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCdbZGF0YS1mb2N1cy1kZWNsaW5lZD1cInRydWVcIl0nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmlsdGVyRmllbGQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpbHRlckZpZWxkWzBdPy5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJGaWVsZHM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpbHRlckZpZWxkc1swXT8uZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKCk7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yZXNldENhbGxzKCk7XG4gIH1cblxuICAvLyBzZXQgTXVsdGlzZWxlY3QgVG9nZ2xlIENvbHVtbiAvL1xuICBzZXRNdWx0aVNlbGVjdFRvZ2dsZUNvbHVtbihzZWxlY3RlZEZpZWxkczogYW55W10gPSBbXSkge1xuICAgIGlmICh0aGlzLnVzZXJTZXR0aW5nPy5wYWdlU2V0dGluZ3M/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1hdGNoVXJsID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzPy5maW5kSW5kZXgoKHBhZ2UpID0+IHBhZ2U/LnVybCA9PT0gdGhpcy5yb3V0ZXIudXJsKVxuICAgICAgaWYgKG1hdGNoVXJsID4gLTEpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hHcmlkID0gdGhpcy51c2VyU2V0dGluZz8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kSW5kZXgoKGdyaWRTZXR0aW5nKSA9PiBncmlkU2V0dGluZz8uZ3JpZElkID09PSB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCk7XG4gICAgICAgIGlmIChtYXRjaEdyaWQgPiAtMSkge1xuICAgICAgICAgIHRoaXMudXNlclNldHRpbmc/LnBhZ2VTZXR0aW5nc1ttYXRjaFVybF0/LmdyaWRTZXR0aW5ncy5zcGxpY2UobWF0Y2hHcmlkLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRncmlkU2V0dGluZ3Moc2VsZWN0ZWRGaWVsZHMsIG1hdGNoVXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MgPSBbXTtcbiAgICAgIHRoaXMuc2V0Z3JpZFNldHRpbmdzKHNlbGVjdGVkRmllbGRzKTtcbiAgICB9XG4gIH1cblxuICBnZXRTZWxlY3RlZENvbEZyb21Mb2NhbFN0cm9yYWdlKHNlbGVjdGVkQ29sdW1uKSB7XG4gICAgbGV0IGFyciA9IFtdO1xuICAgIGlmIChzZWxlY3RlZENvbHVtbiAmJiBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBtYXRjaFVybCA9IHNlbGVjdGVkQ29sdW1uPy5wYWdlU2V0dGluZ3M/LmZpbmRJbmRleCgocGFnZSkgPT4gcGFnZT8udXJsID09PSB0aGlzLnJvdXRlci51cmwpXG4gICAgICBpZiAobWF0Y2hVcmwgPiAtMSkge1xuICAgICAgICBjb25zdCBtYXRjaEdyaWQgPSBzZWxlY3RlZENvbHVtbj8ucGFnZVNldHRpbmdzW21hdGNoVXJsXT8uZ3JpZFNldHRpbmdzPy5maW5kKChncmlkU2V0dGluZykgPT4gZ3JpZFNldHRpbmc/LmdyaWRJZCA9PT0gdGhpcy5ncmlkSWQpO1xuICAgICAgICBpZiAobWF0Y2hHcmlkICYmIG1hdGNoR3JpZC5zZWxlY3RlZENvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAobWF0Y2hHcmlkLnNlbGVjdGVkQ29sdW1ucy5zb21lKChmaWVsZE5hbWUpID0+IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgYXJyLnB1c2goY29sdW1uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFycj8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHNldGdyaWRTZXR0aW5ncyhzZWxlY3RlZEZpZWxkczogYW55LCBtYXRjaFVybD86IGFueSkge1xuICAgIGlmIChzZWxlY3RlZEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgZ3JpZFNldHRpbmdzOiBhbnlbXSA9IFtdO1xuICAgICAgZ3JpZFNldHRpbmdzLnB1c2goe1xuICAgICAgICBncmlkSWQ6IHRoaXMuZ3JpZElkLFxuICAgICAgICBzZWxlY3RlZENvbHVtbnM6IHNlbGVjdGVkRmllbGRzLFxuICAgICAgICBjdXN0b21Db2x1bW5zV2lkdGg6IHRoaXMuY3VzdG9tV2lkdGhDb2x1bW5zLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IHBhZ2VTZXR0aW5nID0ge1xuICAgICAgICB1cmw6IHRoaXMucm91dGVyLnVybCxcbiAgICAgICAgZ3JpZFNldHRpbmdzOiBncmlkU2V0dGluZ3MsXG4gICAgICAgIGxhc3RVcGRhdGVkOiBuZXcgRGF0ZSgpXG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJTZXR0aW5nLmxhc3RVcGRhdGVkID0gbmV3IERhdGUoKTtcbiAgICAgIGlmIChtYXRjaFVybCA+IC0xKSB7XG4gICAgICAgIHRoaXMudXNlclNldHRpbmcucGFnZVNldHRpbmdzW21hdGNoVXJsXSA9IHBhZ2VTZXR0aW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51c2VyU2V0dGluZy5wYWdlU2V0dGluZ3MucHVzaChwYWdlU2V0dGluZyk7XG4gICAgICB9XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IEpTT04uc3RyaW5naWZ5KHRoaXMudXNlclNldHRpbmcpO1xuICAgICAgY2hhbmdlQ29sdW1uc1N0YXRlKHsgcGFnZVNldHRpbmc6IHBhZ2VJbmZvIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFwcGx5IHVzZXIgcm9sZSBwZXJtaXNzaW9ucyBvbiBncmlkIGNvbHVtbnNcbiAgYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgbGV0IHRvdGFsRmllbGRzOiBudW1iZXIgPSAwO1xuICAgICAgbGV0IGhpZGRlbkZpZWxkczogbnVtYmVyID0gMDtcblxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogSUdyaWRDb2x1bW4pID0+IHtcbiAgICAgICAgbGV0IHBlcm1pc3Npb25zOiBJUGVybWlzc2lvbltdID0gY29sdW1uLnBlcm1pc3Npb25zO1xuICAgICAgICBsZXQgaGFzVmFsaWRFZGl0UGVybWlzc2lvbiA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwZXJtaXNzaW9ucyAmJiBwZXJtaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcGVybWlzc2lvbnMuZm9yRWFjaCgocGVybWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgbGV0IGlzVmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLnJvbGVzICYmIHBlcm1pc3Npb24ucm9sZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBwZXJtaXNzaW9uLnJvbGVzLmZvckVhY2goKHJvbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgdGhpcy5yb2xlcyAmJiB0aGlzLnJvbGVzLmluY2x1ZGVzKHJvbGUpKSB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuVklFVyAmJlxuICAgICAgICAgICAgICAgICFoYXNWYWxpZEVkaXRQZXJtaXNzaW9uXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuRURJVCkge1xuICAgICAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRvdGFsRmllbGRzKys7XG4gICAgICAgIGlmIChjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgaGlkZGVuRmllbGRzKys7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzQ29sdW1uSGlkZGVuID0gdG90YWxGaWVsZHMgPiAwICYmIHRvdGFsRmllbGRzID09PSBoaWRkZW5GaWVsZHM7XG4gICAgfVxuICB9XG5cbiAgLy8gYXBwbHkgZ2xvYmFsIHBlcm1pc3Npb25zIG9uIGVudGlyZSBncmlkXG4gIGFwcGx5R3JpZFBlcm1pc3Npb25zKCkge1xuICAgIGlmICh0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGhhc1ZhbGlkRWRpdFBlcm1pc3Npb24gPSBmYWxzZTtcblxuICAgICAgLy8gY2hlY2sgaWYgYW55IGNvbHVtbiBoYXMgYW55IHBlcm1pc3Npb25cbiAgICAgIGxldCBoYXNDb2x1bW5QZXJtaXNzaW9ucyA9IHRoaXMuY29sdW1ucz8uc29tZShcbiAgICAgICAgKHgpID0+IHg/LnBlcm1pc3Npb25zICYmIHgucGVybWlzc2lvbnMubGVuZ3RoID4gMFxuICAgICAgKTtcblxuICAgICAgdGhpcy5wZXJtaXNzaW9ucy5mb3JFYWNoKChwZXJtaXNzaW9uKSA9PiB7XG4gICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgcGVybWlzc2lvbi5yb2xlcy5mb3JFYWNoKChyb2xlKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1ZhbGlkICYmIHRoaXMucm9sZXMgJiYgdGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQ1JVRCAmJiAhaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHBlcm1pc3Npb24udHlwZSA9PT0gRVBlcm1pc3Npb25UeXBlLlZJRVcgJiZcbiAgICAgICAgICAhaGFzVmFsaWRFZGl0UGVybWlzc2lvblxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnVzZUlubGluZUNSVUQgPSB0cnVlO1xuICAgICAgICAgIGlmICghaXNWYWxpZCAmJiAhaGFzQ29sdW1uUGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNHcmlkSGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMudXNlSW5saW5lQ1JVRCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwZXJtaXNzaW9uLnR5cGUgPT09IEVQZXJtaXNzaW9uVHlwZS5FRElUICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5pc0dyaWRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICBoYXNWYWxpZEVkaXRQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmVkaXRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuREVMRVRFICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAocGVybWlzc2lvbi50eXBlID09PSBFUGVybWlzc2lvblR5cGUuQUREUk9XICYmICFpc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5hZGRSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5vblJvd0FkZC5vYnNlcnZlcnMubGVuZ3RoID09IDApIHRoaXMuYWRkUm93UGVybWlzc2lvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLm9uUm93RGVsZXRlLm9ic2VydmVycy5sZW5ndGggPT0gMCkgdGhpcy5kZWxldGVSb3dQZXJtaXNzaW9uID0gZmFsc2U7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2U6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmdSb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMucm93c0RhdGEgPSBbLi4udGhpcy5yb3dzRGF0YSwgLi4udGhpcy5yZW1haW5pbmdSb3dzRGF0YV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmICghdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgJiYgIXRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlKSB7XG4gICAgICB0aGlzLnNldEdyaWRJZCgpXG4gICAgICB0aGlzLmNvbXBvbmVudFRhYmxlUmVmID0gdGhpcy50YWJsZTtcbiAgICAgIGxldCBnZXRTZWxlY3RlZENvbCA9IFtdXG4gICAgICBpZiAodGhpcy5hbGxvd0NhY2hpbmcgIT09IGZhbHNlICYmIHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgICB0aGlzLmFsbG93Q2FjaGluZyA9IHRoaXMucGFnaW5hdGlvbjtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsKTtcbiAgICAgIH1cbiAgICAgIC8vIGFkZCBkZWZhdWx0Um93IGluIHBhZ2luYXRpb24gYXJyYXlcbiAgICAgIGlmICghdGhpcy5zZXRQYWdpbmF0aW9uTGVuZ3RoLmluY2x1ZGVzKHRoaXMuZGVmYXVsdFJvd3MpKSB7XG4gICAgICAgIHRoaXMuc2V0UGFnaW5hdGlvbkxlbmd0aC51bnNoaWZ0KHRoaXMuZGVmYXVsdFJvd3MpO1xuICAgICAgfVxuICAgICAgY29uc3QgaGFzQ29sdW1uczogYm9vbGVhbiA9IHRoaXMuY29sdW1ucyAmJiB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMDtcbiAgICAgIGlmIChoYXNDb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0Q29sdW1uRmllbGRzKHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUb2dnbGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zPy5maWx0ZXIoKHgpID0+ICF4LmhpZGRlbiAmJiAheC5zaG93SW5Nb3JlKTtcbiAgICAgICAgY29uc3QgY3VycmVudFVzZXJJbmZvID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnQ3VycmVudFVzZXJJbmZvJykpO1xuICAgICAgICAvL3NldCBnZXRTZWxlY3RlZENvbCBjb2x1bW5zIGZvciB0b2dnbGVDb3VsbW4gXG4gICAgICAgIGlmICh0aGlzLmFsbG93UGVyc2lzdGVuY2UgJiYgdGhpcy5hbGxvd0NvbHVtblRvZ2dsZSkge1xuICAgICAgICAgIGlmIChjdXJyZW50VXNlckluZm8gJiYgY3VycmVudFVzZXJJbmZvLnBhZ2VTZXR0aW5nKSB7XG4gICAgICAgICAgICBnZXRTZWxlY3RlZENvbCA9IHRoaXMuZ2V0U2VsZWN0ZWRDb2xGcm9tTG9jYWxTdHJvcmFnZShKU09OLnBhcnNlKGN1cnJlbnRVc2VySW5mby5wYWdlU2V0dGluZykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJvbGVzID0gdGhpcy5hdXRoU2VydmljZS5nZXRVc2VyUm9sZXMoKTtcblxuICAgICAgICAvLyBhcHBseSB1c2VyIHJvbGUgcGVybWlzc2lvbnMgb24gZ3JpZCBjb2x1bW5zXG4gICAgICAgIHRoaXMuYXBwbHlDb2x1bW5zUGVybWlzc2lvbnMoKTtcblxuICAgICAgICAvLyBhcHBseSBnbG9iYWwgcGVybWlzc2lvbnMgb24gZW50aXJlIGdyaWRcbiAgICAgICAgdGhpcy5hcHBseUdyaWRQZXJtaXNzaW9ucygpO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM/LmZpbHRlcigoeCkgPT4gKHguc2hvdyA9PT0gdHJ1ZSB8fCB4LnNob3cgPT09IHVuZGVmaW5lZCkgJiYgIXguaGlkZGVuICYmICF4LnNob3dJbk1vcmUpO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgLy9sb2FkIGNvbHVtbiB3aXRkdGggb24gcGFnZSByZWxvYWRcbiAgICAgICAgdGhpcy5sb2FkQ29sdW1uV2lkdGhzKCk7XG4gICAgICAgIGlmICh0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLnNldFRvb2x0aXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNraW5nIGZpbHRlciBleGlzdCBvciBub3RcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnNvbWUoXG4gICAgICAgICAgKGNvbHVtbikgPT4gY29sdW1uLmZpbHRlcmluZyA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi5maWx0ZXJpbmcgPT09IHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZpbHRlciA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLmhpZGVGaWx0ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWx0ZXJGb2N1cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBzZXQgaXNSZXF1aXJlZCB0cnVlIGZvciByZXF1aXJlZCBjb2x1bW4gdG8gc2hvdyBhc3RyaWMgaW4gY29sdW1uIGhlYWRlclxuICAgICAgICAgIGlmIChjb2x1bW4udmFsaWRhdGlvbnM/LmZpbmQodmFsaWRhdGlvbiA9PiB2YWxpZGF0aW9uLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUkVRVUlSRUQpKSB7XG4gICAgICAgICAgICBjb2x1bW4uaXNSZXF1aXJlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHNldCBudW1lcmljIG51bGwgb3IgdW5kZWZpbmUgZGF0YSBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgaWYgKChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUMgfHwgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuVEVYVCB8fCBjb2x1bW4udHlwZSA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSB8fCBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSAmJiBjb2x1bW4udmFsdWUgJiYgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi52YWx1ZSAmJiAocm93W2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy52YWx1ZSA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy52YWx1ZSA6IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9zZXQgdGV4dFR5cGUgZm9yIGEgY29sdW1uIHRoYXQgaXMgZm9ybWF0dGVkIHRvIGJlIGEgcGFzc3dvcmRcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdCA9PSAncGFzc3dvcmQnICYmICghY29sdW1uLnRleHRUeXBlIHx8IGNvbHVtbi50ZXh0VHlwZSAhPT0gJ3RleHQnKSkge1xuICAgICAgICAgICAgY29sdW1uLnRleHRUeXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgICAgICB9IGVsc2UgY29sdW1uLnRleHRUeXBlID0gJ3RleHQnO1xuICAgICAgICAgIC8vIGNvbnZlcnQgc3RyaW5nIHRpbWUgaW50byB0aGUgZGF0ZVxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1BNJykgfHxcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0udG9TdHJpbmcoKS5pbmNsdWRlcygnQU0nKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gc2V0VGltZUluRGF0ZShyb3dbY29sdW1uLmZpZWxkXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi5taW51dGVzSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdzdHJpbmcnICYmICFyb3dbY29sdW1uLmZpZWxkXS5pbmNsdWRlcygnVCcpKSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHJvd1tjb2x1bW4uZmllbGRdIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmhpZGVGaWx0ZXIgJiYgY29sdW1uLmZpbHRlclZhbHVlICYmIGNvbHVtbi5maWx0ZXIgJiYgY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIHNldCBmaWx0ZXIgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlUZXh0VmFsdWUoY29sdW1uKTtcbiAgICAgICAgICB0aGlzLnNldERpc3BsYXlGaWVsZFZhbHVlKGNvbHVtbik7XG5cbiAgICAgICAgICAvL0FnZ3JlZ2F0ZSBzY2VuYXJpb1xuICAgICAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHNlYXJjaEZpbHRlcnM7XG4gICAgICAgICAgaWYgKCF0aGlzLnNvZnRDYWNoaW5nICYmIHRoaXMudGFibGU/LmlkKSB7XG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ1NldEZpbHRlcnMtJyArIHRoaXMudGFibGU/LmlkICsgdGhpcy5jdXJyZW50VXJsKSBhcyBhbnlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRhYmxlPy5pZCkge1xuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMudGFibGU/LmlkICsgdGhpcy5jdXJyZW50VXJsXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuaGlkZUZpbHRlciAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycyAmJlxuICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzICYmXG4gICAgICAgICAgICBzZWFyY2hGaWx0ZXJzLmZpbHRlcnM/Lmxlbmd0aCA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHNlYXJjaEZpbHRlcnMuZmlsdGVycy5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHguZmllbGQgPT09IGNvbHVtbi5maWVsZCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4/LmZpbHRlcj8udHlwZSA9PT0gJ2NhbGVuZGFyJyAmJiB4LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oeC52YWx1ZSwgJ01NLWRkLXl5eXknKTtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QgJiYgIUFycmF5LmlzQXJyYXkoeC52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IHgudmFsdWU/LnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh4LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBjb2x1bW4udHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVfb2JqJykgPyBjb2x1bW5bJ2ZpbHRlclZhbHVlX29iaiddPy50ZXh0IDogeC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBjb252ZXJ0aW5nIGRpc3BsYXlGaWVsZCB0b0xvd2VyY2FzZVxuICAgICAgICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBjb2x1bW4uZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzZXQgQXV0b0NvbXBsZXRlIERhdGFcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YT8ubGVuZ3RoID4gMFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgLy8gY29udmVydCBzdHJpbmcgdGhhdCBjb250YWlucyBjb21tYSBpbnRvIGFycmF5c1xuICAgICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCkuaW5jbHVkZXMoJzsnKSkge1xuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF1cbiAgICAgICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCc7JylcbiAgICAgICAgICAgICAgICAgID8ubWFwKCh2YWx1ZTogYW55KSA9PiAoeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUgfSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGtleTogYW55ID0gT2JqZWN0LmtleXMocm93KS5maW5kKCh4KSA9PiB4ID09PSBjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgc2ltcGxlIHN0cmluZyBpbnRvIGFycmF5XG4gICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dba2V5XSkgJiYgcm93W2tleV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgICAgcm93W2tleV0gPSBbeyBbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXSwgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldIH1dO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm9wdGlvbkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1trZXldID0gW3sgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHJvd1trZXldLCBbY29sdW1uLm9wdGlvbkxhYmVsPy50b0xvd2VyQ2FzZSgpXTogcm93W2tleV0gfV07XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByb3dba2V5XSA9IFt7IFtjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldOiByb3dba2V5XSB9XTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vd2hlbiB3ZSBhZGQgYSBuZXcgcm93LCBpdCBzZXQgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICBpZiAoY29sdW1uLnZhbHVlKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gT2JqZWN0LmtleXModGhpcy5uZXdHcmlkUm93KS5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgICB0aGlzLm5ld0dyaWRSb3dbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSB7XG4gICAgICAgICAgICB0aGlzLnNldExpbmtUYWJTZXR0aW5ncyhjb2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dQZXJzaXN0ZW5jZSAmJiBnZXRTZWxlY3RlZENvbD8ubGVuZ3RoID4gMCAmJiB0aGlzLmFsbG93Q29sdW1uVG9nZ2xlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RDb2x1bW5zKGdldFNlbGVjdGVkQ29sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdENvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnbG9iYWxGaWx0ZXJCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNlYXJjaGJ0bklkKTtcbiAgICAgICAgaWYgKGdsb2JhbEZpbHRlckJ0bikge1xuICAgICAgICAgIHRoaXMuc2hvd0ZpbHRlcmJ0biA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZS5yb3dzKSB7XG4gICAgICAgICAgY29uc3QgY2xhc3NFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaGlnaGxpZ2h0ZWQtcm93Jyk7XG4gICAgICAgICAgaWYgKGNsYXNzRWxlbWVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjbGFzc0VsZW1lbnRbMF0uc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCEodGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZWRpdEFsbFJvd3MpICYmIHRoaXMucm93c0RhdGE/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc29ydEljb25IaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ3VzdG9tU29ydGluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUgPSB0cnVlO1xuICAgICAgY29uc3QgZ2xvYmFsU2VhcmNoYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2dsb2JhbFNlYXJjaGJ0bicpO1xuICAgICAgaWYgKGdsb2JhbFNlYXJjaGJ0bikge1xuICAgICAgICB0aGlzLnNlYXJjaEdyaWRGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkpIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucm93c0RhdGEpKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5zdG9wRGlhbG9nQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0Um93Q2xpY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuXG4gIH1cblxuICBoYW5kbGVDdXN0b21Tb3J0aW5nKCkge1xuICAgIHRoaXMuUGFnZUNoYW5nZSA9IGZhbHNlO1xuICAgIC8vIFNvcnQgYnkgZXZlcnkgYWN0aXZlIGNvbHVtbiBpbiBwcmlvcml0eSBvcmRlciwgZmFsbGluZyBiYWNrIHRvIHRoZSBzaW5nbGUgc29ydERhdGEuXG4gICAgY29uc3Qgc29ydExpc3Q6IElHcmlkU29ydFtdID0gKHRoaXMubXVsdGlTb3J0RGF0YSAmJiB0aGlzLm11bHRpU29ydERhdGEubGVuZ3RoKVxuICAgICAgPyB0aGlzLm11bHRpU29ydERhdGFcbiAgICAgIDogKHRoaXMuc29ydERhdGEgJiYgdGhpcy5zb3J0RGF0YS5maWVsZCA/IFt0aGlzLnNvcnREYXRhXSA6IFtdKTtcbiAgICBpZiAoIXNvcnRMaXN0Lmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3Qgbm9ybWFsaXplID0gKHZhbDogYW55KSA9PlxuICAgICAgdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkID8gJycgOiBTdHJpbmcodmFsKS50cmltKCk7XG5cbiAgICAvLyBDb21wYXJlcyB0d28gcm93cyBieSBhIHNpbmdsZSBjb2x1bW47IGVtcHRpZXMgc29ydCBmaXJzdCBhbmQgbnVtZXJpYyB2YWx1ZXMgY29tcGFyZSBhcyBudW1iZXJzLlxuICAgIGNvbnN0IGNvbXBhcmVCeUZpZWxkID0gKGE6IGFueSwgYjogYW55LCBmaWVsZDogc3RyaW5nLCBkaXJlY3Rpb246IEVHcmlkU29ydERpcmVjdGlvbik6IG51bWJlciA9PiB7XG4gICAgICBjb25zdCBBU0MgPSBkaXJlY3Rpb24gPT09IEVHcmlkU29ydERpcmVjdGlvbi5BU0M7XG4gICAgICBjb25zdCBhVmFsID0gbm9ybWFsaXplKGFbZmllbGRdKTtcbiAgICAgIGNvbnN0IGJWYWwgPSBub3JtYWxpemUoYltmaWVsZF0pO1xuXG4gICAgICBjb25zdCBhRW1wdHkgPSBhVmFsID09PSAnJztcbiAgICAgIGNvbnN0IGJFbXB0eSA9IGJWYWwgPT09ICcnO1xuXG4gICAgICBpZiAoYUVtcHR5ICYmIGJFbXB0eSkgcmV0dXJuIDA7XG4gICAgICBpZiAoYUVtcHR5KSByZXR1cm4gQVNDID8gLTEgOiAxO1xuICAgICAgaWYgKGJFbXB0eSkgcmV0dXJuIEFTQyA/IDEgOiAtMTtcblxuICAgICAgY29uc3QgYU51bSA9IHBhcnNlRmxvYXQoYVZhbCk7XG4gICAgICBjb25zdCBiTnVtID0gcGFyc2VGbG9hdChiVmFsKTtcbiAgICAgIGlmICghaXNOYU4oYU51bSkgJiYgIWlzTmFOKGJOdW0pKSByZXR1cm4gQVNDID8gYU51bSAtIGJOdW0gOiBiTnVtIC0gYU51bTtcblxuICAgICAgcmV0dXJuIEFTQyA/IGFWYWwubG9jYWxlQ29tcGFyZShiVmFsKSA6IGJWYWwubG9jYWxlQ29tcGFyZShhVmFsKTtcbiAgICB9O1xuXG4gICAgLy8gV2FsayB0aGUgY29sdW1ucyBpbiBvcmRlcjsgdGhlIGZpcnN0IHRoYXQgc2VwYXJhdGVzIHRoZSB0d28gcm93cyBkZWNpZGVzLCBzbyBsYXRlciBjb2x1bW5zXG4gICAgLy8gb25seSBicmVhayB0aWVzIGxlZnQgYnkgdGhlIGVhcmxpZXIgb25lcyDigJQgdGhhdCBpcyB3aGF0IG1ha2VzIHRoZSBzZWNvbmRhcnkgc29ydCB0YWtlIGVmZmVjdC5cbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4udGhpcy5yb3dzRGF0YV0uc29ydCgoYSwgYikgPT4ge1xuICAgICAgZm9yIChjb25zdCBzb3J0IG9mIHNvcnRMaXN0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbXBhcmVCeUZpZWxkKGEsIGIsIHNvcnQuZmllbGQsIHNvcnQuZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gMCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yb3dzRGF0YSA9IHNvcnRlZDtcbiAgICB0aGlzLnRhYmxlLnNvcnRGaWVsZCA9IHNvcnRMaXN0WzBdLmZpZWxkO1xuICAgIHRoaXMudGFibGUuc29ydE9yZGVyID0gc29ydExpc3RbMF0uZGlyZWN0aW9uID09PSBFR3JpZFNvcnREaXJlY3Rpb24uQVNDID8gMSA6IC0xO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHNldExpbmtUYWJTZXR0aW5ncyhjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgY29uc3QgdXNlclNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJTZXR0aW5nXCIpO1xuICAgIGlmICh1c2VyU2V0dGluZykge1xuICAgICAgY29uc3QgcGFyc2VkU2V0dGluZyA9IEpTT04ucGFyc2UodXNlclNldHRpbmcpO1xuICAgICAgaWYgKGNvbHVtbj8udGFyZ2V0VXNlVXNlclByZWYpIHtcbiAgICAgICAgY29sdW1uLnRhcmdldCA9IHBhcnNlZFNldHRpbmc/LnZhbHVlID09PSBcIm9wZW5MaW5rSW5DdXJyZW50VGFiXCIgPyBFR3JpZGxpbmsuU0VMRiA6IEVHcmlkbGluay5CTEFOSztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRHcmlkSWQoKSB7XG4gICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgIGxldCB0YWJsZXMgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdwLXRhYmxlJyk7XG4gICAgaWYgKHRhYmxlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgdGFibGVzLmZvckVhY2goKHRhYmxlLCBpbmRleCkgPT4ge1xuICAgICAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy5jdXJyZW50VXJsICsgY291bnRlcisrKTtcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIHNldFNlbGVjdENvbHVtbnMoY29sdW1ucykge1xuICAgIHRoaXMuX3NlbGVjdGVkQ29sdW1ucyA9IFtdO1xuICAgIGNvbHVtbnM/LmZvckVhY2goKHgsIGkpID0+IHtcbiAgICAgIGlmICgoeC5zaG93ID09PSB0cnVlIHx8IHguc2hvdyA9PT0gdW5kZWZpbmVkKSAmJiAheC5oaWRkZW4gJiYgIXguc2hvd0luTW9yZSkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnNbaV0pIHtcbiAgICAgICAgICB4LnZhbHVlID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbaV0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb2x1bW5zLnB1c2goeCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhdXRvQ29tcGxldGVTZWxlY3RlZFZhbHVlKHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCB2YWx1ZSkge1xuICAgIGlmIChjb2x1bW4ub3B0aW9uTGFiZWwpIHtcbiAgICAgIGNvbnN0IHZhbHVlS2V5ID0gY29sdW1uLm9wdGlvblZhbHVlID8gY29sdW1uLm9wdGlvblZhbHVlIDogY29sdW1uLmZpZWxkO1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBbLi4ucm93W2NvbHVtbi5maWVsZF0sIHtcbiAgICAgICAgW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV06IHZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKV0sIFt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXSxcbiAgICAgICAgW2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV06IHZhbHVlW3ZhbHVlS2V5Py50b0xvd2VyQ2FzZSgpXVxuICAgICAgfV07XG4gICAgICBjb25zdCBpbmRleCA9IHJvd1tjb2x1bW4uZmllbGRdPy5maW5kSW5kZXgoKHgpID0+IEpTT04uc3RyaW5naWZ5KHgpID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvLyBzZXQgRGlzcGxheVRleHQgd2hlbiB2YWx1ZSBpcyBpbiBjdXJseSBicmFja2V0cy5cbiAgc2V0RGlzcGxheVRleHRWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uKSB7XG4gICAgdGhpcy5yb3dzRGF0YT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICBFR3JpZENvbHVtblR5cGUuRElBTE9HIHx8XG4gICAgICAgIEVHcmlkQ29sdW1uVHlwZS5JRlJBTUVcbiAgICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddO1xuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlUZXh0ICYmIGNvbHVtbi5kaXNwbGF5VGV4dC5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgY29uc3QgZGlzcGxheVRleHQgPSBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKTtcbiAgICAgICAgICBpZiAoZGlzcGxheVRleHQgJiYgZmllbGQpIHtcbiAgICAgICAgICAgIGZpZWxkLmRpc3BsYXlUZXh0ID0gcm93W2Rpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheVRleHQgJiYgZmllbGQpIHtcbiAgICAgICAgICBmaWVsZC5kaXNwbGF5VGV4dCA9IGNvbHVtbi5kaXNwbGF5VGV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGlzcGxheUZpZWxkVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbikge1xuICAgIHRoaXMucm93c0RhdGE/LmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddO1xuICAgICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZCA9IGNvbHVtbi5kaXNwbGF5RmllbGQ7XG4gICAgICAgICAgaWYgKGRpc3BsYXlGaWVsZCAmJiBmaWVsZCkge1xuICAgICAgICAgICAgZmllbGQuZGlzcGxheUZpZWxkID0gcm93W2Rpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkICYmIGZpZWxkKSB7XG4gICAgICAgICAgZmllbGQuZGlzcGxheUZpZWxkID0gY29sdW1uLmRpc3BsYXlGaWVsZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25UZXh0YXJlYUJsdXIoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBjb25zdCBpZCA9IGNvbHVtbi5maWVsZCArICctJyArIHJvd1t0aGlzLmRhdGFLZXldO1xuICAgIGNvbnN0IHRleHRhcmVhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgdGV4dGFyZWFbZGF0YS1jZWxsPVwiJHtpZH1cIl1gKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuXG4gICAgaWYgKHRleHRhcmVhKSB7XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgIHRleHRhcmVhLnN0eWxlLndpZHRoID0gJyc7XG4gICAgfVxuICAgIHRoaXMuZWRpdGluZ0NlbGwgPSBudWxsO1xuICAgIHRoaXMub25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIG9uVGV4dGFyZWFFbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCwgY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQuY3RybEtleSAmJiBldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLm9uVGV4dGFyZWFCbHVyKGNvbHVtbiwgcm93KTtcbiAgICB9XG4gIH1cbiAgb25JbnB1dEZvY3VzKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgaWYgKHRoaXMuZWRpdGluZ0NlbGwgJiYgIXRoaXMuZWRpdGluZ0NlbGwuc3RhcnRzV2l0aChjb2x1bW4uZmllbGQpKSB7XG4gICAgICB0aGlzLmVkaXRpbmdDZWxsID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgc2V0TnVtZXJpY01pbkZyYWN0aW9uKGNvbHVtbjogYW55KSB7XG4gICAgbGV0IG1pbkZyYWN0aW9uRGlnaXRzID0gMjtcbiAgICBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50JyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8ubWluRnJhY3Rpb25EaWdpdHMgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/Lm1pbkZyYWN0aW9uRGlnaXRzICE9IG51bGwpIHtcbiAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubWluRnJhY3Rpb25EaWdpdHM7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IE51bWJlcihjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvKTtcbiAgICB9XG4gICAgcmV0dXJuIG1pbkZyYWN0aW9uRGlnaXRzO1xuICB9XG5cbiAgc2V0TnVtZXJpY01heEZyYWN0aW9uKGNvbHVtbjogYW55KSB7XG4gICAgbGV0IG1heEZyYWN0aW9uRGlnaXRzID0gMjtcbiAgICBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50JyAmJiAhY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8ubWF4RnJhY3Rpb25EaWdpdHMgJiYgIWNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmRpZ2l0c0luZm8pIHtcbiAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbj8uZm9ybWF0Py5mb3JtYXRQYXJhbXM/Lm1heEZyYWN0aW9uRGlnaXRzICE9IG51bGwpIHtcbiAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMubWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvKSB7XG4gICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IE51bWJlcihjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5kaWdpdHNJbmZvKTtcbiAgICB9XG4gICAgcmV0dXJuIG1heEZyYWN0aW9uRGlnaXRzO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBmb3JtYXQgb2YgY3VycmVuY3kgJiYgbnVtYmVyICYmIGRlY2ltYWwgJiYgcGVyY2VudFxuICBzZXROdW1lcmljRm9ybWF0KGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIHJvdyA9IG9iakNvbnZlcnRUb0xvd2VyKHJvdyk7XG4gICAgbGV0IHZhbHVlOiBhbnkgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgOiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICA/IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgOiAocm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgPT09IDAgfHwgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnRleHQgPT09IG51bGwpXG4gICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy50ZXh0IDogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKHRoaXMudHlwZU9mKHZhbHVlKSA9PT0gJ251bWJlcicgJiYgdmFsdWUgPT09IDApIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgbGV0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICBpZiAoY29sdW1uLmZvcm1hdCAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKGNvbHVtbi5mb3JtYXQ/LnR5cGUpIHtcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuQ1VSUkVOQ1k6XG4gICAgICAgICAgdmFsdWUgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG4gICAgICAgICAgICBmb3JtYXRQYXJhbXM/LmxvY2FsZSA/IGZvcm1hdFBhcmFtcy5sb2NhbGUgOiAnZW4tVVMnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgY3VycmVuY3k6IGZvcm1hdFBhcmFtcz8uY3VycmVuY3kgPyBmb3JtYXRQYXJhbXMuY3VycmVuY3kgOiAnVVNEJyxcbiAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLnNldE51bWVyaWNNaW5GcmFjdGlvbihjb2x1bW4pLFxuICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMuc2V0TnVtZXJpY01heEZyYWN0aW9uKGNvbHVtbiksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKT8uZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuREVDSU1BTDpcbiAgICAgICAgICB2YWx1ZSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcbiAgICAgICAgICAgIGZvcm1hdFBhcmFtcz8ubG9jYWxlID8gZm9ybWF0UGFyYW1zLmxvY2FsZSA6ICdlbi1VUycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0eWxlOiAnZGVjaW1hbCcsXG4gICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogdGhpcy5zZXROdW1lcmljTWluRnJhY3Rpb24oY29sdW1uKSxcbiAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiB0aGlzLnNldE51bWVyaWNNYXhGcmFjdGlvbihjb2x1bW4pLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk/LmZvcm1hdCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlBFUkNFTlQ6XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSArICclJztcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLy9DaGFuZ2UgZHJvcGRvd24gdmx1ZSBiYXNlZCBvbiBvcHRpb24gbGFiZWwgYW5kIG9wdGlvbnZhbHVlXG4gIHNldERyb3Bkb3duVmFsdWUoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRSb3c/OiBhbnksIGNoYW5nZT86IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXkpID0+IGtleSA9PT0gY29sdW1uLmZpZWxkKSkge1xuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vcHRpb25MYWJlbCA9IGNvbHVtbi5vcHRpb25MYWJlbFxuICAgICAgICAgICAgICA/IGNvbHVtbi5vcHRpb25MYWJlbFxuICAgICAgICAgICAgICA6ICdsYWJlbCc7XG4gICAgICAgICAgICBjb2x1bW4ub3B0aW9uVmFsdWUgPSBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICAgICAgICAgPyBjb2x1bW4ub3B0aW9uVmFsdWVcbiAgICAgICAgICAgICAgOiAndmFsdWUnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKFxuICAgICAgICAgICAgKHJlY29yZDogYW55KSA9PlxuICAgICAgICAgICAgICByZWNvcmRbY29sdW1uLm9wdGlvblZhbHVlXT8udG9TdHJpbmcoKSA9PT1cbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKClcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGVkaXRlZFJvdyA9IHNlbGVjdGVkUm93ICYmIE9iamVjdC5rZXlzKHNlbGVjdGVkUm93KS5sZW5ndGggPiAwID8gc2VsZWN0ZWRSb3dbdGhpcy5kYXRhS2V5XSA9PT0gcm93W3RoaXMuZGF0YUtleV0gOiBmYWxzZTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgZWRpdGVkUm93KSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25WYWx1ZV07XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiBjaGFuZ2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XG4gICAgICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10pIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ11bJ29wdGlvblZhbHVlJ10gPSB2YWx1ZVtjb2x1bW4ub3B0aW9uVmFsdWVdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPSB7IG9wdGlvblZhbHVlOiB2YWx1ZVtjb2x1bW4ub3B0aW9uVmFsdWVdIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvL21hbmlwdWxhdGUgY2hlY2tib3ggc3RyaW5nIHZhbHVlIHRvIHRydWUgYW5kIGZhbHNlLlxuICBjaGFuZ2VDaGVja2JveFN0cmluZ1ZhbHVlKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29sdW1ucyAmJlxuICAgICAgdGhpcy5yb3dzRGF0YSAmJlxuICAgICAgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLmNvbHVtbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIHRoaXMuc2V0RHJvcGRvd25kYXRhVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCB7fSwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdID09PSAnc3RyaW5nJykgJiZcbiAgICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZF0gPT09ICcxJyB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJzAnKSkgfHxcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJyB8fFxuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9PT0gJ04nXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPVxuICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID09PSAnMScgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09ICdZJ1xuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvd0RhdGFcbiAgICogUGFzc2VzIGRhdGEgb2YgY2xpY2tlZCByb3cgdG8gcGFyZW50XG4gICAqL1xuICBoYW5kbGVSb3dDbGljayhyb3dEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnJvd0NsaWNrRGF0YSA9IHJvd0RhdGE7XG4gICAgaWYgKCF0aGlzLmVkaXRBbGxSb3dzKSB7XG4gICAgICB0aGlzLm9uUm93Q2xpY2suZW1pdChyb3dEYXRhKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dSZWNvcmQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gaW52b2tlIG9uUm93Q2xpY2sgZXZlbnQgd2hlbiBvbmx5IG9uZSByZWNvcmQgZXhpc3Q7XG4gIGRlZmF1bHRSb3dDbGljaygpIHtcbiAgICBsZXQgZGlhbG9nRXhpc3Q6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJyk7XG4gICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLnJvd3NEYXRhICYmIHRoaXMucm93c0RhdGEubGVuZ3RoID09PSAxICYmIHRoaXMub25Sb3dDbGljay5vYnNlcnZlcnM/Lmxlbmd0aCAmJiB0aGlzLmdyaWRTZXJ2aWNlLnVzZXJTZWFyY2hlZCAmJiBkaWFsb2dFeGlzdC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkID0gZmFsc2U7XG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMykpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUm93Q2xpY2sodGhpcy5yb3dzRGF0YVswXSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvbHVtbkRhdGFcbiAgICogUGFzc2VzIHNvcnRpbmcgaW5mb3JtYXRpb24gdG8gcGFyZW50IG9uIHNvcnQgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVTb3J0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICAvLyBDYXB0dXJlIGV2ZXJ5IHNvcnRlZCBjb2x1bW4gKHByaW1hcnksIHNlY29uZGFyeSwg4oCmKSBzbyBtdWx0aS1jb2x1bW4gc29ydCB0YWtlcyBlZmZlY3QsIG5vdFxuICAgIC8vIGp1c3QgdGhlIGZpcnN0LiBQcmltZU5HIGVtaXRzIHRoZSBmdWxsIG9yZGVyIGFzIGBtdWx0aXNvcnRtZXRhYCBpbiBtdWx0aXBsZS1zb3J0IG1vZGUuXG4gICAgY29uc3QgbWV0YTogYW55W10gPSAoZXZlbnQubXVsdGlzb3J0bWV0YSB8fCBbXSkuZmlsdGVyKFxuICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbSAmJiBpdGVtLm9yZGVyICE9IG51bGxcbiAgICApO1xuICAgIHRoaXMubXVsdGlTb3J0RGF0YSA9IG1ldGEubWFwKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpOiBJR3JpZFNvcnQgPT4gKHtcbiAgICAgIGZpZWxkOiBpdGVtLmZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBpdGVtLm9yZGVyID09IDEgPyBFR3JpZFNvcnREaXJlY3Rpb24uQVNDIDogRUdyaWRTb3J0RGlyZWN0aW9uLkRFU0MsXG4gICAgICBwcmlvcml0eTogaW5kZXggKyAxLFxuICAgIH0pKTtcblxuICAgIC8vIEtlZXAgdGhlIHNpbmdsZSBzb3J0RGF0YSBwb3B1bGF0ZWQgZm9yIGV4aXN0aW5nIGNvbnN1bWVycyBhbmQgdGhlIG9uU29ydENoYW5nZSBldmVudC5cbiAgICBsZXQgc29ydHM6IElHcmlkU29ydCA9IHtcbiAgICAgIGZpZWxkOiB0aGlzLm11bHRpU29ydERhdGEubGVuZ3RoID8gdGhpcy5tdWx0aVNvcnREYXRhWzBdLmZpZWxkIDogJycsXG4gICAgICBkaXJlY3Rpb246ICh0aGlzLm11bHRpU29ydERhdGEubGVuZ3RoID8gdGhpcy5tdWx0aVNvcnREYXRhWzBdLmRpcmVjdGlvbiA6IG51bGwpIGFzIEVHcmlkU29ydERpcmVjdGlvbixcbiAgICAgIHByaW9yaXR5OiAwLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbiB8fCAodGhpcy5wYWdpbmF0aW9uICYmICF0aGlzLmVkaXRBbGxSb3dzKSkge1xuICAgICAgdGhpcy5zb3J0RGF0YSA9IHNvcnRzO1xuICAgICAgdGhpcy5oYW5kbGVDdXN0b21Tb3J0aW5nKCk7XG4gICAgfVxuICAgIHRoaXMub25Tb3J0Q2hhbmdlLmVtaXQoc29ydHMpO1xuICB9XG5cbiAgc2hvdWxkUnVuU2VydmVyU2lkZShldmVudDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKChldmVudC5zb3J0RmllbGQgJiYgISh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUm93cykgJiYgIXRoaXMuUGFnZUNoYW5nZSkgfHwgKGV2ZW50Lm11bHRpU29ydE1ldGEgJiYgZXZlbnQubXVsdGlTb3J0TWV0YS5sZW5ndGggJiYgISh0aGlzLnBhZ2luYXRpb24gJiYgdGhpcy5lZGl0QWxsUm93cykgJiYgIXRoaXMuUGFnZUNoYW5nZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKGV2ZW50LnNvcnRGaWVsZCAmJiAodGhpcy5wYWdpbmF0aW9uICYmICF0aGlzLmVkaXRBbGxSb3dzKSAmJiB0aGlzLlBhZ2VDaGFuZ2UpIHx8IChldmVudC5tdWx0aVNvcnRNZXRhICYmIGV2ZW50Lm11bHRpU29ydE1ldGEubGVuZ3RoICYmICh0aGlzLnBhZ2luYXRpb24gJiYgIXRoaXMuZWRpdEFsbFJvd3MpICYmIHRoaXMuUGFnZUNoYW5nZSkpIHtcbiAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZUV2ZW50cyhldmVudCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXV0b0xvYWREYXRhICYmIHRoaXMudXNlU2VydmVyU2lkZUV2ZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUGFzc2VzIGFwcGxpZWQgZmlsdGVycyB0byBwYXJlbnQgb24gZmlsdGVyIGNoYW5nZVxuICAgKi9cbiAgaGFuZGxlRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoZmlsdGVyOiBhbnkpID0+IHtcbiAgICAgIGlmICghZXZlbnQuZmlsdGVyc1tmaWx0ZXIuZmllbGRdPy52YWx1ZSAmJiAhZmlsdGVyLnZhbHVlKSB7XG4gICAgICAgIGZpbHRlci52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub25GaWx0ZXJDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IDogRXZlbnRcbiAgICogQHBhcmFtIGNvbHVtbkFjdGlvbiA6IElHcmlkQ29sdW1uQWN0aW9uXG4gICAqIEBwYXJhbSByb3cgOiBhbnlcbiAgICogU3RvcCB0aGUgY2xpY2sgZXZlbnQgcHJvcGFnYXRpb24gdG8gcGFyZW50XG4gICAqIENhbGxiYWNrcyB0aGUgcm93IGRhdGEgdG8gcGFyZW50XG4gICAqL1xuXG4gIC8qKlxuICAgKiBpbnZva2Ugb25DbGljayBldmVudCAmIG9wZW4gSWZyYW1lIGluIGdyaWRcbiAgICovXG4gIGdyaWRJRnJhbWUoY29sdW1uOiBhbnksIHJvd3M6IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdyk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oSWZyYW1lQ29tcG9uZW50LCB7XG4gICAgICBoZWFkZXI6IGNvbHVtbi5oZWFkZXIsXG4gICAgICB3aWR0aDogJzgwJScsXG4gICAgICBoZWlnaHQ6ICc4MCUnLFxuICAgICAgY2xvc2FibGU6IHRydWUsXG4gICAgICBmb2N1c09uU2hvdzogZmFsc2UsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHZhbHVlOiByb3dzLFxuICAgICAgICBpRnJhbWVJZDogY29sdW1uLmRpc3BsYXlUZXh0ID8gY29sdW1uLmRpc3BsYXlUZXh0IDogY29sdW1uLmZpZWxkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnNldER5bmFtaWNEaWFsb2dSZWYocmVmKTtcbiAgICBjb25zdCBjb21wb25lbnROYW1lID0gY29sdW1uLmNvbXBvbmVudD8ubmFtZTtcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgfSk7XG4gICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgIGlmIChyZXMgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgfSBlbHNlIGlmIChyZXMgJiYgY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbHVtbi5vbkNoYW5nZShyZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkTmV3Um93KHJvdzogYW55LCBhZGRSb3c6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMucmVmcmVzaEdyaWRUZXJtaW5hdG9yKCk7XG4gICAgdGhpcy5jb21wb25lbnRUYWJsZVJlZiA9IHRoaXMudGFibGU7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sID0+IHtcbiAgICAgIGlmIChjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIGNvbC5jb21wb25lbnQpIHtcbiAgICAgICAgKGFkZFJvdyA/IHRoaXMucm93c0RhdGFbMF0gOiByb3cpW2NvbC5maWVsZCArICdfc2Vjb25kVHlwZSddID0gRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgICB9XG4gICAgICBpZiAoY29sLmFnZ3JlZ2F0ZT8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRlRm9vdGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXRBZ2dyZWdhdGVUZXh0KGNvbCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25UeXBlID09PSBFR3JpZFNlbGVjdGlvblR5cGUuTVVMVElQTEUgJiYgdGhpcy5hdXRvQ2hlY2tOZXdSb3cpIHtcbiAgICAgIGNvbnN0IGFkZGVkUm93ID0gdGhpcy5yb3dzRGF0YSAmJiB0aGlzLnJvd3NEYXRhWzBdO1xuICAgICAgaWYgKGFkZGVkUm93ICYmICFhZGRlZFJvdy5faXNFZGl0ZWQpIHtcbiAgICAgICAgYWRkZWRSb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZFJvd3MpIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG5cbiAgICAgIGlmIChhZGRlZFJvdyAmJiAhdGhpcy5zZWxlY3RlZFJvd3Muc29tZShyID0+IHJbdGhpcy5kYXRhS2V5XSA9PT0gYWRkZWRSb3dbdGhpcy5kYXRhS2V5XSkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5zZWxlY3RlZFJvd3MsIGFkZGVkUm93XTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2hlY2tsaXN0ID0gWy4uLnRoaXMuc2VsZWN0ZWRSb3dzXTtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gYWRkZWRSb3c7XG4gICAgICB0aGlzLmFkZE5ld1Jvd0NoZWNrID0gdHJ1ZTtcbiAgICAgIHRoaXMuZHJvcGRvd25JbnB1dCA9IGZhbHNlO1xuICAgICAgdGhpcy5zb3J0RGlzYWJsZWQgPSB0cnVlO1xuICAgICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpXG4gICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgIHRoaXMub25HcmlkUm93QWRkLmVtaXQoYWRkZWRSb3cpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgICAgdGhpcy5hZGROZXdSb3dDaGVjayA9IHRydWU7XG4gICAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgICAgdGhpcy5vbkdyaWRSb3dBZGQuZW1pdChyb3cpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIG9wZW4gRGlhbG9nIGluIGdyaWRcbiAgICovXG4gIG9wZW5HcmlkRGlhbG9nKGNvbHVtbjogSUdyaWRDb2x1bW4gfCBhbnksIHJvdzogYW55LCBldmVudD86IGFueSkge1xuICAgIGNvbnN0IGRhdGFQYXJhbXMgPSBjb2x1bW4uZGF0YT8uZGF0YSA/IGNvbHVtbi5kYXRhPy5kYXRhIDoge307XG4gICAgaWYgKChldmVudCAmJiBldmVudC5jdHJsS2V5KSB8fCBjb2x1bW4ub3BlbkluTmV3VGFiKSB7XG4gICAgICB0aGlzLmh5cGVybGlua1NlcnZpY2Uub3BlbkRpYWxvZ0luTmV3VGFiKGNvbHVtbi5jb21wb25lbnQsIGRhdGFQYXJhbXMsIHJvdyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5vcGVuQ29tcG9uZW50SW5EaWFsb2coY29sdW1uLCByb3cpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5Db21wb25lbnRJbkRpYWxvZyhjb2x1bW46IElHcmlkQ29sdW1uIHwgYW55LCByb3c6IGFueSkge1xuICAgIHZhciBpc0Rpc2FibGVkID0gY29sdW1uLmRpc2FibGVkXG4gICAgICA/IHRydWVcbiAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkXG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IGZhbHNlO1xuICAgIHRoaXMub25DbGlja0V2ZW50KGNvbHVtbiwgcm93KTtcbiAgICBsZXQgZGF0YTogYW55ID0ge307XG4gICAgZGF0YSA9IHsgLi4uY29sdW1uPy5kYXRhIH07XG4gICAgdGhpcy5yb3dDbGlja0RhdGEgPSByb3c7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5kYXRhICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5tYXRjaERhdGEpIHtcbiAgICAgIGRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhPy5kYXRhID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpYWxvZ0RhdGEuZGF0YSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaWFsb2dEYXRhO1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4uY29tcG9uZW50ICYmIHRoaXMucm93Q2xpY2tEYXRhICYmICFpc0Rpc2FibGVkKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmRhdGEgPSBhdXRvU2V0TG9va3VwRGF0YShcbiAgICAgICAgICBkYXRhLmRhdGEsXG4gICAgICAgICAgdGhpcy5yb3dDbGlja0RhdGFcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIGhlaWdodDogZGF0YS5oZWlnaHQgPyBkYXRhLmhlaWdodCA6ICc5MHZoJywgY2xvc2FibGU6IHRydWUsIGZvY3VzT25TaG93OiBmYWxzZSB9XG4gICAgICBjb25zdCBvYmpGaWVsZCA9IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArIFwiX29ialwiO1xuICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihyb3dbb2JqRmllbGRdICYmIHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA/IHJvd1tvYmpGaWVsZF0/LmNvbXBvbmVudCA6IGNvbHVtbi5jb21wb25lbnQsIGRhdGEpO1xuXG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcywgdGhpcy5kaWFsb2dSZWYpO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAvLyAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMpO1xuICAgICAgLy8gfSwgODAwKTtcblxuICAgICAgdGhpcy5zZXREeW5hbWljRGlhbG9nUmVmKHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSBjb2x1bW4uY29tcG9uZW50Py5uYW1lO1xuICAgICAgaWYgKGNvbXBvbmVudE5hbWUpIHtcbiAgICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5kcmFnZ2FibGUgfHwgY29sdW1uLmRyYWdnYWJsZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGRhdGEgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKGRhdGEsIHRoaXMucm93Q2xpY2tEYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25DaGFuZ2UoZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBicm93c2VyQ2xvc2VFdmVudChldmVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlLnJlc3RvcmVMZWF2ZVdhcm5pbmcoKTtcbiAgICB9XG4gIH1cblxuICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uOiBJR3JpZENvbHVtbiwgc2VsZWN0ZWRWYWx1ZTogYW55KSB7XG4gICAgaWYgKHNlbGVjdGVkVmFsdWUgJiYgY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUKSB7XG4gICAgICBpZiAoc2VsZWN0ZWRWYWx1ZSAmJiBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlPy50b1N0cmluZygpPy5zcGxpdCgnLCcpPy5tYXAoKHZhbHVlKSA9PiBjb2x1bW4uZGF0YT8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWU/LnRvU3RyaW5nKCkgPT09IHZhbHVlPy50b1N0cmluZygpKT8ubGFiZWwpPy50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWRWYWx1ZSA9IGNvbHVtbi5kYXRhPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZT8udG9TdHJpbmcoKSA9PT0gc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKSk/LmxhYmVsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2VsZWN0ZWRWYWx1ZTtcbiAgfVxuICBhdXRvR3JvdyhldmVudDogRXZlbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50KSB7XG4gICAgY29uc3QgdGV4dGFyZWEgPSBldmVudCBpbnN0YW5jZW9mIEV2ZW50ID8gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQgOiBldmVudDtcbiAgICBpZiAodGV4dGFyZWEpIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9IHRleHRhcmVhLnNjcm9sbEhlaWdodCArICdweCc7XG4gICAgfVxuICB9XG5cblxuICBzZXRUZXh0Qm94UmVhZE9ubHlWYWx1ZShyb3c6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoY29sdW1uLmRpc3BsYXlUZXh0KSB7XG4gICAgICB2YWx1ZSA9IGNvbHVtbi5kaXNwbGF5VGV4dDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dCkge1xuICAgICAgdmFsdWUgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHQ7XG4gICAgfSBlbHNlIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJuIGNvbmRpdGlvbmFsIGJhc2UgdmFsdWUgYW5kIHRpdGxlXG4gICAqL1xuICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICBsZXQgbmV3VmFsdWU6IGFueTtcbiAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICBuZXdWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8udGV4dFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuc2V0VGltZUZvcm1hdChuZXdWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IGZvcm1hdCA9IHRoaXMuc2V0Rm9ybWF0KGNvbHVtbik7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShuZXdWYWx1ZT8udG9TdHJpbmcoKSA9PT0gXCJJbnZhbGlkIERhdGVcIiA/IG51bGwgOiBuZXdWYWx1ZSwgZm9ybWF0ID8gZm9ybWF0IDogY29sdW1uLnNob3dUaW1lID8gXCJNTS9kZC95eXl5LCBoOm1tIGFcIiA6IFwiTU0vZGQveXl5eVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKSA6XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheVRleHRcbiAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldICE9IHVuZGVmaW5lZCA/IHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkXSA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGRcbiAgICAgICAgICAgIDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiZcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCAmJiBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPR1xuICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcicgJiYgY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HID9cbiAgICAgICAgICAgICAgICAgICAgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0LnRvU3RyaW5nKCkuaW5jbHVkZXMoJ0FNJykgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQudG9TdHJpbmcoKS5pbmNsdWRlcygnUE0nKSkgP1xuICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0IDogdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsICdoaDptbSBhJylcbiAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uZm9ybWF0ID8gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQsIHRoaXMuc2V0Rm9ybWF0KGNvbHVtbikpIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogY29sdW1uLmZvcm1hdCA/IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHJvd1tjb2x1bW4uZmllbGRdLCB0aGlzLnNldEZvcm1hdChjb2x1bW4pKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgOiBjb2x1bW4uaWNvbiA/IGNvbHVtbi5oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBzZXRGb3JtYXQoY29sdW1uKSB7XG4gICAgbGV0IGZvcm1hdCA9ICcnO1xuICAgIGlmIChjb2x1bW4/LmZvcm1hdCkge1xuICAgICAgY29sdW1uLmZvcm1hdCA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPyBjb2x1bW4uZm9ybWF0LnR5cGUgOiBjb2x1bW4uZm9ybWF0O1xuICAgICAgc3dpdGNoIChjb2x1bW4uZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLlNNQUxMREFURToge1xuICAgICAgICAgIGZvcm1hdCA9ICdNTS9kZC95eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL2RkL3l5eXknO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRUdyaWRGb3JtYXRUeXBlLk1FRElVTURBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTSBkLCB5eSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEU6IHtcbiAgICAgICAgICBmb3JtYXQgPSAnTU0vZGQveXksIGg6bW0gYSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFR3JpZEZvcm1hdFR5cGUuUEVSSU9EOiB7XG4gICAgICAgICAgZm9ybWF0ID0gJ01NL3l5JztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgZm9ybWF0ID0gY29sdW1uLmZvcm1hdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0XG4gIH1cblxuICBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgZGVsZXRlIHJvd1sndW5kZWZpbmVkJ107XG4gICAgY29uc3QgdmFsdWUgPSByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgID8gcm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICA6IGNvbHVtbi5kYXRhPy5maW5kKGRyb3Bkb3duVmFsID0+IGRyb3Bkb3duVmFsPy52YWx1ZSA9PSByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgPyBjb2x1bW4uZGF0YT8uZmluZChkcm9wZG93blZhbCA9PiBkcm9wZG93blZhbD8udmFsdWUgPT0gcm93W2NvbHVtbi5maWVsZF0pPy5sYWJlbFxuICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIG9uUm93UmVvcmRlcihldmVudCkge1xuICAgIHRoaXMub25Sb3dPcmRlckNoYW5nZWQuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIERlbGV0ZSBDb25maXJtYXRpb24gZGlhbG9nIHdoZW4gY2xpY2sgb24gZGVsZXRlIGljb24gaW4gQWN0aW9uIGNvbHVtblxuICAgKi9cbiAgaGFuZGxlQWN0aW9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBjb2x1bW5BY3Rpb246IElHcmlkQ29sdW1uQWN0aW9uLCByb3c6IGFueSkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHZhciBtZXNzYWdlOiBzdHJpbmc7XG4gICAgaWYgKHJvdy5jaGlsZGZvbGRlcmNvdW50ID4gMCkge1xuICAgICAgbWVzc2FnZSA9IGBEZWxldGluZyB0aGlzIGZvbGRlciB3aWxsIGFsc28gZGVsZXRlICR7cm93LmNoaWxkZm9sZGVyY291bnR9IGNoaWxkIGZvbGRlciR7cm93LmNoaWxkZm9sZGVyY291bnQgPiAxID8gJ3MnIDogJyd9IGFsb25nIHdpdGggYWxsIGFzc29jaWF0ZWQgZG9jdW1lbnRzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcHJvY2VlZD9gO1xuICAgIH1cbiAgICBpZiAoY29sdW1uQWN0aW9uLnRvb2x0aXAudG9Mb3dlckNhc2UoKSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgIGlmIChjb2x1bW5BY3Rpb24uY29uZmlybURpYWxvZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKHtcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlID8/ICdBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcbiAgICAgICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgICAgICBpY29uOiAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxuICAgICAgICAgIGtleTogJ2hhbmRsZWNvbHVtbkFjdGlvbnMnLFxuICAgICAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jbG9zZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVqZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2UoKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29sdW1uQWN0aW9uLm9uQ2xpY2socm93KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IDogTGF6eUxvYWRFdmVudFxuICAgKiBUcmlnZ2VycyBldmVyeXRpbWUgYSBzZXJ2ZXIgc2lkZSBmaWx0ZXIgaXMgdHJpZ2dlclxuICAgKi9cbiAgaGFuZGxlU2VydmVyU2lkZUV2ZW50cyhldmVudDogYW55LCBkdDogYW55ID0gJycpIHtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuaXNTZXJ2ZXJTaWRlRXZlbnRJbml0YWxUcmlnZ2VyZWQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldEdyaWRJZCgpO1xuICAgICAgICAgICAgdGhpcy5ncmlkZmlsdGVyID0gZXZlbnQ7XG5cbiAgICAgICAgICAgIGlmIChkdD8uZWw/Lm5hdGl2ZUVsZW1lbnQ/LmlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZm9yRWFjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50Py5maWx0ZXJzW3guZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICBldmVudC5maWx0ZXJzW3guZmllbGRdLnZhbHVlID0geC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QgPyB4LmZpbHRlclZhbHVlPy50b1N0cmluZygpIDogeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgJiYgeC5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVfb2JqJykgPyB4WydmaWx0ZXJWYWx1ZV9vYmonXT8udmFsdWUgOiB4LmZpbHRlclZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXV0b0xvYWREYXRhO1xuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzID0ge1xuICAgICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmxvb2t1cEZpbHRlcnNcbiAgICAgICAgICAgICAgICA/IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0R3JpZEZpbHRlcnMoZXZlbnQsIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKVxuICAgICAgICAgICAgICAgIDogdGhpcy5ncmlkU2VydmljZS5wcmVwYXJlQmFzaWNGaWx0ZXJzKGV2ZW50LCB0aGlzLnNlbGVjdGVkQ29sdW1ucyksXG4gICAgICAgICAgICAgIHNvcnRzOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRTb3J0cyhldmVudCwgdGhpcy5zZWxlY3RlZENvbHVtbnMpLFxuICAgICAgICAgICAgICAuLi4odGhpcy5wYWdpbmF0aW9uICYmIHtcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLmdyaWRTZXJ2aWNlLmdldEdyaWRQYWdpbmF0aW9uKGV2ZW50KSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogZXZlbnQucm93cyB8fCAxMCxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuc2VydmVyRmlsdGVycz8uZmlsdGVycyAmJlxuICAgICAgICAgICAgICB0aGlzLnNlcnZlckZpbHRlcnM/LmZpbHRlcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAodGhpcy5hbGxvd0NhY2hpbmcgfHwgdGhpcy5zb2Z0Q2FjaGluZylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMuc29mdENhY2hpbmcgJiYgdGhpcy50YWJsZT8uaWQpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy50YWJsZT8uaWQgKyB0aGlzLmN1cnJlbnRVcmwsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VydmVyRmlsdGVycykpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF0gPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc2VydmVyRmlsdGVyVmFsdWVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNlcnZlckZpbHRlcnMpKTtcbiAgICAgICAgICAgIHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzID0gKHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzIHx8IFtdKS5jb25jYXQodGhpcy5nbG9iYWxEYXRhKTtcblxuICAgICAgICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGxldCBjb250YWluc0VtcHR5RmllbGQgPSB0cnVlO1xuICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5zRW1wdHlGaWVsZCkge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHNlcnZlckZpbHRlclZhbHVlcy5maWx0ZXJzLmZpbmRJbmRleCgoZmlsdGVyKSA9PiAhZmlsdGVyLmZpZWxkKTtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJGaWx0ZXJWYWx1ZXMuZmlsdGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5zRW1wdHlGaWVsZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25TZXJ2ZXJTaWRlRXZlbnRDaGFuZ2UuZW1pdChzZXJ2ZXJGaWx0ZXJWYWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5pc1NlcnZlclNpZGVFdmVudEluaXRhbFRyaWdnZXJlZC5uZXh0KCcnKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuXG5cbiAgLy9zZXQgZ3JpZCBpZCBvbiBwYWdlIGxvYWQgZm9yIGxvYWQgY29sdW1uIHdpZHRoc1xuICBzZXRDbGFzc2FBbmRJZChkdDogYW55KSB7XG4gICAgaWYgKGR0Py5lbD8ubmF0aXZlRWxlbWVudD8uaWQpIHtcbiAgICAgIHRoaXMuZ3JpZElkID0gZHQuZWwubmF0aXZlRWxlbWVudC5pZDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaG9yaXpvbnRhbFNjcm9sbCkge1xuICAgICAgcmV0dXJuIHsgJ2hvcml6b250YWwtc2Nyb2xsJzogdHJ1ZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7ICdob3Jpem9udGFsLXNjcm9sbCc6IGZhbHNlIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFBhc3NlcyBhcHBsaWVkIHBhZ2luYXRpb24gdG8gcGFyZW50IG9uIHBhZ2UgY2hhbmdlXG4gICAqL1xuICBoYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbihldmVudDogSUdyaWRQYWdpbmF0aW9uRXZlbnQpIHtcbiAgICB0aGlzLmVkaXRpbmdSb3dLZXlzID0ge307XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IGV2ZW50LmZpcnN0O1xuICAgIHRoaXMuUGFnZUNoYW5nZSA9IHRydWU7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbiAmJiB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlbWFpbmluZ1Jvd3NEYXRhID0gW107XG4gICAgfVxuICAgIHRoaXMub25QYWdlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMubmdab25lLm9uU3RhYmxlXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZVNlcnZlclNpZGVFdmVudHMgJiYgdGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZGVmYXVsdFJvd3MgJiYgdGhpcy5lZGl0QWxsUm93cyAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwICYmIHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZWxlY3RlZFJvdyhyb3c6IGFueSkge1xuICAgIHRoaXMub25Sb3dDaGVja0JveC5lbWl0KHJvdyk7XG4gIH1cblxuICAvLyBzZXQgdGltZSBmb3JtYXRcbiAgc2V0VGltZUZvcm1hdChkYXRlOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicgfHwgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oTnVtYmVyKGRhdGUpKSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF0ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBpc1RpbWVJbkFNID0gdGhpcy5jaGVja1RpbWVGb3JtYXQoZGF0ZSwgJ2FtJyk7XG4gICAgY29uc3QgaXNUaW1lSW5QTSA9IHRoaXMuY2hlY2tUaW1lRm9ybWF0KGRhdGUsICdwbScpO1xuICAgIGNvbnN0IGlzVEluY2x1ZGUgPSB0aGlzLmNoZWNrVGltZUZvcm1hdChkYXRlLCAndCcpO1xuXG4gICAgaWYgKChpc1RpbWVJbkFNIHx8IGlzVGltZUluUE0pICYmICghaXNUSW5jbHVkZSkpIHtcbiAgICAgIHJldHVybiBkYXRlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jaGVja1RpbWVGb3JtYXQoZGF0ZSwgJzonKSAmJiAoIWlzVGltZUluQU0gJiYgIWlzVGltZUluUE0gJiYgIWlzVEluY2x1ZGUpKSB7XG4gICAgICBjb25zdCBbaG91cnMsIG1pbnV0ZXNdID0gZGF0ZVN0cmluZz8uc3BsaXQoJzonKT8ubWFwKE51bWJlcik7XG4gICAgICBjb25zdCBwZXJpb2QgPSBob3VycyA+PSAxMiA/ICdQTScgOiAnQU0nO1xuICAgICAgY29uc3QgZm9ybWF0dGVkSG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgICAgcmV0dXJuIGAke2Zvcm1hdHRlZEhvdXJzfToke1N0cmluZyhtaW51dGVzKS5wYWRTdGFydCgyLCAnMCcpfSAke3BlcmlvZH1gO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnaGg6bW0gYScpIHx8ICcnO1xuICB9XG5cbiAgY2hlY2tUaW1lRm9ybWF0KGRhdGUsIGlzSW5jbHVkZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRhdGU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKGlzSW5jbHVkZSk7XG4gIH1cblxuICAvL29wZW4gaHlwZXJsaW5rIGluIGVkaXQgY2FzZVxuICBvcGVuTGluayh1cmw6IGFueSkge1xuICAgIGlmICh1cmwpIHtcbiAgICAgIGNvbnN0IGxpbms6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByb3dcbiAgICogU2V0cyB2YWx1ZXMgdG8gZWRpdGFibGUgcm93XG4gICAqIFJvdydzIGRhdGEgaXMgcHJlc2V2ZWQgdG8gcHJldmVudCBtdXRhdGlvblxuICAgKiBSb3cgZGF0YUtleSBpcyBwcmVzZXJ2ZWQgdG8ga2VlcCB0aGUgcm93IHVuaXF1ZSBhbmQgaW4gZWRpdGFibGUgc3RhdGUgYXMgbG9uZyBhcyBub3Qgc2F2ZWRcbiAgICovXG5cbiAgcmVmcmVzaEdyaWRUZXJtaW5hdG9yKCkge1xuICAgIGlmICh0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdlPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0T3JpZ2luYWxSb3dzKCkge1xuICAgIHRoaXMub3JpZ2luYWxSb3dzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnJvd3NEYXRhKSk7XG4gIH1cblxuICBvblJvd0VkaXRJbml0KHJvdzogYW55KSB7XG4gICAgdGhpcy5yZWZyZXNoR3JpZFRlcm1pbmF0b3IoKVxuICAgIGxldCBzZWxlY3RlZFJvdyA9IHsgLi4ucm93IH07XG4gICAgT2JqZWN0LmVudHJpZXMoc2VsZWN0ZWRSb3cpLmZvckVhY2goKFtrZXksIHZhbHVlXTogYW55KSA9PiB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2V0RHJvcGRvd25GaWx0ZXIpIHtcbiAgICAgICAgICB0aGlzLnNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sLCByb3csIGtleSk7XG4gICAgICAgICAgdGhpcy5zZXREcm9wZG93bkZpbHRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCB0aGUgYXV0b0NvbXBsZXRlIFZhbHVlIGluIGVkaXQgbW9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIHZhbHVlICYmXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoY29sLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sLmZpZWxkXS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgICAgcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfdGVtcCddID0gcm93W2NvbC5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sLmRpc3BsYXlGaWVsZF0gPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZS5tYXAoKHg6IGFueSkgPT4geFtjb2wuZGlzcGxheUZpZWxkXSk7XG4gICAgICAgICAgaWYgKG5ld1ZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnOycpKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG5ld1ZhbHVlXG4gICAgICAgICAgICAgID8udG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/LnJlcGxhY2VBbGwoJzsnLCAnLCcpXG4gICAgICAgICAgICAgID8uc3BsaXQoJywnKVxuICAgICAgICAgICAgICA/Lm1hcCgoeDogYW55KSA9PiAoeyBbY29sLmRpc3BsYXlGaWVsZCA/IGNvbC5kaXNwbGF5RmllbGQgOiBjb2wuZmllbGRdOiB4LCBbY29sLmZpZWxkICsgJ190ZW1wJ106IHZhbHVlWzBdW2NvbC5maWVsZF0gfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICAgICAgbGV0IG9wdGlvbiA9IGNvbD8uZGF0YT8uZmluZChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2wsIHJvdylcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkgJiZcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEVcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2wuZmllbGRdICE9PSBudWxsICYmIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocm93W2tleSArICdfb2JqJ10gJiYgT2JqZWN0LmtleXMocm93W2tleSArICdfb2JqJ10pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJvd1trZXkgKyAnX29iaiddLnRleHQgPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2tleV0gPSBuZXcgRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIHRoZSBNaW51dGVzIHBhdHRlcm5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoY29sLnNob3dUaW1lIHx8IGNvbC50aW1lT25seSkgJiZcbiAgICAgICAgICAgIGNvbC5taW51dGVzSW50ZXJ2YWwgJiZcbiAgICAgICAgICAgIHJvd1trZXldXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IG5ldyBEYXRlKHNldE1pbnV0ZXNJbnRlcnZhbChyb3dba2V5XSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiZcbiAgICAgICAgICBjb2wuZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmXG4gICAgICAgICAgY29sLmZpZWxkLnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZF0gPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgJiZcbiAgICAgICAgICBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGtleT8udG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICAgIChjb2wuYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbC5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGNvbC5lZGl0TGluayA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcm93W2NvbC5maWVsZCArICdfb2JqJ10uaHlwZXJsaW5rID0gcm93W2NvbC5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaztcbiAgICAgICAgICAgIHJvd1tjb2wuZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0ID0gJyc7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wuZWRpdExpbmsgPT09IGZhbHNlIHx8IGNvbC5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb3dba2V5XSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV0gPSB7IC4uLnJvdyB9O1xuICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMucm93Q2xpY2tEYXRhID0gcm93O1xuICAgIHRoaXMuaW5FZGl0TW9kZSA9IHRydWU7XG4gICAgdGhpcy5yb3dVcGRhdGVDaGFuZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmNhbmNlbEFsbFJlY29yZHMgPSBmYWxzZTtcbiAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICB0aGlzLnNvcnREaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5ncmlkU2VydmljZS5yb3dVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLm9uR3JpZFJvd0VkaXQuZW1pdChyb3cpO1xuICB9XG5cbiAgdHlwZU9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIHNldCBkcm9wZG93biBmaWx0ZXIgdmFsdWVcbiAgICovXG4gIHNldERyb3Bkb3duRmlsdGVyVmFsdWUoY29sOiBhbnksIHJvdzogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmIGNvbC5kcm9wRG93blByb3ApIHtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKGNvbCkuc29tZSgodmFsdWUpID0+IHZhbHVlID09IGtleSkpIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbC5kcm9wRG93blByb3A7XG4gICAgICAgIGxldCBuZXdGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgICAgaWYgKG9iai5maWx0ZXJzICYmIG9iai5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBvYmouZmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld0ZpbHRlciA9IHsgLi4uZmlsdGVyIH07XG4gICAgICAgICAgICBsZXQgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMocm93KS5maW5kKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgbGV0IG1hdGNoS2V5OiBzdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZT8uaW5jbHVkZXMoJ3snKSAmJlxuICAgICAgICAgICAgICAgIGtleS50b0xvd2VyQ2FzZSgpID09PVxuICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZVxuICAgICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICA/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBtYXRjaEtleSA9IGtleTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hLZXk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHtcbiAgICAgICAgICAgICAgbmV3RmlsdGVyLnZhbHVlID0gcm93W2ZpbHRlcktleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdGaWx0ZXJzLnB1c2gobmV3RmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbCxcbiAgICAgICAgICBvYmoudW5pcXVlS2V5LFxuICAgICAgICAgIG9iai52YWx1ZVByb3AsXG4gICAgICAgICAgb2JqLmxhYmVsUHJvcCxcbiAgICAgICAgICBuZXdGaWx0ZXJzLFxuICAgICAgICAgIHJvd1xuICAgICAgICApO1xuXG4gICAgICAgIGxldCBvcHRpb24gPSBjb2wuZGF0YS5maW5kKFxuICAgICAgICAgICh4OiBhbnkpID0+IHgubGFiZWwgPT09IHJvd1tjb2wuZmllbGRdPy50b1N0cmluZygpXG4gICAgICAgICk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICByb3dbY29sLmZpZWxkXSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93XG4gICAqIFBhc3NlcyB0aGUgZWRpdGVkIG9yIG5ld2x5IGNyZWF0ZWQgZGF0YSB0byBwYXJlbnRcbiAgICogSW4gY2FzZSBvZiBuZXdseSBjcmVhdGVkIGRhdGEsIGRhdGFLZXkgYW5kIGlzTmV3IHByb3AgaXMgcmVtb3ZlZFxuICAgKi9cbiAgb25Sb3dFZGl0U2F2ZShzZWxlY3RlZFJvdzogYW55KSB7XG4gICAgdGhpcy50ZW1wU2F2ZWRSb3cgPSBbXTtcbiAgICBsZXQgYXV0b21Db21wbGV0ZVRlbXBEYXRhID0gW107XG4gICAgbGV0IGxvb2t1cEluZm86IGFueSA9IHt9O1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJy1kYXRhJ107XG4gICAgICBkZWxldGUgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkICsgJ19zZWNvbmRUeXBlJ107XG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZClcbiAgICAgICkge1xuICAgICAgICBpZiAodHlwZW9mIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpIHtcbiAgICAgICAgICBsb29rdXBJbmZvW2NvbHVtbi5maWVsZF0gPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgbGV0IHZhbHVlOiBhbnkgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gJ2NoYXInKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA9PT0gdHJ1ZSA/ICdZJyA6ICdOJztcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSAnbnVtZXJpYycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlID09PSB0cnVlID8gJzEnIDogJzAnO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdGVkUm93ID0geyAuLi5zZWxlY3RlZFJvdywgW2NvbHVtbi5maWVsZF06IHZhbHVlIH07XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkcm9wRG93biBvcHRpb25MYWJlbCBpbnRvIG9wdGlvblZhbHVlXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgY29sdW1uLmRhdGE/Lmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXVxuICAgICAgKSB7XG4gICAgICAgIGxldCBvcHRpb25MYWJlbDtcbiAgICAgICAgaWYgKGlzTmFOKE51bWJlcihzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKSkpIHtcbiAgICAgICAgICBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddPy50b0xvd2VyQ2FzZSgpID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRpb25MYWJlbCA9IGNvbHVtbi5kYXRhLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkWydsYWJlbCddID09PSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9uTGFiZWw/LnZhbHVlKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IG9wdGlvbkxhYmVsLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFXG4gICAgICApIHtcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pIHtcbiAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udGltZU9ubHkgJiYgIWNvbHVtbi5zYXZlQXNTdHJpbmcgJiYgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4uZm9ybWF0ID09PSBFR3JpZEZvcm1hdFR5cGUuTE9OR0RBVEUpKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5KSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0pPy50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiBhbGxvd0NhbGN1bGF0ZT10cnVlLCBkaXZpZGUgdGhlIHBlcmNlbnQgYnkgMTAwXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICAgIGlmICh0aGlzLm51bWVyaWNWYWx1ZSkge1xuICAgICAgICAgIHRoaXMubnVtZXJpY1ZhbHVlID0ge31cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnLicpID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGNhbGN1bGF0ZWRWYWx1ZSA/IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gOiBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdIC8gMTAwO1xuICAgICAgICAgICAgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gLyAxMDApPy50b1N0cmluZygpKS50b0ZpeGVkKGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vY29udmVydCBtdWx0aXNlbGVjdCBhcnJheSBpbnRvIHN0cmluZ1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUICYmIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cbiAgICAgICkge1xuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8udG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2F2aW5nIEF1dG9Db21wbGV0ZSBEYXRhXG4gICAgICBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgJiZcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXT8ubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIGF1dG9tQ29tcGxldGVUZW1wRGF0YSA9IFsuLi5zZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/Lm1hcCgocm93KSA9PiBjb2x1bW4/Lm9wdGlvblZhbHVlICYmIHJvd1tjb2x1bW4ub3B0aW9uVmFsdWU/LnRvTG93ZXJDYXNlKCldID9cbiAgICAgICAgICByb3dbY29sdW1uLm9wdGlvblZhbHVlPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldKT8udG9TdHJpbmcoKT8ucmVwbGFjZUFsbCgnLCcsICc7Jyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBsZXQgcm93OiBhbnkgPSB7IC4uLnNlbGVjdGVkUm93IH07XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgbGV0IG9iajogYW55ID0gcm93W2tleV1cbiAgICAgICAgaWYgKHRoaXMuY2hlY2tBY3Rpb24gPT09IGZhbHNlICYmIG9iaj8udHlwZSAmJiAob2JqLnR5cGUgPT09ICdsaW5rJyB8fCBvYmoudHlwZSA9PT0gJ2lmcmFtZScgfHwgb2JqLnR5cGUgPT09ICdkaWFsb2cnKSkge1xuICAgICAgICAgIHJvdyA9IHsgLi4ucm93LCBba2V5LnNwbGl0KCdfJylbMF1dOiByb3dba2V5XS5kaXNwbGF5VGV4dCB9O1xuICAgICAgICAgIHRoaXMuY2hlY2tBY3Rpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvYmogJiYgKG9iai50eXBlID09PSAnbGluaycgfHwgb2JqLnR5cGUgPT09ICdpZnJhbWUnIHx8IG9iai50eXBlID09PSAnZGlhbG9nJykpIHtcbiAgICAgICAgICBpZiAoIW9iai5kaXNwbGF5VGV4dCAmJiBvYmouZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0ga2V5LnNwbGl0KCdfJylbMF0/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIG9iai5kaXNwbGF5VGV4dCA9IHJvd1trZXkuc3BsaXQoJ18nKVswXV1cbiAgICAgICAgICB9XG4gICAgICAgICAgcm93ID0geyAuLi5yb3csIFtrZXkuc3BsaXQoJ18nKVswXV06IHJvd1trZXldLmRpc3BsYXlUZXh0IH07XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICoganVzdCBlbWl0IHRob3NlIGZpZWxkcyB3aG8gZXhpc3QgaW4gdGhlIHRhYmxlXG4gICAgICovXG4gICAgcm93ID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3cpO1xuICAgIC8vb25zb2xlLmxvZygncm93IGluIHNhdmUnLCByb3cpXG4gICAgbGV0IG9iajogYW55ID0ge307XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIChjb2x1bW4uYWxsb3dTYXZlID09PSB0cnVlIHx8IGNvbHVtbi5hbGxvd1NhdmUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnNhdmVBbGxEYXRhKVxuICAgICAgKSB7XG4gICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyAmJlxuICAgICAgICAgIGNvbHVtbi5maWx0ZXI/LnR5cGUgPT09ICdjYWxlbmRhcidcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdLFxuICAgICAgICAgICAgJ3l5eXktTU0tZGRUMDA6MDA6MDAuMDAwWidcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9TZXQgRGVjaW1hbCBGcmFjdGlvbiBWYWx1ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLmZvcm1hdCAmJlxuICAgICAgICAgIGNvbHVtbi5mb3JtYXQudHlwZSA9PT0gRUZvcm1hdFR5cGUuREVDSU1BTCAmJlxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgICAgIXJvd1tjb2x1bW4uZmllbGRdLnRvU3RyaW5nKCkuaW5jbHVkZXMoJy4nKVxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgZGlnaXRzSW5mbyA9ICcuMDAnO1xuICAgICAgICAgIGxldCB6ZXJvID0gJzAnO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdFBhcmFtcyA9IGNvbHVtbi5mb3JtYXQ/LmZvcm1hdFBhcmFtcztcbiAgICAgICAgICBjb25zdCBmcmFjRGlnaXRzID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgICBpZiAoZnJhY0RpZ2l0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmcmFjRGlnaXRzOyBpKyspIHtcbiAgICAgICAgICAgICAgemVybyA9IHplcm8gKyAnMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaWdpdHNJbmZvID0gJy4nICsgemVybztcbiAgICAgICAgICB9XG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXSArIGRpZ2l0c0luZm87XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHJvdy5pc05ldyB8fCByb3cuaXNuZXcgJiZcbiAgICAgICAgKGNvbHVtbi5hbGxvd1NhdmUgPT09IGZhbHNlIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgfHwgIXRoaXMuc2F2ZUFsbERhdGEpXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgfVxuICAgICAgY29sdW1uLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgY29uc3Qgb2JqS2V5ID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgIGlmIChzZWxlY3RlZFJvd1tvYmpLZXldPy5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgZGVsZXRlIHNlbGVjdGVkUm93W29iaktleV0uZXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRlbGV0ZSBzZWxlY3RlZFJvd1sndW5kZWZpbmVkJ107XG4gICAgb2JqW3RoaXMuZGF0YUtleV0gPSByb3dbdGhpcy5kYXRhS2V5XTsgLy8gZW5zdXJlIGRhdGFLZXkgKHRlbXBfaWQpIGlzIGF2YWlsYWJsZSBmb3IgZGlydHktcm93IGNvbXBhcmlzb25cblxuICAgIGNvbnN0IG5vcm1hbGl6ZUZvckNvbXBhcmUgPSAocjogYW55KSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ncmlkU2VydmljZS5nZXRBbGxvd1NhdmVSb3dsaXN0KFt7IC4uLnIgfV0sIHRoaXMuY29sdW1ucylbMF0gPz8ge307XG4gICAgICBub3JtYWxpemVkW3RoaXMuZGF0YUtleV0gPSByW3RoaXMuZGF0YUtleV07XG4gICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVOdW1lcmljVmFsdWVzKG5vcm1hbGl6ZWQpO1xuICAgIH07XG4gICAgY29uc3Qgb3JpZ2luYWxSb3cgPSB0aGlzLm9yaWdpbmFsUm93cy5maW5kKChyKSA9PiByW3RoaXMuZGF0YUtleV0gPT09IHJvd1t0aGlzLmRhdGFLZXldKTtcbiAgICBjb25zdCBpc0RpcnR5Um93ID0gcm93LmlzTmV3IHx8IHJvdy5pc25ldyB8fCAhb3JpZ2luYWxSb3cgfHwgZ2V0Q2hhbmdlZFJvd3MoW25vcm1hbGl6ZUZvckNvbXBhcmUocm93KV0sW25vcm1hbGl6ZUZvckNvbXBhcmUob3JpZ2luYWxSb3cpXSwgdGhpcy5jb2x1bW5zLCB0aGlzLmRhdGFLZXkpLmxlbmd0aCA+IDA7XG5cbiAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgaWYgKGlzRGlydHlSb3cpIHtcbiAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eSh0aGlzLmNvbHVtbnMsIHJvdyk7XG4gICAgICBpc1ZhbGlkID0gdGhpcy5ncmlkVmFsaWRhdGlvbih0aGlzLmNvbHVtbnMsIHJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4geyBjb2x1bW4uZXJyb3JNZXNzYWdlID0gJyc7IGNvbHVtbi5pc3ZhbGlkID0gdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgLy8gc2V0IHRoZSBncmlkIHVwZGF0ZWQvaW5zZXJ0ZWQgZGF0YVxuICAgICAgdGhpcy5yb3dBY3Rpb25FdmVudHMoc2VsZWN0ZWRSb3cpO1xuICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudChmYWxzZSk7XG4gICAgICBpZiAocm93LmlzTmV3IHx8IHJvdy5pc25ldykge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucm93c0RhdGEuZmluZEluZGV4KCh4KSA9PiB4LnRlbXBfaWQgPT0gcm93LnRlbXBfaWQpO1xuICAgICAgICB0aGlzLnRlbXBTYXZlZFJvdy5wdXNoKGluZGV4KTtcbiAgICAgICAgbGV0IHsgaXNOZXcsIGlzbmV3LCAuLi5uZXdSb3dPYmogfSA9IHJvdztcbiAgICAgICAgbmV3Um93T2JqID0gdGhpcy5ncmlkU2VydmljZS5yZW1vdmVFeHRyYU5ld1Jvd09iaihuZXdSb3dPYmosIHRoaXMuY29sdW1ucyk7XG4gICAgICAgIGlmICghdGhpcy5hZGREYXRhS2V5VmFsdWUpIHtcbiAgICAgICAgICBkZWxldGUgbmV3Um93T2JqW3RoaXMuZGF0YUtleV07XG4gICAgICAgIH1cbiAgICAgICAgbmV3Um93T2JqID0gdGhpcy5zZXRSb3dzRGF0YShuZXdSb3dPYmopO1xuICAgICAgICBpZiAodGhpcy5zYXZlQWxsUmVjb3JkKSB7XG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChuZXdSb3dPYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25Sb3dBZGQuZW1pdChuZXdSb3dPYmopO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucm93c0RhdGEuZmluZEluZGV4KCh4KSA9PiB4LnRlbXBfaWQgPT0gc2VsZWN0ZWRSb3cudGVtcF9pZCk7XG4gICAgICAgIHRoaXMudGVtcFNhdmVkUm93LnB1c2goaW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5zYXZlQWxsUmVjb3JkKSB7XG4gICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkucHVzaChvYmopO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmNoZWNrbGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjaGVja2xpc3RSb3dzID0gdGhpcy5zZXRSb3dzRGF0YSh0aGlzLmNoZWNrbGlzdCk7XG4gICAgICAgICAgICAvLyBhZGREYXRhS2V5VmFsdWUgbWVhbnMgZGF0YUtleSBpcyBhIHJlYWwgZmllbGQgKGUuZy4gYWxpYXMgZ3JpZCdzICdpZCcpLCBub3QgYVxuICAgICAgICAgICAgLy8gdGhyb3dhd2F5IHRlbXBfaWQsIHNvIGl0IG11c3Qgc3Vydml2ZSB0byBiZSBtYXRjaGVkIGFnYWluc3Qgb3JpZ2luYWxSb3dzIGJlbG93O1xuICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGtlZXAgdGhlIGxlZ2FjeSBkZWxldGUtYmVmb3JlLW1hdGNoIG9yZGVyIHVuY2hhbmdlZCBmb3IgZXhpc3RpbmcgY29uc3VtZXJzXG4gICAgICAgICAgICBpZiAoIXRoaXMuYWRkRGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgICAgIGNoZWNrbGlzdFJvd3MuZm9yRWFjaChyb3cgPT4gZGVsZXRlIHJvd1t0aGlzLmRhdGFLZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm9yaWdpbmFsUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkUm93cyA9IGdldENoYW5nZWRSb3dzKGNoZWNrbGlzdFJvd3MsIHRoaXMub3JpZ2luYWxSb3dzLCB0aGlzLmNvbHVtbnMsIHRoaXMuZGF0YUtleSk7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnByZXBhcmVSb3dzRm9yRW1pdChmaWx0ZXJlZFJvd3MpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnByZXBhcmVSb3dzRm9yRW1pdChjaGVja2xpc3RSb3dzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmFkZERhdGFLZXlWYWx1ZSkge1xuICAgICAgICAgICAgICBkZWxldGUgb2JqW3RoaXMuZGF0YUtleV07IC8vIHJlbW92ZSB0ZW1wX2lkIGJlZm9yZSBlbWl0dGluZ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMub3JpZ2luYWxSb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2luZ2xlUm93QXJyYXkgPSBbb2JqXTtcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSb3dzID0gZ2V0Q2hhbmdlZFJvd3Moc2luZ2xlUm93QXJyYXksIHRoaXMub3JpZ2luYWxSb3dzLCB0aGlzLmNvbHVtbnMsIHRoaXMuZGF0YUtleSk7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnByZXBhcmVSb3dzRm9yRW1pdChmaWx0ZXJlZFJvd3MubGVuZ3RoID4gMCA/IGZpbHRlcmVkUm93c1swXSA6IG51bGwpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMub25Sb3dVcGRhdGUuZW1pdCh0aGlzLnByZXBhcmVSb3dzRm9yRW1pdChvYmopKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZWRpdGluZ1Jvd0tleXNbcm93W3RoaXMuZGF0YUtleV1dID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyAuLi5zZWxlY3RlZFJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLCBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddID0geyBlcnJvck1lc3NhZ2U6IGNvbHVtbi5lcnJvck1lc3NhZ2UgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXSA9IHRydWU7XG4gICAgfVxuICAgIC8vIGlmIGFsbCByb3dzIGluIHJlYWQgb25seSBtb2RlIHRoZW4gc2hvdyBlZGl0QWxsUm93cyBidXR0b24uICAgIFxuICAgIGlmIChPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKSkge1xuICAgICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgLy8gY29udmVydCBkYXRlIGludG8gdGltZVxuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdICYmXG4gICAgICAgIChzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpPy5pbmNsdWRlcygnUE0nKSB8fFxuICAgICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCdBTScpKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gPSBzZXRUaW1lSW5EYXRlKHJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQykge1xuICAgICAgICBjb25zdCBkaWdpdHNJbmZvID0gY29sdW1uPy5mb3JtYXQ/LmZvcm1hdFBhcmFtcz8uZGlnaXRzSW5mbztcbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50Jykge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM/LmFsbG93Q2FsY3VsYXRlKSB7XG4gICAgICAgICAgICBpZiAoZGlnaXRzSW5mbykge1xuICAgICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gcGFyc2VGbG9hdCgoc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAqIDEwMCk/LnRvU3RyaW5nKCkpLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxlY3RlZFJvd1tjb2x1bW4uZmllbGRdID0gc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSAqIDEwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF1cbiAgICAgICkge1xuICAgICAgICAvLyBzZXQgYXV0b2NvbXBlbGV0IGFycmF5IGRhdGEgYWZ0ZXIgc2F2ZSByb3dcbiAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGF1dG9tQ29tcGxldGVUZW1wRGF0YTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmXG4gICAgICAgIHNlbGVjdGVkUm93W2NvbHVtbi5maWVsZF0gJiYgKGNvbHVtbi5hbGxvd1NhdmUgPT09IHRydWUgfHwgY29sdW1uLmFsbG93U2F2ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgKSB7XG4gICAgICAgIC8vIHNldCBMT09LVVBfSU5QVVQgZGF0YSBhZnRlciBzYXZlIHJvd1xuICAgICAgICBpZiAobG9va3VwSW5mb1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgc2VsZWN0ZWRSb3dbY29sdW1uLmZpZWxkXSA9IGxvb2t1cEluZm9bY29sdW1uLmZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTiAmJlxuICAgICAgICBjb2x1bW4ub3B0aW9uTGFiZWwgJiZcbiAgICAgICAgY29sdW1uLm9wdGlvblZhbHVlXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKGNvbHVtbiwgc2VsZWN0ZWRSb3cpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICBpZiAoT2JqZWN0LnZhbHVlcyh0aGlzLmVkaXRpbmdSb3dLZXlzKS5ldmVyeSgodmFsdWUpID0+ICF2YWx1ZSkgJiYgdGhpcy5zZXRHcmlkUmVmcmVzaFRpbWUpIHtcbiAgICAgIHRoaXMucmVmcmVzaEdyaWQoKTtcbiAgICB9XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8vIGNoZWNrIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxuICBncmlkVmFsaWRhdGlvbihjb2x1bW5zOiBhbnksIHJvdzogYW55LCBzaW5nbGVDZWxsOiBib29sZWFuID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICBpZiAoc2luZ2xlQ2VsbCA9PSB0cnVlKSB7XG4gICAgICBjb2x1bW5zID0gW3sgLi4uY29sdW1ucyB9XVxuICAgIH1cbiAgICBpZiAoIXRoaXMuZ3JpZFNlcnZpY2UuY2hlY2tWYWxpZGl0eShjb2x1bW5zLCByb3csIHNpbmdsZUNlbGwpKSB7XG4gICAgICBsZXQgZXJyb3JNZXNzYWdlRGV0YWlsczogc3RyaW5nID0gJyc7XG4gICAgICBjb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICBlcnJvck1lc3NhZ2VEZXRhaWxzID0gZXJyb3JNZXNzYWdlRGV0YWlscyA/IGVycm9yTWVzc2FnZURldGFpbHMgKyAnICwgJyArIGNvbHVtbi5lcnJvck1lc3NhZ2UgOiBjb2x1bW4uZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgbGV0IGlzUmVxdWlyZWQgPSBjb2x1bW5zLnNvbWUoXG4gICAgICAgIChjb2x1bW46IGFueSkgPT4gY29sdW1uLmVycm9yTWVzc2FnZSAmJiAocm93W2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCB8fCByb3dbY29sdW1uLmZpZWxkXSA9PT0gJycpXG4gICAgICApO1xuICAgICAgaWYgKGlzUmVxdWlyZWQgJiYgIXNpbmdsZUNlbGwpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgZXJyb3JNZXNzYWdlRGV0YWlscyxcbiAgICAgICAgICA1MDAwLFxuICAgICAgICAgICdSRVFVSVJFRCBGSUVMRCdcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZURldGFpbHMsIDUwMDAsICdJTlZBTElEIEZJRUxEJyk7XG4gICAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgICAgdGhpcy5zZXRFcnJvckNlbGwoY29sdW1uc1swXSwgcm93KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzaW5nbGVDZWxsKSB7XG4gICAgICAgIHRoaXMuc2V0RXJyb3JDZWxsKGNvbHVtbnNbMF0sIHJvdylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBzZXRFcnJvckNlbGwoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uLmVycm9yTWVzc2FnZSkge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIGVycm9yTWVzc2FnZTogY29sdW1uLmVycm9yTWVzc2FnZSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSA9IHsgZXJyb3JNZXNzYWdlOiBjb2x1bW4uZXJyb3JNZXNzYWdlIH07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10pIHtcbiAgICAgICAgZGVsZXRlIHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ10uZXJyb3JNZXNzYWdlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93IDogYW55XG4gICAqIEBwYXJhbSBpbmRleCA6IG51bWJlclxuICAgKiBDbGVhcnMgb3V0IHRoZSBlZGl0IHJvdyBhbmQgcmVwbGFjZSB3aXRoIHJlYWRhYmxlIG9uZVxuICAgKi9cbiAgb25Sb3dFZGl0Q2FuY2VsKHJvdzogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IHJvd0luRWRpdE1vZGU6IGJvb2xlYW4gPSBPYmplY3QudmFsdWVzKHRoaXMuZWRpdGluZ1Jvd0tleXMpLmV2ZXJ5KCh2YWx1ZSkgPT4gIXZhbHVlKTtcbiAgICBpZiAocm93Py5pc05ldykge1xuICAgICAgdGhpcy5yb3dzRGF0YS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvd3NEYXRhW2luZGV4XSA9IHRoaXMuZWRpdFJvd3NSZWNvcmRzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRSb3dzUmVjb3Jkc1tyb3dbdGhpcy5kYXRhS2V5XV07XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdSb3dLZXlzW3Jvd1t0aGlzLmRhdGFLZXldXTtcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGFbaW5kZXhdW2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pbkVkaXRNb2RlID0gZmFsc2U7XG4gICAgaWYgKHJvd0luRWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuc29ydERpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuYWRkTmV3Um93Q2hlY2sgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMuaW5saW5lUm93Q2FuY2VsLmVtaXQocm93KTtcbiAgICBpZiAocm93SW5FZGl0TW9kZSAmJiB0aGlzLnNldEdyaWRSZWZyZXNoVGltZSkge1xuICAgICAgdGhpcy5yZWZyZXNoR3JpZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHJvd1xuICAgKiBTZW5kcyB0aGUgcm93IHBheWxvYWQgdG8gcGFyZW50IGZvciBkZWxldGlvbnNcbiAgICovXG5cbiAgLyoqXG4gICpzZXQgdGhlIGdyaWREYXRhIG9uIHJvdyBhY3Rpb25zIGV2ZW50c1xuICAqL1xuICByb3dBY3Rpb25FdmVudHMocm93SW5mbywgZGVsZXRlUm93OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgYWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgICBsZXQgZ3JpZFJvd3NEYXRhOiBhbnlbXSA9IFsuLi50aGlzLnJvd3NEYXRhXTtcbiAgICBjb25zdCBpbmRleCA9IGdyaWRSb3dzRGF0YS5maW5kSW5kZXgoKHJvd0RhdGEpID0+IHJvd0luZm9bdGhpcy5kYXRhS2V5XSA9PT0gcm93RGF0YVt0aGlzLmRhdGFLZXldKTtcbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgaWYgKGRlbGV0ZVJvdykge1xuICAgICAgICBncmlkUm93c0RhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgdGhpcy5yb3dzRGF0YSA9IFsuLi5ncmlkUm93c0RhdGFdO1xuICAgICAgICBhY3Rpb24gPSAnZGVsZXRlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmFkZE5ld1Jvd0NoZWNrKSB7XG4gICAgICAgICAgYWN0aW9uID0gJ2luc2VydCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aW9uID0gJ3VwZGF0ZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub25HcmlkUm93QWN0aW9ucy5vYnNlcnZlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcm93SW5mb1sncm93QWN0aW9uJ10gPSBhY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgZ3JpZFJvd3NEYXRhW2luZGV4XSA9IHJvd0luZm87XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93c0RhdGEpO1xuICAgIHRoaXMub25HcmlkUm93QWN0aW9ucy5lbWl0KGdyaWRSb3dzRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogb3BlbiBEZWxldGUgY29uZmlybWF0aW9uIGRpYWxvZyB3aGVuIHRyeWluZyB0byBkZWxldGUgcm93XG4gICAqL1xuICBkZWxldGVSZWNvcmQocm93OiBhbnkpIHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XG4gICAgICBtZXNzYWdlOiAnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkPycsXG4gICAgICBoZWFkZXI6ICdEZWxldGUgQ29uZmlybWF0aW9uJyxcbiAgICAgIGljb246ICdwaSBwaS1leGNsYW1hdGlvbi10cmlhbmdsZScsXG4gICAgICBrZXk6ICdoYW5kbGVJbmxpbmVDUlVEJyxcbiAgICAgIGFjY2VwdDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy51c2VTZXJ2ZXJTaWRlRXZlbnRzKSB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzZXQgdGhlIGdyaWQgZGVsZXRlZCBkYXRhIFxuICAgICAgICB0aGlzLnJvd0FjdGlvbkV2ZW50cyhyb3csIHRydWUpO1xuICAgICAgICB0aGlzLm9uUm93RGVsZXRlLmVtaXQocm93KTtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuaW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICByZWplY3Q6ICgpID0+IHtcbiAgICAgICAgdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIHNldCBkaXNhYmxlZCB0aGUgY29udHJvbFxuICAgKi9cbiAgYWxsb3dEaXNhYmxlZChjb2x1bW46IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgdmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gJiYgdHlwZW9mIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKT8uaW5jbHVkZXMoJ2Rpc2FibGVkJykgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIE9iamVjdC5rZXlzKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKT8uaW5jbHVkZXMoJ3Jvd0Rpc2FibGVkJykgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnJvd0Rpc2FibGVkID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgdmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc2FibGVkKSB7XG4gICAgICB2YWx1ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBzZXQgYWdncmVnYXRlIGluIGdyaWQgZm9vdGVyXG4gICAqL1xuICBzZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uPy5hZ2dyZWdhdGUpIHtcbiAgICAgIGNvbHVtbi5hZ2dyZWdhdGUuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucm93c0RhdGEgJiYgdGhpcy5yb3dzRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGNvbHVtblR5cGU6IEVHcmlkQWdncmVnYXRlID0gY29sLnR5cGU7XG4gICAgICAgICAgaWYgKGNvbHVtblR5cGUgPT09IEVHcmlkQWdncmVnYXRlLkNPVU5UKSB7XG4gICAgICAgICAgICBsZXQgY291bnQgPSB0aGlzLnJvd3NEYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGNvdW50ID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIGNvdW50LCAxKTtcbiAgICAgICAgICAgIGNvbC5hZ2dyVmFsdWUgPSB0aGlzLnNldEFnZ3JlZ2F0ZUZvb3RlclRleHQoY29sLCBjb3VudCwgJ0NvdW50Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNIHx8XG4gICAgICAgICAgICBjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xWYWx1ZXM6IG51bWJlcltdID0gdGhpcy5nZXRDb2x1bW5WYWx1ZXMoY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjb2xWYWx1ZXMgJiYgY29sVmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGV0IHN1bSA9IGNvbFZhbHVlcy5yZWR1Y2UoKGFjYywgY3VyKSA9PiBhY2MgKyBjdXIsIDApO1xuICAgICAgICAgICAgICBpZiAoY29sdW1uVHlwZSA9PT0gRUdyaWRBZ2dyZWdhdGUuU1VNKSB7XG4gICAgICAgICAgICAgICAgc3VtID0gdGhpcy5zZXRGZXRjaEFnZ3JlZ2F0ZWRWYWx1ZShjb2x1bW4sIHN1bSwgMik7XG4gICAgICAgICAgICAgICAgY29sLmFnZ3JWYWx1ZSA9IHRoaXMuc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2wsIHN1bSwgJ1N1bScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5UeXBlID09PSBFR3JpZEFnZ3JlZ2F0ZS5BVkVSQUdFKSB7XG4gICAgICAgICAgICAgICAgbGV0IGF2ZXJhZ2UgPSBzdW0gLyBjb2xWYWx1ZXMubGVuZ3RoIHx8IDA7XG4gICAgICAgICAgICAgICAgYXZlcmFnZSA9IHRoaXMuc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBhdmVyYWdlLCAzKTtcbiAgICAgICAgICAgICAgICBjb2wuYWdnclZhbHVlID0gdGhpcy5zZXRBZ2dyZWdhdGVGb290ZXJUZXh0KFxuICAgICAgICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgICAgICAgYXZlcmFnZSxcbiAgICAgICAgICAgICAgICAgICdBdmcnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2wuYWdnclZhbHVlID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCB0aGUgYWdncmVnYXRhaW9uIHZhbHVlIHRoYXQgY29taW5nIGZyb20gZmV0Y2hcbiAgc2V0RmV0Y2hBZ2dyZWdhdGVkVmFsdWUoY29sdW1uLCBhZ2dyZWdhdGVWYWx1ZSwgYWdncmVnYXRlQWN0aW9uKSB7XG4gICAgaWYgKHRoaXMuYWdncmVnYXRlZFJlc3VsdD8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWdncmVnYXRlZENvbHVtbiA9IHRoaXMuYWdncmVnYXRlZFJlc3VsdC5maW5kKChhZ2dyZWdhdGUpID0+IGFnZ3JlZ2F0ZS5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICYmIGFnZ3JlZ2F0ZS5hZ2dyZWdhdGlvbk9wZXJhdGlvbiA9PT0gYWdncmVnYXRlQWN0aW9uKTtcbiAgICAgIGlmIChhZ2dyZWdhdGVkQ29sdW1uKSB7XG4gICAgICAgIGFnZ3JlZ2F0ZVZhbHVlID0gYWdncmVnYXRlZENvbHVtbj8udmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIGFnZ3JlZ2F0ZVZhbHVlID0gaXNOYU4oTnVtYmVyKGFnZ3JlZ2F0ZVZhbHVlKSkgPyAwIDogTnVtYmVyKGFnZ3JlZ2F0ZVZhbHVlKTtcbiAgICByZXR1cm4gYWdncmVnYXRlVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGdyaWQgQWdncmVnYXRlIHZhbHVlc1xuICAgKi9cbiAgc2V0QWdncmVnYXRlRm9vdGVyVGV4dChjb2x1bW46IGFueSwgdmFsdWU6IG51bWJlciwgZGVmYXVsdENhcHRpb246IHN0cmluZykge1xuICAgIGNvbnN0IGlzRGVjaW1hbCA9IGNvbHVtbi5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJztcbiAgICBjb25zdCBmb3JtYXRQYXJhbXMgPSBjb2x1bW4uZm9ybWF0Py5mb3JtYXRQYXJhbXM7XG4gICAgY29uc3QgZGlnaXRzSW5mbyA9IGNvbHVtbi5mb3JtYXQ/LmRpZ2l0c0luZm87XG4gICAgY29uc3QgbWluRnJhY3Rpb25EaWdpdHMgPSBmb3JtYXRQYXJhbXM/Lm1pbkZyYWN0aW9uRGlnaXRzID8/IGRpZ2l0c0luZm8gPz8gMjtcbiAgICBjb25zdCBtYXhGcmFjdGlvbkRpZ2l0cyA9IGZvcm1hdFBhcmFtcz8ubWF4RnJhY3Rpb25EaWdpdHMgPz8gZGlnaXRzSW5mbyA/PyAyO1xuICAgIGNvbnN0IGNhcHRpb24gPSBjb2x1bW4uY2FwdGlvbj8ubGVuZ3RoID4gMCA/IGNvbHVtbi5jYXB0aW9uIDogZGVmYXVsdENhcHRpb247XG5cbiAgICBpZiAoIWlzRGVjaW1hbCkgcmV0dXJuIGAke2NhcHRpb259ICR7dmFsdWU/LnRvRml4ZWQoMCk/LnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyl9IDwvYnI+YDtcbiAgICBjb25zdCBkZWNpbWFsUG9pbnQgPSAoKCkgPT4ge1xuICAgICAgY29uc3QgZmFjdG9yID0gMTAgKiogbWF4RnJhY3Rpb25EaWdpdHM7XG4gICAgICBjb25zdCBbaW50UGFydCwgZGVjUGFydCA9ICcnXSA9IChNYXRoLnRydW5jKHZhbHVlICogZmFjdG9yKSAvIGZhY3Rvcik/LnRvU3RyaW5nKCk/LnNwbGl0KCcuJyk7XG4gICAgICByZXR1cm4gaW50UGFydC5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCAnLCcpICsgJy4nICsgZGVjUGFydD8ucGFkRW5kKG1pbkZyYWN0aW9uRGlnaXRzLCAnMCcpO1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIGAke2NhcHRpb259ICR7ZGVjaW1hbFBvaW50fSA8L2JyPmA7XG4gIH1cblxuICAvKipcbiAgICogc2V0IGRlY2ltYXQgYW5kIG51bWVyaWMgdmFsdWVzXG4gICAqL1xuICBhbGxvd0xlYWRpbmdEb3QoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBpZiAoZXZlbnQ/LmtleSA9PT0gJy4nICYmIGlucHV0Py5zZWxlY3Rpb25TdGFydCA9PT0gMCkge1xuICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpbnB1dC52YWx1ZSA9ICcwLic7XG4gICAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBjb25zdCBkb3RJbmRleCA9IGlucHV0LnZhbHVlLmluZGV4T2YoJy4nKTtcbiAgICAgICAgaWYgKGRvdEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGRvdEluZGV4ICsgMSwgZG90SW5kZXggKyAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShpbnB1dC52YWx1ZS5sZW5ndGgsIGlucHV0LnZhbHVlLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUdyaWROdW1lcmljQ2hhbmdlKGNvbHVtbjogYW55LCByb3c6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZT8udG9TdHJpbmcoKS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCgnMCcgKyB2YWx1ZS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbi5maWVsZCArICdfb2JqJyAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkKSB7XG4gICAgICByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxlYWRpbmdEb3RIYW5kbGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBncmlkRGVjaW1hbFBhcnQgPSAnJztcblxuICBoYW5kbGVHcmlkTnVtZXJpY0tleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICAvLyBIYW5kbGUgbGVhZGluZyBkb3QgLSB3aGVuIHVzZXIgdHlwZXMgLiBpbiBhbiBlbXB0eSBmaWVsZCBvciB3aXRoIGFsbCB0ZXh0IHNlbGVjdGVkXG4gICAgY29uc3QgaXNBbGxTZWxlY3RlZCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmIGlucHV0LnNlbGVjdGlvbkVuZCA9PT0gaW5wdXQudmFsdWUubGVuZ3RoO1xuICAgIGlmIChldmVudC5rZXkgPT09ICcuJyAmJiAoIWlucHV0LnZhbHVlIHx8IGlzQWxsU2VsZWN0ZWQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5sZWFkaW5nRG90SGFuZGxlZCA9IHRydWU7XG4gICAgICB0aGlzLmdyaWREZWNpbWFsUGFydCA9ICcnO1xuICAgICAgaW5wdXQudmFsdWUgPSAnMC4nO1xuICAgICAgLy8gVXBkYXRlIG1vZGVsIHZhbHVlXG4gICAgICBpZiAoY29sdW1uLmZpZWxkICsgJ19vYmonICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gMDtcbiAgICAgIH1cbiAgICAgIC8vIFBvc2l0aW9uIGN1cnNvciBhZnRlciBkZWNpbWFsXG4gICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZSgyLCAyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZnRlciBsZWFkaW5nIGRvdCwgaW50ZXJjZXB0IG51bWVyaWMgaW5wdXQgdG8gYnVpbGQgdmFsdWUgY29ycmVjdGx5XG4gICAgaWYgKHRoaXMubGVhZGluZ0RvdEhhbmRsZWQgJiYgL15cXGQkLy50ZXN0KGV2ZW50LmtleSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIHRoaXMuZ3JpZERlY2ltYWxQYXJ0ID0gKHRoaXMuZ3JpZERlY2ltYWxQYXJ0ICsgZXZlbnQua2V5KS5zbGljZSgwLCAyKTtcbiAgICAgIGNvbnN0IG5ld1ZhbHVlID0gcGFyc2VGbG9hdCgnMC4nICsgdGhpcy5ncmlkRGVjaW1hbFBhcnQpO1xuXG4gICAgICAvLyBVcGRhdGUgbW9kZWwgdmFsdWVcbiAgICAgIGlmIChjb2x1bW4uZmllbGQgKyAnX29iaicgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCkge1xuICAgICAgICByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gPSBuZXdWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gbmV3VmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlucHV0LnZhbHVlID0gbmV3VmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSAhPT0gJy4nICYmIGV2ZW50LmtleSAhPT0gJ0JhY2tzcGFjZScpIHtcbiAgICAgIHRoaXMubGVhZGluZ0RvdEhhbmRsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZ3JpZERlY2ltYWxQYXJ0ID0gJyc7XG4gICAgfVxuICB9XG5cbiAgZml4R3JpZE51bWVyaWNJbnB1dEN1cnNvcihldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudmFsdWU7XG5cbiAgICAvLyBGaW5kIGRlY2ltYWwgcG9pbnQgYW5kIHBvc2l0aW9uIGN1cnNvciByaWdodCBhZnRlciBpdFxuICAgIGNvbnN0IGRvdEluZGV4ID0gdmFsdWUuaW5kZXhPZignLicpO1xuICAgIGlmIChkb3RJbmRleCAhPT0gLTEgJiYgZG90SW5kZXggPCB2YWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAvLyBPbmx5IHJlcG9zaXRpb24gaWYgdGhlcmUncyBjb250ZW50IGFmdGVyIHRoZSBkZWNpbWFsXG4gICAgICBjb25zdCBkZXNpcmVkUG9zID0gZG90SW5kZXggKyAxO1xuICAgICAgaWYgKGlucHV0LnNlbGVjdGlvblN0YXJ0ICE9PSBkZXNpcmVkUG9zKSB7XG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGRlc2lyZWRQb3MsIGRlc2lyZWRQb3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpeEN1cnJlbmN5SW5wdXRDdXJzb3IoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgLy8gQWZ0ZXIgYW55IGZvcm1hdHRpbmcgKGN1cnJlbmN5IG9yIGRlY2ltYWwpLCByZXBvc2l0aW9uIGN1cnNvciBhZnRlciBkZWNpbWFsIHBvaW50XG4gICAgY29uc3QgZG90SW5kZXggPSBpbnB1dC52YWx1ZS5pbmRleE9mKCcuJyk7XG4gICAgaWYgKGRvdEluZGV4ICE9PSAtMSkge1xuICAgICAgLy8gUmVwb3NpdGlvbiBjdXJzb3IgcmlnaHQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGRvdEluZGV4ICsgMSwgZG90SW5kZXggKyAxKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldE51bWVyaWNWYWx1ZXMoKSB7XG4gICAgaWYgKHRoaXMuY29sdW1ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLnJvd3NEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQykge1xuICAgICAgICAgIGNvbnN0IGRpZ2l0c0luZm8gPSBjb2x1bW4/LmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5kaWdpdHNJbmZvO1xuICAgICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdwZXJjZW50JyAmJiByb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdD8uZm9ybWF0UGFyYW1zPy5hbGxvd0NhbGN1bGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChkaWdpdHNJbmZvKSB7XG4gICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQoKHJvd1tjb2x1bW4uZmllbGRdICogMTAwKT8udG9TdHJpbmcoKSkudG9GaXhlZChkaWdpdHNJbmZvKTsgICAgICAgICAvL1RIRVNFIENPTU1FTlRFRCBPVVQgTElORVMgU0hPVUxEIFJVTiBPTiBTQVZFXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gcm93W2NvbHVtbi5maWVsZF0gKiAxMDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpZ2l0c0luZm8pIHtcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQocm93W2NvbHVtbi5maWVsZF0pLnRvRml4ZWQoZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uPy5mb3JtYXQ/LnR5cGUgPT09ICdkZWNpbWFsJyAmJiByb3dbY29sdW1uLmZpZWxkXSkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHBhcnNlRmxvYXQocm93W2NvbHVtbi5maWVsZF0pLnRvRml4ZWQoMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGdldCBjb2x1bW4gdmFsdWUgYmFzZWQgb24gY29sdW1uIGZpZWxkXG4gICAqL1xuICBnZXRDb2x1bW5WYWx1ZXMoY29sdW1uOiBJR3JpZENvbHVtbik6IG51bWJlcltdIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzRGF0YVxuICAgICAgLm1hcCgocm93KSA9PiB7XG4gICAgICAgIGNvbnN0IG9ialRleHQgPSByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dDtcbiAgICAgICAgbGV0IHZhbHVlID0gb2JqVGV4dCAhPSBudWxsID8gb2JqVGV4dCA6IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgICAgICByZXR1cm4gaXNOYU4oTnVtYmVyKHZhbHVlKSkgPyAwIDogTnVtYmVyKHZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKCh2YWwpID0+IHZhbCAhPSBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBFeHBvcnQgdG8gUERGXG4gICAqL1xuICBleHBvcnRQZGYoKSB7XG4gICAgdmFyIGV4cG9ydERhdGEgPSB0aGlzLnNldEV4cG9ydERhdGEoWy4uLnRoaXMucm93c0RhdGFdLCB0cnVlKTtcbiAgICBsZXQgZG9jID0gbmV3IGpzUERGKCdwJywgJ3B0Jyk7XG4gICAgZG9jLnRhYmxlKDEsIDEsIGV4cG9ydERhdGEucm93cywgZXhwb3J0RGF0YS5oZWFkaW5ncywgeyBhdXRvU2l6ZTogdHJ1ZSB9KTtcbiAgICBkb2Muc2F2ZSgnRXhwb3J0LnBkZicpO1xuICB9XG5cbiAgLyoqXG4gICAqICBTdWItZnVuY3Rpb24gdG8gc2V0IHJvd3MgZm9yIGV4cG9ydCB0byBQZGYsIGFuZCBFeGNlbFxuICAgKiBAcm93cyBwYXJhbSBmb3Igcm93c1xuICAgKiBAaXNFeGNlbCBwYXJhbSBmb3IgZXhwb3J0IHRvIGV4Y2VsIGluZGljYXRpb25cbiAgICovXG4gIHNldEV4cG9ydERhdGEocm93czogYW55W10gPSBbXSwgaXNQZGY6IGJvb2xlYW4gPSBmYWxzZSk6IElHcmlkRGF0YUV4cG9ydCB7XG4gICAgY29uc3QgaGVhZGluZ3M6IGFueSA9IHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4gY29sdW1uLmZpZWxkKTtcbiAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgZm9yICh2YXIgcHJvcCBpbiByb3cpIHtcbiAgICAgICAgaWYgKCFoZWFkaW5ncy5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgIGRlbGV0ZSByb3dbcHJvcF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUGRmKSB7XG4gICAgICAgICAgcm93W3Byb3BdID1cbiAgICAgICAgICAgICFyb3dbcHJvcF0gJiYgdHlwZW9mIHJvd1twcm9wXSAhPT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgOiByb3dbcHJvcF0udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB7IHJvd3MsIGhlYWRpbmdzIH07XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRXhwb3J0IHRvIEV4Y2VsXG4gICAqL1xuICBleHBvcnRFeGNlbCgpIHtcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmV4cG9ydFRvRXhjZWw/LnVuaXF1ZUtleSkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ2V0VXNlcnNEYXRhKCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICBsZXQgcm93cyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc2V0RGF0YUZpZWxkcyhyZXNwb25zZT8ucmVjb3Jkcyk7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmV4cG9ydEZpbGUocm93cyk7XG4gICAgICB9LFxuICAgICAgICAoeyBlcnJvciB9KSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cG9ydEZpbGUodGhpcy5yb3dzRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgZXhwb3J0RmlsZShyZWNvcmRzKSB7XG4gICAgbGV0IGFycjogYW55ID0gW107XG4gICAgcmVjb3Jkcy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgbGV0IG9iajogYW55ID0ge307XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBncmlkSGVhZGVyID0gY29sdW1uLmhlYWRlcjtcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykge1xuICAgICAgICAgIGNvbnN0IGxpbmtPYmogPSByb3dbY29sdW1uLmRpc3BsYXlUZXh0Py50b0xvd2VyQ2FzZSgpICsgJ19vYmonXTtcbiAgICAgICAgICBvYmpbZ3JpZEhlYWRlcl0gPSByb3dbY29sdW1uLmZpZWxkXSArICd8JyArIGxpbmtPYmo/Lmh5cGVybGluaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmpbZ3JpZEhlYWRlcl0gPSByb3dbY29sdW1uLmZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBhcnIucHVzaChvYmopO1xuICAgIH0pO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2UuZXhwb3J0RXhjZWwoYXJyLCB0aGlzLnNlbGVjdGVkQ29sdW1ucywgRUdyaWRFeGNlbC5FWFBPUlQpO1xuICB9XG4gIGdldFVzZXJzRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0U2VydmljZS5nZXQ8YW55W10sIFJlcXVlc3REdG8+KCcvRGF0YS9GZXRjaCcsIHtcbiAgICAgIHVuaXF1ZUtleTogdGhpcy5jb25maWdTZXJ2aWNlLmV4cG9ydFRvRXhjZWw/LnVuaXF1ZUtleSxcbiAgICAgIGZpbHRlcnM6IHRoaXMuY29uZmlnU2VydmljZS5leHBvcnRUb0V4Y2VsPy5maWx0ZXJzLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKnNldCBjb25maWcgZGF0YSBvZiBsb29rdXAgY29udHJvbCBkaWFsb2dcbiAgICovXG4gIHNldExvb2t1cERpYWxvZ0NvbmZpZyhyb3c6IGFueSwgY29sdW1uOiBhbnksIGRhdGE6IGFueSkge1xuICAgIGxldCBzZWxlY3Rpb246IHN0cmluZyA9ICcnO1xuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkXSAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBzZWxlY3Rpb24gPSByb3dbY29sdW1uLmZpZWxkXS50ZXh0O1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCAmJiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0pIHtcbiAgICAgIHNlbGVjdGlvbiA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0aW9uID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi5maWVsZCAmJiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgbmV3Um93W2NvbHVtbi5maWVsZF0gPSBuZXdSb3dbY29sdW1uLmZpZWxkXT8udmFsdWU7XG4gICAgICByb3cgPSB7IC4uLm5ld1JvdyB9O1xuICAgIH1cblxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiBkYXRhKSB7XG4gICAgICBsZXQgb2JqID0gYXV0b1NldExvb2t1cERhdGEoZGF0YSwgcm93KTtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnLWRhdGEnXSA9IG9iajtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0RhdGE6IHJvd1tjb2x1bW4uZmllbGQgKyAnLWRhdGEnXSxcbiAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uLFxuICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGxpbmsgb24gbG9va3VwQ29udHJvbCBjb250cm9sIGluIHJlYWQgb25seSBtb2RlIHdoZW4gZWRpdExpbmsgc2V0IHRydWVcbiAgICovXG4gIG9wZW5Mb29rdXBIeXBlcmxpbmsoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpIHtcbiAgICBjb25zdCBsb29rdXBJbmZvID0gY29sdW1uLmxvb2t1cENvbnRyb2w7XG4gICAgaWYgKGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSAmJiBsb29rdXBJbmZvLmNvbXBvbmVudCkge1xuICAgICAgY29uc3QgZGF0YSA9IGxvb2t1cEluZm8uZGF0YSA/IGxvb2t1cEluZm8uZGF0YSA6IGxvb2t1cEluZm8uZGF0YS5kYXRhO1xuICAgICAgbGV0IG9iajogYW55ID0gdGhpcy5zZXRMb29rdXBEaWFsb2dDb25maWcocm93LCBjb2x1bW4sIGRhdGEpO1xuICAgICAgb2JqWydjb21wb25lbnQnXSA9IGxvb2t1cEluZm8uY29tcG9uZW50O1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5vcGVuTG9va3VwRGlhbG9nKG9iaik7XG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKSAvLyBFbWl0IG9ubHkgb25jZSB3aGVuIHRoZSB6b25lIGJlY29tZXMgc3RhYmxlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGRyYWdnYWJsZURpYWxvZyhjb2x1bW4/LmZpZWxkID8gY29sdW1uPy5maWVsZCA6IGNvbHVtbj8uaGVhZGVyKVxuICAgICAgICB9KTtcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIGlmIChyZXMgJiYgY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGxvb2t1cCBEaWFsb2dcbiAgICovXG4gIG9wZW5Mb29rdXBEaWFsb2coY29sdW1uPzogYW55LCByb3c6IGFueSA9IHt9KSB7XG4gICAgdGhpcy5ncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID0gZmFsc2U7XG4gICAgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICBjb25zdCBjb2x1bW5EYXRhID0gY29sdW1uLmNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YSA/IGNvbHVtbi5jb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhIDogY29sdW1uLmNvbHVtbi5kYXRhO1xuICAgIGlmIChyb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVhZGVyID8gY29sdW1uRGF0YS5oZWFkZXIgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmhlYWRlciA6ICcnXG4gICAgICByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LndpZHRoID8gY29sdW1uRGF0YS53aWR0aCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ud2lkdGggOiAnJ1xuICAgICAgcm93W2NvbHVtbi5jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5kYXRhPy5oZWlnaHQgPyBjb2x1bW5EYXRhLmhlaWdodCA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uaGVpZ2h0IDogJydcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wID8gY29sdW1uRGF0YS52YWx1ZVByb3AgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LnZhbHVlUHJvcCA6IFwiXCJcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8ubGFiZWxQcm9wID8gY29sdW1uRGF0YS5sYWJlbFByb3AgPSByb3dbY29sdW1uLmNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcCA6IFwiXCJcbiAgICAgIHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA/IGNvbHVtbkRhdGEuZGF0YSA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA6ICcnXG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbihjb2x1bW4uY29tcG9uZW50LCB7XG4gICAgICAuLi5jb2x1bW5EYXRhLFxuICAgICAgc3R5bGVDbGFzczogJ2xvb2t1cC1tb2RlbCcsXG4gICAgICBoZWlnaHQ6IGNvbHVtbkRhdGE/LmhlaWdodCA/IGNvbHVtbkRhdGE/LmhlaWdodCA6ICc5MHZoJyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2VsZWN0aW9uOiBjb2x1bW4uc2VsZWN0aW9uLFxuICAgICAgICBmaWVsZDogY29sdW1uLmNvbHVtbi5maWVsZCxcbiAgICAgICAgbGFiZWxQcm9wOiBjb2x1bW4uY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LmxhYmVsUHJvcCxcbiAgICAgICAgLi4uY29sdW1uLnJvd0RhdGEsXG4gICAgICB9LFxuICAgICAgY2xvc2FibGU6IHRydWUsXG4gICAgICBmb2N1c09uU2hvdzogZmFsc2VcbiAgICB9KTtcbiAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmWydkaWFsb2dDbG9zZSddID0gdGhpcy5kaWFsb2dSZWYuY2xvc2U7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlID0gdGhpcy5pbnRlcmNlcHREaWFsb2dDbG9zZS5iaW5kKHRoaXMsIHRoaXMuZGlhbG9nUmVmKTtcbiAgICAgIH0pO1xuXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLmRpYWxvZ1JlZlsnZGlhbG9nQ2xvc2UnXSA9IHRoaXMuZGlhbG9nUmVmLmNsb3NlO1xuICAgIC8vICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UgPSB0aGlzLmludGVyY2VwdERpYWxvZ0Nsb3NlLmJpbmQodGhpcyk7XG4gICAgLy8gfSwgODAwKTtcblxuICAgIHRoaXMuc2V0RHluYW1pY0RpYWxvZ1JlZih0aGlzLmRpYWxvZ1JlZik7XG4gICAgY29uc3QgY29tcG9uZW50TmFtZSA9IHJvd1tjb2x1bW4uY29sdW1uLmZpZWxkXT8ubmFtZTtcbiAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgdGhpcy5wYWdlTG9nZ2VyU2VydmljZS5zYXZlUGFnZUxvZ2dlckluZm8odGhpcy5yb3V0ZXIudXJsPy5zdWJzdHJpbmcoMSksIGNvbXBvbmVudE5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kaWFsb2dSZWY7XG4gIH1cblxuICBpbnRlcmNlcHREaWFsb2dDbG9zZShkaWFsb2dSZWY6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGRpYWxvZ0VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncC1kaWFsb2cnKTtcbiAgICBpZiAoIWRpYWxvZ0VsKSB7XG4gICAgICBkaWFsb2dSZWY/LmRpYWxvZ0Nsb3NlKGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZm9ybVNhdmVCdXR0b24gPSBkaWFsb2dFbFswXT8ucXVlcnlTZWxlY3RvcignLmZvcm0tc2F2ZS1idXR0b24nKTtcbiAgICBjb25zdCBncmlkU2F2ZUFsbEJ1dHRvbiA9IGRpYWxvZ0VsWzBdPy5xdWVyeVNlbGVjdG9yKCcuc2F2ZS1hbGwtZ3JpZCcpO1xuICAgIGNvbnN0IGhhc1Vuc2F2ZWQgPSAoZm9ybVNhdmVCdXR0b24gfHwgZ3JpZFNhdmVBbGxCdXR0b24pICYmICh0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgfHwgdGhpcy5mb3JtU2VydmljZS5maWVsZEZvY3VzZWRPdXQpO1xuICAgIGlmIChoYXNVbnNhdmVkKSB7XG4gICAgICBpZiAoY29uZmlybShcIllvdSB3aWxsIGxvc2UgY2hhbmdlcyBub3Qgc2F2ZWQgb24gcGFnZS4gV291bGQgeW91IGxpa2UgdG8gY29udGludWU/XCIpKSB7XG4gICAgICAgIGRpYWxvZ1JlZj8uZGlhbG9nQ2xvc2UoZXZlbnQpO1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlhbG9nUmVmPy5kaWFsb2dDbG9zZShldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGRpYWxvZyByZWYgd2hlbiBwb3B1cCBvcGVuXG4gIHNldER5bmFtaWNEaWFsb2dSZWYocmVmKSB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5nZXQocmVmKTtcbiAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50ID0gZGlhbG9nUmVmPy5pbnN0YW5jZSBhcyBEeW5hbWljRGlhbG9nQ29tcG9uZW50O1xuICAgIGNvbnN0IGFyaWFMYWJlbGxlZEJ5ID0gZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSgpO1xuICAgIGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkgPSAoKSA9PiBhcmlhTGFiZWxsZWRCeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvcGVuIGRpYWxvZyBvbiBsb29rdXBDb250cm9sIGZpZWxkXG4gICAqL1xuICBzZWxlY3RMb29rdXBGaWVsZChjb2x1bW46IGFueSwgcm93PzogYW55KSB7XG4gICAgdGhpcy5vbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpO1xuICAgIGxldCBvYmo6IGFueSA9IHRoaXMuc2V0TG9va3VwRGlhbG9nQ29uZmlnKFxuICAgICAgcm93LFxuICAgICAgY29sdW1uLFxuICAgICAgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGFcbiAgICAgICAgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YSA6IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YVxuICAgICk7XG5cbiAgICBvYmpbJ2NvbXBvbmVudCddID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudCA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5jb21wb25lbnQgOiBjb2x1bW4ubG9va3VwQ29udHJvbD8uY29tcG9uZW50O1xuICAgIGNvbnN0IHJlZiA9IHRoaXMub3Blbkxvb2t1cERpYWxvZyhvYmosIHJvdyk7XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpIC8vIEVtaXQgb25seSBvbmNlIHdoZW4gdGhlIHpvbmUgYmVjb21lcyBzdGFibGVcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBkcmFnZ2FibGVEaWFsb2coY29sdW1uPy5maWVsZCA/IGNvbHVtbj8uZmllbGQgOiBjb2x1bW4/LmhlYWRlcilcbiAgICAgIH0pO1xuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZShcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UudXNlclNlYXJjaGVkID0gZmFsc2U7XG4gICAgICAgICAgbGV0IHZhbHVlID0gc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgIHJlc1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzID0gb2JqQ29udmVydFRvTG93ZXIocmVzKTtcbiAgICAgICAgICBsZXQgbGFiZWxQcm9wID0gY29sdW1uPy5sb29rdXBDb250cm9sPy5kYXRhPy5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgbGV0IHZhbHVlUHJvcCA9IGNvbHVtbj8ubG9va3VwQ29udHJvbD8uZGF0YT8udmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGxldCBjb2x1bW5GaWVsZCA9IGNvbHVtbj8uZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGNvbHVtbi5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGlmIChyb3c/Lmhhc093blByb3BlcnR5KGNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogY29sdW1uRmllbGRdO1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gPSByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogY29sdW1uLmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1tjb2x1bW5GaWVsZF0gPSB7XG4gICAgICAgICAgICAgICAgdGV4dDogcmVzW2xhYmVsUHJvcCA/IGxhYmVsUHJvcCA6IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc1t2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiBjb2x1bW5GaWVsZF0sXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZVsnZmllbGQnXSA9IGNvbHVtbkZpZWxkO1xuICAgICAgICAgICAgaWYgKGxhYmVsUHJvcCB8fCB2YWx1ZVByb3ApIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZXNbbGFiZWxQcm9wID8gbGFiZWxQcm9wIDogcmVzW2xhYmVsUHJvcF1dLFxuICAgICAgICAgICAgICAgIHZhbHVlOiByZXNbdmFsdWVQcm9wID8gdmFsdWVQcm9wIDogcmVzW2xhYmVsUHJvcF1dLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobGFiZWxQcm9wIHx8IHZhbHVlUHJvcCkge1xuICAgICAgICAgICAgICByb3dbY29sdW1uRmllbGRdID0ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlc1tsYWJlbFByb3AgPyBsYWJlbFByb3AgOiB2YWx1ZVByb3AgPyB2YWx1ZVByb3AgOiByZXNbY29sdW1uRmllbGRdXSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzW3ZhbHVlUHJvcCA/IHZhbHVlUHJvcCA6IHJlc1tjb2x1bW5GaWVsZF1dLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2NvbHVtbkZpZWxkXSA9IHJlc1tjb2x1bW5GaWVsZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGRdKSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogcm93W2NvbHVtbi5maWVsZF0gfTtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdPy52YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgLi4ucm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10sIHRleHQ6IHsgdGV4dDogcm93W2NvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldLCB2YWx1ZTogcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV0gfSB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSA9IHsgdGV4dDogeyB0ZXh0OiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0sIHZhbHVlOiByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSB9IH07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJlcykge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0geyAuLi5yb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSwgdGV4dDogeyB0ZXh0OiByZXNbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXSwgdmFsdWU6IHJlc1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldIH0gfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcywgcm93KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gIT09IG9iai5zZWxlY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgICAgICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBzZXRGaWx0ZXJMb29rdXAoY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnNldExvb2tVcEZpbHRlcihjb2x1bW4sIHRoaXMuZGlhbG9nU2VydmljZSk7XG4gIH1cblxuICAvLyBzZXQgbG9va3VwIHZhbHVlIHRoYXQgZGlzcGxheSBpbiByZWFkT25seU1vZGVcbiAgc2V0TG9va3VwUmVhZE9ubHlWYWx1ZShyb3csIGNvbHVtbikge1xuICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0KSA9PT0gXCJvYmplY3RcIiAmJiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCAmJiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQpPy5oYXNPd25Qcm9wZXJ0eSgndGV4dCcpKSB7XG4gICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0LnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICBpZiAoY29sdW1uLmRpc3BsYXlGaWVsZCkge1xuICAgICAgICB2YWx1ZSA9IHJvd1tjb2x1bW4uZGlzcGxheUZpZWxkXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gcm93W2NvbHVtbi5maWVsZF07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGNhbGVuZGFyIHZhbHVlIGlzIGNoYW5nZWQgb3Igbm90XG4gIGNhbGVuZGFyQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgbGV0IHZhbHVlQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKFxuICAgICAgY29sdW1uLnRpbWVPbmx5ICYmXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ2hoOm1tIGEnKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAnaGg6bW0gYScpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNvbHVtbi5zaG93VGltZSAmJlxuICAgICAgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0ocm93W2NvbHVtbi5maWVsZF0sICd5eXl5LU1NLWRkIGhoOm1tJykgIT09XG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSwgJ3l5eXktTU0tZGQgaGg6bW0nKVxuICAgICkge1xuICAgICAgdmFsdWVDaGFuZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyb3dbY29sdW1uLmZpZWxkXSwgJ3l5eXktTU0tZGQnKSAhPT1cbiAgICAgIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHRoaXMuY2FsZW5kYXJQcmV2aW91c1ZhbHVlLCAneXl5eS1NTS1kZCcpXG4gICAgKSB7XG4gICAgICB2YWx1ZUNoYW5nZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZUNoYW5nZSkge1xuICAgICAgdGhpcy5icm93c2VyQ2xvc2VFdmVudCh0cnVlKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZTtcbiAgICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZTtcblxuICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgICAgLnBpcGUodGFrZSgxKSkgLy8gRW1pdCBvbmx5IG9uY2Ugd2hlbiB0aGUgem9uZSBiZWNvbWVzIHN0YWJsZVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgICAvLyB9LCAyNTApO1xuICAgICAgaWYgKGNvbHVtbi5vbkNoYW5nZSkge1xuICAgICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jYWxlbmRhclByZXZpb3VzVmFsdWUgPSAnJztcbiAgfVxuXG4gIHNldEF1dG9Db21wbGV0ZXZhbHVlT25UeXBlKGNvbHVtbjogYW55LCByb3c6IGFueSwgZXZlbnQ6IGFueSA9IFtdKSB7XG4gICAgbGV0IHZhbHVlID0gZXZlbnQ/LnRhcmdldD8udmFsdWU7XG4gICAgbGV0IGZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgJiYgdmFsdWUgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB2YWx1ZUtleSA9IGNvbHVtbi5vcHRpb25WYWx1ZSA/IGNvbHVtbi5vcHRpb25WYWx1ZSA6IGZpZWxkO1xuICAgICAgY29uc3QgbGFiZWxLZXkgPSBjb2x1bW4ub3B0aW9uTGFiZWwgPyBjb2x1bW4ub3B0aW9uTGFiZWwgOiBjb2x1bW4uZGlzcGxheUZpZWxkID8gY29sdW1uLmRpc3BsYXlGaWVsZCA6IGZpZWxkO1xuICAgICAgaWYgKHJvd1tmaWVsZF0/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0ID0gcm93W2ZpZWxkXT8uZmluZCgocm93SW5mbykgPT4gcm93SW5mb1tmaWVsZF0gPT09IHZhbHVlKTtcbiAgICAgICAgaWYgKCFhbHJlYWR5RXhpc3QpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gWy4uLnJvd1tmaWVsZF0sIHsgW2xhYmVsS2V5Py50b0xvd2VyQ2FzZSgpXTogdmFsdWUsIFt2YWx1ZUtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbZmllbGQ/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSB9XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm93W2ZpZWxkXSA9IFt7IFtsYWJlbEtleT8udG9Mb3dlckNhc2UoKV06IHZhbHVlLCBbdmFsdWVLZXk/LnRvTG93ZXJDYXNlKCldOiB2YWx1ZSwgW2ZpZWxkPy50b0xvd2VyQ2FzZSgpXTogdmFsdWUgfV07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChldmVudD8udGFyZ2V0Py52YWx1ZSkge1xuICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gIH1cblxuICBvbkF1dG9Db21wbGV0ZUtleUVudGVyRXZlbnQoZSwgY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURSkge1xuICAgICAgaWYgKGNvbHVtbi5hbGxvd0F1dG9Db21wbGV0ZVNhdmUgJiYgZS50YXJnZXQudmFsdWUgJiYgIWNvbHVtbi5kYXRhPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZXRBdXRvQ29tcGxldGV2YWx1ZU9uVHlwZShjb2x1bW4sIHJvdywgZSk7XG4gICAgICAgIC8vL2NoZWNrIHRoZSBjb3JyZWN0IGZvcm1hdCBpZiBkYXRhLmNvbnRhaW5zIGN1eiBpdHMgYW4gYXJyYXkgb2YgYXJyYXlzIHdpdGggb2JqZWN0cy5cbiAgICAgICAgaWYgKGNvbmZpcm0oYERvIHlvdSB3YW50IHRvIGFkZCAke2UudGFyZ2V0LnZhbHVlfSB0byB0aGUgc2VsZWN0aW9uP2ApKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi51bmlxdWVLZXkpIHtcbiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5ncmlkU2VydmljZVxuICAgICAgICAgICAgICAuYWRkQXV0b0NvbXBsZXRlVmFsdWUoY29sdW1uLnVuaXF1ZUtleSwgZS50YXJnZXQudmFsdWUsIGNvbHVtbiwgcm93KVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4oZS50YXJnZXQudmFsdWUsIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgb25Gb2N1c0V2ZW50KGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KSB7XG4gICAgdGhpcy5udW1lcmljVmFsdWVbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIC8vIFJlc2V0IGxlYWRpbmcgZG90IGZsYWcgd2hlbiBmb2N1c2luZyBvbiBudW1lcmljIGNlbGxcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDKSB7XG4gICAgICB0aGlzLmxlYWRpbmdEb3RIYW5kbGVkID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1c091dEV2ZW50KGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55LCBldmVudDogYW55ID0gJycpIHtcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDICYmIHRoaXMubnVtZXJpY1ZhbHVlW2NvbHVtbi5maWVsZF0gIT09IHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXG4gICAgfVxuICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCAmJiB0aGlzLmlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykpIHtcbiAgICAgIHRoaXMucmVzb2x2ZUxvb2t1cElucHV0VmFsdWUoY29sdW1uLCByb3cpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEUgfHwgKCFjb2x1bW4uYWxsb3dBdXRvQ29tcGxldGVTYXZlKSkge1xuICAgICAgdGhpcy5ncmlkU2VydmljZS5jaGVja1ZhbGlkaXR5KFtjb2x1bW5dLCByb3cpO1xuICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbHVtbi5vbkZvY3VzT3V0KSB7XG4gICAgICAgIGNvbHVtbi5vbkZvY3VzT3V0KHJvdyk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2x1bW4ub25SZXR1cm4gJiZcbiAgICAgICAgY29sdW1uLnR5cGUgIT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVRcbiAgICAgICkge1xuICAgICAgICBjb2x1bW4ub25SZXR1cm4ocm93KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgc2V0UmVwb3J0TmFtZShjb2x1bW46IElHcmlkUmVwb3J0QnRuLCByb3c6IGFueSkge1xuICAgIGxldCByZXBvcnQ6IGFueSA9ICcnO1xuICAgIGlmIChjb2x1bW4ucmVwb3J0SWQpIHtcbiAgICAgIHJlcG9ydCA9IGNvbHVtbi5yZXBvcnRJZDtcbiAgICB9IGVsc2UgaWYgKHJvd1tjb2x1bW4/LmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXSAmJiByb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LnJlcG9ydFVuaXF1ZUtleSkge1xuICAgICAgcmVwb3J0ID0gcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRVbmlxdWVLZXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcG9ydCA9IGNvbHVtbi5yZXBvcnRVbmlxdWVLZXk7XG4gICAgfVxuICAgIHJldHVybiByZXBvcnQ7XG4gIH1cblxuICBzZXRSZXBvcnRQYXJhbXMoY29sdW1uOiBJR3JpZFJlcG9ydEJ0biwgcm93OiBhbnkpIHtcbiAgICBsZXQgcmVwb3J0UGFyYW1zOiBhbnlbXSA9IFtdO1xuICAgIGlmIChyb3dbY29sdW1uPy5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10gJiYgcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRQYXJhbSkge1xuICAgICAgcmVwb3J0UGFyYW1zID0gcm93W2NvbHVtbj8ubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5yZXBvcnRQYXJhbTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVwb3J0UGFyYW1zID0gY29sdW1uLnBhcmFtcztcbiAgICB9XG4gICAgcmV0dXJuIHJlcG9ydFBhcmFtcztcbiAgfVxuXG4gIHNldEZpbHRlckZvY3VzT3V0KGNvbDogYW55LCBmaWx0ZXI/OiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgdGhpcy5zZXRHcmlkRmlsdGVyKGNvbCwgZmlsdGVyLCBldmVudCk7XG4gIH1cblxuICBsb29rdXBGaWx0ZXJJbnB1dE5nTW9kZWwoY29sdW1uOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0eXBlb2YgY29sdW1uWydmaWx0ZXJWYWx1ZV9vYmonXSA9PT0gJ29iamVjdCcgJiYgY29sdW1uWydmaWx0ZXJWYWx1ZV9vYmonXT8udGV4dCAhPSB1bmRlZmluZWQgPyBjb2x1bW5bJ2ZpbHRlclZhbHVlX29iaiddLnRleHQgOiBjb2x1bW4uZmlsdGVyVmFsdWU7XG4gIH1cblxuICBzZXRHcmlkRmlsdGVyKGNvbDogSUdyaWRDb2x1bW4sIGZpbHRlcj86IGFueSwgZXZlbnQ/OiBhbnkpIHtcbiAgICB0aGlzLmdyaWRGaWx0ZXJPYmogPSB7IGNvbHVtbjogY29sLCBmaWx0ZXI6IGZpbHRlciwgZXZlbnQ6IGV2ZW50IH07XG4gICAgY29uc3QgbmV3Q29sdW1uOiBhbnkgPSB7IC4uLmNvbCB9O1xuICAgIC8vY2hhbmdlIGZpbHRlciBjYWxlbmRhciBmb3JtYXRcbiAgICBpZiAobmV3Q29sdW1uLnR5cGUgPT09ICdkYXRlJyAmJiBuZXdDb2x1bW4uZmlsdGVyVmFsdWUgJiYgbmV3Q29sdW1uLmZpbHRlcj8udHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSKSB7XG4gICAgICBuZXdDb2x1bW4uZmlsdGVyVmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShjb2wuZmlsdGVyVmFsdWUudG9TdHJpbmcoKS50cmltKCksICd5eXl5LU1NLWRkJyk7XG4gICAgfVxuICAgIGlmIChuZXdDb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4gJiYgbmV3Q29sdW1uLmZpbHRlclZhbHVlICYmIG5ld0NvbHVtbi5maWx0ZXI/LnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWCkge1xuICAgICAgbGV0IHZhbHVlID0gbmV3Q29sdW1uLmZpbHRlclZhbHVlO1xuICAgICAgaWYgKG5ld0NvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgbmV3Q29sdW1uLmZpbHRlclZhbHVlID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJ1knIDogJ04nO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmZpbHRlck9iaihuZXdDb2x1bW4pO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdhcHBseUZpbHRlcicsIEpTT04uc3RyaW5naWZ5KGZhbHNlKSk7XG4gIH1cblxuICBmaWx0ZXJPYmooY29sOiBhbnkpIHtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgbWF0Y2hNb2RlOiBjb2wubWF0Y2hNb2RlID8gY29sLm1hdGNoTW9kZSA6IGNvbC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQgPyBFTWF0Y2hNb2RlLkVRVUFMUyA6ICdzdGFydHNXaXRoJyxcbiAgICAgIG9wZXJhdG9yOiBjb2wub3BlcmF0b3IgPyBjb2wub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgIHRhYmxlQWxpYXM6IGNvbC50YWJsZUFsaWFzID8gY29sLnRhYmxlQWxpYXMgOiAnJyxcbiAgICAgIHZhbHVlOiBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUID8gY29sLmZpbHRlclZhbHVlLnRvU3RyaW5nKCkgOiBjb2wudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUICYmIGNvbC5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyVmFsdWVfb2JqJykgPyBjb2xbJ2ZpbHRlclZhbHVlX29iaiddPy52YWx1ZSA6IGNvbC5maWx0ZXJWYWx1ZSxcbiAgICB9O1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyc0FycmF5LnB1c2gob2JqKTtcbiAgfVxuXG4gIGFwcGx5RW50ZXJFdmVudChmaWx0ZXI6IGFueSwgZXZlbnQ6IGFueSwgY29sdW1uOiBhbnkpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnVzZXJTZWFyY2hlZCA9IHRydWU7XG4gICAgdGhpcy5ncmlkU2VydmljZS5hcHBseUZpbHRlckV2ZW50ID0gdHJ1ZTtcbiAgICB0aGlzLnJvd1VwZGF0ZUNoYW5nZSA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b0xvYWREYXRhID0gdHJ1ZTtcbiAgICAvL3RoaXMubG9hZGluZz10cnVlO1xuICAgIHRoaXMub25BcHBseUZpbHRlci5lbWl0KCk7XG4gICAgdGhpcy5maWx0ZXJPYmooY29sdW1uKTtcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnYXBwbHlGaWx0ZXInLCBKU09OLnN0cmluZ2lmeSh0cnVlKSk7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1QpIHtcbiAgICAgIGZpbHRlcihjb2x1bW4/LmZpbHRlclZhbHVlPy50b1N0cmluZygpKVxuICAgIH0gZWxzZSBpZiAoY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09IHRoaXMuZHJvcERvd25GaWx0ZXI/LmNvbHVtbj8uZmlsdGVyPy50eXBlKSB7XG4gICAgICB0aGlzLmRyb3BEb3duRmlsdGVyLmZpbHRlcih0aGlzLmRyb3BEb3duRmlsdGVyLmV2ZW50LnRhcmdldCk7XG4gICAgfSBlbHNlIGlmIChmaWx0ZXIgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOICYmIGNvbHVtbj8uZmlsdGVyPy50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1ggJiYgY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5DSEFSKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGNvbHVtbi5maWx0ZXJWYWx1ZTtcbiAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJ1knIDogJ04nO1xuICAgICAgICBmaWx0ZXIoY29sdW1uLmZpbHRlclZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBmaWx0ZXIoZXZlbnQ/LmNoZWNrZWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XG4gICAgICBmaWx0ZXIoZXZlbnQ/LnRhcmdldD8udmFsdWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nbG9iYWxEYXRhPy5sZW5ndGggPT0gMCkge1xuICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKHRoaXMuZ3JpZGZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlTnVsbENhbGVuZGFyKGNvbHVtbjogSUdyaWRDb2x1bW4sIGZpbHRlcjogYW55LCBldmVudDogYW55KSB7XG4gICAgaWYgKGNvbHVtbi5maWx0ZXJWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yZW1vdmVOdWxsRmlsdGVycyhjb2x1bW4pO1xuICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4sIGZpbHRlciwgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGJhY2tzcGFjZUV2ZW50KGV2ZW50OiBhbnksIGNvbHVtbjogYW55KSB7XG4gICAgaWYgKFxuICAgICAgZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJyAmJlxuICAgICAgKGNvbHVtbi5maWx0ZXJWYWx1ZT8udG9TdHJpbmcoKS5sZW5ndGggPT09IDEgfHxcbiAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlPy50b1N0cmluZygpID09PSAnJyB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPT09IG51bGwpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUgJiYgY29sdW1uLmZpbHRlclZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLnJlbW92ZU51bGxGaWx0ZXJzKGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlTnVsbEZpbHRlcnMoY29sdW1uOiBhbnkpIHtcbiAgICBpZiAodGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkgJiYgdGhpcy5nbG9iYWxGaWx0ZXJzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGFyciA9IFsuLi50aGlzLmdsb2JhbEZpbHRlcnNBcnJheV07XG4gICAgICBsZXQgaW5kZXggPSBhcnIuZmluZEluZGV4KChpKSA9PiBpLmZpZWxkID09PSBjb2x1bW4uZmllbGQpO1xuICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB0aGlzLmdsb2JhbEZpbHRlcnNBcnJheSA9IGFycjtcbiAgICB9XG4gICAgbGV0IGluZGV4ID0gdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzPy5maW5kSW5kZXgoKGkpID0+IHsgaS5maWVsZCA9PT0gY29sdW1uLmZpZWxkIH0pXG4gICAgdGhpcy5zZXJ2ZXJGaWx0ZXJzPy5maWx0ZXJzPy5zcGxpY2UoaW5kZXgsIDEpXG4gIH1cblxuICAvLyBSZW1vdmluZyBIZWFkZXIgRmlsdGVyIFZhbHVlIHVzaW5nIEJhY2tzcGFjZSBrZXkgRXZlbnQgb3IgRGVsZXRlIGtleSBFdmVudC5cbiAgcmVtb3ZpbmdGaWx0ZXJzKGV2ZW50OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4pIHtcbiAgICAvLyBGb3IgbG9va3VwIGZpbHRlcnMsIGFsc28gY2hlY2sgZmlsdGVyVmFsdWVfb2JqIHdoZW4gaXQncyBlbXB0eVxuICAgIGNvbnN0IGlzTG9va3VwRmlsdGVyRW1wdHkgPSBjb2x1bW4udHlwZSA9PT0gJ2xvb2t1cF9pbnB1dCcgJiYgIWNvbHVtbi5maWx0ZXJWYWx1ZTtcbiAgICBpZiAoXG4gICAgICAoKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHwgZXZlbnQua2V5ID09PSAnRGVsZXRlJykgJiZcbiAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZT8udG9TdHJpbmcoKS5sZW5ndGggPT09IDApIHx8IGlzTG9va3VwRmlsdGVyRW1wdHlcbiAgICApIHtcbiAgICAgIC8vIENsZWFyIGZpbHRlclZhbHVlX29iaiBmb3IgbG9va3VwIGZpbHRlcnNcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2xvb2t1cF9pbnB1dCcpIHtcbiAgICAgICAgKGNvbHVtbiBhcyBhbnkpLmZpbHRlclZhbHVlX29iaiA9IG51bGw7XG4gICAgICB9XG4gICAgICBsZXQgc2VhcmNoRmlsdGVycztcbiAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICBzZWFyY2hGaWx0ZXJzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpIGFzIGFueSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgIHNlYXJjaEZpbHRlcnMgPSB0aGlzLmdyaWRTZXJ2aWNlLnNvZnRDYWNoaW5nRmlsdGVyc1t0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybF07XG4gICAgICB9XG4gICAgICBpZiAoc2VhcmNoRmlsdGVycyAmJiBzZWFyY2hGaWx0ZXJzLmZpbHRlcnMpIHtcbiAgICAgICAgaWYgKHNlYXJjaEZpbHRlcnMuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgbGV0IGluZGV4ID0gc2VhcmNoRmlsdGVycy5maWx0ZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAgICh4OiBhbnkpID0+IHguZmllbGQgPT09IGNvbHVtbi5maWVsZFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hGaWx0ZXJzLmZpbHRlcnMubGVuZ3RoID09PSAxICYmIHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXSA9IFtdO1xuICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnU2V0RmlsdGVycy0nICsgdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VhcmNoRmlsdGVycy5maWx0ZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5zb2Z0Q2FjaGluZyAmJiB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdTZXRGaWx0ZXJzLScgKyB0aGlzLmNvbXBvbmVudFRhYmxlUmVmPy5pZCArIHRoaXMuY3VycmVudFVybCwgSlNPTi5zdHJpbmdpZnkoc2VhcmNoRmlsdGVycykpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkU2VydmljZS5zb2Z0Q2FjaGluZ0ZpbHRlcnNbdGhpcy5jb21wb25lbnRUYWJsZVJlZj8uaWQgKyB0aGlzLmN1cnJlbnRVcmxdID0gc2VhcmNoRmlsdGVycztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBDbGljayBCdXR0b24gRXZlbnQgb24gR3JpZC5cbiAgb25DbGlja0J1dHRvbihjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICB0aGlzLm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93KTtcbiAgfVxuXG4gIC8vIEludm9rZSBvbkNsaWNrIEV2ZW50LlxuICBvbkNsaWNrRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJiAoY29sdW1uLmVkaXRMaW5rID09PSBmYWxzZSB8fCBjb2x1bW4uZWRpdExpbmsgPT09IHVuZGVmaW5lZCkgJiYgY29sdW1uLmVkaXRhYmxlICE9PSB0cnVlICYmIGNvbHVtbi5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5vbkNsaWNrRXZlbnRUcmlnZ2VyZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBpZihjb2x1bW4udHlwZT09PUVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgJiYgcm93W2NvbHVtbi5maWVsZF0pe1xuICAgIC8vICAgdGhpcy5vcGVuR3JpZERpYWxvZyhjb2x1bW4scm93KVxuICAgIC8vIH1cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFICYmIHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyUHJldmlvdXNWYWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhcm93W2NvbHVtbi5maWVsZF0gJiZcbiAgICAgIGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSAmJlxuICAgICAgKGNvbHVtbi5zaG93VGltZSB8fCBjb2x1bW4udGltZU9ubHkpICYmXG4gICAgICBjb2x1bW4ubWludXRlc0ludGVydmFsXG4gICAgKSB7XG4gICAgICB0aGlzLmRlZmF1bHREYXRlID0gbmV3IERhdGUoc2V0TWludXRlc0ludGVydmFsKG5ldyBEYXRlKCkpKTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4ub25DbGljayAmJiBjb2x1bW4uZGlzYWJsZWQgIT09IHRydWUgJiYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5hY3Rpb24/LmRpc2FibGVkICE9PSB0cnVlIHx8IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNhYmxlZCAhPT0gdHJ1ZSAmJiBjb2x1bW4udHlwZSAhPT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pKSB7XG4gICAgICBjb2x1bW4ub25DbGljayhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIHNldE11bHRpU2VsZWN0VmFsdWUoY29sdW1uLCByb3cpIHtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZF0gJiYgIUFycmF5LmlzQXJyYXkocm93W2NvbHVtbi5maWVsZF0pKSB7XG4gICAgICBpZiAodHlwZW9mIChyb3dbY29sdW1uLmZpZWxkXSkgPT09IFwic3RyaW5nXCIgJiYgIXJvd1tjb2x1bW4uZmllbGRdPy5pbmNsdWRlcygnLCcpKSB7XG4gICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gW3Jvd1tjb2x1bW4uZmllbGRdXTtcbiAgICAgIH0gZWxzZSBpZiAocm93W2NvbHVtbi5maWVsZF0/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCcsJykpIHtcbiAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSByb3dbY29sdW1uLmZpZWxkXT8uc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGRdO1xuICB9XG5cbiAgLy8gc2V0IHRoZSBzZWxlY3QgdmFsdWUgb2YgbXVsdGktc2VsZWN0XG4gIHNob3dPcHRpb24oY29sdW1uLCByb3cpIHtcbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuc2V0TXVsdGlTZWxlY3RWYWx1ZShjb2x1bW4sIHJvdyk7XG4gIH1cblxuICBvbkNsZWFyVmFsdWUoY29sdW1uLCByb3cpIHtcbiAgICBpZiAoY29sdW1uPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRFJPUERPV04gJiYgIXJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSW52b2tlIG9uQ2hhbmdlIEV2ZW50XG4gIG9uQ2hhbmdlRXZlbnQoY29sdW1uOiBhbnksIHJvdzogYW55KSB7XG4gICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gc2V0IGRyb3Bkb3duIGRpc3BsYXlGaWVsZCB2YWx1ZSBiYXNlIG9uIG9wdGlvbkxhYmVsICYgb3B0aW9uVmFsdWUuXG4gICAgdGhpcy5ncmlkVmFsaWRhdGlvbihjb2x1bW4sIHJvdywgdHJ1ZSlcbiAgICB0aGlzLmRpc3BsYXlGaWVsZERyb3Bkb3duVmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMub25DbGVhclZhbHVlKGNvbHVtbiwgcm93KTtcbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZTtcbiAgICBpZiAoY29sdW1uLm9uQ2hhbmdlKSB7XG4gICAgICBjb2x1bW4ub25DaGFuZ2Uocm93KTtcbiAgICB9XG4gICAgdGhpcy5uZ1pvbmUub25TdGFibGVcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25DbGlja0V2ZW50VHJpZ2dlcmVkID09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnNldERyb3Bkb3duZGF0YVZhbHVlID0gZmFsc2VcbiAgICB0aGlzLmlzQ2hlY2tCb3hDaGFuZ2VFdmVudENhbGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uucm93VXBkYXRlID0gZmFsc2U7XG4gICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IGZhbHNlXG4gICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZUZvb3RlciA9IHRydWU7XG4gICAgICB0aGlzLnNldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKTtcbiAgICB9XG4gIH1cblxuICBjaGVja0JveENoYW5nZUV2ZW50KGV2ZW50OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdykge1xuICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgfVxuICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIHJvd1tjb2x1bW4uZmllbGRdID0gZXZlbnQ7XG4gICAgaWYgKHRoaXMucm93c0NoYW5nZS5vYnNlcnZlcnM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuZ2VuZXJhdGVSb3dzRGF0YUNvcHkgPSBmYWxzZVxuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gdHJ1ZTtcbiAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKTtcbiAgICBpZiAoY29sdW1uLm9uQ2xpY2spIHtcbiAgICAgIGNvbHVtbi5vbkNsaWNrKHJvdyk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBkcm9wZG93biBkaXNwbGF5RmllbGQgdmFsdWUgYmFzZSBvbiBvcHRpb25MYWJlbCAmIG9wdGlvblZhbHVlLlxuICBkaXNwbGF5RmllbGREcm9wZG93blZhbHVlKGNvbHVtbjogYW55LCByb3c6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNvbHVtbj8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOICYmXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkICYmXG4gICAgICBjb2x1bW4uZGlzcGxheUZpZWxkPy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjb25zdCBrZXk6IGFueSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoXG4gICAgICAgIChyb3dJbmZvKSA9PlxuICAgICAgICAgIHJvd0luZm8/LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpc3BsYXlGaWVsZFZhbHVlID0gY29sdW1uLmRhdGEuZmluZChcbiAgICAgICAgKHJlY29yZDogYW55KSA9PlxuICAgICAgICAgIHJlY29yZFtjb2x1bW4ub3B0aW9uVmFsdWVdPy50b1N0cmluZygpID09PVxuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdPy50b1N0cmluZygpXG4gICAgICApO1xuICAgICAgaWYgKGtleSAmJiBkaXNwbGF5RmllbGRWYWx1ZSkge1xuICAgICAgICByb3dba2V5XSA9IGRpc3BsYXlGaWVsZFZhbHVlW2NvbHVtbi5vcHRpb25MYWJlbF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGF1dG9TZWFyY2ggb24gR3JpZC5cbiAgYXV0b1NlYXJjaChldmVudDogYW55LCBjb2x1bW46IGFueSwgcm93OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQgJiYgY29sdW1uICYmIHJvdykge1xuICAgICAgY29sdW1uLm9uUmV0dXJuKGV2ZW50LnF1ZXJ5LCBjb2x1bW4sIHJvdyk7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVmcmVzaCBncmlkXG4gIHJlZnJlc2hHcmlkKCkge1xuICAgIHRoaXMucmVsb2FkUGFnZSA9IGludGVydmFsKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKS5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyaWRmaWx0ZXIgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuZ3JpZGZpbHRlciA9IHsgZmlsdGVyczogW10sIHNvcnRzOiBbXSB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2V0R3JpZFJlZnJlc2hUaW1lKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZUV2ZW50cyh0aGlzLmdyaWRmaWx0ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVtb3ZlIEZpbHRlclZhbHVlc1xuICBjbGVhcmdyaWRGaWx0ZXJzVmFsdWUoKSB7XG4gICAgY29uc3QgZ2xvYmFsRmlsdGVyQ2xlYXJWYWx1ZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgJ2NsZWFyR2xvYmFsRmlsdGVyQnRuJ1xuICAgICk7XG4gICAgaWYgKGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4pIHtcbiAgICAgIGdsb2JhbEZpbHRlckNsZWFyVmFsdWVCdG4uY2xpY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VydmVyRmlsdGVycy5maWx0ZXJzID0gW107XG4gICAgICBsZXQgc2VhcmNoRmlsdGVycyA9IHRoaXMuZ3JpZFNlcnZpY2Uuc29mdENhY2hpbmdGaWx0ZXJzW3RoaXMuY29tcG9uZW50VGFibGVSZWY/LmlkICsgdGhpcy5jdXJyZW50VXJsXTtcbiAgICAgIHNlYXJjaEZpbHRlcnM/LmZpbHRlcnM/LmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBjb2wudmFsdWUgPSBudWxsO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgY29sLmZpbHRlclZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5maWx0ZXJPYmooY29sKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGVkaXRBbGxSb3dzQXRPbmNlKCkge1xuICAgIGlmICh0aGlzLmVkaXRSb3dQZXJtaXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5nZXRDbGFzc0ZvckVkaXRBbGxSb3dzKCdlZGl0Um93JykpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOICYmIChjb2x1bW4uZmlsdGVyaW5nID09PSB0cnVlIHx8IGNvbHVtbi5maWx0ZXJpbmcgPT09IHVuZGVmaW5lZCkpKSB7XG4gICAgICAgICAgdGhpcy5lZGl0QWxsUmVjb3JkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uICYmIHRoaXMuZWRpdEFsbFJlY29yZCkge1xuICAgICAgICAgIHRoaXMuc29ydERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNvcnREaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2F2ZUFsbFJvd3NBdE9uY2UoKSB7XG4gICAgdGhpcy5nZXRDbGFzc0ZvckVkaXRBbGxSb3dzKCdzYXZlUm93Jyk7XG4gIH1cblxuICAvLyByZXNldCB0aGUgZ3JpZCByb3dzVmFsdWUgdG8gb3JpZ25hbCB2YWx1ZXNcbiAgY2FuY2VsQWxsUm93c0F0T25jZSgpIHtcbiAgICB0aGlzLnJvd3NEYXRhID0gWy4uLnRoaXMucm93c0RhdGFDb3B5XTtcbiAgICB0aGlzLnJvd3NEYXRhQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5yb3dzRGF0YSkpO1xuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zPy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgdGhpcy5yb3dzRGF0YT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGRdKSB7XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXSA9IG5ldyBEYXRlKHJvd1tjb2x1bW4uZmllbGRdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICB9KTtcbiAgICBpZiAodGhpcy5jb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLmFnZ3JlZ2F0ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5hZ2dyZWdhdGVGb290ZXIgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2V0QWdncmVnYXRlVGV4dChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICB0aGlzLm9uQ2FuY2VsQWxsUm93cy5lbWl0KHRoaXMucm93c0RhdGEpO1xuICB9XG4gIGdldENsYXNzRm9yRWRpdEFsbFJvd3MoY2xhc3NOYW1lOiBzdHJpbmcgPSAnJykge1xuICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKGNsYXNzTmFtZSA9PT0gJ2VkaXRSb3cnKSB7XG4gICAgICB0aGlzLnJvd3NEYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgdGhpcy5vblJvd0VkaXRJbml0KHJvdyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRCdG5zOiBhbnkgPSB0aGlzLmVsZW1lbnRSZWY/Lm5hdGl2ZUVsZW1lbnQ/LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoY2xhc3NOYW1lKTtcbiAgICBpZiAoZ2V0QnRucyAmJiBnZXRCdG5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgaWYgKGNsYXNzTmFtZSA9PT0gJ3NhdmVSb3cnKSB7XG4gICAgICAgIHRoaXMuZWRpdEFsbFJlY29yZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSB0cnVlO1xuICAgICAgICB0aGlzLmdyaWRTZXJ2aWNlLmlzR3JpZFZhbGlkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcmVjb3JkcyQgPSBbXTtcbiAgICAgICAgY29uc3QgYWxsQnRucyA9IEFycmF5LmZyb20oZ2V0QnRucyk7XG5cbiAgICAgICAgYWxsQnRucy5mb3JFYWNoKChpdGVtOiBhbnksIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5yb3dzRGF0YVtpbmRleF07XG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgY29uc3Qgcm93U2F2ZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICAgIGl0ZW0uY2xpY2soKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVjb3JkcyQucHVzaChyb3dTYXZlKTtcbiAgICAgICAgICAgIHJvdy5faXNFZGl0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIFByb21pc2UuYWxsKHJlY29yZHMkKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmdyaWRTZXJ2aWNlLmlzR3JpZFZhbGlkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja2xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBjaGVja2xpc3RSb3dzID0gdGhpcy5zZXRSb3dzRGF0YSh0aGlzLmNoZWNrbGlzdCk7XG4gICAgICAgICAgICAgIC8vIHNlZSB0aGUgZXF1aXZhbGVudCBvblJvd0VkaXRTYXZlIGJyYW5jaCBhYm92ZSBmb3Igd2h5IGFkZERhdGFLZXlWYWx1ZSBtdXN0XG4gICAgICAgICAgICAgIC8vIHN1cnZpdmUgdG8gdGhlIGdldENoYW5nZWRSb3dzIG1hdGNoIGJlZm9yZSBiZWluZyBzdHJpcHBlZFxuICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2hlY2tsaXN0Um93cy5mb3JFYWNoKHJvdyA9PiBkZWxldGUgcm93W3RoaXMuZGF0YUtleV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0aGlzLm9yaWdpbmFsUm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSb3dzID0gZ2V0Q2hhbmdlZFJvd3MoY2hlY2tsaXN0Um93cywgdGhpcy5vcmlnaW5hbFJvd3MsIHRoaXMuY29sdW1ucywgdGhpcy5kYXRhS2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUm93VXBkYXRlLmVtaXQodGhpcy5wcmVwYXJlUm93c0ZvckVtaXQoZmlsdGVyZWRSb3dzKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMucHJlcGFyZVJvd3NGb3JFbWl0KGNoZWNrbGlzdFJvd3MpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVJvd3NEYXRhQ29weSA9IHRydWU7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNhdmVSZWNvcmRBcnJheT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZVZhbCA9ICh2OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmICh2ID09IG51bGwgfHwgdiA9PT0gJycpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gdi50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn1ULy50ZXN0KHYpKSByZXR1cm4gdi5zcGxpdCgnVCcpWzBdO1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9JC8udGVzdCh2KSkgcmV0dXJuIHY7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIC9eXFxkezEsMn1cXC9cXGR7MSwyfVxcL1xcZHs0fSQvLnRlc3QodikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW20sIGQsIHldID0gdi5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7eX0tJHttLnBhZFN0YXJ0KDIsICcwJyl9LSR7ZC5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRhYmxlRmllbGRzID0gdGhpcy5jb2x1bW5zXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5lZGl0YWJsZSAhPT0gZmFsc2UgJiYgYy5hbGxvd1NhdmUgIT09IGZhbHNlKVxuICAgICAgICAgICAgICAgICAgLm1hcChjID0+IGMuZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgIGxldCBkaXJ0eVJvd3MgPSB0aGlzLnNhdmVSZWNvcmRBcnJheTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcmlnaW5hbFJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplIGJvdGggY3VycmVudCBhbmQgb3JpZ2luYWwgcm93cyBmb3IgZmFpciBjb21wYXJpc29uIChyZW1vdmVzIGRpc3BsYXkgcHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgIC8vIGJ1dCBrZWVwIHRoZSBkYXRhS2V5IHNvIHdlIGNhbiBtYXAgYmFjayB0byBvcmlnaW5hbCByb3dzXG4gICAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkQ3VycmVudCA9IHRoaXMuc2F2ZVJlY29yZEFycmF5Lm1hcChyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWQgPSB0aGlzLmdyaWRTZXJ2aWNlLmdldEFsbG93U2F2ZVJvd2xpc3QoW3JdLCB0aGlzLmNvbHVtbnMpWzBdO1xuICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgZGF0YUtleSBpcyBwcmVzZXJ2ZWRcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFub3JtYWxpemVkICYmIHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkID0geyBbdGhpcy5kYXRhS2V5XTogclt0aGlzLmRhdGFLZXldIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZCkge1xuICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRbdGhpcy5kYXRhS2V5XSA9IHJbdGhpcy5kYXRhS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ub3JtYWxpemVOdW1lcmljVmFsdWVzKG5vcm1hbGl6ZWQpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkT3JpZ2luYWwgPSB0aGlzLm9yaWdpbmFsUm93cy5tYXAociA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBub3JtYWxpemVkID0gdGhpcy5ncmlkU2VydmljZS5nZXRBbGxvd1NhdmVSb3dsaXN0KFtyXSwgdGhpcy5jb2x1bW5zKVswXTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIGRhdGFLZXkgaXMgcHJlc2VydmVkXG4gICAgICAgICAgICAgICAgICAgIGlmICghbm9ybWFsaXplZCAmJiByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9IHsgW3RoaXMuZGF0YUtleV06IHJbdGhpcy5kYXRhS2V5XSB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkW3RoaXMuZGF0YUtleV0gPSByW3RoaXMuZGF0YUtleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9ybWFsaXplTnVtZXJpY1ZhbHVlcyhub3JtYWxpemVkKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuXG5cbiAgICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgbm9ybWFsaXplZCByb3dzLCB3aGljaCByZW1vdmVzIGRpc3BsYXktb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICBkaXJ0eVJvd3MgPSBnZXRDaGFuZ2VkUm93cyhub3JtYWxpemVkQ3VycmVudCwgbm9ybWFsaXplZE9yaWdpbmFsLCB0aGlzLmNvbHVtbnMsIHRoaXMuZGF0YUtleSk7XG5cbiAgICAgICAgICAgICAgICAgIC8vIE1hcCBiYWNrIHRvIG9yaWdpbmFsIHNhdmVSZWNvcmRBcnJheSByb3dzIHdpdGggYWxsIHByb3BlcnRpZXMgaW50YWN0XG4gICAgICAgICAgICAgICAgICBkaXJ0eVJvd3MgPSBkaXJ0eVJvd3MubWFwKG5vcm1hbGl6ZWRSb3cgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlUmVjb3JkQXJyYXkuZmluZChyID0+IHJbdGhpcy5kYXRhS2V5XSA9PT0gbm9ybWFsaXplZFJvd1t0aGlzLmRhdGFLZXldKVxuICAgICAgICAgICAgICAgICAgKS5maWx0ZXIociA9PiByKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRpcnR5Um93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYWRkRGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpcnR5Um93cy5mb3JFYWNoKHJvdyA9PiBkZWxldGUgcm93W3RoaXMuZGF0YUtleV0pOyAvLyByZW1vdmUgdGVtcF9pZCBiZWZvcmUgZW1pdHRpbmcg4oCUIGl0J3Mgb25seSB1c2VkIGZvciBkaXJ0eS1yb3cgY29tcGFyaXNvblxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5vblJvd1VwZGF0ZS5lbWl0KHRoaXMucHJlcGFyZVJvd3NGb3JFbWl0KGRpcnR5Um93cykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNhdmVSZWNvcmRBcnJheSA9IFtdO1xuICAgICAgICAgIHRoaXMuZWRpdEFsbFJvd3NBdE9uY2UoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNhdmVBbGxSZWNvcmQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNsYXNzTmFtZSA9PSAnY2FuY2VsUm93Jykge1xuICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZ2V0QnRucykge1xuICAgICAgICAgICAgaXRlbS5jbGljaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuICAvL0ZvY3VzZWQgY2FsZW5kYXIgaW5wdXQgb24gc2VsZWN0IGRhdGVcbiAgc2VsZWN0RGF0ZShjb2x1bW46IGFueSkge1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZCk/LmZvY3VzKCk7XG4gIH1cblxuICAvL2FwcGx5IGZpbHRlciBvbiBncmlkIHdoZW4gc2VhcmNoIGJ0biBjbGlja2VkXG4gIGFwcGx5R3JpZEZpbHRlckJ0bigpIHtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnVzZXJTZWFyY2hlZCA9IHRydWU7XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmdyaWRTZXJ2aWNlLnJvd1VwZGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMucm93VXBkYXRlQ2hhbmdlID0gZmFsc2U7XG5cbiAgICBsZXQgZmlsdGVySW5EaWFsb2c6IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3AtZGlhbG9nJyk7XG4gICAgbGV0IGdsb2JhbEZpbHRlckFwcGx5QnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zZWFyY2hidG5JZCk7XG4gICAgaWYgKGZpbHRlckluRGlhbG9nICYmIGZpbHRlckluRGlhbG9nLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGdsb2JhbFNlYXJjaEJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc2VhcmNoYnRuSWQpO1xuICAgICAgaWYgKGdsb2JhbFNlYXJjaEJ0bikge1xuICAgICAgICBnbG9iYWxTZWFyY2hCdG4uY2xpY2soKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGdsb2JhbEZpbHRlckFwcGx5QnRuKSB7XG4gICAgICBnbG9iYWxGaWx0ZXJBcHBseUJ0bi5jbGljaygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdyaWRGaWx0ZXJPYmogJiYgT2JqZWN0LmtleXModGhpcy5ncmlkRmlsdGVyT2JqKT8ubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hcHBseUVudGVyRXZlbnQoXG4gICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5maWx0ZXIsXG4gICAgICAgIHRoaXMuZ3JpZEZpbHRlck9iai5ldmVudCxcbiAgICAgICAgdGhpcy5ncmlkRmlsdGVyT2JqLmNvbHVtblxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoZWNrbGlzdCA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gW107XG4gIH1cblxuICBoYW5kbGVIZWFkZXJDaGVja2JveENoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQuY2hlY2tlZDtcbiAgICBjb25zdCBkYXRhVG9TZWxlY3QgPSB0aGlzLnRhYmxlPy52YWx1ZSB8fCB0aGlzLnJvd3NEYXRhIHx8IFtdO1xuXG4gICAgaWYgKGlzQ2hlY2tlZCkge1xuICAgICAgdGhpcy5jaGVja2xpc3QgPSBbLi4uZGF0YVRvU2VsZWN0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGVja2xpc3QgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbLi4udGhpcy5jaGVja2xpc3RdO1xuICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gdHJ1ZTtcbiAgICB0aGlzLmFwcFJlZi50aWNrKCk7XG4gICAgdGhpcy5vbk11bHRpU2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFJvd3MpO1xuICB9XG5cbiAgb25UYWJsZVNlbGVjdGlvbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSBldmVudCB8fCBbXTtcbiAgICB0aGlzLmNoZWNrbGlzdCA9IFsuLi50aGlzLnNlbGVjdGVkUm93c107XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSB0cnVlO1xuICAgIHRoaXMub25NdWx0aVNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIC8vIGludm9rZSBtdWx0aVNlbGVjdGlvbiBjbGljayBldmVudFxuICBtdWx0aUNoZWNrQm94T25jbGljayhyb3dJbmZvOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC5jaGVja2VkO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uVHlwZSA9PT0gRUdyaWRTZWxlY3Rpb25UeXBlLk1VTFRJUExFKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3dJbmZvKSAmJiByb3dJbmZvPy5sZW5ndGggPiAwICYmIGlzQ2hlY2tlZCkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdCA9IFsuLi5yb3dJbmZvXTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocm93SW5mbykgJiYgIWlzQ2hlY2tlZCkge1xuICAgICAgICB0aGlzLmNoZWNrbGlzdCA9IFtdO1xuICAgICAgfVxuICAgICAgY29uc3QgYWxyZWFkeUV4aXN0ID0gdGhpcy5jaGVja2xpc3Quc29tZSgocm93KSA9PiByb3dbdGhpcy5kYXRhS2V5XSA9PSByb3dJbmZvW3RoaXMuZGF0YUtleV0pO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJvd0luZm8pICYmIGlzQ2hlY2tlZCAmJiAhYWxyZWFkeUV4aXN0KSB7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0LnB1c2gocm93SW5mbyk7XG4gICAgICB9IGVsc2UgaWYgKGFscmVhZHlFeGlzdCAmJiAhaXNDaGVja2VkKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2xpc3QuZmluZEluZGV4KChyb3cpID0+IHJvd1t0aGlzLmRhdGFLZXldID09IHJvd0luZm9bdGhpcy5kYXRhS2V5XSk7XG4gICAgICAgIHRoaXMuY2hlY2tsaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmNoZWNrbGlzdCA9IFtyb3dJbmZvXVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUm93cyA9IFsuLi50aGlzLmNoZWNrbGlzdF07XG4gICAgdGhpcy5pc0NoZWNrQm94Q2hhbmdlRXZlbnRDYWxsZWQgPSB0cnVlO1xuICAgIHRoaXMuYXBwUmVmLnRpY2soKTtcbiAgICB0aGlzLm9uTXVsdGlTZWxlY3Rpb25DaGFuZ2UuZW1pdCgodGhpcy5zZWxlY3RlZFJvd3MpKTtcbiAgfVxuXG4gIHNldFJvd3NEYXRhKHJvd3NEYXRhKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocm93c0RhdGEpKSB7XG4gICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICByb3cgPSB0aGlzLnJlbW92ZVJvd09iaihyb3cpO1xuICAgICAgICByb3cgPSB0aGlzLmdyaWRTZXJ2aWNlLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICByb3dzRGF0YSA9IHRoaXMucmVtb3ZlUm93T2JqKHJvd3NEYXRhKTtcbiAgICAgIHJvd3NEYXRhID0gdGhpcy5ncmlkU2VydmljZS5zZXRSb3dWYWx1ZShyb3dzRGF0YSk7XG4gICAgfVxuICAgIHJldHVybiByb3dzRGF0YTtcbiAgfVxuXG4gIHJlbW92ZVJvd09iaihyb3c6IGFueSkge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmIChrZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdfb2JqJykpIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICBub3JtYWxpemVOdW1lcmljVmFsdWVzKHJvdzogYW55KTogYW55IHtcbiAgICBpZiAoIXJvdykgcmV0dXJuIHJvdztcbiAgICBjb25zdCBub3JtYWxpemVkID0geyAuLi5yb3cgfTtcbiAgICBPYmplY3Qua2V5cyhub3JtYWxpemVkKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gbm9ybWFsaXplZFtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnICYmICFpc05hTihOdW1iZXIodmFsdWUpKSkge1xuICAgICAgICBub3JtYWxpemVkW2tleV0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUm93c0ZvckVtaXQocm93czogYW55IHwgYW55W10pOiBhbnkgfCBhbnlbXSB7XG4gICAgaWYgKCFyb3dzKSByZXR1cm4gcm93cztcbiAgICBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShyb3dzKTtcbiAgICBjb25zdCByb3dzVG9GaWx0ZXIgPSBpc0FycmF5ID8gcm93cyA6IFtyb3dzXTtcblxuICAgIC8vIEZpbHRlciB0byBvbmx5IHJvd3MgdGhhdCB3ZXJlIGFjdHVhbGx5IGVkaXRlZCAoY2hlY2sgX2lzRWRpdGVkIGZsYWcgb3IgbG9va3VwIG9iamVjdCBjaGFuZ2VzKVxuICAgIGNvbnN0IGVkaXRlZFJvd3MgPSByb3dzVG9GaWx0ZXIuZmlsdGVyKChyb3c6IGFueSkgPT4ge1xuICAgICAgaWYgKCFyb3cpIHJldHVybiBmYWxzZTsgLy8gU2tpcCBudWxsL3VuZGVmaW5lZCByb3dzXG4gICAgICBpZiAocm93Py5faXNFZGl0ZWQpIHJldHVybiB0cnVlO1xuICAgICAgLy8gQ2hlY2sgaWYgcm93IGhhcyBsb29rdXAgZmllbGRzIHdpdGggb2JqZWN0IHZhbHVlcyAoaW5kaWNhdGluZyBhIGNoYW5nZSlcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJvdykuc29tZSgodmFsOiBhbnkpID0+XG4gICAgICAgIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIHZhbCAhPT0gbnVsbCAmJiAndmFsdWUnIGluIHZhbCAmJiAndGV4dCcgaW4gdmFsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLy8gSWYgbm8gcm93cyBtYXJrZWQgYXMgZWRpdGVkLCB1c2UgYWxsIHJvd3MgKGluIGNhc2UgZ2V0Q2hhbmdlZFJvd3MgYWxyZWFkeSBmaWx0ZXJlZCB0aGVtKVxuICAgIGNvbnN0IHJvd3NUb1Byb2Nlc3MgPSBlZGl0ZWRSb3dzLmxlbmd0aCA+IDAgPyBlZGl0ZWRSb3dzIDogcm93c1RvRmlsdGVyO1xuICAgIGxldCBmaWx0ZXJlZCA9IHRoaXMuZ3JpZFNlcnZpY2UuZ2V0QWxsb3dTYXZlUm93bGlzdChyb3dzVG9Qcm9jZXNzLCB0aGlzLmNvbHVtbnMpO1xuXG4gICAgLy8gRW5zdXJlIGZpbHRlcmVkIGlzIGFuIGFycmF5XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGZpbHRlcmVkKSkge1xuICAgICAgZmlsdGVyZWQgPSBmaWx0ZXJlZCA/IFtmaWx0ZXJlZF0gOiBbXTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IHNjYWxhciB2YWx1ZXMgZnJvbSBsb29rdXAgb2JqZWN0cyBhbmQgcmVtb3ZlIGludGVybmFsIGZsYWdzXG4gICAgZmlsdGVyZWQgPSBmaWx0ZXJlZFxuICAgICAgLmZpbHRlcigocm93OiBhbnkpID0+IHJvdykgLy8gUmVtb3ZlIG51bGwvdW5kZWZpbmVkIGJlZm9yZSBwcm9jZXNzaW5nXG4gICAgICAubWFwKChyb3c6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0geyAuLi5yb3cgfTtcbiAgICAgICAgT2JqZWN0LmtleXMobm9ybWFsaXplZCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIC8vIEV4dHJhY3Qgc2NhbGFyIHZhbHVlIGZyb20gbG9va3VwIG9iamVjdHNcbiAgICAgICAgICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRba2V5XSA9PT0gJ29iamVjdCcgJiYgbm9ybWFsaXplZFtrZXldPy52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBub3JtYWxpemVkW2tleV0gPSBub3JtYWxpemVkW2tleV0udmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlbW92ZSBpbnRlcm5hbCBmbGFnc1xuICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnXycpIHx8IGtleS5lbmRzV2l0aCgnX29iaicpIHx8IGtleS5lbmRzV2l0aCgnLWRhdGEnKSkge1xuICAgICAgICAgICAgZGVsZXRlIG5vcm1hbGl6ZWRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzQXJyYXkgPyBmaWx0ZXJlZCA6IChmaWx0ZXJlZC5sZW5ndGggPiAwID8gZmlsdGVyZWRbMF0gOiBudWxsKTtcbiAgfVxuXG4gIGFwcGx5RHJvcGRvd25GaWx0ZXIoZmlsdGVyOiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBmaWx0ZXIoZXZlbnQudGFyZ2V0KTtcbiAgfVxuXG4gIHNlYXJjaERyb3Bkb3duRmlsdGVyKGZpbHRlcjogYW55LCBldmVudDogYW55LCBjb2x1bW46IGFueSkge1xuICAgIHRoaXMuc2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsIGV2ZW50KTtcbiAgICB0aGlzLmRyb3BEb3duRmlsdGVyID0geyBmaWx0ZXI6IGZpbHRlciwgZXZlbnQ6IGV2ZW50LCBjb2x1bW46IGNvbHVtbiB9O1xuICAgIC8vIGlmIChjb2x1bW4uYWxsb3dTZWFyY2ggIT09IHRydWUpIHtcbiAgICAvLyAgIHRoaXMuYXBwbHlEcm9wZG93bkZpbHRlcihmaWx0ZXIsIGV2ZW50KTtcbiAgICAvLyB9XG4gIH1cblxuICBsb29rdXBDbGVhclZhbHVlKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdz86IGFueSkge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbHVtbi5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gPSAnJyA6ICcnXG4gICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnRleHQgPSAnJyA6ICcnXG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9ICcnO1xuICAgICAgaWYgKCFyb3cuX2lzRWRpdGVkKSB7XG4gICAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSAnJztcbiAgICAgIGRlbGV0ZSBjb2x1bW5bJ2ZpbHRlclZhbHVlX29iaiddO1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KChjb2wpID0+IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuY29sdW1uc1tpbmRleF0uZmlsdGVyVmFsdWUgPSAnJztcbiAgICAgICAgZGVsZXRlIHRoaXMuY29sdW1uc1tpbmRleF1bJ2ZpbHRlclZhbHVlX29iaiddO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRGaWx0ZXJGb2N1c091dChjb2x1bW4pO1xuICAgIH1cbiAgICB0aGlzLmJyb3dzZXJDbG9zZUV2ZW50KHRydWUpO1xuICAgIGlmIChjb2x1bW4ub25DaGFuZ2UpIHtcbiAgICAgIGNvbHVtbi5vbkNoYW5nZShyb3cpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2FsZW5kYXJNb2RlbENoYW5nZSh2YWx1ZTogYW55LCByb3c6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbik6IHZvaWQge1xuICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgfVxuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlGaWVsZCA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgY29sdW1uLmZvcm1hdCA9PSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnTU0vZGQveXl5eScpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLy8gaW52b2tlIHdoZW4gY2xpY2sgaGVhZGVyIGNoZWNrYm94IGZpbHRlclxuICBjbGlja0NoZWNrQm94RmlsdGVyKGNvbHVtbjogSUdyaWRDb2x1bW4sIGV2ZW50KSB7XG4gICAgY29sdW1uLmZpbHRlclZhbHVlID0gZXZlbnQ7XG4gICAgaWYgKGNvbHVtbi5hbGxvd1NlbGVjdEFsbCkge1xuICAgICAgaWYgKFxuICAgICAgICBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU5cbiAgICAgICAgJiZcbiAgICAgICAgY29sdW1uPy5maWx0ZXI/LnR5cGUgPT09ICdjaGVja2JveCcgJiYgY29sdW1uLmZpbHRlcmluZyAhPSBmYWxzZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgaWYgKHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5kaXNhYmxlZCAhPT0gdHJ1ZSAmJiAhY29sdW1uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByb3cuX2lzRWRpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldID0gY29sdW1uLmZpbHRlclZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yb3dzQ2hhbmdlLm9ic2VydmVycz8ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuaXNDaGVja0JveENoYW5nZUV2ZW50Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yb3dzQ2hhbmdlLmVtaXQodGhpcy5yb3dzRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub25DaGVja0JveEZpbHRlckNsaWNrLmVtaXQoY29sdW1uKTtcbiAgfVxuICAvL3NldCBoZWFkZXIgY2hlY2tib3ggdmFsdWUgZm9yIGdldHRpbmcgYWxsIGNvbHVtbnMgb24gc3RheSBhZG1pblxuICBzZXRIZWFkZXJDaGVja0JveFZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmlzSW5jbHVkZWRBbGxDb2x1bW5zLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgLy8gc2V0IGNhbGVuZGFyIDIgT3IgNCBkaWdpdCB5ZWFyIGZvcm1hdFxuICBjYWxlbmRhcklucHV0VmFsdWUoY29sdW1uOiBhbnksIHJvdzogYW55LCBpc0ZpbHRlcklucHV0ID0gZmFsc2UpIHtcbiAgICBpZiAoIXJvdy5faXNFZGl0ZWQpIHtcbiAgICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWNvbHVtbi50aW1lT25seSkge1xuICAgICAgY29uc3QgY2xhc3NOYW1lID0gaXNGaWx0ZXJJbnB1dCA/IGNvbHVtbi5maWVsZCArICctZmlsdGVyLWlucHV0JyA6IGNvbHVtbi5maWVsZCArIHJvd1t0aGlzLmRhdGFLZXldO1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpWzBdPy5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsICh2YWw6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIXZhbD8udGFyZ2V0Py52YWx1ZT8uaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICAgIGlmICh2YWw/LnRhcmdldD8udmFsdWU/Lmxlbmd0aCA9PSA4IHx8IGNvbHVtbj8uZm9ybWF0Py50eXBlID09PSBFR3JpZEZvcm1hdFR5cGUuU0hPUlREQVRFKSB7XG4gICAgICAgICAgICB2YWwudGFyZ2V0LnZhbHVlID0gdmFsPy50YXJnZXQ/LnZhbHVlPy5yZXBsYWNlKC8oXFxkezJ9KShcXGR7Mn0pKFxcZHs0fSkvLCAnJDEvJDIvJDMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAodmFsPy50YXJnZXQ/LnZhbHVlPy5sZW5ndGggPT0gNikge1xuICAgICAgICAgICAgdmFsLnRhcmdldC52YWx1ZSA9IHZhbD8udGFyZ2V0Py52YWx1ZT8ucmVwbGFjZSgvKFxcZHsyfSkoPz1cXGQpL2csICckMS8nKTtcbiAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsLnRhcmdldC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeWVhciA9IHZhbD8udGFyZ2V0Py52YWx1ZT8udG9TdHJpbmcoKT8uc3BsaXQoJy8nKVsyXTtcbiAgICAgICAgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPT0gNCkge1xuICAgICAgICAgIGlmIChpc0ZpbHRlcklucHV0KSB7XG4gICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSBuZXcgRGF0ZSh2YWw/LnRhcmdldD8udmFsdWUpPy50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jYWxlbmRhckZvcm1hdCA9ICdtbS9kZC95eSc7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSBuZXcgRGF0ZSh2YWw/LnRhcmdldD8udmFsdWUpPy50b0xvY2FsZURhdGVTdHJpbmcoXCJlbi1VU1wiKTtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyICYmIHllYXIubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICBpZiAoaXNGaWx0ZXJJbnB1dCkge1xuICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gbmV3IERhdGUodmFsPy50YXJnZXQ/LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jYWxlbmRhckZvcm1hdCA9ICdtbS9kZC95JztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cbiAgY2hhbmdlUGFzc3dvcmRUeXBlKGNvbHVtbiwgcm93KSB7XG4gICAgdmFyIHRleHRUeXBlID0gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPyAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10udGV4dFR5cGUgPT0gJ3Bhc3N3b3JkJyA/ICd0ZXh0JyA6ICdwYXNzd29yZCcpIDogY29sdW1uLnRleHRUeXBlID09ICdwYXNzd29yZCcgPyAndGV4dCcgOiAncGFzc3dvcmQnO1xuICAgIHRoaXMuZ3JpZFNlcnZpY2Uuc2V0R3JpZFJvd1Byb3BWYWx1ZShyb3csIFt7IHByb3BOYW1lOiBFR3JpZFJvd1Byb3BOYW1lLlRFWFRUWVBFLCBwcm9wVmFsdWU6IHRleHRUeXBlLCBmaWVsZDogY29sdW1uLmZpZWxkIH1dKTtcblxuICB9XG5cbiAgc2hvd0NvbmZpcm1hdGlvbihldmVudDogSUdyaWRQYWdpbmF0aW9uRXZlbnQpIHtcbiAgICBjb25zdCB0YWJsZVdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnAtZGF0YXRhYmxlLXdyYXBwZXJcIik7XG4gICAgY29uc3QgdGFibGVXcmFwcGVyU2Nyb2xsVG9wID0gdGFibGVXcmFwcGVyPy5zY3JvbGxUb3A7XG4gICAgY29uc3QgdGFibGVXcmFwcGVyU2Nyb2xsTGVmdCA9IHRhYmxlV3JhcHBlcj8uc2Nyb2xsTGVmdDtcbiAgICBpZiAodGFibGVXcmFwcGVyU2Nyb2xsVG9wKSB7XG4gICAgICB0aGlzLnNjcm9sbFBvc2l0aW9uWSA9IHRhYmxlV3JhcHBlclNjcm9sbFRvcDtcbiAgICAgIHRoaXMuc2Nyb2xsUG9zaXRpb25YID0gdGFibGVXcmFwcGVyU2Nyb2xsTGVmdDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuUGFnZUNoYW5nZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cztcbiAgICB9XG4gICAgaWYgKGNvbmZpcm0oXCJZb3Ugd2lsbCBsb3NlIGNoYW5nZXMgbm90IHNhdmVkIG9uIHBhZ2UuIFdvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlP1wiKSA9PSB0cnVlKSB7XG4gICAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IHRydWU7XG4gICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3NEYXRhKVxuICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJTaWRlUGFnaW5hdGlvbihldmVudCk7XG4gICAgICB0aGlzLmdyaWRTZXJ2aWNlLmNvbHVtbkZvY3VzZWRPdXQgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5QYWdlQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmZpcnN0ID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmZpcnN0ID0gTWF0aC5mbG9vcih0aGlzLmN1cnJlbnRQYWdlIC8gZXZlbnQucm93cyk7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnJvd3MgPSBldmVudC5yb3dzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGFibGVXcmFwcGVyU2Nyb2xsVG9wID09PSAwKSB7XG4gICAgICAgICAgICB0YWJsZVdyYXBwZXIuc2Nyb2xsVG8odGhpcy5zY3JvbGxQb3NpdGlvblgsIDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRhYmxlV3JhcHBlci5zY3JvbGxUbyh0aGlzLnNjcm9sbFBvc2l0aW9uWCwgdGhpcy5zY3JvbGxQb3NpdGlvblkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB0aGlzLmF1dG9Mb2FkRGF0YSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGxvb2t1cElucHV0TmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnkpOiBhbnkge1xuICAgIGlmIChyb3c/LmlzTmV3IHx8IHJvdz8uaXNuZXcpIHtcbiAgICAgIHJldHVybiB0eXBlb2Ygcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10gPT09ICdvYmplY3QnICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0Py50ZXh0ICE9IHVuZGVmaW5lZCA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy50ZXh0Py50ZXh0IDogcm93W2NvbHVtbi5maWVsZF07XG4gICAgfVxuXG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQpIHtcbiAgICAgIHJldHVybiByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8udGV4dCA9PT0gJ29iamVjdCcgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQ/LnRleHQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnRleHQ/LnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbi5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXTtcbiAgfVxuXG4gIGdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KTogYW55IHtcbiAgICByZXR1cm4gcm93Py5bY29sdW1uLmZpZWxkICsgJ19vYmonXT8ubG9va3VwQ29udHJvbD8uZGF0YSB8fCBjb2x1bW4/Lmxvb2t1cENvbnRyb2w/LmRhdGEgfHwge307XG4gIH1cblxuICBpc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uOiBJR3JpZENvbHVtbiwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBsb29rdXBEYXRhID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk7XG4gICAgcmV0dXJuIGxvb2t1cERhdGE/LmFsbG93SW5wdXQgPT09IHRydWU7XG4gIH1cblxuICBnZXRMb29rdXBDb25maWdEYXRhKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LmRhdGEgfHwge307XG4gIH1cblxuICBub3JtYWxpemVMb29rdXBJbnB1dFZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiAodmFsdWUgPz8gJycpLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJyAnKS50cmltKCk7XG4gIH1cblxuICBzZXRMb29rdXBJbnB1dFZhbHVlKHJvdzogYW55LCBjb2x1bW46IElHcmlkQ29sdW1uLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdGhpcy5ub3JtYWxpemVMb29rdXBJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICBjb25zdCBkaXNwbGF5RmllbGRLZXkgPSBjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHJvd09iaktleSA9IGNvbHVtbi5maWVsZCArICdfb2JqJztcbiAgICBjb25zdCBjdXJyZW50T2JqID0gcm93W3Jvd09iaktleV0gfHwge307XG5cbiAgICByb3dbY29sdW1uLmZpZWxkXSA9IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgICBpZiAoZGlzcGxheUZpZWxkS2V5KSB7XG4gICAgICByb3dbZGlzcGxheUZpZWxkS2V5XSA9IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgICB9XG4gICAgcm93W3Jvd09iaktleV0gPSB7XG4gICAgICAuLi5jdXJyZW50T2JqLFxuICAgICAgdGV4dDogbm9ybWFsaXplZFZhbHVlID8geyB0ZXh0OiBub3JtYWxpemVkVmFsdWUsIHZhbHVlOiBub3JtYWxpemVkVmFsdWUgfSA6ICcnLFxuICAgIH07XG4gIH1cblxuICBidWlsZExvb2t1cFJlc29sdXRpb25GaWx0ZXJzKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55LCBmaWVsZE5hbWU6IHN0cmluZywgZmllbGRWYWx1ZTogc3RyaW5nKTogYW55W10ge1xuICAgIGNvbnN0IGxvb2t1cENvbmZpZ0RhdGEgPSB0aGlzLmdldExvb2t1cENvbmZpZ0RhdGEoY29sdW1uLCByb3cpO1xuICAgIGNvbnN0IGZpbHRlcnMgPSBBcnJheS5pc0FycmF5KGxvb2t1cENvbmZpZ0RhdGE/LmZpbHRlcnMpID8gWy4uLmxvb2t1cENvbmZpZ0RhdGEuZmlsdGVyc10gOiBbXTtcbiAgICBjb25zdCBsYWJlbFByb3AgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8ubGFiZWxQcm9wPy50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHZhbHVlUHJvcCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy52YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCk7XG5cbiAgICBPYmplY3QuZW50cmllcyhsb29rdXBDb25maWdEYXRhIHx8IHt9KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAga2V5Py50b0xvd2VyQ2FzZSgpICE9PSAndW5pcXVla2V5JyAmJlxuICAgICAgICBrZXk/LnRvTG93ZXJDYXNlKCkgIT09ICdmaWx0ZXJzJyAmJlxuICAgICAgICBrZXk/LnRvTG93ZXJDYXNlKCkgIT09IGxhYmVsUHJvcCAmJlxuICAgICAgICBrZXk/LnRvTG93ZXJDYXNlKCkgIT09IHZhbHVlUHJvcCAmJlxuICAgICAgICB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICAgIHZhbHVlICE9PSAnJyAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnXG4gICAgICApIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICBmaWVsZDoga2V5LFxuICAgICAgICAgIG1hdGNoTW9kZTogRU1hdGNoTW9kZS5FUVVBTFMsXG4gICAgICAgICAgb3BlcmF0b3I6IEVPcGVyYXRvci5BTkQsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZmlsdGVycy5wdXNoKHtcbiAgICAgIGZpZWxkOiBmaWVsZE5hbWUsXG4gICAgICBtYXRjaE1vZGU6IEVNYXRjaE1vZGUuRVFVQUxTLFxuICAgICAgb3BlcmF0b3I6IEVPcGVyYXRvci5BTkQsXG4gICAgICB2YWx1ZTogZmllbGRWYWx1ZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmaWx0ZXJzO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hMb29rdXBSZXNvbHV0aW9uUmVjb3JkKGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55LCBmaWVsZE5hbWU6IHN0cmluZywgZmllbGRWYWx1ZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBsb29rdXBDb25maWdEYXRhID0gdGhpcy5nZXRMb29rdXBDb25maWdEYXRhKGNvbHVtbiwgcm93KTtcbiAgICBjb25zdCB1bmlxdWVLZXkgPSBsb29rdXBDb25maWdEYXRhPy51bmlxdWVLZXk7XG5cbiAgICBpZiAoIXVuaXF1ZUtleSB8fCAhZmllbGROYW1lIHx8ICFmaWVsZFZhbHVlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucmVxdWVzdFNlcnZpY2UuZ2V0PGFueVtdLCBhbnk+KCcvRGF0YS9GZXRjaCcsIHtcbiAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICBmaWx0ZXJzOiB0aGlzLmJ1aWxkTG9va3VwUmVzb2x1dGlvbkZpbHRlcnMoY29sdW1uLCByb3csIGZpZWxkTmFtZSwgZmllbGRWYWx1ZSksXG4gICAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgICBwYWdlOiAxLFxuICAgICAgfSkuc3Vic2NyaWJlKFxuICAgICAgICAocmVzKSA9PiByZXNvbHZlKHJlcyksXG4gICAgICAgICgpID0+IHJlc29sdmUobnVsbClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3BvbnNlPy5yZWNvcmRzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdyaWRTZXJ2aWNlLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3Jkcyk/LlswXSB8fCBudWxsO1xuICB9XG5cbiAgYXBwbHlSZXNvbHZlZExvb2t1cFJlY29yZChyb3c6IGFueSwgY29sdW1uOiBJR3JpZENvbHVtbiwgcmVzb2x2ZWRSZWNvcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghcmVzb2x2ZWRSZWNvcmQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBsYWJlbFByb3AgPSB0aGlzLmdldExvb2t1cENvbnRyb2xEYXRhKGNvbHVtbiwgcm93KT8ubGFiZWxQcm9wPy50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHZhbHVlUHJvcCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy52YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcmVzb2x2ZWRWYWx1ZSA9IHJlc29sdmVkUmVjb3JkW3ZhbHVlUHJvcCB8fCBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCldO1xuICAgIGNvbnN0IHJlc29sdmVkVGV4dCA9IHJlc29sdmVkUmVjb3JkW2xhYmVsUHJvcCB8fCBjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpIHx8IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKV07XG5cbiAgICBpZiAocmVzb2x2ZWRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHJlc29sdmVkVGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcm93W2NvbHVtbi5maWVsZF0gPSByZXNvbHZlZFZhbHVlO1xuICAgIGlmIChjb2x1bW4uZGlzcGxheUZpZWxkKSB7XG4gICAgICByb3dbY29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKV0gPSByZXNvbHZlZFRleHQ7XG4gICAgfVxuICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddID0ge1xuICAgICAgLi4uKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddIHx8IHt9KSxcbiAgICAgIHRleHQ6IHsgdGV4dDogcmVzb2x2ZWRUZXh0LCB2YWx1ZTogcmVzb2x2ZWRWYWx1ZSB9LFxuICAgIH07XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyByZXNvbHZlTG9va3VwSW5wdXRWYWx1ZShjb2x1bW46IElHcmlkQ29sdW1uLCByb3c6IGFueSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5pc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZWRWYWx1ZSA9IHRoaXMubm9ybWFsaXplTG9va3VwSW5wdXRWYWx1ZSh0aGlzLmxvb2t1cElucHV0TmdNb2RlbChyb3csIGNvbHVtbikpO1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LnNlYXJjaEZpZWxkO1xuICAgIGNvbnN0IGxhYmVsUHJvcCA9IHRoaXMuZ2V0TG9va3VwQ29udHJvbERhdGEoY29sdW1uLCByb3cpPy5sYWJlbFByb3A7XG4gICAgY29uc3QgdmFsdWVQcm9wID0gdGhpcy5nZXRMb29rdXBDb250cm9sRGF0YShjb2x1bW4sIHJvdyk/LnZhbHVlUHJvcDtcblxuICAgIGlmICghdHlwZWRWYWx1ZSB8fCAoIWxhYmVsUHJvcCAmJiAhdmFsdWVQcm9wKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaE1hdGNoID0gc2VhcmNoRmllbGRcbiAgICAgID8gYXdhaXQgdGhpcy5mZXRjaExvb2t1cFJlc29sdXRpb25SZWNvcmQoY29sdW1uLCByb3csIHNlYXJjaEZpZWxkLCB0eXBlZFZhbHVlKVxuICAgICAgOiBudWxsO1xuXG4gICAgaWYgKHRoaXMuYXBwbHlSZXNvbHZlZExvb2t1cFJlY29yZChyb3csIGNvbHVtbiwgc2VhcmNoTWF0Y2gpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBsYWJlbE1hdGNoID0gbGFiZWxQcm9wXG4gICAgICA/IGF3YWl0IHRoaXMuZmV0Y2hMb29rdXBSZXNvbHV0aW9uUmVjb3JkKGNvbHVtbiwgcm93LCBsYWJlbFByb3AsIHR5cGVkVmFsdWUpXG4gICAgICA6IG51bGw7XG5cbiAgICBpZiAodGhpcy5hcHBseVJlc29sdmVkTG9va3VwUmVjb3JkKHJvdywgY29sdW1uLCBsYWJlbE1hdGNoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVNYXRjaCA9XG4gICAgICB2YWx1ZVByb3AgJiYgdmFsdWVQcm9wPy50b0xvd2VyQ2FzZSgpICE9PSBsYWJlbFByb3A/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgPyBhd2FpdCB0aGlzLmZldGNoTG9va3VwUmVzb2x1dGlvblJlY29yZChjb2x1bW4sIHJvdywgdmFsdWVQcm9wLCB0eXBlZFZhbHVlKVxuICAgICAgICA6IG51bGw7XG5cbiAgICByZXR1cm4gdGhpcy5hcHBseVJlc29sdmVkTG9va3VwUmVjb3JkKHJvdywgY29sdW1uLCB2YWx1ZU1hdGNoKTtcbiAgfVxuXG4gIC8vIENhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHNldHRpbmcgdGhlIG5nTW9kZWwgdmFsdWVcbiAgY2hhbmdlTG9va3VwSW5wdXROZ01vZGVsKHJvdzogYW55LCBjb2x1bW46IGFueSwgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIC8vIEhhbmRsZSBoZWFkZXIgZmlsdGVyIGxvb2t1cCBjbGVhciAod2hlbiByb3cgaXMgJ2xvb2t1cEZpbHRlcicgc3RyaW5nKVxuICAgIGlmIChyb3cgPT09ICdsb29rdXBGaWx0ZXInKSB7XG4gICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIENsZWFyIGZpbHRlclZhbHVlX29iaiB3aGVuIGlucHV0IGlzIGNsZWFyZWRcbiAgICAgIGlmICghdmFsdWUgfHwgdmFsdWUudG9TdHJpbmcoKS50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZV9vYmogPSBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghcm93Ll9pc0VkaXRlZCkge1xuICAgICAgcm93Ll9pc0VkaXRlZCA9IHRydWU7XG4gICAgfVxuICAgIHJvdy5faXNFZGl0ZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLmlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykpIHtcbiAgICAgIHRoaXMuc2V0TG9va3VwSW5wdXRWYWx1ZShyb3csIGNvbHVtbiwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uTG9va3VwSW5wdXRQYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQsIGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXN0ZWRWYWx1ZSA9IHRoaXMubm9ybWFsaXplTG9va3VwSW5wdXRWYWx1ZShldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykpO1xuICAgIGlmICghcGFzdGVkVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2V0TG9va3VwSW5wdXRWYWx1ZShyb3csIGNvbHVtbiwgcGFzdGVkVmFsdWUpO1xuICAgIGF3YWl0IHRoaXMucmVzb2x2ZUxvb2t1cElucHV0VmFsdWUoY29sdW1uLCByb3cpO1xuICAgIHRoaXMub25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdyk7XG4gIH1cblxuICBhc3luYyBvbkxvb2t1cElucHV0RW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGNvbHVtbjogSUdyaWRDb2x1bW4sIHJvdzogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgdHlwZWRWYWx1ZSA9IHRoaXMubm9ybWFsaXplTG9va3VwSW5wdXRWYWx1ZSh0YXJnZXQ/LnZhbHVlKTtcblxuICAgIGlmICghdGhpcy5pc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5zZWxlY3RMb29rdXBGaWVsZChjb2x1bW4sIHJvdyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRMb29rdXBJbnB1dFZhbHVlKHJvdywgY29sdW1uLCB0eXBlZFZhbHVlKTtcbiAgICBjb25zdCBpc1Jlc29sdmVkID0gYXdhaXQgdGhpcy5yZXNvbHZlTG9va3VwSW5wdXRWYWx1ZShjb2x1bW4sIHJvdyk7XG4gICAgdGhpcy5vbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVkVmFsdWUgJiZcbiAgICAgICFpc1Jlc29sdmVkICYmXG4gICAgICB0aGlzLmlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykgJiZcbiAgICAgIGNvbHVtbi5hbGxvd0F1dG9Db21wbGV0ZVNhdmUgJiZcbiAgICAgIGNvbHVtbi51bmlxdWVLZXlcbiAgICApIHtcbiAgICAgIGlmIChjb25maXJtKGBEbyB5b3Ugd2FudCB0byBhZGQgJHt0eXBlZFZhbHVlfSB0byB0aGUgbG9va3VwP2ApKSB7XG4gICAgICAgIHRoaXMuZ3JpZFNlcnZpY2UuYWRkQXV0b0NvbXBsZXRlVmFsdWUoY29sdW1uLnVuaXF1ZUtleSwgdHlwZWRWYWx1ZSwgY29sdW1uLCByb3cpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybih0eXBlZFZhbHVlLCBjb2x1bW4sIHJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG4gIGdldEF1dG9Db21wbGV0ZU5nTW9kZWwocm93OiBhbnksIGNvbHVtbjogYW55KTogYW55IHtcbiAgICBpZiAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZCkge1xuICAgICAgcmV0dXJuIHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygcm93W2NvbHVtbi5maWVsZF0gPT09ICdvYmplY3QnICYmIHJvd1tjb2x1bW4uZmllbGRdPy50ZXh0KSB7XG4gICAgICByZXR1cm4gcm93W2NvbHVtbi5maWVsZF0/LnRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGRdO1xuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gc2V0IG5nTW9kZWwgdmFsdWVcbiAgY2hhbmdlQXV0b0NvbXBsZXRlTmdNb2RlbChyb3c6IGFueSwgY29sdW1uOiBhbnksIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZCA9IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICByb3dbZmllbGRdID0gdmFsdWU7XG4gIH1cblxuICBzZXRJbnB1dE5nTW9kZWwocm93OiBhbnksIGNvbHVtbjogYW55KTogYW55IHtcbiAgICBpZiAocm93LnVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuICcnOyAgLy8gSWYgJ3Jvdy51bmRlZmluZWQnIGlzIHRydWUsIHJldHVybiBlbXB0eSBzdHJpbmdcbiAgICB9XG5cbiAgICAvLyBFdmFsdWF0ZSBvdGhlciBjb25kaXRpb25zIGJhc2VkIG9uIHJvdyBhbmQgY29sdW1uIGRhdGFcbiAgICBpZiAodGhpcy5hbGxvd0Rpc2FibGVkKGNvbHVtbiwgcm93KSAmJiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0pIHtcbiAgICAgIHJldHVybiByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF07XG4gICAgfVxuXG4gICAgaWYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddICYmIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnZhbHVlKSB7XG4gICAgICByb3dbY29sdW1uLmZpZWxkXSA9IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnZhbHVlO1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiByb3dbY29sdW1uLmZpZWxkXTsgIC8vIEZhbGxiYWNrIHRvICdyb3dbY29sdW1uLmZpZWxkXSdcbiAgfVxuXG4gIC8vIEZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWUgKHdoZW4gbmdNb2RlbCBjaGFuZ2VzKVxuICBjaGFuZ2VJbnB1dE5nTW9kZWwocm93OiBhbnksIGNvbHVtbjogYW55LCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gWW91IGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byB1cGRhdGUgeW91ciBkYXRhIG1vZGVsIGJhc2VkIG9uIHRoZSB2YWx1ZVxuICAgIGlmIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSkge1xuICAgICAgcm93W2NvbHVtbi5maWVsZF0gPSB2YWx1ZTtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLnZhbHVlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd1tjb2x1bW4uZmllbGRdID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIG9uSW5wdXRDaGFuZ2UodmFsdWU6IGFueSwgcm93OiBhbnksIGNvbHVtbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VJbnB1dE5nTW9kZWwocm93LCBjb2x1bW4sIHZhbHVlKTtcbiAgfVxuXG4gIGdldENoZWNrYm94VmFsdWUocm93OiBhbnksIGNvbHVtbjogSUdyaWRDb2x1bW4pOiBib29sZWFuIHtcbiAgICBpZiAoIXJvd1tjb2x1bW4uZmllbGRdKSByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCB2YWx1ZSA9IHJvd1tjb2x1bW4uZmllbGRdO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUudGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDaGVja2VkKHZhbHVlLnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmlzQ2hlY2tlZCh2YWx1ZSk7XG4gIH1cblxuICBpc0NoZWNrZWQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG1hdGNoVmFsdWUgPSBbJzEnLCAndHJ1ZScsICd5J107XG4gICAgcmV0dXJuIG1hdGNoVmFsdWUuaW5jbHVkZXModmFsdWU/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSk7XG4gIH1cbiAgZ2V0TW9yZUNvbHVtbnMoKTogSUdyaWRDb2x1bW5bXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucz8uZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4/LnNob3dJbk1vcmUpID8/IFtdO1xuICB9XG5cbiAgYnVpbGRNb3JlSXRlbXNGb3JSb3cocm93OiBhbnkpOiBNZW51SXRlbVtdIHtcbiAgICBjb25zdCBpdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIGNvbnN0IG1vcmVDb2x1bW5zID0gdGhpcy5nZXRNb3JlQ29sdW1ucygpO1xuXG4gICAgZm9yIChjb25zdCBjb2wgb2YgbW9yZUNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gY29sLmhlYWRlciB8fCBjb2wuZGlzcGxheVRleHQgfHwgY29sLmZpZWxkO1xuICAgICAgY29uc3QgaHlwZXJsaW5rID0gcm93Py5bYCR7Y29sLmZpZWxkfV9vYmpgXT8uaHlwZXJsaW5rIHx8IHJvdz8uW2NvbC5maWVsZF07XG5cbiAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspIHtcbiAgICAgICAgaXRlbXMucHVzaChoeXBlcmxpbmsgPyB7XG4gICAgICAgICAgbGFiZWwsIGljb246IGNvbC5pY29uLCB1cmw6IGh5cGVybGluayxcbiAgICAgICAgICB0YXJnZXQ6IGNvbC5vcGVuSW5OZXdUYWIgfHwgY29sLnRhcmdldCA9PT0gRUdyaWRsaW5rLkJMQU5LID8gRUdyaWRsaW5rLkJMQU5LIDogRUdyaWRsaW5rLlNFTEZcbiAgICAgICAgfSA6IHsgbGFiZWwsIGljb246IGNvbC5pY29uLCBjb21tYW5kOiAoKSA9PiBjb2wub25DbGljaz8uKHJvdykgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cpIHtcbiAgICAgICAgaXRlbXMucHVzaCh7IGxhYmVsLCBpY29uOiBjb2wuaWNvbiwgY29tbWFuZDogKCkgPT4gdGhpcy5vcGVuR3JpZERpYWxvZyhjb2wsIHJvdykgfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNvbC5vbkNsaWNrKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goeyBsYWJlbCwgaWNvbjogY29sLmljb24sIGNvbW1hbmQ6ICgpID0+IGNvbC5vbkNsaWNrIShyb3cpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICBoYXNNb3JlQ29sdW1ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNb3JlQ29sdW1ucygpPy5sZW5ndGggPiAwO1xuICB9XG5cbiAgaGFzTW9yZUl0ZW1zKHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRNb3JlSXRlbXNGb3JSb3cocm93KT8ubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHNob3dNb3JlKGV2ZW50OiBhbnksIHJvdzogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jdXJyZW50TW9yZU1lbnUgPSB0aGlzLmJ1aWxkTW9yZUl0ZW1zRm9yUm93KHJvdyk7XG4gICAgdGhpcy5tb3JlTWVudT8udG9nZ2xlKGV2ZW50KTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtd3JhcHBlclwiPlxuICA8cC1jb25maXJtRGlhbG9nIFtzdHlsZV09XCJ7IHdpZHRoOiAnNTB2dycgfVwiICpuZ0lmPVwidXNlSW5saW5lQ1JVRFwiIGtleT1cImhhbmRsZUlubGluZUNSVURcIj48L3AtY29uZmlybURpYWxvZz5cbiAgPHAtY29uZmlybURpYWxvZyBjbGFzcz1cImdyaWQtY29tcG9uZW50LWNvbmZpcm0tZGlhbG9nXCIgKm5nSWY9XCJjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgIGtleT1cImhhbmRsZWNvbHVtbkFjdGlvbnNcIj48L3AtY29uZmlybURpYWxvZz5cbiAgPGRpdiBjbGFzcz1cImdsb2JhbC1maWx0ZXItYnV0dG9ucy13cmFwcGVyIGZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG5cbiAgICA8IS0tIGJ1dHRvbiBmb3IgYXBwbHkgdmFsdWUgb24gR3JpZCAtLT5cbiAgICA8YnV0dG9uICpuZ0lmPVwiKChmaWx0ZXJpbmcgJiYgIWhpZGVGaWx0ZXIgKSB8fCBzaG93RmlsdGVyYnRuKVwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1zZWFyY2hcIlxuICAgICAgKGNsaWNrKT1cImFwcGx5R3JpZEZpbHRlckJ0bigpXCIgW2NsYXNzXT1cIlxuICBzZWFyY2hHcmlkRmlsdGVyID8gJ3AtYnV0dG9uLXN1Y2Nlc3MgYXBwbHktZmlsdGVyLWJ0biBmaWx0ZXItYnRuJyA6ICdoaWRlLWNsZWFyLWZpbHRlci1idXR0b24gYXBwbHktZmlsdGVyLWJ0biBmaWx0ZXItYnRuJ1xuICBcIj48L2J1dHRvbj5cblxuICAgIDwhLS0gYnV0dG9uIGZvciBjbGVhciB2YWx1ZSBvbiBHcmlkIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCIoKGZpbHRlcmluZyAmJiAhaGlkZUZpbHRlciApfHwgc2hvd0ZpbHRlcmJ0bilcIiBwQnV0dG9uIGlkPVwiY2xlYXJHcmlkRmlsdGVyVmFsdWVzQnV0dG9uXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICBpY29uPVwicGkgcGktcmVwbGF5XCIgKGNsaWNrKT1cImNsZWFyZ3JpZEZpbHRlcnNWYWx1ZSgpXCIgW2NsYXNzXT1cIlxuICAgICAgY2xlYXJHcmlkRmlsdGVyID8gJ2ZpbHRlci1idG4nIDogJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbiBmaWx0ZXItYnRuJ1xuICAgICAgXCIgY2xhc3M9J2dsb2JhbC1yZWZyZXNoIGdsb2JhbC1idG4nPjwvYnV0dG9uPlxuXG4gICAgPCEtLSBidXR0b24gZm9yIHNhdmUgYWxsIGdyaWQgYXQgb25jZSAtLT5cbiAgICA8YnV0dG9uIHBCdXR0b24gKm5nSWY9XCJlZGl0QWxsUm93cyAmJiBlZGl0Um93UGVybWlzc2lvblwiIGlkPVwic2F2ZUFsbEdyaWRWYWx1ZXNcIiBpY29uPVwicGkgcGktY2hlY2tcIiBbbGFiZWxdPVwiJ1NhdmUnXCJcbiAgICAgIFtjbGFzc109XCJoaWRlR3JpZFNhdmVCdXR0b24gPyAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uIHNhdmUtYWxsLWdyaWQnIDogJ3VpLWJ1dHRvbi1pbmZvIHNhdmUtYWxsLWdyaWQnXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2F2ZUFsbFJvd3NBdE9uY2UoKVwiPjwvYnV0dG9uPlxuXG4gICAgPCEtLSBidXR0b24gZm9yIGNhbmNlbCBhbGwgZ3JpZCBhdCBvbmNlIC0tPlxuICAgIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cImVkaXRBbGxSb3dzICYmICFoaWRlR3JpZENhbmNlbEJ1dHRvblwiIGlkPVwiZWRpdEJ0bkdsb2JhbHZhbHVlc1wiIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2xhYmVsXT1cIidDYW5jZWwnXCIgaWNvbj1cInBpIHBpLXRpbWVzXCIgY2xhc3M9XCJ1aS1idXR0b24taW5mb1wiIChjbGljayk9XCJjYW5jZWxBbGxSb3dzQXRPbmNlKClcIj48L2J1dHRvbj5cblxuICAgIDwhLS0gaGVhZGVyIEJ1dHRvbiBmb3IgbXVsdGlTZWxlY3Qgb24gR3JpZCAtLT5cbiAgICA8c3BhbiAqbmdJZj1cImFsbG93Q29sdW1uVG9nZ2xlXCI+XG4gICAgICA8cC1tdWx0aVNlbGVjdCBbc2hvd1RvZ2dsZUFsbF09XCJmYWxzZVwiIG9wdGlvbkRpc2FibGVkPVwiZmFsc2VcIiBbb3B0aW9uc109XCJzZWxlY3RlZFRvZ2dsZUNvbHVtbnNcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkQ29sdW1uc1wiIG9wdGlvbkxhYmVsPVwiaGVhZGVyXCIgc2VsZWN0ZWRJdGVtc0xhYmVsPVwiezB9IGNvbHVtbnMgc2VsZWN0ZWRcIlxuICAgICAgICBjbGFzcz1cImdyaWQtY29tcG9uZW50LW11bHRpc2VsZWN0LWhlYWRlci1idXR0b25cIiBwbGFjZWhvbGRlcj1cIkNob29zZSBDb2x1bW5zXCI+XG4gICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgPC9zcGFuPlxuXG4gICAgPCEtLSBoZWFkZXIgQnV0dG9uIGZvciBBZGRpbmcgbmV3IFJvdyBvbiBHcmlkIC0tPlxuICAgIDxidXR0b24gcEJ1dHRvbiAqbmdJZj1cInVzZUlubGluZUNSVUQgJiYgYWRkUm93UGVybWlzc2lvbiAmJiAhaGlkZUFkZEJ0blwiIHR5cGU9XCJidXR0b25cIiBbbGFiZWxdPVwiJ0FkZCdcIiBwQWRkUm93XG4gICAgICBbdGFibGVdPVwiY29tcG9uZW50VGFibGVSZWZcIiBbcHJldmVudE5ld1Jvd109XCJwcmV2ZW50TmV3Um93XCIgW25ld1Jvd109XCJuZXdHcmlkUm93XCIgW2lkXT1cImRhdGFLZXlcIlxuICAgICAgcFRvb2x0aXA9XCJBZGQgTmV3IFJvd1wiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIGljb249XCJwaSBwaS1wbHVzXCJcbiAgICAgIFtjbGFzc109XCIndWktYnV0dG9uLWluZm8gZ2xvYmFsLWFkZC1idG4nK2dyaWROYW1lXCIgKGNsaWNrKT1cImFkZE5ld1JvdyhuZXdHcmlkUm93LCB0cnVlKVwiIHBSaXBwbGU+PC9idXR0b24+XG5cblxuICAgIDwhLS0gaGVhZGVyIEJ1dHRvbiBmb3IgRXhjZWwgRmlsZSBvbiBHcmlkIC0tPlxuICAgIDxidXR0b24gKm5nSWY9XCJhbGxvd0V4cG9ydFRvRXhjZWxcIiB0eXBlPVwiYnV0dG9uXCIgcEJ1dHRvbiBpY29uPVwicGkgcGktZmlsZS1leGNlbFwiIChjbGljayk9XCJleHBvcnRFeGNlbCgpXCJcbiAgICAgIGNsYXNzPVwicC1idXR0b24tc3VjY2Vzc1wiIHBUb29sdGlwPVwiRXhwb3J0IHRvIEV4Y2VsXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgcFJpcHBsZT48L2J1dHRvbj5cblxuICAgIDwhLS0gaGVhZGVyIEJ1dHRvbiBmb3IgUERGIEZpbGUgb24gR3JpZCAtLT5cbiAgICA8YnV0dG9uICpuZ0lmPVwiYWxsb3dFeHBvcnRUb1BkZlwiIHR5cGU9XCJidXR0b25cIiBwQnV0dG9uIGljb249XCJwaSBwaS1maWxlLXBkZlwiIChjbGljayk9XCJleHBvcnRQZGYoKVwiXG4gICAgICBjbGFzcz1cInAtYnV0dG9uLXdhcm5pbmcgbXItMiBtbC0yXCIgcFRvb2x0aXA9XCJFeHBvcnQgdG8gUGRmXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCIgcFJpcHBsZT48L2J1dHRvbj5cblxuICAgIDwhLS0gPGRpdiAqbmdGb3I9XCJsZXQgcmVwb3J0QnV0dG9uIG9mIHJlcG9ydEJ1dHRvbnNcIiBjbGFzcz1cInVpLWJ1dHRvbi1pbmZvIG1yLTIgbWwtMlwiPlxuICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuICpuZ0lmID1cIiFyZXBvcnRCdXR0b24uaGlkZGVuXCJbcmVwSWRdPVwicmVwb3J0QnV0dG9uLnJlcG9ydElkXCIgW2xhYmVsXT1cInJlcG9ydEJ1dHRvbi5sYWJlbFwiIFtwYXJhbXNdPVwicmVwb3J0QnV0dG9uLnBhcmFtc1wiXG4gICAgICBbc2hvd0RpYWxvZ109XCJyZXBvcnRCdXR0b24uc2hvd0RpYWxvZ1wiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgPC9kaXY+IC0tPlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVwb3J0QnV0dG9uIG9mIHJlcG9ydEJ1dHRvbnNcIj5cbiAgICAgIDxzZS1nZW5lcmF0ZS1yZXBvcnQtYnRuICpuZ0lmPVwiIXJlcG9ydEJ1dHRvbi5oaWRkZW5cIiBbcmVwSW5mb109XCJyZXBvcnRCdXR0b25cIiBbbGFiZWxdPVwicmVwb3J0QnV0dG9uLmxhYmVsXCJcbiAgICAgICAgW3BhcmFtc109XCJyZXBvcnRCdXR0b24ucGFyYW1zXCIgW2ljb25dPVwicmVwb3J0QnV0dG9uLmljb25cIiBbY2xhc3NdPVwicmVwb3J0QnV0dG9uLmNsYXNzXCJcbiAgICAgICAgW3Nob3dEaWFsb2ddPVwicmVwb3J0QnV0dG9uLnNob3dEaWFsb2dcIiBbcmVwb3J0VHlwZV09XCIgcmVwb3J0QnV0dG9uLnJlcG9ydFR5cGVcIlxuICAgICAgICBbcmVwb3J0SGVhZGVyXT1cInJlcG9ydEJ1dHRvbi5yZXBvcnRIZWFkZXJcIiBbcmVwb3J0Rm9vdGVyXT1cInJlcG9ydEJ1dHRvbi5yZXBvcnRGb290ZXJcIj48L3NlLWdlbmVyYXRlLXJlcG9ydC1idG4+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgPC9kaXY+XG5cbiAgPHAtdGFibGUgKm5nSWY9XCIhaXNHcmlkSGlkZGVuXCIgaWQ9XCJteS10YWJsZVwiIFt2YWx1ZV09XCJyb3dzRGF0YVwiIFtjb2x1bW5zXT1cInNlbGVjdGVkQ29sdW1uc1wiIHNvcnRNb2RlPVwibXVsdGlwbGVcIlxuICAgIFtsYXp5XT1cInVzZVNlcnZlclNpZGVFdmVudHMgfHwgcGFnaW5hdGlvblwiIFtwYWdpbmF0b3JdPVwicGFnaW5hdGlvblwiXG4gICAgW2Fsd2F5c1Nob3dQYWdpbmF0b3JdPVwicGFnaW5hdGlvbiAmJiB0b3RhbFJlY29yZHMgPiAwXCIgW2dsb2JhbEZpbHRlckZpZWxkc109XCJnbG9iYWxGaWx0ZXJGaWVsZHNcIlxuICAgIFtjbGFzc109XCInIGdyaWQtY29tcG9uZW50LW1haW4tdGFibGUgJyArIChwYWdpbmF0aW9uIHx8ICFyb3dzRGF0YS5sZW5ndGggPyAnIHBhZ2luYXRpb24gJyA6ICcnKSArICh0YWJsZVN0eWxlLmluY2x1ZGVzKCd3aWR0aCcpID8gJyBoYXNUYWJsZVdpZHRoU3R5bGUgJyA6ICcnKSArIChhdXRvUmVzaXplID8gJycgOiAndGFibGUtbGF5b3V0LWF1dG8nKSBcIlxuICAgIChvbkNvbFJlc2l6ZSk9XCJvbkNvbHVtblJlc2l6ZSgkZXZlbnQsZHQpXCIgW3Jlc2l6YWJsZUNvbHVtbnNdPVwidHJ1ZVwiIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIlxuICAgIGNvbHVtblJlc2l6ZU1vZGU9XCJleHBhbmRcIiBbcm93c109XCJkZWZhdWx0Um93c1wiIFt0b3RhbFJlY29yZHNdPVwidG90YWxSZWNvcmRzXCJcbiAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInNldFBhZ2luYXRpb25MZW5ndGhcIiBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInNob3dDdXJyZW50UGFnZVJlcG9ydFwiXG4gICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cIlNob3dpbmcge2ZpcnN0fSB0byB7bGFzdH0gb2Yge3tcbiAgICAgIHRvdGFsUmVjb3Jkc1xuICAgIH19IGVudHJpZXNcIiBbbG9hZGluZ109XCIhc2V0R3JpZFJlZnJlc2hUaW1lID8gbG9hZGluZyA6IGZhbHNlXCJcbiAgICAob25Tb3J0KT1cInNvcnREaXNhYmxlZCA/ICcnIDogaGFuZGxlU29ydENoYW5nZSgkZXZlbnQpXCIgKG9uRmlsdGVyKT1cImhhbmRsZUZpbHRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAob25MYXp5TG9hZCk9XCJzaG91bGRSdW5TZXJ2ZXJTaWRlKCRldmVudCkgPyBoYW5kbGVTZXJ2ZXJTaWRlRXZlbnRzKCRldmVudCwgZHQpIDogbnVsbFwiXG4gICAgKG9uUGFnZSk9XCJncmlkU2VydmljZS5jb2x1bW5Gb2N1c2VkT3V0ID8gc2hvd0NvbmZpcm1hdGlvbigkZXZlbnQpIDogaGFuZGxlU2VydmVyU2lkZVBhZ2luYXRpb24oJGV2ZW50KVwiICNkdFxuICAgIFtkYXRhS2V5XT1cImRhdGFLZXlcIiBbc2VsZWN0aW9uXT1cInNlbGVjdGVkUm93c1wiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25UYWJsZVNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCIgc2VsZWN0aW9uTW9kZT1cIm11bHRpcGxlXCIgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiXG4gICAgW3RhYmxlU3R5bGVdPVwidGFibGVTdHlsZVwiIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0XCIgZWRpdE1vZGU9XCJyb3dcIiBbZWRpdGluZ1Jvd0tleXNdPVwiZWRpdGluZ1Jvd0tleXNcIlxuICAgIFtyb3dIb3Zlcl09XCJyb3dIb3ZlclwiIFtuZ0NsYXNzXT1cInNldENsYXNzYUFuZElkKGR0KVwiIChvblJvd1Jlb3JkZXIpPVwib25Sb3dSZW9yZGVyKCRldmVudClcIj5cblxuICAgIDxkaXYgKm5nSWY9XCJyb3dBY3Rpb25zLmxlbmd0aCA+IDAgJiYgcm93QWN0aW9ucy5sZW5ndGggPiAwXCIgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCByb3dBY3Rpb24gb2Ygcm93QWN0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIFtsYWJlbF09XCJyb3dBY3Rpb24udGl0bGVcIiBbY2xhc3NdPVwicm93QWN0aW9uLmNsYXNzXCJcbiAgICAgICAgICAoY2xpY2spPVwicm93QWN0aW9uLm9uQ2xpY2soc2VsZWN0ZWRSb3dzKVwiPjwvYnV0dG9uPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBoZWFkZXIgY29sdW1ucyBvbiBHcmlkIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIiBsZXQtY29scz5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJhbGxvd1NlbGVjdGlvbiAmJiBzZWxlY3Rpb25UeXBlID09PSAnbXVsdGlwbGUnXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1zZWxlY3Rpb25cIlxuICAgICAgICAgIGlkPVwie3thbGxvd1NlbGVjdGlvbkhlYWRlcn19XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aC1jb250ZW50LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbXBvbmVudC10YWJsZS1oZWFkZXItaW5uZXItZGl2LTJcbiAgICAgICAgICAgICAgICAgIHRhYmxlLWhlYWRlci1pbm5lci1kaXYgZGl2LWxhc3QtaW5uZXItaHRtbC1pcy1pY29uXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC1ncm93LTFcIj4ge3thbGxvd1NlbGVjdGlvbkhlYWRlcn19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveCAqbmdJZj1cInNlbGVjdGlvblR5cGUgPT09ICdtdWx0aXBsZSdcIiBiaW5hcnk9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwiaGFuZGxlSGVhZGVyQ2hlY2tib3hDaGFuZ2UoJGV2ZW50KVwiPjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uICYmIHNlbGVjdGlvblR5cGUgPT09ICdzaW5nbGUnXCIgaWQ9XCJTZWxlY3RcIiBkYXRhLXRpdGxlLWVsZW1lbnQ9XCJzZWxmXCJcbiAgICAgICAgICBjbGFzcz1cImdyaWQtY29tcG9uZW50LXNlbGVjdGlvblwiPlxuICAgICAgICAgIFNlbGVjdFxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiBpZD1cIkFjdGlvbnNcIlxuICAgICAgICAgICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgKGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMCB8fCAodXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbikpKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nIFwiIGRhdGEtdGl0bGUtZWxlbWVudD1cInNlbGZcIj5cbiAgICAgICAgICBBY3Rpb25zXG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sc1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbj8uY29sdW1uV2lkdGggPyBjb2x1bW4/LmNvbHVtbldpZHRoKydweCcgOiBjb2x1bW4/LmN1c3RvbVdpZHRoKydweCdcIlxuICAgICAgICAgIGlkPVwie3tjb2x1bW4uaGVhZGVyfX1cIiBbYXR0ci5kYXRhLWNvbHVtbi1oZWFkZXJdPVwiY29sdW1uPy5oZWFkZXJcIiBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi50eXBlID09PSAnYm9vbGVhbicgPyAnY2hlY2tib3gtdGgnIDogJydcIlxuICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCJzb3J0RGlzYWJsZWQgJiYgdXNlU2VydmVyU2lkZUV2ZW50cyA/IHRydWUgOiBjb2x1bW4uc29ydGluZyA9PT0gZmFsc2VcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRoLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29tcG9uZW50LXRhYmxlLWhlYWRlci1pbm5lci1kaXYtMSB0YWJsZS1oZWFkZXItaW5uZXItZGl2IGRpdi1sYXN0LWlubmVyLWh0bWwtaXMtaWNvblwiPlxuICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiJ3NlbGYnXCIgW2NsYXNzXT1cIidmbGV4LWdyb3ctMSdcIj57eyBjb2x1bW4uaGVhZGVyIH19XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uaXNSZXF1aXJlZFwiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQgcmVxdWlyZWQtc3RhclwiPio8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHAtc29ydEljb25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5zb3J0aW5nICE9PSBmYWxzZSAmJiBjb2x1bW4/LnR5cGUgIT09ICdtdWx0aXBsZScgJiYgKCEoZWRpdEFsbFJvd3MgJiYgcGFnaW5hdGlvbikgfHwgc29ydEljb25IaWRkZW4pXCJcbiAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgKGNsaWNrKT1cImhhbmRsZUN1c3RvbVNvcnRpbmcoKVwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoICpuZ0lmPVwiaGFzTW9yZUNvbHVtbnMoKVwiIHBSZXNpemFibGVDb2x1bW4gaWQ9XCJNb3JlQWN0aW9uc1wiIGNsYXNzPVwibW9yZS1hY3Rpb25zLXRoXCI+TW9yZTwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uIGlkPVwiQWN0aW9uc1wiXG4gICAgICAgICAgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiAhZGlzYWJsZWRTYXZlQnRuICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgKGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMCB8fCAodXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbikpKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCIgZGF0YS10aXRsZS1lbGVtZW50PVwic2VsZlwiPkFjdGlvbnM8L3RoPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciAqbmdJZj1cImZpbHRlcmluZyAmJiAhaGlkZUZpbHRlclwiPlxuICAgICAgICA8dGggcFJlc2l6YWJsZUNvbHVtbiAqbmdJZj1cImFsbG93U2VsZWN0aW9uXCIgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW4gKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgdXNlSW5saW5lQ1JVRFwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBwUmVzaXphYmxlQ29sdW1uICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sc1wiXG4gICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbj8uY29sdW1uV2lkdGggPyBjb2x1bW4/LmNvbHVtbldpZHRoKydweCcgOiBjb2x1bW4/LmN1c3RvbVdpZHRoKydweCdcIlxuICAgICAgICAgIGlkPVwie3tjb2x1bW4uaGVhZGVyfX1cIiBbbmdTd2l0Y2hdPVwiY29sdW1uPy5maWx0ZXI/LnR5cGVcIlxuICAgICAgICAgIFtjbGFzc109XCJoaWRlRmlsdGVyT3B0aW9ucyA/ICdoaWRlLXRhYmxlLWZpbHRlciB0ZW1wJyA6ICd0ZW1wJ1wiPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmZpbHRlcmluZyAhPT0gZmFsc2VcIiBbY2xhc3NdPVwiY29sdW1uLmZpbHRlcj8uc2hvd0ZpbHRlciA/ICcnIDogJ2hpZGUtZmlsdGVyLWljb24nXCI+XG4gICAgICAgICAgICA8IS0tIFRleHQgaW5wdXQgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW3R5cGVdPVwiJ3RleHQnXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInaW5wdXQnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBbY2xhc3NdPVwiY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgW25hbWVdPVwiY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCIoY29sdW1uLmF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgY29sdW1uLmZpbHRlckF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgYXV0b0NvbXBsZXRlID09PSBmYWxzZSkgPyAnb2ZmJyA6ICdvbidcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInJlbW92aW5nRmlsdGVycygkZXZlbnQsIGNvbHVtbik7YmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCIgcElucHV0VGV4dCAvPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBOdW1lcmljIGlucHV0IG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIidudW1lcmljJ1wiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ251bWVyaWNfaW5wdXQnXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgWyhuZ01vZGVsKV09XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBbY2xhc3NdPVwiY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKVwiXG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChvbkJsdXIpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInJlbW92aW5nRmlsdGVycygkZXZlbnQsIGNvbHVtbik7YmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9jb21wbGV0ZV09XCJjb2x1bW4uZmlsdGVyQXV0b0NvbXBsZXRlID09PSB0cnVlID8gJ29uJyA6ICdvZmYnXCI+PC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBsb29rdXAgaW5wdXQgb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW3R5cGVdPVwiJ3RleHQnXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImVxdWFsc1wiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbG9va3VwX2lucHV0J1wiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCIgbGV0LXZhbHVlIGxldC1maWx0ZXI9XCJmaWx0ZXJDYWxsYmFja1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pY29uLXdyYXBwZXIgZ3JpZC1jb21wb25lbnQgbG9va3VwLWZpbHRlci13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9va3VwLWZpbHRlci1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbaWRdPVwiY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19maWx0ZXInXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudCBsb29rdXAtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hdXRvY29tcGxldGVdPVwiKGNvbHVtbi5hdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGNvbHVtbi5maWx0ZXJBdXRvQ29tcGxldGUgPT09IGZhbHNlIHx8IGF1dG9Db21wbGV0ZSA9PT0gZmFsc2UpID8gJ29mZicgOiAnb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIFtuZ01vZGVsXT1cImxvb2t1cEZpbHRlcklucHV0TmdNb2RlbChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VMb29rdXBJbnB1dE5nTW9kZWwoJ2xvb2t1cEZpbHRlcicsIGNvbHVtbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEZpbHRlckxvb2t1cChjb2x1bW4pXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiBbbmFtZV09XCJjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJyZW1vdmluZ0ZpbHRlcnMoJGV2ZW50LCBjb2x1bW4pO2JhY2tzcGFjZUV2ZW50KCRldmVudCwgY29sdW1uKVwiIHBJbnB1dFRleHQgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpcmVjdC13cmFwcGVyLWNsb3NlLWljb24tbG9va3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjb2x1bW4uZmlsdGVyVmFsdWVcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJsb29rdXBDbGVhclZhbHVlKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gY2hlY2tib3ggb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgdHlwZT1cImJvb2xlYW5cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1jaGVja2JveCBbYmluYXJ5XT1cInRydWVcIiBbZGlzYWJsZWRdPVwiY29sdW1uLmRpc2FibGVkXCIgW25nTW9kZWxdPVwiY29sdW1uLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJhcHBseUVudGVyRXZlbnQoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNsaWNrQ2hlY2tCb3hGaWx0ZXIoY29sdW1uLCAkZXZlbnQpXCIgKGtleWRvd24pPVwiYmFja3NwYWNlRXZlbnQoJGV2ZW50LCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgPC9wLWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cblxuICAgICAgICAgICAgPCEtLSBtdWx0aVNlbGVjdCBvbiBIZWFkZXIgRm9yIEZpbHRlci0tPlxuICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyIGNsYXNzPVwibm8tZmlsdGVyLWljb25cIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgbWF0Y2hNb2RlPVwiaW5cIiBbc2hvd01lbnVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ211bHRpLXNlbGVjdCdcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIFtvcHRpb25zXT1cImNvbHVtbi5maWx0ZXIuZGF0YSB8fCBbXVwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLmZpZWxkXCIgKGtleXVwLmVudGVyKT1cImFwcGx5RW50ZXJFdmVudChmaWx0ZXIsICRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCIgW29wdGlvbkxhYmVsXT1cImNvbHVtbi5vcHRpb25MYWJlbFwiXG4gICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiAoa2V5ZG93bik9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIj5cblxuICAgICAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gZHJvcGRvd24gb24gSGVhZGVyIEZvciBGaWx0ZXItLT5cbiAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlciBjbGFzcz1cIm5vLWZpbHRlci1pY29uXCIgW2ZpZWxkXT1cImNvbHVtbi5maWVsZFwiIG1hdGNoTW9kZT1cImluXCIgW3Nob3dNZW51XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkcm9wZG93bidcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC12YWx1ZSBsZXQtZmlsdGVyPVwiZmlsdGVyQ2FsbGJhY2tcIj5cbiAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbc2hvd0NsZWFyXT1cInRydWVcIiBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCdcIiBbZmlsdGVyXT1cImNvbHVtbi5hbGxvd1NlYXJjaFwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbHVtbi5maWx0ZXJWYWx1ZVwiIChrZXl1cC5lbnRlcik9XCJhcHBseURyb3Bkb3duRmlsdGVyKGZpbHRlciwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJjb2x1bW4uZmlsdGVyLmRhdGEgfHwgW11cIiAob25DaGFuZ2UpPVwic2VhcmNoRHJvcGRvd25GaWx0ZXIoZmlsdGVyLCAkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIGZpbHRlck1hdGNoTW9kZT1cInN0YXJ0c1dpdGhcIj48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICA8IS0tIGNhbGVuZGFyIG9uIEhlYWRlciBGb3IgRmlsdGVyLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFtmaWVsZF09XCJjb2x1bW4uZmllbGRcIiBtYXRjaE1vZGU9XCJpblwiIFtzaG93TWVudV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInY2FsZW5kYXInXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtdmFsdWUgbGV0LWZpbHRlcj1cImZpbHRlckNhbGxiYWNrXCI+XG4gICAgICAgICAgICAgICAgPHAtZGF0ZXBpY2tlciBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdC1EYXRlJ1wiIFsobmdNb2RlbCldPVwiY29sdW1uLmZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uZmllbGQgKyAnLWZpbHRlci1pbnB1dCdcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHlFbnRlckV2ZW50KGZpbHRlciwgJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiIChvblNlbGVjdCk9XCJzZWxlY3REYXRlKGNvbHVtbilcIiBbaW5wdXRJZF09XCJjb2x1bW4uZmllbGRcIiBob3VyRm9ybWF0PVwiMTJcIlxuICAgICAgICAgICAgICAgICAgKGtleXVwLmJhY2tzcGFjZSk9XCJyZW1vdmVOdWxsQ2FsZW5kYXIoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIiBbc2hvd0J1dHRvbkJhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsb3NlKT1cInNldEZpbHRlckZvY3VzT3V0KGNvbHVtbiwgZmlsdGVyLCAkZXZlbnQpXCIgW2RhdGVGb3JtYXRdPVwiY2FsZW5kYXJGb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2FsZW5kYXJJbnB1dFZhbHVlKGNvbHVtbiwge30sIHRydWUpXCIgKG9uQ2xlYXJDbGljayk9XCJiYWNrc3BhY2VFdmVudCgkZXZlbnQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwic2V0RmlsdGVyRm9jdXNPdXQoY29sdW1uLCBmaWx0ZXIsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L3AtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgIDwhLS0gRGVmYXVsdCBGaWx0ZXIgRm9yIEhlYWRlciAgLS0+XG4gICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXIgY2xhc3M9XCJuby1maWx0ZXItaWNvblwiIFt0eXBlXT1cIlxuICAgICAgICAgICAgICAgIGNvbHVtbi50eXBlICYmIGNvbHVtbi50eXBlICE9PSAnbGluaycgPyBjb2x1bW4udHlwZSA6ICd0ZXh0J1xuICAgICAgICAgICAgICBcIiBbZmllbGRdPVwiY29sdW1uLmZpZWxkXCIgZGlzcGxheT1cIm1lbnVcIiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCAqbmdJZj1cImhhc01vcmVDb2x1bW5zKClcIiBwUmVzaXphYmxlQ29sdW1uIGNsYXNzPVwibW9yZS1hY3Rpb25zLXRoXCI+PC90aD5cbiAgICAgICAgPHRoIHBSZXNpemFibGVDb2x1bW5cbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmICFkaXNhYmxlZFNhdmVCdG4gJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiAoY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwIHx8ICh1c2VJbmxpbmVDUlVEICYmIChkZWxldGVSb3dQZXJtaXNzaW9uIHx8IGVkaXRSb3dQZXJtaXNzaW9uKSkpXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj48L3RoPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBCb2R5IGNvbHVtbnMgb24gR3JpZCAtLT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3cgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCIgbGV0LXJpPVwicm93SW5kZXhcIj5cbiAgICAgIDx0ciBbc3R5bGVdPVwicm93U3R5bGVcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICdoaWdobGlnaHRlZC1yb3cnOiByb3c/LmhpZ2hsaWdodHJvdyxcbiAgICAgICAgJ2VsbGlwc2lzLXRydWUnOiBlbGxpcHNpcyxcbiAgICAgICAgJ3Atc2VsZWN0YWJsZS1yb3cgd29yZFdyYXBUcnVlJzogd29yZFdyYXAsXG4gICAgICAgICd3b3JkV3JhcEZhbHNlIHAtc2VsZWN0YWJsZS1yb3cnOiAhd29yZFdyYXBcbiAgICAgIH1cIiAoY2xpY2spPVwic2VsZWN0ZWRSb3dSZWNvcmQgPSByb3dcIiBbcEVkaXRhYmxlUm93XT1cInJvd1wiIFtwUmVvcmRlcmFibGVSb3ddPVwicmlcIiAjZ3JpZFJvdyBbaWRdPVwicm93W2RhdGFLZXldXCI+XG4gICAgICAgIDx0ZCAqbmdJZj1cImFsbG93U2VsZWN0aW9uXCIgY2xhc3M9XCJncmlkLWNvbXBvbmVudC1zZWxlY3Rpb25cIiBwUmVvcmRlcmFibGVSb3dIYW5kbGU+XG4gICAgICAgICAgPHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwicm93XCIgKm5nSWY9XCJzZWxlY3Rpb25UeXBlID09PSAnc2luZ2xlJ1wiPjwvcC10YWJsZVJhZGlvQnV0dG9uPlxuICAgICAgICAgIDxwLXRhYmxlQ2hlY2tib3ggW3ZhbHVlXT1cInJvd1wiICpuZ0lmPVwic2VsZWN0aW9uVHlwZSA9PT0gJ211bHRpcGxlJ1wiPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwhLS0gZmlyc3QgYWN0aW9ucyBjb2x1bW4gLS0+XG4gICAgICAgIDwhLS0gPHRkICpuZ0lmPVwic2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbHVtbkFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxpIFt0aXRsZV09XCJhY3Rpb24udG9vbHRpcFwiIFtjbGFzc109XCJhY3Rpb24uaWNvblwiIChjbGljayk9XCJoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFjdGlvbiwgcm93KVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+IC0tPlxuICAgICAgICA8dGQgKm5nSWY9XCJzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBjb2x1bW5BY3Rpb25zXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGlvbi1idG5cIiAqbmdJZj1cImFjdGlvbi52aXNpYmxlID8gYWN0aW9uLnZpc2libGUocm93KSA6IHRydWVcIj5cbiAgICAgICAgICAgICAgPGkgW3RpdGxlXT1cImFjdGlvbi50b29sdGlwXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aW9uLWJ0bi1kaXNhYmxlZF09XCJhY3Rpb24uZGlzYWJsZWQgPyBhY3Rpb24uZGlzYWJsZWQocm93KSA6IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiKGFjdGlvbi5kaXNhYmxlZCAmJiBhY3Rpb24uZGlzYWJsZWQocm93KSkgPyBudWxsIDogaGFuZGxlQWN0aW9uQ2xpY2soJGV2ZW50LCBhY3Rpb24sIHJvdylcIj48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWRTYXZlQnRuID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAnJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2V0QWN0aW9uQ29sdW1uV2lkdGhcIj5cbiAgICAgICAgICAgIDxzZS1ncmlkLXJvdy1hY3Rpb25zIFtlZGl0aW5nXT1cImVkaXRpbmdcIiBbZWRpdFJvd1Blcm1pc3Npb25dPVwiZWRpdFJvd1Blcm1pc3Npb25cIlxuICAgICAgICAgICAgICBbZGVsZXRlUm93UGVybWlzc2lvbl09XCJkZWxldGVSb3dQZXJtaXNzaW9uXCIgW2hpZGVEZWxldGVCdG5dPVwiaGlkZURlbGV0ZUJ0blwiIFtoaWRlRWRpdEJ0bl09XCJoaWRlRWRpdEJ0blwiXG4gICAgICAgICAgICAgIFtyb3ddPVwicm93XCIgKG9uUm93RWRpdEluaXRCdG4pPVwib25Sb3dFZGl0SW5pdCgkZXZlbnQpXCIgKGRlbGV0ZVJlY29yZEJ0bik9XCJkZWxldGVSZWNvcmQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvblJvd0VkaXRTYXZlQnRuKT1cIm9uUm93RWRpdFNhdmUoJGV2ZW50KVwiIChvblJvd0VkaXRDYW5jZWxCdG4pPVwib25Sb3dFZGl0Q2FuY2VsKCRldmVudCwgcmkpXCJcbiAgICAgICAgICAgICAgW2VkaXRBbGxSb3dzXT1cImVkaXRBbGxSb3dzXCI+XG4gICAgICAgICAgICA8L3NlLWdyaWQtcm93LWFjdGlvbnM+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuXG4gICAgICAgIDwhLS0gR3JpZCBSb3dzIERhdGEgQmluZGluZ3MgU3RhcnQgLS0+XG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHNlbGVjdGVkQ29sdW1uc1wiIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4uc3R5bGUgPyAnJyA6ICd3LXN0YXRpYy1jb2wnXCIgW2F0dHIuZGF0YS1jb2x1bW4tZmllbGRdPVwiY29sdW1uPy5maWVsZFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmhvdmVyRGF0YSAmJiAhY29sdW1uLmlzVGV4dGFyZWEgPyAndGQtb3ZlcmxheScgOiAnJ1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJjb2x1bW4uaG92ZXJEYXRhICYmICFjb2x1bW4uaXNUZXh0YXJlYSA/ICd0ZC13cmFwcGVyJyA6ICcnXCJcbiAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIihjb2x1bW4uaG92ZXJEYXRhICYmIGNvbHVtbi5ob3ZlckRhdGEuY29tcG9uZW50ICYmICFjb2x1bW4uaXNUZXh0YXJlYSkgPyBhZGREeW5hbWljUGFuZWxPdmVybGF5Q29tcG9uZW50KGNvbHVtbi5ob3ZlckRhdGEsIG92ZXJsYXlQYW5lbCwgJGV2ZW50LCByb3cpIDogJydcIlxuICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwiKGNvbHVtbi5ob3ZlckRhdGEgJiYgY29sdW1uLmhvdmVyRGF0YS5jb21wb25lbnQgJiYgIWNvbHVtbi5pc1RleHRhcmVhKSA/ICBtb3VzZUxlYXZlRXZlbnQob3ZlcmxheVBhbmVsKSA6ICcnXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRkLWNvbnRlbnQtd3JhcHBlclwiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIj5cblxuICAgICAgICAgICAgICA8IS0tIEJvb2xlYW4gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cbiAgICAgICAgPHRkICpuZ0lmPVwiIWVkaXRpbmcgJiYgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LnNob3cgIT0gZmFsc2VcIj5cbiAgICAgICAgICA8cC1jaGVja2JveCBbbmdDbGFzc109XCJ7J2Rpc2FibGVkLWNoZWNrYm94JzogY29sdW1uLmRpc2FibGVkfVwiIFtiaW5hcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGVja0JveENoYW5nZUV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCIgKGNoYW5nZSk9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImdldENoZWNrYm94VmFsdWUocm93LCBjb2x1bW4pXCI+XG4gICAgICAgICAgPC9wLWNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgKm5nSWY9XCJlZGl0aW5nXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8IS0tIGZvciBlZGl0IGNoZWNrQm94IC0tPlxuICAgICAgICAgICAgICA8cC1jaGVja2JveCAobmdNb2RlbENoYW5nZSk9XCJjaGVja0JveENoYW5nZUV2ZW50KCRldmVudCwgY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIFtiaW5hcnldPVwidHJ1ZVwiIFtuZ01vZGVsXT1cImdldENoZWNrYm94VmFsdWUocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIj48L3AtY2hlY2tib3g+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gbGluayBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2EsaW5wdXQnXCIgKm5nU3dpdGNoQ2FzZT1cIidsaW5rJ1wiPlxuICAgICAgICAgIDwhLS0gbGluayBjb2x1bW4gZm9yIEh5cGVyTGluayBDYXNlIC0tPlxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2VcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLnRhcmdldCAhPT0gJ19zZWxmJ1wiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnYSdcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cblxuICAgICAgICAgICAgICA8YSBjbGFzcz1cImQtaW5saW5lXCIgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCIgW2NsYXNzXT1cImNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi50YXJnZXQgPT09ICdfc2VsZidcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2EnXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgIFtjbGFzc109XCIgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCIgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuXG4gICAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmVcIiBbaHJlZl09XCJjb2x1bW4uZGlzYWJsZWQ/Jyc6cm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiXG4gICAgICAgICAgICAgICAgW3RhcmdldF09J2NvbHVtbi50YXJnZXQnIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCIgW2NsYXNzXT1cImNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImNvbHVtbj8ub25DbGljayA/IG9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdykgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICBzZXRDb25kaXRpb25CYXNlVmFsdWUocm93LCBjb2x1bW4pXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwhLS0gbGluayBjb2x1bW4gZm9yIEVkaXQgQ2FzZSAtLT5cbiAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi5hbGxvd1NhdmUgfHwgY29sdW1uLmFsbG93U2F2ZSA9PT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihjb2x1bW4uZWRpdGFibGUgPT09IHRydWUgKSAmJiAoY29sdW1uLmVkaXRMaW5rID09PSB0cnVlIClcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFyb3cuaXNOZXdcIiBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgfHwgcm93W2NvbHVtbi5maWVsZF0gfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheUZpZWxkID0gJGV2ZW50IDogcm93W2NvbHVtbi5maWVsZF0gPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIFthdHRyLmF1dG9jb21wbGV0ZV09XCIoY29sdW1uLmF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgYXV0b0NvbXBsZXRlID09PSBmYWxzZSkgPyAnb2ZmJyA6ICdvbidcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBwSW5wdXRUZXh0ICpuZ0lmPVwicm93LmlzTmV3XCIgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sdW1uPy5vbkNsaWNrID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkIDogcm93W2NvbHVtbi5maWVsZF0gPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgW2F0dHIuYXV0b2NvbXBsZXRlXT1cIihjb2x1bW4uYXV0b0NvbXBsZXRlID09PSBmYWxzZSB8fCBhdXRvQ29tcGxldGUgPT09IGZhbHNlKSA/ICdvZmYnIDogJ29uJ1wiIChjaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8IS0tIDxzcGFuICpuZ0lmPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZXx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gdW5kZWZpbmVkXCIgPlxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFtocmVmXT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiBbdGFyZ2V0XT0nY29sdW1uLnRhcmdldCdcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiY29sdW1uLmljb24gJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWU7IGVsc2Ugbm9JY29uXCJbY2xhc3NdPVwiY29sdW1uLmljb25cIiBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZT8nJzpcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoY29sdW1uLmVkaXRMaW5rID09PSBmYWxzZXx8IGNvbHVtbi5lZGl0TGluayA9PT0gdW5kZWZpbmVkKSYmKGNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2V8fCBjb2x1bW4uZWRpdGFibGUgPT09IHVuZGVmaW5lZClcIj5cbiAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmVcIiBbaHJlZl09XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uaHlwZXJsaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJjb2x1bW4udGFyZ2V0ID8gY29sdW1uLnRhcmdldCA6ICdfYmxhbmsnXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5lZGl0YWJsZSA9PT0gZmFsc2UgPyAnJyA6IGFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnZGlzYWJsZWQtbGluaycgOiAnJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImNvbHVtbi5pY29uICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNvbHVtbi5pY29uXCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCIgY2xhc3M9XCJjdXN0b20tbGlua1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sdW1uLmVkaXRhYmxlID09PSBmYWxzZSB8fCBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcIj5cbiAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmVcIiBbaHJlZl09XCJjb2x1bW4uZGlzYWJsZWQ/Jyc6cm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiY29sdW1uLnRhcmdldCA/IGNvbHVtbi50YXJnZXQgOiAnX2JsYW5rJ1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjb2x1bW4uaWNvbiYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlOyBlbHNlIG5vSWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIiBbY2xhc3NdPVwiY29sdW1uLmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJjb2x1bW4/Lm9uQ2xpY2sgPyBvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpIDogJydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlPycnOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIElmcmFtZSBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidpZnJhbWUnXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tbGlua1wiIChjbGljayk9XCJncmlkSUZyYW1lKGNvbHVtbiwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/Lmh5cGVybGluaywgcm93KVwiIFt0aXRsZV09XCJcbiAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJlxuICAgICAgICAgICAgICAgIChyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gbnVsbCB8fCByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXS5kaXNwbGF5VGV4dCA9PT0gJycpXG4gICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICA6IGNvbHVtbi5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgPyBjb2x1bW4uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgIDogcm93W2NvbHVtbi5maWVsZF1cblxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjdXN0b20taWNvbi1idG5cIiAqbmdJZj1cImNvbHVtbi5pY29uOyBlbHNlIG5vSWNvblwiIFtkaXNhYmxlZF09XCJjb2x1bW4uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImNvbHVtbi5pY29uXCIgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPlxuICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXSAmJlxuICAgICAgICAgICAgICAocm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09IG51bGwgfHwgcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHQgPT09ICcnKVxuICAgICAgICAgICAgICA/IHJvd1tjb2x1bW4uZmllbGRdIDogcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10uZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgOiBjb2x1bW4uZGlzcGxheVRleHQgPyBjb2x1bW4uZGlzcGxheVRleHQgOiByb3dbY29sdW1uLmZpZWxkXVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIGRpYWxvZyBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidkaWFsb2cnXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbj8uZmlsdGVyPy50eXBlICE9PSAnY2FsZW5kYXInICYmICFyb3c/LmhpZGVncmlkYnRuXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4uZWRpdGFibGUgPT09IHRydWUgJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgcFJlb3JkZXJhYmxlUm93SGFuZGxlPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiIHR5cGU9XCJ0ZXh0XCIgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TG9va3VwRmllbGQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF1cIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W3Jvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF0gPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJyb3dbY29sdW1uLmZpZWxkXVwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIC8+XG5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgKm5nSWY9XCJjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlIHx8IGNvbHVtbi5lZGl0YWJsZSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIFwiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlXCIgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICBhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2Rpc2FibGVkLWxpbmsnIDogJydcbiAgICAgICAgICAgICAgICAgICAgXCIgKGNsaWNrKT1cIm9wZW5HcmlkRGlhbG9nKGNvbHVtbiwgcm93LCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIihjb2x1bW4uaWNvbiB8fCByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24pICYmICFyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlIDsgZWxzZSBub0ljb25cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uIDogY29sdW1uLmljb25cIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhlYWRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9JY29uPnt7ICghY29sdW1uLmRpc3BsYXlUZXh0ICYmIHJvdy5pc05ldyApIHx8XG4gICAgICAgICAgICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgPyAnJyA6IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbilcbiAgICAgICAgICAgICAgICAgICAgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmIGNvbHVtbi5lZGl0YWJsZSA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2lucHV0J1wiPlxuICAgICAgICAgICAgICAgIDxwLWRhdGVwaWNrZXJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkrJ19vYmonXT8uZXJyb3JNZXNzYWdlID8gJ25nLWludmFsaWQgbmctZGlydHknIDogJydcIlxuICAgICAgICAgICAgICAgICAgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiAob25DbG9zZSk9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIFttaW5EYXRlXT1cImNvbHVtbi5taW5EYXRlXCIgW21heERhdGVdPVwiY29sdW1uLm1heERhdGVcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgaG91ckZvcm1hdD1cIjEyXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJjb2x1bW4uc2hvd1RpbWVcIiAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiIFt0aW1lT25seV09XCJjb2x1bW4udGltZU9ubHlcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkID9cbiAgICAgICAgICAgICAgICAgIHJvd1tyb3dbY29sdW1uLmZpZWxkICsgJ19vYmonXT8uZGlzcGxheUZpZWxkLnRvTG93ZXJDYXNlKCldIDogcm93W2NvbHVtbi5maWVsZF0gPSAkZXZlbnRcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIj48L3AtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbj8uZmlsdGVyPy50eXBlID09PSAnY2FsZW5kYXInICYmICFjb2x1bW4uZWRpdGFibGVcIiBjbGFzcz1cImN1c3RvbS1saW5rXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93LmRpc2FibGVkICAgfHwgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkdyaWREaWFsb2coY29sdW1uLCByb3csICRldmVudClcIj57eyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmhpZGVGaWVsZFZhbHVlID8gJycgOlxuICAgICAgICAgICAgICAgIHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csIGNvbHVtbikgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b20tbGlua1wiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIiBwUmVvcmRlcmFibGVSb3dIYW5kbGVcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93LmRpc2FibGVkICAgfHwgYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdkaXNhYmxlZC1saW5rJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkdyaWREaWFsb2coY29sdW1uLCByb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiKGNvbHVtbi5pY29uIHx8IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbikgJiYgIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZUZpZWxkVmFsdWUgOyBlbHNlIG5vSWNvblwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sdW1uLmhvdmVyRGF0YSA/ICcnIDogY29sdW1uLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uIDogY29sdW1uLmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub0ljb24+e3sgcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5oaWRlRmllbGRWYWx1ZSA/ICcnIDogc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdyxcbiAgICAgICAgICAgICAgICAgIGNvbHVtbikgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwhLS0ge3sgc2V0Q29uZGl0aW9uQmFzZVZhbHVlKHJvdywgY29sdW1uKSB9fVxuICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXJvd1tjb2x1bW4uZmllbGQgKyAnX3NlY29uZFR5cGUnXSAmJiAhcm93LmhpZGVncmlkYnRuXCIgLS0+XG5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwhLS0gdGVzdCAtLT5cbiAgICAgICAgPCEtLSBsb29rdXAgSW5wdXQgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbG9va3VwX2lucHV0J1wiPlxuICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb24td3JhcHBlclwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIlxuICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiFpc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpXCIgdHlwZT1cInRleHRcIiBbbmdNb2RlbF09XCJsb29rdXBJbnB1dE5nTW9kZWwocm93LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImNoYW5nZUxvb2t1cElucHV0TmdNb2RlbChyb3csIGNvbHVtbiwgJGV2ZW50KVwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0xvb2t1cElucHV0RWRpdGFibGUoY29sdW1uLCByb3cpID8gb25DbGlja0V2ZW50KGNvbHVtbiwgcm93KSA6IHNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlRXZlbnQoY29sdW1uLCByb3cpXCIgKGtleWRvd24uZW50ZXIpPVwib25Mb29rdXBJbnB1dEVudGVyKCRldmVudCwgY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgIChwYXN0ZSk9XCJvbkxvb2t1cElucHV0UGFzdGUoJGV2ZW50LCBjb2x1bW4sIHJvdylcIiBbaWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KSA/ICdoaWRlLWJvcmRlcicgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICdwcmltZS1pbnB1dCdcIlxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiIFthdHRyLmF1dG9jb21wbGV0ZV09XCIoY29sdW1uLmF1dG9Db21wbGV0ZSA9PT0gZmFsc2UgfHwgYXV0b0NvbXBsZXRlID09PSBmYWxzZSkgPyAnb2ZmJyA6ICdvbidcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTG9va3VwSW5wdXRFZGl0YWJsZShjb2x1bW4sIHJvdykgJiYgKHJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5sb29rdXBDb250cm9sPy5jb21wb25lbnQgfHwgY29sdW1uLmxvb2t1cENvbnRyb2w/LmNvbXBvbmVudClcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktc2VhcmNoXCIgcEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNlbGVjdExvb2t1cEZpZWxkKGNvbHVtbiwgcm93KVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInJvd1tjb2x1bW4uZmllbGRdICYmIHR5cGVPZihyb3dbY29sdW1uLmZpZWxkXSkgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZF0udGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdICYmICFjb2x1bW4uZGlzYWJsZWRcIiBpY29uPVwicGkgcGktdGltZXNcIiBwQnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9va3VwQ2xlYXJWYWx1ZShjb2x1bW4scm93KVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29sdW1uLmxpbmtJZFwiPlxuICAgICAgICAgICAgICAgIDxhIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiIFtocmVmXT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIlxuICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJjb2x1bW4udGFyZ2V0ID09PSAnX3NlbGYnID8gJycgOiAgJ19ibGFuaydcIj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICBzZXRMb29rdXBSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCIgKm5nSWY9XCIhY29sdW1uLmxpbmtJZFwiIFtzdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2x1bW4ubG9va3VwQ29udHJvbD8uY29tcG9uZW50ICYmIGNvbHVtbi5lZGl0TGluayA9PT0gdHJ1ZSA/ICdjdXN0b20tbGluaycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Mb29rdXBIeXBlcmxpbmsoY29sdW1uLCByb3cpXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBzZXRMb29rdXBSZWFkT25seVZhbHVlKHJvdywgY29sdW1uKVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIE51bWVyaWMgSW5wdXQgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbnVtZXJpYydcIj5cbiAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgIDwhLS0gZm9yIEN1cnJlbmN5ICYmIERlY2ltYWwgJiYgUGVyY2VudCAtLT5cbiAgICAgICAgICAgICAgPHNwYW4gW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ2lucHV0J1wiIGNsYXNzPVwiaW5wdXQtbnVtYmVyXCI+XG4gICAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXIgI2dyaWROdW1lcmljSW5wdXQgW2lkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdykgPyAnaGlkZS1ib3JkZXInIDogJydcIiBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgcm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmctaW52YWxpZCBuZy1kaXJ0eSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Zvcm0tY29udHJvbCdcbiAgICAgICAgICAgICAgICAgICAgXCIgW3Nob3dCdXR0b25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W3Jvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUdyaWROdW1lcmljQ2hhbmdlKGNvbHVtbiwgcm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbi5maWVsZFwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgKG9uRm9jdXMpPVwib25Gb2N1c0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAob25CbHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAoa2V5ZG93bik9XCJoYW5kbGVHcmlkTnVtZXJpY0tleWRvd24oJGV2ZW50LCBjb2x1bW4sIHJvdylcIiBbbW9kZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdjdXJyZW5jeSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2RlY2ltYWwnXG4gICAgICAgICAgICAgICAgICAgIFwiIFtjdXJyZW5jeV09XCJcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC50eXBlID09PSAnY3VycmVuY3knICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdC5mb3JtYXRQYXJhbXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnVVNEJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbbG9jYWxlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdjdXJyZW5jeScgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQuZm9ybWF0UGFyYW1zLmxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4uZm9ybWF0LmZvcm1hdFBhcmFtcy5sb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2VuLVVTJ1xuICAgICAgICAgICAgICAgICAgICBcIiBbbWluRnJhY3Rpb25EaWdpdHNdPVwiY29sdW1uLmZvcm1hdCA/IHNldE51bWVyaWNNaW5GcmFjdGlvbihjb2x1bW4pIDogJzAnXCJcbiAgICAgICAgICAgICAgICAgIFttYXhGcmFjdGlvbkRpZ2l0c109XCJjb2x1bW4uZm9ybWF0ID8gc2V0TnVtZXJpY01heEZyYWN0aW9uKGNvbHVtbikgOiAnMCdcIiBbc3VmZml4XT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0LnR5cGUgPT09ICdwZXJjZW50JyAmJiBcbiAgICAgICAgICAgICAgICAgICAgICAgICclJ1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgIDwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvY2tlZF9maWVsZD48c3BhbiAqbmdJZj1cIiFyb3cuaXNOZXdcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJ3NlbGYnXCI+XG4gICAgICAgICAgICAgICAgICB7eyByb3dbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxheW91dC1maXhlZFwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICBzZXROdW1lcmljRm9ybWF0KGNvbHVtbiwgcm93KVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIEJ1dHRvbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidhZGRfYnV0dG9uJ1wiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIXJvdy5oaWRlZ3JpZGJ0blwiIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFtpY29uXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaWNvbiA6IGNvbHVtbi5pY29uXCJcbiAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uLmhlYWRlclwiIGNsYXNzPVwibWVyZ2UtYnRuXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgOiBjb2x1bW4udmFsdWVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImdyaWQtY29tcG9uZW50LWdyaWQtYWRkLWJ0blwiIChjbGljayk9XCJvbkNsaWNrQnV0dG9uKGNvbHVtbiwgcm93KVwiPjwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBHZW5lcmF0ZSBGaWxlIEJ1dHRvbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidnZW5lcmF0ZV9maWxlX2J1dHRvbidcIj5cbiAgICAgICAgICA8c2UtZ2VuZXJhdGUtaW1wb3J0LWZpbGVcbiAgICAgICAgICAgIFtsYWJlbF09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlUZXh0ID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA6IGNvbHVtbi52YWx1ZVwiXG4gICAgICAgICAgICBbaWNvbl09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gPyByb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/Lmljb24gOiBjb2x1bW4uaWNvblwiXG4gICAgICAgICAgICBbZGlhbG9nRGF0YV09XCJjb2x1bW4uZGF0YVwiIFtzZWxlY3RlZFJvd109XCJyb3dcIj48L3NlLWdlbmVyYXRlLWltcG9ydC1maWxlPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPCEtLSBTZW5kIGVtYWlsIEJ1dHRvbiBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidzZW5kX2VtYWlsX2J1dHRvbidcIj5cbiAgICAgICAgICA8c2UtZW1haWwtZ2VuZXJhdGUtYnRuXG4gICAgICAgICAgICBbbGFiZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5VGV4dCA/IHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheVRleHQgOiBjb2x1bW4udmFsdWVcIlxuICAgICAgICAgICAgW2ljb25dPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5pY29uIDogY29sdW1uLmljb25cIiBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICBbc2VsZWN0ZWRSb3ddPVwicm93XCI+PC9zZS1lbWFpbC1nZW5lcmF0ZS1idG4+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIERhdGUgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDwhLS0gY2FsZW5kYXIgc2VsZWN0b3IgLS0+XG4gICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIlxuICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhPyBudWxsOiBlZGl0QWxsUm93cyA/ICdpbnB1dCcgOiAnc2VsZicgXCI+XG4gICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT5cbiAgICAgICAgICAgICAgPHAtZGF0ZXBpY2tlciBbbWluRGF0ZV09XCJjb2x1bW4ubWluRGF0ZVwiIFttYXhEYXRlXT1cImNvbHVtbi5tYXhEYXRlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5ICcgKyBjb2x1bW4uZmllbGQgKyByb3dbZGF0YUtleV0gOiBjb2x1bW4uZmllbGQgKyByb3dbZGF0YUtleV1cIlxuICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgKG9uQ2xvc2UpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIGhvdXJGb3JtYXQ9XCIxMlwiIFtkZWZhdWx0RGF0ZV09XCJkZWZhdWx0RGF0ZVwiXG4gICAgICAgICAgICAgICAgW3N0ZXBNaW51dGVdPVwiY29sdW1uLm1pbnV0ZXNJbnRlcnZhbCA/IGNvbHVtbi5taW51dGVzSW50ZXJ2YWwgOiAxXCIgW3Nob3dUaW1lXT1cImNvbHVtbi5zaG93VGltZVwiXG4gICAgICAgICAgICAgICAgW3RpbWVPbmx5XT1cImNvbHVtbi50aW1lT25seVwiIFtkYXRlRm9ybWF0XT1cImNvbHVtbi5mb3JtYXQgPyBjb2x1bW4uZm9ybWF0LnR5cGUgOiBjYWxlbmRhckZvcm1hdFwiXG4gICAgICAgICAgICAgICAgKGtleXVwKT1cImNhbGVuZGFySW5wdXRWYWx1ZShjb2x1bW4sIHJvdylcIiAob25TaG93KT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uZGlzcGxheUZpZWxkID8gcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQgOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DYWxlbmRhck1vZGVsQ2hhbmdlKCRldmVudCwgcm93LCBjb2x1bW4pXCIgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgIFtzaG93QnV0dG9uQmFyXT1cIiFjb2x1bW4udGltZU9ubHlcIj48L3AtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYXlvdXQtZml4ZWQgd2hpdGUtc3BhY2Utbm93cmFwIHRleHQtY2VudGVyIGJvcmRlci1yZWFkb25seVwiPlxuICAgICAgICAgICAgICAgIHt7IHNldENvbmRpdGlvbkJhc2VWYWx1ZShyb3csY29sdW1uKSB9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICA8L3NwYW4+XG5cblxuICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgIDxzcGFuIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiPlxuICAgICAgICAgICAgPCEtLSBEcm9wZG93biBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInZHJvcGRvd24nXCIgW2NsYXNzXT1cImRyb3Bkb3duSW5wdXQgPyAnJyA6ICdvdXRwdXQtZHJvcGRvd24nXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cIiBjb2x1bW4uaG92ZXJEYXRhPyBudWxsOiBlZGl0QWxsUm93cyA/ICcucC1kcm9wZG93bi1sYWJlbCcgOiAnc2VsZidcIj5cbiAgICAgICAgICAgICAgPHAtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duICpuZ0lmPVwiIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZGVuXCIgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKydfZGF0YSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSsnX2RhdGEnXVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbHVtbi5kYXRhXG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgPyByb3dbcm93W2NvbHVtbi5maWVsZCsnX29iaiddPy5kaXNwbGF5RmllbGQudG9Mb3dlckNhc2UoKV0gOiByb3dbY29sdW1uLmZpZWxkXVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgPyByb3dbcm93W2NvbHVtbi5maWVsZCArICdfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6IHJvd1tjb2x1bW4uZmllbGRdID0gJGV2ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIiBbcGxhY2Vob2xkZXJdPVwicm93W2NvbHVtbi5kaXNwbGF5RmllbGRdXG4gICAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICA6IHJvd1tjb2x1bW4uZmllbGRdID8gcm93W2NvbHVtbi5maWVsZF0gOiAnU2VsZWN0J1wiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwicm93W2NvbHVtbi5maWVsZF0gPyB0cnVlIDogZmFsc2VcIiBbb3B0aW9uTGFiZWxdPVwiY29sdW1uLm9wdGlvbkxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFdmVudChjb2x1bW4sIHJvdylcIiBbb3B0aW9uVmFsdWVdPVwiY29sdW1uLm9wdGlvblZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgKGJsdXIpPVwib25Gb2N1c091dEV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIFthcHBlbmRUb109XCInYm9keSdcIiBbZmlsdGVyXT1cImNvbHVtbi5hbGxvd1NlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlck1hdGNoTW9kZT1cInN0YXJ0c1dpdGhcIj48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwib3V0cHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGF5b3V0LWZpeGVkIGJvcmRlci1yZWFkb25seVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJvd1tjb2x1bW4uZmllbGQrJ19vYmonXT8uaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJjb2x1bW4uZGlzcGxheUFzTGlua1wiIGNsYXNzPVwiY3VzdG9tLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiY29sdW1uLmRpc2FibGVkPycnOnJvd1tjb2x1bW4uZmllbGQgKyAnX29iaiddPy5oeXBlcmxpbmtcIiBbdGFyZ2V0XT0nY29sdW1uLnRhcmdldCc+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbHVtbi5kaXNwbGF5QXNMaW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBzZXREcm9wZHdvblJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPCEtLSBNdWx0aVNlbGVjdCBjb2x1bW4gb24gR3JpZCAtLT5cbiAgICAgICAgICAgIDwhLS0gWyhuZ01vZGVsKV09XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSA/IHJvd1tyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LmRpc3BsYXlGaWVsZC50b0xvd2VyQ2FzZSgpXSA6XG4gICAgICAgICAgICByb3dbY29sdW1uLmZpZWxkXVwiIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidtdWx0aS1zZWxlY3QnXCJcbiAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aXRsZS1lbGVtZW50XT1cImNvbHVtbi5ob3ZlckRhdGEgPyBudWxsIDogJy5wLW11bHRpc2VsZWN0LWxhYmVsJ1wiPlxuICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInJvd1tjb2x1bW4uZmllbGRdXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFsbG93RGlzYWJsZWQoY29sdW1uLHJvdylcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJyb3dbY29sdW1uLmZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX2RhdGEnXSA/IHJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSArICdfZGF0YSddIDogY29sdW1uLmRhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdPVwiY29sdW1uLm9wdGlvbkxhYmVsXCIgW29wdGlvblZhbHVlXT1cImNvbHVtbi5vcHRpb25WYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiIChvblBhbmVsU2hvdyk9XCJzaG93T3B0aW9uKGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRXZlbnQoY29sdW1uLCByb3cpXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiIChibHVyKT1cIm9uRm9jdXNPdXRFdmVudChjb2x1bW4sIHJvdylcIj5cbiAgICAgICAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sdW1uLmRpc3BsYXlGaWVsZF0gOlxuICAgICAgICAgICAgICAgICAgICBzZXRNdWx0aVNlbGVjdERhdGEoY29sdW1uLCByb3dbY29sdW1uLmZpZWxkXSlcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPCEtLSBBdXRvQ29tcGxldGUgU2VhcmNoIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidBdXRvQ29tcGxldGUnXCI+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8cC1hdXRvQ29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd1tjb2x1bW4uZmllbGQudG9Mb3dlckNhc2UoKSsnX29iaiddPy5lcnJvck1lc3NhZ2UgPyAnbmctaW52YWxpZCBuZy1kaXJ0eScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgW25hbWVdPVwiY29sdW1uLmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWdnZXN0aW9uc109XCJjb2x1bW4uZGF0YVwiIChvblNlbGVjdCk9XCJhdXRvQ29tcGxldGVTZWxlY3RlZFZhbHVlKHJvdywgY29sdW1uLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbHVtbi5vcHRpb25MYWJlbCA/IGNvbHVtbi5vcHRpb25MYWJlbD8udG9Mb3dlckNhc2UoKSA6IGNvbHVtbi5kaXNwbGF5RmllbGQgPyBjb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpIDogY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0QXV0b0NvbXBsZXRlTmdNb2RlbChyb3csIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJjaGFuZ2VBdXRvQ29tcGxldGVOZ01vZGVsKHJvdywgY29sdW1uLCAkZXZlbnQpXCIgW2Ryb3Bkb3duXT1cImNvbHVtbi5zaG93T3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGFuZ2VFdmVudChjb2x1bW4sIHJvdylcIiAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJhdXRvU2VhcmNoKCRldmVudCwgY29sdW1uLCByb3cpXCIgKG9uQmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWxsb3dEaXNhYmxlZChjb2x1bW4scm93KVwiIFthcHBlbmRUb109XCInYm9keSdcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uQXV0b0NvbXBsZXRlS2V5RW50ZXJFdmVudCgkZXZlbnQsIGNvbHVtbiwgcm93KVwiPlxuICAgICAgICAgICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJvdXRwdXRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93W2NvbHVtbi5maWVsZF0gJiYgcm93W2NvbHVtbi5maWVsZF1bMF0gJiYgIHJvd1tjb2x1bW4uZmllbGRdWzBdW2NvbHVtbi5kaXNwbGF5RmllbGRdXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiByb3dbY29sdW1uLmZpZWxkXTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdICYmIHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCA+IDEgPyByb3dbY29sdW1uLmZpZWxkXS5sZW5ndGggLTEgPT09IGkgP1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2NvbHVtbi5kaXNwbGF5RmllbGRdIDogdmFsdWVbY29sdW1uLmRpc3BsYXlGaWVsZF0gKyAnOycgOiB2YWx1ZVtjb2x1bW4uZGlzcGxheUZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvd1tjb2x1bW4uZmllbGRdICYmIHJvd1tjb2x1bW4uZmllbGRdWzBdICYmICByb3dbY29sdW1uLmZpZWxkXVswXVtjb2x1bW4uZmllbGRdICYmICFjb2x1bW4uZGlzcGxheUZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiByb3dbY29sdW1uLmZpZWxkXTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdICYmIHJvd1tjb2x1bW4uZmllbGRdLmxlbmd0aCA+IDEgPyByb3dbY29sdW1uLmZpZWxkXS5sZW5ndGggLTEgPT09IGkgP1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlW2NvbHVtbi5maWVsZF0gOiB2YWx1ZVtjb2x1bW4uZmllbGRdICsgJzsnIDogdmFsdWVbY29sdW1uLmZpZWxkXSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8IS0tIEFkZCBHZW5lcmF0ZSBSZXBvcnQgQnV0dG9uIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidyZXBvcnQnXCI+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gW3JlcEluZm9dPVwic2V0UmVwb3J0TmFtZShjb2x1bW4sIHJvdylcIiBbbGFiZWxdPVwiY29sdW1uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmFtc109XCJzZXRSZXBvcnRQYXJhbXMoY29sdW1uLCByb3cpXCIgW2NsYXNzXT1cImNvbHVtbi5jbGFzc1wiIFtzaG93RGlhbG9nXT1cImNvbHVtbi5zaG93RGlhbG9nXCJcbiAgICAgICAgICAgICAgICAgICAgW2ljb25dPVwiY29sdW1uLmljb25cIiBbcmVwb3J0VHlwZV09XCJjb2x1bW4ucmVwb3J0VHlwZVwiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNlLWdlbmVyYXRlLXJlcG9ydC1idG4gW3JlcEluZm9dPVwic2V0UmVwb3J0TmFtZShjb2x1bW4sIHJvdylcIiBbbGFiZWxdPVwiY29sdW1uLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmFtc109XCJzZXRSZXBvcnRQYXJhbXMoY29sdW1uLCByb3cpXCIgW2ljb25dPVwiY29sdW1uLmljb25cIiBbY2xhc3NdPVwiY29sdW1uLmNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dEaWFsb2ddPVwiY29sdW1uLnNob3dEaWFsb2dcIiBbcmVwb3J0VHlwZV09XCJjb2x1bW4ucmVwb3J0VHlwZVwiPjwvc2UtZ2VuZXJhdGUtcmVwb3J0LWJ0bj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L3AtY2VsbEVkaXRvcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdCBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnaW5wdXQnXCI+XG4gICAgICAgICAgICAgIDwhLS0gSW5wdXQgY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlID8gY29sdW1uLnN0eWxlIDogJ2Rpc3BsYXk6ZmxleCdcIj5cblxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgKm5nSWY9XCJjb2x1bW4uaXNUZXh0YXJlYSAmJiAoZWRpdEFsbFJvd3MgfHwgZWRpdGluZ1Jvd0tleXNbcm93W2RhdGFLZXldXSlcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicm93W2NvbHVtbi5maWVsZF1cIiBbYXR0ci5kYXRhLWNlbGxdPVwiY29sdW1uLmZpZWxkICsgJy0nICsgcm93W2RhdGFLZXldXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByaW1lLXRleHRhcmVhXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cInJlc2l6ZTogbm9uZTsgbWluLXdpZHRoOiAyMDBweDsgbWluLWhlaWdodDogNDBweDsgd29yZC1icmVhazogYnJlYWstd29yZDsgdGV4dC1hbGlnbjoganVzdGlmeTsgb3ZlcmZsb3c6IGhpZGRlbjtcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCIgKGJsdXIpPVwib25UZXh0YXJlYUJsdXIoY29sdW1uLCByb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvblRleHRhcmVhRW50ZXIoJGV2ZW50LCBjb2x1bW4sIHJvdylcIiBhdXRvZm9jdXM+PC90ZXh0YXJlYT5cblxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2x1bW4uaXNUZXh0YXJlYSAmJiAoZWRpdEFsbFJvd3MgfHwgZWRpdGluZ1Jvd0tleXNbcm93W2RhdGFLZXldXSkgJiYgIGNvbHVtbi5maWVsZCAhPT0gZGF0YUtleVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0VHlwZT9yb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHRUeXBlOmNvbHVtbi50ZXh0VHlwZT9jb2x1bW4udGV4dFR5cGU6J3RleHQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZC50b0xvd2VyQ2FzZSgpKydfb2JqJ10/LmVycm9yTWVzc2FnZSA/ICduZy1pbnZhbGlkIG5nLWRpcnR5JyA6ICdwcmltZS1pbnB1dCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpID8gJ2hpZGUtYm9yZGVyJyA6ICcnXCIgW25nTW9kZWxdPVwic2V0SW5wdXROZ01vZGVsKHJvdywgY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25JbnB1dENoYW5nZSgkZXZlbnQsIHJvdywgY29sdW1uKVwiIFtkaXNhYmxlZF09XCJhbGxvd0Rpc2FibGVkKGNvbHVtbixyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkZvY3VzT3V0RXZlbnQoY29sdW1uLCByb3cpXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUV2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tCdXR0b24oY29sdW1uLCByb3cpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhKGVkaXRBbGxSb3dzIHx8IGVkaXRpbmdSb3dLZXlzW3Jvd1tkYXRhS2V5XV0pXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgcm93W2NvbHVtbi5maWVsZF0gfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZmxvYXQ6cmlnaHRcIiAqbmdJZj1cImNvbHVtbi5mb3JtYXQ9PSdwYXNzd29yZCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwicm93W2NvbHVtbi5maWVsZCsnX29iaiddPyhyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10udGV4dFR5cGU9PSdwYXNzd29yZCc/J3BpIHBpLWV5ZSc6J3BpIHBpLWV5ZS1zbGFzaCcpOmNvbHVtbi50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGkgcGktZXllJzoncGkgcGktZXllLXNsYXNoJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGFzc3dvcmRUeXBlKGNvbHVtbiwgcm93KVwiIFt0aXRsZV09XCJjb2x1bW4uaGVhZGVyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvY2tlZF9maWVsZD48c3BhbiAqbmdJZj1cIiFyb3cuaXNOZXdcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGl0bGUtZWxlbWVudF09XCJjb2x1bW4uaG92ZXJEYXRhID8gbnVsbCA6ICdzZWxmJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHJvd1tjb2x1bW4uZmllbGRdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxheW91dC1maXhlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbc3R5bGVdPVwiY29sdW1uLnN0eWxlID8gY29sdW1uLnN0eWxlIDogJ2Rpc3BsYXk6ZmxleCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25DbGlja0V2ZW50KGNvbHVtbiwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRpdGxlLWVsZW1lbnRdPVwiY29sdW1uLmhvdmVyRGF0YSA/IG51bGwgOiAnc2VsZicgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/LnRleHRUeXBlID8ocm93W2NvbHVtbi5maWVsZCsnX29iaiddPy50ZXh0VHlwZT09J3Bhc3N3b3JkJyAgPydwYXNzd29yZCc6JycpIDpjb2x1bW4udGV4dFR5cGU9PSdwYXNzd29yZCc/J3Bhc3N3b3JkJzonJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgc2V0VGV4dEJveFJlYWRPbmx5VmFsdWUocm93LCBjb2x1bW4pIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZmxvYXQ6cmlnaHRcIiAqbmdJZj1cImNvbHVtbi5mb3JtYXQ9PSdwYXNzd29yZCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJyb3dbY29sdW1uLmZpZWxkKydfb2JqJ10/KHJvd1tjb2x1bW4uZmllbGQrJ19vYmonXS50ZXh0VHlwZT09J3Bhc3N3b3JkJz8ncGkgcGktZXllJzoncGkgcGktZXllLXNsYXNoJyk6Y29sdW1uLnRleHRUeXBlPT0ncGFzc3dvcmQnPydwaSBwaS1leWUnOidwaSBwaS1leWUtc2xhc2gnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImNvbHVtbi5oZWFkZXJcIiAoY2xpY2spPVwiY2hhbmdlUGFzc3dvcmRUeXBlKGNvbHVtbiwgcm93KVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8IS0tIEdyaWQgUm93cyBEYXRhIEJpbmRpbmdzIEVuZCAtLT5cblxuICAgICAgICA8IS0tIE1vcmUgYWN0aW9ucyBjb2x1bW4gKGVsbGlwc2lzKSAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwiaGFzTW9yZUl0ZW1zKHJvdylcIiBjbGFzcz1cImZvci1tb3JlLWFjdGlvbnNcIj5cbiAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1lbGxpcHNpcy12XCIgY2xhc3M9XCJwLWJ1dHRvbi10ZXh0XCIgKGNsaWNrKT1cInNob3dNb3JlKCRldmVudCwgcm93KVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiTW9yZSBhY3Rpb25zXCI+PC9idXR0b24+XG4gICAgICAgIDwvdGQ+XG5cbiAgICAgICAgPCEtLSBBY3Rpb24gY29sdW1uIG9uIEdyaWQgLS0+XG4gICAgICAgIDwhLS0gPHRkICpuZ0lmPVwiIXNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgY29sdW1ucz8ubGVuZ3RoID4gMCAmJiBjb2x1bW5BY3Rpb25zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgIGNsYXNzPVwiZm9yLWJ1dHRvbnNcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWJ0blwiICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgY29sdW1uQWN0aW9uc1wiPlxuICAgICAgICAgICAgPGkgW3RpdGxlXT1cImFjdGlvbi50b29sdGlwXCIgW2NsYXNzXT1cImFjdGlvbi5pY29uXCIgKGNsaWNrKT1cImhhbmRsZUFjdGlvbkNsaWNrKCRldmVudCwgYWN0aW9uLCByb3cpXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC90ZD4gLS0+XG4gICAgICAgIDx0ZCAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgY29sdW1uQWN0aW9ucy5sZW5ndGggPiAwXCIgY2xhc3M9XCJmb3ItYnV0dG9uc1wiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGNvbHVtbkFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWN0aW9uLWJ0blwiICpuZ0lmPVwiYWN0aW9uLnZpc2libGUgPyBhY3Rpb24udmlzaWJsZShyb3cpIDogdHJ1ZVwiPlxuICAgICAgICAgICAgICA8aSBbdGl0bGVdPVwiYWN0aW9uLnRvb2x0aXBcIiBbY2xhc3NdPVwiYWN0aW9uLmljb25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3Rpb24tYnRuLWRpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZCA/IGFjdGlvbi5kaXNhYmxlZChyb3cpIDogZmFsc2VcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIoYWN0aW9uLmRpc2FibGVkICYmIGFjdGlvbi5kaXNhYmxlZChyb3cpKSA/IG51bGwgOiBoYW5kbGVBY3Rpb25DbGljaygkZXZlbnQsIGFjdGlvbiwgcm93KVwiPjwvaT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkXG4gICAgICAgICAgKm5nSWY9XCIhc2V0QWN0aW9uQ29sdW1uQXNGaXJzdCAmJiBjb2x1bW5zPy5sZW5ndGggPiAwICYmIHVzZUlubGluZUNSVUQgJiYgKGRlbGV0ZVJvd1Blcm1pc3Npb24gfHwgZWRpdFJvd1Blcm1pc3Npb24pXCJcbiAgICAgICAgICBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIiBjbGFzcz1cImZvci1idXR0b25zXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJkaXNhYmxlZFNhdmVCdG4gPyAnaGlkZS1jbGVhci1maWx0ZXItYnV0dG9uJyA6ICcnXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9J3NldEFjdGlvbkNvbHVtbldpZHRoJz5cbiAgICAgICAgICAgIDxzZS1ncmlkLXJvdy1hY3Rpb25zIFtlZGl0aW5nXT1cImVkaXRpbmdcIiBbZWRpdFJvd1Blcm1pc3Npb25dPVwiZWRpdFJvd1Blcm1pc3Npb25cIlxuICAgICAgICAgICAgICBbZGVsZXRlUm93UGVybWlzc2lvbl09XCJkZWxldGVSb3dQZXJtaXNzaW9uXCIgW2hpZGVEZWxldGVCdG5dPVwiaGlkZURlbGV0ZUJ0blwiIFtoaWRlRWRpdEJ0bl09XCJoaWRlRWRpdEJ0blwiXG4gICAgICAgICAgICAgIFtyb3ddPVwicm93XCIgKG9uUm93RWRpdEluaXRCdG4pPVwib25Sb3dFZGl0SW5pdCgkZXZlbnQpXCIgKGRlbGV0ZVJlY29yZEJ0bik9XCJkZWxldGVSZWNvcmQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChvblJvd0VkaXRTYXZlQnRuKT1cIm9uUm93RWRpdFNhdmUoJGV2ZW50KVwiIChvblJvd0VkaXRDYW5jZWxCdG4pPVwib25Sb3dFZGl0Q2FuY2VsKCRldmVudCwgcmkpXCJcbiAgICAgICAgICAgICAgW2VkaXRBbGxSb3dzXT1cImVkaXRBbGxSb3dzXCI+XG4gICAgICAgICAgICA8L3NlLWdyaWQtcm93LWFjdGlvbnM+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBGb290ZXIgY29sdW1ucyBvbiBHcmlkIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICAgIDx0ciAqbmdJZj1cImFnZ3JlZ2F0ZUZvb3RlclwiPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cInNldEFjdGlvbkNvbHVtbkFzRmlyc3QgJiYgKGNvbHVtbkFjdGlvbnMubGVuZ3RoID4gMCB8fCAodXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbikpKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImluRWRpdE1vZGUgPyAndGhyZWUtYWN0aW9uLWJ0bicgOiAndHdvLWFjdGlvbi1idG4nXCI+PC90ZD5cbiAgICAgICAgPHRkICpuZ0lmPVwiYWxsb3dTZWxlY3Rpb25cIiBbY2xhc3NdPVwiaW5FZGl0TW9kZSA/ICd0aHJlZS1hY3Rpb24tYnRuJyA6ICd0d28tYWN0aW9uLWJ0bidcIj48L3RkPlxuICAgICAgICA8dGQgKm5nRm9yPVwibGV0IG91dGVyQ29sdW1uIG9mIHNlbGVjdGVkQ29sdW1uc1wiIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQtb3V0ZXItY29sdW1uXCIgW3N0eWxlXT1cIm91dGVyQ29sdW1uLnN0eWxlXCI+XG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaW5uZXJDb2x1bW4gb2Ygc2VsZWN0ZWRDb2x1bW5zXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhZ2dyIG9mIGlubmVyQ29sdW1uPy5hZ2dyZWdhdGVcIj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFnZ3IuYWdnclZhbHVlPy5sZW5ndGggJiYgKCghYWdnci5kaXNwbGF5RmllbGQgJiYgaW5uZXJDb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IG91dGVyQ29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgICAgICAgICAgICAgYWdnci5kaXNwbGF5RmllbGQgJiYgYWdnci5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IG91dGVyQ29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJhZ2dyLmFnZ3JWYWx1ZVwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGRcbiAgICAgICAgICAqbmdJZj1cIiFzZXRBY3Rpb25Db2x1bW5Bc0ZpcnN0ICYmIGNvbHVtbnM/Lmxlbmd0aCA+IDAgJiYgdXNlSW5saW5lQ1JVRCAmJiAoZGVsZXRlUm93UGVybWlzc2lvbiB8fCBlZGl0Um93UGVybWlzc2lvbilcIlxuICAgICAgICAgIFtjbGFzc109XCJpbkVkaXRNb2RlID8gJ3RocmVlLWFjdGlvbi1idG4nIDogJ3R3by1hY3Rpb24tYnRuJ1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWRTYXZlQnRuID8gJ2hpZGUtY2xlYXItZmlsdGVyLWJ1dHRvbicgOiAnJ1wiPjwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIEZvb3RlciBmb3IgRW1wdHkgTWVzc2FnZSBjb2x1bW5zIG9uIEdyaWQgLS0+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5bWVzc2FnZVwiPlxuICAgICAgPHRyIGNsYXNzPVwiZ3JpZC1jb21wb25lbnQgbm8tcmVjb3Jkcy1mb3VuZFwiPlxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJzZWxlY3RlZENvbHVtbnM/Lmxlbmd0aCArIDFcIj57e3RvdGFsUmVjb3Jkcz09MD8gJ05vIHJlY29yZHMgZm91bmQnOicnfX08L3RkPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3AtdGFibGU+XG4gIDxwLW92ZXJsYXlQYW5lbCBbc3R5bGVdPVwib3ZlcmxheVBhbmVsU3R5bGVcIiAjb3ZlcmxheVBhbmVsPlxuICAgIDxuZy1jb250YWluZXIgI3ZpZXdDb250YWluZXJSZWY+PC9uZy1jb250YWluZXI+XG4gIDwvcC1vdmVybGF5UGFuZWw+XG4gIDxwLW1lbnUgI21vcmVNZW51IFtwb3B1cF09XCJ0cnVlXCIgW21vZGVsXT1cImN1cnJlbnRNb3JlTWVudVwiIGFwcGVuZFRvPVwiYm9keVwiIHN0eWxlQ2xhc3M9XCJncmlkLW1vcmUtbWVudVwiPjwvcC1tZW51PlxuPC9kaXY+XG4iXX0=
|