@ohioepa/oepa-ui-lib 1.2.23 → 1.2.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/table/p-table/p-table.component.mjs +14 -4
- package/esm2022/lib/table/table.component.mjs +7 -5
- package/fesm2022/ohioepa-oepa-ui-lib.mjs +19 -7
- package/fesm2022/ohioepa-oepa-ui-lib.mjs.map +1 -1
- package/ohioepa-oepa-ui-lib-1.2.24.tgz +0 -0
- package/package.json +1 -1
- package/ohioepa-oepa-ui-lib-1.2.23.tgz +0 -0
|
@@ -505,7 +505,7 @@ export class PTableComponent {
|
|
|
505
505
|
}
|
|
506
506
|
// need to check for noFilters to send subject
|
|
507
507
|
this.noFilters();
|
|
508
|
-
this.updateTable();
|
|
508
|
+
this.updateTable(true);
|
|
509
509
|
}
|
|
510
510
|
onSortChanged(column) {
|
|
511
511
|
this.tableService.setSort(this.tableId, column);
|
|
@@ -522,11 +522,15 @@ export class PTableComponent {
|
|
|
522
522
|
this.tableService.setPage(this.tableId, pageEvent.page);
|
|
523
523
|
this.updateTable();
|
|
524
524
|
}
|
|
525
|
-
updateTable() {
|
|
525
|
+
updateTable(clearSelctedRows = false) {
|
|
526
526
|
const filteredData = this.filterData(this.data);
|
|
527
527
|
const sortedData = this.sortData(filteredData);
|
|
528
528
|
this.rows = this.changePage(sortedData);
|
|
529
529
|
this.pageInfo.length = sortedData.length;
|
|
530
|
+
this.allRowsSelected = false;
|
|
531
|
+
if (clearSelctedRows) {
|
|
532
|
+
this.rowSelected.emit([]);
|
|
533
|
+
}
|
|
530
534
|
this.dataHasDetails = this.checkForDetails(this.rows);
|
|
531
535
|
}
|
|
532
536
|
updatePage() {
|
|
@@ -613,7 +617,12 @@ export class PTableComponent {
|
|
|
613
617
|
toggleAllRowsSelection() {
|
|
614
618
|
const selectedRows = [];
|
|
615
619
|
this.allRowsSelected = !this.allRowsSelected;
|
|
620
|
+
// deselect all rows
|
|
616
621
|
this._data.forEach((r) => {
|
|
622
|
+
r.selected = false;
|
|
623
|
+
});
|
|
624
|
+
// select only visible rows
|
|
625
|
+
this.rows.forEach((r) => {
|
|
617
626
|
if (r.selectable) {
|
|
618
627
|
r.selected = this.allRowsSelected;
|
|
619
628
|
}
|
|
@@ -621,7 +630,8 @@ export class PTableComponent {
|
|
|
621
630
|
selectedRows.push(r);
|
|
622
631
|
}
|
|
623
632
|
});
|
|
624
|
-
this.
|
|
633
|
+
this.rows.slice();
|
|
634
|
+
// this.updateTable();
|
|
625
635
|
this.rowSelected.emit(selectedRows);
|
|
626
636
|
}
|
|
627
637
|
toggleRowSelection(row) {
|
|
@@ -824,4 +834,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
824
834
|
}], totalRow: [{
|
|
825
835
|
type: Input
|
|
826
836
|
}] } });
|
|
827
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL3RhYmxlL3AtdGFibGUvcC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL3RhYmxlL3AtdGFibGUvcC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUF3QyxNQUFNLGVBQWUsQ0FBQztBQXFCN0csT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVMvQixNQUFNLE9BQU8sZUFBZTtJQTJKQztJQUNqQjtJQUNBO0lBQ0E7SUFDQTtJQTlKSCxhQUFhLEdBQVksS0FBSyxDQUFDO0lBQy9CLFVBQVUsR0FBMkIsRUFBRSxDQUFDO0lBQ3hDLElBQUksR0FBd0IsRUFBRSxDQUFDO0lBQy9CLGtCQUFrQixHQUFHLENBQUMsQ0FBQztJQUN2QixjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLGlCQUFpQixHQUF3QixLQUFLLENBQUM7SUFDL0MsZ0JBQWdCLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7SUFFNUQsV0FBVyxHQUEyQixFQUFFLENBQUM7SUFDekMsY0FBYyxHQUEyQixFQUFFLENBQUM7SUFDNUMsYUFBYSxHQUEyQixFQUFFLENBQUM7SUFDM0MsYUFBYSxHQUFrQixFQUFFLENBQUM7SUFDbEMsS0FBSyxHQUF3QixFQUFFLENBQUM7SUFDL0IsT0FBTyxHQUFvQixFQUFFLENBQUM7SUFDOUIsY0FBYyxHQUEyQixDQUFDO1lBQ2hELFlBQVksRUFBRSxFQUFFO1lBQ2hCLFFBQVEsRUFBRSxTQUFTO1NBQ3BCLENBQUMsQ0FBQztJQUVJLGNBQWMsR0FB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QUFLO3NCQUFiLEtBQUs7Z0JBR1csV0FBVztzQkFBM0IsTUFBTTtnQkFDVSxhQUFhO3NCQUE3QixNQUFNO2dCQUNVLFdBQVc7c0JBQTNCLE1BQU07Z0JBQ1UsZ0JBQWdCO3NCQUFoQyxNQUFNO2dCQUNVLGlCQUFpQjtzQkFBakMsTUFBTTtnQkFvQ0ksSUFBSTtzQkFEZCxLQUFLO2dCQXVCRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIE9uSW5pdCwgRWxlbWVudFJlZiwgQWZ0ZXJWaWV3Q2hlY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBPZXBhVGFibGUgfSBmcm9tICcuLi9vZXBhLXRhYmxlJztcbmltcG9ydCB7IE9lcGFUYWJsZUNvbmZpZyB9IGZyb20gJy4uL29lcGEtdGFibGUtY29uZmlnJztcbmltcG9ydCB7IE9lcGFUYWJsZUhlYWRlciB9IGZyb20gJy4uL29lcGEtdGFibGUtaGVhZGVyJztcbmltcG9ydCB7IE9lcGFUYWJsZUNvbHVtbiB9IGZyb20gJy4uL29lcGEtdGFibGUtY29sdW1uJztcbmltcG9ydCB7IE9lcGFUYWJsZVJvdyB9IGZyb20gJy4uL29lcGEtdGFibGUtcm93JztcbmltcG9ydCB7IE9lcGFUYWJsZUNlbGwgfSBmcm9tICcuLi9vZXBhLXRhYmxlLWNlbGwnO1xuaW1wb3J0IHsgT2VwYVRhYmxlUGFnZUluZm8gfSBmcm9tICcuLi9vZXBhLXRhYmxlLXBhZ2UtaW5mbyc7XG5pbXBvcnQgeyBPZXBhVGFibGVDZWxsQ2xpY2tFdmVudCB9IGZyb20gJy4uL29lcGEtdGFibGUtY2VsbC1jbGljay1ldmVudCc7XG5cbmltcG9ydCB7IE9lcGFBY3Rpb25FdmVudCB9IGZyb20gJy4uLy4uL2FjdGlvbi1idG4vb2VwYS1hY3Rpb24tZXZlbnQnO1xuXG5pbXBvcnQgeyBUYWJsZUV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi90YWJsZS1leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBPZXBhVGVtcGxhdGVJbmZvIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1jb21tb24tbGliJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2VwYVRhYmxlU29ydENyaXRlcmlvbiB9IGZyb20gJy4uL29lcGEtdGFibGUtc29ydC1jcml0ZXJpb24nO1xuaW1wb3J0IHsgUGFnZUNoYW5nZWRFdmVudCB9IGZyb20gJ25neC1ib290c3RyYXAvcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBPZXBhUENvbHVtbiB9IGZyb20gJy4uL29lcGEtcC1jb2x1bW4nO1xuaW1wb3J0IHsgVGFibGVEYXRhQ2VsbENsaWNrRXZlbnQgfSBmcm9tICcuLi90YWJsZS1kYXRhLWNlbGwvdGFibGUtZGF0YS1jZWxsLWNsaWNrLWV2ZW50JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9lcGFUYWJsZUZpbHRlciB9IGZyb20gJy4uL29lcGEtdGFibGUtZmlsdGVyJztcbmltcG9ydCB7IE9lcGFGaWxlVXRpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9vZXBhLWZpbGUtdXRpbHMvb2VwYS1maWxlLXV0aWwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ29lcGEtcC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcC10YWJsZS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdDaGVja2VkIHtcbiAgcHVibGljIHNob3dGaWx0ZXJSb3c6IEJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGhlYWRlclJvd3M6IEFycmF5PE9lcGFUYWJsZUhlYWRlcj4gPSBbXTtcbiAgcHVibGljIHJvd3M6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgcHVibGljIHZpc2libGVDb2x1bW5Db3VudCA9IDA7XG4gIHB1YmxpYyBhbGxDb2x1bW5Db3VudCA9IDA7XG4gIHB1YmxpYyBleHBvcnRWaXNpYmxlT25seTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICBwdWJsaWMgbm9GaWx0ZXJzU3ViamVjdDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcHVibGljIGRhdGFDb2x1bW5zOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+ID0gW107XG4gIHB1YmxpYyB2aXNpYmxlQ29sdW1uczogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiA9IFtdO1xuICBwdWJsaWMgaGlkZGVuQ29sdW1uczogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiA9IFtdO1xuICBwdWJsaWMgY29sdW1uSGVhZGVyczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwdWJsaWMgX2RhdGE6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgcHJpdmF0ZSBfY29uZmlnOiBPZXBhVGFibGVDb25maWcgPSB7fTtcbiAgcHJpdmF0ZSBjdXJyZW50RmlsdGVyczogQXJyYXk8T2VwYVRhYmxlRmlsdGVyPiA9IFt7XG4gICAgZmlsdGVyU3RyaW5nOiAnJyxcbiAgICBjb2x1bW5JZDogdW5kZWZpbmVkXG4gIH1dO1xuXG4gIHB1YmxpYyBkYXRhSGFzRGV0YWlscyA9IGZhbHNlO1xuICBwdWJsaWMgc2hvd0FsbERldGFpbHMgPSBmYWxzZTtcblxuICBwdWJsaWMgYWxsUm93c1NlbGVjdGVkID0gZmFsc2U7XG5cbiAgcHVibGljIHBhZ2VJbmZvOiBPZXBhVGFibGVQYWdlSW5mbyA9IHtcbiAgICBwYWdlOiAxLFxuICAgIGl0ZW1zUGVyUGFnZTogMTAsXG4gICAgbWF4U2l6ZTogNSxcbiAgICBudW1QYWdlczogMSxcbiAgICBsZW5ndGg6IDBcbiAgfTtcbiAgcHVibGljIGN1cnJlbnRQYWdlID0gMTtcbiAgcHVibGljIHBhZ2luYXRpb25PbiA9IHRydWU7XG5cbiAgQElucHV0KCkgdGFibGVJZCA9ICcnO1xuICBASW5wdXQoKSBhbGxvd0VkaXQgPSB0cnVlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNvbmZpZyhjb25mOiBPZXBhVGFibGVDb25maWcpIHtcbiAgICBpZiAoIWNvbmYuY2xhc3NOYW1lKSB7XG4gICAgICBjb25mLmNsYXNzTmFtZSA9ICd0YWJsZS1zdHJpcGVkIHRhYmxlLWJvcmRlcmVkJztcbiAgICB9XG4gICAgaWYgKGNvbmYuY2xhc3NOYW1lcykge1xuICAgICAgY29uZi5jbGFzc05hbWUgPSBjb25mLmNsYXNzTmFtZXMuam9pbignICcpO1xuICAgIH1cbiAgICBpZiAoY29uZi5yb3dzUGVyUGFnZSkge1xuICAgICAgdGhpcy5wYWdlSW5mby5pdGVtc1BlclBhZ2UgPSBjb25mLnJvd3NQZXJQYWdlO1xuICAgIH1cbiAgICB0aGlzLmV4cG9ydFZpc2libGVPbmx5ID0gY29uZi5leHBvcnRWaXNpYmxlT25seTtcbiAgICB0aGlzLl9jb25maWcgPSBjb25mO1xuICB9XG5cbiAgcHVibGljIGdldCBjb25maWcoKTogT2VwYVRhYmxlQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjb21wbGV4SGVhZGVyKGhkcnM6IEFycmF5PE9lcGFUYWJsZUhlYWRlcj4pIHtcbiAgICB0aGlzLnJlc2V0SGVhZGVycygpO1xuICAgIGlmIChoZHJzICYmIGhkcnMubGVuZ3RoKSB7XG4gICAgICBoZHJzLmZvckVhY2goKGhkcjogT2VwYVRhYmxlSGVhZGVyKSA9PiB7XG4gICAgICAgIHRoaXMuaGVhZGVyUm93cy5wdXNoKHRoaXMuZXh0cmFjdElubmVyQ29sdW1ucyhoZHIuY29sdW1ucykpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNvbHVtbkhlYWRlcnMgPSB0aGlzLmV4dHJhY3RDb2x1bW5IZWFkZXJzKHRoaXMuaGVhZGVyUm93cyk7XG4gICAgICB0aGlzLmRhdGFDb2x1bW5zID0gdGhpcy5leHRyYWN0RGF0YUNvbHVtbnModGhpcy5oZWFkZXJSb3dzKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUhpZGRlbkNvbHVtbnModHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBoZWFkZXIoaGRyOiBPZXBhVGFibGVIZWFkZXIpIHtcbiAgICB0aGlzLnJlc2V0SGVhZGVycygpO1xuICAgIGlmIChoZHIuY29sdW1ucyAmJiBoZHIuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmhlYWRlclJvd3MucHVzaCh0aGlzLmV4dHJhY3RJbm5lckNvbHVtbnMoaGRyLmNvbHVtbnMpKTtcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5IZWFkZXJzID0gdGhpcy5leHRyYWN0Q29sdW1uSGVhZGVycyh0aGlzLmhlYWRlclJvd3MpO1xuICAgIHRoaXMuZGF0YUNvbHVtbnMgPSB0aGlzLmV4dHJhY3REYXRhQ29sdW1ucyh0aGlzLmhlYWRlclJvd3MpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUhpZGRlbkNvbHVtbnMoZmFsc2UpO1xuICB9XG5cbiAgQElucHV0KCkgY3VzdG9tQnRuTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgY3VzdG9tQnRuVmlzaWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBjdXN0b21CdG5FbmFibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgY3VzdG9tQnRuTGFiZWwyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGN1c3RvbUJ0blZpc2libGUyID0gZmFsc2U7XG4gIEBJbnB1dCgpIGN1c3RvbUJ0bkVuYWJsZWQyID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc21hbGwgPSBmYWxzZTtcblxuICAvLyBPdXRwdXRzIChFdmVudHMpXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2VsbENsaWNrZWQ6IEV2ZW50RW1pdHRlcjxPZXBhVGFibGVDZWxsQ2xpY2tFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgYWN0aW9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPE9lcGFBY3Rpb25FdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcm93U2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxBcnJheTxPZXBhVGFibGVSb3c+PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBjdXN0b21CdG5DbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY3VzdG9tQnRuMkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgcENvbHVtbnM6IE9lcGFQQ29sdW1uW10gPSBbXTtcblxuICBwcml2YXRlIHJlc2V0SGVhZGVycygpIHtcbiAgICB0aGlzLmhlYWRlclJvd3MgPSBbXTtcbiAgICB0aGlzLmNvbHVtbkhlYWRlcnMgPSBbXTtcbiAgICB0aGlzLmRhdGFDb2x1bW5zID0gW107XG4gICAgdGhpcy5oaWRkZW5Db2x1bW5zID0gW107XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IFtdO1xuICAgIHRoaXMucENvbHVtbnMgPSBbXTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUhpZGRlbkNvbHVtbnMoY29tcGxleEhlYWRlcjogYm9vbGVhbikge1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbkNvdW50ID0gMDtcbiAgICB0aGlzLmFsbENvbHVtbkNvdW50ID0gMDtcbiAgICB0aGlzLmRhdGFDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29sdW1uLmZpZWxkID0gY29sdW1uLmlkO1xuICAgICAgY29sdW1uLmhlYWRlciA9IGNvbHVtbi50aXRsZTtcbiAgICAgIGlmIChjb21wbGV4SGVhZGVyICYmIChjb2x1bW4/LmhpZGRlbiA9PT0gdHJ1ZSB8fCBjb2x1bW4/LmhpZGRlbiA9PT0gZmFsc2UpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ2Rpc2FibGluZyBoaWRkZW4gYXR0cmlidXRlIGZvciBjb2x1bW46ICcgKyBjb2x1bW4uaWQgK1xuICAgICAgICAgICcuIEhpZGRlbiBjb2x1bW5zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBjb21wbGV4IGhlYWRlcnMgKHlldCkuJyk7XG4gICAgICAgIGNvbHVtbi5oaWRkZW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbkNvdW50Kys7XG4gICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgfSBlbHNlIGlmIChjb2x1bW4/LmhpZGRlbiA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmhpZGRlbkNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbkNvdW50Kys7XG4gICAgICB9XG4gICAgICB0aGlzLmFsbENvbHVtbkNvdW50Kys7XG4gICAgfSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRhdGEodmFsdWVzOiBBcnJheTxPZXBhVGFibGVSb3c+KSB7XG4gICAgaWYgKCF0aGlzLl9kYXRhIHx8IHRoaXMuX2RhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9kYXRhID0gdGhpcy50YWJsZVNlcnZpY2UuZ2V0RGF0YSh0aGlzLnRhYmxlSWQpIHx8IFtdO1xuICAgIH1cbiAgICBpZiAodmFsdWVzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWx1ZXNbaV0ucHJpdmF0ZUlkID0gaTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGVuZ3RoICE9PSB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLmNsZWFyUGFnZUluZm8odGhpcy50YWJsZUlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9kYXRhID0gdmFsdWVzO1xuICAgIHRoaXMudGFibGVTZXJ2aWNlLnNldERhdGEodGhpcy50YWJsZUlkLCB0aGlzLl9kYXRhKTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRhdGEoKTogQXJyYXk8T2VwYVRhYmxlUm93PiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGEubWFwKHggPT4gT2JqZWN0LmFzc2lnbih7fSwgeCkpO1xuICB9XG5cbiAgQElucHV0KCkgdG90YWxSb3c6IE9lcGFUYWJsZVJvdyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIHRhYmxlU2VydmljZTogVGFibGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFibGVFeHBvcnRTZXJ2aWNlOiBUYWJsZUV4cG9ydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWxlVXRpbFNlcnZpY2U6IE9lcGFGaWxlVXRpbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZikge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uT24gPSAhdGhpcy5fY29uZmlnLmRpc2FibGVQYWdpbmF0aW9uO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZy5jbGFzc05hbWUgIT09ICcnKSB7XG4gICAgICAkKCd0YWJsZScpLmFkZENsYXNzKCd0YWJsZSAnICsgdGhpcy5jb25maWcuY2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RJbm5lckNvbHVtbnMoaW5uZXI6IEFycmF5PE9lcGFUYWJsZUNvbHVtbj4pOiBPZXBhVGFibGVIZWFkZXIge1xuICAgIGNvbnN0IGhlYWRlcjogT2VwYVRhYmxlSGVhZGVyID0geyBjb2x1bW5zOiBbXSB9O1xuICAgIGlubmVyLmZvckVhY2goKHZhbHVlOiBPZXBhVGFibGVDb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGhlYWRlci5jb2x1bW5zLmZpbmQoKGNvbDogT2VwYVRhYmxlQ29sdW1uKSA9PiBjb2wuaWQgPT09IHZhbHVlLmlkKTtcbiAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgLy8gb3ZlcndyaXRlIHJlcGVhdGVkIGNvbHVtblxuICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbiwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgaGVhZGVyLmNvbHVtbnMucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGhlYWRlcjtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdENvbHVtbkhlYWRlcnMoaGVhZGVyUm93czogQXJyYXk8T2VwYVRhYmxlSGVhZGVyPik6IEFycmF5PHN0cmluZz4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBsZXQgcm93SW5kZXggPSAwO1xuICAgIGNvbnN0IGNoaWxkQ29sdW1uczogYW55ID0ge307XG4gICAgaGVhZGVyUm93cy5mb3JFYWNoKChoZHI6IE9lcGFUYWJsZUhlYWRlcikgPT4ge1xuICAgICAgbGV0IGNvbEluZGV4ID0gMDtcbiAgICAgIGhkci5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogT2VwYVRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChyb3dJbmRleCA9PT0gMCkge1xuICAgICAgICAgIGhlYWRlcnMucHVzaChjb2x1bW4udGl0bGUpO1xuICAgICAgICAgIGlmIChjb2x1bW4uY29sc3Bhbikge1xuICAgICAgICAgICAgZm9yIChsZXQgY291bnQgPSAxOyBjb3VudCA8IGNvbHVtbi5jb2xzcGFuOyBjb3VudCsrKSB7XG4gICAgICAgICAgICAgIGhlYWRlcnMucHVzaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb2x1bW4ucm93c3Bhbikge1xuICAgICAgICAgICAgY2hpbGRDb2x1bW5zW2NvbEluZGV4XSA9IGNvbHVtbi5yb3dzcGFuIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2hpbGUgKGNoaWxkQ29sdW1uc1tjb2xJbmRleF0gJiYgY2hpbGRDb2x1bW5zW2NvbEluZGV4XSA+IDApIHtcbiAgICAgICAgICAgIGNoaWxkQ29sdW1uc1tjb2xJbmRleF0tLTtcbiAgICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGhlYWRlcnNbY29sSW5kZXhdICs9ICcgJyArIGNvbHVtbi50aXRsZTtcbiAgICAgICAgICBpZiAoY29sdW1uLmNvbHNwYW4pIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNvdW50ID0gMTsgY291bnQgPCBjb2x1bW4uY29sc3BhbjsgY291bnQrKykge1xuICAgICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgfSk7XG4gICAgICByb3dJbmRleCsrO1xuICAgIH0pO1xuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cblxuICBwcml2YXRlIGV4dHJhY3REYXRhQ29sdW1ucyhoZWFkZXJSb3dzOiBBcnJheTxPZXBhVGFibGVIZWFkZXI+KTogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiB7XG4gICAgY29uc3QgZGF0YUNvbHVtbnM6IEFycmF5PE9lcGFUYWJsZUNvbHVtbj4gPSBbXTtcbiAgICBsZXQgcm93SW5kZXggPSAwO1xuICAgIGNvbnN0IGNoaWxkQ29sdW1uczphbnkgPSB7fTtcbiAgICBoZWFkZXJSb3dzLmZvckVhY2goKGhkcjogT2VwYVRhYmxlSGVhZGVyKSA9PiB7XG4gICAgICBsZXQgY29sSW5kZXggPSAwO1xuICAgICAgaGRyLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKHJvd0luZGV4ID09PSAwKSB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5jb2xzcGFuICYmIGNvbHVtbi5jb2xzcGFuID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgY291bnQgPSAwOyBjb3VudCA8IGNvbHVtbi5jb2xzcGFuOyBjb3VudCsrKSB7XG4gICAgICAgICAgICAgIGRhdGFDb2x1bW5zLnB1c2goe2lkOiAnJyx0aXRsZTogJyd9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbEluZGV4ICs9IChjb2x1bW4uY29sc3BhbiAtIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhQ29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoY29sdW1uLnJvd3NwYW4pIHtcbiAgICAgICAgICAgICAgY2hpbGRDb2x1bW5zW2NvbEluZGV4XSA9IGNvbHVtbi5yb3dzcGFuIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2hpbGUgKGNoaWxkQ29sdW1uc1tjb2xJbmRleF0gJiYgY2hpbGRDb2x1bW5zW2NvbEluZGV4XSA+IDApIHtcbiAgICAgICAgICAgIGNoaWxkQ29sdW1uc1tjb2xJbmRleF0tLTtcbiAgICAgICAgICAgIGNvbEluZGV4Kys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjb2x1bW4uY29sc3BhbiAmJiBjb2x1bW4uY29sc3BhbiA+IDEpIHtcbiAgICAgICAgICAgIGNvbEluZGV4ICs9IChjb2x1bW4uY29sc3BhbiAtIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhQ29sdW1uc1tjb2xJbmRleF0gPSBjb2x1bW47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbEluZGV4Kys7XG4gICAgICB9KTtcbiAgICAgIHJvd0luZGV4Kys7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFDb2x1bW5zO1xuICB9XG5cbiAgcHVibGljIHNhbml0aXplKGh0bWw6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbCk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdG8gc2VlIGlmIGFueSBmaWx0ZXJzIGFyZSBzZXRcbiAgICovXG4gIHB1YmxpYyBub0ZpbHRlcnMoKTogYm9vbGVhbiB7XG4gICAgbGV0IG5vRmlsdGVycyA9IHRydWU7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBpZiAoZmlsdGVyLmZpbHRlclN0cmluZyAmJiBmaWx0ZXIuZmlsdGVyU3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbm9GaWx0ZXJzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ub0ZpbHRlcnNTdWJqZWN0Lm5leHQobm9GaWx0ZXJzKTtcbiAgICByZXR1cm4gbm9GaWx0ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBnbG9iYWwgZmlsdGVyIHN0cmluZyAoaWYgYW55KSBhcyBhIFJlZ0V4cFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRHbG9iYWxGaWx0ZXIoKTogUmVnRXhwIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgcmVnRXhwOiBSZWdFeHAgfCB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBpZiAoIWZpbHRlci5jb2x1bW5JZCAmJiBmaWx0ZXIuZmlsdGVyU3RyaW5nICYmIGZpbHRlci5maWx0ZXJTdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKGZpbHRlci5maWx0ZXJTdHJpbmcsICdpJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlZ0V4cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgZmlsdGVyIGZvciB0aGUgc3BlY2lmaWVkIGNvbHVtbiAoaWYgYW55KSBhcyBhIFJlZ0V4cC5cbiAgICogQHBhcmFtIGNvbHVtbklkXG4gICAqL1xuICBwcml2YXRlIGdldEZpbHRlckZvckNvbHVtbihjb2x1bW5JZDogc3RyaW5nKTogUmVnRXhwIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgcmVnRXhwOiBSZWdFeHAgfCB1bmRlZmluZWQ7XG4gICAgdGhpcy5jdXJyZW50RmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBpZiAoZmlsdGVyLmNvbHVtbklkID09PSBjb2x1bW5JZCAmJiBmaWx0ZXIuZmlsdGVyU3RyaW5nICYmIGZpbHRlci5maWx0ZXJTdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKGZpbHRlci5maWx0ZXJTdHJpbmcsICdpJyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlZ0V4cDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIHRhYmxlIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGdsb2JhbCBvciBjb2x1bW4tc3BlY2lmaWNcbiAgICogZmlsdGVycyBzZXQgaW4gdGhlIFVJLlxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJEYXRhKGRhdGE6IEFycmF5PE9lcGFUYWJsZVJvdz4pOiBBcnJheTxPZXBhVGFibGVSb3c+IHtcbiAgICAvLyBkb24ndCBhdHRlbXB0IGZpbHRlcmluZyBpZiB0aGVyZSBhcmUgbm8gZmlsdGVycyBzZXRcbiAgICBpZiAodGhpcy5ub0ZpbHRlcnMoKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGxldCBmaWx0ZXJlZERhdGE6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBkYXRhO1xuICAgIGNvbnN0IHRlbXBBcnJheTogQXJyYXk8T2VwYVRhYmxlUm93PiA9IFtdO1xuICAgIGZpbHRlcmVkRGF0YS5mb3JFYWNoKChyb3c6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgbGV0IGZsYWcgPSB0aGlzLmZpbHRlckJ5Q29sdW1uRmlsdGVycyhyb3cpO1xuICAgICAgaWYgKGZsYWcpIHtcbiAgICAgICAgZmxhZyA9IHRoaXMuZmlsdGVyQnlHbG9iYWxGaWx0ZXIocm93KTtcbiAgICAgIH1cbiAgICAgIGlmIChmbGFnIHx8IHJvdy5pc0RpdmlkZXIpIHtcbiAgICAgICAgdGVtcEFycmF5LnB1c2gocm93KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmaWx0ZXJlZERhdGEgPSB0ZW1wQXJyYXk7XG4gICAgcmV0dXJuIGZpbHRlcmVkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0IGlmIHJvdyBtYXRjaGVzIGFueSBvZiB0aGUgY29sdW1ubiBmaWx0ZXJzIHRoYXQgbWF5IGJlIHNldC5cbiAgICogQHBhcmFtIHJvd1xuICAgKi9cbiAgcHJpdmF0ZSBmaWx0ZXJCeUNvbHVtbkZpbHRlcnMocm93OiBPZXBhVGFibGVSb3cpOiBib29sZWFuIHtcbiAgICBsZXQgZmxhZyA9IHRydWU7XG4gICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGw6IE9lcGFUYWJsZUNlbGwpID0+IHtcbiAgICAgIGNvbnN0IHJlZ0V4cCA9IHRoaXMuZ2V0RmlsdGVyRm9yQ29sdW1uKGNlbGwuaWQpO1xuICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSBjZWxsLmZpbHRlclZhbHVlIHx8IGNlbGwudmFsdWUgfHwgJyc7XG4gICAgICBpZiAocmVnRXhwICYmIGZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZmlsdGVyVmFsdWUudG9TdHJpbmcoKS5tYXRjaChyZWdFeHApO1xuICAgICAgICBmbGFnID0gZmxhZyAmJiAocmVzdWx0ICE9PSBudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmxhZztcbiAgfVxuXG4gIC8qKlxuICAgKiBUZXN0IGlmIHJvdyBtYXRjaGVzIHRoZSBnbG9iYWwgZmlsdGVyXG4gICAqIEBwYXJhbSByb3dcbiAgICovXG4gIHByaXZhdGUgZmlsdGVyQnlHbG9iYWxGaWx0ZXIocm93OiBPZXBhVGFibGVSb3cpOiBib29sZWFuIHtcbiAgICBsZXQgZmxhZyA9IHRydWU7XG4gICAgY29uc3QgcmVnRXhwID0gdGhpcy5nZXRHbG9iYWxGaWx0ZXIoKTtcbiAgICBpZiAocmVnRXhwKSB7XG4gICAgICBmbGFnID0gZmFsc2U7XG4gICAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbDogT2VwYVRhYmxlQ2VsbCkgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IGNlbGwuZmlsdGVyVmFsdWUgfHwgY2VsbC52YWx1ZTtcbiAgICAgICAgaWYgKGZpbHRlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgZmlsdGVyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBmaWx0ZXJWYWx1ZS50b1N0cmluZygpLm1hdGNoKHJlZ0V4cCk7XG4gICAgICAgICAgZmxhZyA9IGZsYWcgfHwgKHJlc3VsdCAhPT0gbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmxhZztcbiAgfVxuXG4gIHB1YmxpYyBoaWRlQ29sdW1uKGNvbHVtbjogT2VwYVRhYmxlQ29sdW1uKSB7XG4gICAgdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gdGhpcy52aXNpYmxlQ29sdW1ucy5maWx0ZXIobWF0Y2ggPT4ge1xuICAgICAgcmV0dXJuIG1hdGNoLmlkICE9PSBjb2x1bW4uaWQ7XG4gICAgfSk7XG4gICAgY29sdW1uLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1uQ291bnQtLTtcbiAgfVxuXG4gIHB1YmxpYyB1bmhpZGVDb2x1bW4oY29sdW1uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGhpZGRlbkNvbHM6IEFycmF5PE9lcGFUYWJsZUNvbHVtbj4gPSBbXTtcbiAgICB0aGlzLmhpZGRlbkNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBpZiAoY29sLmlkICE9PSBjb2x1bW5JZCkge1xuICAgICAgICBoaWRkZW5Db2xzLnB1c2goY29sKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgdmlzaWJsZUNvbHM6IEFycmF5PE9lcGFUYWJsZUNvbHVtbj4gPSBbXTtcbiAgICB0aGlzLmRhdGFDb2x1bW5zLmZvckVhY2goZGF0YUNvbHVtbiA9PiB7XG4gICAgICBsZXQga2VlcCA9IHRydWU7XG4gICAgICBoaWRkZW5Db2xzLmZvckVhY2goaGlkZGVuQ29sdW1uID0+IHtcbiAgICAgICAgaWYgKGRhdGFDb2x1bW4uaWQgPT09IGhpZGRlbkNvbHVtbi5pZCkge1xuICAgICAgICAgIGtlZXAgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoa2VlcCkge1xuICAgICAgICB2aXNpYmxlQ29scy5wdXNoKGRhdGFDb2x1bW4pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaGlkZGVuQ29sdW1ucyA9IGhpZGRlbkNvbHM7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHZpc2libGVDb2xzO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbkNvdW50Kys7XG4gIH1cblxuICBwcml2YXRlIHNvcnREYXRhKGRhdGE6IEFycmF5PE9lcGFUYWJsZVJvdz4pOiBBcnJheTxPZXBhVGFibGVSb3c+IHtcbiAgICBsZXQgc29ydENyaXRlcmlhOiBhbnkgPSB0aGlzLnRhYmxlU2VydmljZS5nZXRTb3J0Q3JpdGVyaWEodGhpcy50YWJsZUlkKSB8fCBbXTtcbiAgICBpZiAoc29ydENyaXRlcmlhLmxlbmd0aCA9PSAwKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc2V0Q29sdW1uU29ydEluZGV4ZXMoc29ydENyaXRlcmlhKTtcblxuICAgIHJldHVybiBkYXRhLnNvcnQoKHByZXZpb3VzOiBPZXBhVGFibGVSb3csIGN1cnJlbnQ6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgbGV0IHNvcnRJbmRleCA9IDA7XG4gICAgICBsZXQgc29ydFJlc3VsdCA9IDA7XG4gICAgICB3aGlsZSAoc29ydEluZGV4IDwgc29ydENyaXRlcmlhLmxlbmd0aCAmJiBzb3J0UmVzdWx0ID09PSAwKSB7XG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5nZXRSb3dTb3J0VmFsdWUocHJldmlvdXMsIHNvcnRDcml0ZXJpYVtzb3J0SW5kZXhdLmNvbHVtbklkKTtcbiAgICAgICAgbGV0IGN1cnIgPSB0aGlzLmdldFJvd1NvcnRWYWx1ZShjdXJyZW50LCBzb3J0Q3JpdGVyaWFbc29ydEluZGV4XS5jb2x1bW5JZCk7XG4gICAgICAgIGlmIChwcmV2ID4gY3Vycikge1xuICAgICAgICAgIHNvcnRSZXN1bHQgPSAgKHNvcnRDcml0ZXJpYVtzb3J0SW5kZXhdLnNvcnQgPT09ICdkZXNjJyA/IC0xIDogMSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJldiA8IGN1cnIpIHtcbiAgICAgICAgICBzb3J0UmVzdWx0ID0gIChzb3J0Q3JpdGVyaWFbc29ydEluZGV4XS5zb3J0ID09PSAnYXNjJyA/IC0xIDogMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc29ydFJlc3VsdCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgc29ydEluZGV4Kys7XG4gICAgICB9XG4gICAgICByZXR1cm4gc29ydFJlc3VsdDtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldENvbHVtblNvcnRJbmRleGVzKHNvcnRDcml0ZXJpYTogT2VwYVRhYmxlU29ydENyaXRlcmlvbltdKSB7XG4gICAgaWYgKHNvcnRDcml0ZXJpYSAmJiBzb3J0Q3JpdGVyaWEubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaT0wOyBpPHNvcnRDcml0ZXJpYS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmRhdGFDb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uPy5pZCA9PT0gc29ydENyaXRlcmlhW2ldLmNvbHVtbklkKSB7XG4gICAgICAgICAgICBjb2x1bW4uc29ydEluZGV4ID0gaSArIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBkaXNwbGF5IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgY2VsbC5cbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcGFyYW0gY29sdW1uSWRcbiAgICovXG4gIHB1YmxpYyBnZXRSb3dWYWx1ZShyb3c6IE9lcGFUYWJsZVJvdywgY29sdW1uSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGw6IE9lcGFUYWJsZUNlbGwpID0+IHtcbiAgICAgIGlmIChjZWxsLmlkID09PSBjb2x1bW5JZCkge1xuICAgICAgICB2YWx1ZSA9IGNlbGwudmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGlzQ2VsbFZhbHVlSGlkZGVuKHJvdzogT2VwYVRhYmxlUm93LCBjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IGhpZGRlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsOiBPZXBhVGFibGVDZWxsKSA9PiB7XG4gICAgICBpZiAoY2VsbC5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgaGlkZGVuID0gY2VsbC5oaWRlVmFsdWUgfHwgZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGhpZGRlbjtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcm93IFJldHJpZXZlIHRoZSBzb3J0IHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgY2VsbCAod2lsbCBkZWZhdWx0IHRvIGRpc3BsYXkgdmFsdWUgaWYgc29ydFxuICAgKiB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVkKS5cbiAgICogQHBhcmFtIGNvbHVtbklkXG4gICAqL1xuICBwdWJsaWMgZ2V0Um93U29ydFZhbHVlKHJvdzogT2VwYVRhYmxlUm93LCBjb2x1bW5JZDogc3RyaW5nKTogYW55IHtcbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbDogT2VwYVRhYmxlQ2VsbCkgPT4ge1xuICAgICAgaWYgKGNlbGwuaWQgPT09IGNvbHVtbklkKSB7XG4gICAgICAgIGlmIChjZWxsLnNvcnRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGNlbGwuc29ydFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFsdWUgPSBjZWxsLnNvcnRWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IGNlbGwudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlUGFnZShkYXRhOiBBcnJheTxPZXBhVGFibGVSb3c+ID0gdGhpcy5kYXRhKTogQXJyYXk8T2VwYVRhYmxlUm93PiB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb25Pbikge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlUGFnZSgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMucGFnZUluZm8ucGFnZSAtIDEpICogdGhpcy5wYWdlSW5mby5pdGVtc1BlclBhZ2U7XG4gICAgY29uc3QgZW5kID0gdGhpcy5wYWdlSW5mby5pdGVtc1BlclBhZ2UgPiAtMSA/IChzdGFydCArIHRoaXMucGFnZUluZm8uaXRlbXNQZXJQYWdlKSA6IGRhdGEubGVuZ3RoO1xuICAgIC8vIG5vdCBzdXJlIHdoeSwgYnV0IG1heFNpemUgd2FzIGdldHRpbmcgbG9zdC4gUmVzZXQgaXQgaGVyZSB0byBwcmV2ZW50IHdlaXJkbmVzcy5cbiAgICB0aGlzLnBhZ2VJbmZvLm1heFNpemUgPSA1O1xuICAgIHJldHVybiBkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVBhZ2luZ2F0aW9uKCkge1xuICAgIHRoaXMucGFnaW5hdGlvbk9uID0gIXRoaXMucGFnaW5hdGlvbk9uO1xuICAgIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZpbHRlckNoYW5nZWQoZmlsdGVyOiBPZXBhVGFibGVGaWx0ZXIpIHtcbiAgICBjb25zdCBtYXRjaEZpbHRlciA9IHRoaXMuY3VycmVudEZpbHRlcnMuZmluZCgoZikgPT4ge1xuICAgICAgcmV0dXJuIGYuY29sdW1uSWQgPT09IGZpbHRlci5jb2x1bW5JZDtcbiAgICB9KTtcbiAgICBpZiAoIW1hdGNoRmlsdGVyKSB7XG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJzLnB1c2goZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF0Y2hGaWx0ZXIuZmlsdGVyU3RyaW5nID0gZmlsdGVyLmZpbHRlclN0cmluZztcbiAgICB9XG4gICAgLy8gbmVlZCB0byBjaGVjayBmb3Igbm9GaWx0ZXJzIHRvIHNlbmQgc3ViamVjdFxuICAgIHRoaXMubm9GaWx0ZXJzKCk7XG4gICAgdGhpcy51cGRhdGVUYWJsZSgpO1xuICB9XG5cbiAgcHVibGljIG9uU29ydENoYW5nZWQoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pIHtcbiAgICB0aGlzLnRhYmxlU2VydmljZS5zZXRTb3J0KHRoaXMudGFibGVJZCwgY29sdW1uKTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgb25QYWdlQ2hhbmdlZChwYWdlRXZlbnQ6IFBhZ2VDaGFuZ2VkRXZlbnQpIHtcbiAgICB0aGlzLnBhZ2VJbmZvID0ge1xuICAgICAgcGFnZTogcGFnZUV2ZW50LnBhZ2UsXG4gICAgICBpdGVtc1BlclBhZ2U6IHBhZ2VFdmVudC5pdGVtc1BlclBhZ2UsXG4gICAgICBtYXhTaXplOiB0aGlzLnBhZ2VJbmZvLm1heFNpemUsXG4gICAgICBsZW5ndGg6IHRoaXMucGFnZUluZm8ubGVuZ3RoLFxuICAgICAgbnVtUGFnZXM6IHRoaXMucGFnZUluZm8ubnVtUGFnZXNcbiAgICB9XG4gICAgdGhpcy50YWJsZVNlcnZpY2Uuc2V0UGFnZSh0aGlzLnRhYmxlSWQsIHBhZ2VFdmVudC5wYWdlKTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYmxlKCkge1xuICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IHRoaXMuZmlsdGVyRGF0YSh0aGlzLmRhdGEpO1xuICAgIGNvbnN0IHNvcnRlZERhdGEgPSB0aGlzLnNvcnREYXRhKGZpbHRlcmVkRGF0YSk7XG4gICAgdGhpcy5yb3dzID0gdGhpcy5jaGFuZ2VQYWdlKHNvcnRlZERhdGEpO1xuICAgIHRoaXMucGFnZUluZm8ubGVuZ3RoID0gc29ydGVkRGF0YS5sZW5ndGg7XG4gICAgdGhpcy5kYXRhSGFzRGV0YWlscyA9IHRoaXMuY2hlY2tGb3JEZXRhaWxzKHRoaXMucm93cyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2UoKSB7XG4gICAgY29uc3Qgc2F2ZWRQYWdlTnVtYmVyID0gdGhpcy50YWJsZVNlcnZpY2UuZ2V0UGFnZSh0aGlzLnRhYmxlSWQpO1xuICAgIGlmIChzYXZlZFBhZ2VOdW1iZXIgJiYgdGhpcy5wYWdlSW5mby5wYWdlICE9PSBzYXZlZFBhZ2VOdW1iZXIpIHtcbiAgICAgIHRoaXMucGFnZUluZm8ucGFnZSA9IHNhdmVkUGFnZU51bWJlcjtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VJbmZvLnBhZ2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0ZvckRldGFpbHMoZGF0YTogQXJyYXk8T2VwYVRhYmxlUm93Pik6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNEZXRhaWxzID0gZmFsc2U7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGgpIHtcbiAgICAgIGRhdGEuZm9yRWFjaCgocm93OiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgICAgaWYgKHJvdy5zaG93RGV0YWlsID09PSB0cnVlIHx8IHJvdy5zaG93RGV0YWlsID09PSBmYWxzZSkge1xuICAgICAgICAgIGhhc0RldGFpbHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0RldGFpbHM7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQWxsRGV0YWlscygpIHtcbiAgICB0aGlzLnNob3dBbGxEZXRhaWxzID0gIXRoaXMuc2hvd0FsbERldGFpbHM7XG4gICAgaWYgKHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2RhdGEuZm9yRWFjaCgocm93OiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgICAgaWYgKHJvdy5zaG93RGV0YWlsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByb3cuc2hvd0RldGFpbCA9IHRoaXMuc2hvd0FsbERldGFpbHM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlUm93RGV0YWlsKHRvZ2dsZVJvdzogT2VwYVRhYmxlUm93KSB7XG4gICAgaWYgKHRvZ2dsZVJvdyAmJiB0aGlzLl9kYXRhICYmIHRoaXMuX2RhdGEubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9kYXRhLmZvckVhY2goKHJvdzogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICAgIGlmIChyb3cuZGF0YVNvdXJjZSA9PT0gdG9nZ2xlUm93LmRhdGFTb3VyY2UpIHtcbiAgICAgICAgICByb3cuc2hvd0RldGFpbCA9ICF0b2dnbGVSb3cuc2hvd0RldGFpbDtcbiAgICAgICAgICB0b2dnbGVSb3cuc2hvd0RldGFpbCA9IHJvdy5zaG93RGV0YWlsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNBY3Rpb25Db2x1bW4oY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCBhY3Rpb25Db2x1bW4gPSBmYWxzZTtcbiAgICB0aGlzLmhlYWRlclJvd3MuZm9yRWFjaCgoaGRyOiBPZXBhVGFibGVIZWFkZXIpID0+IHtcbiAgICAgIGhkci5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogT2VwYVRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uaWQgPT09IGNvbHVtbklkKSB7XG4gICAgICAgICAgYWN0aW9uQ29sdW1uID0gY29sdW1uLmFjdGlvbkNvbHVtbiB8fCBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjdGlvbkNvbHVtbjtcbiAgfVxuXG4gIHB1YmxpYyBpc0NvbHVtbkhpZGRlbihjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IGhpZGRlbiA9IGZhbHNlO1xuICAgIHRoaXMuaGVhZGVyUm93cy5mb3JFYWNoKChoZHI6IE9lcGFUYWJsZUhlYWRlcikgPT4ge1xuICAgICAgaGRyLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgICBoaWRkZW4gPSBjb2x1bW4uaGlkZGVuIHx8IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gaGlkZGVuO1xuICB9XG5cbiAgcHVibGljIGdldEhpZGRlbkNvbHVtbnMoKTogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiB7XG4gICAgY29uc3QgY29sdW1uczogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiA9IFtdO1xuICAgIHRoaXMuaGVhZGVyUm93cy5mb3JFYWNoKChoZHI6IE9lcGFUYWJsZUhlYWRlcikgPT4ge1xuICAgICAgaGRyLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5oaWRkZW4pIHtcbiAgICAgICAgICBjb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICBwdWJsaWMgY2VsbENsaWNrKGV2ZW50OiBUYWJsZURhdGFDZWxsQ2xpY2tFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHJvdyA9IGV2ZW50LnJvdztcbiAgICBjb25zdCBjb2x1bW5JZCA9IGV2ZW50LmNvbHVtbklEO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRSb3dWYWx1ZShyb3csIGNvbHVtbklkKTtcbiAgICB0aGlzLmNlbGxDbGlja2VkLmVtaXQoeyByb3csIGNvbHVtbklkLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbkFjdGlvbkNsaWNrKGV2ZW50OiBPZXBhQWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGlvbkNsaWNrZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQWxsUm93c1NlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3M6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgICB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9ICF0aGlzLmFsbFJvd3NTZWxlY3RlZDtcbiAgICB0aGlzLl9kYXRhLmZvckVhY2goKHI6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgaWYgKHIuc2VsZWN0YWJsZSkge1xuICAgICAgICByLnNlbGVjdGVkID0gdGhpcy5hbGxSb3dzU2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoci5zZWxlY3RlZCkge1xuICAgICAgICBzZWxlY3RlZFJvd3MucHVzaChyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KHNlbGVjdGVkUm93cyk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlUm93U2VsZWN0aW9uKHJvdzogT2VwYVRhYmxlUm93KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzOiBBcnJheTxPZXBhVGFibGVSb3c+ID0gW107XG4gICAgcm93LnNlbGVjdGVkID0gIXJvdy5zZWxlY3RlZDtcbiAgICB0aGlzLl9kYXRhLmZvckVhY2goKGRyOiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgIGlmIChyb3cucHJpdmF0ZUlkID09PSBkci5wcml2YXRlSWQpIHtcbiAgICAgICAgZHIuc2VsZWN0ZWQgPSByb3cuc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoZHIuc2VsZWN0ZWQpIHtcbiAgICAgICAgc2VsZWN0ZWRSb3dzLnB1c2goZHIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGxSb3dzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KHNlbGVjdGVkUm93cyk7XG4gIH1cblxuICBwdWJsaWMgc2luZ2xlUm93U2VsZWN0aW9uKHJvdzogT2VwYVRhYmxlUm93KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzOiBBcnJheTxPZXBhVGFibGVSb3c+ID0gW107XG4gICAgcm93LnNlbGVjdGVkID0gIXJvdy5zZWxlY3RlZDtcbiAgICAvLyBhZGQgcm93IHRvIHNlbGVjdGVkIHJvd3MgaWYgaXQgaXMgc2VsZWN0ZWRcbiAgICBpZiAocm93LnNlbGVjdGVkKSB7XG4gICAgICBzZWxlY3RlZFJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICAvLyB1bnNlbGVjdCBhbnkgb3RoZXIgcm93IHRoYXQgbWF5IGJlIHNlbGVjdGVkXG4gICAgdGhpcy5fZGF0YS5mb3JFYWNoKChkcjogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICBpZiAocm93LnByaXZhdGVJZCA9PT0gZHIucHJpdmF0ZUlkKSB7XG4gICAgICAgIGRyLnNlbGVjdGVkID0gcm93LnNlbGVjdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZHIuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gICAgdGhpcy5yb3dTZWxlY3RlZC5lbWl0KHNlbGVjdGVkUm93cyk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVSb3dzRm9yRXhwb3J0KHJvd3M6IEFycmF5PE9lcGFUYWJsZVJvdz4pOiBBcnJheTxPZXBhVGFibGVSb3c+IHtcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgICAvLyB0aGlzLmR1bXBEZXRhaWxSb3dzKCk7XG4gICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGgpIHtcbiAgICAgIHJvd3MuZm9yRWFjaCgocm93OiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgIGNlbGxzOiB0aGlzLnNpbXBsaWZ5Q2VsbHMocm93LmNlbGxzKSxcbiAgICAgICAgICBhY3Rpb25zOiByb3cuYWN0aW9ucyxcbiAgICAgICAgICBzaG93RGV0YWlsOiByb3cuc2hvd0RldGFpbCxcbiAgICAgICAgICBzdWJUYWJsZTogcm93LmRldGFpbCA/IHRoaXMuY29udmVydFRvVGFibGUocm93LmRldGFpbCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgaXNEaXZpZGVyOiByb3cuaXNEaXZpZGVyLFxuICAgICAgICAgIGRpdmlkZXJDbGFzc05hbWU6IHJvdy5kaXZpZGVyQ2xhc3NOYW1lXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHNpbXBsaWZ5Q2VsbHMoY2VsbHM6IE9lcGFUYWJsZUNlbGxbXSkge1xuICAgIGxldCBzaW1wbGVDZWxsczogT2VwYVRhYmxlQ2VsbFtdID0gW107XG4gICAgaWYgKGNlbGxzICYmIGNlbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNlbGxzLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICAgIHNpbXBsZUNlbGxzLnB1c2goe1xuICAgICAgICAgIGlkOiBjZWxsLmlkLFxuICAgICAgICAgIHZhbHVlOiBjZWxsLnZhbHVlLFxuICAgICAgICAgIGhpZGVWYWx1ZTogY2VsbC5oaWRlVmFsdWUsXG4gICAgICAgICAgaWNvbkNsYXNzTmFtZTogY2VsbC5pY29uQ2xhc3NOYW1lLFxuICAgICAgICAgIGNsYXNzTmFtZTogY2VsbC5jbGFzc05hbWUsXG4gICAgICAgICAgaW1nU3JjOiBjZWxsLmltZ1NyYyxcbiAgICAgICAgICBpbm5lckhUTUw6IGNlbGwuaW5uZXJIVE1MLFxuICAgICAgICAgIGNvbFNwYW46IGNlbGwuY29sU3BhbixcbiAgICAgICAgICBleGNlbERhdGFGb3JtYXQ6IGNlbGwuZXhjZWxEYXRhRm9ybWF0XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzaW1wbGVDZWxscztcbiAgfVxuXG4gIHB1YmxpYyBnYXRoZXJUYWJsZURhdGEocm93czogT2VwYVRhYmxlUm93W10pOiBPZXBhVGFibGUge1xuICAgIC8vIHRoaXMuZHVtcERldGFpbFJvd3MoKTtcbiAgICBjb25zdCBvZXBhVGFibGU6IE9lcGFUYWJsZSA9IHt9O1xuICAgIG9lcGFUYWJsZS5oZWFkZXJSb3dzID0gdGhpcy5oZWFkZXJSb3dzO1xuICAgIG9lcGFUYWJsZS5hbGxEYXRhUm93cyA9IHRoaXMucHJlcGFyZVJvd3NGb3JFeHBvcnQocm93cyk7XG4gICAgb2VwYVRhYmxlLnNob3dBbGxEZXRhaWxzID0gdGhpcy5zaG93QWxsRGV0YWlscztcbiAgICBvZXBhVGFibGUuY2xhc3NOYW1lID0gdGhpcy5fY29uZmlnLmNsYXNzTmFtZTtcbiAgICBvZXBhVGFibGUudmlzaWJsZUNvbHVtbkNvdW50ID0gdGhpcy52aXNpYmxlQ29sdW1uQ291bnQ7XG4gICAgb2VwYVRhYmxlLmFsbENvbHVtbkNvdW50ID0gdGhpcy5hbGxDb2x1bW5Db3VudDtcbiAgICByZXR1cm4gb2VwYVRhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSBkdW1wRGV0YWlsUm93cygpIHtcbiAgICBjb25zb2xlLmxvZygnZHVtcERldGFpbFJvd3MgLSBUb3RhbCByb3dzOiAnICsgdGhpcy5fZGF0YS5sZW5ndGgpO1xuICAgIHRoaXMuX2RhdGEuZm9yRWFjaCgocm93OiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgIGlmIChyb3cuc2hvd0RldGFpbCkge1xuICAgICAgICBjb25zb2xlLmxvZygnU0hPVyBERVRBSUw6ICcgKyBKU09OLnN0cmluZ2lmeShyb3cuZGF0YVNvdXJjZSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNvbnZlcnRUb1RhYmxlKHRlbXBsYXRlOiBPZXBhVGVtcGxhdGVJbmZvKTogT2VwYVRhYmxlIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgb2VwYVRhYmxlOiBPZXBhVGFibGUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHRlbXBsYXRlLmNvbXBvbmVudCA9PT0gUFRhYmxlQ29tcG9uZW50KSB7XG4gICAgICBjb25zdCB0YWJsZTogUFRhYmxlQ29tcG9uZW50ID0gbmV3IFBUYWJsZUNvbXBvbmVudCh0aGlzLnNhbml0aXplciwgdGhpcy50YWJsZVNlcnZpY2UsIHRoaXMudGFibGVFeHBvcnRTZXJ2aWNlLCB0aGlzLmZpbGVVdGlsU2VydmljZSwgdGhpcy5lbFJlZik7XG4gICAgICBpZiAodGVtcGxhdGUuaW5wdXRzICYmIHRlbXBsYXRlLmlucHV0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRlbXBsYXRlLmlucHV0cy5mb3JFYWNoKChpbnB1dDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0Lm5hbWUgPT09ICdjb25maWcnKSB7XG4gICAgICAgICAgICB0YWJsZS5jb25maWcgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0Lm5hbWUgPT09ICdjb21wbGV4SGVhZGVyJykge1xuICAgICAgICAgICAgdGFibGUuY29tcGxleEhlYWRlciA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubmFtZSA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgICAgIHRhYmxlLmhlYWRlciA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubmFtZSA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICB0YWJsZS5kYXRhID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgb2VwYVRhYmxlID0gdGFibGUuZ2F0aGVyVGFibGVEYXRhKHRhYmxlLmRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2VwYVRhYmxlO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUV4cG9ydFZpc2libGVPbmx5KCkge1xuICAgIHRoaXMuZXhwb3J0VmlzaWJsZU9ubHkgPSAhdGhpcy5leHBvcnRWaXNpYmxlT25seTtcbiAgfVxuXG4gIHB1YmxpYyBleHBvcnRUb0V4Y2VsKCkge1xuICAgIGNvbnN0IHNvcnRlZERhdGEgPSB0aGlzLnNvcnREYXRhKHRoaXMuX2RhdGEpO1xuICAgIGNvbnN0IGV4cG9ydFRhYmxlOiBPZXBhVGFibGUgPSB0aGlzLmdhdGhlclRhYmxlRGF0YSh0aGlzLmV4cG9ydFZpc2libGVPbmx5ID8gdGhpcy5yb3dzIDogc29ydGVkRGF0YSk7XG5cbiAgICBpZiAoKGV4cG9ydFRhYmxlLmFsbERhdGFSb3dzPy5sZW5ndGggfHwgMCkgPiAwKSB7XG4gICAgICB0aGlzLnRhYmxlRXhwb3J0U2VydmljZS5kb3dubG9hZEV4Y2VsKGV4cG9ydFRhYmxlLCB0aGlzLl9jb25maWcpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGRhdGEgPT4ge1xuICAgICAgICAgIHRoaXMuZmlsZVV0aWxTZXJ2aWNlLmRvd25sb2FkRmlsZShkYXRhLCAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnJvciA9PiBjb25zb2xlLmxvZyhlcnJvcilcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGVydCgnTm8gZGF0YSBpbiB0YWJsZSBhdmFpbGFibGUgZm9yIGV4cG9ydCcpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBleHBvcnRUb0hUTUwoKSB7XG4gICAgY29uc3Qgc29ydGVkRGF0YSA9IHRoaXMuc29ydERhdGEodGhpcy5fZGF0YSk7XG4gICAgY29uc3QgZXhwb3J0VGFibGU6IE9lcGFUYWJsZSA9IHRoaXMuZ2F0aGVyVGFibGVEYXRhKHRoaXMuZXhwb3J0VmlzaWJsZU9ubHkgPyB0aGlzLnJvd3MgOiBzb3J0ZWREYXRhKTtcblxuICAgIGlmICgoZXhwb3J0VGFibGUuYWxsRGF0YVJvd3M/Lmxlbmd0aCB8fCAwKSA+IDApIHtcbiAgICAgIC8vIGZvciBub3csIGFsd2F5cyBlbWJlZCBzdWItdGFibGVzICBpbiBIVE1MIHZpZXcuXG4gICAgICB0aGlzLnRhYmxlRXhwb3J0U2VydmljZS5kb3dubG9hZEhUTUwoZXhwb3J0VGFibGUsIHRoaXMuX2NvbmZpZykuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZGF0YSA9PiB7XG4gICAgICAgICAgdGhpcy5maWxlVXRpbFNlcnZpY2UuZG93bmxvYWRGaWxlKGRhdGEsICd0ZXh0L2h0bWwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KCdObyBkYXRhIGluIHRhYmxlIGF2YWlsYWJsZSBmb3IgZXhwb3J0Jyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uQ3VzdG9tQnRuQ2xpY2soKSB7XG4gICAgdGhpcy5jdXN0b21CdG5DbGlja2VkLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkN1c3RvbUJ0bjJDbGljaygpIHtcbiAgICB0aGlzLmN1c3RvbUJ0bjJDbGlja2VkLmVtaXQoKTtcbiAgfVxuXG59XG4iLCI8ZGl2ICpuZ0lmPVwiIWNvbmZpZy5oaWRlVGFibGVcIj5cbiAgPGZvcm0gKm5nSWY9XCJoaWRkZW5Db2x1bW5zLmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbC1mb3JtLWxhYmVsXCI+U2hvdyBIaWRkZW4gQ29sdW1uczo8L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIChjaGFuZ2UpPVwidW5oaWRlQ29sdW1uKCRhbnkoJGV2ZW50KS50YXJnZXQudmFsdWUpXCJcbiAgICAgICAgICBbaWRdPVwidGFibGVJZCsnX1VuaGlkZUNvbHVtblNlbGVjdCdcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+Q2hvb3NlIGEgY29sdW1uPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgY29sIG9mIGhpZGRlbkNvbHVtbnNcIiBbdmFsdWVdPVwiY29sLmlkXCI+e3tjb2wudGl0bGV9fTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG5cbiAgPGRpdiBuZ0NsYXNzPVwie3tjb25maWcuZGl2Q2xhc3NOYW1lIHx8ICcnfX1cIj5cbiAgICA8cC10YWJsZSBbY29sdW1uc109XCJ2aXNpYmxlQ29sdW1uc1wiIFt2YWx1ZV09XCJyb3dzXCIgXG4gICAgICBbc2Nyb2xsYWJsZV09XCJjb25maWcudmVydGljYWxTY3JvbGxcIiBbc2Nyb2xsSGVpZ2h0XT1cImNvbmZpZy5zY3JvbGxIZWlnaHRcIlxuICAgICAgW3RhYmxlU3R5bGVdPVwieydtaW4td2lkdGgnOiAnNTByZW0nfVwiPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiIGxldC1jb2x1bW5zPlxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGhkciBvZiBoZWFkZXJSb3dzOyBsZXQgaHI9aW5kZXg7XCIgcm9sZT1cInJvd1wiPlxuICAgICAgICAgIDx0aCAqbmdJZj1cImRhdGFIYXNEZXRhaWxzICYmIGhyID09PSAwXCIgW3Jvd1NwYW5dPVwiaGVhZGVyUm93cy5sZW5ndGhcIiBjbGFzcz1cImRldGFpbC1pbmRpY2F0b3ItY29sXCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgPGkgKGNsaWNrKT1cInRvZ2dsZUFsbERldGFpbHMoKVwiIFtpZF09XCJ0YWJsZUlkKydfU2hvd0FsbERldGFpbHNMaW5rJ1wiIGNsYXNzPVwiYmlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYmktY2hldnJvbi1kb3duJzogc2hvd0FsbERldGFpbHMsICdiaS1jaGV2cm9uLXJpZ2h0JzogIXNob3dBbGxEZXRhaWxzfVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiKHNob3dBbGxEZXRhaWxzID8gJ0hpZGUnIDogJ1Nob3cnKSArICcgZGV0YWlscyBmb3IgYWxsIHJvd3MnXCIgcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1jb2wgW25nRm9yT2ZdPVwiaGRyLmNvbHVtbnNcIiBsZXQtaT1cImluZGV4XCI+XG4gICAgICAgICAgICA8dGggKm5nSWY9XCIhY29sLmhpZGRlbiAmJiBjb2wuZnJvemVuQ29sdW1uXCIgcEZyb3plbkNvbHVtbiBuZ0NsYXNzPVwie3tjb2wuY2xhc3NOYW1lIHx8ICcnfX1cIlxuICAgICAgICAgICAgICBbY29sU3Bhbl09XCJjb2wuY29sc3BhbiB8fCAxXCIgW3Jvd1NwYW5dPVwiY29sLnJvd3NwYW4gfHwgMVwiPlxuICAgICAgICAgICAgICA8b2VwYS10YWJsZS1oZWFkZXItY2VsbCBbY29sdW1uXT1cImNvbFwiIFt0YWJsZUlkXT1cInRhYmxlSWRcIiBbYWxsUm93c1NlbGVjdGVkXT1cImFsbFJvd3NTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW3Jvd0NvdW50XT1cInJvd3MubGVuZ3RoXCIgW25vRmlsdGVyc1N1YmplY3RdPVwibm9GaWx0ZXJzU3ViamVjdFwiXG4gICAgICAgICAgICAgICAgKG9uVG9nZ2xlQWxsUm93c1NlbGVjdGlvbik9XCJ0b2dnbGVBbGxSb3dzU2VsZWN0aW9uKClcIiAob25Tb3J0Q2hhbmdlZCk9XCJvblNvcnRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbkhpZGVDb2x1bW4pPVwiaGlkZUNvbHVtbigkZXZlbnQpXCIgKG9uRmlsdGVyQ2hhbmdlZCk9XCJvbkZpbHRlckNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8L29lcGEtdGFibGUtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPHRoICpuZ0lmPVwiIWNvbC5oaWRkZW4gJiYgIWNvbC5mcm96ZW5Db2x1bW5cIiBuZ0NsYXNzPVwie3tjb2wuY2xhc3NOYW1lIHx8ICcnfX1cIlxuICAgICAgICAgICAgICBbY29sU3Bhbl09XCJjb2wuY29sc3BhbiB8fCAxXCIgW3Jvd1NwYW5dPVwiY29sLnJvd3NwYW4gfHwgMVwiPlxuICAgICAgICAgICAgICA8b2VwYS10YWJsZS1oZWFkZXItY2VsbCBbY29sdW1uXT1cImNvbFwiIFt0YWJsZUlkXT1cInRhYmxlSWRcIiBbYWxsUm93c1NlbGVjdGVkXT1cImFsbFJvd3NTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW3Jvd0NvdW50XT1cInJvd3MubGVuZ3RoXCIgW25vRmlsdGVyc1N1YmplY3RdPVwibm9GaWx0ZXJzU3ViamVjdFwiXG4gICAgICAgICAgICAgICAgKG9uVG9nZ2xlQWxsUm93c1NlbGVjdGlvbik9XCJ0b2dnbGVBbGxSb3dzU2VsZWN0aW9uKClcIiAob25Tb3J0Q2hhbmdlZCk9XCJvblNvcnRDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbkhpZGVDb2x1bW4pPVwiaGlkZUNvbHVtbigkZXZlbnQpXCIgKG9uRmlsdGVyQ2hhbmdlZCk9XCJvbkZpbHRlckNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8L29lcGEtdGFibGUtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcm93IGxldC1yPVwicm93SW5kZXhcIiBsZXQtY29sdW1ucz1cImNvbHVtbnNcIj5cbiAgICAgICAgPCEtLSBEYXRhIFJvdyAtLT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZCAqbmdJZj1cImRhdGFIYXNEZXRhaWxzXCI+XG4gICAgICAgICAgICA8IS0tIERldGFpbCBpY29uIChpZiBzcGVjaWZpZWQpIC0tPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3cuc2hvd0RldGFpbCA9PT0gdHJ1ZSB8fCByb3cuc2hvd0RldGFpbCA9PT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCJyb3cuZGV0YWlsSWNvbkNsYXNzTmFtZVwiIFtuZ0NsYXNzXT1cInJvdy5kZXRhaWxJY29uQ2xhc3NOYW1lXCI+PC9pPlxuICAgICAgICAgICAgICA8aSAoY2xpY2spPVwidG9nZ2xlUm93RGV0YWlsKHJvdylcIiBbaWRdPVwidGFibGVJZCsnX1Nob3dEZXRhaWxMaW5rXycrclwiIGNsYXNzPVwiYmlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYmktY2hldnJvbi1kb3duJzogcm93LnNob3dEZXRhaWwsICdiaS1jaGV2cm9uLXJpZ2h0JzogIXJvdy5zaG93RGV0YWlsfVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiKHJvdy5zaG93RGV0YWlsID8gJ0hpZGUnIDogJ1Nob3cnKSArICcgZGV0YWlscyBmb3IgdGhpcyByb3cnXCIgcGxhY2VtZW50PVwicmlnaHRcIj5cbiAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPCEtLSBJZiByb3cgaXMgYSBkaXZpZGVyLCBpdCBzcGFucyB0aGUgd2hvbGUgdGFibGUgLS0+XG4gICAgICAgICAgPHRkICpuZ0lmPVwicm93LmlzRGl2aWRlclwiIFtjb2xTcGFuXT1cInZpc2libGVDb2x1bW5Db3VudCArIChkYXRhSGFzRGV0YWlscyA/IDEgOiAwKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJyb3cuZGl2aWRlckNsYXNzTmFtZSB8fCAnb2VwYS10YWJsZS1ncmF5J1wiPiZuYnNwOzwvdGQ+XG4gICAgICAgICAgPCEtLSBEYXRhIFJvd3MgLS0+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiIXJvdy5pc0RpdmlkZXJcIiBuZ0ZvciBsZXQtY29sIFtuZ0Zvck9mXT1cImRhdGFDb2x1bW5zXCIgbGV0LWk9XCJpbmRleFwiPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiIWNvbC5oaWRkZW4gJiYgKHJvd3xjZWxsQ29sc3Bhbjpjb2wpID4gMCAmJiFjb2wuZnJvemVuQ29sdW1uXCJcbiAgICAgICAgICAgICAgbmdDbGFzcz1cInt7cm93fGNlbGxDbGFzc25hbWU6Y29sIHx8ICcnfX1cIiBbY29sU3Bhbl09XCJyb3d8Y2VsbENvbHNwYW46Y29sXCI+XG4gICAgICAgICAgICAgIDxvZXBhLXRhYmxlLWRhdGEtY2VsbCBbY29sXT1cImNvbFwiIFtpXT1cImlcIiBbcm93XT1cInJvd1wiIFtyXT1cInJcIiBbdGFibGVJZF09XCJ0YWJsZUlkXCJcbiAgICAgICAgICAgICAgICAob25BY3Rpb25DbGljayk9XCJvbkFjdGlvbkNsaWNrKCRldmVudClcIiAob25DZWxsQ2xpY2spPVwiY2VsbENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvblRvZ2dsZVJvd1NlbGVjdGlvbik9XCJ0b2dnbGVSb3dTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uU2luZ2xlUm93U2VsZWN0aW9uKT1cInNpbmdsZVJvd1NlbGVjdGlvbigkZXZlbnQpXCI+PC9vZXBhLXRhYmxlLWRhdGEtY2VsbD5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCIhY29sLmhpZGRlbiAmJiAocm93fGNlbGxDb2xzcGFuOmNvbCkgPiAwICYmY29sLmZyb3plbkNvbHVtblwiIHBGcm96ZW5Db2x1bW5cbiAgICAgICAgICAgICAgbmdDbGFzcz1cInt7cm93fGNlbGxDbGFzc25hbWU6Y29sIHx8ICcnfX1cIiBbY29sU3Bhbl09XCJyb3d8Y2VsbENvbHNwYW46Y29sXCI+XG4gICAgICAgICAgICAgIDxvZXBhLXRhYmxlLWRhdGEtY2VsbCBbY29sXT1cImNvbFwiIFtpXT1cImlcIiBbcm93XT1cInJvd1wiIFtyXT1cInJcIiBbdGFibGVJZF09XCJ0YWJsZUlkXCJcbiAgICAgICAgICAgICAgICAob25BY3Rpb25DbGljayk9XCJvbkFjdGlvbkNsaWNrKCRldmVudClcIiAob25DZWxsQ2xpY2spPVwiY2VsbENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvblRvZ2dsZVJvd1NlbGVjdGlvbik9XCJ0b2dnbGVSb3dTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uU2luZ2xlUm93U2VsZWN0aW9uKT1cInNpbmdsZVJvd1NlbGVjdGlvbigkZXZlbnQpXCI+PC9vZXBhLXRhYmxlLWRhdGEtY2VsbD5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90cj5cblxuICAgICAgICA8IS0tIERldGFpbCBSb3cgLS0+XG4gICAgICAgIDx0ciAqbmdJZj1cInJvdy5zaG93RGV0YWlsXCIgY2xhc3M9XCJ0YWJsZS1pbmZvXCI+XG4gICAgICAgICAgPHRkIFtjb2xTcGFuXT1cInZpc2libGVDb2x1bW5Db3VudCArIChkYXRhSGFzRGV0YWlscyA/IDEgOiAwKVwiPlxuICAgICAgICAgICAgPGNtbC10ZW1wbGF0ZSBbdGVtcGxhdGVJbmZvXT1cInJvdy5kZXRhaWxcIj48L2NtbC10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtdGFibGU+XG4gIDwvZGl2PlxuICA8IS0tIFRhYmxlIGZvb3RlciAtLT5cbiAgPGZvcm0gKm5nSWY9XCIhY29uZmlnLmhpZGVGb290ZXIgfHwgKGRhdGEgJiYgcGFnZUluZm8uaXRlbXNQZXJQYWdlIDwgZGF0YS5sZW5ndGgpXCIgY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cbiAgICAgIDwhLS0gVGFibGUtd2lkZSBmaWx0ZXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIWNvbmZpZy5oaWRlR2xvYmFsRmlsdGVyXCIgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgYWxsIGNvbHVtbnNcIlxuICAgICAgICAgICAgICBbb2VwYVRhYmxlRmlsdGVyaW5nXT1cInsgZmlsdGVyU3RyaW5nOiAnJyB9XCIgW3RhYmxlSWRdPVwidGFibGVJZFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGlucHV0LXNtXCJcbiAgICAgICAgICAgICAgKHRhYmxlQ2hhbmdlZCk9XCJvbkZpbHRlckNoYW5nZWQoJGV2ZW50KVwiIFtpZF09XCJ0YWJsZUlkKydfRmlsdGVyQWxsQ29sdW1uc0lucHV0J1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbmZpZy5zaG93Um93Q291bnRJbkZvb3RlciAmJiBfZGF0YSAmJiBfZGF0YS5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctc2Vjb25kYXJ5XCI+e3tfZGF0YS5sZW5ndGh9fTwvc3Bhbj4mbmJzcDt0b3RhbCByb3dzXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIEV4cG9ydCBCdXR0b25zIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyIHRleHQtY2VudGVyXCIgKm5nSWY9XCJhbGxvd0VkaXRcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb25maWcuZXhwb3J0VG9FeGNlbCB8fCBjb25maWcuZXhwb3J0VG9IVE1MXCIgY2xhc3M9XCJidG4tZ3JvdXBcIiBkcm9wZG93bj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImV4cG9ydEJ0blwiIGRyb3Bkb3duVG9nZ2xlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgIEV4cG9ydCA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDx1bCBpZD1cImV4cG9ydC1kcm9wZG93blwiICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XG4gICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJjb25maWcuZXhwb3J0VG9FeGNlbFwiIHJvbGU9XCJtZW51aXRlbVwiPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydFRvRXhjZWwoKVwiPkV4cG9ydCB0byBFeGNlbDwvYT48L2xpPlxuICAgICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiY29uZmlnLmV4cG9ydFRvSFRNTFwiIHJvbGU9XCJtZW51aXRlbVwiPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydFRvSFRNTCgpXCI+RXhwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgdG8gSFRNTDwvYT48L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY3VzdG9tQnRuVmlzaWJsZVwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBuZ0NsYXNzPVwie3snYnRuIGJ0bi1wcmltYXJ5IG1lLTEnICsgKHNtYWxsID8gJyBidG4tc20nIDogJycpfX1cIiAoY2xpY2spPVwib25DdXN0b21CdG5DbGljaygpXCJcbiAgICAgICAgICAgICAgW2lkXT1cInRhYmxlSWQrJ19DdXN0b21CdG4nXCIgW2Rpc2FibGVkXT1cIiFjdXN0b21CdG5FbmFibGVkXCI+e3tjdXN0b21CdG5MYWJlbH19PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiY3VzdG9tQnRuVmlzaWJsZTJcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbmdDbGFzcz1cInt7J2J0biBidG4tcHJpbWFyeSBtZS0xJyArIChzbWFsbCA/ICcgYnRuLXNtJyA6ICcnKX19XCIgKGNsaWNrKT1cIm9uQ3VzdG9tQnRuMkNsaWNrKClcIlxuICAgICAgICAgICAgICBbaWRdPVwidGFibGVJZCsnX0N1c3RvbUJ0bidcIiBbZGlzYWJsZWRdPVwiIWN1c3RvbUJ0bkVuYWJsZWQyXCI+e3tjdXN0b21CdG5MYWJlbDJ9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBQYWdpbmF0aW9uIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cIiFjb25maWcuZGlzYWJsZVBhZ2luYXRpb25cIiBjbGFzcz1cImNvbC1zbS01XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICAgICAgICAgIDxwYWdpbmF0aW9uICpuZ0lmPVwicGFnaW5hdGlvbk9uXCIgY2xhc3M9XCJwYWdpbmF0aW9uLXNtXCIgW3RvdGFsSXRlbXNdPVwicGFnZUluZm8ubGVuZ3RoXCJcbiAgICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJwYWdlSW5mby5pdGVtc1BlclBhZ2VcIiBbbWF4U2l6ZV09XCJwYWdlSW5mby5tYXhTaXplXCIgWyhuZ01vZGVsKV09XCJjdXJyZW50UGFnZVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJjdXJyZW50VGFibGVQYWdlXCIgW2JvdW5kYXJ5TGlua3NdPVwidHJ1ZVwiIFtyb3RhdGVdPVwiZmFsc2VcIiAocGFnZUNoYW5nZWQpPVwib25QYWdlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG51bVBhZ2VzKT1cInBhZ2VJbmZvLm51bVBhZ2VzID0gJGV2ZW50XCI+XG4gICAgICAgICAgICA8L3BhZ2luYXRpb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVQYWdpbmdhdGlvbigpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBtZS0xXCI+e3sgcGFnaW5hdGlvbk9uID9cbiAgICAgICAgICAgICAgJ1Nob3cgQWxsIFJvd3MnIDogJ1Jlc3RvcmUgUGFnaW5hdGlvbid9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy5leHBvcnRUb0V4Y2VsIHx8IGNvbmZpZy5leHBvcnRUb0hUTUxcIiBjbGFzcz1cImNvbC1zbS0xMiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8c3Bhbj5FeHBvcnQgb25seSB2aXNpYmxlIGRhdGE6Jm5ic3A7XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImV4cG9ydFZpc2libGVPbmx5XCIgKGNsaWNrKT1cInRvZ2dsZUV4cG9ydFZpc2libGVPbmx5KClcIlxuICAgICAgICAgICAgaWQ9XCJleHBvcnRWaXNpYmxlT25seUNoZWNrYm94XCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvZGl2PiJdfQ==
|
|
837
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicC10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL3RhYmxlL3AtdGFibGUvcC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL3RhYmxlL3AtdGFibGUvcC10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUF3QyxNQUFNLGVBQWUsQ0FBQztBQXFCN0csT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVMvQixNQUFNLE9BQU8sZUFBZTtJQTJKQztJQUNqQjtJQUNBO0lBQ0E7SUFDQTtJQTlKSCxhQUFhLEdBQVksS0FBSyxDQUFDO0lBQy9CLFVBQVUsR0FBMkIsRUFBRSxDQUFDO0lBQ3hDLElBQUksR0FBd0IsRUFBRSxDQUFDO0lBQy9CLGtCQUFrQixHQUFHLENBQUMsQ0FBQztJQUN2QixjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLGlCQUFpQixHQUF3QixLQUFLLENBQUM7SUFDL0MsZ0JBQWdCLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7SUFFNUQsV0FBVyxHQUEyQixFQUFFLENBQUM7SUFDekMsY0FBYyxHQUEyQixFQUFFLENBQUM7SUFDNUMsYUFBYSxHQUEyQixFQUFFLENBQUM7SUFDM0MsYUFBYSxHQUFrQixFQUFFLENBQUM7SUFDbEMsS0FBSyxHQUF3QixFQUFFLENBQUM7SUFDL0IsT0FBTyxHQUFvQixFQUFFLENBQUM7SUFDOUIsY0FBYyxHQUEyQixDQUFDO1lBQ2hELFlBQVksRUFBRSxFQUFFO1lBQ2hCLFFBQVEsRUFBRSxTQUFTO1NBQ3BCLENBQUMsQ0FBQztJQUVJLGNBQWMsR0FB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a3JTQWdLTTs7NEZEbElPLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0UsY0FBYzt3TUF1Q2YsT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUssTUFBTTtzQkFEaEIsS0FBSztnQkFvQkssYUFBYTtzQkFEdkIsS0FBSztnQkFjSyxNQUFNO3NCQURoQixLQUFLO2dCQVdHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsS0FBSztzQkFBYixLQUFLO2dCQUdXLFdBQVc7c0JBQTNCLE1BQU07Z0JBQ1UsYUFBYTtzQkFBN0IsTUFBTTtnQkFDVSxXQUFXO3NCQUEzQixNQUFNO2dCQUNVLGdCQUFnQjtzQkFBaEMsTUFBTTtnQkFDVSxpQkFBaUI7c0JBQWpDLE1BQU07Z0JBb0NJLElBQUk7c0JBRGQsS0FBSztnQkF1QkcsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBPbkluaXQsIEVsZW1lbnRSZWYsIEFmdGVyVmlld0NoZWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgT2VwYVRhYmxlIH0gZnJvbSAnLi4vb2VwYS10YWJsZSc7XG5pbXBvcnQgeyBPZXBhVGFibGVDb25maWcgfSBmcm9tICcuLi9vZXBhLXRhYmxlLWNvbmZpZyc7XG5pbXBvcnQgeyBPZXBhVGFibGVIZWFkZXIgfSBmcm9tICcuLi9vZXBhLXRhYmxlLWhlYWRlcic7XG5pbXBvcnQgeyBPZXBhVGFibGVDb2x1bW4gfSBmcm9tICcuLi9vZXBhLXRhYmxlLWNvbHVtbic7XG5pbXBvcnQgeyBPZXBhVGFibGVSb3cgfSBmcm9tICcuLi9vZXBhLXRhYmxlLXJvdyc7XG5pbXBvcnQgeyBPZXBhVGFibGVDZWxsIH0gZnJvbSAnLi4vb2VwYS10YWJsZS1jZWxsJztcbmltcG9ydCB7IE9lcGFUYWJsZVBhZ2VJbmZvIH0gZnJvbSAnLi4vb2VwYS10YWJsZS1wYWdlLWluZm8nO1xuaW1wb3J0IHsgT2VwYVRhYmxlQ2VsbENsaWNrRXZlbnQgfSBmcm9tICcuLi9vZXBhLXRhYmxlLWNlbGwtY2xpY2stZXZlbnQnO1xuXG5pbXBvcnQgeyBPZXBhQWN0aW9uRXZlbnQgfSBmcm9tICcuLi8uLi9hY3Rpb24tYnRuL29lcGEtYWN0aW9uLWV2ZW50JztcblxuaW1wb3J0IHsgVGFibGVFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vdGFibGUtZXhwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgT2VwYVRlbXBsYXRlSW5mbyB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9lcGFUYWJsZVNvcnRDcml0ZXJpb24gfSBmcm9tICcuLi9vZXBhLXRhYmxlLXNvcnQtY3JpdGVyaW9uJztcbmltcG9ydCB7IFBhZ2VDaGFuZ2VkRXZlbnQgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgT2VwYVBDb2x1bW4gfSBmcm9tICcuLi9vZXBhLXAtY29sdW1uJztcbmltcG9ydCB7IFRhYmxlRGF0YUNlbGxDbGlja0V2ZW50IH0gZnJvbSAnLi4vdGFibGUtZGF0YS1jZWxsL3RhYmxlLWRhdGEtY2VsbC1jbGljay1ldmVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPZXBhVGFibGVGaWx0ZXIgfSBmcm9tICcuLi9vZXBhLXRhYmxlLWZpbHRlcic7XG5pbXBvcnQgeyBPZXBhRmlsZVV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vb2VwYS1maWxlLXV0aWxzL29lcGEtZmlsZS11dGlsLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvZXBhLXAtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vcC10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3AtdGFibGUuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCB7XG4gIHB1YmxpYyBzaG93RmlsdGVyUm93OiBCb29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBoZWFkZXJSb3dzOiBBcnJheTxPZXBhVGFibGVIZWFkZXI+ID0gW107XG4gIHB1YmxpYyByb3dzOiBBcnJheTxPZXBhVGFibGVSb3c+ID0gW107XG4gIHB1YmxpYyB2aXNpYmxlQ29sdW1uQ291bnQgPSAwO1xuICBwdWJsaWMgYWxsQ29sdW1uQ291bnQgPSAwO1xuICBwdWJsaWMgZXhwb3J0VmlzaWJsZU9ubHk6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcbiAgcHVibGljIG5vRmlsdGVyc1N1YmplY3Q6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIHB1YmxpYyBkYXRhQ29sdW1uczogQXJyYXk8T2VwYVRhYmxlQ29sdW1uPiA9IFtdO1xuICBwdWJsaWMgdmlzaWJsZUNvbHVtbnM6IEFycmF5PE9lcGFUYWJsZUNvbHVtbj4gPSBbXTtcbiAgcHVibGljIGhpZGRlbkNvbHVtbnM6IEFycmF5PE9lcGFUYWJsZUNvbHVtbj4gPSBbXTtcbiAgcHVibGljIGNvbHVtbkhlYWRlcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcHVibGljIF9kYXRhOiBBcnJheTxPZXBhVGFibGVSb3c+ID0gW107XG4gIHByaXZhdGUgX2NvbmZpZzogT2VwYVRhYmxlQ29uZmlnID0ge307XG4gIHByaXZhdGUgY3VycmVudEZpbHRlcnM6IEFycmF5PE9lcGFUYWJsZUZpbHRlcj4gPSBbe1xuICAgIGZpbHRlclN0cmluZzogJycsXG4gICAgY29sdW1uSWQ6IHVuZGVmaW5lZFxuICB9XTtcblxuICBwdWJsaWMgZGF0YUhhc0RldGFpbHMgPSBmYWxzZTtcbiAgcHVibGljIHNob3dBbGxEZXRhaWxzID0gZmFsc2U7XG5cbiAgcHVibGljIGFsbFJvd3NTZWxlY3RlZCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBwYWdlSW5mbzogT2VwYVRhYmxlUGFnZUluZm8gPSB7XG4gICAgcGFnZTogMSxcbiAgICBpdGVtc1BlclBhZ2U6IDEwLFxuICAgIG1heFNpemU6IDUsXG4gICAgbnVtUGFnZXM6IDEsXG4gICAgbGVuZ3RoOiAwXG4gIH07XG4gIHB1YmxpYyBjdXJyZW50UGFnZSA9IDE7XG4gIHB1YmxpYyBwYWdpbmF0aW9uT24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpIHRhYmxlSWQgPSAnJztcbiAgQElucHV0KCkgYWxsb3dFZGl0ID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgcHVibGljIHNldCBjb25maWcoY29uZjogT2VwYVRhYmxlQ29uZmlnKSB7XG4gICAgaWYgKCFjb25mLmNsYXNzTmFtZSkge1xuICAgICAgY29uZi5jbGFzc05hbWUgPSAndGFibGUtc3RyaXBlZCB0YWJsZS1ib3JkZXJlZCc7XG4gICAgfVxuICAgIGlmIChjb25mLmNsYXNzTmFtZXMpIHtcbiAgICAgIGNvbmYuY2xhc3NOYW1lID0gY29uZi5jbGFzc05hbWVzLmpvaW4oJyAnKTtcbiAgICB9XG4gICAgaWYgKGNvbmYucm93c1BlclBhZ2UpIHtcbiAgICAgIHRoaXMucGFnZUluZm8uaXRlbXNQZXJQYWdlID0gY29uZi5yb3dzUGVyUGFnZTtcbiAgICB9XG4gICAgdGhpcy5leHBvcnRWaXNpYmxlT25seSA9IGNvbmYuZXhwb3J0VmlzaWJsZU9ubHk7XG4gICAgdGhpcy5fY29uZmlnID0gY29uZjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCk6IE9lcGFUYWJsZUNvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZztcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY29tcGxleEhlYWRlcihoZHJzOiBBcnJheTxPZXBhVGFibGVIZWFkZXI+KSB7XG4gICAgdGhpcy5yZXNldEhlYWRlcnMoKTtcbiAgICBpZiAoaGRycyAmJiBoZHJzLmxlbmd0aCkge1xuICAgICAgaGRycy5mb3JFYWNoKChoZHI6IE9lcGFUYWJsZUhlYWRlcikgPT4ge1xuICAgICAgICB0aGlzLmhlYWRlclJvd3MucHVzaCh0aGlzLmV4dHJhY3RJbm5lckNvbHVtbnMoaGRyLmNvbHVtbnMpKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb2x1bW5IZWFkZXJzID0gdGhpcy5leHRyYWN0Q29sdW1uSGVhZGVycyh0aGlzLmhlYWRlclJvd3MpO1xuICAgICAgdGhpcy5kYXRhQ29sdW1ucyA9IHRoaXMuZXh0cmFjdERhdGFDb2x1bW5zKHRoaXMuaGVhZGVyUm93cyk7XG4gICAgICB0aGlzLmluaXRpYWxpemVIaWRkZW5Db2x1bW5zKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaGVhZGVyKGhkcjogT2VwYVRhYmxlSGVhZGVyKSB7XG4gICAgdGhpcy5yZXNldEhlYWRlcnMoKTtcbiAgICBpZiAoaGRyLmNvbHVtbnMgJiYgaGRyLmNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5oZWFkZXJSb3dzLnB1c2godGhpcy5leHRyYWN0SW5uZXJDb2x1bW5zKGhkci5jb2x1bW5zKSk7XG4gICAgfVxuICAgIHRoaXMuY29sdW1uSGVhZGVycyA9IHRoaXMuZXh0cmFjdENvbHVtbkhlYWRlcnModGhpcy5oZWFkZXJSb3dzKTtcbiAgICB0aGlzLmRhdGFDb2x1bW5zID0gdGhpcy5leHRyYWN0RGF0YUNvbHVtbnModGhpcy5oZWFkZXJSb3dzKTtcbiAgICB0aGlzLmluaXRpYWxpemVIaWRkZW5Db2x1bW5zKGZhbHNlKTtcbiAgfVxuXG4gIEBJbnB1dCgpIGN1c3RvbUJ0bkxhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGN1c3RvbUJ0blZpc2libGUgPSBmYWxzZTtcbiAgQElucHV0KCkgY3VzdG9tQnRuRW5hYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGN1c3RvbUJ0bkxhYmVsMjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBASW5wdXQoKSBjdXN0b21CdG5WaXNpYmxlMiA9IGZhbHNlO1xuICBASW5wdXQoKSBjdXN0b21CdG5FbmFibGVkMiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNtYWxsID0gZmFsc2U7XG5cbiAgLy8gT3V0cHV0cyAoRXZlbnRzKVxuICBAT3V0cHV0KCkgcHVibGljIGNlbGxDbGlja2VkOiBFdmVudEVtaXR0ZXI8T2VwYVRhYmxlQ2VsbENsaWNrRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIGFjdGlvbkNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxPZXBhQWN0aW9uRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJvd1NlbGVjdGVkOiBFdmVudEVtaXR0ZXI8QXJyYXk8T2VwYVRhYmxlUm93Pj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY3VzdG9tQnRuQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIGN1c3RvbUJ0bjJDbGlja2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHBDb2x1bW5zOiBPZXBhUENvbHVtbltdID0gW107XG5cbiAgcHJpdmF0ZSByZXNldEhlYWRlcnMoKSB7XG4gICAgdGhpcy5oZWFkZXJSb3dzID0gW107XG4gICAgdGhpcy5jb2x1bW5IZWFkZXJzID0gW107XG4gICAgdGhpcy5kYXRhQ29sdW1ucyA9IFtdO1xuICAgIHRoaXMuaGlkZGVuQ29sdW1ucyA9IFtdO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSBbXTtcbiAgICB0aGlzLnBDb2x1bW5zID0gW107XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVIaWRkZW5Db2x1bW5zKGNvbXBsZXhIZWFkZXI6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnZpc2libGVDb2x1bW5Db3VudCA9IDA7XG4gICAgdGhpcy5hbGxDb2x1bW5Db3VudCA9IDA7XG4gICAgdGhpcy5kYXRhQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgIGNvbHVtbi5maWVsZCA9IGNvbHVtbi5pZDtcbiAgICAgIGNvbHVtbi5oZWFkZXIgPSBjb2x1bW4udGl0bGU7XG4gICAgICBpZiAoY29tcGxleEhlYWRlciAmJiAoY29sdW1uPy5oaWRkZW4gPT09IHRydWUgfHwgY29sdW1uPy5oaWRkZW4gPT09IGZhbHNlKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdkaXNhYmxpbmcgaGlkZGVuIGF0dHJpYnV0ZSBmb3IgY29sdW1uOiAnICsgY29sdW1uLmlkICtcbiAgICAgICAgICAnLiBIaWRkZW4gY29sdW1ucyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgY29tcGxleCBoZWFkZXJzICh5ZXQpLicpO1xuICAgICAgICBjb2x1bW4uaGlkZGVuID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5Db3VudCsrO1xuICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uPy5oaWRkZW4gPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5oaWRkZW5Db2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5Db3VudCsrO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGxDb2x1bW5Db3VudCsrO1xuICAgIH0pO1xuICB9XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkYXRhKHZhbHVlczogQXJyYXk8T2VwYVRhYmxlUm93Pikge1xuICAgIGlmICghdGhpcy5fZGF0YSB8fCB0aGlzLl9kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fZGF0YSA9IHRoaXMudGFibGVTZXJ2aWNlLmdldERhdGEodGhpcy50YWJsZUlkKSB8fCBbXTtcbiAgICB9XG4gICAgaWYgKHZhbHVlcykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsdWVzW2ldLnByaXZhdGVJZCA9IGk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxlbmd0aCAhPT0gdmFsdWVzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnRhYmxlU2VydmljZS5jbGVhclBhZ2VJbmZvKHRoaXMudGFibGVJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZGF0YSA9IHZhbHVlcztcbiAgICB0aGlzLnRhYmxlU2VydmljZS5zZXREYXRhKHRoaXMudGFibGVJZCwgdGhpcy5fZGF0YSk7XG4gICAgdGhpcy51cGRhdGVUYWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBkYXRhKCk6IEFycmF5PE9lcGFUYWJsZVJvdz4ge1xuICAgIHJldHVybiB0aGlzLl9kYXRhLm1hcCh4ID0+IE9iamVjdC5hc3NpZ24oe30sIHgpKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHRvdGFsUm93OiBPZXBhVGFibGVSb3cgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSB0YWJsZVNlcnZpY2U6IFRhYmxlU2VydmljZSxcbiAgICBwcml2YXRlIHRhYmxlRXhwb3J0U2VydmljZTogVGFibGVFeHBvcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlsZVV0aWxTZXJ2aWNlOiBPZXBhRmlsZVV0aWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGFnaW5hdGlvbk9uID0gIXRoaXMuX2NvbmZpZy5kaXNhYmxlUGFnaW5hdGlvbjtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcuY2xhc3NOYW1lICE9PSAnJykge1xuICAgICAgJCgndGFibGUnKS5hZGRDbGFzcygndGFibGUgJyArIHRoaXMuY29uZmlnLmNsYXNzTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0SW5uZXJDb2x1bW5zKGlubmVyOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+KTogT2VwYVRhYmxlSGVhZGVyIHtcbiAgICBjb25zdCBoZWFkZXI6IE9lcGFUYWJsZUhlYWRlciA9IHsgY29sdW1uczogW10gfTtcbiAgICBpbm5lci5mb3JFYWNoKCh2YWx1ZTogT2VwYVRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBoZWFkZXIuY29sdW1ucy5maW5kKChjb2w6IE9lcGFUYWJsZUNvbHVtbikgPT4gY29sLmlkID09PSB2YWx1ZS5pZCk7XG4gICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgIC8vIG92ZXJ3cml0ZSByZXBlYXRlZCBjb2x1bW5cbiAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgIGhlYWRlci5jb2x1bW5zLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoZWFkZXI7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RDb2x1bW5IZWFkZXJzKGhlYWRlclJvd3M6IEFycmF5PE9lcGFUYWJsZUhlYWRlcj4pOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCBoZWFkZXJzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgbGV0IHJvd0luZGV4ID0gMDtcbiAgICBjb25zdCBjaGlsZENvbHVtbnM6IGFueSA9IHt9O1xuICAgIGhlYWRlclJvd3MuZm9yRWFjaCgoaGRyOiBPZXBhVGFibGVIZWFkZXIpID0+IHtcbiAgICAgIGxldCBjb2xJbmRleCA9IDA7XG4gICAgICBoZHIuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IE9lcGFUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgICBpZiAocm93SW5kZXggPT09IDApIHtcbiAgICAgICAgICBoZWFkZXJzLnB1c2goY29sdW1uLnRpdGxlKTtcbiAgICAgICAgICBpZiAoY29sdW1uLmNvbHNwYW4pIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNvdW50ID0gMTsgY291bnQgPCBjb2x1bW4uY29sc3BhbjsgY291bnQrKykge1xuICAgICAgICAgICAgICBoZWFkZXJzLnB1c2goJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29sdW1uLnJvd3NwYW4pIHtcbiAgICAgICAgICAgIGNoaWxkQ29sdW1uc1tjb2xJbmRleF0gPSBjb2x1bW4ucm93c3BhbiAtIDE7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdoaWxlIChjaGlsZENvbHVtbnNbY29sSW5kZXhdICYmIGNoaWxkQ29sdW1uc1tjb2xJbmRleF0gPiAwKSB7XG4gICAgICAgICAgICBjaGlsZENvbHVtbnNbY29sSW5kZXhdLS07XG4gICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoZWFkZXJzW2NvbEluZGV4XSArPSAnICcgKyBjb2x1bW4udGl0bGU7XG4gICAgICAgICAgaWYgKGNvbHVtbi5jb2xzcGFuKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBjb3VudCA9IDE7IGNvdW50IDwgY29sdW1uLmNvbHNwYW47IGNvdW50KyspIHtcbiAgICAgICAgICAgICAgY29sSW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29sSW5kZXgrKztcbiAgICAgIH0pO1xuICAgICAgcm93SW5kZXgrKztcbiAgICB9KTtcbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG5cbiAgcHJpdmF0ZSBleHRyYWN0RGF0YUNvbHVtbnMoaGVhZGVyUm93czogQXJyYXk8T2VwYVRhYmxlSGVhZGVyPik6IEFycmF5PE9lcGFUYWJsZUNvbHVtbj4ge1xuICAgIGNvbnN0IGRhdGFDb2x1bW5zOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+ID0gW107XG4gICAgbGV0IHJvd0luZGV4ID0gMDtcbiAgICBjb25zdCBjaGlsZENvbHVtbnM6YW55ID0ge307XG4gICAgaGVhZGVyUm93cy5mb3JFYWNoKChoZHI6IE9lcGFUYWJsZUhlYWRlcikgPT4ge1xuICAgICAgbGV0IGNvbEluZGV4ID0gMDtcbiAgICAgIGhkci5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogT2VwYVRhYmxlQ29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChyb3dJbmRleCA9PT0gMCkge1xuICAgICAgICAgIGlmIChjb2x1bW4uY29sc3BhbiAmJiBjb2x1bW4uY29sc3BhbiA+IDEpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGNvdW50ID0gMDsgY291bnQgPCBjb2x1bW4uY29sc3BhbjsgY291bnQrKykge1xuICAgICAgICAgICAgICBkYXRhQ29sdW1ucy5wdXNoKHtpZDogJycsdGl0bGU6ICcnfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xJbmRleCArPSAoY29sdW1uLmNvbHNwYW4gLSAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YUNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5yb3dzcGFuKSB7XG4gICAgICAgICAgICAgIGNoaWxkQ29sdW1uc1tjb2xJbmRleF0gPSBjb2x1bW4ucm93c3BhbiAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdoaWxlIChjaGlsZENvbHVtbnNbY29sSW5kZXhdICYmIGNoaWxkQ29sdW1uc1tjb2xJbmRleF0gPiAwKSB7XG4gICAgICAgICAgICBjaGlsZENvbHVtbnNbY29sSW5kZXhdLS07XG4gICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29sdW1uLmNvbHNwYW4gJiYgY29sdW1uLmNvbHNwYW4gPiAxKSB7XG4gICAgICAgICAgICBjb2xJbmRleCArPSAoY29sdW1uLmNvbHNwYW4gLSAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YUNvbHVtbnNbY29sSW5kZXhdID0gY29sdW1uO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgfSk7XG4gICAgICByb3dJbmRleCsrO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhQ29sdW1ucztcbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGl6ZShodG1sOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRvIHNlZSBpZiBhbnkgZmlsdGVycyBhcmUgc2V0XG4gICAqL1xuICBwdWJsaWMgbm9GaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIGxldCBub0ZpbHRlcnMgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudEZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgaWYgKGZpbHRlci5maWx0ZXJTdHJpbmcgJiYgZmlsdGVyLmZpbHRlclN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5vRmlsdGVycyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubm9GaWx0ZXJzU3ViamVjdC5uZXh0KG5vRmlsdGVycyk7XG4gICAgcmV0dXJuIG5vRmlsdGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgZ2xvYmFsIGZpbHRlciBzdHJpbmcgKGlmIGFueSkgYXMgYSBSZWdFeHBcbiAgICovXG4gIHByaXZhdGUgZ2V0R2xvYmFsRmlsdGVyKCk6IFJlZ0V4cCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlZ0V4cDogUmVnRXhwIHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudEZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgaWYgKCFmaWx0ZXIuY29sdW1uSWQgJiYgZmlsdGVyLmZpbHRlclN0cmluZyAmJiBmaWx0ZXIuZmlsdGVyU3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVnRXhwID0gbmV3IFJlZ0V4cChmaWx0ZXIuZmlsdGVyU3RyaW5nLCAnaScpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZWdFeHA7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgdGhlIGZpbHRlciBmb3IgdGhlIHNwZWNpZmllZCBjb2x1bW4gKGlmIGFueSkgYXMgYSBSZWdFeHAuXG4gICAqIEBwYXJhbSBjb2x1bW5JZFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJGb3JDb2x1bW4oY29sdW1uSWQ6IHN0cmluZyk6IFJlZ0V4cCB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlZ0V4cDogUmVnRXhwIHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuY3VycmVudEZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgaWYgKGZpbHRlci5jb2x1bW5JZCA9PT0gY29sdW1uSWQgJiYgZmlsdGVyLmZpbHRlclN0cmluZyAmJiBmaWx0ZXIuZmlsdGVyU3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVnRXhwID0gbmV3IFJlZ0V4cChmaWx0ZXIuZmlsdGVyU3RyaW5nLCAnaScpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZWdFeHA7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVyIHRoZSB0YWJsZSBkYXRhIHByb3ZpZGVkIGJ5IHRoZSBnbG9iYWwgb3IgY29sdW1uLXNwZWNpZmljXG4gICAqIGZpbHRlcnMgc2V0IGluIHRoZSBVSS5cbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHByaXZhdGUgZmlsdGVyRGF0YShkYXRhOiBBcnJheTxPZXBhVGFibGVSb3c+KTogQXJyYXk8T2VwYVRhYmxlUm93PiB7XG4gICAgLy8gZG9uJ3QgYXR0ZW1wdCBmaWx0ZXJpbmcgaWYgdGhlcmUgYXJlIG5vIGZpbHRlcnMgc2V0XG4gICAgaWYgKHRoaXMubm9GaWx0ZXJzKCkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBsZXQgZmlsdGVyZWREYXRhOiBBcnJheTxPZXBhVGFibGVSb3c+ID0gZGF0YTtcbiAgICBjb25zdCB0ZW1wQXJyYXk6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgICBmaWx0ZXJlZERhdGEuZm9yRWFjaCgocm93OiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgIGxldCBmbGFnID0gdGhpcy5maWx0ZXJCeUNvbHVtbkZpbHRlcnMocm93KTtcbiAgICAgIGlmIChmbGFnKSB7XG4gICAgICAgIGZsYWcgPSB0aGlzLmZpbHRlckJ5R2xvYmFsRmlsdGVyKHJvdyk7XG4gICAgICB9XG4gICAgICBpZiAoZmxhZyB8fCByb3cuaXNEaXZpZGVyKSB7XG4gICAgICAgIHRlbXBBcnJheS5wdXNoKHJvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZmlsdGVyZWREYXRhID0gdGVtcEFycmF5O1xuICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XG4gIH1cblxuICAvKipcbiAgICogVGVzdCBpZiByb3cgbWF0Y2hlcyBhbnkgb2YgdGhlIGNvbHVtbm4gZmlsdGVycyB0aGF0IG1heSBiZSBzZXQuXG4gICAqIEBwYXJhbSByb3dcbiAgICovXG4gIHByaXZhdGUgZmlsdGVyQnlDb2x1bW5GaWx0ZXJzKHJvdzogT2VwYVRhYmxlUm93KTogYm9vbGVhbiB7XG4gICAgbGV0IGZsYWcgPSB0cnVlO1xuICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsOiBPZXBhVGFibGVDZWxsKSA9PiB7XG4gICAgICBjb25zdCByZWdFeHAgPSB0aGlzLmdldEZpbHRlckZvckNvbHVtbihjZWxsLmlkKTtcbiAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gY2VsbC5maWx0ZXJWYWx1ZSB8fCBjZWxsLnZhbHVlIHx8ICcnO1xuICAgICAgaWYgKHJlZ0V4cCAmJiBmaWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGZpbHRlclZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGZpbHRlclZhbHVlLnRvU3RyaW5nKCkubWF0Y2gocmVnRXhwKTtcbiAgICAgICAgZmxhZyA9IGZsYWcgJiYgKHJlc3VsdCAhPT0gbnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZsYWc7XG4gIH1cblxuICAvKipcbiAgICogVGVzdCBpZiByb3cgbWF0Y2hlcyB0aGUgZ2xvYmFsIGZpbHRlclxuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBwcml2YXRlIGZpbHRlckJ5R2xvYmFsRmlsdGVyKHJvdzogT2VwYVRhYmxlUm93KTogYm9vbGVhbiB7XG4gICAgbGV0IGZsYWcgPSB0cnVlO1xuICAgIGNvbnN0IHJlZ0V4cCA9IHRoaXMuZ2V0R2xvYmFsRmlsdGVyKCk7XG4gICAgaWYgKHJlZ0V4cCkge1xuICAgICAgZmxhZyA9IGZhbHNlO1xuICAgICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGw6IE9lcGFUYWJsZUNlbGwpID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsdWUgPSBjZWxsLmZpbHRlclZhbHVlIHx8IGNlbGwudmFsdWU7XG4gICAgICAgIGlmIChmaWx0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGZpbHRlclZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZmlsdGVyVmFsdWUudG9TdHJpbmcoKS5tYXRjaChyZWdFeHApO1xuICAgICAgICAgIGZsYWcgPSBmbGFnIHx8IChyZXN1bHQgIT09IG51bGwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZsYWc7XG4gIH1cblxuICBwdWJsaWMgaGlkZUNvbHVtbihjb2x1bW46IE9lcGFUYWJsZUNvbHVtbikge1xuICAgIHRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgdGhpcy52aXNpYmxlQ29sdW1ucyA9IHRoaXMudmlzaWJsZUNvbHVtbnMuZmlsdGVyKG1hdGNoID0+IHtcbiAgICAgIHJldHVybiBtYXRjaC5pZCAhPT0gY29sdW1uLmlkO1xuICAgIH0pO1xuICAgIGNvbHVtbi5oaWRkZW4gPSB0cnVlO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbkNvdW50LS07XG4gIH1cblxuICBwdWJsaWMgdW5oaWRlQ29sdW1uKGNvbHVtbklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBoaWRkZW5Db2xzOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+ID0gW107XG4gICAgdGhpcy5oaWRkZW5Db2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgaWYgKGNvbC5pZCAhPT0gY29sdW1uSWQpIHtcbiAgICAgICAgaGlkZGVuQ29scy5wdXNoKGNvbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2wuaGlkZGVuID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbGV0IHZpc2libGVDb2xzOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+ID0gW107XG4gICAgdGhpcy5kYXRhQ29sdW1ucy5mb3JFYWNoKGRhdGFDb2x1bW4gPT4ge1xuICAgICAgbGV0IGtlZXAgPSB0cnVlO1xuICAgICAgaGlkZGVuQ29scy5mb3JFYWNoKGhpZGRlbkNvbHVtbiA9PiB7XG4gICAgICAgIGlmIChkYXRhQ29sdW1uLmlkID09PSBoaWRkZW5Db2x1bW4uaWQpIHtcbiAgICAgICAgICBrZWVwID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGtlZXApIHtcbiAgICAgICAgdmlzaWJsZUNvbHMucHVzaChkYXRhQ29sdW1uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmhpZGRlbkNvbHVtbnMgPSBoaWRkZW5Db2xzO1xuICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSB2aXNpYmxlQ29scztcbiAgICB0aGlzLnZpc2libGVDb2x1bW5Db3VudCsrO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0RGF0YShkYXRhOiBBcnJheTxPZXBhVGFibGVSb3c+KTogQXJyYXk8T2VwYVRhYmxlUm93PiB7XG4gICAgbGV0IHNvcnRDcml0ZXJpYTogYW55ID0gdGhpcy50YWJsZVNlcnZpY2UuZ2V0U29ydENyaXRlcmlhKHRoaXMudGFibGVJZCkgfHwgW107XG4gICAgaWYgKHNvcnRDcml0ZXJpYS5sZW5ndGggPT0gMCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNldENvbHVtblNvcnRJbmRleGVzKHNvcnRDcml0ZXJpYSk7XG5cbiAgICByZXR1cm4gZGF0YS5zb3J0KChwcmV2aW91czogT2VwYVRhYmxlUm93LCBjdXJyZW50OiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgIGxldCBzb3J0SW5kZXggPSAwO1xuICAgICAgbGV0IHNvcnRSZXN1bHQgPSAwO1xuICAgICAgd2hpbGUgKHNvcnRJbmRleCA8IHNvcnRDcml0ZXJpYS5sZW5ndGggJiYgc29ydFJlc3VsdCA9PT0gMCkge1xuICAgICAgICBsZXQgcHJldiA9IHRoaXMuZ2V0Um93U29ydFZhbHVlKHByZXZpb3VzLCBzb3J0Q3JpdGVyaWFbc29ydEluZGV4XS5jb2x1bW5JZCk7XG4gICAgICAgIGxldCBjdXJyID0gdGhpcy5nZXRSb3dTb3J0VmFsdWUoY3VycmVudCwgc29ydENyaXRlcmlhW3NvcnRJbmRleF0uY29sdW1uSWQpO1xuICAgICAgICBpZiAocHJldiA+IGN1cnIpIHtcbiAgICAgICAgICBzb3J0UmVzdWx0ID0gIChzb3J0Q3JpdGVyaWFbc29ydEluZGV4XS5zb3J0ID09PSAnZGVzYycgPyAtMSA6IDEpO1xuICAgICAgICB9IGVsc2UgaWYgKHByZXYgPCBjdXJyKSB7XG4gICAgICAgICAgc29ydFJlc3VsdCA9ICAoc29ydENyaXRlcmlhW3NvcnRJbmRleF0uc29ydCA9PT0gJ2FzYycgPyAtMSA6IDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNvcnRSZXN1bHQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHNvcnRJbmRleCsrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNvcnRSZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRDb2x1bW5Tb3J0SW5kZXhlcyhzb3J0Q3JpdGVyaWE6IE9lcGFUYWJsZVNvcnRDcml0ZXJpb25bXSkge1xuICAgIGlmIChzb3J0Q3JpdGVyaWEgJiYgc29ydENyaXRlcmlhLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGk9MDsgaTxzb3J0Q3JpdGVyaWEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5kYXRhQ29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbj8uaWQgPT09IHNvcnRDcml0ZXJpYVtpXS5jb2x1bW5JZCkge1xuICAgICAgICAgICAgY29sdW1uLnNvcnRJbmRleCA9IGkgKyAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgZGlzcGxheSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGNlbGwuXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHBhcmFtIGNvbHVtbklkXG4gICAqL1xuICBwdWJsaWMgZ2V0Um93VmFsdWUocm93OiBPZXBhVGFibGVSb3csIGNvbHVtbklkOiBzdHJpbmcpOiBhbnkge1xuICAgIGxldCB2YWx1ZTogYW55O1xuICAgIHJvdy5jZWxscy5mb3JFYWNoKChjZWxsOiBPZXBhVGFibGVDZWxsKSA9PiB7XG4gICAgICBpZiAoY2VsbC5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgdmFsdWUgPSBjZWxsLnZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0NlbGxWYWx1ZUhpZGRlbihyb3c6IE9lcGFUYWJsZVJvdywgY29sdW1uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCBoaWRkZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgICByb3cuY2VsbHMuZm9yRWFjaCgoY2VsbDogT2VwYVRhYmxlQ2VsbCkgPT4ge1xuICAgICAgaWYgKGNlbGwuaWQgPT09IGNvbHVtbklkKSB7XG4gICAgICAgIGhpZGRlbiA9IGNlbGwuaGlkZVZhbHVlIHx8IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoaWRkZW47XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJvdyBSZXRyaWV2ZSB0aGUgc29ydCB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGNlbGwgKHdpbGwgZGVmYXVsdCB0byBkaXNwbGF5IHZhbHVlIGlmIHNvcnRcbiAgICogdmFsdWUgaXMgbm90IHNwZWNpZmllZCkuXG4gICAqIEBwYXJhbSBjb2x1bW5JZFxuICAgKi9cbiAgcHVibGljIGdldFJvd1NvcnRWYWx1ZShyb3c6IE9lcGFUYWJsZVJvdywgY29sdW1uSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgcm93LmNlbGxzLmZvckVhY2goKGNlbGw6IE9lcGFUYWJsZUNlbGwpID0+IHtcbiAgICAgIGlmIChjZWxsLmlkID09PSBjb2x1bW5JZCkge1xuICAgICAgICBpZiAoY2VsbC5zb3J0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiBjZWxsLnNvcnRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhbHVlID0gY2VsbC5zb3J0VmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBjZWxsLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVBhZ2UoZGF0YTogQXJyYXk8T2VwYVRhYmxlUm93PiA9IHRoaXMuZGF0YSk6IEFycmF5PE9lcGFUYWJsZVJvdz4ge1xuICAgIGlmICghdGhpcy5wYWdpbmF0aW9uT24pIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVBhZ2UoKTtcbiAgICBjb25zdCBzdGFydCA9ICh0aGlzLnBhZ2VJbmZvLnBhZ2UgLSAxKSAqIHRoaXMucGFnZUluZm8uaXRlbXNQZXJQYWdlO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMucGFnZUluZm8uaXRlbXNQZXJQYWdlID4gLTEgPyAoc3RhcnQgKyB0aGlzLnBhZ2VJbmZvLml0ZW1zUGVyUGFnZSkgOiBkYXRhLmxlbmd0aDtcbiAgICAvLyBub3Qgc3VyZSB3aHksIGJ1dCBtYXhTaXplIHdhcyBnZXR0aW5nIGxvc3QuIFJlc2V0IGl0IGhlcmUgdG8gcHJldmVudCB3ZWlyZG5lc3MuXG4gICAgdGhpcy5wYWdlSW5mby5tYXhTaXplID0gNTtcbiAgICByZXR1cm4gZGF0YS5zbGljZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVQYWdpbmdhdGlvbigpIHtcbiAgICB0aGlzLnBhZ2luYXRpb25PbiA9ICF0aGlzLnBhZ2luYXRpb25PbjtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgb25GaWx0ZXJDaGFuZ2VkKGZpbHRlcjogT2VwYVRhYmxlRmlsdGVyKSB7XG4gICAgY29uc3QgbWF0Y2hGaWx0ZXIgPSB0aGlzLmN1cnJlbnRGaWx0ZXJzLmZpbmQoKGYpID0+IHtcbiAgICAgIHJldHVybiBmLmNvbHVtbklkID09PSBmaWx0ZXIuY29sdW1uSWQ7XG4gICAgfSk7XG4gICAgaWYgKCFtYXRjaEZpbHRlcikge1xuICAgICAgdGhpcy5jdXJyZW50RmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hdGNoRmlsdGVyLmZpbHRlclN0cmluZyA9IGZpbHRlci5maWx0ZXJTdHJpbmc7XG4gICAgfVxuICAgIC8vIG5lZWQgdG8gY2hlY2sgZm9yIG5vRmlsdGVycyB0byBzZW5kIHN1YmplY3RcbiAgICB0aGlzLm5vRmlsdGVycygpO1xuICAgIHRoaXMudXBkYXRlVGFibGUodHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgb25Tb3J0Q2hhbmdlZChjb2x1bW46IE9lcGFUYWJsZUNvbHVtbikge1xuICAgIHRoaXMudGFibGVTZXJ2aWNlLnNldFNvcnQodGhpcy50YWJsZUlkLCBjb2x1bW4pO1xuICAgIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvblBhZ2VDaGFuZ2VkKHBhZ2VFdmVudDogUGFnZUNoYW5nZWRFdmVudCkge1xuICAgIHRoaXMucGFnZUluZm8gPSB7XG4gICAgICBwYWdlOiBwYWdlRXZlbnQucGFnZSxcbiAgICAgIGl0ZW1zUGVyUGFnZTogcGFnZUV2ZW50Lml0ZW1zUGVyUGFnZSxcbiAgICAgIG1heFNpemU6IHRoaXMucGFnZUluZm8ubWF4U2l6ZSxcbiAgICAgIGxlbmd0aDogdGhpcy5wYWdlSW5mby5sZW5ndGgsXG4gICAgICBudW1QYWdlczogdGhpcy5wYWdlSW5mby5udW1QYWdlc1xuICAgIH1cbiAgICB0aGlzLnRhYmxlU2VydmljZS5zZXRQYWdlKHRoaXMudGFibGVJZCwgcGFnZUV2ZW50LnBhZ2UpO1xuICAgIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFibGUoY2xlYXJTZWxjdGVkUm93czogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgZmlsdGVyZWREYXRhID0gdGhpcy5maWx0ZXJEYXRhKHRoaXMuZGF0YSk7XG4gICAgY29uc3Qgc29ydGVkRGF0YSA9IHRoaXMuc29ydERhdGEoZmlsdGVyZWREYXRhKTtcbiAgICB0aGlzLnJvd3MgPSB0aGlzLmNoYW5nZVBhZ2Uoc29ydGVkRGF0YSk7XG4gICAgdGhpcy5wYWdlSW5mby5sZW5ndGggPSBzb3J0ZWREYXRhLmxlbmd0aDtcbiAgICB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IGZhbHNlO1xuICAgIGlmIChjbGVhclNlbGN0ZWRSb3dzKSB7XG4gICAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQoW10pO1xuICAgIH1cbiAgICB0aGlzLmRhdGFIYXNEZXRhaWxzID0gdGhpcy5jaGVja0ZvckRldGFpbHModGhpcy5yb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGFnZSgpIHtcbiAgICBjb25zdCBzYXZlZFBhZ2VOdW1iZXIgPSB0aGlzLnRhYmxlU2VydmljZS5nZXRQYWdlKHRoaXMudGFibGVJZCk7XG4gICAgaWYgKHNhdmVkUGFnZU51bWJlciAmJiB0aGlzLnBhZ2VJbmZvLnBhZ2UgIT09IHNhdmVkUGFnZU51bWJlcikge1xuICAgICAgdGhpcy5wYWdlSW5mby5wYWdlID0gc2F2ZWRQYWdlTnVtYmVyO1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZUluZm8ucGFnZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrRm9yRGV0YWlscyhkYXRhOiBBcnJheTxPZXBhVGFibGVSb3c+KTogYm9vbGVhbiB7XG4gICAgbGV0IGhhc0RldGFpbHMgPSBmYWxzZTtcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCkge1xuICAgICAgZGF0YS5mb3JFYWNoKChyb3c6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgICBpZiAocm93LnNob3dEZXRhaWwgPT09IHRydWUgfHwgcm93LnNob3dEZXRhaWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgaGFzRGV0YWlscyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaGFzRGV0YWlscztcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVBbGxEZXRhaWxzKCkge1xuICAgIHRoaXMuc2hvd0FsbERldGFpbHMgPSAhdGhpcy5zaG93QWxsRGV0YWlscztcbiAgICBpZiAodGhpcy5fZGF0YSAmJiB0aGlzLl9kYXRhLmxlbmd0aCkge1xuICAgICAgdGhpcy5fZGF0YS5mb3JFYWNoKChyb3c6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgICBpZiAocm93LnNob3dEZXRhaWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJvdy5zaG93RGV0YWlsID0gdGhpcy5zaG93QWxsRGV0YWlscztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVSb3dEZXRhaWwodG9nZ2xlUm93OiBPZXBhVGFibGVSb3cpIHtcbiAgICBpZiAodG9nZ2xlUm93ICYmIHRoaXMuX2RhdGEgJiYgdGhpcy5fZGF0YS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2RhdGEuZm9yRWFjaCgocm93OiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgICAgaWYgKHJvdy5kYXRhU291cmNlID09PSB0b2dnbGVSb3cuZGF0YVNvdXJjZSkge1xuICAgICAgICAgIHJvdy5zaG93RGV0YWlsID0gIXRvZ2dsZVJvdy5zaG93RGV0YWlsO1xuICAgICAgICAgIHRvZ2dsZVJvdy5zaG93RGV0YWlsID0gcm93LnNob3dEZXRhaWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0FjdGlvbkNvbHVtbihjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IGFjdGlvbkNvbHVtbiA9IGZhbHNlO1xuICAgIHRoaXMuaGVhZGVyUm93cy5mb3JFYWNoKChoZHI6IE9lcGFUYWJsZUhlYWRlcikgPT4ge1xuICAgICAgaGRyLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPZXBhVGFibGVDb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpIHtcbiAgICAgICAgICBhY3Rpb25Db2x1bW4gPSBjb2x1bW4uYWN0aW9uQ29sdW1uIHx8IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gYWN0aW9uQ29sdW1uO1xuICB9XG5cbiAgcHVibGljIGlzQ29sdW1uSGlkZGVuKGNvbHVtbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgaGlkZGVuID0gZmFsc2U7XG4gICAgdGhpcy5oZWFkZXJSb3dzLmZvckVhY2goKGhkcjogT2VwYVRhYmxlSGVhZGVyKSA9PiB7XG4gICAgICBoZHIuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IE9lcGFUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmlkID09PSBjb2x1bW5JZCkge1xuICAgICAgICAgIGhpZGRlbiA9IGNvbHVtbi5oaWRkZW4gfHwgZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBoaWRkZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0SGlkZGVuQ29sdW1ucygpOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+IHtcbiAgICBjb25zdCBjb2x1bW5zOiBBcnJheTxPZXBhVGFibGVDb2x1bW4+ID0gW107XG4gICAgdGhpcy5oZWFkZXJSb3dzLmZvckVhY2goKGhkcjogT2VwYVRhYmxlSGVhZGVyKSA9PiB7XG4gICAgICBoZHIuY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IE9lcGFUYWJsZUNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmhpZGRlbikge1xuICAgICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29sdW1ucztcbiAgfVxuXG4gIHB1YmxpYyBjZWxsQ2xpY2soZXZlbnQ6IFRhYmxlRGF0YUNlbGxDbGlja0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgcm93ID0gZXZlbnQucm93O1xuICAgIGNvbnN0IGNvbHVtbklkID0gZXZlbnQuY29sdW1uSUQ7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFJvd1ZhbHVlKHJvdywgY29sdW1uSWQpO1xuICAgIHRoaXMuY2VsbENsaWNrZWQuZW1pdCh7IHJvdywgY29sdW1uSWQsIHZhbHVlIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQWN0aW9uQ2xpY2soZXZlbnQ6IE9lcGFBY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aW9uQ2xpY2tlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVBbGxSb3dzU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93czogQXJyYXk8T2VwYVRhYmxlUm93PiA9IFtdO1xuICAgIHRoaXMuYWxsUm93c1NlbGVjdGVkID0gIXRoaXMuYWxsUm93c1NlbGVjdGVkO1xuICAgIC8vIGRlc2VsZWN0IGFsbCByb3dzXG4gICAgdGhpcy5fZGF0YS5mb3JFYWNoKChyOiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgIHIuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9KTtcbiAgICAvLyBzZWxlY3Qgb25seSB2aXNpYmxlIHJvd3NcbiAgICB0aGlzLnJvd3MuZm9yRWFjaCgocjogT2VwYVRhYmxlUm93KSA9PiB7XG4gICAgICBpZiAoci5zZWxlY3RhYmxlKSB7XG4gICAgICAgIHIuc2VsZWN0ZWQgPSB0aGlzLmFsbFJvd3NTZWxlY3RlZDtcbiAgICAgIH1cbiAgICAgIGlmIChyLnNlbGVjdGVkKSB7XG4gICAgICAgIHNlbGVjdGVkUm93cy5wdXNoKHIpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucm93cy5zbGljZSgpO1xuICAgIC8vIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQoc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBPZXBhVGFibGVSb3cpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3M6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgICByb3cuc2VsZWN0ZWQgPSAhcm93LnNlbGVjdGVkO1xuICAgIHRoaXMuX2RhdGEuZm9yRWFjaCgoZHI6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgaWYgKHJvdy5wcml2YXRlSWQgPT09IGRyLnByaXZhdGVJZCkge1xuICAgICAgICBkci5zZWxlY3RlZCA9IHJvdy5zZWxlY3RlZDtcbiAgICAgIH1cbiAgICAgIGlmIChkci5zZWxlY3RlZCkge1xuICAgICAgICBzZWxlY3RlZFJvd3MucHVzaChkcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQoc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIHB1YmxpYyBzaW5nbGVSb3dTZWxlY3Rpb24ocm93OiBPZXBhVGFibGVSb3cpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3M6IEFycmF5PE9lcGFUYWJsZVJvdz4gPSBbXTtcbiAgICByb3cuc2VsZWN0ZWQgPSAhcm93LnNlbGVjdGVkO1xuICAgIC8vIGFkZCByb3cgdG8gc2VsZWN0ZWQgcm93cyBpZiBpdCBpcyBzZWxlY3RlZFxuICAgIGlmIChyb3cuc2VsZWN0ZWQpIHtcbiAgICAgIHNlbGVjdGVkUm93cy5wdXNoKHJvdyk7XG4gICAgfVxuICAgIC8vIHVuc2VsZWN0IGFueSBvdGhlciByb3cgdGhhdCBtYXkgYmUgc2VsZWN0ZWRcbiAgICB0aGlzLl9kYXRhLmZvckVhY2goKGRyOiBPZXBhVGFibGVSb3cpID0+IHtcbiAgICAgIGlmIChyb3cucHJpdmF0ZUlkID09PSBkci5wcml2YXRlSWQpIHtcbiAgICAgICAgZHIuc2VsZWN0ZWQgPSByb3cuc2VsZWN0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkci5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMudXBkYXRlVGFibGUoKTtcbiAgICB0aGlzLnJvd1NlbGVjdGVkLmVtaXQoc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVJvd3NGb3JFeHBvcnQocm93czogQXJyYXk8T2VwYVRhYmxlUm93Pik6IEFycmF5PE9lcGFUYWJsZVJvdz4ge1xuICAgIGNvbnN0IHJlc3VsdDogQXJyYXk8T2VwYVRhYmxlUm93PiA9IFtdO1xuICAgIC8vIHRoaXMuZHVtcERldGFpbFJvd3MoKTtcbiAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCkge1xuICAgICAgcm93cy5mb3JFYWNoKChyb3c6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgY2VsbHM6IHRoaXMuc2ltcGxpZnlDZWxscyhyb3cuY2VsbHMpLFxuICAgICAgICAgIGFjdGlvbnM6IHJvdy5hY3Rpb25zLFxuICAgICAgICAgIHNob3dEZXRhaWw6IHJvdy5zaG93RGV0YWlsLFxuICAgICAgICAgIHN1YlRhYmxlOiByb3cuZGV0YWlsID8gdGhpcy5jb252ZXJ0VG9UYWJsZShyb3cuZGV0YWlsKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBpc0RpdmlkZXI6IHJvdy5pc0RpdmlkZXIsXG4gICAgICAgICAgZGl2aWRlckNsYXNzTmFtZTogcm93LmRpdmlkZXJDbGFzc05hbWVcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc2ltcGxpZnlDZWxscyhjZWxsczogT2VwYVRhYmxlQ2VsbFtdKSB7XG4gICAgbGV0IHNpbXBsZUNlbGxzOiBPZXBhVGFibGVDZWxsW10gPSBbXTtcbiAgICBpZiAoY2VsbHMgJiYgY2VsbHMubGVuZ3RoID4gMCkge1xuICAgICAgY2VsbHMuZm9yRWFjaChjZWxsID0+IHtcbiAgICAgICAgc2ltcGxlQ2VsbHMucHVzaCh7XG4gICAgICAgICAgaWQ6IGNlbGwuaWQsXG4gICAgICAgICAgdmFsdWU6IGNlbGwudmFsdWUsXG4gICAgICAgICAgaGlkZVZhbHVlOiBjZWxsLmhpZGVWYWx1ZSxcbiAgICAgICAgICBpY29uQ2xhc3NOYW1lOiBjZWxsLmljb25DbGFzc05hbWUsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjZWxsLmNsYXNzTmFtZSxcbiAgICAgICAgICBpbWdTcmM6IGNlbGwuaW1nU3JjLFxuICAgICAgICAgIGlubmVySFRNTDogY2VsbC5pbm5lckhUTUwsXG4gICAgICAgICAgY29sU3BhbjogY2VsbC5jb2xTcGFuLFxuICAgICAgICAgIGV4Y2VsRGF0YUZvcm1hdDogY2VsbC5leGNlbERhdGFGb3JtYXRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHNpbXBsZUNlbGxzO1xuICB9XG5cbiAgcHVibGljIGdhdGhlclRhYmxlRGF0YShyb3dzOiBPZXBhVGFibGVSb3dbXSk6IE9lcGFUYWJsZSB7XG4gICAgLy8gdGhpcy5kdW1wRGV0YWlsUm93cygpO1xuICAgIGNvbnN0IG9lcGFUYWJsZTogT2VwYVRhYmxlID0ge307XG4gICAgb2VwYVRhYmxlLmhlYWRlclJvd3MgPSB0aGlzLmhlYWRlclJvd3M7XG4gICAgb2VwYVRhYmxlLmFsbERhdGFSb3dzID0gdGhpcy5wcmVwYXJlUm93c0ZvckV4cG9ydChyb3dzKTtcbiAgICBvZXBhVGFibGUuc2hvd0FsbERldGFpbHMgPSB0aGlzLnNob3dBbGxEZXRhaWxzO1xuICAgIG9lcGFUYWJsZS5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lO1xuICAgIG9lcGFUYWJsZS52aXNpYmxlQ29sdW1uQ291bnQgPSB0aGlzLnZpc2libGVDb2x1bW5Db3VudDtcbiAgICBvZXBhVGFibGUuYWxsQ29sdW1uQ291bnQgPSB0aGlzLmFsbENvbHVtbkNvdW50O1xuICAgIHJldHVybiBvZXBhVGFibGU7XG4gIH1cblxuICBwcml2YXRlIGR1bXBEZXRhaWxSb3dzKCkge1xuICAgIGNvbnNvbGUubG9nKCdkdW1wRGV0YWlsUm93cyAtIFRvdGFsIHJvd3M6ICcgKyB0aGlzLl9kYXRhLmxlbmd0aCk7XG4gICAgdGhpcy5fZGF0YS5mb3JFYWNoKChyb3c6IE9lcGFUYWJsZVJvdykgPT4ge1xuICAgICAgaWYgKHJvdy5zaG93RGV0YWlsKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdTSE9XIERFVEFJTDogJyArIEpTT04uc3RyaW5naWZ5KHJvdy5kYXRhU291cmNlKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY29udmVydFRvVGFibGUodGVtcGxhdGU6IE9lcGFUZW1wbGF0ZUluZm8pOiBPZXBhVGFibGUgfCB1bmRlZmluZWQge1xuICAgIGxldCBvZXBhVGFibGU6IE9lcGFUYWJsZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGUuY29tcG9uZW50ID09PSBQVGFibGVDb21wb25lbnQpIHtcbiAgICAgIGNvbnN0IHRhYmxlOiBQVGFibGVDb21wb25lbnQgPSBuZXcgUFRhYmxlQ29tcG9uZW50KHRoaXMuc2FuaXRpemVyLCB0aGlzLnRhYmxlU2VydmljZSwgdGhpcy50YWJsZUV4cG9ydFNlcnZpY2UsIHRoaXMuZmlsZVV0aWxTZXJ2aWNlLCB0aGlzLmVsUmVmKTtcbiAgICAgIGlmICh0ZW1wbGF0ZS5pbnB1dHMgJiYgdGVtcGxhdGUuaW5wdXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGVtcGxhdGUuaW5wdXRzLmZvckVhY2goKGlucHV0OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoaW5wdXQubmFtZSA9PT0gJ2NvbmZpZycpIHtcbiAgICAgICAgICAgIHRhYmxlLmNvbmZpZyA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQubmFtZSA9PT0gJ2NvbXBsZXhIZWFkZXInKSB7XG4gICAgICAgICAgICB0YWJsZS5jb21wbGV4SGVhZGVyID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5uYW1lID09PSAnaGVhZGVyJykge1xuICAgICAgICAgICAgdGFibGUuaGVhZGVyID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5uYW1lID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgIHRhYmxlLmRhdGEgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBvZXBhVGFibGUgPSB0YWJsZS5nYXRoZXJUYWJsZURhdGEodGFibGUuZGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZXBhVGFibGU7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRXhwb3J0VmlzaWJsZU9ubHkoKSB7XG4gICAgdGhpcy5leHBvcnRWaXNpYmxlT25seSA9ICF0aGlzLmV4cG9ydFZpc2libGVPbmx5O1xuICB9XG5cbiAgcHVibGljIGV4cG9ydFRvRXhjZWwoKSB7XG4gICAgY29uc3Qgc29ydGVkRGF0YSA9IHRoaXMuc29ydERhdGEodGhpcy5fZGF0YSk7XG4gICAgY29uc3QgZXhwb3J0VGFibGU6IE9lcGFUYWJsZSA9IHRoaXMuZ2F0aGVyVGFibGVEYXRhKHRoaXMuZXhwb3J0VmlzaWJsZU9ubHkgPyB0aGlzLnJvd3MgOiBzb3J0ZWREYXRhKTtcblxuICAgIGlmICgoZXhwb3J0VGFibGUuYWxsRGF0YVJvd3M/Lmxlbmd0aCB8fCAwKSA+IDApIHtcbiAgICAgIHRoaXMudGFibGVFeHBvcnRTZXJ2aWNlLmRvd25sb2FkRXhjZWwoZXhwb3J0VGFibGUsIHRoaXMuX2NvbmZpZykuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZGF0YSA9PiB7XG4gICAgICAgICAgdGhpcy5maWxlVXRpbFNlcnZpY2UuZG93bmxvYWRGaWxlKGRhdGEsICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsZXJ0KCdObyBkYXRhIGluIHRhYmxlIGF2YWlsYWJsZSBmb3IgZXhwb3J0Jyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGV4cG9ydFRvSFRNTCgpIHtcbiAgICBjb25zdCBzb3J0ZWREYXRhID0gdGhpcy5zb3J0RGF0YSh0aGlzLl9kYXRhKTtcbiAgICBjb25zdCBleHBvcnRUYWJsZTogT2VwYVRhYmxlID0gdGhpcy5nYXRoZXJUYWJsZURhdGEodGhpcy5leHBvcnRWaXNpYmxlT25seSA/IHRoaXMucm93cyA6IHNvcnRlZERhdGEpO1xuXG4gICAgaWYgKChleHBvcnRUYWJsZS5hbGxEYXRhUm93cz8ubGVuZ3RoIHx8IDApID4gMCkge1xuICAgICAgLy8gZm9yIG5vdywgYWx3YXlzIGVtYmVkIHN1Yi10YWJsZXMgIGluIEhUTUwgdmlldy5cbiAgICAgIHRoaXMudGFibGVFeHBvcnRTZXJ2aWNlLmRvd25sb2FkSFRNTChleHBvcnRUYWJsZSwgdGhpcy5fY29uZmlnKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBkYXRhID0+IHtcbiAgICAgICAgICB0aGlzLmZpbGVVdGlsU2VydmljZS5kb3dubG9hZEZpbGUoZGF0YSwgJ3RleHQvaHRtbCcpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZXJyb3IgPT4gY29uc29sZS5sb2coZXJyb3IpXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYWxlcnQoJ05vIGRhdGEgaW4gdGFibGUgYXZhaWxhYmxlIGZvciBleHBvcnQnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25DdXN0b21CdG5DbGljaygpIHtcbiAgICB0aGlzLmN1c3RvbUJ0bkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uQ3VzdG9tQnRuMkNsaWNrKCkge1xuICAgIHRoaXMuY3VzdG9tQnRuMkNsaWNrZWQuZW1pdCgpO1xuICB9XG5cbn1cbiIsIjxkaXYgKm5nSWY9XCIhY29uZmlnLmhpZGVUYWJsZVwiPlxuICA8Zm9ybSAqbmdJZj1cImhpZGRlbkNvbHVtbnMubGVuZ3RoID4gMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29sLWZvcm0tbGFiZWxcIj5TaG93IEhpZGRlbiBDb2x1bW5zOjwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cbiAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgKGNoYW5nZSk9XCJ1bmhpZGVDb2x1bW4oJGFueSgkZXZlbnQpLnRhcmdldC52YWx1ZSlcIlxuICAgICAgICAgIFtpZF09XCJ0YWJsZUlkKydfVW5oaWRlQ29sdW1uU2VsZWN0J1wiPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5DaG9vc2UgYSBjb2x1bW48L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjb2wgb2YgaGlkZGVuQ29sdW1uc1wiIFt2YWx1ZV09XCJjb2wuaWRcIj57e2NvbC50aXRsZX19PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cblxuICA8ZGl2IG5nQ2xhc3M9XCJ7e2NvbmZpZy5kaXZDbGFzc05hbWUgfHwgJyd9fVwiPlxuICAgIDxwLXRhYmxlIFtjb2x1bW5zXT1cInZpc2libGVDb2x1bW5zXCIgW3ZhbHVlXT1cInJvd3NcIiBcbiAgICAgIFtzY3JvbGxhYmxlXT1cImNvbmZpZy52ZXJ0aWNhbFNjcm9sbFwiIFtzY3JvbGxIZWlnaHRdPVwiY29uZmlnLnNjcm9sbEhlaWdodFwiXG4gICAgICBbdGFibGVTdHlsZV09XCJ7J21pbi13aWR0aCc6ICc1MHJlbSd9XCI+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCIgbGV0LWNvbHVtbnM+XG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaGRyIG9mIGhlYWRlclJvd3M7IGxldCBocj1pbmRleDtcIiByb2xlPVwicm93XCI+XG4gICAgICAgICAgPHRoICpuZ0lmPVwiZGF0YUhhc0RldGFpbHMgJiYgaHIgPT09IDBcIiBbcm93U3Bhbl09XCJoZWFkZXJSb3dzLmxlbmd0aFwiIGNsYXNzPVwiZGV0YWlsLWluZGljYXRvci1jb2xcIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICA8aSAoY2xpY2spPVwidG9nZ2xlQWxsRGV0YWlscygpXCIgW2lkXT1cInRhYmxlSWQrJ19TaG93QWxsRGV0YWlsc0xpbmsnXCIgY2xhc3M9XCJiaVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydiaS1jaGV2cm9uLWRvd24nOiBzaG93QWxsRGV0YWlscywgJ2JpLWNoZXZyb24tcmlnaHQnOiAhc2hvd0FsbERldGFpbHN9XCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCIoc2hvd0FsbERldGFpbHMgPyAnSGlkZScgOiAnU2hvdycpICsgJyBkZXRhaWxzIGZvciBhbGwgcm93cydcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPlxuICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWNvbCBbbmdGb3JPZl09XCJoZHIuY29sdW1uc1wiIGxldC1pPVwiaW5kZXhcIj5cbiAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFjb2wuaGlkZGVuICYmIGNvbC5mcm96ZW5Db2x1bW5cIiBwRnJvemVuQ29sdW1uIG5nQ2xhc3M9XCJ7e2NvbC5jbGFzc05hbWUgfHwgJyd9fVwiXG4gICAgICAgICAgICAgIFtjb2xTcGFuXT1cImNvbC5jb2xzcGFuIHx8IDFcIiBbcm93U3Bhbl09XCJjb2wucm93c3BhbiB8fCAxXCI+XG4gICAgICAgICAgICAgIDxvZXBhLXRhYmxlLWhlYWRlci1jZWxsIFtjb2x1bW5dPVwiY29sXCIgW3RhYmxlSWRdPVwidGFibGVJZFwiIFthbGxSb3dzU2VsZWN0ZWRdPVwiYWxsUm93c1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbcm93Q291bnRdPVwicm93cy5sZW5ndGhcIiBbbm9GaWx0ZXJzU3ViamVjdF09XCJub0ZpbHRlcnNTdWJqZWN0XCJcbiAgICAgICAgICAgICAgICAob25Ub2dnbGVBbGxSb3dzU2VsZWN0aW9uKT1cInRvZ2dsZUFsbFJvd3NTZWxlY3Rpb24oKVwiIChvblNvcnRDaGFuZ2VkKT1cIm9uU29ydENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uSGlkZUNvbHVtbik9XCJoaWRlQ29sdW1uKCRldmVudClcIiAob25GaWx0ZXJDaGFuZ2VkKT1cIm9uRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDwvb2VwYS10YWJsZS1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGggKm5nSWY9XCIhY29sLmhpZGRlbiAmJiAhY29sLmZyb3plbkNvbHVtblwiIG5nQ2xhc3M9XCJ7e2NvbC5jbGFzc05hbWUgfHwgJyd9fVwiXG4gICAgICAgICAgICAgIFtjb2xTcGFuXT1cImNvbC5jb2xzcGFuIHx8IDFcIiBbcm93U3Bhbl09XCJjb2wucm93c3BhbiB8fCAxXCI+XG4gICAgICAgICAgICAgIDxvZXBhLXRhYmxlLWhlYWRlci1jZWxsIFtjb2x1bW5dPVwiY29sXCIgW3RhYmxlSWRdPVwidGFibGVJZFwiIFthbGxSb3dzU2VsZWN0ZWRdPVwiYWxsUm93c1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbcm93Q291bnRdPVwicm93cy5sZW5ndGhcIiBbbm9GaWx0ZXJzU3ViamVjdF09XCJub0ZpbHRlcnNTdWJqZWN0XCJcbiAgICAgICAgICAgICAgICAob25Ub2dnbGVBbGxSb3dzU2VsZWN0aW9uKT1cInRvZ2dsZUFsbFJvd3NTZWxlY3Rpb24oKVwiIChvblNvcnRDaGFuZ2VkKT1cIm9uU29ydENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uSGlkZUNvbHVtbik9XCJoaWRlQ29sdW1uKCRldmVudClcIiAob25GaWx0ZXJDaGFuZ2VkKT1cIm9uRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDwvb2VwYS10YWJsZS1oZWFkZXItY2VsbD5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3cgbGV0LXI9XCJyb3dJbmRleFwiIGxldC1jb2x1bW5zPVwiY29sdW1uc1wiPlxuICAgICAgICA8IS0tIERhdGEgUm93IC0tPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkICpuZ0lmPVwiZGF0YUhhc0RldGFpbHNcIj5cbiAgICAgICAgICAgIDwhLS0gRGV0YWlsIGljb24gKGlmIHNwZWNpZmllZCkgLS0+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvdy5zaG93RGV0YWlsID09PSB0cnVlIHx8IHJvdy5zaG93RGV0YWlsID09PSBmYWxzZVwiPlxuICAgICAgICAgICAgICA8aSAqbmdJZj1cInJvdy5kZXRhaWxJY29uQ2xhc3NOYW1lXCIgW25nQ2xhc3NdPVwicm93LmRldGFpbEljb25DbGFzc05hbWVcIj48L2k+XG4gICAgICAgICAgICAgIDxpIChjbGljayk9XCJ0b2dnbGVSb3dEZXRhaWwocm93KVwiIFtpZF09XCJ0YWJsZUlkKydfU2hvd0RldGFpbExpbmtfJytyXCIgY2xhc3M9XCJiaVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydiaS1jaGV2cm9uLWRvd24nOiByb3cuc2hvd0RldGFpbCwgJ2JpLWNoZXZyb24tcmlnaHQnOiAhcm93LnNob3dEZXRhaWx9XCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCIocm93LnNob3dEZXRhaWwgPyAnSGlkZScgOiAnU2hvdycpICsgJyBkZXRhaWxzIGZvciB0aGlzIHJvdydcIiBwbGFjZW1lbnQ9XCJyaWdodFwiPlxuICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8IS0tIElmIHJvdyBpcyBhIGRpdmlkZXIsIGl0IHNwYW5zIHRoZSB3aG9sZSB0YWJsZSAtLT5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJyb3cuaXNEaXZpZGVyXCIgW2NvbFNwYW5dPVwidmlzaWJsZUNvbHVtbkNvdW50ICsgKGRhdGFIYXNEZXRhaWxzID8gMSA6IDApXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInJvdy5kaXZpZGVyQ2xhc3NOYW1lIHx8ICdvZXBhLXRhYmxlLWdyYXknXCI+Jm5ic3A7PC90ZD5cbiAgICAgICAgICA8IS0tIERhdGEgUm93cyAtLT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCIhcm93LmlzRGl2aWRlclwiIG5nRm9yIGxldC1jb2wgW25nRm9yT2ZdPVwiZGF0YUNvbHVtbnNcIiBsZXQtaT1cImluZGV4XCI+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCIhY29sLmhpZGRlbiAmJiAocm93fGNlbGxDb2xzcGFuOmNvbCkgPiAwICYmIWNvbC5mcm96ZW5Db2x1bW5cIlxuICAgICAgICAgICAgICBuZ0NsYXNzPVwie3tyb3d8Y2VsbENsYXNzbmFtZTpjb2wgfHwgJyd9fVwiIFtjb2xTcGFuXT1cInJvd3xjZWxsQ29sc3Bhbjpjb2xcIj5cbiAgICAgICAgICAgICAgPG9lcGEtdGFibGUtZGF0YS1jZWxsIFtjb2xdPVwiY29sXCIgW2ldPVwiaVwiIFtyb3ddPVwicm93XCIgW3JdPVwiclwiIFt0YWJsZUlkXT1cInRhYmxlSWRcIlxuICAgICAgICAgICAgICAgIChvbkFjdGlvbkNsaWNrKT1cIm9uQWN0aW9uQ2xpY2soJGV2ZW50KVwiIChvbkNlbGxDbGljayk9XCJjZWxsQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uVG9nZ2xlUm93U2VsZWN0aW9uKT1cInRvZ2dsZVJvd1NlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25TaW5nbGVSb3dTZWxlY3Rpb24pPVwic2luZ2xlUm93U2VsZWN0aW9uKCRldmVudClcIj48L29lcGEtdGFibGUtZGF0YS1jZWxsPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiFjb2wuaGlkZGVuICYmIChyb3d8Y2VsbENvbHNwYW46Y29sKSA+IDAgJiZjb2wuZnJvemVuQ29sdW1uXCIgcEZyb3plbkNvbHVtblxuICAgICAgICAgICAgICBuZ0NsYXNzPVwie3tyb3d8Y2VsbENsYXNzbmFtZTpjb2wgfHwgJyd9fVwiIFtjb2xTcGFuXT1cInJvd3xjZWxsQ29sc3Bhbjpjb2xcIj5cbiAgICAgICAgICAgICAgPG9lcGEtdGFibGUtZGF0YS1jZWxsIFtjb2xdPVwiY29sXCIgW2ldPVwiaVwiIFtyb3ddPVwicm93XCIgW3JdPVwiclwiIFt0YWJsZUlkXT1cInRhYmxlSWRcIlxuICAgICAgICAgICAgICAgIChvbkFjdGlvbkNsaWNrKT1cIm9uQWN0aW9uQ2xpY2soJGV2ZW50KVwiIChvbkNlbGxDbGljayk9XCJjZWxsQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG9uVG9nZ2xlUm93U2VsZWN0aW9uKT1cInRvZ2dsZVJvd1NlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAob25TaW5nbGVSb3dTZWxlY3Rpb24pPVwic2luZ2xlUm93U2VsZWN0aW9uKCRldmVudClcIj48L29lcGEtdGFibGUtZGF0YS1jZWxsPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RyPlxuXG4gICAgICAgIDwhLS0gRGV0YWlsIFJvdyAtLT5cbiAgICAgICAgPHRyICpuZ0lmPVwicm93LnNob3dEZXRhaWxcIiBjbGFzcz1cInRhYmxlLWluZm9cIj5cbiAgICAgICAgICA8dGQgW2NvbFNwYW5dPVwidmlzaWJsZUNvbHVtbkNvdW50ICsgKGRhdGFIYXNEZXRhaWxzID8gMSA6IDApXCI+XG4gICAgICAgICAgICA8Y21sLXRlbXBsYXRlIFt0ZW1wbGF0ZUluZm9dPVwicm93LmRldGFpbFwiPjwvY21sLXRlbXBsYXRlPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC10YWJsZT5cbiAgPC9kaXY+XG4gIDwhLS0gVGFibGUgZm9vdGVyIC0tPlxuICA8Zm9ybSAqbmdJZj1cIiFjb25maWcuaGlkZUZvb3RlciB8fCAoZGF0YSAmJiBwYWdlSW5mby5pdGVtc1BlclBhZ2UgPCBkYXRhLmxlbmd0aClcIiBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgPCEtLSBUYWJsZS13aWRlIGZpbHRlciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIhY29uZmlnLmhpZGVHbG9iYWxGaWx0ZXJcIiBwbGFjZWhvbGRlcj1cIkZpbHRlciBhbGwgY29sdW1uc1wiXG4gICAgICAgICAgICAgIFtvZXBhVGFibGVGaWx0ZXJpbmddPVwieyBmaWx0ZXJTdHJpbmc6ICcnIH1cIiBbdGFibGVJZF09XCJ0YWJsZUlkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtc21cIlxuICAgICAgICAgICAgICAodGFibGVDaGFuZ2VkKT1cIm9uRmlsdGVyQ2hhbmdlZCgkZXZlbnQpXCIgW2lkXT1cInRhYmxlSWQrJ19GaWx0ZXJBbGxDb2x1bW5zSW5wdXQnXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiY29uZmlnLnNob3dSb3dDb3VudEluRm9vdGVyICYmIF9kYXRhICYmIF9kYXRhLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnlcIj57e19kYXRhLmxlbmd0aH19PC9zcGFuPiZuYnNwO3RvdGFsIHJvd3NcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gRXhwb3J0IEJ1dHRvbnMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgdGV4dC1jZW50ZXJcIiAqbmdJZj1cImFsbG93RWRpdFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbmZpZy5leHBvcnRUb0V4Y2VsIHx8IGNvbmZpZy5leHBvcnRUb0hUTUxcIiBjbGFzcz1cImJ0bi1ncm91cFwiIGRyb3Bkb3duPlxuICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiZXhwb3J0QnRuXCIgZHJvcGRvd25Ub2dnbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgRXhwb3J0IDxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPHVsIGlkPVwiZXhwb3J0LWRyb3Bkb3duXCIgKmRyb3Bkb3duTWVudSBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cbiAgICAgICAgICAgICAgICAgIDxsaSAqbmdJZj1cImNvbmZpZy5leHBvcnRUb0V4Y2VsXCIgcm9sZT1cIm1lbnVpdGVtXCI+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0VG9FeGNlbCgpXCI+RXhwb3J0IHRvIEV4Y2VsPC9hPjwvbGk+XG4gICAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCJjb25maWcuZXhwb3J0VG9IVE1MXCIgcm9sZT1cIm1lbnVpdGVtXCI+PGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0VG9IVE1MKClcIj5FeHBvcnRcbiAgICAgICAgICAgICAgICAgICAgICB0byBIVE1MPC9hPjwvbGk+XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjdXN0b21CdG5WaXNpYmxlXCIgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG5nQ2xhc3M9XCJ7eydidG4gYnRuLXByaW1hcnkgbWUtMScgKyAoc21hbGwgPyAnIGJ0bi1zbScgOiAnJyl9fVwiIChjbGljayk9XCJvbkN1c3RvbUJ0bkNsaWNrKClcIlxuICAgICAgICAgICAgICBbaWRdPVwidGFibGVJZCsnX0N1c3RvbUJ0bidcIiBbZGlzYWJsZWRdPVwiIWN1c3RvbUJ0bkVuYWJsZWRcIj57e2N1c3RvbUJ0bkxhYmVsfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjdXN0b21CdG5WaXNpYmxlMlwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBuZ0NsYXNzPVwie3snYnRuIGJ0bi1wcmltYXJ5IG1lLTEnICsgKHNtYWxsID8gJyBidG4tc20nIDogJycpfX1cIiAoY2xpY2spPVwib25DdXN0b21CdG4yQ2xpY2soKVwiXG4gICAgICAgICAgICAgIFtpZF09XCJ0YWJsZUlkKydfQ3VzdG9tQnRuJ1wiIFtkaXNhYmxlZF09XCIhY3VzdG9tQnRuRW5hYmxlZDJcIj57e2N1c3RvbUJ0bkxhYmVsMn19PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIFBhZ2luYXRpb24gLS0+XG4gICAgICA8ZGl2ICpuZ0lmPVwiIWNvbmZpZy5kaXNhYmxlUGFnaW5hdGlvblwiIGNsYXNzPVwiY29sLXNtLTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgICAgICAgICAgPHBhZ2luYXRpb24gKm5nSWY9XCJwYWdpbmF0aW9uT25cIiBjbGFzcz1cInBhZ2luYXRpb24tc21cIiBbdG90YWxJdGVtc109XCJwYWdlSW5mby5sZW5ndGhcIlxuICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cInBhZ2VJbmZvLml0ZW1zUGVyUGFnZVwiIFttYXhTaXplXT1cInBhZ2VJbmZvLm1heFNpemVcIiBbKG5nTW9kZWwpXT1cImN1cnJlbnRQYWdlXCJcbiAgICAgICAgICAgICAgbmFtZT1cImN1cnJlbnRUYWJsZVBhZ2VcIiBbYm91bmRhcnlMaW5rc109XCJ0cnVlXCIgW3JvdGF0ZV09XCJmYWxzZVwiIChwYWdlQ2hhbmdlZCk9XCJvblBhZ2VDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAobnVtUGFnZXMpPVwicGFnZUluZm8ubnVtUGFnZXMgPSAkZXZlbnRcIj5cbiAgICAgICAgICAgIDwvcGFnaW5hdGlvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTNcIj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZVBhZ2luZ2F0aW9uKClcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIG1lLTFcIj57eyBwYWdpbmF0aW9uT24gP1xuICAgICAgICAgICAgICAnU2hvdyBBbGwgUm93cycgOiAnUmVzdG9yZSBQYWdpbmF0aW9uJ319PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnLmV4cG9ydFRvRXhjZWwgfHwgY29uZmlnLmV4cG9ydFRvSFRNTFwiIGNsYXNzPVwiY29sLXNtLTEyIHRleHQtY2VudGVyXCI+XG4gICAgICAgIDxzcGFuPkV4cG9ydCBvbmx5IHZpc2libGUgZGF0YTombmJzcDtcbiAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiZXhwb3J0VmlzaWJsZU9ubHlcIiAoY2xpY2spPVwidG9nZ2xlRXhwb3J0VmlzaWJsZU9ubHkoKVwiXG4gICAgICAgICAgICBpZD1cImV4cG9ydFZpc2libGVPbmx5Q2hlY2tib3hcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9mb3JtPlxuPC9kaXY+Il19
|