@universis/ngx-tables 6.13.4 → 6.13.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/universis-ngx-tables.umd.js +88 -8
- package/bundles/universis-ngx-tables.umd.js.map +1 -1
- package/bundles/universis-ngx-tables.umd.min.js +1 -1
- package/bundles/universis-ngx-tables.umd.min.js.map +1 -1
- package/esm2015/lib/components/advanced-aggregator/advanced-aggregator.component.js +6 -3
- package/esm2015/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +6 -3
- package/esm2015/lib/components/advanced-table/advanced-table.component.js +31 -4
- package/esm2015/lib/components/advanced-table/advanced-table.formatters.interface.js +6 -31
- package/esm2015/lib/components/advanced-table/custom-button.formatter.js +45 -0
- package/esm2015/universis-ngx-tables.js +5 -4
- package/esm5/lib/components/advanced-aggregator/advanced-aggregator.component.js +6 -3
- package/esm5/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +6 -3
- package/esm5/lib/components/advanced-table/advanced-table.component.js +31 -4
- package/esm5/lib/components/advanced-table/advanced-table.formatters.interface.js +6 -31
- package/esm5/lib/components/advanced-table/custom-button.formatter.js +56 -0
- package/esm5/universis-ngx-tables.js +5 -4
- package/fesm2015/universis-ngx-tables.js +77 -7
- package/fesm2015/universis-ngx-tables.js.map +1 -1
- package/fesm5/universis-ngx-tables.js +87 -8
- package/fesm5/universis-ngx-tables.js.map +1 -1
- package/lib/components/advanced-aggregator/advanced-aggregator.component.d.ts +2 -1
- package/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.d.ts +2 -1
- package/lib/components/advanced-table/advanced-table.component.d.ts +3 -2
- package/lib/components/advanced-table/advanced-table.formatters.interface.d.ts +5 -17
- package/lib/components/advanced-table/custom-button.formatter.d.ts +11 -0
- package/package.json +1 -1
- package/universis-ngx-tables.d.ts +5 -4
- package/universis-ngx-tables.metadata.json +1 -1
|
@@ -226,6 +226,7 @@ var AdvancedTableComponent = /** @class */ (function () {
|
|
|
226
226
|
this.height = 800;
|
|
227
227
|
this.showActions = true;
|
|
228
228
|
this.autoLoad = true;
|
|
229
|
+
this.customEvent = new EventEmitter();
|
|
229
230
|
this.load = new EventEmitter();
|
|
230
231
|
this.init = new EventEmitter();
|
|
231
232
|
this.reload = new EventEmitter();
|
|
@@ -888,7 +889,7 @@ var AdvancedTableComponent = /** @class */ (function () {
|
|
|
888
889
|
function (cell, cellData, rowData, rowIndex, colIndex) {
|
|
889
890
|
items_1.forEach(function (columnFormatter) {
|
|
890
891
|
/** @type {?} */
|
|
891
|
-
var formatter = self._columnFormatters[columnFormatter.formatter];
|
|
892
|
+
var formatter = /** @type {?} */ ((self._columnFormatters[columnFormatter.formatter]));
|
|
892
893
|
if (formatter && typeof formatter.afterRender === 'function') {
|
|
893
894
|
formatter.afterRender.bind(column)(cell, cellData, rowData, rowIndex, colIndex);
|
|
894
895
|
}
|
|
@@ -905,12 +906,14 @@ var AdvancedTableComponent = /** @class */ (function () {
|
|
|
905
906
|
render: formatter.render.bind(column),
|
|
906
907
|
});
|
|
907
908
|
}
|
|
908
|
-
|
|
909
|
+
/** @type {?} */
|
|
910
|
+
var afterRenderFormatter = /** @type {?} */ ((formatter));
|
|
911
|
+
if (afterRenderFormatter && typeof afterRenderFormatter.afterRender === 'function') {
|
|
909
912
|
Object.assign(columnDefinition, {
|
|
910
913
|
render: formatter.render.bind(column),
|
|
911
914
|
});
|
|
912
915
|
Object.assign(columnDefinition, {
|
|
913
|
-
createdCell:
|
|
916
|
+
createdCell: afterRenderFormatter.afterRender.bind(column),
|
|
914
917
|
});
|
|
915
918
|
}
|
|
916
919
|
}
|
|
@@ -1478,6 +1481,9 @@ var AdvancedTableComponent = /** @class */ (function () {
|
|
|
1478
1481
|
}
|
|
1479
1482
|
if (this.selectable) {
|
|
1480
1483
|
}
|
|
1484
|
+
if (this.dataTable) {
|
|
1485
|
+
this.dataTable.destroy();
|
|
1486
|
+
}
|
|
1481
1487
|
// handle init.dt event and emit local event
|
|
1482
1488
|
this.dataTable = tableElement_1.on('init.dt', function (event) {
|
|
1483
1489
|
/** @type {?} */
|
|
@@ -1523,6 +1529,24 @@ var AdvancedTableComponent = /** @class */ (function () {
|
|
|
1523
1529
|
infoSelector.classList.add('d-none');
|
|
1524
1530
|
}
|
|
1525
1531
|
}
|
|
1532
|
+
/** @type {?} */
|
|
1533
|
+
var onCustomEvent = function (event) {
|
|
1534
|
+
/** @type {?} */
|
|
1535
|
+
var target = /** @type {?} */ (event.currentTarget);
|
|
1536
|
+
/** @type {?} */
|
|
1537
|
+
var customEvent = target.dataset["event"] || 'event';
|
|
1538
|
+
/** @type {?} */
|
|
1539
|
+
var row = _this.dataTable.row(target.closest('tr'));
|
|
1540
|
+
/** @type {?} */
|
|
1541
|
+
var data = row.data();
|
|
1542
|
+
_this.customEvent.emit({
|
|
1543
|
+
name: customEvent,
|
|
1544
|
+
data: data,
|
|
1545
|
+
row: row.index()
|
|
1546
|
+
});
|
|
1547
|
+
};
|
|
1548
|
+
this.dataTable.off('click', '.dt-custom');
|
|
1549
|
+
this.dataTable.on('click', '.dt-custom', onCustomEvent);
|
|
1526
1550
|
// show or hide pager
|
|
1527
1551
|
if (this.showPaging) {
|
|
1528
1552
|
this.showPaging = true;
|
|
@@ -2140,6 +2164,7 @@ var AdvancedTableComponent = /** @class */ (function () {
|
|
|
2140
2164
|
height: [{ type: Input }],
|
|
2141
2165
|
showActions: [{ type: Input }],
|
|
2142
2166
|
autoLoad: [{ type: Input }],
|
|
2167
|
+
customEvent: [{ type: Output, args: ['customEvent',] }],
|
|
2143
2168
|
load: [{ type: Output, args: ['load',] }],
|
|
2144
2169
|
init: [{ type: Output, args: ['init',] }],
|
|
2145
2170
|
reload: [{ type: Input, args: ['reload',] }],
|
|
@@ -2219,6 +2244,8 @@ if (false) {
|
|
|
2219
2244
|
/** @type {?} */
|
|
2220
2245
|
AdvancedTableComponent.prototype.autoLoad;
|
|
2221
2246
|
/** @type {?} */
|
|
2247
|
+
AdvancedTableComponent.prototype.customEvent;
|
|
2248
|
+
/** @type {?} */
|
|
2222
2249
|
AdvancedTableComponent.prototype.load;
|
|
2223
2250
|
/** @type {?} */
|
|
2224
2251
|
AdvancedTableComponent.prototype.init;
|
|
@@ -2362,4 +2389,4 @@ if (false) {
|
|
|
2362
2389
|
// return ('<span align="left""><strong>'+ group + ' ' + `(${totalHeader} ` + count.length + ')</strong></span>'); };
|
|
2363
2390
|
export { ɵ0 };
|
|
2364
2391
|
|
|
2365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUFFLFlBQVksRUFDeEIsTUFBTSxFQUNOLGNBQWMsRUFDZCxRQUFRLEVBQ1IsS0FBSyxFQUNHLE1BQU0sRUFDZCxTQUFTLEVBQ1QsaUJBQWlCLEVBSWpCLFdBQVcsRUFDWCxnQkFBZ0IsRUFFakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQWUsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUN4RCxZQUFZLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR2pHLE9BQU8sS0FBSyxPQUFPLE1BQU0sUUFBUSxDQUFDO0FBQ2xDLE9BQU8sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFP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e1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIEluamVjdG9yLFxuICBJbnB1dCwgT25EZXN0cm95LFxuICBPbkluaXQsIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBDb250ZW50Q2hpbGQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBBZnRlclZpZXdJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBbmd1bGFyRGF0YUNvbnRleHR9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHtUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1RhYmxlQ29uZmlndXJhdGlvbn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcbmltcG9ydCB7RGF0YVNlcnZpY2VRdWVyeVBhcmFtc30gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJ9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycyc7XG5pbXBvcnQge0NsaWVudERhdGFRdWVyeWFibGV9IGZyb20gJ0B0aGVtb3N0L2NsaWVudCc7XG5pbXBvcnQge0FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcn0gZnJvbSAnLi9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbiwgQmVoYXZpb3JTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7VGVtcGxhdGVQaXBlLCBMb2FkaW5nU2VydmljZSwgQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gIE1vZGFsU2VydmljZSwgRElBTE9HX0JVVFRPTlMsIEVycm9yU2VydmljZSwgRXhwb3J0U3ByZWFkc2hlZXRTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge0lBZHZhbmNlZFRhYmxlRm9ybWF0dGVyc30gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZSc7XG4vLyBpbXBvcnRhbnQgbm90ZTogdXNlIHRoaXMgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmltcG9ydCAqIGFzIGpRdWVyeV8gZnJvbSAnanF1ZXJ5JztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQnO1xuaW1wb3J0IHt0ZW1wbGF0ZX0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQtcm93Z3JvdXAnOyAvLyB0aGlzIHBsdWdpbiBpbXBvcnQgbGluZSBtdXN0IGNvbWUgYmVmb3JlIHRoZSBmb2xsb3dpbmcgZGF0YXRhYmxlcyBwbHVnaW4gaW1wb3J0c1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1zY3JvbGxlcic7XG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LWNvbHJlb3JkZXInO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1idXR0b25zJztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQtZml4ZWRjb2x1bW5zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uLCBNQVhfRVhQT1JUX0lURU1TIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcblxuLy8gcmVzdG9yZSBqcXVlcnkgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmNvbnN0IGpRdWVyeSA9IGpRdWVyeV87XG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IHtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNGaWx0ZXJlZDogbnVtYmVyO1xuICBkYXRhOiBBcnJheTxhbnk+O1xufVxuXG5jb25zdCBEYXRhVGFibGVzQXBpOiBhbnkgPSBqUXVlcnkuZm4uZGF0YVRhYmxlLkFwaTtcbkRhdGFUYWJsZXNBcGkucmVnaXN0ZXIoICdwcm9jZXNzaW5nKCknLCBmdW5jdGlvbiggc2hvdzogYW55ICkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCd0YWJsZScsICggY3R4OiBhbnkgKSA9PiB7XG4gICAgICAgIGN0eC5vQXBpLl9mblByb2Nlc3NpbmdEaXNwbGF5KCBjdHgsIHNob3cgKTtcbiAgICB9ICk7XG59KTtcblxuY29uc3QgRU1QVFlfREFUQVNFVCA9IHtcbiAgcmVjb3Jkc1RvdGFsOiAwLFxuICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gIGRhdGE6IFtdLFxufTtcblxuY2xhc3MgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBwdWJsaWMgY2hlY2tOb0NoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZGV0YWNoKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgbWFya0ZvckNoZWNrKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHJlYXR0YWNoKCk6IHZvaWQge1xuICB9XG5cbn1cblxuZXhwb3J0IGxldCBDT0xVTU5fRk9STUFUVEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignY29sdW1uLmZvcm1hdHRlcnMnKTtcblxuZXhwb3J0IGNsYXNzIEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIFJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yJztcbiAgfVxufVxuXG5jbGFzcyBDb2x1bW5Gb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGNsYXNzPzogc3RyaW5nO1xuICBwdWJsaWMgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgZGVmYXVsdENvbnRlbnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXRTdHJpbmc/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXR0ZXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW4/OiBib29sZWFuO1xuICBwdWJsaWMgbmFtZT86IHN0cmluZztcbiAgcHVibGljIG9yZGVyPzogc3RyaW5nO1xuICBwdWJsaWMgcHJvcGVydHk/OiBzdHJpbmc7XG4gIHB1YmxpYyBzb3J0YWJsZT86IGJvb2xlYW47XG4gIHB1YmxpYyB0aXRsZSA9ICcnO1xuXG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBhbnksIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAvL1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlQ2FzdDxUPihpbnB1dDogYW55KTogVCB7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBjYXN0KGlucHV0OiBhbnksIGNsb25lPzogYm9vbGVhbik6IFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKGNsb25lKSB7XG4gICAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KGlucHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYW5kb21JZGVudGlmaWVyKCkge1xuICByZXR1cm4gKFxuICAgIE51bWJlcihTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMikpXG4gICkudG9TdHJpbmcoMzYpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0YWJsZSAjdGFibGUgY2xhc3M9XCJkYXRhVGFibGVcIj5cbiAgICA8L3RhYmxlPlxuICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjZXJyb3JUZW1wbGF0ZSBjbGFzcz1cImQtbm9uZSBlcnJvci1tZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZGFuZ2VyIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LXNlY29uZGFyeVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1zZWNvbmRhcnkgbWItMVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtc2Vjb25kYXJ5IGVycm9yLWlubmVyLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxzbWFsbD48L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuXG4gIHByaXZhdGUgX3F1ZXJ5PzogQ2xpZW50RGF0YVF1ZXJ5YWJsZTtcbiAgcHJpdmF0ZSBfY29uZmlnPzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dIZWFkZXIgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93UGFnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2lkID0gZ2V0UmFuZG9tSWRlbnRpZmllcigpO1xuICBwdWJsaWMgc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgcHVibGljIGNvbmZpZ0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGUnKSBwdWJsaWMgdGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgcHVibGljIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlcnJvclRlbXBsYXRlJykgcHVibGljIGVycm9yVGVtcGxhdGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlPzogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgcHVibGljIGhlaWdodCA9IDgwMDtcbiAgQElucHV0KCkgcHVibGljIHNob3dBY3Rpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQE91dHB1dCgnbG9hZCcpIHB1YmxpYyBsb2FkOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRUYWJsZURhdGFSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4oKTtcbiAgQE91dHB1dCgnaW5pdCcpIHB1YmxpYyBpbml0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoJ3JlbG9hZCcpIHB1YmxpYyByZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdCcpIHB1YmxpYyBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2RyYXcnKSBwdWJsaWMgZHJhdzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgncGFnZScpIHB1YmxpYyBwYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdvcmRlcicpIHB1YmxpYyBvcmRlcjogRXZlbnRFbWl0dGVyPGFueVtdW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXVtdPigpO1xuICBAT3V0cHV0KCdzY3JvbGwnKSBwdWJsaWMgc2Nyb2xsOiBFdmVudEVtaXR0ZXI8eyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0ZWRJdGVtcycpIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdiZWZvcmVTZXJ2ZXJEYXRhJykgcHVibGljIGJlZm9yZVNlcnZlckRhdGE6IEV2ZW50RW1pdHRlcjxDbGllbnREYXRhUXVlcnlhYmxlPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2xpZW50RGF0YVF1ZXJ5YWJsZT4oKTtcbiAgQE91dHB1dCgnYWZ0ZXJTZXJ2ZXJEYXRhJykgcHVibGljIGFmdGVyU2VydmVyRGF0YTogRXZlbnRFbWl0dGVyPHsgc2tpcD86IG51bWJlciwgdG90YWw/OiBudW1iZXIsIHZhbHVlOiBhbnlbXX0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNraXA/OiBudW1iZXIsIHRvdGFsPzogbnVtYmVyLCB2YWx1ZTogYW55W119PigpO1xuICBAT3V0cHV0KCdsb2FkaW5nJykgcHVibGljIGxvYWRpbmc6IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+KCk7XG4gIEBPdXRwdXQoJ3Nob3dEZXRhaWxzJykgcHVibGljIHNob3dEZXRhaWxzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdoaWRlRGV0YWlscycpIHB1YmxpYyBoaWRlRGV0YWlsczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsYWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXJ2ZXJTaWRlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGxlbmd0aE1lbnUgPSBbNTAsIDEwMCwgMjAwLCA1MDBdO1xuICBASW5wdXQoKSBwdWJsaWMgcGFnaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2VMZW5ndGggPSAyNTtcbiAgQElucHV0KCkgcHVibGljIGNvbHVtbk9yZGVyaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmUgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHN0YXRlTG9hZENhbGxiYWNrPzogKHNldHRpbmdzOiBhbnksIGNhbGxiYWNrOiAoc3RhdGU6IGFueSkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgQElucHV0KCkgcHVibGljIHN0YXRlU2F2ZUNhbGxiYWNrPzogKHNldHRpbmdzOiBhbnksIHN0YXRlOiBhbnkpID0+IHZvaWQ7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbFkgPSA4MDA7XG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxYID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEVuYWJsZXMgcm93IHNlbGVjdGlvbi4gVGhlIGRlZmF1bHIgdmFsdWUgaXMgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkID0gZmFsc2U7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGUgbXVsdGlwbGUgc2VsZWN0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZXMgaXMgdHJ1ZS5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBtdWx0aXBsZVNlbGVjdDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIGN1c3RvbSBzZWxlY3Rpb24gYW5kIGhpZGVzIHNlbGVjdCBjb2x1bW4uIFRoZSBkZWZhdWx0IHZhbHVlIGlzICBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGN1c3RvbVNlbGVjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWQ6IGFueVtdID0gW107XG4gIHB1YmxpYyB1bnNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgVVJMIHRvIGxvYWQgdGFibGUgY29uZmlndXJhdGlvbiBmcm9tXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY29uZmlnU3JjPzogc3RyaW5nO1xuICBwdWJsaWMgbGFzdEVycm9yOiBhbnk7XG5cbiAgLyoqXG4gICAqIEFjY2VwdHMgYXJyYXkgb2YgcHJvcGVydGllcyBhcyByb3cgZ3JvdXAgZmFjdG9ycyBhbmQgZGlzcGxheXMgZ3JvdXBlZCB0YWJsZS5cbiAgICovXG4gIEBJbnB1dCgpIHJvd0dyb3VwOiAgc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0Um93R3JvdXBPcmRlcj86IHsgY29sdW1uOiBudW1iZXI7IGRpcmVjdGlvbjogc3RyaW5nOyB9IHwgbnVsbDtcblxuICBASW5wdXQoKSBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGZvb3RlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgcHJpdmF0ZSBkZXRhaWxzVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdoZWFkZXInKSBoZWFkZXI/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdmb290ZXInKSBmb290ZXI/OiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGFibGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogVGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gICAgLy8gcmFpc2Ugc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5jb25maWdDaGFuZ2VzLm5leHQodGhpcy5fY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgVGFibGVDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBsYXN0UXVlcnlUb3RhbEl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dGb290ZXInKVxuICBwdWJsaWMgc2V0IHNob3dGb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93Rm9vdGVyID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93Rm9vdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICAgQElucHV0KCdzaG93SGVhZGVyJylcbiAgIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICB0aGlzLl9zaG93SGVhZGVyID0gdmFsdWU7XG4gICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGNvbnN0IGRhdGFUYWJsZSA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgaWYgKGRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgICB9XG4gICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gYWRkIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QucmVtb3ZlKCdtdC0yJyk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICAvLyByZW1vdmUgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cblxuICAgcHVibGljIGdldCBzaG93SGVhZGVyKCkge1xuICAgICByZXR1cm4gdGhpcy5fc2hvd0hlYWRlcjtcbiAgIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcGFnaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd1BhZ2luZycpXG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dQYWdpbmcgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19wYWdpbmF0ZScpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93UGFnaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93UGFnaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBhY3RpdmUgcXVlcnkgZm9yIHRoaXMgdGFibGVcbiAgICovXG4gIEBJbnB1dCgncXVlcnknKVxuICBwdWJsaWMgc2V0IHF1ZXJ5KHZhbHVlOiBDbGllbnREYXRhUXVlcnlhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcXVlcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5IGFzIENsaWVudERhdGFRdWVyeWFibGU7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRlUGlwZTtcbiAgcHVibGljIGRhdGFUYWJsZTogYW55O1xuICBwdWJsaWMgZHRPcHRpb25zOiBhbnk7XG4gIHByaXZhdGUgbGFzdFF1ZXJ5UGFyYW1zPzogRGF0YVNlcnZpY2VRdWVyeVBhcmFtcztcbiAgcHJpdmF0ZSBfbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgIEBJbmplY3QoQ09MVU1OX0ZPUk1BVFRFUlMpIHByaXZhdGUgX2NvbHVtbkZvcm1hdHRlcnM6IElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nOiBMb2FkaW5nU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29sdW1uU2VsZWN0b3I6IENvbHVtblNlbGVjdG9yU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2V4cG9ydFNwcmVhZHNoZWV0OiBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuICAgIC8vIGluaXRpYWxpemUgdHJhbnNsYXRlIHBpcGVcbiAgICB0aGlzLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRlUGlwZSh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLCBuZXcgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yKCkpO1xuICAgIGpRdWVyeS5mbi5kYXRhVGFibGUuZXh0LmNsYXNzZXMuc1BhZ2VCdXR0b24gPSAnYnRuJztcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uQWN0aXZlID0gJ2J0biBidG4tbGlnaHQnO1xuICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5yZWxvYWQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmZldGNoKCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzaW1wbGUgc2VhcmNoXG4gIHB1YmxpYyBzZWFyY2goc2VhcmNoVGV4dCkge1xuICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5IHx8IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZSkge1xuICAgICAgaWYgKHNlYXJjaFRleHQgJiYgdGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbikge1xuICAgICAgICAvLyB2YWxpZGF0ZSBzZWFyY2ggdGV4dCBpbiBkb3VibGUgcXVvdGVzXG4gICAgICAgIGlmICgvXlwiKC4qPylcIiQvLnRlc3Qoc2VhcmNoVGV4dCkpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJyxcbiAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uLCB7XG4gICAgICAgICAgICAgIHRleHQ6IHNlYXJjaFRleHQucmVwbGFjZSgvXlwifFwiJC9nLCAnJyksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdHJ5IHRvIHNwbGl0IHdvcmRzXG4gICAgICAgICAgY29uc3Qgd29yZHMgPSBzZWFyY2hUZXh0LnNwbGl0KCcgJyk7XG4gICAgICAgICAgLy8gam9pbiB3b3JkcyB0byBhIHNpbmdsZSBmaWx0ZXJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB3b3Jkcy5tYXAoKHdvcmQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24pIGFzIHN0cmluZywge1xuICAgICAgICAgICAgICB0ZXh0OiB3b3JkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkuam9pbignIGFuZCAnKTtcbiAgICAgICAgICAvLyBzZXQgZmlsdGVyXG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNsZWFyIGZpbHRlclxuICAgICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZW5zdXJlIGVtcHR5IHRhYmxlIGxheW91dFxuICAgICAgdGhpcy5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgIC8vIHNlYXJjaCBsb2NhbGx5XG4gICAgICB0aGlzLmRhdGFUYWJsZS5zZWFyY2goc2VhcmNoVGV4dC50cmltKCkpLmRyYXcoKTtcbiAgICAgIC8vIGdldCBpbmRleGVzIG9mIGZpbHRlcmVkIHJvd3NcbiAgICAgIGNvbnN0IGluZGV4ZXMgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0uYWlEaXNwbGF5KTtcbiAgICAgIC8vIHNldCByZWNvcmRzRmlsdGVyZWRcbiAgICAgIGNvbnN0IHJlY29yZHNGaWx0ZXJlZCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gc2V0IHJlY29yZHNUb3RhbFxuICAgICAgY29uc3QgcmVjb3Jkc1RvdGFsID0gaW5kZXhlcy5sZW5ndGg7XG4gICAgICAvLyByZXRyaWV2ZSBkYXRhIGZyb20gaW5kZXhlc1xuICAgICAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKSk7XG4gICAgICBjb25zdCBkYXRhID0gaW5kZXhlcy5tYXAoaW5kZXggPT4gcm93c1s8bnVtYmVyPmluZGV4XSk7XG4gICAgICAvLyBlbWl0IHJlc3VsdHMgdG8gbG9hZCBvdXRwdXRcbiAgICAgIHRoaXMubG9hZC5lbWl0KHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiByZWNvcmRzRmlsdGVyZWQsXG4gICAgICAgIHJlY29yZHNUb3RhbDogcmVjb3Jkc1RvdGFsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmV0Y2goY2xlYXJTZWxlY3RlZD86IGJvb2xlYW4pIHtcbiAgICAvLyBpZiBkYXRhIHRhYmxlIGlzIG51bGxcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICAgLy8gaW5pdGlhbGl6ZSBkYXRhIHRhYmxlXG4gICAgICByZXR1cm4gdGhpcy5uZ09uSW5pdCgpO1xuICAgIH1cbiAgICAvLyBjbGVhciBzZWxlY3Rpb24gaWYgcGFyYW1ldGVyIGlzIG5vdCBkZWNsYXJlZCBvciBpdCdzIHRydWVcbiAgICBpZiAoY2xlYXJTZWxlY3RlZCA9PSBudWxsIHx8IGNsZWFyU2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgdG8gZmFsc2VcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gY2xlYXIgdW5zZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gb3RoZXJ3aXNlIGxvYWQgZGF0YSBvbmx5XG4gICAgdGhpcy5kYXRhVGFibGUuZHJhdygpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9maXJzdExvYWQgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgalF1ZXJ5KHRoaXMudGFibGUubmF0aXZlRWxlbWVudCkuZW1wdHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YVRhYmxlID0gbnVsbDtcbiAgICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gY2xlYXIgdW5zZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgdG8gZmFsc2VcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgc3BlY2lmaWVkIGRhdGEgcm93XG4gICAqL1xuICBwdWJsaWMgc2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gZ2V0IHJvd1xuICAgICAgY29uc3Qgcm93Tm9kZSA9IHJvdy5ub2RlKCk7XG4gICAgICAvLyBpZiBtdWx0aXBsZSBzZWxlY3QgaXMgZmFsc2VcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgLy8gZW51bWVyYXRlIHJvd1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ub2RlcygpLmVhY2goKG5vZGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUgIT09IHJvd05vZGUpIHtcbiAgICAgICAgICAgICAgalF1ZXJ5KG5vZGUpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUucm93cygnLnNlbGVjdGVkJykubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciBzZWxlY3RlZFxuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBpZiBjdXN0b20gc2VsZWN0IG1vZGUgaXMgb2ZmXG4gICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGpRdWVyeShyb3dOb2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UgYWRkIGNsYXNzXG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGdldCByb3cgZGF0YVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIC8vIHNlYXJjaCBzZWxlY3RlZCBpdGVtc1xuICAgICAgbGV0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGRhdGFba2V5XTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IHNlbGVjdGVkIHJvd1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKGRhdGEpO1xuICAgICAgLy8gdmFsaWRhdGUgdW5zZWxlY3RlZCBkYXRhXG4gICAgICBmaW5kSW5kZXggPSB0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGRhdGFba2V5XTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IHNlbGVjdGVkIHJvd1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvdyBpZiBpdCdzIHNlbGVjdGVkXG4gICAqL1xuICBwdWJsaWMgdW5TZWxlY3RSb3cocm93OiBhbnksIHNpbGVudD86IGJvb2xlYW4pIHtcbiAgICBpZiAocm93KSB7XG4gICAgICAvLyBpZiBjdXN0b20gc2VsZWN0IG1vZGUgaXMgb2ZmXG4gICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgbGV0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAvLyBhZGQgdGhpcyByb3cgdG8gdW5zZWxlY3RlZCByb3dzXG4gICAgICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RlZC5wdXNoKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbnkoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCBmbGFnXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gdHJ1ZTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBlbWl0IHNlbGVjdGlvbiBldmVudFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjdE5vbmUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCBmbGFnXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgLy8gc2VsZWN0IGFueSByb3dcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ldmVyeSgoaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3coIGluZGV4ICk7XG4gICAgICAgIHRoaXMudW5TZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RSb3cocm93OiBhbnkpIHtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4ga2V5XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ubmFtZSB8fCAnJztcbiAgICAgIC8vIGdldCBpZFxuICAgICAgY29uc3QgaWQgPSBkYXRhW2tleV07XG4gICAgICAvLyBmaW5kIGlmIHJvdyBpcyBzZWxlY3RlZFxuICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kKCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICAvLyBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyB1bnNlbGVjdFxuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXG4gIC8qKlxuICAgKiBEYXRhdGFibGVzIGNvbHVtbiByZW5kZXJlciBmb3Igc2VsZWN0IGNoZWNrYm94XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHBhcmFtIG1ldGFcbiAgICovXG4gIHByaXZhdGUgX3JlbmRlclNlbGVjdChkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmICh0eXBlb2YgY29sdW1uLnNlbGVjdFRlbXBsYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNvbHVtbiwge1xuICAgICAgICBzZWxlY3RUZW1wbGF0ZTogdGVtcGxhdGUoYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lIHMtcm93XCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgaWQ9XCJzLSR7dGhpcy5faWR9LVxcJHttZXRhLnJvd31cIiBkYXRhLWlkPVwiXFwke2RhdGF9XCIgLz48bGFiZWwgZm9yPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5cbiAgICAgICAgYCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gcmVuZGVyIHRlbXBsYXRlXG4gICAgcmV0dXJuIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSh7XG4gICAgICBtZXRhLFxuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMubG9hZGluZy5lbWl0KHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzXG4gICAgICB9KTtcbiAgICAgIC8vIHBhcnNlIHByb3BlcnRpZXNcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcsICdzZWxlY3RhYmxlJykpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlID0gdGhpcy5jb25maWcuc2VsZWN0YWJsZTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcsICdtdWx0aXBsZVNlbGVjdCcpKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVTZWxlY3QgPSB0aGlzLmNvbmZpZy5tdWx0aXBsZVNlbGVjdDtcbiAgICAgIH1cbiAgICAgIC8vIHByZXBhcmUgY29uZmlndXJhdGlvbiBmb3IgY29sdW1uc1xuICAgICAgY29uc3QgdGFibGVDb2x1bW5zID0gdGhpcy5jb25maWcuY29sdW1uc1xuICAgICAgICAvLyBmaWx0ZXIgYWN0aW9uIGxpbmsgY29sdW1uXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdBY3Rpb25MaW5rRm9ybWF0dGVyJyAmJiB0aGlzLnNob3dBY3Rpb25zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAvLyBjb252ZXJ0IGNvbHVtbiB0byBhZHZhbmNlIHRhYmxlIGNvbHVtblxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBDb2x1bW5Gb3JtYXR0ZXIodGhpcy5faW5qZWN0b3IpLCBjb2x1bW4pO1xuICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkRlZmluaXRpb24gPSB7XG4gICAgICAgICAgICBkYXRhOiBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLm5hbWUsXG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudDogY29sdW1uLmRlZmF1bHRDb250ZW50ICE9IG51bGwgPyBjb2x1bW4uZGVmYXVsdENvbnRlbnQgOiAnJyxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0b3IudHJhbnNmb3JtKGNvbHVtbi50aXRsZSksXG4gICAgICAgICAgICBzb3J0YWJsZTogY29sdW1uLmhhc093blByb3BlcnR5KCdzb3J0YWJsZScpID8gY29sdW1uLnNvcnRhYmxlIDogdHJ1ZSxcbiAgICAgICAgICAgIHZpc2libGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnaGlkZGVuJykgPyAhY29sdW1uLmhpZGRlbiA6IHRydWUsXG4gICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGNvbHVtbi5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IGNvbHVtbi5jbGFzc05hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlcnMpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZGF0YTtcbiAgICAgICAgICAgICAgICAoY29sdW1uLmZvcm1hdHRlcnMgYXMgYW55W10pLmZvckVhY2goKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc2VsZi5fY29sdW1uRm9ybWF0dGVyc1tjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0dGVyXTtcbiAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdFN0cmluZyA9IGNvbHVtbkZvcm1hdHRlci5mb3JtYXRTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRPcHRpb25zID0gY29sdW1uRm9ybWF0dGVyLmZvcm1hdE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKShyZXN1bHQsIHR5cGUsIHJvdywgbWV0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNvbHVtbi5mb3JtYXRTdHJpbmc7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNvbHVtbi5mb3JtYXRPcHRpb25zO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIGNvbHVtbiBmb3JtYXR0ZXJzIGV4cG9ydCBjcmVhdGVkQ2VsbCBldmVudFxuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBjb2x1bW4uZm9ybWF0dGVycy5maWx0ZXIoKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgY29sdW1uRm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVkQ2VsbChjZWxsOiBhbnksIGNlbGxEYXRhOiBhbnksIHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoY29sdW1uRm9ybWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uRm9ybWF0dGVyLmZvcm1hdHRlcl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlci5hZnRlclJlbmRlci5iaW5kKGNvbHVtbikoY2VsbCwgY2VsbERhdGEsIHJvd0RhdGEsIHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbi5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICByZW5kZXI6IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICByZW5kZXI6IGZvcm1hdHRlci5yZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGw6IGZvcm1hdHRlci5hZnRlclJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29sdW1uRGVmaW5pdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAvLyBnZXQgdGFibGUgZWxlbWVudFxuICAgICAgY29uc3QgdGFibGVFbGVtZW50ID0galF1ZXJ5KHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sdW1ucy5hZGp1c3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSk7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXNoYWRvd2VkLXZhcmlhYmxlXG4gICAgICB0YWJsZUVsZW1lbnQub24oJ3Byb2Nlc3NpbmcuZHQnLCAoZXZlbnQsIHNldHRpbmdzLCBwcm9jZXNzaW5nKSA9PiB7XG4gICAgICAgIGlmIChwcm9jZXNzaW5nKSB7XG4gICAgICAgICAgLy8gY2xlYXIgZW1wdHkgdGFibGUgZWxlbWVudFxuICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCcuZGF0YVRhYmxlc19lbXB0eScpLmh0bWwoJycpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGFibGVFbGVtZW50LmFkZENsYXNzKCdwcm9jZXNzaW5nJyk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0YWJsZUVsZW1lbnQucmVtb3ZlQ2xhc3MoJ3Byb2Nlc3NpbmcnKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsZXQgZHJhd0luZGV4ID0gMTtcbiAgICAgIHRhYmxlRWxlbWVudC5vbignb3JkZXIuZHQnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICBjb25zdCBvcmRlciA9IHRoaXMuZGF0YVRhYmxlLm9yZGVyKCk7XG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlQ29sdW1ucztcbiAgICAgICAgICBpZiAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm9yZGVyLmVtaXQob3JkZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkub24oJ2RyYXcuZHQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5kcmF3LmVtaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgY29uc3QgaW5mbzogeyBwYWdlOiBudW1iZXI7IHBhZ2VzOiBudW1iZXIgfSA9IHRoaXMuZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgICAgICAgIHRoaXMucGFnZS5lbWl0KGluZm8pO1xuICAgICAgICAgIGlmIChkcmF3SW5kZXggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkcmF3SW5kZXgrKztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3RoaXMuZGF0YVRhYmxlLmNvbHVtbnMuYWRqdXN0KCk7IH0sIDEpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRVJST1InLCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgYWRqdXN0aW5nIHRhYmxlIGNvbHVtbnMnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBhbGxvdyBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiAoYXMgcm93IHByaW1hcnkga2V5KVxuICAgICAgICAvLyB0b2RvOjphbGxvdyByb3cgcHJpbWFyeSBrZXkgY29uZmlndXJhdGlvblxuICAgICAgICBjb25zdCBmaXJzdENvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF07XG4gICAgICAgIC8vIGFkZCBzZWxlY3QgY29sdW1uXG4gICAgICAgIGNvbnN0IHNlbGVjdENvbHVtbkRlZmluaXRpb24gPSB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAndGV4dC1jZW50ZXIgcGwtNCBwci0wJyxcbiAgICAgICAgICBkYXRhOiBmaXJzdENvbHVtbi5wcm9wZXJ0eSB8fCBmaXJzdENvbHVtbi5uYW1lLFxuICAgICAgICAgIGRlZmF1bHRDb250ZW50OiAnJyxcbiAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgIHZpc2libGU6ICF0aGlzLmN1c3RvbVNlbGVjdCxcbiAgICAgICAgICBuYW1lOiBmaXJzdENvbHVtbi5uYW1lLFxuICAgICAgICB9O1xuICAgICAgICAvLyBhc3NpZ24gcmVuZGVyZXJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZWxlY3RDb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgcmVuZGVyOiB0aGlzLl9yZW5kZXJTZWxlY3QuYmluZCh0aGlzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCBmaW5hbGx5IGFkZCBjb2x1bW5cbiAgICAgICAgdGFibGVDb2x1bW5zLnVuc2hpZnQoc2VsZWN0Q29sdW1uRGVmaW5pdGlvbik7XG4gICAgICAgIC8vIHVzZXIgaW50ZXJmYWNlIGFkZGl0aW9uc1xuICAgICAgICAvLyBoYW5kbGUgcGFnZSBjaGFuZ2UgZXZlbnQgKGEgdHJpY2sgZm9yIGZpcmluZyBkcmF3LmR0IGV2ZW50cylcbiAgICAgICAgdGFibGVFbGVtZW50XG4gICAgICAgICAgLy8gaGFuZGxlIGRyYXcgZXZlbnRzXG4gICAgICAgICAgLm9uKCdkcmF3LmR0JywgKCkgPT4ge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QpIHtcbiAgICAgICAgICAgICAgLy8gZW5hYmxlIHJvdyBzZWxlY3Rpb24gZXZlbnRcbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ3Rib2R5Jykub24oJ2NsaWNrJywgJ3RyJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHNlbGYuZGF0YVRhYmxlLnJvdyh0aGlzKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgcm93XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3QuZW1pdChyb3cpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0LnMtcm93Jyk7XG4gICAgICAgICAgICBlbGVtZW50cy5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIC8vIG1ha2Ugc2VsZWN0aW9uIG9uIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gZW51bWVyYXRlIHNlbGVjdGVkIGl0ZW1zXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgcm93IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1ba2V5XTtcbiAgICAgICAgICAgICAgICAvLyBpZiBpZGVudGlmaWVyIGlzIGRlZmluZWRcbiAgICAgICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGZpbmQgY2hlY2sgZWxlbWVudCB3aXRoIHRoaXMgaWRlbnRpZmllciBpbiBhdHRyaWJ1dGUgZGF0YS1pZFxuICAgICAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoYGlucHV0W2RhdGEtaWQ9JyR7aWR9J11gKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAgIC8vIHNlbGVjdCByb3dzIHRoYXQgYXJlIG5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAvLyBhbmQgZG8gbm90IGluY2x1ZGVkIGluIHVuc2VsZWN0ZWQgY29sbGVjdGlvblxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGdldCBkYXRhIGlkXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgICAgICAgICByZXR1cm4geFtrZXldID09IGpRdWVyeShlbGVtZW50KS5hdHRyKCdkYXRhLWlkJyk7XG4gICAgICAgICAgICAgICAgfSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyh0aGlzLmRhdGFUYWJsZS5yb3coaW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZGlzcGxheSByb3cgZGV0YWlsc1xuICAgICAgaWYgKHRoaXMuZGV0YWlsc1RlbXBsYXRlKSB7XG4gICAgICAgIGNvbnN0IGRldGFpbHNTdHJpbmcgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5Sb3dEZXRhaWxzJyk7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1swXTtcbiAgICAgICAgY29uc3Qgc2hvd0RldGFpbHNDb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2RldGFpbHMtY29udHJvbCBwbC00IHByLTAnLFxuICAgICAgICAgIGRhdGE6IGZpcnN0Q29sdW1uLnByb3BlcnR5IHx8IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgICAgZGVmYXVsdENvbnRlbnQ6ICcnLFxuICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgdmlzaWJsZTogIXRoaXMuY3VzdG9tU2VsZWN0LFxuICAgICAgICAgIG5hbWU6IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgICAgcmVuZGVyOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYDxidXR0b24gcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiJHtkZXRhaWxzU3RyaW5nfVwiIGFyaWFsLWxhYmVsPVwiJHtkZXRhaWxzU3RyaW5nfVwiPjwvYnV0dG9uPmA7XG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgYWRkIGNvbHVtblxuICAgICAgICB0YWJsZUNvbHVtbnMudW5zaGlmdChzaG93RGV0YWlsc0NvbHVtbkRlZmluaXRpb24pO1xuXG4gICAgICAgIC8vIHVzZXIgaW50ZXJmYWNlIGFkZGl0aW9uc1xuICAgICAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXIgZm9yIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGV0YWlsc1xuICAgICAgICB0YWJsZUVsZW1lbnQub24oJ2NsaWNrJywgJ3RkLmRldGFpbHMtY29udHJvbCcsIChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ciA9IGUudGFyZ2V0LmNsb3Nlc3QoJ3RyJyk7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBzZWxmLmRhdGFUYWJsZS5yb3codHIpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRldGFpbHNWaWV3UmVmID0gdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5kZXRhaWxzVGVtcGxhdGUsIHtcbiAgICAgICAgICAgICAgcm93RGF0YTogcm93LmRhdGEoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGV0YWlsc1ZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICBpZiAoZGV0YWlsc1ZpZXdSZWYucm9vdE5vZGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RldGFpbHNUZW1wbGF0ZSBtdXN0IGhhdmUgZXhhY3RseSBvbmUgcm9vdCBub2RlLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGV0YWlsc1ZpZXdSZWYucm9vdE5vZGVzWzBdKTtcblxuICAgICAgICAgICAgaWYgKHJvdy5jaGlsZC5pc1Nob3duKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIHJvdyBpcyBhbHJlYWR5IG9wZW4gLSBjbG9zZSBpdFxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZURldGFpbHMuZW1pdCgpO1xuICAgICAgICAgICAgICAgIHJvdy5jaGlsZC5oaWRlKCk7XG5cbiAgICAgICAgICAgICAgICBkZXRhaWxzVmlld1JlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3BlbiB0aGlzIHJvd1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RldGFpbHMuZW1pdCh7cm93fSk7XG4gICAgICAgICAgICAgICAgcm93LmNoaWxkKGNvbnRhaW5lcikuc2hvdygpO1xuICAgICAgICAgICAgICAgIHJvdy5jaGlsZCgpLmFkZENsYXNzKCdkdC1jaGlsZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgIC8vIHNldCBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhNZW51OiBbNSwgMTAsIDUwLCAxMDAsIDIwMCwgNTAwXSxcbiAgICAgICAgLy8gaGlkZSBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhDaGFuZ2U6IGZhbHNlLFxuICAgICAgICAvLyBlbmFibGUgc2VhcmNoIGJ1dCBoaWRlIHNlYXJjaCBib3ggKGNzcylcbiAgICAgICAgc2VhcmNoaW5nOiB0cnVlLFxuICAgICAgICAvLyBlbmFibGUgZGF0YSBwcm9jZXNzaW5nXG4gICAgICAgIHByb2Nlc3Npbmc6IHRydWUsXG4gICAgICAgIC8vIGVuYWJsZSBnZXR0aW5nIHNlcnZlciBzaWRlIGRhdGFcbiAgICAgICAgc2VydmVyU2lkZTogdGhpcy5zZXJ2ZXJTaWRlLFxuICAgICAgICAvLyBlbnVtZXJhdGUgdGFibGUgY29sdW1uc1xuICAgICAgICBjb2x1bW5zOiB0YWJsZUNvbHVtbnMsXG4gICAgICAgIGNvbFJlb3JkZXI6ICB0aGlzLmNvbHVtbk9yZGVyaW5nLFxuICAgICAgICBvcmRlcjogW10sXG4gICAgICAgIC8vIHNldCBzY3JvbGwgeFxuICAgICAgICBzY3JvbGxYOiB0aGlzLnNjcm9sbFgsXG4gICAgICAgIGRvbTogJ0JmcnRpcCcsXG4gICAgICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleHRlbmQ6ICdleGNlbCcsXG4gICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5jb25maWcudGl0bGUsXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkLW5vbmUnLFxuICAgICAgICAgICAgZXhwb3J0T3B0aW9uczoge1xuICAgICAgICAgICAgICBjb2x1bW5zOiAndGg6bm90KDpmaXJzdC1jaGlsZCknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICAvLyBkZWZpbmUgc2VydmVyIGRhdGEgY2FsbGJhY2tcbiAgICAgICAgZm5TZXJ2ZXJEYXRhKHNTb3VyY2U6IGFueSwgYW9EYXRhOiBhbnksIGZuQ2FsbGJhY2s6IGFueSwgb1NldHRpbmdzOiBhbnkpIHtcbiAgICAgICAgICAvLyBpZiBtZXRob2QgaXMgaW52b2tlZCBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICBpZiAoc2VsZi5fZmlyc3RMb2FkKSB7XG4gICAgICAgICAgICAvLyBkaXNhYmxlZCBmaXJzdCBsb2FkIGZsYWdcbiAgICAgICAgICAgIHNlbGYuX2ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gaWYgYXV0byBsb2FkIGlzIGRpc2FibGVkXG4gICAgICAgICAgICBpZiAoc2VsZi5hdXRvTG9hZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW1wdHlEYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogMCxcbiAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gICAgICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAvLyBlbWl0IGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVzZXQgZXJyb3JcbiAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKCk7XG4gICAgICAgICAgLy8gZ2V0IGFjdGl2YXRlZCByb3V0ZSBwYXJhbXNcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHNlbGYuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgIC8vIGdldCBjb2x1bW5zXG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IGFvRGF0YVsxXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgb3JkZXIgZXhwcmVzc2lvblxuICAgICAgICAgIGxldCBvcmRlciA9IGFvRGF0YVsyXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2tpcCByZWNvcmRzIHBhcmFtXG4gICAgICAgICAgY29uc3Qgc2tpcCA9IGFvRGF0YVszXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgcGFnZSBzaXplIHBhcmFtXG4gICAgICAgICAgY29uc3QgdG9wID0gYW9EYXRhWzRdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBzZWFyY2ggdmFsdWVcbiAgICAgICAgICBjb25zdCBzZWFyY2ggPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzIChyb3dHcm91cCBhbmQgb3JkZXIpIGlmIHRoZXJlIGlzIHJvdyBncm91cCBpbnB1dFxuICAgICAgICAgIGxldCByb3dHcm91cE9yZGVyOiBhbnlbXSA9IFtdO1xuICAgICAgICAgIGlmIChzZWxmLnJvd0dyb3VwICYmIHNlbGYucm93R3JvdXAubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgY29sT3JkZXIgPSBbXTtcblxuICAgICAgICAgICAgLy8gZmluZCBpbmRleCBvZiB0aGUgcm93R3JvdXAgY29sdW1uXG4gICAgICAgICAgICBsZXQgY29scyA9IHNlbGYucm93R3JvdXAubWFwKHggPT4gdGFibGVDb2x1bW5zLmZpbmRJbmRleCh0YWJsZUNvbHVtbiA9PiB0YWJsZUNvbHVtbi5kYXRhID09PSB4KSkuZmlsdGVyKGluZGV4ID0+IGluZGV4ID49IDApO1xuICAgICAgICAgICAgLy8gZmluZCBuZXcgaW5kZXggb2YgdGhlIHJvd0dyb3VwIGNvbHVtbiBpbiBjYXNlIG9mIHRhYmxlIG9mZmVycyB0aGUgY29sdW1uIHJlb3JkZXJpbmcgY2FwYWJpbGl0eVxuICAgICAgICAgICAgLy8gaS5lLiBzZXR0aW5ncy5jb2xSZW9yZGVyID09PSBmYWxzZSAoY29sdW1uT3JkZXJpbmcgPT09IGZhbHNlKVxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YVRhYmxlICYmIHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIgJiYgdGhpcy5jb2x1bW5PcmRlcmluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBjb2xPcmRlciA9IHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoKTtcbiAgICAgICAgICAgICAgY29scyA9IGNvbHMubWFwKCAoY29sOiBhbnkpID0+IGNvbE9yZGVyLmluZGV4T2YoY29sIGFzIG5ldmVyKSkuZmlsdGVyKGluZGV4ID0+IGluZGV4ID4gLTEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY29sdW1uID0gLTE7XG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uID0gJ2FzYyc7XG5cbiAgICAgICAgICAgIC8vIHNldCBjb2x1bW4gYW5kIG9yZGVyIGRpcmVjdGlvblxuICAgICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb2x1bW4gPSBvcmRlclswXS5jb2x1bW47XG4gICAgICAgICAgICAgIGRpcmVjdGlvbiA9IG9yZGVyWzBdLmRpcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd0dyb3VwT3JkZXIgPSBjb2xzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAvLyBjaGVjayBpZiBjb2x1bW4gb3JkZXIgaGFzIGJlZW4gY2hhbmdlZFxuICAgICAgICAgICAgICAvLyBhbmQgZmluZCB0aGUgbmV3IGluZGV4IChjb2x1bW4taW5kZXgpIG9mIHRoZSByb3cgZ3JvdXAgY29sdW1uXG4gICAgICAgICAgICAgIGlmICh4ICE9IGNvbHVtbiAmJiBzZWxmLmxhc3RSb3dHcm91cE9yZGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoeCA9PT0gc2VsZi5sYXN0Um93R3JvdXBPcmRlci5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHNlbGYubGFzdFJvd0dyb3VwT3JkZXIuY29sdW1uO1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gc2VsZi5sYXN0Um93R3JvdXBPcmRlci5kaXJlY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29sdW1uOiB4LFxuICAgICAgICAgICAgICAgIGRpcjogeCA9PT0gY29sdW1uID8gZGlyZWN0aW9uIDogJ2FzYydcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvcmRlciA9IG9yZGVyIHx8IFtdO1xuICAgICAgICAgICAgLy8gc2V0IHRoZSByb3cgZ3JvdXAgY29sdW1uIHF1ZXJ5IHBhcmFtIGFsd2F5cyBmaXJzdCBhbmQgYmVmb3JlIHRhYmxlIG9yZGVyaW5nIHF1ZXJ5IHBhcmFtc1xuICAgICAgICAgICAgb3JkZXIudW5zaGlmdCguLi5yb3dHcm91cE9yZGVyKTtcblxuICAgICAgICAgICAgLy8gc2F2ZSBvcmRlcmluZyBjb2x1bW4gYW5kIGRpcmVjdGlvbiAocmVnYXJkbGVzcyByb3dHcm91cGluZylcbiAgICAgICAgICAgIGlmIChjb2x1bW4gPiAtMSkge1xuICAgICAgICAgICAgICBzZWxmLmxhc3RSb3dHcm91cE9yZGVyID0geyBjb2x1bW4sIGRpcmVjdGlvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhcHBseSBvcmRlciBwYXJhbXNcbiAgICAgICAgICBpZiAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBnZXQgb3JkZXIgcXVlcnkgZXhwcmVzc2lvblxuICAgICAgICAgICAgY29uc3Qgb3JkZXJCeVN0ciA9IG9yZGVyLm1hcCgoZXhwcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBjb2x1bW5JbmRleDogbnVtYmVyO1xuICAgICAgICAgICAgICBpZiAoc2VsZi5jb2x1bW5PcmRlcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IGV4cHIuY29sdW1uO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuZGF0YVRhYmxlICYmIHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGN1cnJlbnQgY29sdW1uIG9yZGVyIChmcm9tIGNvbFJlb3JkZXIpXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gc2VsZi5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgICAgICAgICAgICAgIC8vIGFuZCBtYXRjaCB0aGUgZGF0YVRhYmxlIGluZGV4IHRvIHRoZSBjb25maWcgY29sdW1ucyBpbmRleFxuICAgICAgICAgICAgICAgIC8vIGV4cHIuY29sdW1uIHNob3VsZCBhbHdheXMgYmUgdmFsaWQgKGUuZy4gaW4gcmFuZ2UpLCBidXQgcGVyZm9ybSBhIG1pbm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZXhwci5jb2x1bW4gPj0gMCAmJiBleHByLmNvbHVtbiA8IGNvbHVtbk9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSBjb2x1bW5PcmRlcltleHByLmNvbHVtbl07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZmlyc3QgY29sdW1uIGFzIGEgZmFsbGJhY2sgKHdvbid0IGhhcHBlbiwganVzdCBmb3Igc2FmZXR5KVxuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IGV4cHIuY29sdW1uO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0YWJsZUNvbHVtbnNbY29sdW1uSW5kZXhdLm5hbWUgKyAnICcgKyBleHByLmRpciB8fCAnYXNjJztcbiAgICAgICAgICAgIH0pLmpvaW4oJywnKTtcbiAgICAgICAgICAgIC8vIHNldCBvcmRlclxuICAgICAgICAgICAgcS5zZXRQYXJhbSgnJG9yZGVyYnknLCBvcmRlckJ5U3RyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZW5zdXJlIHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgICBpZiAoc2VsZi5zdGF0ZUxvYWRDYWxsYmFjayA9PSBudWxsKSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlTG9hZENhbGxiYWNrID0gKChfLCBjYWxsYmFjaykgID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2sobnVsbCwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25maWd1cmUgJHNlbGVjdCBwYXJhbWV0ZXJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IHNlbGYuY29uZmlnLmNvbHVtbnMuZmlsdGVyKCAoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4udmlydHVhbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29sdW1uLm9wdGlvbmFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGFibGVDb2x1bW5zLmZpbmRJbmRleCgodGFibGVDb2x1bW4pID0+IHRhYmxlQ29sdW1uLm5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5jb2x1bW5zW2luZGV4XS52aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lICsgJyBhcyAnICsgY29sdW1uLnByb3BlcnR5O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBxLnNlbGVjdC5hcHBseShxLCBzZWxlY3QpO1xuICAgICAgICAgICAgLy8gY29uZmlndXJlICRmaWx0ZXJcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZmlsdGVyICYmIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHNldCByb3V0ZSBmaWx0ZXJcbiAgICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIgXTtcbiAgICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICAgIHEuZmlsdGVyKGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcXVlcnkgcGFyYW1ldGVycyBjb250YWluIGZpbHRlclxuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLiRleHBhbmQgJiYgcXVlcnlQYXJhbXMuJGV4cGFuZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IHJvdXRlICRleHBhbmRcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHNlbGYuY29uZmlnLmRlZmF1bHRzLmV4cGFuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXEuZ2V0UGFyYW1zKClbJyRvcmRlcmJ5J10gJiYgc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSkge1xuICAgICAgICAgICAgICBxLnNldFBhcmFtKCckb3JkZXJieScsIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGdyb3VwYnknLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFwcGVuZCBkZWZhdWx0IGZpbHRlclxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmZpbHRlcikge1xuICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLmFzeW5jQnVpbGRGaWx0ZXIoc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKS50aGVuKChkZWZhdWx0RmlsdGVyU3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHFQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIGRlZmF1bHRGaWx0ZXJTdHJpbmcgXTtcbiAgICAgICAgICAgICAgICAgIGlmIChxUGFyYW1zLiRmaWx0ZXIpIHsgZXhwcmVzc2lvbnMucHVzaCgnKCcgKyBxUGFyYW1zLiRmaWx0ZXIgKyAnKScgKTsgfVxuICAgICAgICAgICAgICAgICAgcS5maWx0ZXIoZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYuYmVmb3JlU2VydmVyRGF0YS5lbWl0KHEpO1xuICAgICAgICAgICAgICAgIHNlbGYubGFzdFF1ZXJ5UGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hZnRlclNlcnZlckRhdGEuZW1pdChpdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFTZXQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gaXRlbXMudG90YWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gZW1pdCBsb2FkIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhkYXRhU2V0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGxvZyBlcnJvciB0byBjb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgZXJyKTtcbiAgICAgICAgICAgICAgICAvLyBzaG93IGVycm9yXG4gICAgICAgICAgICAgICAgc2VsZi50b2dnbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAgIC8vIGJ5IHJldHVybmluZyBlbXB0eSBkYXRhc2V0XG4gICAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5iZWZvcmVTZXJ2ZXJEYXRhLmVtaXQocSk7XG4gICAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICBzZWxmLmFmdGVyU2VydmVyRGF0YS5lbWl0KGl0ZW1zKTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSBpdGVtcy50b3RhbDtcbiAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZGF0YVNldCk7XG4gICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAvLyBsb2cgZXJyb3IgdG8gY29uc29sZVxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgICAgICAvLyBzaG93IGVycm9yXG4gICAgICAgICAgICAgIHNlbGYudG9nZ2xlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgLy8gYnkgcmV0dXJuaW5nIGVtcHR5IGRhdGFzZXRcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKEVNUFRZX0RBVEFTRVQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxhbmd1YWdlOiBPYmplY3QuYXNzaWduKHsgfSwgc2VsZi50cmFuc2xhdG9yLnRyYW5zZm9ybSgnVGFibGVzLkRhdGFUYWJsZScpLFxuICAgICAgICAgIHtlbXB0eVRhYmxlOiAnICcgfSksXG4gICAgICB9O1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSByb3dHcm91cCBpbnB1dCBhbmQgYXNzaWduIGl0IHRvIHRhYmxlXG4gICAgICBpZiAoc2VsZi5yb3dHcm91cC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY29scyA9IHNlbGYucm93R3JvdXAubWFwKHggPT4gdGFibGVDb2x1bW5zLmZpbmRJbmRleCh0YWJsZUNvbHVtbiA9PiB0YWJsZUNvbHVtbi5kYXRhID09PSB4KSkuZmlsdGVyKGluZGV4ID0+IGluZGV4ID49IDApO1xuICAgICAgICBjb25zdCBkYXRhU3JjID0gY29scy5tYXAoeCA9PiB0YWJsZUNvbHVtbnNbeF0uZGF0YSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0UmVuZGVyID0gZnVuY3Rpb24gKHJvd3M6IERhdGFUYWJsZXMuQXBpLCBncm91cDogc3RyaW5nLCBsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgICAgY29uc3QgaGVhZGVyVmlld1JlZiA9IHNlbGYuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KFxuICAgICAgICAgICAgICBzZWxmLmhlYWRlclRlbXBsYXRlIGFzIGFueSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgICAgICAgbGV2ZWxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGhlYWRlclZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgaWYgKGhlYWRlclZpZXdSZWYucm9vdE5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIZWFkZXJUZW1wbGF0ZSBtdXN0IGhhdmUgZXhhY3RseSBvbmUgcm9vdCBub2RlLicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGVhZGVyVmlld1JlZi5yb290Tm9kZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW5kUmVuZGVyIHByb3BlcnR5XG4gICAgICAgIGNvbnN0IGVuZFJlbmRlciA9IGZ1bmN0aW9uIChyb3dzOiBEYXRhVGFibGVzLkFwaSwgZ3JvdXA6IHN0cmluZywgbGV2ZWw6IG51bWJlcikge1xuICAgICAgICAgIGNvbnN0IGZvb3RlclZpZXdSZWYgPSBzZWxmLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgICAgICAgc2VsZi5mb290ZXJUZW1wbGF0ZSBhcyBhbnksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBncm91cCxcbiAgICAgICAgICAgICAgICByb3dzLFxuICAgICAgICAgICAgICAgIGxldmVsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb290ZXJWaWV3UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGlmIChmb290ZXJWaWV3UmVmLnJvb3ROb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm9vdGVyVGVtcGxhdGUgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJvb3Qgbm9kZS4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvb3RlclZpZXdSZWYucm9vdE5vZGVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHsgcm93R3JvdXA6IHsgZGF0YVNyYywgZW5kUmVuZGVyLCBzdGFydFJlbmRlciB9IH0sIHt9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGYuY29uZmlnLmZpeGVkQ29sdW1ucykge1xuICAgICAgICBjb25zdCBsZWZ0ID0gc2VsZi5jb25maWcuZml4ZWRDb2x1bW5zLmxlZnQgfHwgMDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzZWxmLmNvbmZpZy5maXhlZENvbHVtbnMucmlnaHQgfHwgMDtcbiAgICAgICAgY29uc3QgZml4ZWRDb2x1bW5zID0ge1xuICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgcmlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIGZpeGVkQ29sdW1uc1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhdGVTZXR0aW5ncyA9IHtcbiAgICAgICAgc3RhdGVTYXZlOiB0aGlzLnN0YXRlU2F2ZVxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLnN0YXRlTG9hZENhbGxiYWNrKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGVTZXR0aW5ncywge1xuICAgICAgICAgIHN0YXRlTG9hZENhbGxiYWNrOiB0aGlzLnN0YXRlTG9hZENhbGxiYWNrXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhdGVTYXZlQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVTYXZlQ2FsbGJhY2s6IHRoaXMuc3RhdGVTYXZlQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCBzdGF0ZVNldHRpbmdzKTtcblxuICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICAvLyBzZXQgY29udGludW91cyBzY3JvbGxpbmdcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcbiAgICAgICAgICBzY3JvbGxDb2xsYXBzZTogZmFsc2UsXG4gICAgICAgICAgc2Nyb2xsZXI6IHtcbiAgICAgICAgICAgIGxvYWRpbmdJbmRpY2F0b3I6IGZhbHNlLFxuICAgICAgICAgICAgZGlzcGxheUJ1ZmZlcjogQXJyYXkuaXNBcnJheSh0aGlzLnJvd0dyb3VwKSAmJiB0aGlzLnJvd0dyb3VwLmxlbmd0aCA+IDAgPyAxMDAgOiAxMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHtcbiAgICAgICAgICBzY3JvbGxZOiB0aGlzLnNjcm9sbFksXG4gICAgICAgICAgcGFnaW5nOiB0aGlzLnBhZ2luZyxcbiAgICAgICAgICBwYWdlTGVuZ3RoOiB0aGlzLnBhZ2VMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuXG4gICAgICB9XG4gICAgICAvLyBoYW5kbGUgaW5pdC5kdCBldmVudCBhbmQgZW1pdCBsb2NhbCBldmVudFxuICAgICAgdGhpcy5kYXRhVGFibGUgPSB0YWJsZUVsZW1lbnQub24oJ2luaXQuZHQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSBqUXVlcnkoZXZlbnQudGFyZ2V0KS5wYXJlbnQoKTtcbiAgICAgICAgLy8gaGFuZGxlIHNjcm9sbGluZ1xuICAgICAgICBzY3JvbGxlci5vbignc2Nyb2xsJywgKHNjcm9sbEV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0ID0galF1ZXJ5KHNjcm9sbEV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gdGFyZ2V0LnNjcm9sbFRvcCgpIGFzIG51bWJlcjtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gdGFyZ2V0LnNjcm9sbExlZnQoKSBhcyBudW1iZXI7XG4gICAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbC5lbWl0KHtcbiAgICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgICBsZWZ0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSkuRGF0YVRhYmxlKHNldHRpbmdzKTtcbiAgICAgIHRoaXMuaW5pdC5lbWl0KCk7XG4gICAgICAvLyBzaG93IG9yIGhpZGUgaGVhZGVyXG4gICAgICBpZiAoIXRoaXMuc2hvd0hlYWRlciAmJiB0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBoaWRlU2VsZWN0b3IgPSAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlPnRoZWFkJyk7XG4gICAgICAgIGlmIChoaWRlU2VsZWN0b3IpIHtcbiAgICAgICAgICBoaWRlU2VsZWN0b3IuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWRqdXN0U2VsZWN0b3IgPSAgKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZScpO1xuICAgICAgICBpZiAoYWRqdXN0U2VsZWN0b3IpIHtcbiAgICAgICAgICBhZGp1c3RTZWxlY3Rvci5jbGFzc0xpc3QuYWRkKCdtdC0yJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgIGlmICghdGhpcy5zaG93Rm9vdGVyICYmIHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGluZm9TZWxlY3RvciA9ICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGVzX2luZm8nKTtcbiAgICAgICAgaWYgKGluZm9TZWxlY3Rvcikge1xuICAgICAgICAgIGluZm9TZWxlY3Rvci5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gc2hvdyBvciBoaWRlIHBhZ2VyXG4gICAgICBpZiAodGhpcy5zaG93UGFnaW5nKSB7XG4gICAgICAgIHRoaXMuc2hvd1BhZ2luZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICB9XG5cbiAgc2Nyb2xsVG9wKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnBhcmVudCgpLnNjcm9sbFRvcCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgc2Nyb2xsTGVmdCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5wYXJlbnQoKS5zY3JvbGxMZWZ0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbGFzdFF1ZXJ5KCk6IENsaWVudERhdGFRdWVyeWFibGUgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLmNvbmZpZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHEgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIE9iamVjdC5rZXlzKHRoaXMubGFzdFF1ZXJ5UGFyYW1zKS5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICBxLnNldFBhcmFtKGtleSwgdGhpcy5sYXN0UXVlcnlQYXJhbXMgJiYgdGhpcy5sYXN0UXVlcnlQYXJhbXNba2V5XSk7XG4gICAgfSk7XG4gICAgLy8gcmV0dXJuIHF1ZXJ5XG4gICAgcmV0dXJuIHE7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhbmQgdXBkYXRlcyBhIHNpbmdsZSByb3dcbiAgICogQHBhcmFtIGZpbmQgLSBBbnkgb2JqZWN0IHdoaWNoIGlzIGJlaW5nIGNvbnZlcnRlZCB0byBhIHF1ZXJ5XG4gICAqL1xuICBwdWJsaWMgZmV0Y2hPbmUoZmluZDogYW55KSB7XG4gICAgaWYgKGZpbmQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGdldCByb3dzXG4gICAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKSk7XG4gICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGgpIHtcbiAgICAgIC8vIGZpbmQgcmVzdWx0XG4gICAgICBjb25zdCBmaW5kS2V5cyA9IE9iamVjdC5rZXlzKGZpbmQpO1xuICAgICAgaWYgKGZpbmRLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGZpbmQgcm93IGluZGV4IGJ5IHNlYXJjaGluZyBlYWNoIHByb3BlcnR5XG4gICAgICBjb25zdCByb3dJbmRleCA9IHJvd3MuZmluZEluZGV4KChyb3c6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gZmluZEtleXMubWFwKCAoa2V5KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJvd1trZXldID09PSBmaW5kW2tleV07XG4gICAgICAgIH0pLmZpbHRlciggKHJlcykgPT4ge1xuICAgICAgICAgIHJldHVybiByZXMgPT09IGZhbHNlO1xuICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICB9KTtcbiAgICAgIC8vIGlmIHJvdyBoYXMgYmVlbiBmb3VuZFxuICAgICAgaWYgKHJvd0luZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgICAvLyBzZWxlY3QgYXR0cmlidXRlc1xuICAgICAgICBxdWVyeS5zZXRQYXJhbSgnJHNlbGVjdCcsIHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRzZWxlY3QpO1xuICAgICAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMuJGV4cGFuZCkge1xuICAgICAgICAgIC8vIGFwcGx5IGV4cGFuZCBhdHRyaWJ1dGVzXG4gICAgICAgICAgcXVlcnkuc2V0UGFyYW0oJyRleHBhbmQnLCB0aGlzLmxhc3RRdWVyeVBhcmFtcy4kZXhwYW5kKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhcHBseSBmaWx0ZXIgZm9yIHJvd1xuICAgICAgICBmaW5kS2V5cy5mb3JFYWNoKCAoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb25maWcuY29sdW1ucy5maW5kKCAoY29sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sLnByb3BlcnR5ID09PSBrZXkgfHwgY29sLm5hbWUgPT09IGtleTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICAvLyBnZXQgcHJvcGVydHkgb3IgbmFtZVxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLm5hbWU7XG4gICAgICAgICAgICBxdWVyeS5hbmQocHJvcGVydHkgYXMgc3RyaW5nKS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVyeS5hbmQoa2V5KS5lcXVhbChmaW5kW2tleV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCBmaW5hbGx5IGdldCBpdGVtXG4gICAgICAgIHJldHVybiBxdWVyeS5nZXRJdGVtKCkudGhlbiggKGl0ZW0pID0+IHtcbiAgICAgICAgICAvLyBpZiBpdGVtIGV4aXN0c1xuICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCk7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZCA9IGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJyk7XG4gICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIC8vIHJlZHJhdyByb3dcbiAgICAgICAgICAgIHJvdy5kYXRhKGl0ZW0pO1xuICAgICAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLm9mZignY2xpY2snKS5vbignY2xpY2snLCB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgLy8gaWYgcm93IGlzIGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzZWxlY3Rpb24gY2hhbmdlXG4gICAqIEBwYXJhbSAkZXZlbnRcbiAgICovXG4gIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9ICAkZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgZXhlY1JlZ2V4ID0gLy0oXFxkKykkL2cuZXhlYyhpbnB1dC5pZCk7XG4gICAgLy8gZ2V0IHJvdyBmcm9tIGlkXG4gICAgY29uc3Qgcm93SW5kZXggPSBwYXJzZUludCgoZXhlY1JlZ2V4ICYmIGV4ZWNSZWdleFsxXSkgYXMgc3RyaW5nLCAxMCk7XG4gICAgLy8gZ2V0IHJvd1xuICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyhyb3dJbmRleCkuZGF0YSgpO1xuICAgIC8vIGdldCByb3cgaWRlbnRpZmllclxuICAgIGlmIChyb3cpIHtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgJyc7XG4gICAgICBjb25zdCBpZCA9IHJvd1trZXldO1xuICAgICAgbGV0IGZpbmRJdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGlucHV0LmNoZWNrZWQpIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgLy8gYWRkIHJvdyB0byBzZWxlY3RlZCByb3dzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmaW5kSXRlbUluZGV4ID49IDApIHtcbiAgICAgICAgICAvLyByZW1vdmUgc2VsZWN0ZWQgaXRlbVxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJdGVtSW5kZXgsIDEpO1xuICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAvLyBhZGQgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgICAgZmluZEl0ZW1JbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChmaW5kSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RW1wdHlUYWJsZSgpIHtcbiAgICAvLyB0aGlzIG9wZXJhdGlvbiBpcyBpbXBvcnRhbnRcbiAgICAvLyBkdWUgdG8gbmcgZGF0YSBiaW5kaW5nXG4gICAgLy8gZW1wdHkgdGFibGUgdGVtcGxhdGUgaGFzIG5vIHRyYW5zbGF0ZWQgdGV4dCBkdXJpbmcgbmdPbkluaXQoKVxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSB0aGlzLmVtcHR5VGFibGUgJiYgdGhpcy5lbXB0eVRhYmxlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlRXJyb3IoZXJyPzogYW55KSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSAodGhpcy5lcnJvclRlbXBsYXRlICYmIHRoaXMuZXJyb3JUZW1wbGF0ZS5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KTtcbiAgICAgIGxldCBpbm5lck1lc3NhZ2U6IGFueTtcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIGlubmVyTWVzc2FnZSA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NtYWxsJykuaXRlbSgwKTtcbiAgICAgIH1cbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgIGlmIChpbm5lck1lc3NhZ2UpIHtcbiAgICAgICAgICBpbm5lck1lc3NhZ2UuaW5uZXJIVE1MID0gZXJyLmVycm9yICYmIGVyci5lcnJvci5tZXNzYWdlID8gZXJyLmVycm9yLm1lc3NhZ2UgOiBlcnIubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9IHRoaXMuZXJyb3JUZW1wbGF0ZSAmJiB0aGlzLmVycm9yVGVtcGxhdGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW5uZXJNZXNzYWdlKSB7XG4gICAgICAgICAgaW5uZXJNZXNzYWdlLmlubmVySFRNTCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckVtcHR5VGFibGUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gJyc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGV4cG9ydCgpIHtcbiAgICBjb25zdCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kdC1idXR0b25zIC5idXR0b25zLWV4Y2VsJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgZWxlbWVudC5jbGljaygpO1xuICB9XG5cbiAgcHVibGljIGhhbmRsZUNvbHVtbnMoY29sdW1uc1RvU2hvdykge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy5kYXRhVGFibGU7XG4gICAgdGhpcy5jb25maWcuY29sdW1ucy5zbGljZSgxKS5mb3JFYWNoKChjb2x1bW4sIGkpID0+IHtcbiAgICAgIGlmICghY29sdW1uLmhpZGRlbikge1xuICAgICAgICBpZiAoY29sdW1uc1RvU2hvdy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgICAgIHRhYmxlLmNvbHVtbihjb2x1bW4ubmFtZSArICc6bmFtZScpLnZpc2libGUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2NvbmZpZ1NyYycpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5jb25maWdTcmMgIT0gbnVsbCkge1xuICAgICAgICAvLyBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gb24gY2hhbmdlXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdHJpcGxlLWVxdWFsc1xuICAgICAgICBpZiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICYmIChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5jb25maWdTcmMucHJldmlvdXNWYWx1ZSkpIHtcbiAgICAgICAgICB0aGlzLl9odHRwLmdldChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUpLnRvUHJvbWlzZSgpLnRoZW4oKGNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIC8vIGZldGNoIGFuZCByZWRyYXdcbiAgICAgICAgICAgIHRoaXMuZmV0Y2goKTtcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9hZGluZyB0YWJsZSBjb25maWd1cmF0aW9uLicpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc2V0KGxvYWQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB0aGlzLmF1dG9Mb2FkID0gISFsb2FkO1xuICAgIHRoaXMubmdPbkluaXQoKTtcbiAgfVxuXG4gIHNlbGVjdENvbHVtbnMoKSB7XG4gICAgLy8gZ2V0IGNvbHVtbiBvcmRlciBlLmcuIFswLCA0LCAxLCAyLCAzXVxuICAgIGNvbnN0IGNvbHVtbk9yZGVyOiBudW1iZXJbXSA9IHRoaXMuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoKTtcbiAgICAvLyBnZXQgY29sdW1uIGRlZmluaXRpb25zXG4gICAgY29uc3QgY29sdW1uRGVmcyA9IHRoaXMuZGF0YVRhYmxlLnNldHRpbmdzKCkuaW5pdCgpLmNvbHVtbnM7XG4gICAgY29uc3QgY29sdW1ucyA9IGNvbHVtbkRlZnMubWFwKChcbiAgICAgIGNvbHVtbkRlZjogeyBrZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCwgdmlzaWJsZTogYm9vbGVhbixcbiAgICAgICAgc29ydGFibGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgY29sdW1uLSR7aX1gO1xuICAgICAgbGV0IHRpdGxlID0gY29sdW1uRGVmLnRpdGxlO1xuICAgICAgLy8gZ2V0IGNvbHVtbiBpbmRleFxuICAgICAgY29uc3QgaW5kZXggPSAgY29sdW1uT3JkZXIuaW5kZXhPZihpKTtcbiAgICAgIGNvbnN0IHZpc2libGUgPSB0aGlzLmRhdGFUYWJsZS5jb2x1bW4oaW5kZXgpLnZpc2libGUoKTtcbiAgICAgIC8vIHNldCB0aXRsZSBmb3Igc2VsZWN0IGNvbHVtblxuICAgICAgaWYgKGkgPT09IDAgJiYgdGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgIHRpdGxlID0gJzwnICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuU2VsZWN0Q29sdW1uJykgKyAnPic7XG4gICAgICB9XG4gICAgICAvLyBnZXQgY29sdW1uIHRpdGxlXG4gICAgICBpZiAodGl0bGUgIT0gbnVsbCAmJiB0aXRsZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGl0bGUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAodGl0bGUgPT0gbnVsbCkge1xuICAgICAgICAvLyB0cnkgdG8gZmluZCBjb2x1bW4gcGxhY2Vob2xkZXJcbiAgICAgICAgbGV0IHBsYWNlaG9sZGVyOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5jb25maWcuY29sdW1uc1tpIC0gMV0ucGxhY2Vob2xkZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBsYWNlaG9sZGVyID0gdGhpcy5jb25maWcuY29sdW1uc1tpXS5wbGFjZWhvbGRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT0gbnVsbCkge1xuICAgICAgICAgIHRpdGxlID0gJzwnICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHBsYWNlaG9sZGVyKSArICc+JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRpdGxlID09IG51bGwpIHtcbiAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5Vbmtub3duQ29sdW1uJykgKyAnPic7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXksXG4gICAgICAgIHRpdGxlLFxuICAgICAgICB2aXNpYmxlLFxuICAgICAgICBpbmRleFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLl9jb2x1bW5TZWxlY3Rvci5zZWxlY3RDb2x1bW5zKGNvbHVtbnMpLnRoZW4oKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQucmVzdWx0ID09PSAnb2snKSB7XG4gICAgICAgIGNvbnN0IHNvcnRlZCA9IChldmVudC5jb2x1bW5zIGFzIGFueVtdKVxuICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAga2V5OiBjb2wua2V5LFxuICAgICAgICAgICAgICBpbmRleDogY29sLmluZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcbiAgICAgICAgLy8gZ2V0IGNvbHVtbiBvcmRlciBlLmcuIFszLCAxLCAyLCAwLCA0XVxuICAgICAgICBjb25zdCBpbmRleGVzID0gc29ydGVkXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pLmZpbmRJbmRleCgobmV4dCkgPT4gaXRlbS5rZXkgPT09IG5leHQua2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIHJlc2V0IGNvbHVtbiB2aXNpYmlsdHlcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IChldmVudC5jb2x1bW5zIGFzIGFueVtdKS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBlbGVtZW50ID0gKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pW2luZGV4XTtcbiAgICAgICAgICBjb25zdCBjb2xJbmRleCA9IGNvbHVtbk9yZGVyLmluZGV4T2YoaW5kZXgpO1xuICAgICAgICAgIC8vIHNldCB2aXNpYmlsdHkgd2l0aCByZWRyYXcgKD10cnVlKVxuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbHVtbihjb2xJbmRleCkudmlzaWJsZShlbGVtZW50LnZpc2libGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGZpbmFsbHkgYXBwbHkgY29sdW1uIG9yZGVyXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoaW5kZXhlcywgdHJ1ZSk7XG4gICAgICAgIC8vIHNpbXBseSByZWRyYXcgdGhlIHRhYmxlXG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyB0byBwYXNzIGFuIGVycm9ySGFuZGxlciBjYWxsYmFjaywgaWYgZGVzaXJlZFxuICAgKiBAcmV0dXJucyB2b2lkXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZXhwb3J0VmlldyhvcHRpb25zPzoge2Vycm9ySGFuZGxlcj86IChyZWFzb24/OiBhbnkpID0+IGFueX0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5fbG9hZGluZy5zaG93TG9hZGluZygpO1xuICAgICAgLy8gdmFsaWRhdGUgcXVlcnkgaXRlbXMgYW5kIGNvbmZpZ1xuICAgICAgaWYgKCEodGhpcy5sYXN0UXVlcnkgJiYgdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcyAmJiB0aGlzLmNvbmZpZykpIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBnZXQgZXhwb3J0IHNldHRpbmdzXG4gICAgICBjb25zdCBleHBvcnRTZXR0aW5ncyA9IHRoaXMuX2NvbmZpZ3VyYXRpb24uc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gYW5kIGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgZXhwb3J0TGltaXQgPVxuICAgICAgICAoZXhwb3J0U2V0dGluZ3MgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMuZXhwb3J0TGltaXQgPiAwKVxuICAgICAgICA/IGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCA6IE1BWF9FWFBPUlRfSVRFTVM7XG4gICAgICAvLyBhbmQgdmFsaWRhdGUgaXRcbiAgICAgIGlmICh0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID4gZXhwb3J0TGltaXQpIHtcbiAgICAgICAgLy8gY2FsbCBlcnJvciBoYW5kbGVyXG4gICAgICAgIC8vIHByb3ZpZGUgYSByZWNvZ25pemlibGUgZXJyb3IgdHlwZVxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVycm9ySGFuZGxlcikge1xuICAgICAgICAgIG9wdGlvbnMuZXJyb3JIYW5kbGVyKG5ldyBFeHBvcnRMaW1pdEV4Y2VlZGVkRXJyb3IoJ0V4cG9ydCBsaW1pdCBleGNlZWRlZCcpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gb3Igc2hvdyB3YXJuaW5nIG1vZGFsIGFuZCBleGl0XG4gICAgICAgIHRoaXMuX21vZGFsU2VydmljZS5zaG93V2FybmluZ0RpYWxvZyh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5FeHBvcnRMaXN0JyksXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuRXhwb3J0TGltaXRFeGNlZWRlZCcsXG4gICAgICAgICAgICB7ZGF0YUxlbmd0aDogdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcywgZXhwb3J0TGltaXR9KSwgRElBTE9HX0JVVFRPTlMuT2spO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBnZXQgdG90YWwgZGlzcGxheWVkIGl0ZW1zXG4gICAgICBjb25zdCB0b3RhbERpc3BsYXllZEl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSkubGVuZ3RoO1xuICAgICAgLy8gaWYgdGhleSBhbHJlYWR5IHNhdGlzZnkgdGhlIGxhc3QgcXVlcnkgdG90YWxcbiAgICAgIGlmICh0b3RhbERpc3BsYXllZEl0ZW1zID09PSB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zKSB7XG4gICAgICAgIC8vIHByZXBhcmUgZXhjZWwgZGF0YSBpbW1lZGlhdGVseVxuICAgICAgICBjb25zdCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZ2V0RXhwb3J0YWJsZURhdGEoKTtcbiAgICAgICAgLy8gYW5kIGV4cG9ydCB0aGVtIHRvIGV4Y2VsXG4gICAgICAgIHRoaXMuX2V4cG9ydFNwcmVhZHNoZWV0LmV4cG9ydChib2R5LCBgJHt0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQodGhpcy5jb25maWcudGl0bGUgfHwgJ1RhYmxlcy5FeHBvcnRSZXN1bHRzJyl9Lnhsc3hgLCB7XG4gICAgICAgICAgICBoZWFkZXIsXG4gICAgICAgICAgICBza2lwSGVhZGVyOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIG1vcmUgZGF0YSBuZWVkIHRvIGJlIGZldGNoZWRcbiAgICAgICAgLy8gaG9sZCBwcmV2aW91cyBkYXRhIHN0YXRlXG4gICAgICAgIGNvbnN0IHByZXZpb3VzRGF0YVN0YXRlID0gdGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKS50b0FycmF5KCk7XG4gICAgICAgIC8vIGdldCB0YXJnZXQgZGF0YSBzdGF0ZSBieSBleGVjdXRpbmcgdGhlIGxhc3QgcXVlcnlcbiAgICAgICAgLy8gbm90ZTogdGFraW5nIHRoZSBleHBvcnRMaW1pdCBhbW91bnQgb2YgaXRlbXMgd2lsbCBhbHdheXMgc2F0aXNmeSB0aGUgcmVzdWx0cyxcbiAgICAgICAgLy8gYmVjYXVzZSBpdCBoYXMgYmVlbiB2YWxpZGF0ZWRcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0YVN0YXRlID0gYXdhaXQgdGhpcy5sYXN0UXVlcnkudGFrZShleHBvcnRMaW1pdCkuc2tpcCgwKS5nZXRJdGVtcygpO1xuICAgICAgICAvLyBjaGFuZ2UgdGFibGUgZGF0YSBvbiB0aGUgZmx5LCBidXQgZG8gbm90IHJlZHJhd1xuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpLnJvd3MuYWRkKHRhcmdldERhdGFTdGF0ZSk7XG4gICAgICAgIC8vIHByZXBhcmUgZXhjZWwgZGF0YVxuICAgICAgICBjb25zdCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZ2V0RXhwb3J0YWJsZURhdGEoKTtcbiAgICAgICAgLy8gcmVzZXQgdGFibGUgZGF0YVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpLnJvd3MuYWRkKHByZXZpb3VzRGF0YVN0YXRlKTtcbiAgICAgICAgLy8gYW5kIGV4cG9ydCB0YXJnZXQgZGF0YSB0byBleGNlbFxuICAgICAgICB0aGlzLl9leHBvcnRTcHJlYWRzaGVldC5leHBvcnQoYm9keSwgYCR7dGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLnRpdGxlIHx8ICdUYWJsZXMuRXhwb3J0UmVzdWx0cycpfS54bHN4YCwge1xuICAgICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICAgc2tpcEhlYWRlcjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBleGl0XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBsb2cgZXJyb3JcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIC8vIGNhbGwgZXJyb3IgaGFuZGxlciwgaWYgZGVmaW5lZFxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lcnJvckhhbmRsZXIpIHtcbiAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVzZSBkZWZhdWx0IGVycm9yIHNlcnZpY2VcbiAgICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgICBjb250aW51ZUxpbms6ICcuJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fbG9hZGluZy5oaWRlTG9hZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBvcnRhYmxlRGF0YSgpOiB7Ym9keTogYW55W10sIGhlYWRlcjogYW55W119IHtcbiAgICBpZiAoISh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5idXR0b25zXG4gICAgICAmJiB0eXBlb2YgdGhpcy5kYXRhVGFibGUuYnV0dG9ucy5leHBvcnREYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaXMuY29uZmlnKSkge1xuICAgICAgcmV0dXJuIHtib2R5OiBbXSwgaGVhZGVyOiBbXX07XG4gICAgfVxuICAgIC8vIGZldGNoIGV4cG9ydGFibGUgZXhjZWwgZGF0YVxuICAgIGxldCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZGF0YVRhYmxlLmJ1dHRvbnMuZXhwb3J0RGF0YSgpO1xuICAgIGNvbnN0IGNsZWFudXBJbmRleGVzOiBudW1iZXJbXSA9IFtdO1xuICAgIC8vIGNsZWFuIHVwIGhlYWRlcnNcbiAgICBoZWFkZXIgPSBoZWFkZXIuZmlsdGVyKChoZWFkZXJJdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIC8vIGV4Y2x1ZGUgZW1wdHkgaGVhZGVyc1xuICAgICAgaWYgKGhlYWRlckl0ZW0udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjbGVhbnVwSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gZXhjbHVkZSBoaWRkZW4gY29sdW1uc1xuICAgICAgLy8gbm90ZTogdXNlIHRoZSBkYXRhdGFibGUgdmlzaWJsZSgpIGZ1bmN0aW9uXG4gICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBoaWRkZW4gY29uZmlnIHByb3BlcnR5LCB0byBzYXRpc2Z5IHRoZSBjb2x1bW4gc2VsZWN0b3JcbiAgICAgIGlmICghdGhpcy5kYXRhVGFibGUuY29sdW1uKGluZGV4KS52aXNpYmxlKCkpIHtcbiAgICAgICAgY2xlYW51cEluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIC8vIGNsZWFuIHVwIGJvZHlcbiAgICBib2R5ID0gYm9keS5tYXAoKHJvdzogYW55IFtdKSA9PiB7XG4gICAgICByZXR1cm4gcm93LmZpbHRlcigoXywgcm93SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gY2xlYW51cEluZGV4ZXMuaW5kZXhPZihyb3dJbmRleCkgPT09IC0xO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtib2R5LCBoZWFkZXJ9O1xuICB9XG59XG5cbi8vIGNvbnN0IGVuZFJlbmRlciA9IGZ1bmN0aW9uIChyb3dzLCBncm91cCkgeyB2YXIgY291bnQgPSByb3dzLmRhdGEoKTsgcm93cy5jb3VudCgpO1xuLy8gICByZXR1cm4gKGA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJvd0dyb3VwVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBkYXRhOiAke2dyb3VwfSB9XCI+PC9uZy1jb250YWluZXI+YCk7IH07XG4vLyA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJvd0dyb3VwVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBkYXRhOiAgfVwiPjwvbmctY29udGFpbmVyPlxuLy8gcmV0dXJuICgnPHNwYW4gYWxpZ249XCJsZWZ0XCJcIj48c3Ryb25nPicrIGdyb3VwICsgJyAnICsgYCgke3RvdGFsSGVhZGVyfSBgICArIGNvdW50Lmxlbmd0aCArICcpPC9zdHJvbmc+PC9zcGFuPicpOyB9O1xuIl19
|
|
2392
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUFFLFlBQVksRUFDeEIsTUFBTSxFQUNOLGNBQWMsRUFDZCxRQUFRLEVBQ1IsS0FBSyxFQUNHLE1BQU0sRUFDZCxTQUFTLEVBQ1QsaUJBQWlCLEVBSWpCLFdBQVcsRUFDWCxnQkFBZ0IsRUFFakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUcvQyxPQUFPLEVBQUMsdUJBQXVCLEVBQThCLE1BQU0sNkJBQTZCLENBQUM7QUFDakcsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDckYsT0FBTyxFQUFlLGVBQWUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQUMsWUFBWSxFQUFFLGNBQWMsRUFBRSxvQkFBb0IsRUFDeEQsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsd0JBQXdCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUdqRyxPQUFPLEtBQUssT0FBTyxNQUFNLFFBQVEsQ0FBQztBQUNsQyxPQUFPLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDaEMsT0FB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O3VCQUNiLE1BQU0sU0FBQyxNQUFNO3lCQUNiLEtBQUssU0FBQyxRQUFRO3lCQUNkLE1BQU0sU0FBQyxRQUFRO3VCQUNmLE1BQU0sU0FBQyxNQUFNO3VCQUNiLE1BQU0sU0FBQyxNQUFNO3dCQUNiLE1BQU0sU0FBQyxPQUFPO3lCQUNkLE1BQU0sU0FBQyxRQUFRO2dDQUNmLE1BQU0sU0FBQyxlQUFlO21DQUN0QixNQUFNLFNBQUMsa0JBQWtCO2tDQUN6QixNQUFNLFNBQUMsaUJBQWlCOzBCQUN4QixNQUFNLFNBQUMsU0FBUzs4QkFLaEIsTUFBTSxTQUFDLGFBQWE7OEJBQ3BCLE1BQU0sU0FBQyxhQUFhOzZCQUVwQixLQUFLOzZCQUNMLEtBQUs7NkJBQ0wsS0FBSzt5QkFDTCxLQUFLOzZCQUNMLEtBQUs7aUNBQ0wsS0FBSzs0QkFDTCxLQUFLO29DQUNMLEtBQUs7b0NBQ0wsS0FBSzswQkFFTCxLQUFLOzBCQUNMLEtBQUs7NkJBSUwsS0FBSztpQ0FJTCxLQUFLOytCQUlMLEtBQUs7MkJBQ0wsS0FBSzs0QkFLTCxLQUFLOzJCQU1MLEtBQUs7aUNBR0wsS0FBSztpQ0FDTCxLQUFLO2tDQUNMLEtBQUs7eUJBQ0wsU0FBUyxTQUFDLFFBQVE7eUJBQ2xCLFNBQVMsU0FBQyxRQUFRO3lCQUtsQixLQUFLLFNBQUMsUUFBUTs2QkFrQmQsS0FBSyxTQUFDLFlBQVk7NkJBeUJqQixLQUFLLFNBQUMsWUFBWTs2QkFpQ25CLEtBQUssU0FBQyxZQUFZO3dCQXlCbEIsS0FBSyxTQUFDLE9BQU87O2lDQWxXaEI7O1NBdUthLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIENvbnRlbnRDaGlsZCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlciwgT25BZHZhbmNlZENvbHVtbkFmdGVyUmVuZGVyfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMnO1xuaW1wb3J0IHtDbGllbnREYXRhUXVlcnlhYmxlfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXJ9IGZyb20gJy4vYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb24sIEJlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1RlbXBsYXRlUGlwZSwgTG9hZGluZ1NlcnZpY2UsIENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICBNb2RhbFNlcnZpY2UsIERJQUxPR19CVVRUT05TLCBFcnJvclNlcnZpY2UsIEV4cG9ydFNwcmVhZHNoZWV0U2VydmljZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlRm9ybWF0dGVyc30gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZSc7XG4vLyBpbXBvcnRhbnQgbm90ZTogdXNlIHRoaXMgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmltcG9ydCAqIGFzIGpRdWVyeV8gZnJvbSAnanF1ZXJ5JztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQnO1xuaW1wb3J0IHt0ZW1wbGF0ZX0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQtcm93Z3JvdXAnOyAvLyB0aGlzIHBsdWdpbiBpbXBvcnQgbGluZSBtdXN0IGNvbWUgYmVmb3JlIHRoZSBmb2xsb3dpbmcgZGF0YXRhYmxlcyBwbHVnaW4gaW1wb3J0c1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1zY3JvbGxlcic7XG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LWNvbHJlb3JkZXInO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1idXR0b25zJztcbmltcG9ydCAnZGF0YXRhYmxlcy5uZXQtZml4ZWRjb2x1bW5zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uLCBNQVhfRVhQT1JUX0lURU1TIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcblxuLy8gcmVzdG9yZSBqcXVlcnkgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmNvbnN0IGpRdWVyeSA9IGpRdWVyeV87XG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IHtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNGaWx0ZXJlZDogbnVtYmVyO1xuICBkYXRhOiBBcnJheTxhbnk+O1xufVxuXG5jb25zdCBEYXRhVGFibGVzQXBpOiBhbnkgPSBqUXVlcnkuZm4uZGF0YVRhYmxlLkFwaTtcbkRhdGFUYWJsZXNBcGkucmVnaXN0ZXIoICdwcm9jZXNzaW5nKCknLCBmdW5jdGlvbiggc2hvdzogYW55ICkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCd0YWJsZScsICggY3R4OiBhbnkgKSA9PiB7XG4gICAgICAgIGN0eC5vQXBpLl9mblByb2Nlc3NpbmdEaXNwbGF5KCBjdHgsIHNob3cgKTtcbiAgICB9ICk7XG59KTtcblxuY29uc3QgRU1QVFlfREFUQVNFVCA9IHtcbiAgcmVjb3Jkc1RvdGFsOiAwLFxuICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gIGRhdGE6IFtdLFxufTtcblxuY2xhc3MgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBwdWJsaWMgY2hlY2tOb0NoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZGV0YWNoKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgbWFya0ZvckNoZWNrKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHJlYXR0YWNoKCk6IHZvaWQge1xuICB9XG5cbn1cblxuZXhwb3J0IGxldCBDT0xVTU5fRk9STUFUVEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignY29sdW1uLmZvcm1hdHRlcnMnKTtcblxuZXhwb3J0IGNsYXNzIEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIFJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yJztcbiAgfVxufVxuXG5jbGFzcyBDb2x1bW5Gb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGNsYXNzPzogc3RyaW5nO1xuICBwdWJsaWMgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgZGVmYXVsdENvbnRlbnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXRTdHJpbmc/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXR0ZXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW4/OiBib29sZWFuO1xuICBwdWJsaWMgbmFtZT86IHN0cmluZztcbiAgcHVibGljIG9yZGVyPzogc3RyaW5nO1xuICBwdWJsaWMgcHJvcGVydHk/OiBzdHJpbmc7XG4gIHB1YmxpYyBzb3J0YWJsZT86IGJvb2xlYW47XG4gIHB1YmxpYyB0aXRsZSA9ICcnO1xuXG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBhbnksIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAvL1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlQ2FzdDxUPihpbnB1dDogYW55KTogVCB7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBjYXN0KGlucHV0OiBhbnksIGNsb25lPzogYm9vbGVhbik6IFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKGNsb25lKSB7XG4gICAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KGlucHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYW5kb21JZGVudGlmaWVyKCkge1xuICByZXR1cm4gKFxuICAgIE51bWJlcihTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMikpXG4gICkudG9TdHJpbmcoMzYpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0YWJsZSAjdGFibGUgY2xhc3M9XCJkYXRhVGFibGVcIj5cbiAgICA8L3RhYmxlPlxuICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjZXJyb3JUZW1wbGF0ZSBjbGFzcz1cImQtbm9uZSBlcnJvci1tZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZGFuZ2VyIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LXNlY29uZGFyeVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1zZWNvbmRhcnkgbWItMVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtc2Vjb25kYXJ5IGVycm9yLWlubmVyLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxzbWFsbD48L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuXG4gIHByaXZhdGUgX3F1ZXJ5PzogQ2xpZW50RGF0YVF1ZXJ5YWJsZTtcbiAgcHJpdmF0ZSBfY29uZmlnPzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dIZWFkZXIgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93UGFnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2lkID0gZ2V0UmFuZG9tSWRlbnRpZmllcigpO1xuICBwdWJsaWMgc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgcHVibGljIGNvbmZpZ0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGUnKSBwdWJsaWMgdGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgcHVibGljIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlcnJvclRlbXBsYXRlJykgcHVibGljIGVycm9yVGVtcGxhdGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlPzogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgcHVibGljIGhlaWdodCA9IDgwMDtcbiAgQElucHV0KCkgcHVibGljIHNob3dBY3Rpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQE91dHB1dCgnY3VzdG9tRXZlbnQnKSBwdWJsaWMgY3VzdG9tRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2xvYWQnKSBwdWJsaWMgbG9hZDogRXZlbnRFbWl0dGVyPEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0PiA9IG5ldyBFdmVudEVtaXR0ZXI8QWR2YW5jZWRUYWJsZURhdGFSZXN1bHQ+KCk7XG4gIEBPdXRwdXQoJ2luaXQnKSBwdWJsaWMgaW5pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCdyZWxvYWQnKSBwdWJsaWMgcmVsb2FkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdzZWxlY3QnKSBwdWJsaWMgc2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdkcmF3JykgcHVibGljIGRyYXc6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3BhZ2UnKSBwdWJsaWMgcGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnb3JkZXInKSBwdWJsaWMgb3JkZXI6IEV2ZW50RW1pdHRlcjxhbnlbXVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W11bXT4oKTtcbiAgQE91dHB1dCgnc2Nyb2xsJykgcHVibGljIHNjcm9sbDogRXZlbnRFbWl0dGVyPHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdGVkSXRlbXMnKSBwdWJsaWMgc2VsZWN0ZWRJdGVtczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnYmVmb3JlU2VydmVyRGF0YScpIHB1YmxpYyBiZWZvcmVTZXJ2ZXJEYXRhOiBFdmVudEVtaXR0ZXI8Q2xpZW50RGF0YVF1ZXJ5YWJsZT4gPSBuZXcgRXZlbnRFbWl0dGVyPENsaWVudERhdGFRdWVyeWFibGU+KCk7XG4gIEBPdXRwdXQoJ2FmdGVyU2VydmVyRGF0YScpIHB1YmxpYyBhZnRlclNlcnZlckRhdGE6IEV2ZW50RW1pdHRlcjx7IHNraXA/OiBudW1iZXIsIHRvdGFsPzogbnVtYmVyLCB2YWx1ZTogYW55W119PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBza2lwPzogbnVtYmVyLCB0b3RhbD86IG51bWJlciwgdmFsdWU6IGFueVtdfT4oKTtcbiAgQE91dHB1dCgnbG9hZGluZycpIHB1YmxpYyBsb2FkaW5nOiBFdmVudEVtaXR0ZXI8e1xuICAgIHRhcmdldDogQWR2YW5jZWRUYWJsZUNvbXBvbmVudFxuICB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHRhcmdldDogQWR2YW5jZWRUYWJsZUNvbXBvbmVudFxuICB9PigpO1xuICBAT3V0cHV0KCdzaG93RGV0YWlscycpIHB1YmxpYyBzaG93RGV0YWlsczogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgnaGlkZURldGFpbHMnKSBwdWJsaWMgaGlkZURldGFpbHM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VydmVyU2lkZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBsZW5ndGhNZW51ID0gWzUwLCAxMDAsIDIwMCwgNTAwXTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2luZyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5PcmRlcmluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc3RhdGVTYXZlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZUxvYWRDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBjYWxsYmFjazogKHN0YXRlOiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmVDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBzdGF0ZTogYW55KSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxZID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIHJvdyBzZWxlY3Rpb24uIFRoZSBkZWZhdWxyIHZhbHVlIGlzIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlIG11bHRpcGxlIHNlbGVjdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWVzIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyBjdXN0b20gc2VsZWN0aW9uIGFuZCBoaWRlcyBzZWxlY3QgY29sdW1uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgdW5zZWxlY3RlZDogYW55W10gPSBbXTtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIFVSTCB0byBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gZnJvbVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNvbmZpZ1NyYz86IHN0cmluZztcbiAgcHVibGljIGxhc3RFcnJvcjogYW55O1xuXG4gIC8qKlxuICAgKiBBY2NlcHRzIGFycmF5IG9mIHByb3BlcnRpZXMgYXMgcm93IGdyb3VwIGZhY3RvcnMgYW5kIGRpc3BsYXlzIGdyb3VwZWQgdGFibGUuXG4gICAqL1xuICBASW5wdXQoKSByb3dHcm91cDogIHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbGFzdFJvd0dyb3VwT3JkZXI/OiB7IGNvbHVtbjogbnVtYmVyOyBkaXJlY3Rpb246IHN0cmluZzsgfSB8IG51bGw7XG5cbiAgQElucHV0KCkgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBmb290ZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIHByaXZhdGUgZGV0YWlsc1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnaGVhZGVyJykgaGVhZGVyPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZm9vdGVyJykgZm9vdGVyPzogRWxlbWVudFJlZjtcblxuICAvKipcbiAgICogR2V0cyBvciBzZXRzIHRhYmxlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIEBJbnB1dCgnY29uZmlnJylcbiAgcHVibGljIHNldCBjb25maWcodmFsdWU6IFRhYmxlQ29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX2NvbmZpZyA9IHZhbHVlO1xuICAgIC8vIHJhaXNlIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuY29uZmlnQ2hhbmdlcy5uZXh0KHRoaXMuX2NvbmZpZyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnIGFzIFRhYmxlQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbGFzdFF1ZXJ5VG90YWxJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0YWJsZSBmb290ZXIgd2lsbCBiZSB2aXNpYmxlIG9yIG5vdFxuICAgKi9cbiAgQElucHV0KCdzaG93Rm9vdGVyJylcbiAgcHVibGljIHNldCBzaG93Rm9vdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd0Zvb3RlciA9IHZhbHVlO1xuICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICBpZiAodGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGVzX2luZm8nKTtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZC1ub25lJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd0Zvb3RlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd0Zvb3RlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0YWJsZSBmb290ZXIgd2lsbCBiZSB2aXNpYmxlIG9yIG5vdFxuICAgKi9cbiAgIEBJbnB1dCgnc2hvd0hlYWRlcicpXG4gICBwdWJsaWMgc2V0IHNob3dIZWFkZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgdGhpcy5fc2hvd0hlYWRlciA9IHZhbHVlO1xuICAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgIGNvbnN0IGVsZW1lbnQgPSAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlPnRoZWFkJyk7XG4gICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICAgcmV0dXJuO1xuICAgICAgIH1cbiAgICAgICBjb25zdCBkYXRhVGFibGUgPSAoIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZScpO1xuICAgICAgIGlmIChkYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgICAgIC8vIGFkZCB0b3AgbWFyZ2luXG4gICAgICAgICBkYXRhVGFibGUuY2xhc3NMaXN0LnJlbW92ZSgnbXQtMicpO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gcmVtb3ZlIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QuYWRkKCdtdC0yJyk7XG4gICAgICAgfVxuICAgICB9XG4gICB9XG5cbiAgIHB1YmxpYyBnZXQgc2hvd0hlYWRlcigpIHtcbiAgICAgcmV0dXJuIHRoaXMuX3Nob3dIZWFkZXI7XG4gICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHBhZ2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dQYWdpbmcnKVxuICBwdWJsaWMgc2V0IHNob3dQYWdpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93UGFnaW5nID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfcGFnaW5hdGUnKTtcbiAgICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5zaG93KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqUXVlcnkoZWxlbWVudCkuaGlkZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvd1BhZ2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2hvd1BhZ2luZztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgYW4gYWN0aXZlIHF1ZXJ5IGZvciB0aGlzIHRhYmxlXG4gICAqL1xuICBASW5wdXQoJ3F1ZXJ5JylcbiAgcHVibGljIHNldCBxdWVyeSh2YWx1ZTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3F1ZXJ5ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHF1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeSBhcyBDbGllbnREYXRhUXVlcnlhYmxlO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHRyYW5zbGF0b3I6IFRyYW5zbGF0ZVBpcGU7XG4gIHB1YmxpYyBkYXRhVGFibGU6IGFueTtcbiAgcHVibGljIGR0T3B0aW9uczogYW55O1xuICBwcml2YXRlIGxhc3RRdWVyeVBhcmFtcz86IERhdGFTZXJ2aWNlUXVlcnlQYXJhbXM7XG4gIHByaXZhdGUgX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICBwcml2YXRlIHJlbG9hZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBASW5qZWN0KENPTFVNTl9GT1JNQVRURVJTKSBwcml2YXRlIF9jb2x1bW5Gb3JtYXR0ZXJzOiBBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nOiBMb2FkaW5nU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29sdW1uU2VsZWN0b3I6IENvbHVtblNlbGVjdG9yU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2V4cG9ydFNwcmVhZHNoZWV0OiBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge1xuICAgIC8vIGluaXRpYWxpemUgdHJhbnNsYXRlIHBpcGVcbiAgICB0aGlzLnRyYW5zbGF0b3IgPSBuZXcgVHJhbnNsYXRlUGlwZSh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLCBuZXcgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yKCkpO1xuICAgIGpRdWVyeS5mbi5kYXRhVGFibGUuZXh0LmNsYXNzZXMuc1BhZ2VCdXR0b24gPSAnYnRuJztcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uQWN0aXZlID0gJ2J0biBidG4tbGlnaHQnO1xuICAgIHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uID0gdGhpcy5yZWxvYWQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmZldGNoKCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBzaW1wbGUgc2VhcmNoXG4gIHB1YmxpYyBzZWFyY2goc2VhcmNoVGV4dCkge1xuICAgIHRoaXMucXVlcnkgPSB0aGlzLnF1ZXJ5IHx8IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZSkge1xuICAgICAgaWYgKHNlYXJjaFRleHQgJiYgdGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbikge1xuICAgICAgICAvLyB2YWxpZGF0ZSBzZWFyY2ggdGV4dCBpbiBkb3VibGUgcXVvdGVzXG4gICAgICAgIGlmICgvXlwiKC4qPylcIiQvLnRlc3Qoc2VhcmNoVGV4dCkpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJyxcbiAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uLCB7XG4gICAgICAgICAgICAgIHRleHQ6IHNlYXJjaFRleHQucmVwbGFjZSgvXlwifFwiJC9nLCAnJyksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdHJ5IHRvIHNwbGl0IHdvcmRzXG4gICAgICAgICAgY29uc3Qgd29yZHMgPSBzZWFyY2hUZXh0LnNwbGl0KCcgJyk7XG4gICAgICAgICAgLy8gam9pbiB3b3JkcyB0byBhIHNpbmdsZSBmaWx0ZXJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSB3b3Jkcy5tYXAoKHdvcmQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24pIGFzIHN0cmluZywge1xuICAgICAgICAgICAgICB0ZXh0OiB3b3JkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkuam9pbignIGFuZCAnKTtcbiAgICAgICAgICAvLyBzZXQgZmlsdGVyXG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNsZWFyIGZpbHRlclxuICAgICAgICB0aGlzLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9maXJzdExvYWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZW5zdXJlIGVtcHR5IHRhYmxlIGxheW91dFxuICAgICAgdGhpcy5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgIC8vIHNlYXJjaCBsb2NhbGx5XG4gICAgICB0aGlzLmRhdGFUYWJsZS5zZWFyY2goc2VhcmNoVGV4dC50cmltKCkpLmRyYXcoKTtcbiAgICAgIC8vIGdldCBpbmRleGVzIG9mIGZpbHRlcmVkIHJvd3NcbiAgICAgIGNvbnN0IGluZGV4ZXMgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0uYWlEaXNwbGF5KTtcbiAgICAgIC8vIHNldCByZWNvcmRzRmlsdGVyZWRcbiAgICAgIGNvbnN0IHJlY29yZHNGaWx0ZXJlZCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gc2V0IHJlY29yZHNUb3RhbFxuICAgICAgY29uc3QgcmVjb3Jkc1RvdGFsID0gaW5kZXhlcy5sZW5ndGg7XG4gICAgICAvLyByZXRyaWV2ZSBkYXRhIGZyb20gaW5kZXhlc1xuICAgICAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUucm93cygpLmRhdGEoKSk7XG4gICAgICBjb25zdCBkYXRhID0gaW5kZXhlcy5tYXAoaW5kZXggPT4gcm93c1s8bnVtYmVyPmluZGV4XSk7XG4gICAgICAvLyBlbWl0IHJlc3VsdHMgdG8gbG9hZCBvdXRwdXRcbiAgICAgIHRoaXMubG9hZC5lbWl0KHtcbiAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiByZWNvcmRzRmlsdGVyZWQsXG4gICAgICAgIHJlY29yZHNUb3RhbDogcmVjb3Jkc1RvdGFsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZmV0Y2goY2xlYXJTZWxlY3RlZD86IGJvb2xlYW4pIHtcbiAgICAvLyBpZiBkYXRhIHRhYmxlIGlzIG51bGxcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgPT0gbnVsbCkge1xuICAgICAgLy8gaW5pdGlhbGl6ZSBkYXRhIHRhYmxlXG4gICAgICByZXR1cm4gdGhpcy5uZ09uSW5pdCgpO1xuICAgIH1cbiAgICAvLyBjbGVhciBzZWxlY3Rpb24gaWYgcGFyYW1ldGVyIGlzIG5vdCBkZWNsYXJlZCBvciBpdCdzIHRydWVcbiAgICBpZiAoY2xlYXJTZWxlY3RlZCA9PSBudWxsIHx8IGNsZWFyU2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgdG8gZmFsc2VcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gY2xlYXIgdW5zZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gb3RoZXJ3aXNlIGxvYWQgZGF0YSBvbmx5XG4gICAgdGhpcy5kYXRhVGFibGUuZHJhdygpO1xuICB9XG5cbiAgcHVibGljIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kZXN0cm95KCk7XG4gICAgICB0aGlzLl9maXJzdExvYWQgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgalF1ZXJ5KHRoaXMudGFibGUubmF0aXZlRWxlbWVudCkuZW1wdHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGF0YVRhYmxlID0gbnVsbDtcbiAgICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gY2xlYXIgdW5zZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgdG8gZmFsc2VcbiAgICAgIHRoaXMuc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgc3BlY2lmaWVkIGRhdGEgcm93XG4gICAqL1xuICBwdWJsaWMgc2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gZ2V0IHJvd1xuICAgICAgY29uc3Qgcm93Tm9kZSA9IHJvdy5ub2RlKCk7XG4gICAgICAvLyBpZiBtdWx0aXBsZSBzZWxlY3QgaXMgZmFsc2VcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgLy8gZW51bWVyYXRlIHJvd1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ub2RlcygpLmVhY2goKG5vZGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUgIT09IHJvd05vZGUpIHtcbiAgICAgICAgICAgICAgalF1ZXJ5KG5vZGUpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUucm93cygnLnNlbGVjdGVkJykubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbGVhciBzZWxlY3RlZFxuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBpZiBjdXN0b20gc2VsZWN0IG1vZGUgaXMgb2ZmXG4gICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGpRdWVyeShyb3dOb2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvdGhlcndpc2UgYWRkIGNsYXNzXG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIC8vIGdldCByb3cgZGF0YVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIC8vIHNlYXJjaCBzZWxlY3RlZCBpdGVtc1xuICAgICAgbGV0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGRhdGFba2V5XTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IHNlbGVjdGVkIHJvd1xuICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKGRhdGEpO1xuICAgICAgLy8gdmFsaWRhdGUgdW5zZWxlY3RlZCBkYXRhXG4gICAgICBmaW5kSW5kZXggPSB0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGRhdGFba2V5XTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIC8vIHJlbW92ZSBwcmV2aW91c2x5IHNlbGVjdGVkIHJvd1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICB9XG4gICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvdyBpZiBpdCdzIHNlbGVjdGVkXG4gICAqL1xuICBwdWJsaWMgdW5TZWxlY3RSb3cocm93OiBhbnksIHNpbGVudD86IGJvb2xlYW4pIHtcbiAgICBpZiAocm93KSB7XG4gICAgICAvLyBpZiBjdXN0b20gc2VsZWN0IG1vZGUgaXMgb2ZmXG4gICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgbGV0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAvLyBhZGQgdGhpcyByb3cgdG8gdW5zZWxlY3RlZCByb3dzXG4gICAgICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHhba2V5XSA9PT0gaWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMudW5zZWxlY3RlZC5wdXNoKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RBbnkoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCBmbGFnXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gdHJ1ZTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBlbWl0IHNlbGVjdGlvbiBldmVudFxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlbGVjdE5vbmUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgLy8gc2V0IHNtYXJ0IHNlbGVjdCBmbGFnXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnVuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMudW5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgLy8gc2VsZWN0IGFueSByb3dcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5ldmVyeSgoaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3coIGluZGV4ICk7XG4gICAgICAgIHRoaXMudW5TZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVTZWxlY3RSb3cocm93OiBhbnkpIHtcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zdCBkYXRhID0gcm93LmRhdGEoKTtcbiAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4ga2V5XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ubmFtZSB8fCAnJztcbiAgICAgIC8vIGdldCBpZFxuICAgICAgY29uc3QgaWQgPSBkYXRhW2tleV07XG4gICAgICAvLyBmaW5kIGlmIHJvdyBpcyBzZWxlY3RlZFxuICAgICAgY29uc3QgZmluZEluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kKCh4KSA9PiB7XG4gICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICAvLyBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyB1bnNlbGVjdFxuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG5vaW5zcGVjdGlvbiBKU01ldGhvZENhbkJlU3RhdGljXG4gIC8qKlxuICAgKiBEYXRhdGFibGVzIGNvbHVtbiByZW5kZXJlciBmb3Igc2VsZWN0IGNoZWNrYm94XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHBhcmFtIG1ldGFcbiAgICovXG4gIHByaXZhdGUgX3JlbmRlclNlbGVjdChkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmICh0eXBlb2YgY29sdW1uLnNlbGVjdFRlbXBsYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNvbHVtbiwge1xuICAgICAgICBzZWxlY3RUZW1wbGF0ZTogdGVtcGxhdGUoYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lIHMtcm93XCIgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgaWQ9XCJzLSR7dGhpcy5faWR9LVxcJHttZXRhLnJvd31cIiBkYXRhLWlkPVwiXFwke2RhdGF9XCIgLz48bGFiZWwgZm9yPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5cbiAgICAgICAgYCksXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gcmVuZGVyIHRlbXBsYXRlXG4gICAgcmV0dXJuIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSh7XG4gICAgICBtZXRhLFxuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMubG9hZGluZy5lbWl0KHtcbiAgICAgICAgdGFyZ2V0OiB0aGlzXG4gICAgICB9KTtcbiAgICAgIC8vIHBhcnNlIHByb3BlcnRpZXNcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcsICdzZWxlY3RhYmxlJykpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlID0gdGhpcy5jb25maWcuc2VsZWN0YWJsZTtcbiAgICAgIH1cbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcsICdtdWx0aXBsZVNlbGVjdCcpKSB7XG4gICAgICAgIHRoaXMubXVsdGlwbGVTZWxlY3QgPSB0aGlzLmNvbmZpZy5tdWx0aXBsZVNlbGVjdDtcbiAgICAgIH1cbiAgICAgIC8vIHByZXBhcmUgY29uZmlndXJhdGlvbiBmb3IgY29sdW1uc1xuICAgICAgY29uc3QgdGFibGVDb2x1bW5zID0gdGhpcy5jb25maWcuY29sdW1uc1xuICAgICAgICAvLyBmaWx0ZXIgYWN0aW9uIGxpbmsgY29sdW1uXG4gICAgICAgIC5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyICYmIGNvbHVtbi5mb3JtYXR0ZXIgPT09ICdBY3Rpb25MaW5rRm9ybWF0dGVyJyAmJiB0aGlzLnNob3dBY3Rpb25zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAvLyBjb252ZXJ0IGNvbHVtbiB0byBhZHZhbmNlIHRhYmxlIGNvbHVtblxuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBDb2x1bW5Gb3JtYXR0ZXIodGhpcy5faW5qZWN0b3IpLCBjb2x1bW4pO1xuICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbkRlZmluaXRpb24gPSB7XG4gICAgICAgICAgICBkYXRhOiBjb2x1bW4ucHJvcGVydHkgfHwgY29sdW1uLm5hbWUsXG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudDogY29sdW1uLmRlZmF1bHRDb250ZW50ICE9IG51bGwgPyBjb2x1bW4uZGVmYXVsdENvbnRlbnQgOiAnJyxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRyYW5zbGF0b3IudHJhbnNmb3JtKGNvbHVtbi50aXRsZSksXG4gICAgICAgICAgICBzb3J0YWJsZTogY29sdW1uLmhhc093blByb3BlcnR5KCdzb3J0YWJsZScpID8gY29sdW1uLnNvcnRhYmxlIDogdHJ1ZSxcbiAgICAgICAgICAgIHZpc2libGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnaGlkZGVuJykgPyAhY29sdW1uLmhpZGRlbiA6IHRydWUsXG4gICAgICAgICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGNvbHVtbi5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6IGNvbHVtbi5jbGFzc05hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogJycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlcnMpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZGF0YTtcbiAgICAgICAgICAgICAgICAoY29sdW1uLmZvcm1hdHRlcnMgYXMgYW55W10pLmZvckVhY2goKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc2VsZi5fY29sdW1uRm9ybWF0dGVyc1tjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0dGVyXTtcbiAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmZvcm1hdFN0cmluZyA9IGNvbHVtbkZvcm1hdHRlci5mb3JtYXRTdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRPcHRpb25zID0gY29sdW1uRm9ybWF0dGVyLmZvcm1hdE9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXN1bHQgPSBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKShyZXN1bHQsIHR5cGUsIHJvdywgbWV0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNvbHVtbi5mb3JtYXRTdHJpbmc7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGNvbHVtbi5mb3JtYXRPcHRpb25zO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIGNvbHVtbiBmb3JtYXR0ZXJzIGV4cG9ydCBjcmVhdGVkQ2VsbCBldmVudFxuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBjb2x1bW4uZm9ybWF0dGVycy5maWx0ZXIoKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgY29sdW1uRm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgICBjcmVhdGVkQ2VsbChjZWxsOiBhbnksIGNlbGxEYXRhOiBhbnksIHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoY29sdW1uRm9ybWF0dGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uRm9ybWF0dGVyLmZvcm1hdHRlcl0gYXMgYW55IGFzIE9uQWR2YW5jZWRDb2x1bW5BZnRlclJlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1hdHRlciAmJiB0eXBlb2YgZm9ybWF0dGVyLmFmdGVyUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyLmFmdGVyUmVuZGVyLmJpbmQoY29sdW1uKShjZWxsLCBjZWxsRGF0YSwgcm93RGF0YSwgcm93SW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uLmZvcm1hdHRlcl07XG4gICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIHJlbmRlcjogZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWZ0ZXJSZW5kZXJGb3JtYXR0ZXIgPSBmb3JtYXR0ZXIgYXMgYW55IGFzIE9uQWR2YW5jZWRDb2x1bW5BZnRlclJlbmRlcjtcbiAgICAgICAgICAgIGlmIChhZnRlclJlbmRlckZvcm1hdHRlciAmJiB0eXBlb2YgYWZ0ZXJSZW5kZXJGb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIGNyZWF0ZWRDZWxsOiBhZnRlclJlbmRlckZvcm1hdHRlci5hZnRlclJlbmRlci5iaW5kKGNvbHVtbiksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY29sdW1uRGVmaW5pdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAvLyBnZXQgdGFibGUgZWxlbWVudFxuICAgICAgY29uc3QgdGFibGVFbGVtZW50ID0galF1ZXJ5KHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgIGpRdWVyeSh3aW5kb3cpLm9uKCdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sdW1ucy5hZGp1c3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEpO1xuICAgICAgfSk7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXNoYWRvd2VkLXZhcmlhYmxlXG4gICAgICB0YWJsZUVsZW1lbnQub24oJ3Byb2Nlc3NpbmcuZHQnLCAoZXZlbnQsIHNldHRpbmdzLCBwcm9jZXNzaW5nKSA9PiB7XG4gICAgICAgIGlmIChwcm9jZXNzaW5nKSB7XG4gICAgICAgICAgLy8gY2xlYXIgZW1wdHkgdGFibGUgZWxlbWVudFxuICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCcuZGF0YVRhYmxlc19lbXB0eScpLmh0bWwoJycpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGFibGVFbGVtZW50LmFkZENsYXNzKCdwcm9jZXNzaW5nJyk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0YWJsZUVsZW1lbnQucmVtb3ZlQ2xhc3MoJ3Byb2Nlc3NpbmcnKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsZXQgZHJhd0luZGV4ID0gMTtcbiAgICAgIHRhYmxlRWxlbWVudC5vbignb3JkZXIuZHQnLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICBjb25zdCBvcmRlciA9IHRoaXMuZGF0YVRhYmxlLm9yZGVyKCk7XG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlQ29sdW1ucztcbiAgICAgICAgICBpZiAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm9yZGVyLmVtaXQob3JkZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkub24oJ2RyYXcuZHQnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5kcmF3LmVtaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgY29uc3QgaW5mbzogeyBwYWdlOiBudW1iZXI7IHBhZ2VzOiBudW1iZXIgfSA9IHRoaXMuZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgICAgICAgIHRoaXMucGFnZS5lbWl0KGluZm8pO1xuICAgICAgICAgIGlmIChkcmF3SW5kZXggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkcmF3SW5kZXgrKztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge3RoaXMuZGF0YVRhYmxlLmNvbHVtbnMuYWRqdXN0KCk7IH0sIDEpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRVJST1InLCAnQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgYWRqdXN0aW5nIHRhYmxlIGNvbHVtbnMnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBhbGxvdyBzZWxlY3Rpb25cbiAgICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiAoYXMgcm93IHByaW1hcnkga2V5KVxuICAgICAgICAvLyB0b2RvOjphbGxvdyByb3cgcHJpbWFyeSBrZXkgY29uZmlndXJhdGlvblxuICAgICAgICBjb25zdCBmaXJzdENvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF07XG4gICAgICAgIC8vIGFkZCBzZWxlY3QgY29sdW1uXG4gICAgICAgIGNvbnN0IHNlbGVjdENvbHVtbkRlZmluaXRpb24gPSB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAndGV4dC1jZW50ZXIgcGwtNCBwci0wJyxcbiAgICAgICAgICBkYXRhOiBmaXJzdENvbHVtbi5wcm9wZXJ0eSB8fCBmaXJzdENvbHVtbi5uYW1lLFxuICAgICAgICAgIGRlZmF1bHRDb250ZW50OiAnJyxcbiAgICAgICAgICB0aXRsZTogJycsXG4gICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgIHZpc2libGU6ICF0aGlzLmN1c3RvbVNlbGVjdCxcbiAgICAgICAgICBuYW1lOiBmaXJzdENvbHVtbi5uYW1lLFxuICAgICAgICB9O1xuICAgICAgICAvLyBhc3NpZ24gcmVuZGVyZXJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZWxlY3RDb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgcmVuZGVyOiB0aGlzLl9yZW5kZXJTZWxlY3QuYmluZCh0aGlzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCBmaW5hbGx5IGFkZCBjb2x1bW5cbiAgICAgICAgdGFibGVDb2x1bW5zLnVuc2hpZnQoc2VsZWN0Q29sdW1uRGVmaW5pdGlvbik7XG4gICAgICAgIC8vIHVzZXIgaW50ZXJmYWNlIGFkZGl0aW9uc1xuICAgICAgICAvLyBoYW5kbGUgcGFnZSBjaGFuZ2UgZXZlbnQgKGEgdHJpY2sgZm9yIGZpcmluZyBkcmF3LmR0IGV2ZW50cylcbiAgICAgICAgdGFibGVFbGVtZW50XG4gICAgICAgICAgLy8gaGFuZGxlIGRyYXcgZXZlbnRzXG4gICAgICAgICAgLm9uKCdkcmF3LmR0JywgKCkgPT4ge1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXN0b21TZWxlY3QpIHtcbiAgICAgICAgICAgICAgLy8gZW5hYmxlIHJvdyBzZWxlY3Rpb24gZXZlbnRcbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ3Rib2R5Jykub24oJ2NsaWNrJywgJ3RyJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0IHJvd1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IHNlbGYuZGF0YVRhYmxlLnJvdyh0aGlzKTtcbiAgICAgICAgICAgICAgICAvLyBhZGQgcm93XG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3QuZW1pdChyb3cpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0LnMtcm93Jyk7XG4gICAgICAgICAgICBlbGVtZW50cy5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIC8vIG1ha2Ugc2VsZWN0aW9uIG9uIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gZW51bWVyYXRlIHNlbGVjdGVkIGl0ZW1zXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGZpbmQgcm93IGlkZW50aWZpZXJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IGl0ZW1ba2V5XTtcbiAgICAgICAgICAgICAgICAvLyBpZiBpZGVudGlmaWVyIGlzIGRlZmluZWRcbiAgICAgICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGZpbmQgY2hlY2sgZWxlbWVudCB3aXRoIHRoaXMgaWRlbnRpZmllciBpbiBhdHRyaWJ1dGUgZGF0YS1pZFxuICAgICAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoYGlucHV0W2RhdGEtaWQ9JyR7aWR9J11gKS5wcm9wKCdjaGVja2VkJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgICAgIC8vIHNlbGVjdCByb3dzIHRoYXQgYXJlIG5vdCBzZWxlY3RlZFxuICAgICAgICAgICAgICAvLyBhbmQgZG8gbm90IGluY2x1ZGVkIGluIHVuc2VsZWN0ZWQgY29sbGVjdGlvblxuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGdldCBkYXRhIGlkXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICAgICAgICAgICAgICByZXR1cm4geFtrZXldID09IGpRdWVyeShlbGVtZW50KS5hdHRyKCdkYXRhLWlkJyk7XG4gICAgICAgICAgICAgICAgfSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyh0aGlzLmRhdGFUYWJsZS5yb3coaW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnaW5wdXRbZGF0YS1pZF0nKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZGlzcGxheSByb3cgZGV0YWlsc1xuICAgICAgaWYgKHRoaXMuZGV0YWlsc1RlbXBsYXRlKSB7XG4gICAgICAgIGNvbnN0IGRldGFpbHNTdHJpbmcgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5Sb3dEZXRhaWxzJyk7XG4gICAgICAgIGNvbnN0IGZpcnN0Q29sdW1uID0gdGhpcy5jb25maWcuY29sdW1uc1swXTtcbiAgICAgICAgY29uc3Qgc2hvd0RldGFpbHNDb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2RldGFpbHMtY29udHJvbCBwbC00IHByLTAnLFxuICAgICAgICAgIGRhdGE6IGZpcnN0Q29sdW1uLnByb3BlcnR5IHx8IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgICAgZGVmYXVsdENvbnRlbnQ6ICcnLFxuICAgICAgICAgIHRpdGxlOiAnJyxcbiAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgdmlzaWJsZTogIXRoaXMuY3VzdG9tU2VsZWN0LFxuICAgICAgICAgIG5hbWU6IGZpcnN0Q29sdW1uLm5hbWUsXG4gICAgICAgICAgcmVuZGVyOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYDxidXR0b24gcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiJHtkZXRhaWxzU3RyaW5nfVwiIGFyaWFsLWxhYmVsPVwiJHtkZXRhaWxzU3RyaW5nfVwiPjwvYnV0dG9uPmA7XG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgYWRkIGNvbHVtblxuICAgICAgICB0YWJsZUNvbHVtbnMudW5zaGlmdChzaG93RGV0YWlsc0NvbHVtbkRlZmluaXRpb24pO1xuXG4gICAgICAgIC8vIHVzZXIgaW50ZXJmYWNlIGFkZGl0aW9uc1xuICAgICAgICAvLyBBZGQgZXZlbnQgbGlzdGVuZXIgZm9yIG9wZW5pbmcgYW5kIGNsb3NpbmcgZGV0YWlsc1xuICAgICAgICB0YWJsZUVsZW1lbnQub24oJ2NsaWNrJywgJ3RkLmRldGFpbHMtY29udHJvbCcsIChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ciA9IGUudGFyZ2V0LmNsb3Nlc3QoJ3RyJyk7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBzZWxmLmRhdGFUYWJsZS5yb3codHIpO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRldGFpbHNWaWV3UmVmID0gdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5kZXRhaWxzVGVtcGxhdGUsIHtcbiAgICAgICAgICAgICAgcm93RGF0YTogcm93LmRhdGEoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZGV0YWlsc1ZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICBpZiAoZGV0YWlsc1ZpZXdSZWYucm9vdE5vZGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RldGFpbHNUZW1wbGF0ZSBtdXN0IGhhdmUgZXhhY3RseSBvbmUgcm9vdCBub2RlLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZGV0YWlsc1ZpZXdSZWYucm9vdE5vZGVzWzBdKTtcblxuICAgICAgICAgICAgaWYgKHJvdy5jaGlsZC5pc1Nob3duKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGlzIHJvdyBpcyBhbHJlYWR5IG9wZW4gLSBjbG9zZSBpdFxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZURldGFpbHMuZW1pdCgpO1xuICAgICAgICAgICAgICAgIHJvdy5jaGlsZC5oaWRlKCk7XG5cbiAgICAgICAgICAgICAgICBkZXRhaWxzVmlld1JlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3BlbiB0aGlzIHJvd1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RldGFpbHMuZW1pdCh7cm93fSk7XG4gICAgICAgICAgICAgICAgcm93LmNoaWxkKGNvbnRhaW5lcikuc2hvdygpO1xuICAgICAgICAgICAgICAgIHJvdy5jaGlsZCgpLmFkZENsYXNzKCdkdC1jaGlsZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgIC8vIHNldCBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhNZW51OiBbNSwgMTAsIDUwLCAxMDAsIDIwMCwgNTAwXSxcbiAgICAgICAgLy8gaGlkZSBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhDaGFuZ2U6IGZhbHNlLFxuICAgICAgICAvLyBlbmFibGUgc2VhcmNoIGJ1dCBoaWRlIHNlYXJjaCBib3ggKGNzcylcbiAgICAgICAgc2VhcmNoaW5nOiB0cnVlLFxuICAgICAgICAvLyBlbmFibGUgZGF0YSBwcm9jZXNzaW5nXG4gICAgICAgIHByb2Nlc3Npbmc6IHRydWUsXG4gICAgICAgIC8vIGVuYWJsZSBnZXR0aW5nIHNlcnZlciBzaWRlIGRhdGFcbiAgICAgICAgc2VydmVyU2lkZTogdGhpcy5zZXJ2ZXJTaWRlLFxuICAgICAgICAvLyBlbnVtZXJhdGUgdGFibGUgY29sdW1uc1xuICAgICAgICBjb2x1bW5zOiB0YWJsZUNvbHVtbnMsXG4gICAgICAgIGNvbFJlb3JkZXI6ICB0aGlzLmNvbHVtbk9yZGVyaW5nLFxuICAgICAgICBvcmRlcjogW10sXG4gICAgICAgIC8vIHNldCBzY3JvbGwgeFxuICAgICAgICBzY3JvbGxYOiB0aGlzLnNjcm9sbFgsXG4gICAgICAgIGRvbTogJ0JmcnRpcCcsXG4gICAgICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleHRlbmQ6ICdleGNlbCcsXG4gICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5jb25maWcudGl0bGUsXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkLW5vbmUnLFxuICAgICAgICAgICAgZXhwb3J0T3B0aW9uczoge1xuICAgICAgICAgICAgICBjb2x1bW5zOiAndGg6bm90KDpmaXJzdC1jaGlsZCknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICAvLyBkZWZpbmUgc2VydmVyIGRhdGEgY2FsbGJhY2tcbiAgICAgICAgZm5TZXJ2ZXJEYXRhKHNTb3VyY2U6IGFueSwgYW9EYXRhOiBhbnksIGZuQ2FsbGJhY2s6IGFueSwgb1NldHRpbmdzOiBhbnkpIHtcbiAgICAgICAgICAvLyBpZiBtZXRob2QgaXMgaW52b2tlZCBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICBpZiAoc2VsZi5fZmlyc3RMb2FkKSB7XG4gICAgICAgICAgICAvLyBkaXNhYmxlZCBmaXJzdCBsb2FkIGZsYWdcbiAgICAgICAgICAgIHNlbGYuX2ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gaWYgYXV0byBsb2FkIGlzIGRpc2FibGVkXG4gICAgICAgICAgICBpZiAoc2VsZi5hdXRvTG9hZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW1wdHlEYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogMCxcbiAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gICAgICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAvLyBlbWl0IGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVzZXQgZXJyb3JcbiAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKCk7XG4gICAgICAgICAgLy8gZ2V0IGFjdGl2YXRlZCByb3V0ZSBwYXJhbXNcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHNlbGYuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgIC8vIGdldCBjb2x1bW5zXG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IGFvRGF0YVsxXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgb3JkZXIgZXhwcmVzc2lvblxuICAgICAgICAgIGxldCBvcmRlciA9IGFvRGF0YVsyXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2tpcCByZWNvcmRzIHBhcmFtXG4gICAgICAgICAgY29uc3Qgc2tpcCA9IGFvRGF0YVszXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgcGFnZSBzaXplIHBhcmFtXG4gICAgICAgICAgY29uc3QgdG9wID0gYW9EYXRhWzRdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBzZWFyY2ggdmFsdWVcbiAgICAgICAgICBjb25zdCBzZWFyY2ggPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzIChyb3dHcm91cCBhbmQgb3JkZXIpIGlmIHRoZXJlIGlzIHJvdyBncm91cCBpbnB1dFxuICAgICAgICAgIGxldCByb3dHcm91cE9yZGVyOiBhbnlbXSA9IFtdO1xuICAgICAgICAgIGlmIChzZWxmLnJvd0dyb3VwICYmIHNlbGYucm93R3JvdXAubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgY29sT3JkZXIgPSBbXTtcblxuICAgICAgICAgICAgLy8gZmluZCBpbmRleCBvZiB0aGUgcm93R3JvdXAgY29sdW1uXG4gICAgICAgICAgICBsZXQgY29scyA9IHNlbGYucm93R3JvdXAubWFwKHggPT4gdGFibGVDb2x1bW5zLmZpbmRJbmRleCh0YWJsZUNvbHVtbiA9PiB0YWJsZUNvbHVtbi5kYXRhID09PSB4KSkuZmlsdGVyKGluZGV4ID0+IGluZGV4ID49IDApO1xuICAgICAgICAgICAgLy8gZmluZCBuZXcgaW5kZXggb2YgdGhlIHJvd0dyb3VwIGNvbHVtbiBpbiBjYXNlIG9mIHRhYmxlIG9mZmVycyB0aGUgY29sdW1uIHJlb3JkZXJpbmcgY2FwYWJpbGl0eVxuICAgICAgICAgICAgLy8gaS5lLiBzZXR0aW5ncy5jb2xSZW9yZGVyID09PSBmYWxzZSAoY29sdW1uT3JkZXJpbmcgPT09IGZhbHNlKVxuICAgICAgICAgICAgaWYgKHNlbGYuZGF0YVRhYmxlICYmIHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIgJiYgdGhpcy5jb2x1bW5PcmRlcmluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBjb2xPcmRlciA9IHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoKTtcbiAgICAgICAgICAgICAgY29scyA9IGNvbHMubWFwKCAoY29sOiBhbnkpID0+IGNvbE9yZGVyLmluZGV4T2YoY29sIGFzIG5ldmVyKSkuZmlsdGVyKGluZGV4ID0+IGluZGV4ID4gLTEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY29sdW1uID0gLTE7XG4gICAgICAgICAgICBsZXQgZGlyZWN0aW9uID0gJ2FzYyc7XG5cbiAgICAgICAgICAgIC8vIHNldCBjb2x1bW4gYW5kIG9yZGVyIGRpcmVjdGlvblxuICAgICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb2x1bW4gPSBvcmRlclswXS5jb2x1bW47XG4gICAgICAgICAgICAgIGRpcmVjdGlvbiA9IG9yZGVyWzBdLmRpcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd0dyb3VwT3JkZXIgPSBjb2xzLm1hcCgoeCkgPT4ge1xuICAgICAgICAgICAgICAvLyBjaGVjayBpZiBjb2x1bW4gb3JkZXIgaGFzIGJlZW4gY2hhbmdlZFxuICAgICAgICAgICAgICAvLyBhbmQgZmluZCB0aGUgbmV3IGluZGV4IChjb2x1bW4taW5kZXgpIG9mIHRoZSByb3cgZ3JvdXAgY29sdW1uXG4gICAgICAgICAgICAgIGlmICh4ICE9IGNvbHVtbiAmJiBzZWxmLmxhc3RSb3dHcm91cE9yZGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoeCA9PT0gc2VsZi5sYXN0Um93R3JvdXBPcmRlci5jb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IHNlbGYubGFzdFJvd0dyb3VwT3JkZXIuY29sdW1uO1xuICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gc2VsZi5sYXN0Um93R3JvdXBPcmRlci5kaXJlY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29sdW1uOiB4LFxuICAgICAgICAgICAgICAgIGRpcjogeCA9PT0gY29sdW1uID8gZGlyZWN0aW9uIDogJ2FzYydcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvcmRlciA9IG9yZGVyIHx8IFtdO1xuICAgICAgICAgICAgLy8gc2V0IHRoZSByb3cgZ3JvdXAgY29sdW1uIHF1ZXJ5IHBhcmFtIGFsd2F5cyBmaXJzdCBhbmQgYmVmb3JlIHRhYmxlIG9yZGVyaW5nIHF1ZXJ5IHBhcmFtc1xuICAgICAgICAgICAgb3JkZXIudW5zaGlmdCguLi5yb3dHcm91cE9yZGVyKTtcblxuICAgICAgICAgICAgLy8gc2F2ZSBvcmRlcmluZyBjb2x1bW4gYW5kIGRpcmVjdGlvbiAocmVnYXJkbGVzcyByb3dHcm91cGluZylcbiAgICAgICAgICAgIGlmIChjb2x1bW4gPiAtMSkge1xuICAgICAgICAgICAgICBzZWxmLmxhc3RSb3dHcm91cE9yZGVyID0geyBjb2x1bW4sIGRpcmVjdGlvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhcHBseSBvcmRlciBwYXJhbXNcbiAgICAgICAgICBpZiAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBnZXQgb3JkZXIgcXVlcnkgZXhwcmVzc2lvblxuICAgICAgICAgICAgY29uc3Qgb3JkZXJCeVN0ciA9IG9yZGVyLm1hcCgoZXhwcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBjb2x1bW5JbmRleDogbnVtYmVyO1xuICAgICAgICAgICAgICBpZiAoc2VsZi5jb2x1bW5PcmRlcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IGV4cHIuY29sdW1uO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuZGF0YVRhYmxlICYmIHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGN1cnJlbnQgY29sdW1uIG9yZGVyIChmcm9tIGNvbFJlb3JkZXIpXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gc2VsZi5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgICAgICAgICAgICAgIC8vIGFuZCBtYXRjaCB0aGUgZGF0YVRhYmxlIGluZGV4IHRvIHRoZSBjb25maWcgY29sdW1ucyBpbmRleFxuICAgICAgICAgICAgICAgIC8vIGV4cHIuY29sdW1uIHNob3VsZCBhbHdheXMgYmUgdmFsaWQgKGUuZy4gaW4gcmFuZ2UpLCBidXQgcGVyZm9ybSBhIG1pbm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZXhwci5jb2x1bW4gPj0gMCAmJiBleHByLmNvbHVtbiA8IGNvbHVtbk9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSBjb2x1bW5PcmRlcltleHByLmNvbHVtbl07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZmlyc3QgY29sdW1uIGFzIGEgZmFsbGJhY2sgKHdvbid0IGhhcHBlbiwganVzdCBmb3Igc2FmZXR5KVxuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IGV4cHIuY29sdW1uO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0YWJsZUNvbHVtbnNbY29sdW1uSW5kZXhdLm5hbWUgKyAnICcgKyBleHByLmRpciB8fCAnYXNjJztcbiAgICAgICAgICAgIH0pLmpvaW4oJywnKTtcbiAgICAgICAgICAgIC8vIHNldCBvcmRlclxuICAgICAgICAgICAgcS5zZXRQYXJhbSgnJG9yZGVyYnknLCBvcmRlckJ5U3RyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZW5zdXJlIHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgICBpZiAoc2VsZi5zdGF0ZUxvYWRDYWxsYmFjayA9PSBudWxsKSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlTG9hZENhbGxiYWNrID0gKChfLCBjYWxsYmFjaykgID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2sobnVsbCwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25maWd1cmUgJHNlbGVjdCBwYXJhbWV0ZXJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IHNlbGYuY29uZmlnLmNvbHVtbnMuZmlsdGVyKCAoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4udmlydHVhbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29sdW1uLm9wdGlvbmFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGFibGVDb2x1bW5zLmZpbmRJbmRleCgodGFibGVDb2x1bW4pID0+IHRhYmxlQ29sdW1uLm5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5jb2x1bW5zW2luZGV4XS52aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lICsgJyBhcyAnICsgY29sdW1uLnByb3BlcnR5O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBxLnNlbGVjdC5hcHBseShxLCBzZWxlY3QpO1xuICAgICAgICAgICAgLy8gY29uZmlndXJlICRmaWx0ZXJcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZmlsdGVyICYmIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHNldCByb3V0ZSBmaWx0ZXJcbiAgICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIgXTtcbiAgICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICAgIHEuZmlsdGVyKGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcXVlcnkgcGFyYW1ldGVycyBjb250YWluIGZpbHRlclxuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLiRleHBhbmQgJiYgcXVlcnlQYXJhbXMuJGV4cGFuZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IHJvdXRlICRleHBhbmRcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHNlbGYuY29uZmlnLmRlZmF1bHRzLmV4cGFuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXEuZ2V0UGFyYW1zKClbJyRvcmRlcmJ5J10gJiYgc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSkge1xuICAgICAgICAgICAgICBxLnNldFBhcmFtKCckb3JkZXJieScsIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGdyb3VwYnknLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFwcGVuZCBkZWZhdWx0IGZpbHRlclxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmZpbHRlcikge1xuICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLmFzeW5jQnVpbGRGaWx0ZXIoc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKS50aGVuKChkZWZhdWx0RmlsdGVyU3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHFQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIGRlZmF1bHRGaWx0ZXJTdHJpbmcgXTtcbiAgICAgICAgICAgICAgICAgIGlmIChxUGFyYW1zLiRmaWx0ZXIpIHsgZXhwcmVzc2lvbnMucHVzaCgnKCcgKyBxUGFyYW1zLiRmaWx0ZXIgKyAnKScgKTsgfVxuICAgICAgICAgICAgICAgICAgcS5maWx0ZXIoZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYuYmVmb3JlU2VydmVyRGF0YS5lbWl0KHEpO1xuICAgICAgICAgICAgICAgIHNlbGYubGFzdFF1ZXJ5UGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hZnRlclNlcnZlckRhdGEuZW1pdChpdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFTZXQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1zLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXN0UXVlcnlUb3RhbEl0ZW1zID0gaXRlbXMudG90YWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy50b3RhbCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gZW1pdCBsb2FkIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZC5lbWl0KGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gZGF0YVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhkYXRhU2V0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGxvZyBlcnJvciB0byBjb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgZXJyKTtcbiAgICAgICAgICAgICAgICAvLyBzaG93IGVycm9yXG4gICAgICAgICAgICAgICAgc2VsZi50b2dnbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAgIC8vIGJ5IHJldHVybmluZyBlbXB0eSBkYXRhc2V0XG4gICAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5iZWZvcmVTZXJ2ZXJEYXRhLmVtaXQocSk7XG4gICAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICBzZWxmLmFmdGVyU2VydmVyRGF0YS5lbWl0KGl0ZW1zKTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSBpdGVtcy50b3RhbDtcbiAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZGF0YVNldCk7XG4gICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAvLyBsb2cgZXJyb3IgdG8gY29uc29sZVxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgICAgICAvLyBzaG93IGVycm9yXG4gICAgICAgICAgICAgIHNlbGYudG9nZ2xlRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgLy8gYnkgcmV0dXJuaW5nIGVtcHR5IGRhdGFzZXRcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKEVNUFRZX0RBVEFTRVQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxhbmd1YWdlOiBPYmplY3QuYXNzaWduKHsgfSwgc2VsZi50cmFuc2xhdG9yLnRyYW5zZm9ybSgnVGFibGVzLkRhdGFUYWJsZScpLFxuICAgICAgICAgIHtlbXB0eVRhYmxlOiAnICcgfSksXG4gICAgICB9O1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSByb3dHcm91cCBpbnB1dCBhbmQgYXNzaWduIGl0IHRvIHRhYmxlXG4gICAgICBpZiAoc2VsZi5yb3dHcm91cC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY29scyA9IHNlbGYucm93R3JvdXAubWFwKHggPT4gdGFibGVDb2x1bW5zLmZpbmRJbmRleCh0YWJsZUNvbHVtbiA9PiB0YWJsZUNvbHVtbi5kYXRhID09PSB4KSkuZmlsdGVyKGluZGV4ID0+IGluZGV4ID49IDApO1xuICAgICAgICBjb25zdCBkYXRhU3JjID0gY29scy5tYXAoeCA9PiB0YWJsZUNvbHVtbnNbeF0uZGF0YSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0UmVuZGVyID0gZnVuY3Rpb24gKHJvd3M6IERhdGFUYWJsZXMuQXBpLCBncm91cDogc3RyaW5nLCBsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgICAgY29uc3QgaGVhZGVyVmlld1JlZiA9IHNlbGYuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KFxuICAgICAgICAgICAgICBzZWxmLmhlYWRlclRlbXBsYXRlIGFzIGFueSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgICAgIHJvd3MsXG4gICAgICAgICAgICAgICAgbGV2ZWxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGhlYWRlclZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgaWYgKGhlYWRlclZpZXdSZWYucm9vdE5vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIZWFkZXJUZW1wbGF0ZSBtdXN0IGhhdmUgZXhhY3RseSBvbmUgcm9vdCBub2RlLicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGVhZGVyVmlld1JlZi5yb290Tm9kZXNbMF07XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW5kUmVuZGVyIHByb3BlcnR5XG4gICAgICAgIGNvbnN0IGVuZFJlbmRlciA9IGZ1bmN0aW9uIChyb3dzOiBEYXRhVGFibGVzLkFwaSwgZ3JvdXA6IHN0cmluZywgbGV2ZWw6IG51bWJlcikge1xuICAgICAgICAgIGNvbnN0IGZvb3RlclZpZXdSZWYgPSBzZWxmLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgICAgICAgc2VsZi5mb290ZXJUZW1wbGF0ZSBhcyBhbnksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBncm91cCxcbiAgICAgICAgICAgICAgICByb3dzLFxuICAgICAgICAgICAgICAgIGxldmVsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb290ZXJWaWV3UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGlmIChmb290ZXJWaWV3UmVmLnJvb3ROb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm9vdGVyVGVtcGxhdGUgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJvb3Qgbm9kZS4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvb3RlclZpZXdSZWYucm9vdE5vZGVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHsgcm93R3JvdXA6IHsgZGF0YVNyYywgZW5kUmVuZGVyLCBzdGFydFJlbmRlciB9IH0sIHt9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGYuY29uZmlnLmZpeGVkQ29sdW1ucykge1xuICAgICAgICBjb25zdCBsZWZ0ID0gc2VsZi5jb25maWcuZml4ZWRDb2x1bW5zLmxlZnQgfHwgMDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSBzZWxmLmNvbmZpZy5maXhlZENvbHVtbnMucmlnaHQgfHwgMDtcbiAgICAgICAgY29uc3QgZml4ZWRDb2x1bW5zID0ge1xuICAgICAgICAgIGxlZnQsXG4gICAgICAgICAgcmlnaHRcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIGZpeGVkQ29sdW1uc1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhdGVTZXR0aW5ncyA9IHtcbiAgICAgICAgc3RhdGVTYXZlOiB0aGlzLnN0YXRlU2F2ZVxuICAgICAgfTtcbiAgICAgIGlmICh0aGlzLnN0YXRlTG9hZENhbGxiYWNrKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc3RhdGVTZXR0aW5ncywge1xuICAgICAgICAgIHN0YXRlTG9hZENhbGxiYWNrOiB0aGlzLnN0YXRlTG9hZENhbGxiYWNrXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RhdGVTYXZlQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVTYXZlQ2FsbGJhY2s6IHRoaXMuc3RhdGVTYXZlQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCBzdGF0ZVNldHRpbmdzKTtcblxuICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICAvLyBzZXQgY29udGludW91cyBzY3JvbGxpbmdcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcbiAgICAgICAgICBzY3JvbGxDb2xsYXBzZTogZmFsc2UsXG4gICAgICAgICAgc2Nyb2xsZXI6IHtcbiAgICAgICAgICAgIGxvYWRpbmdJbmRpY2F0b3I6IGZhbHNlLFxuICAgICAgICAgICAgZGlzcGxheUJ1ZmZlcjogQXJyYXkuaXNBcnJheSh0aGlzLnJvd0dyb3VwKSAmJiB0aGlzLnJvd0dyb3VwLmxlbmd0aCA+IDAgPyAxMDAgOiAxMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHtcbiAgICAgICAgICBzY3JvbGxZOiB0aGlzLnNjcm9sbFksXG4gICAgICAgICAgcGFnaW5nOiB0aGlzLnBhZ2luZyxcbiAgICAgICAgICBwYWdlTGVuZ3RoOiB0aGlzLnBhZ2VMZW5ndGgsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuZGVzdHJveSgpO1xuICAgICAgfVxuICAgICAgLy8gaGFuZGxlIGluaXQuZHQgZXZlbnQgYW5kIGVtaXQgbG9jYWwgZXZlbnRcbiAgICAgIHRoaXMuZGF0YVRhYmxlID0gdGFibGVFbGVtZW50Lm9uKCdpbml0LmR0JywgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGVyID0galF1ZXJ5KGV2ZW50LnRhcmdldCkucGFyZW50KCk7XG4gICAgICAgIC8vIGhhbmRsZSBzY3JvbGxpbmdcbiAgICAgICAgc2Nyb2xsZXIub24oJ3Njcm9sbCcsIChzY3JvbGxFdmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGpRdWVyeShzY3JvbGxFdmVudC50YXJnZXQpO1xuICAgICAgICAgIGNvbnN0IHRvcCA9IHRhcmdldC5zY3JvbGxUb3AoKSBhcyBudW1iZXI7XG4gICAgICAgICAgY29uc3QgbGVmdCA9IHRhcmdldC5zY3JvbGxMZWZ0KCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGwuZW1pdCh7XG4gICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgbGVmdFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pLkRhdGFUYWJsZShzZXR0aW5ncyk7XG4gICAgICB0aGlzLmluaXQuZW1pdCgpO1xuICAgICAgLy8gc2hvdyBvciBoaWRlIGhlYWRlclxuICAgICAgaWYgKCF0aGlzLnNob3dIZWFkZXIgJiYgdGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaGlkZVNlbGVjdG9yID0gKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZT50aGVhZCcpO1xuICAgICAgICBpZiAoaGlkZVNlbGVjdG9yKSB7XG4gICAgICAgICAgaGlkZVNlbGVjdG9yLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFkanVzdFNlbGVjdG9yID0gICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGUnKTtcbiAgICAgICAgaWYgKGFkanVzdFNlbGVjdG9yKSB7XG4gICAgICAgICAgYWRqdXN0U2VsZWN0b3IuY2xhc3NMaXN0LmFkZCgnbXQtMicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgICBpZiAoIXRoaXMuc2hvd0Zvb3RlciAmJiB0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICBjb25zdCBpbmZvU2VsZWN0b3IgPSAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19pbmZvJyk7XG4gICAgICAgIGlmIChpbmZvU2VsZWN0b3IpIHtcbiAgICAgICAgICBpbmZvU2VsZWN0b3IuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGFkZCBjdXN0b20gZXZlbnQgaGFuZGxlclxuXG4gICAgICBjb25zdCBvbkN1c3RvbUV2ZW50ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgLy8gZ2V0IGN1c3RvbSBldmVudCBuYW1lXG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gdGFyZ2V0LmRhdGFzZXQuZXZlbnQgfHwgJ2V2ZW50JztcbiAgICAgICAgLy8gZ2V0IHJvd1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3codGFyZ2V0LmNsb3Nlc3QoJ3RyJykpO1xuICAgICAgICAvLyBnZXQgcm93IGRhdGFcbiAgICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAgIHRoaXMuY3VzdG9tRXZlbnQuZW1pdCh7XG4gICAgICAgICAgbmFtZTogY3VzdG9tRXZlbnQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICByb3c6IHJvdy5pbmRleCgpXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLm9mZignY2xpY2snLCAnLmR0LWN1c3RvbScpO1xuICAgICAgdGhpcy5kYXRhVGFibGUub24oJ2NsaWNrJywgJy5kdC1jdXN0b20nLCBvbkN1c3RvbUV2ZW50KTtcbiAgICAgIC8vIHNob3cgb3IgaGlkZSBwYWdlclxuICAgICAgaWYgKHRoaXMuc2hvd1BhZ2luZykge1xuICAgICAgICB0aGlzLnNob3dQYWdpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgfVxuXG4gIHNjcm9sbFRvcCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5wYXJlbnQoKS5zY3JvbGxUb3AodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNjcm9sbExlZnQodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUucGFyZW50KCkuc2Nyb2xsTGVmdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxhc3RRdWVyeSgpOiBDbGllbnREYXRhUXVlcnlhYmxlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5jb25maWcgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBxID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLmxhc3RRdWVyeVBhcmFtcykuZm9yRWFjaCggKGtleSkgPT4ge1xuICAgICAgcS5zZXRQYXJhbShrZXksIHRoaXMubGFzdFF1ZXJ5UGFyYW1zICYmIHRoaXMubGFzdFF1ZXJ5UGFyYW1zW2tleV0pO1xuICAgIH0pO1xuICAgIC8vIHJldHVybiBxdWVyeVxuICAgIHJldHVybiBxO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgYW5kIHVwZGF0ZXMgYSBzaW5nbGUgcm93XG4gICAqIEBwYXJhbSBmaW5kIC0gQW55IG9iamVjdCB3aGljaCBpcyBiZWluZyBjb252ZXJ0ZWQgdG8gYSBxdWVyeVxuICAgKi9cbiAgcHVibGljIGZldGNoT25lKGZpbmQ6IGFueSkge1xuICAgIGlmIChmaW5kID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYXN0UXVlcnlQYXJhbXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBnZXQgcm93c1xuICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoKSB7XG4gICAgICAvLyBmaW5kIHJlc3VsdFxuICAgICAgY29uc3QgZmluZEtleXMgPSBPYmplY3Qua2V5cyhmaW5kKTtcbiAgICAgIGlmIChmaW5kS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gZG8gbm90aGluZ1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBmaW5kIHJvdyBpbmRleCBieSBzZWFyY2hpbmcgZWFjaCBwcm9wZXJ0eVxuICAgICAgY29uc3Qgcm93SW5kZXggPSByb3dzLmZpbmRJbmRleCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpbmRLZXlzLm1hcCggKGtleSkgPT4ge1xuICAgICAgICAgIHJldHVybiByb3dba2V5XSA9PT0gZmluZFtrZXldO1xuICAgICAgICB9KS5maWx0ZXIoIChyZXMpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzID09PSBmYWxzZTtcbiAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgfSk7XG4gICAgICAvLyBpZiByb3cgaGFzIGJlZW4gZm91bmRcbiAgICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgLy8gc2VsZWN0IGF0dHJpYnV0ZXNcbiAgICAgICAgcXVlcnkuc2V0UGFyYW0oJyRzZWxlY3QnLCB0aGlzLmxhc3RRdWVyeVBhcmFtcy4kc2VsZWN0KTtcbiAgICAgICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRleHBhbmQpIHtcbiAgICAgICAgICAvLyBhcHBseSBleHBhbmQgYXR0cmlidXRlc1xuICAgICAgICAgIHF1ZXJ5LnNldFBhcmFtKCckZXhwYW5kJywgdGhpcy5sYXN0UXVlcnlQYXJhbXMuJGV4cGFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwbHkgZmlsdGVyIGZvciByb3dcbiAgICAgICAgZmluZEtleXMuZm9yRWFjaCggKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29uZmlnLmNvbHVtbnMuZmluZCggKGNvbCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbC5wcm9wZXJ0eSA9PT0ga2V5IHx8IGNvbC5uYW1lID09PSBrZXk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgLy8gZ2V0IHByb3BlcnR5IG9yIG5hbWVcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lO1xuICAgICAgICAgICAgcXVlcnkuYW5kKHByb3BlcnR5IGFzIHN0cmluZykuZXF1YWwoZmluZFtrZXldKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlcnkuYW5kKGtleSkuZXF1YWwoZmluZFtrZXldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgZmluYWxseSBnZXQgaXRlbVxuICAgICAgICByZXR1cm4gcXVlcnkuZ2V0SXRlbSgpLnRoZW4oIChpdGVtKSA9PiB7XG4gICAgICAgICAgLy8gaWYgaXRlbSBleGlzdHNcbiAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3cocm93SW5kZXgpO1xuICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcpO1xuICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAvLyByZWRyYXcgcm93XG4gICAgICAgICAgICByb3cuZGF0YShpdGVtKTtcbiAgICAgICAgICAgIGpRdWVyeShyb3cubm9kZSgpKS5maW5kKCc6Y2hlY2tib3gnKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgdGhpcy5vblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgIC8vIGlmIHJvdyBpcyBhbHJlYWR5IHNlbGVjdGVkXG4gICAgICAgICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVsb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc2VsZWN0aW9uIGNoYW5nZVxuICAgKiBAcGFyYW0gJGV2ZW50XG4gICAqL1xuICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KSB7XG4gICAgY29uc3QgaW5wdXQgPSAgJGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGV4ZWNSZWdleCA9IC8tKFxcZCspJC9nLmV4ZWMoaW5wdXQuaWQpO1xuICAgIC8vIGdldCByb3cgZnJvbSBpZFxuICAgIGNvbnN0IHJvd0luZGV4ID0gcGFyc2VJbnQoKGV4ZWNSZWdleCAmJiBleGVjUmVnZXhbMV0pIGFzIHN0cmluZywgMTApO1xuICAgIC8vIGdldCByb3dcbiAgICBjb25zdCByb3cgPSB0aGlzLmRhdGFUYWJsZS5yb3cocm93SW5kZXgpLmRhdGEoKTtcbiAgICAvLyBnZXQgcm93IGlkZW50aWZpZXJcbiAgICBpZiAocm93KSB7XG4gICAgICBjb25zdCBrZXkgPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8ICcnO1xuICAgICAgY29uc3QgaWQgPSByb3dba2V5XTtcbiAgICAgIGxldCBmaW5kSXRlbUluZGV4ID0gdGhpcy5zZWxlY3RlZC5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gaWQ7XG4gICAgICB9KTtcbiAgICAgIGlmIChpbnB1dC5jaGVja2VkKSB7XG4gICAgICAgIGlmIChmaW5kSXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgIC8vIGFkZCByb3cgdG8gc2VsZWN0ZWQgcm93c1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChyb3cpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZmluZEl0ZW1JbmRleCA+PSAwKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHNlbGVjdGVkIGl0ZW1cbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnNwbGljZShmaW5kSXRlbUluZGV4LCAxKTtcbiAgICAgICAgICBpZiAodGhpcy5zbWFydFNlbGVjdCkge1xuICAgICAgICAgICAgLy8gYWRkIHJvdyB0byB1bnNlbGVjdGVkIHJvd3NcbiAgICAgICAgICAgIGZpbmRJdGVtSW5kZXggPSB0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IGlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZmluZEl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdGVkLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldEVtcHR5VGFibGUoKSB7XG4gICAgLy8gdGhpcyBvcGVyYXRpb24gaXMgaW1wb3J0YW50XG4gICAgLy8gZHVlIHRvIG5nIGRhdGEgYmluZGluZ1xuICAgIC8vIGVtcHR5IHRhYmxlIHRlbXBsYXRlIGhhcyBubyB0cmFuc2xhdGVkIHRleHQgZHVyaW5nIG5nT25Jbml0KClcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPVxuICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gdGhpcy5lbXB0eVRhYmxlICYmIHRoaXMuZW1wdHlUYWJsZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUVycm9yKGVycj86IGFueSkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKHRoaXMuZXJyb3JUZW1wbGF0ZSAmJiB0aGlzLmVycm9yVGVtcGxhdGUubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCk7XG4gICAgICBsZXQgaW5uZXJNZXNzYWdlOiBhbnk7XG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBpbm5lck1lc3NhZ2UgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzbWFsbCcpLml0ZW0oMCk7XG4gICAgICB9XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgICBpZiAoaW5uZXJNZXNzYWdlKSB7XG4gICAgICAgICAgaW5uZXJNZXNzYWdlLmlubmVySFRNTCA9IGVyci5lcnJvciAmJiBlcnIuZXJyb3IubWVzc2FnZSA/IGVyci5lcnJvci5tZXNzYWdlIDogZXJyLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSB0aGlzLmVycm9yVGVtcGxhdGUgJiYgdGhpcy5lcnJvclRlbXBsYXRlLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlubmVyTWVzc2FnZSkge1xuICAgICAgICAgIGlubmVyTWVzc2FnZS5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJFbXB0eVRhYmxlKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdKSB7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBleHBvcnQoKSB7XG4gICAgY29uc3QgZWxlbWVudDogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHQtYnV0dG9ucyAuYnV0dG9ucy1leGNlbCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIGVsZW1lbnQuY2xpY2soKTtcbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVDb2x1bW5zKGNvbHVtbnNUb1Nob3cpIHtcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZGF0YVRhYmxlO1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuc2xpY2UoMSkuZm9yRWFjaCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICBpZiAoIWNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgaWYgKGNvbHVtbnNUb1Nob3cuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgICAgICB0YWJsZS5jb2x1bW4oY29sdW1uLm5hbWUgKyAnOm5hbWUnKS52aXNpYmxlKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICAgICAgdGFibGUuY29sdW1uKGNvbHVtbi5uYW1lICsgJzpuYW1lJykudmlzaWJsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdjb25maWdTcmMnKSkge1xuICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjICE9IG51bGwpIHtcbiAgICAgICAgLy8gbG9hZCB0YWJsZSBjb25maWd1cmF0aW9uIG9uIGNoYW5nZVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IHRyaXBsZS1lcXVhbHNcbiAgICAgICAgaWYgKGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSAmJiAoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuY29uZmlnU3JjLnByZXZpb3VzVmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5faHR0cC5nZXQoY2hhbmdlcy5jb25maWdTcmMuY3VycmVudFZhbHVlKS50b1Byb21pc2UoKS50aGVuKChjb25maWc6IFRhYmxlQ29uZmlndXJhdGlvbikgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICAvLyBmZXRjaCBhbmQgcmVkcmF3XG4gICAgICAgICAgICB0aGlzLmZldGNoKCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVEFCTEVTJywgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgdGFibGUgY29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldChsb2FkPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMucXVlcnkgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5hdXRvTG9hZCA9ICEhbG9hZDtcbiAgICB0aGlzLm5nT25Jbml0KCk7XG4gIH1cblxuICBzZWxlY3RDb2x1bW5zKCkge1xuICAgIC8vIGdldCBjb2x1bW4gb3JkZXIgZS5nLiBbMCwgNCwgMSwgMiwgM11cbiAgICBjb25zdCBjb2x1bW5PcmRlcjogbnVtYmVyW10gPSB0aGlzLmRhdGFUYWJsZS5jb2xSZW9yZGVyLm9yZGVyKCk7XG4gICAgLy8gZ2V0IGNvbHVtbiBkZWZpbml0aW9uc1xuICAgIGNvbnN0IGNvbHVtbkRlZnMgPSB0aGlzLmRhdGFUYWJsZS5zZXR0aW5ncygpLmluaXQoKS5jb2x1bW5zO1xuICAgIGNvbnN0IGNvbHVtbnMgPSBjb2x1bW5EZWZzLm1hcCgoXG4gICAgICBjb2x1bW5EZWY6IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHZpc2libGU6IGJvb2xlYW4sXG4gICAgICAgIHNvcnRhYmxlOiBib29sZWFuLCBpbmRleDogbnVtYmVyIH0sIGk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYGNvbHVtbi0ke2l9YDtcbiAgICAgIGxldCB0aXRsZSA9IGNvbHVtbkRlZi50aXRsZTtcbiAgICAgIC8vIGdldCBjb2x1bW4gaW5kZXhcbiAgICAgIGNvbnN0IGluZGV4ID0gIGNvbHVtbk9yZGVyLmluZGV4T2YoaSk7XG4gICAgICBjb25zdCB2aXNpYmxlID0gdGhpcy5kYXRhVGFibGUuY29sdW1uKGluZGV4KS52aXNpYmxlKCk7XG4gICAgICAvLyBzZXQgdGl0bGUgZm9yIHNlbGVjdCBjb2x1bW5cbiAgICAgIGlmIChpID09PSAwICYmIHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICB0aXRsZSA9ICc8JyArIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlNlbGVjdENvbHVtbicpICsgJz4nO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGNvbHVtbiB0aXRsZVxuICAgICAgaWYgKHRpdGxlICE9IG51bGwgJiYgdGl0bGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRpdGxlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKHRpdGxlID09IG51bGwpIHtcbiAgICAgICAgLy8gdHJ5IHRvIGZpbmQgY29sdW1uIHBsYWNlaG9sZGVyXG4gICAgICAgIGxldCBwbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICBwbGFjZWhvbGRlciA9IHRoaXMuY29uZmlnLmNvbHVtbnNbaSAtIDFdLnBsYWNlaG9sZGVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwbGFjZWhvbGRlciA9IHRoaXMuY29uZmlnLmNvbHVtbnNbaV0ucGxhY2Vob2xkZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlaG9sZGVyICE9IG51bGwpIHtcbiAgICAgICAgICB0aXRsZSA9ICc8JyArIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChwbGFjZWhvbGRlcikgKyAnPic7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aXRsZSA9PSBudWxsKSB7XG4gICAgICAgIHRpdGxlID0gJzwnICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuVW5rbm93bkNvbHVtbicpICsgJz4nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5LFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgdmlzaWJsZSxcbiAgICAgICAgaW5kZXhcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5fY29sdW1uU2VsZWN0b3Iuc2VsZWN0Q29sdW1ucyhjb2x1bW5zKS50aGVuKChldmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICBjb25zdCBzb3J0ZWQgPSAoZXZlbnQuY29sdW1ucyBhcyBhbnlbXSlcbiAgICAgICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGtleTogY29sLmtleSxcbiAgICAgICAgICAgICAgaW5kZXg6IGNvbC5pbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XG4gICAgICAgIC8vIGdldCBjb2x1bW4gb3JkZXIgZS5nLiBbMywgMSwgMiwgMCwgNF1cbiAgICAgICAgY29uc3QgaW5kZXhlcyA9IHNvcnRlZFxuICAgICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChldmVudC5jb2x1bW5zIGFzIGFueVtdKS5maW5kSW5kZXgoKG5leHQpID0+IGl0ZW0ua2V5ID09PSBuZXh0LmtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyByZXNldCBjb2x1bW4gdmlzaWJpbHR5XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAoZXZlbnQuY29sdW1ucyBhcyBhbnlbXSkubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IChldmVudC5jb2x1bW5zIGFzIGFueVtdKVtpbmRleF07XG4gICAgICAgICAgY29uc3QgY29sSW5kZXggPSBjb2x1bW5PcmRlci5pbmRleE9mKGluZGV4KTtcbiAgICAgICAgICAvLyBzZXQgdmlzaWJpbHR5IHdpdGggcmVkcmF3ICg9dHJ1ZSlcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb2x1bW4oY29sSW5kZXgpLnZpc2libGUoZWxlbWVudC52aXNpYmxlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBmaW5hbGx5IGFwcGx5IGNvbHVtbiBvcmRlclxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jb2xSZW9yZGVyLm9yZGVyKGluZGV4ZXMsIHRydWUpO1xuICAgICAgICAvLyBzaW1wbHkgcmVkcmF3IHRoZSB0YWJsZVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgdG8gcGFzcyBhbiBlcnJvckhhbmRsZXIgY2FsbGJhY2ssIGlmIGRlc2lyZWRcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGV4cG9ydFZpZXcob3B0aW9ucz86IHtlcnJvckhhbmRsZXI/OiAocmVhc29uPzogYW55KSA9PiBhbnl9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmcuc2hvd0xvYWRpbmcoKTtcbiAgICAgIC8vIHZhbGlkYXRlIHF1ZXJ5IGl0ZW1zIGFuZCBjb25maWdcbiAgICAgIGlmICghKHRoaXMubGFzdFF1ZXJ5ICYmIHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMgJiYgdGhpcy5jb25maWcpKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGV4cG9ydCBzZXR0aW5nc1xuICAgICAgY29uc3QgZXhwb3J0U2V0dGluZ3MgPSB0aGlzLl9jb25maWd1cmF0aW9uLnNldHRpbmdzIGFzIEV4cG9ydExpbWl0Q29uZmlndXJhdGlvbjtcbiAgICAgIC8vIGFuZCBleHBvcnQgbGltaXRcbiAgICAgIGNvbnN0IGV4cG9ydExpbWl0ID1cbiAgICAgICAgKGV4cG9ydFNldHRpbmdzICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMuZXhwb3J0TGltaXQgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0ID4gMClcbiAgICAgICAgPyBleHBvcnRTZXR0aW5ncy50YWJsZXMuZXhwb3J0TGltaXQgOiBNQVhfRVhQT1JUX0lURU1TO1xuICAgICAgLy8gYW5kIHZhbGlkYXRlIGl0XG4gICAgICBpZiAodGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA+IGV4cG9ydExpbWl0KSB7XG4gICAgICAgIC8vIGNhbGwgZXJyb3IgaGFuZGxlclxuICAgICAgICAvLyBwcm92aWRlIGEgcmVjb2duaXppYmxlIGVycm9yIHR5cGVcbiAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lcnJvckhhbmRsZXIpIHtcbiAgICAgICAgICBvcHRpb25zLmVycm9ySGFuZGxlcihuZXcgRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yKCdFeHBvcnQgbGltaXQgZXhjZWVkZWQnKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9yIHNob3cgd2FybmluZyBtb2RhbCBhbmQgZXhpdFxuICAgICAgICB0aGlzLl9tb2RhbFNlcnZpY2Uuc2hvd1dhcm5pbmdEaWFsb2codGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuRXhwb3J0TGlzdCcpLFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLkV4cG9ydExpbWl0RXhjZWVkZWQnLFxuICAgICAgICAgICAge2RhdGFMZW5ndGg6IHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMsIGV4cG9ydExpbWl0fSksIERJQUxPR19CVVRUT05TLk9rKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IHRvdGFsIGRpc3BsYXllZCBpdGVtc1xuICAgICAgY29uc3QgdG90YWxEaXNwbGF5ZWRJdGVtcyA9IEFycmF5LmZyb20odGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5haURpc3BsYXkpLmxlbmd0aDtcbiAgICAgIC8vIGlmIHRoZXkgYWxyZWFkeSBzYXRpc2Z5IHRoZSBsYXN0IHF1ZXJ5IHRvdGFsXG4gICAgICBpZiAodG90YWxEaXNwbGF5ZWRJdGVtcyA9PT0gdGhpcy5fbGFzdFF1ZXJ5VG90YWxJdGVtcykge1xuICAgICAgICAvLyBwcmVwYXJlIGV4Y2VsIGRhdGEgaW1tZWRpYXRlbHlcbiAgICAgICAgY29uc3Qge2JvZHksIGhlYWRlcn0gPSB0aGlzLmdldEV4cG9ydGFibGVEYXRhKCk7XG4gICAgICAgIC8vIGFuZCBleHBvcnQgdGhlbSB0byBleGNlbFxuICAgICAgICB0aGlzLl9leHBvcnRTcHJlYWRzaGVldC5leHBvcnQoYm9keSwgYCR7dGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLnRpdGxlIHx8ICdUYWJsZXMuRXhwb3J0UmVzdWx0cycpfS54bHN4YCwge1xuICAgICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICAgc2tpcEhlYWRlcjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCBtb3JlIGRhdGEgbmVlZCB0byBiZSBmZXRjaGVkXG4gICAgICAgIC8vIGhvbGQgcHJldmlvdXMgZGF0YSBzdGF0ZVxuICAgICAgICBjb25zdCBwcmV2aW91c0RhdGFTdGF0ZSA9IHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkudG9BcnJheSgpO1xuICAgICAgICAvLyBnZXQgdGFyZ2V0IGRhdGEgc3RhdGUgYnkgZXhlY3V0aW5nIHRoZSBsYXN0IHF1ZXJ5XG4gICAgICAgIC8vIG5vdGU6IHRha2luZyB0aGUgZXhwb3J0TGltaXQgYW1vdW50IG9mIGl0ZW1zIHdpbGwgYWx3YXlzIHNhdGlzZnkgdGhlIHJlc3VsdHMsXG4gICAgICAgIC8vIGJlY2F1c2UgaXQgaGFzIGJlZW4gdmFsaWRhdGVkXG4gICAgICAgIGNvbnN0IHRhcmdldERhdGFTdGF0ZSA9IGF3YWl0IHRoaXMubGFzdFF1ZXJ5LnRha2UoZXhwb3J0TGltaXQpLnNraXAoMCkuZ2V0SXRlbXMoKTtcbiAgICAgICAgLy8gY2hhbmdlIHRhYmxlIGRhdGEgb24gdGhlIGZseSwgYnV0IGRvIG5vdCByZWRyYXdcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY2xlYXIoKS5yb3dzLmFkZCh0YXJnZXREYXRhU3RhdGUpO1xuICAgICAgICAvLyBwcmVwYXJlIGV4Y2VsIGRhdGFcbiAgICAgICAgY29uc3Qge2JvZHksIGhlYWRlcn0gPSB0aGlzLmdldEV4cG9ydGFibGVEYXRhKCk7XG4gICAgICAgIC8vIHJlc2V0IHRhYmxlIGRhdGFcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY2xlYXIoKS5yb3dzLmFkZChwcmV2aW91c0RhdGFTdGF0ZSk7XG4gICAgICAgIC8vIGFuZCBleHBvcnQgdGFyZ2V0IGRhdGEgdG8gZXhjZWxcbiAgICAgICAgdGhpcy5fZXhwb3J0U3ByZWFkc2hlZXQuZXhwb3J0KGJvZHksIGAke3RoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbmZpZy50aXRsZSB8fCAnVGFibGVzLkV4cG9ydFJlc3VsdHMnKX0ueGxzeGAsIHtcbiAgICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAgIHNraXBIZWFkZXI6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgLy8gZXhpdFxuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gbG9nIGVycm9yXG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAvLyBjYWxsIGVycm9yIGhhbmRsZXIsIGlmIGRlZmluZWRcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgIG9wdGlvbnMuZXJyb3JIYW5kbGVyKGVycik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB1c2UgZGVmYXVsdCBlcnJvciBzZXJ2aWNlXG4gICAgICAgIHRoaXMuX2Vycm9yU2VydmljZS5zaG93RXJyb3IoZXJyLCB7XG4gICAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmcuaGlkZUxvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0RXhwb3J0YWJsZURhdGEoKToge2JvZHk6IGFueVtdLCBoZWFkZXI6IGFueVtdfSB7XG4gICAgaWYgKCEodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuYnV0dG9uc1xuICAgICAgJiYgdHlwZW9mIHRoaXMuZGF0YVRhYmxlLmJ1dHRvbnMuZXhwb3J0RGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGlzLmNvbmZpZykpIHtcbiAgICAgIHJldHVybiB7Ym9keTogW10sIGhlYWRlcjogW119O1xuICAgIH1cbiAgICAvLyBmZXRjaCBleHBvcnRhYmxlIGV4Y2VsIGRhdGFcbiAgICBsZXQge2JvZHksIGhlYWRlcn0gPSB0aGlzLmRhdGFUYWJsZS5idXR0b25zLmV4cG9ydERhdGEoKTtcbiAgICBjb25zdCBjbGVhbnVwSW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICAvLyBjbGVhbiB1cCBoZWFkZXJzXG4gICAgaGVhZGVyID0gaGVhZGVyLmZpbHRlcigoaGVhZGVySXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAvLyBleGNsdWRlIGVtcHR5IGhlYWRlcnNcbiAgICAgIGlmIChoZWFkZXJJdGVtLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY2xlYW51cEluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIGV4Y2x1ZGUgaGlkZGVuIGNvbHVtbnNcbiAgICAgIC8vIG5vdGU6IHVzZSB0aGUgZGF0YXRhYmxlIHZpc2libGUoKSBmdW5jdGlvblxuICAgICAgLy8gaW5zdGVhZCBvZiB0aGUgaGlkZGVuIGNvbmZpZyBwcm9wZXJ0eSwgdG8gc2F0aXNmeSB0aGUgY29sdW1uIHNlbGVjdG9yXG4gICAgICBpZiAoIXRoaXMuZGF0YVRhYmxlLmNvbHVtbihpbmRleCkudmlzaWJsZSgpKSB7XG4gICAgICAgIGNsZWFudXBJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICAvLyBjbGVhbiB1cCBib2R5XG4gICAgYm9keSA9IGJvZHkubWFwKChyb3c6IGFueSBbXSkgPT4ge1xuICAgICAgcmV0dXJuIHJvdy5maWx0ZXIoKF8sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIGNsZWFudXBJbmRleGVzLmluZGV4T2Yocm93SW5kZXgpID09PSAtMTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiB7Ym9keSwgaGVhZGVyfTtcbiAgfVxufVxuXG4vLyBjb25zdCBlbmRSZW5kZXIgPSBmdW5jdGlvbiAocm93cywgZ3JvdXApIHsgdmFyIGNvdW50ID0gcm93cy5kYXRhKCk7IHJvd3MuY291bnQoKTtcbi8vICAgcmV0dXJuIChgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyb3dHcm91cFRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogJHtncm91cH0gfVwiPjwvbmctY29udGFpbmVyPmApOyB9O1xuLy8gPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyb3dHcm91cFRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogIH1cIj48L25nLWNvbnRhaW5lcj5cbi8vIHJldHVybiAoJzxzcGFuIGFsaWduPVwibGVmdFwiXCI+PHN0cm9uZz4nKyBncm91cCArICcgJyArIGAoJHt0b3RhbEhlYWRlcn0gYCAgKyBjb3VudC5sZW5ndGggKyAnKTwvc3Ryb25nPjwvc3Bhbj4nKTsgfTtcbiJdfQ==
|