verben-ng-ui 1.2.8 → 1.2.10
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/components/data-sort/data-sort.component.mjs +3 -3
- package/esm2022/lib/components/data-table/data-table.component.mjs +5 -5
- package/esm2022/lib/components/data-view/data-view.component.mjs +3 -3
- package/esm2022/lib/components/data-xport/data-xport.component.mjs +12 -8
- package/esm2022/lib/components/data-xport/data-xport.service.mjs +25 -2
- package/esm2022/lib/components/sort-table/sort-table.component.mjs +3 -3
- package/esm2022/lib/components/table-filter/table-filter.component.mjs +2 -2
- package/esm2022/lib/components/visible-column/visible-column.component.mjs +4 -5
- package/fesm2022/verben-ng-ui.mjs +50 -24
- package/fesm2022/verben-ng-ui.mjs.map +1 -1
- package/lib/components/data-xport/data-xport.component.d.ts +1 -0
- package/lib/components/data-xport/data-xport.service.d.ts +1 -0
- package/package.json +1 -1
|
@@ -142,11 +142,11 @@ export class DataSortComponent {
|
|
|
142
142
|
return Array.from(this.selectedSorts.entries()).filter(([columnId]) => this.selectedColumns.has(columnId)).length;
|
|
143
143
|
}
|
|
144
144
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataSortComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
145
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: DataSortComponent, selector: "lib-data-sort", inputs: { columns: "columns", data: "data", enableDragAndDrop: "enableDragAndDrop" }, outputs: { sortApplied: "sortApplied", resetFilter: "resetFilter" }, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Sort <sup>({{ activeSortCount }})</sup>\n </h4>\n <button class=\"reset-button\" (click)=\"resetAll()\">Reset</button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Column Sort Options -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Properties</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n\n <!-- Select All -->\n <div class=\"select-all-wrapper\">\n <label class=\"select-all\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <span>Select All</span>\n </label>\n </div>\n\n @for (column of visibleColumns; track column.id) {\n <div\n class=\"sort-option\"\n [attr.draggable]=\"enableDragAndDrop\"\n (dragstart)=\"onDragStart($index, $event)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($index, $event)\"\n >\n <div class=\"sort-option-header\">\n @if (enableDragAndDrop) {\n <verben-svg\n icon=\"square-dot\"\n [width]=\"21\"\n [height]=\"21\"\n fill=\"black\"\n class=\"drag-handle\"\n ></verben-svg>\n }\n <input\n type=\"checkbox\"\n [checked]=\"isColumnSelected(column.id)\"\n (change)=\"toggleColumnSelection(column.id)\"\n width=\"16px\"\n height=\"16px\"\n />\n <span>{{ getColumnHeader(column) }}</span>\n </div>\n\n <div class=\"sort-operators\">\n @for (operator of getSortOperators(column); track operator.value) {\n <label class=\"sort-operator\">\n <input\n type=\"radio\"\n [name]=\"'sort_' + column.id\"\n [value]=\"operator.value\"\n (change)=\"updateSort(column.id, operator.value)\"\n [checked]=\"isColumnSorted(column.id, operator.value)\"\n />\n {{ operator.label }}\n </label>\n }\n </div>\n </div>\n } @if (sortableColumns.length > maxVisibleItems) {\n <button\n (click)=\"showAllProperties = !showAllProperties\"\n class=\"show-more\"\n >\n <span>{{ showAllProperties ? \"Show Less\" : \"Show More\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </button>\n }\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"apply-button\" (click)=\"applySorts()\">Sort</button>\n </div>\n</verben-card>\n", styles: [".card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.header-title sup{color:#3479e9}.reset-button{color:#3479e9;background-color:transparent;border:none;cursor:pointer;font-size:12px}.card-body{display:flex;flex-direction:column;gap:.5rem}.section{display:flex;flex-direction:column;gap:.75rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.select-all{display:flex;align-items:center;gap:.5rem;margin-left:.3rem;font-size:12px}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1;margin:.8rem 0}.sort-option{margin:0 -1.5rem;color:#404040}.sort-option-header{font-weight:500;display:flex;gap:.5rem;font-size:12px}.sort-operators{display:flex;gap:1rem;margin-left:3rem}.sort-operator{display:flex;align-items:center;gap:.25rem;font-size:.75rem;color:#4b5563;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.apply-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer;font-size:12px}\n"], dependencies: [{ kind: "component", type: i1.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i2.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }] });
|
|
145
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: DataSortComponent, selector: "lib-data-sort", inputs: { columns: "columns", data: "data", enableDragAndDrop: "enableDragAndDrop" }, outputs: { sortApplied: "sortApplied", resetFilter: "resetFilter" }, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n [height]=\"'32rem'\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Sort <sup>({{ activeSortCount }})</sup>\n </h4>\n <button class=\"reset-button\" (click)=\"resetAll()\">Reset</button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Column Sort Options -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Properties</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n\n <!-- Select All -->\n <div class=\"select-all-wrapper\">\n <label class=\"select-all\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <span>Select All</span>\n </label>\n </div>\n\n @for (column of visibleColumns; track column.id) {\n <div\n class=\"sort-option\"\n [attr.draggable]=\"enableDragAndDrop\"\n (dragstart)=\"onDragStart($index, $event)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($index, $event)\"\n >\n <div class=\"sort-option-header\">\n @if (enableDragAndDrop) {\n <verben-svg\n icon=\"square-dot\"\n [width]=\"21\"\n [height]=\"21\"\n fill=\"black\"\n class=\"drag-handle\"\n ></verben-svg>\n }\n <input\n type=\"checkbox\"\n [checked]=\"isColumnSelected(column.id)\"\n (change)=\"toggleColumnSelection(column.id)\"\n width=\"16px\"\n height=\"16px\"\n />\n <span>{{ getColumnHeader(column) }}</span>\n </div>\n\n <div class=\"sort-operators\">\n @for (operator of getSortOperators(column); track operator.value) {\n <label class=\"sort-operator\">\n <input\n type=\"radio\"\n [name]=\"'sort_' + column.id\"\n [value]=\"operator.value\"\n (change)=\"updateSort(column.id, operator.value)\"\n [checked]=\"isColumnSorted(column.id, operator.value)\"\n />\n {{ operator.label }}\n </label>\n }\n </div>\n </div>\n } @if (sortableColumns.length > maxVisibleItems) {\n <button\n (click)=\"showAllProperties = !showAllProperties\"\n class=\"show-more\"\n >\n <span>{{ showAllProperties ? \"Show Less\" : \"Show More\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </button>\n }\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"apply-button\" (click)=\"applySorts()\">Sort</button>\n </div>\n</verben-card>\n", styles: [".card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.header-title sup{color:#3479e9}.reset-button{color:#3479e9;background-color:transparent;border:none;cursor:pointer;font-size:12px}.card-body{display:flex;flex-direction:column;gap:.5rem}.section{display:flex;flex-direction:column;gap:.75rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.select-all{display:flex;align-items:center;gap:.5rem;margin-left:.3rem;font-size:12px}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1;margin:.8rem 0}.sort-option{margin:0 -1.5rem;color:#404040}.sort-option-header{font-weight:500;display:flex;gap:.5rem;font-size:12px}.sort-operators{display:flex;gap:1rem;margin-left:3rem}.sort-operator{display:flex;align-items:center;gap:.25rem;font-size:.75rem;color:#4b5563;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.apply-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer;font-size:12px}\n"], dependencies: [{ kind: "component", type: i1.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }, { kind: "component", type: i2.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }] });
|
|
146
146
|
}
|
|
147
147
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataSortComponent, decorators: [{
|
|
148
148
|
type: Component,
|
|
149
|
-
args: [{ selector: 'lib-data-sort', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Sort <sup>({{ activeSortCount }})</sup>\n </h4>\n <button class=\"reset-button\" (click)=\"resetAll()\">Reset</button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Column Sort Options -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Properties</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n\n <!-- Select All -->\n <div class=\"select-all-wrapper\">\n <label class=\"select-all\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <span>Select All</span>\n </label>\n </div>\n\n @for (column of visibleColumns; track column.id) {\n <div\n class=\"sort-option\"\n [attr.draggable]=\"enableDragAndDrop\"\n (dragstart)=\"onDragStart($index, $event)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($index, $event)\"\n >\n <div class=\"sort-option-header\">\n @if (enableDragAndDrop) {\n <verben-svg\n icon=\"square-dot\"\n [width]=\"21\"\n [height]=\"21\"\n fill=\"black\"\n class=\"drag-handle\"\n ></verben-svg>\n }\n <input\n type=\"checkbox\"\n [checked]=\"isColumnSelected(column.id)\"\n (change)=\"toggleColumnSelection(column.id)\"\n width=\"16px\"\n height=\"16px\"\n />\n <span>{{ getColumnHeader(column) }}</span>\n </div>\n\n <div class=\"sort-operators\">\n @for (operator of getSortOperators(column); track operator.value) {\n <label class=\"sort-operator\">\n <input\n type=\"radio\"\n [name]=\"'sort_' + column.id\"\n [value]=\"operator.value\"\n (change)=\"updateSort(column.id, operator.value)\"\n [checked]=\"isColumnSorted(column.id, operator.value)\"\n />\n {{ operator.label }}\n </label>\n }\n </div>\n </div>\n } @if (sortableColumns.length > maxVisibleItems) {\n <button\n (click)=\"showAllProperties = !showAllProperties\"\n class=\"show-more\"\n >\n <span>{{ showAllProperties ? \"Show Less\" : \"Show More\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </button>\n }\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"apply-button\" (click)=\"applySorts()\">Sort</button>\n </div>\n</verben-card>\n", styles: [".card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.header-title sup{color:#3479e9}.reset-button{color:#3479e9;background-color:transparent;border:none;cursor:pointer;font-size:12px}.card-body{display:flex;flex-direction:column;gap:.5rem}.section{display:flex;flex-direction:column;gap:.75rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.select-all{display:flex;align-items:center;gap:.5rem;margin-left:.3rem;font-size:12px}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1;margin:.8rem 0}.sort-option{margin:0 -1.5rem;color:#404040}.sort-option-header{font-weight:500;display:flex;gap:.5rem;font-size:12px}.sort-operators{display:flex;gap:1rem;margin-left:3rem}.sort-operator{display:flex;align-items:center;gap:.25rem;font-size:.75rem;color:#4b5563;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.apply-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer;font-size:12px}\n"] }]
|
|
149
|
+
args: [{ selector: 'lib-data-sort', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n [height]=\"'32rem'\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">\n Sort <sup>({{ activeSortCount }})</sup>\n </h4>\n <button class=\"reset-button\" (click)=\"resetAll()\">Reset</button>\n </div>\n\n <div card-body class=\"card-body\">\n <!-- Column Sort Options -->\n <section class=\"section\">\n <div class=\"section-header\">\n <h3 class=\"section-title\">Properties</h3>\n <verben-svg\n icon=\"info\"\n [width]=\"15\"\n [height]=\"15\"\n fill=\"grey\"\n ></verben-svg>\n </div>\n\n <!-- Select All -->\n <div class=\"select-all-wrapper\">\n <label class=\"select-all\">\n <input\n type=\"checkbox\"\n [checked]=\"checkAll\"\n (change)=\"toggleSelectAll()\"\n />\n <span>Select All</span>\n </label>\n </div>\n\n @for (column of visibleColumns; track column.id) {\n <div\n class=\"sort-option\"\n [attr.draggable]=\"enableDragAndDrop\"\n (dragstart)=\"onDragStart($index, $event)\"\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($index, $event)\"\n >\n <div class=\"sort-option-header\">\n @if (enableDragAndDrop) {\n <verben-svg\n icon=\"square-dot\"\n [width]=\"21\"\n [height]=\"21\"\n fill=\"black\"\n class=\"drag-handle\"\n ></verben-svg>\n }\n <input\n type=\"checkbox\"\n [checked]=\"isColumnSelected(column.id)\"\n (change)=\"toggleColumnSelection(column.id)\"\n width=\"16px\"\n height=\"16px\"\n />\n <span>{{ getColumnHeader(column) }}</span>\n </div>\n\n <div class=\"sort-operators\">\n @for (operator of getSortOperators(column); track operator.value) {\n <label class=\"sort-operator\">\n <input\n type=\"radio\"\n [name]=\"'sort_' + column.id\"\n [value]=\"operator.value\"\n (change)=\"updateSort(column.id, operator.value)\"\n [checked]=\"isColumnSorted(column.id, operator.value)\"\n />\n {{ operator.label }}\n </label>\n }\n </div>\n </div>\n } @if (sortableColumns.length > maxVisibleItems) {\n <button\n (click)=\"showAllProperties = !showAllProperties\"\n class=\"show-more\"\n >\n <span>{{ showAllProperties ? \"Show Less\" : \"Show More\" }}</span>\n <verben-svg\n icon=\"chevron\"\n [width]=\"8\"\n [height]=\"6\"\n fill=\"black\"\n stroke=\"black\"\n ></verben-svg>\n </button>\n }\n </section>\n </div>\n\n <div card-footer class=\"card-footer\">\n <button class=\"apply-button\" (click)=\"applySorts()\">Sort</button>\n </div>\n</verben-card>\n", styles: [".card-header{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.header-title sup{color:#3479e9}.reset-button{color:#3479e9;background-color:transparent;border:none;cursor:pointer;font-size:12px}.card-body{display:flex;flex-direction:column;gap:.5rem}.section{display:flex;flex-direction:column;gap:.75rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.select-all{display:flex;align-items:center;gap:.5rem;margin-left:.3rem;font-size:12px}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1;margin:.8rem 0}.sort-option{margin:0 -1.5rem;color:#404040}.sort-option-header{font-weight:500;display:flex;gap:.5rem;font-size:12px}.sort-operators{display:flex;gap:1rem;margin-left:3rem}.sort-operator{display:flex;align-items:center;gap:.25rem;font-size:.75rem;color:#4b5563;cursor:pointer}.card-footer{display:flex;justify-content:flex-end;background-color:transparent}.apply-button{margin-top:.5rem;outline:none;border:none;padding:.2rem 1.6rem;background-color:#ffe681;color:#404040;font-size:.75rem;font-weight:600;cursor:pointer}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer;font-size:12px}\n"] }]
|
|
150
150
|
}], propDecorators: { columns: [{
|
|
151
151
|
type: Input
|
|
152
152
|
}], data: [{
|
|
@@ -158,4 +158,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
|
|
|
158
158
|
}], resetFilter: [{
|
|
159
159
|
type: Output
|
|
160
160
|
}] } });
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1zb3J0L2RhdGEtc29ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtc29ydC9kYXRhLXNvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBR0wscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixtQkFBbUIsR0FDcEIsTUFBTSxtQkFBbUIsQ0FBQzs7OztBQU8zQixNQUFNLE9BQU8saUJBQWlCO0lBQ25CLE9BQU8sQ0FBeUI7SUFDaEMsSUFBSSxDQUFPO0lBQ1gsaUJBQWlCLEdBQVksSUFBSSxDQUFDO0lBQ2pDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUNsRCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMzQyxlQUFlLEdBQTBCLEVBQUUsQ0FBQztJQUM1QyxhQUFhLEdBQWdDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDdkQsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFDcEIsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFekMsUUFBUTtRQUNOLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FB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S0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUNwRSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FDbkMsQ0FBQyxNQUFNLENBQUM7SUFDWCxDQUFDO3dHQTNKVSxpQkFBaUI7NEZBQWpCLGlCQUFpQixnTkNmOUIsd2hHQXVHQTs7NEZEeEZhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlOzhCQUtoQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2x1bW5EZWZpbml0aW9uIH0gZnJvbSAnLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLnR5cGVzJztcbmltcG9ydCB7XG4gIFNvcnRDb25kaXRpb24sXG4gIFNvcnRPcGVyYXRvcixcbiAgU1RSSU5HX1NPUlRfT1BFUkFUT1JTLFxuICBOVU1CRVJfU09SVF9PUEVSQVRPUlMsXG4gIERBVEVfU09SVF9PUEVSQVRPUlMsXG59IGZyb20gJy4vZGF0YS1zb3J0LnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhdGEtc29ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXNvcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXNvcnQuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhU29ydENvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbHVtbnMhOiBDb2x1bW5EZWZpbml0aW9uPFQ+W107XG4gIEBJbnB1dCgpIGRhdGEhOiBUW107XG4gIEBJbnB1dCgpIGVuYWJsZURyYWdBbmREcm9wOiBib29sZWFuID0gdHJ1ZTtcbiAgQE91dHB1dCgpIHNvcnRBcHBsaWVkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0Q29uZGl0aW9uW10+KCk7XG4gIEBPdXRwdXQoKSByZXNldEZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgc29ydGFibGVDb2x1bW5zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10gPSBbXTtcbiAgc2VsZWN0ZWRTb3J0czogTWFwPHN0cmluZywgJ2FzYycgfCAnZGVzYyc+ID0gbmV3IE1hcCgpO1xuICBzaG93QWxsUHJvcGVydGllcyA9IGZhbHNlO1xuICBtYXhWaXNpYmxlSXRlbXMgPSAzO1xuICBkcmFnZ2VkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBjaGVja0FsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZENvbHVtbnM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZVNvcnRhYmxlQ29sdW1ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplU29ydGFibGVDb2x1bW5zKCkge1xuICAgIHRoaXMuc29ydGFibGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wuYWNjZXNzb3JLZXkpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGxQcm9wZXJ0aWVzXG4gICAgICA/IHRoaXMuc29ydGFibGVDb2x1bW5zXG4gICAgICA6IHRoaXMuc29ydGFibGVDb2x1bW5zLnNsaWNlKDAsIHRoaXMubWF4VmlzaWJsZUl0ZW1zKTtcbiAgfVxuXG4gIC8vIERyYWcgYW5kIERyb3AgZnVuY3Rpb25hbGl0eVxuICBvbkRyYWdTdGFydChpbmRleDogbnVtYmVyLCBldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZURyYWdBbmREcm9wKSByZXR1cm47XG4gICAgdGhpcy5kcmFnZ2VkSW5kZXggPSBpbmRleDtcbiAgICBldmVudC5kYXRhVHJhbnNmZXI/LnNldERhdGEoJ3RleHQvcGxhaW4nLCBTdHJpbmcoaW5kZXgpKTtcbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmICghdGhpcy5lbmFibGVEcmFnQW5kRHJvcCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBvbkRyb3AoaW5kZXg6IG51bWJlciwgZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmICghdGhpcy5lbmFibGVEcmFnQW5kRHJvcCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZEluZGV4ICE9PSBudWxsICYmIHRoaXMuZHJhZ2dlZEluZGV4ICE9PSBpbmRleCkge1xuICAgICAgdGhpcy5zd2FwQ29sdW1ucyh0aGlzLmRyYWdnZWRJbmRleCwgaW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLmRyYWdnZWRJbmRleCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN3YXBDb2x1bW5zKGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB0ZW1wID0gdGhpcy5zb3J0YWJsZUNvbHVtbnNbZnJvbUluZGV4XTtcbiAgICB0aGlzLnNvcnRhYmxlQ29sdW1uc1tmcm9tSW5kZXhdID0gdGhpcy5zb3J0YWJsZUNvbHVtbnNbdG9JbmRleF07XG4gICAgdGhpcy5zb3J0YWJsZUNvbHVtbnNbdG9JbmRleF0gPSB0ZW1wO1xuICB9XG5cbiAgLy8gQ29sdW1uIFNlbGVjdGlvbiBmdW5jdGlvbmFsaXR5XG4gIHRvZ2dsZVNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLmNoZWNrQWxsID0gIXRoaXMuY2hlY2tBbGw7XG4gICAgaWYgKHRoaXMuY2hlY2tBbGwpIHtcbiAgICAgIHRoaXMuc29ydGFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT5cbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuYWRkKGNvbHVtbi5pZClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQ29sdW1uU2VsZWN0aW9uKGNvbHVtbklkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMuaGFzKGNvbHVtbklkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZGVsZXRlKGNvbHVtbklkKTtcbiAgICAgIHRoaXMuY2hlY2tBbGwgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuYWRkKGNvbHVtbklkKTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucy5zaXplID09PSB0aGlzLnNvcnRhYmxlQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNDb2x1bW5TZWxlY3RlZChjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmhhcyhjb2x1bW5JZCk7XG4gIH1cblxuICAvLyBFeGlzdGluZyBzb3J0IGZ1bmN0aW9uYWxpdHkuLi5cbiAgZ2V0U29ydE9wZXJhdG9ycyhjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4pOiBTb3J0T3BlcmF0b3JbXSB7XG4gICAgY29uc3QgY29sdW1uVHlwZSA9IHRoaXMuZGV0ZXJtaW5lQ29sdW1uVHlwZShjb2x1bW4pO1xuXG4gICAgc3dpdGNoIChjb2x1bW5UeXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gU1RSSU5HX1NPUlRfT1BFUkFUT1JTO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgcmV0dXJuIE5VTUJFUl9TT1JUX09QRVJBVE9SUztcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICByZXR1cm4gREFURV9TT1JUX09QRVJBVE9SUztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBTVFJJTkdfU09SVF9PUEVSQVRPUlM7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVDb2x1bW5UeXBlKFxuICAgIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPlxuICApOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2RhdGUnIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5sZW5ndGgpIHJldHVybiAnc3RyaW5nJztcblxuICAgIGNvbnN0IHNhbXBsZVZhbHVlID0gY29sdW1uLmFjY2Vzc29yS2V5XG4gICAgICA/IHRoaXMuZGF0YVswXVtjb2x1bW4uYWNjZXNzb3JLZXldXG4gICAgICA6IGNvbHVtbi5hY2Nlc3NvckZuXG4gICAgICA/IGNvbHVtbi5hY2Nlc3NvckZuKHRoaXMuZGF0YVswXSlcbiAgICAgIDogbnVsbDtcblxuICAgIGlmIChzYW1wbGVWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiAnZGF0ZSc7XG4gICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiAnbnVtYmVyJztcbiAgICByZXR1cm4gJ3N0cmluZyc7XG4gIH1cblxuICB1cGRhdGVTb3J0KGNvbHVtbklkOiBzdHJpbmcsIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycpIHtcbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU29ydHMuc2V0KGNvbHVtbklkLCBkaXJlY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU29ydHMuZGVsZXRlKGNvbHVtbklkKTtcbiAgICB9XG4gIH1cblxuICBpc0NvbHVtblNvcnRlZChjb2x1bW5JZDogc3RyaW5nLCBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRTb3J0cy5nZXQoY29sdW1uSWQpID09PSBkaXJlY3Rpb247XG4gIH1cblxuICBnZXRDb2x1bW5IZWFkZXIoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIGNvbHVtbi5oZWFkZXIgPT09ICdmdW5jdGlvbidcbiAgICAgID8gY29sdW1uLmhlYWRlcih7fSlcbiAgICAgIDogY29sdW1uLmhlYWRlcjtcbiAgfVxuXG4gIHJlc2V0QWxsKCkge1xuICAgIHRoaXMucmVzZXRGaWx0ZXIuZW1pdCgpXG4gICAgdGhpcy5zZWxlY3RlZFNvcnRzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuY2xlYXIoKTtcbiAgICB0aGlzLmNoZWNrQWxsID0gZmFsc2U7XG4gIH1cblxuICBhcHBseVNvcnRzKCkge1xuICAgIC8vIE9ubHkgZW1pdCBzb3J0cyBmb3Igc2VsZWN0ZWQgY29sdW1uc1xuICAgIGNvbnN0IHNvcnRzOiBTb3J0Q29uZGl0aW9uW10gPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRTb3J0cy5lbnRyaWVzKCkpXG4gICAgICAuZmlsdGVyKChbY29sdW1uSWRdKSA9PiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5oYXMoY29sdW1uSWQpKVxuICAgICAgLm1hcCgoW2NvbHVtbklkLCBkaXJlY3Rpb25dKSA9PiAoe1xuICAgICAgICBjb2x1bW5JZCxcbiAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgfSkpO1xuICAgIHRoaXMuc29ydEFwcGxpZWQuZW1pdChzb3J0cyk7XG4gIH1cblxuICBnZXQgYWN0aXZlU29ydENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFNvcnRzLmVudHJpZXMoKSkuZmlsdGVyKChbY29sdW1uSWRdKSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuaGFzKGNvbHVtbklkKVxuICAgICkubGVuZ3RoO1xuICB9XG59XG4iLCI8dmVyYmVuLWNhcmRcbiAgd2lkdGg9XCIyNHJlbVwiXG4gIGJvcmRlclJhZGl1cz1cIjFyZW1cIlxuICBbYm9yZGVyXT1cIicxcHggc29saWQgI0Q0QTAwNydcIlxuICBiZ0NvbG9yPVwiI0ZGRkZGRlwiXG4+XG4gIDxkaXYgY2FyZC1oZWFkZXIgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cImhlYWRlci10aXRsZVwiPlxuICAgICAgU29ydCA8c3VwPih7eyBhY3RpdmVTb3J0Q291bnQgfX0pPC9zdXA+XG4gICAgPC9oND5cbiAgICA8YnV0dG9uIGNsYXNzPVwicmVzZXQtYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0QWxsKClcIj5SZXNldDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgIDwhLS0gQ29sdW1uIFNvcnQgT3B0aW9ucyAtLT5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+UHJvcGVydGllczwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cImdyZXlcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2VsZWN0IEFsbCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtYWxsLXdyYXBwZXJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwic2VsZWN0LWFsbFwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrQWxsXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4+U2VsZWN0IEFsbDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAZm9yIChjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNvcnQtb3B0aW9uXCJcbiAgICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cImVuYWJsZURyYWdBbmREcm9wXCJcbiAgICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkaW5kZXgsICRldmVudClcIlxuICAgICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyb3ApPVwib25Ecm9wKCRpbmRleCwgJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LW9wdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICBAaWYgKGVuYWJsZURyYWdBbmREcm9wKSB7XG4gICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgIGljb249XCJzcXVhcmUtZG90XCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIyMVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjIxXCJcbiAgICAgICAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgICAgICAgICBjbGFzcz1cImRyYWctaGFuZGxlXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc0NvbHVtblNlbGVjdGVkKGNvbHVtbi5pZClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVDb2x1bW5TZWxlY3Rpb24oY29sdW1uLmlkKVwiXG4gICAgICAgICAgICB3aWR0aD1cIjE2cHhcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3Bhbj57eyBnZXRDb2x1bW5IZWFkZXIoY29sdW1uKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtb3BlcmF0b3JzXCI+XG4gICAgICAgICAgQGZvciAob3BlcmF0b3Igb2YgZ2V0U29ydE9wZXJhdG9ycyhjb2x1bW4pOyB0cmFjayBvcGVyYXRvci52YWx1ZSkge1xuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNvcnQtb3BlcmF0b3JcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBbbmFtZV09XCInc29ydF8nICsgY29sdW1uLmlkXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wZXJhdG9yLnZhbHVlXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVTb3J0KGNvbHVtbi5pZCwgb3BlcmF0b3IudmFsdWUpXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNDb2x1bW5Tb3J0ZWQoY29sdW1uLmlkLCBvcGVyYXRvci52YWx1ZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHt7IG9wZXJhdG9yLmxhYmVsIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB9IEBpZiAoc29ydGFibGVDb2x1bW5zLmxlbmd0aCA+IG1heFZpc2libGVJdGVtcykge1xuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2hvd0FsbFByb3BlcnRpZXMgPSAhc2hvd0FsbFByb3BlcnRpZXNcIlxuICAgICAgICBjbGFzcz1cInNob3ctbW9yZVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPnt7IHNob3dBbGxQcm9wZXJ0aWVzID8gXCJTaG93IExlc3NcIiA6IFwiU2hvdyBNb3JlXCIgfX08L3NwYW4+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImNoZXZyb25cIlxuICAgICAgICAgIFt3aWR0aF09XCI4XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjZcIlxuICAgICAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgICAgICAgc3Ryb2tlPVwiYmxhY2tcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgPC9zZWN0aW9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNhcmQtZm9vdGVyIGNsYXNzPVwiY2FyZC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYXBwbHktYnV0dG9uXCIgKGNsaWNrKT1cImFwcGx5U29ydHMoKVwiPlNvcnQ8L2J1dHRvbj5cbiAgPC9kaXY+XG48L3ZlcmJlbi1jYXJkPlxuIl19
|
|
161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3J0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1zb3J0L2RhdGEtc29ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtc29ydC9kYXRhLXNvcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBR0wscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixtQkFBbUIsR0FDcEIsTUFBTSxtQkFBbUIsQ0FBQzs7OztBQU8zQixNQUFNLE9BQU8saUJBQWlCO0lBQ25CLE9BQU8sQ0FBeUI7SUFDaEMsSUFBSSxDQUFPO0lBQ1gsaUJBQWlCLEdBQVksSUFBSSxDQUFDO0lBQ2pDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUNsRCxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMzQyxlQUFlLEdBQTBCLEVBQUUsQ0FBQztJQUM1QyxhQUFhLEdBQWdDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDdkQsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQzFCLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFDcEIsWUFBWSxHQUFrQixJQUFJLENBQUM7SUFDbkMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUMxQixlQUFlLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFFekMsUUFBUTtRQUNOLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FB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S0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUNwRSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FDbkMsQ0FBQyxNQUFNLENBQUM7SUFDWCxDQUFDO3dHQTNKVSxpQkFBaUI7NEZBQWpCLGlCQUFpQixnTkNmOUIsZ2pHQXdHQTs7NEZEekZhLGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxlQUFlOzhCQUtoQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2x1bW5EZWZpbml0aW9uIH0gZnJvbSAnLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLnR5cGVzJztcbmltcG9ydCB7XG4gIFNvcnRDb25kaXRpb24sXG4gIFNvcnRPcGVyYXRvcixcbiAgU1RSSU5HX1NPUlRfT1BFUkFUT1JTLFxuICBOVU1CRVJfU09SVF9PUEVSQVRPUlMsXG4gIERBVEVfU09SVF9PUEVSQVRPUlMsXG59IGZyb20gJy4vZGF0YS1zb3J0LnR5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhdGEtc29ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXNvcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhLXNvcnQuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhU29ydENvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbHVtbnMhOiBDb2x1bW5EZWZpbml0aW9uPFQ+W107XG4gIEBJbnB1dCgpIGRhdGEhOiBUW107XG4gIEBJbnB1dCgpIGVuYWJsZURyYWdBbmREcm9wOiBib29sZWFuID0gdHJ1ZTtcbiAgQE91dHB1dCgpIHNvcnRBcHBsaWVkID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0Q29uZGl0aW9uW10+KCk7XG4gIEBPdXRwdXQoKSByZXNldEZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgc29ydGFibGVDb2x1bW5zOiBDb2x1bW5EZWZpbml0aW9uPFQ+W10gPSBbXTtcbiAgc2VsZWN0ZWRTb3J0czogTWFwPHN0cmluZywgJ2FzYycgfCAnZGVzYyc+ID0gbmV3IE1hcCgpO1xuICBzaG93QWxsUHJvcGVydGllcyA9IGZhbHNlO1xuICBtYXhWaXNpYmxlSXRlbXMgPSAzO1xuICBkcmFnZ2VkSW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBjaGVja0FsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZENvbHVtbnM6IFNldDxzdHJpbmc+ID0gbmV3IFNldCgpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZVNvcnRhYmxlQ29sdW1ucygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplU29ydGFibGVDb2x1bW5zKCkge1xuICAgIHRoaXMuc29ydGFibGVDb2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wuYWNjZXNzb3JLZXkpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLnNob3dBbGxQcm9wZXJ0aWVzXG4gICAgICA/IHRoaXMuc29ydGFibGVDb2x1bW5zXG4gICAgICA6IHRoaXMuc29ydGFibGVDb2x1bW5zLnNsaWNlKDAsIHRoaXMubWF4VmlzaWJsZUl0ZW1zKTtcbiAgfVxuXG4gIC8vIERyYWcgYW5kIERyb3AgZnVuY3Rpb25hbGl0eVxuICBvbkRyYWdTdGFydChpbmRleDogbnVtYmVyLCBldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmVuYWJsZURyYWdBbmREcm9wKSByZXR1cm47XG4gICAgdGhpcy5kcmFnZ2VkSW5kZXggPSBpbmRleDtcbiAgICBldmVudC5kYXRhVHJhbnNmZXI/LnNldERhdGEoJ3RleHQvcGxhaW4nLCBTdHJpbmcoaW5kZXgpKTtcbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmICghdGhpcy5lbmFibGVEcmFnQW5kRHJvcCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBvbkRyb3AoaW5kZXg6IG51bWJlciwgZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGlmICghdGhpcy5lbmFibGVEcmFnQW5kRHJvcCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMuZHJhZ2dlZEluZGV4ICE9PSBudWxsICYmIHRoaXMuZHJhZ2dlZEluZGV4ICE9PSBpbmRleCkge1xuICAgICAgdGhpcy5zd2FwQ29sdW1ucyh0aGlzLmRyYWdnZWRJbmRleCwgaW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLmRyYWdnZWRJbmRleCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHN3YXBDb2x1bW5zKGZyb21JbmRleDogbnVtYmVyLCB0b0luZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCB0ZW1wID0gdGhpcy5zb3J0YWJsZUNvbHVtbnNbZnJvbUluZGV4XTtcbiAgICB0aGlzLnNvcnRhYmxlQ29sdW1uc1tmcm9tSW5kZXhdID0gdGhpcy5zb3J0YWJsZUNvbHVtbnNbdG9JbmRleF07XG4gICAgdGhpcy5zb3J0YWJsZUNvbHVtbnNbdG9JbmRleF0gPSB0ZW1wO1xuICB9XG5cbiAgLy8gQ29sdW1uIFNlbGVjdGlvbiBmdW5jdGlvbmFsaXR5XG4gIHRvZ2dsZVNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLmNoZWNrQWxsID0gIXRoaXMuY2hlY2tBbGw7XG4gICAgaWYgKHRoaXMuY2hlY2tBbGwpIHtcbiAgICAgIHRoaXMuc29ydGFibGVDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT5cbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuYWRkKGNvbHVtbi5pZClcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQ29sdW1uU2VsZWN0aW9uKGNvbHVtbklkOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMuaGFzKGNvbHVtbklkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuZGVsZXRlKGNvbHVtbklkKTtcbiAgICAgIHRoaXMuY2hlY2tBbGwgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuYWRkKGNvbHVtbklkKTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucy5zaXplID09PSB0aGlzLnNvcnRhYmxlQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5jaGVja0FsbCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNDb2x1bW5TZWxlY3RlZChjb2x1bW5JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmhhcyhjb2x1bW5JZCk7XG4gIH1cblxuICAvLyBFeGlzdGluZyBzb3J0IGZ1bmN0aW9uYWxpdHkuLi5cbiAgZ2V0U29ydE9wZXJhdG9ycyhjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4pOiBTb3J0T3BlcmF0b3JbXSB7XG4gICAgY29uc3QgY29sdW1uVHlwZSA9IHRoaXMuZGV0ZXJtaW5lQ29sdW1uVHlwZShjb2x1bW4pO1xuXG4gICAgc3dpdGNoIChjb2x1bW5UeXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gU1RSSU5HX1NPUlRfT1BFUkFUT1JTO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgcmV0dXJuIE5VTUJFUl9TT1JUX09QRVJBVE9SUztcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICByZXR1cm4gREFURV9TT1JUX09QRVJBVE9SUztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBTVFJJTkdfU09SVF9PUEVSQVRPUlM7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVDb2x1bW5UeXBlKFxuICAgIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPlxuICApOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2RhdGUnIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5sZW5ndGgpIHJldHVybiAnc3RyaW5nJztcblxuICAgIGNvbnN0IHNhbXBsZVZhbHVlID0gY29sdW1uLmFjY2Vzc29yS2V5XG4gICAgICA/IHRoaXMuZGF0YVswXVtjb2x1bW4uYWNjZXNzb3JLZXldXG4gICAgICA6IGNvbHVtbi5hY2Nlc3NvckZuXG4gICAgICA/IGNvbHVtbi5hY2Nlc3NvckZuKHRoaXMuZGF0YVswXSlcbiAgICAgIDogbnVsbDtcblxuICAgIGlmIChzYW1wbGVWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiAnZGF0ZSc7XG4gICAgaWYgKHR5cGVvZiBzYW1wbGVWYWx1ZSA9PT0gJ251bWJlcicpIHJldHVybiAnbnVtYmVyJztcbiAgICByZXR1cm4gJ3N0cmluZyc7XG4gIH1cblxuICB1cGRhdGVTb3J0KGNvbHVtbklkOiBzdHJpbmcsIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycpIHtcbiAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU29ydHMuc2V0KGNvbHVtbklkLCBkaXJlY3Rpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU29ydHMuZGVsZXRlKGNvbHVtbklkKTtcbiAgICB9XG4gIH1cblxuICBpc0NvbHVtblNvcnRlZChjb2x1bW5JZDogc3RyaW5nLCBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRTb3J0cy5nZXQoY29sdW1uSWQpID09PSBkaXJlY3Rpb247XG4gIH1cblxuICBnZXRDb2x1bW5IZWFkZXIoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIGNvbHVtbi5oZWFkZXIgPT09ICdmdW5jdGlvbidcbiAgICAgID8gY29sdW1uLmhlYWRlcih7fSlcbiAgICAgIDogY29sdW1uLmhlYWRlcjtcbiAgfVxuXG4gIHJlc2V0QWxsKCkge1xuICAgIHRoaXMucmVzZXRGaWx0ZXIuZW1pdCgpXG4gICAgdGhpcy5zZWxlY3RlZFNvcnRzLmNsZWFyKCk7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuY2xlYXIoKTtcbiAgICB0aGlzLmNoZWNrQWxsID0gZmFsc2U7XG4gIH1cblxuICBhcHBseVNvcnRzKCkge1xuICAgIC8vIE9ubHkgZW1pdCBzb3J0cyBmb3Igc2VsZWN0ZWQgY29sdW1uc1xuICAgIGNvbnN0IHNvcnRzOiBTb3J0Q29uZGl0aW9uW10gPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRTb3J0cy5lbnRyaWVzKCkpXG4gICAgICAuZmlsdGVyKChbY29sdW1uSWRdKSA9PiB0aGlzLnNlbGVjdGVkQ29sdW1ucy5oYXMoY29sdW1uSWQpKVxuICAgICAgLm1hcCgoW2NvbHVtbklkLCBkaXJlY3Rpb25dKSA9PiAoe1xuICAgICAgICBjb2x1bW5JZCxcbiAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgfSkpO1xuICAgIHRoaXMuc29ydEFwcGxpZWQuZW1pdChzb3J0cyk7XG4gIH1cblxuICBnZXQgYWN0aXZlU29ydENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFNvcnRzLmVudHJpZXMoKSkuZmlsdGVyKChbY29sdW1uSWRdKSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuaGFzKGNvbHVtbklkKVxuICAgICkubGVuZ3RoO1xuICB9XG59XG4iLCI8dmVyYmVuLWNhcmRcbiAgd2lkdGg9XCIyNHJlbVwiXG4gIGJvcmRlclJhZGl1cz1cIjFyZW1cIlxuICBbYm9yZGVyXT1cIicxcHggc29saWQgI0Q0QTAwNydcIlxuICBiZ0NvbG9yPVwiI0ZGRkZGRlwiXG4gIFtoZWlnaHRdPVwiJzMycmVtJ1wiXG4+XG4gIDxkaXYgY2FyZC1oZWFkZXIgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgIDxoNCBjbGFzcz1cImhlYWRlci10aXRsZVwiPlxuICAgICAgU29ydCA8c3VwPih7eyBhY3RpdmVTb3J0Q291bnQgfX0pPC9zdXA+XG4gICAgPC9oND5cbiAgICA8YnV0dG9uIGNsYXNzPVwicmVzZXQtYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0QWxsKClcIj5SZXNldDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgIDwhLS0gQ29sdW1uIFNvcnQgT3B0aW9ucyAtLT5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+UHJvcGVydGllczwvaDM+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImluZm9cIlxuICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgZmlsbD1cImdyZXlcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gU2VsZWN0IEFsbCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtYWxsLXdyYXBwZXJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwic2VsZWN0LWFsbFwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrQWxsXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4+U2VsZWN0IEFsbDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICBAZm9yIChjb2x1bW4gb2YgdmlzaWJsZUNvbHVtbnM7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNvcnQtb3B0aW9uXCJcbiAgICAgICAgW2F0dHIuZHJhZ2dhYmxlXT1cImVuYWJsZURyYWdBbmREcm9wXCJcbiAgICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkaW5kZXgsICRldmVudClcIlxuICAgICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgKGRyb3ApPVwib25Ecm9wKCRpbmRleCwgJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LW9wdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICBAaWYgKGVuYWJsZURyYWdBbmREcm9wKSB7XG4gICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgIGljb249XCJzcXVhcmUtZG90XCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIyMVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjIxXCJcbiAgICAgICAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgICAgICAgICBjbGFzcz1cImRyYWctaGFuZGxlXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJpc0NvbHVtblNlbGVjdGVkKGNvbHVtbi5pZClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVDb2x1bW5TZWxlY3Rpb24oY29sdW1uLmlkKVwiXG4gICAgICAgICAgICB3aWR0aD1cIjE2cHhcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMTZweFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3Bhbj57eyBnZXRDb2x1bW5IZWFkZXIoY29sdW1uKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtb3BlcmF0b3JzXCI+XG4gICAgICAgICAgQGZvciAob3BlcmF0b3Igb2YgZ2V0U29ydE9wZXJhdG9ycyhjb2x1bW4pOyB0cmFjayBvcGVyYXRvci52YWx1ZSkge1xuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNvcnQtb3BlcmF0b3JcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBbbmFtZV09XCInc29ydF8nICsgY29sdW1uLmlkXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wZXJhdG9yLnZhbHVlXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVTb3J0KGNvbHVtbi5pZCwgb3BlcmF0b3IudmFsdWUpXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNDb2x1bW5Tb3J0ZWQoY29sdW1uLmlkLCBvcGVyYXRvci52YWx1ZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHt7IG9wZXJhdG9yLmxhYmVsIH19XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICB9IEBpZiAoc29ydGFibGVDb2x1bW5zLmxlbmd0aCA+IG1heFZpc2libGVJdGVtcykge1xuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2hvd0FsbFByb3BlcnRpZXMgPSAhc2hvd0FsbFByb3BlcnRpZXNcIlxuICAgICAgICBjbGFzcz1cInNob3ctbW9yZVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPnt7IHNob3dBbGxQcm9wZXJ0aWVzID8gXCJTaG93IExlc3NcIiA6IFwiU2hvdyBNb3JlXCIgfX08L3NwYW4+XG4gICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgaWNvbj1cImNoZXZyb25cIlxuICAgICAgICAgIFt3aWR0aF09XCI4XCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjZcIlxuICAgICAgICAgIGZpbGw9XCJibGFja1wiXG4gICAgICAgICAgc3Ryb2tlPVwiYmxhY2tcIlxuICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgPC9zZWN0aW9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNhcmQtZm9vdGVyIGNsYXNzPVwiY2FyZC1mb290ZXJcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYXBwbHktYnV0dG9uXCIgKGNsaWNrKT1cImFwcGx5U29ydHMoKVwiPlNvcnQ8L2J1dHRvbj5cbiAgPC9kaXY+XG48L3ZlcmJlbi1jYXJkPlxuIl19
|
|
@@ -169,7 +169,7 @@ export class DataTableComponent {
|
|
|
169
169
|
const formGroupConfig = this.formGroupConfig();
|
|
170
170
|
if (formGroupConfig) {
|
|
171
171
|
const formGroup = new FormGroup(formGroupConfig.controls, formGroupConfig.validatorOrOpts, formGroupConfig.asyncValidator);
|
|
172
|
-
formGroup.patchValue(row);
|
|
172
|
+
formGroup.patchValue(row.originalData);
|
|
173
173
|
this.formGroupsSignal.update((map) => {
|
|
174
174
|
const newMap = new Map(map);
|
|
175
175
|
newMap.set(rowId, formGroup);
|
|
@@ -192,9 +192,9 @@ export class DataTableComponent {
|
|
|
192
192
|
// });
|
|
193
193
|
// }
|
|
194
194
|
// }
|
|
195
|
-
console.log(this.formGroupConfig());
|
|
196
|
-
console.log(editedForm);
|
|
197
|
-
console.log(unEditedData);
|
|
195
|
+
// console.log(this.formGroupConfig());
|
|
196
|
+
// console.log(editedForm);
|
|
197
|
+
// console.log(unEditedData);
|
|
198
198
|
if (editedForm) {
|
|
199
199
|
editedForm.markAsPristine();
|
|
200
200
|
editedForm.markAsUntouched();
|
|
@@ -525,4 +525,4 @@ const defaultTableStyles = {
|
|
|
525
525
|
borderTop: '2px solid #e0e0e0',
|
|
526
526
|
},
|
|
527
527
|
};
|
|
528
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFPdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBbUIsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFRNUQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3Qix3Q0FBd0M7SUFDeEMsSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQU8sQ0FBQztJQUM3QixPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBeUIsQ0FBQztJQUNsRCxPQUFPLEdBQUcsS0FBSyxFQUFXLENBQUMsQ0FBQywyQ0FBMkM7SUFDdkUsZUFBZSxHQUFHLEtBQUssRUFJcEIsQ0FBQztJQUVKLE9BQU8sR0FBRyxLQUFLLEVBQStCLENBQUM7SUFDL0MsZ0JBQWdCLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLHFCQUFxQixHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUVqQyxXQUFXLEdBQWdCLGtCQUFrQixDQUFDO0lBRXZELGVBQWUsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFekMsT0FBTyxHQUFH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ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBjb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5wdXQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFNpZ25hbCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbHVtbkRlZmluaXRpb24sXG4gIERhdGFXaXRoS2V5LFxuICBGb3JtR3JvdXBDb25maWcsXG4gIEdyb3VwZWREYXRhUm93LFxufSBmcm9tICcuL2RhdGEtdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgQ29sdW1uRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2x1bW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IFRhYmxlU3R5bGVzIH0gZnJvbSAnLi9zdHlsZS50eXBlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhdGEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5jc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlQ29tcG9uZW50PFQ+IHtcbiAgLy8gTW9kaWZ5IGRhdGEgaW5wdXQgdG8gdXNlIGdyb3VwZWQgZGF0YVxuICBkYXRhID0gaW5wdXQucmVxdWlyZWQ8VFtdPigpO1xuICBjb2x1bW5zID0gaW5wdXQucmVxdWlyZWQ8Q29sdW1uRGVmaW5pdGlvbjxUPltdPigpO1xuICBkYXRhS2V5ID0gaW5wdXQ8a2V5b2YgVD4oKTsgLy8gTmV3IHJlcXVpcmVkIGlucHV0IGZvciB1bmlxdWUgaWRlbnRpZmllclxuICBmb3JtR3JvdXBDb25maWcgPSBpbnB1dDxcbiAgICBGb3JtR3JvdXBDb25maWc8e1xuICAgICAgW0sgaW4ga2V5b2YgVF06IEFic3RyYWN0Q29udHJvbDtcbiAgICB9PlxuICA+KCk7XG5cbiAgZ3JvdXBCeSA9IGlucHV0PGtleW9mIFQgfCAoKHJvdzogVCkgPT4gYW55KT4oKTtcbiAgdXNlVmlydHVhbFNjcm9sbCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgdmlydHVhbFNjcm9sbEl0ZW1TaXplID0gaW5wdXQ8bnVtYmVyPig0OCk7XG5cbiAgQElucHV0KCkgc3R5bGVDb25maWc6IFRhYmxlU3R5bGVzID0gZGVmYXVsdFRhYmxlU3R5bGVzO1xuXG4gIGNvbHVtblRlbXBsYXRlcyA9IGNvbnRlbnRDaGlsZHJlbihDb2x1bW5EaXJlY3RpdmUpO1xuXG4gIEBPdXRwdXQoKSByb3dFZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgcm93U2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAga2V5OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgZGF0YTogUGFydGlhbDxUPjtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHJvd1JldmVydCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGluZGV4OiBudW1iZXI7XG4gICAga2V5OiBudW1iZXIgfCBzdHJpbmc7XG4gICAgZGF0YTogVDtcbiAgfT4oKTtcbiAgQE91dHB1dCgpIHJvd0RlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VFtdPigpO1xuXG4gIC8qKiBJbnRlcm5hbGx5IG1haW50YWluZWQgZGF0YSwgd2l0aCBndWFyYW50ZWVkIHVuaXF1ZW5lc3MgZHVlIHRvIGtleSBwcm9wZXJ0eSAqL1xuICB0YWJsZURhdGE6IFNpZ25hbDxEYXRhV2l0aEtleTxUPltdPjtcblxuICBwcml2YXRlIGVkaXRpbmdSb3dzU2lnbmFsID0gc2lnbmFsPFNldDxzdHJpbmcgfCBudW1iZXI+PihuZXcgU2V0KCkpO1xuICBwcml2YXRlIHNlbGVjdGVkUm93c1NpZ25hbCA9IHNpZ25hbDxTZXQ8c3RyaW5nIHwgbnVtYmVyPj4obmV3IFNldCgpKTtcbiAgLy8gcHJpdmF0ZSBlZGl0ZWREYXRhU2lnbmFsID0gc2lnbmFsPE1hcDxzdHJpbmcgfCBudW1iZXIsIEVkaXRlZERhdGE8VD4+PihcbiAgLy8gICBuZXcgTWFwKClcbiAgLy8gKTtcbiAgcHJpdmF0ZSB1bkVkaXRlZERhdGFTaWduYWwgPSBzaWduYWw8TWFwPHN0cmluZyB8IG51bWJlciwgVD4+KG5ldyBNYXAoKSk7XG4gIHByaXZhdGUgZm9ybUdyb3Vwc1NpZ25hbCA9IHNpZ25hbDxNYXA8c3RyaW5nIHwgbnVtYmVyLCBGb3JtR3JvdXA+PihuZXcgTWFwKCkpO1xuXG4gIC8vIGNvbHVtbnNTaWduYWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbHVtbnMoKSk7XG5cbiAgZGlzcGxheUNvbHVtbnM6IFNpZ25hbDxDb2x1bW5EZWZpbml0aW9uPFQ+W10+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5zKCkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdUZW1wbGF0ZSA9IHRoaXMuY29sdW1uVGVtcGxhdGVzKCkuZmluZChcbiAgICAgICAgICAodCkgPT4gdC5jb2x1bW5JZCA9PT0gY29sdW1uLmlkXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtYXRjaGluZ1RlbXBsYXRlKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0ZvdW5kIG1hdGNoaW5nIHRlbXBsYXRlOicsIG1hdGNoaW5nVGVtcGxhdGUpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbFRlbXBsYXRlID8/IGNvbHVtbi5jZWxsVGVtcGxhdGUsXG4gICAgICAgICAgICBjZWxsRWRpdFRlbXBsYXRlOlxuICAgICAgICAgICAgICBtYXRjaGluZ1RlbXBsYXRlLmNlbGxFZGl0VGVtcGxhdGUgPz8gY29sdW1uLmNlbGxFZGl0VGVtcGxhdGUsXG4gICAgICAgICAgICBoZWFkZXJUZW1wbGF0ZTpcbiAgICAgICAgICAgICAgbWF0Y2hpbmdUZW1wbGF0ZS5oZWFkZXJUZW1wbGF0ZSA/PyBjb2x1bW4uaGVhZGVyVGVtcGxhdGUsXG4gICAgICAgICAgICBmb290ZXJUZW1wbGF0ZTpcbiAgICAgICAgICAgICAgbWF0Y2hpbmdUZW1wbGF0ZS5mb290ZXJUZW1wbGF0ZSA/PyBjb2x1bW4uZm9vdGVyVGVtcGxhdGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRhYmxlRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEoKS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIGNvbnN0IGRhdGFLZXkgPSB0aGlzLl9nZXRSb3dJZEJ5RGF0YUtleShpdGVtKTtcbiAgICAgICAgaWYgKGRhdGFLZXkpIHtcbiAgICAgICAgICBrZXkgPSBkYXRhS2V5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IGluZGV4IGFzIERhdGFXaXRoS2V5PFQ+Wydfa2V5J107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvcmlnaW5hbERhdGE6IGl0ZW0sXG4gICAgICAgICAgX2tleToga2V5LFxuICAgICAgICAgIF9rZXlfcHJvcDogdGhpcy5kYXRhS2V5KCkgPz8gJ19pbmRleCcsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhc0Zvb3RlciA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucygpLnNvbWUoKGNvbCkgPT4gY29sLmZvb3RlclRlbXBsYXRlICE9PSB1bmRlZmluZWQpXG4gICk7XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgcm93XG4gIHByaXZhdGUgX2dldFJvd0lkQnlEYXRhS2V5KHJvdzogVCk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5kYXRhS2V5KCk7XG4gICAgaWYgKGtleSkge1xuICAgICAgY29uc3QgdmFsdWUgPSByb3dba2V5XTtcblxuICAgICAgLy8gQ29udmVydCB0byBzdHJpbmcgb3IgbnVtYmVyIGlmIHBvc3NpYmxlLCBvdGhlcndpc2Ugc3RyaW5naWZ5XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFR5cGUgZ3VhcmQgbWV0aG9kIHRvIGNoZWNrIGZvciBncm91cCByb3dzXG4gIGlzR3JvdXBSb3cocm93OiBUKTogcm93IGlzIFQgJiB7IGlzR3JvdXBSb3c6IHRydWU7IGdyb3VwVGl0bGU6IGFueSB9IHtcbiAgICByZXR1cm4gISEocm93IGFzIGFueSkuaXNHcm91cFJvdztcbiAgfVxuXG4gIHRyYWNrQnlSb3dLZXkoaW5kZXg6IG51bWJlciwgcm93OiBhbnkpIHtcbiAgICByZXR1cm4gcm93Ll9rZXk7XG4gIH1cblxuICAvLyBDb21wdXRlZCBwcm9wZXJ0eSBmb3IgZ3JvdXBlZCBkYXRhXG5cbiAgZ3JvdXBlZERhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmdyb3VwQnkoKSkgcmV0dXJuIHRoaXMudGFibGVEYXRhKCkgYXMgR3JvdXBlZERhdGFSb3c8VD5bXTtcblxuICAgIGNvbnN0IGdldEdyb3VwVmFsdWUgPVxuICAgICAgdHlwZW9mIHRoaXMuZ3JvdXBCeSgpID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gKHRoaXMuZ3JvdXBCeSgpIGFzIChyb3c6IFQpID0+IGFueSlcbiAgICAgICAgOiAocm93OiBUKSA9PiByb3dbdGhpcy5ncm91cEJ5KCkgYXMga2V5b2YgVF07XG5cbiAgICBjb25zdCBncm91cHMgPSBuZXcgTWFwPGFueSwgRGF0YVdpdGhLZXk8VD5bXT4oKTtcblxuICAgIHRoaXMudGFibGVEYXRhKCkuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBpZiAoZ2V0R3JvdXBWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGdyb3VwVmFsdWUgPSBnZXRHcm91cFZhbHVlKHJvdy5vcmlnaW5hbERhdGEpO1xuICAgICAgICBjb25zdCBleGlzdGluZ0dyb3VwID0gZ3JvdXBzLmdldChncm91cFZhbHVlKSB8fCBbXTtcbiAgICAgICAgZ3JvdXBzLnNldChncm91cFZhbHVlLCBbLi4uZXhpc3RpbmdHcm91cCwgcm93XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBncm91cGVkRGF0YUFycmF5OiBHcm91cGVkRGF0YVJvdzxUPltdID0gW107XG5cbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXBSb3dzLCBncm91cFZhbHVlKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgZ3JvdXAgaGVhZGVyIHJvd1xuICAgICAgY29uc3QgZ3JvdXBSb3c6IEdyb3VwZWREYXRhUm93PFQ+ID0ge1xuICAgICAgICAuLi4oe30gYXMgRGF0YVdpdGhLZXk8VD4pLCAvLyBDcmVhdGUgZW1wdHkgb2JqZWN0IG9mIHR5cGUgVCBhcyBiYXNlXG4gICAgICAgIF9rZXk6IGBncm91cC0ke2dyb3VwVmFsdWV9YCxcbiAgICAgICAgaXNHcm91cFJvdzogdHJ1ZSxcbiAgICAgICAgZ3JvdXBWYWx1ZSxcbiAgICAgICAgZ3JvdXBUaXRsZTogZ3JvdXBWYWx1ZSxcbiAgICAgIH07XG5cbiAgICAgIGdyb3VwZWREYXRhQXJyYXkucHVzaChncm91cFJvdyk7XG4gICAgICAvLyBBZGQgcmVndWxhciByb3dzIHdpdGggdGhlIG9wdGlvbmFsIGlzR3JvdXBSb3cgcHJvcGVydHkgKHVuZGVmaW5lZCBieSBkZWZhdWx0KVxuICAgICAgZ3JvdXBlZERhdGFBcnJheS5wdXNoKC4uLihncm91cFJvd3MgYXMgR3JvdXBlZERhdGFSb3c8VD5bXSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdyb3VwZWREYXRhQXJyYXk7XG4gIH0pO1xuXG4gIGdldENlbGxWYWx1ZSA9IChyb3c6IFQsIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPik6IGFueSA9PiB7XG4gICAgLy8gRm9yIGdyb3VwIHJvd3MsIHJldHVybiB0aGUgZ3JvdXAgdGl0bGUgaWYgaXQgZXhpc3RzXG4gICAgaWYgKHRoaXMuaXNHcm91cFJvdyhyb3cpKSB7XG4gICAgICByZXR1cm4gKHJvdyBhcyBhbnkpLmdyb3VwVGl0bGU7XG4gICAgfVxuXG4gICAgLy8gRXhpc3RpbmcgbG9naWMgZm9yIG5vcm1hbCByb3dzXG4gICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSkge1xuICAgICAgcmV0dXJuIHJvd1tjb2x1bW4uYWNjZXNzb3JLZXldO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uLmFjY2Vzc29yRm4gPyBjb2x1bW4uYWNjZXNzb3JGbihyb3cpIDogdW5kZWZpbmVkO1xuICB9O1xuXG4gIHB1YmxpYyBpc1Jvd0VkaXRpbmcgPSAocm93S2V5OiBEYXRhV2l0aEtleTxUPlsnX2tleSddKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ1Jvd3NTaWduYWwoKS5oYXMocm93S2V5KTtcbiAgfTtcblxuICBwdWJsaWMgdG9nZ2xlUm93RWRpdCA9IChyb3dJZDogRGF0YVdpdGhLZXk8VD5bJ19rZXknXSkgPT4ge1xuICAgIGxldCBkYXRhOiBEYXRhV2l0aEtleTxUPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBsZXQgaW5kZXg6IG51bWJlciA9IC0xO1xuXG4gICAgdGhpcy50YWJsZURhdGEoKS5mb3JFYWNoKChkYXR1bSwgaSkgPT4ge1xuICAgICAgaWYgKGRhdHVtLl9rZXkgPT09IHJvd0lkKSB7XG4gICAgICAgIGRhdGEgPSBkYXR1bTtcbiAgICAgICAgaW5kZXggPSBpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCAmJiBpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLnRvZ2dsZVJvd0VkaXRJbnRlcm5hbChkYXRhLCBpbmRleCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgdG9nZ2xlUm93RWRpdEludGVybmFsID0gKHJvdzogRGF0YVdpdGhLZXk8VD4sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICB0aGlzLmVkaXRpbmdSb3dzU2lnbmFsLnVwZGF0ZSgoc2V0KSA9PiB7XG4gICAgICBjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHNldCk7XG4gICAgICBpZiAobmV3U2V0Lmhhcyhyb3cuX2tleSkpIHtcbiAgICAgICAgbmV3U2V0LmRlbGV0ZShyb3cuX2tleSk7XG4gICAgICAgIHRoaXMuc2F2ZVJvdyhyb3cuX2tleSwgaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3U2V0LmFkZChyb3cuX2tleSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUVkaXRlZERhdGEocm93KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdTZXQ7XG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRWRpdGVkRGF0YShyb3c6IERhdGFXaXRoS2V5PFQ+KSB7XG4gICAgY29uc3Qgcm93SWQgPSByb3cuX2tleTtcbiAgICB0aGlzLnVuRWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgICAgbmV3TWFwLnNldChyb3dJZCwgeyAuLi5yb3cub3JpZ2luYWxEYXRhIH0pO1xuICAgICAgcmV0dXJuIG5ld01hcDtcbiAgICB9KTtcbiAgICBjb25zdCBmb3JtR3JvdXBDb25maWcgPSB0aGlzLmZvcm1Hcm91cENvbmZpZygpO1xuICAgIGlmIChmb3JtR3JvdXBDb25maWcpIHtcbiAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoXG4gICAgICAgIGZvcm1Hcm91cENvbmZpZy5jb250cm9scyxcbiAgICAgICAgZm9ybUdyb3VwQ29uZmlnLnZhbGlkYXRvck9yT3B0cyxcbiAgICAgICAgZm9ybUdyb3VwQ29uZmlnLmFzeW5jVmFsaWRhdG9yXG4gICAgICApO1xuICAgICAgZm9ybUdyb3VwLnBhdGNoVmFsdWUocm93IGFzIGFueSk7XG4gICAgICB0aGlzLmZvcm1Hcm91cHNTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgICAgICBuZXdNYXAuc2V0KHJvd0lkLCBmb3JtR3JvdXApO1xuICAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlUm93KHJvd0lkOiBzdHJpbmcgfCBudW1iZXIsIHJvd0luZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBlZGl0ZWRGb3JtID0gdGhpcy5mb3JtR3JvdXBzU2lnbmFsKCkuZ2V0KHJvd0lkKTtcbiAgICBjb25zdCB1bkVkaXRlZERhdGEgPSB0aGlzLnVuRWRpdGVkRGF0YVNpZ25hbCgpLmdldChyb3dJZCk7XG5cbiAgICAvLyBpZiAoZWRpdGVkRGF0YSkge1xuICAgIC8vICAgY29uc3Qgb3JpZ2luYWxSb3cgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbmQoKHJvdykgPT4gcm93Ll9rZXkgPT09IHJvd0lkKTtcbiAgICAvLyAgIGlmIChvcmlnaW5hbFJvdykge1xuICAgIC8vICAgICBjb25zdCB1cGRhdGVkUm93ID0geyAuLi5vcmlnaW5hbFJvdywgLi4uZWRpdGVkRGF0YSB9O1xuICAgIC8vICAgICB0aGlzLnJvd1NhdmUuZW1pdCh1cGRhdGVkUm93KTtcbiAgICAvLyAgICAgdGhpcy5lZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgLy8gICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgIC8vICAgICAgIG5ld01hcC5kZWxldGUocm93SWQpO1xuICAgIC8vICAgICAgIHJldHVybiBuZXdNYXA7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGNvbnNvbGUubG9nKHRoaXMuZm9ybUdyb3VwQ29uZmlnKCkpO1xuICAgIGNvbnNvbGUubG9nKGVkaXRlZEZvcm0pO1xuICAgIGNvbnNvbGUubG9nKHVuRWRpdGVkRGF0YSk7XG5cbiAgICBpZiAoZWRpdGVkRm9ybSkge1xuICAgICAgZWRpdGVkRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgZWRpdGVkRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3Vwc1NpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgICAgIG5ld01hcC5kZWxldGUocm93SWQpO1xuICAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJvd1NhdmUuZW1pdCh7XG4gICAgICAgIGluZGV4OiByb3dJbmRleCxcbiAgICAgICAga2V5OiByb3dJZCxcbiAgICAgICAgZGF0YTogZWRpdGVkRm9ybS52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh1bkVkaXRlZERhdGEpIHtcbiAgICAgIHRoaXMudW5FZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAgICAgbmV3TWFwLmRlbGV0ZShyb3dJZCk7XG4gICAgICAgIHJldHVybiBuZXdNYXA7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucm93UmV2ZXJ0LmVtaXQoe1xuICAgICAgICBpbmRleDogcm93SW5kZXgsXG4gICAgICAgIGtleTogcm93SWQsXG4gICAgICAgIGRhdGE6IHVuRWRpdGVkRGF0YSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNSb3dTZWxlY3RlZCA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuaGFzKHJvd0lkKTtcbiAgfTtcblxuICBwcml2YXRlIHRvZ2dsZVJvd1NlbGVjdGlvbiA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwudXBkYXRlKChzZXQpID0+IHtcbiAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQoc2V0KTtcbiAgICAgIGlmIChuZXdTZXQuaGFzKHJvd0lkKSkge1xuICAgICAgICBuZXdTZXQuZGVsZXRlKHJvd0lkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1NldC5hZGQocm93SWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICByZXR1cm4gbmV3U2V0O1xuICAgIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgYWxsUm93c1NlbGVjdGVkID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IG5vbkdyb3VwUm93cyA9IHRoaXMuZGF0YSgpLmZpbHRlcigocm93KSA9PiAhdGhpcy5pc0dyb3VwUm93KHJvdykpO1xuICAgIHJldHVybiAoXG4gICAgICBub25Hcm91cFJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwoKS5zaXplID09PSBub25Hcm91cFJvd3MubGVuZ3RoXG4gICAgKTtcbiAgfTtcblxuICBwcml2YXRlIHNvbWVSb3dzU2VsZWN0ZWQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3Qgbm9uR3JvdXBSb3dzID0gdGhpcy5kYXRhKCkuZmlsdGVyKChyb3cpID0+ICF0aGlzLmlzR3JvdXBSb3cocm93KSk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuc2l6ZSA+IDAgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuc2l6ZSA8IG5vbkdyb3VwUm93cy5sZW5ndGhcbiAgICApO1xuICB9O1xuXG4gIHByaXZhdGUgdG9nZ2xlQWxsUm93cyA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5hbGxSb3dzU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwuc2V0KG5ldyBTZXQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vbkdyb3VwUm93cyA9IHRoaXMudGFibGVEYXRhKCkuZmlsdGVyKFxuICAgICAgICAocm93KSA9PiAhdGhpcy5pc0dyb3VwUm93KHJvdy5vcmlnaW5hbERhdGEpXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwuc2V0KG5ldyBTZXQobm9uR3JvdXBSb3dzLm1hcCgocm93KSA9PiByb3cuX2tleSkpKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMudGFibGVEYXRhKCkuZmlsdGVyKChyb3cpID0+XG4gICAgICB0aGlzLnNlbGVjdGVkUm93c1NpZ25hbCgpLmhhcyhyb3cuX2tleSlcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoXG4gICAgICBzZWxlY3RlZFJvd3MubWFwKCh7IG9yaWdpbmFsRGF0YSB9KSA9PiBvcmlnaW5hbERhdGEpXG4gICAgKTtcbiAgfVxuXG4gIGdldEhlYWRlckNvbnRleHQoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogY29sdW1uLFxuICAgICAgY29sdW1uLFxuICAgICAgYWxsUm93c1NlbGVjdGVkOiB0aGlzLmFsbFJvd3NTZWxlY3RlZCxcbiAgICAgIHNvbWVSb3dzU2VsZWN0ZWQ6IHRoaXMuc29tZVJvd3NTZWxlY3RlZCxcbiAgICAgIHRvZ2dsZUFsbFJvd3M6IHRoaXMudG9nZ2xlQWxsUm93cyxcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlRWRpdGVkVmFsdWUoXG4gICAgcm93SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4sXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICAvLyB0aGlzLmVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAvLyAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgIGNvbnN0IHJvd0RhdGEgPSBuZXdNYXAuZ2V0KHJvd0lkKSB8fCAoe30gYXMgRWRpdGVkRGF0YTxUPik7XG4gICAgLy8gICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSB7XG4gICAgLy8gICAgIG5ld01hcC5zZXQocm93SWQsIHsgLi4ucm93RGF0YSwgW2NvbHVtbi5hY2Nlc3NvcktleV06IHZhbHVlIH0pO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgY29uc29sZS53YXJuKFxuICAgIC8vICAgICAgICdDYW5ub3QgdXBkYXRlIHZhbHVlIGZvciBjb2x1bW4gd2l0aG91dCBhY2Nlc3NvcktleTonLFxuICAgIC8vICAgICAgIGNvbHVtbi5pZFxuICAgIC8vICAgICApO1xuICAgIC8vICAgfVxuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHVwZGF0ZUVkaXRlZFZhbHVlRm4oXG4gICAgcm93SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICB2YWx1ZUZuOiAodmFsdWU6IGFueSkgPT4gVCxcbiAgICB2YWx1ZTogYW55XG4gICkge1xuICAgIC8vIHRoaXMuZWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgIC8vICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgIC8vICAgY29uc3Qgcm93RGF0YSA9IG5ld01hcC5nZXQocm93SWQpIHx8ICh7fSBhcyBFZGl0ZWREYXRhPFQ+KTtcbiAgICAvLyAgIG5ld01hcC5zZXQocm93SWQsIHsgLi4ucm93RGF0YSwgLi4udmFsdWVGbih2YWx1ZSkgfSk7XG4gICAgLy8gICByZXR1cm4gbmV3TWFwO1xuICAgIC8vIH0pO1xuICB9XG5cbiAgdXBkYXRlRWRpdGVkRGF0YShyb3dJZDogc3RyaW5nIHwgbnVtYmVyLCBkYXRhOiBQYXJ0aWFsPFQ+KSB7XG4gICAgLy8gdGhpcy5lZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgLy8gICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgLy8gICBjb25zdCByb3dEYXRhID0gbmV3TWFwLmdldChyb3dJZCkgfHwgKHt9IGFzIEVkaXRlZERhdGE8VD4pO1xuICAgIC8vICAgbmV3TWFwLnNldChyb3dJZCwgeyAuLi5yb3dEYXRhLCAuLi5kYXRhIH0pO1xuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHVwZGF0ZU5lc3RlZEVkaXRlZFZhbHVlKFxuICAgIHJvd0lkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LFxuICAgIG5lc3RlZEZpZWxkOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICAvLyB0aGlzLmVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAvLyAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgIGNvbnN0IHJvd0RhdGEgPSBuZXdNYXAuZ2V0KHJvd0lkKSB8fCAoe30gYXMgRWRpdGVkRGF0YTxUPik7XG4gICAgLy8gICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSB7XG4gICAgLy8gICAgIGNvbnN0IGNvbHVtbkRhdGEgPSAocm93RGF0YVtjb2x1bW4uYWNjZXNzb3JLZXldIGFzIGFueSkgfHwge307XG4gICAgLy8gICAgIG5ld01hcC5zZXQocm93SWQsIHtcbiAgICAvLyAgICAgICAuLi5yb3dEYXRhLFxuICAgIC8vICAgICAgIFtjb2x1bW4uYWNjZXNzb3JLZXldOiB7XG4gICAgLy8gICAgICAgICAuLi5jb2x1bW5EYXRhLFxuICAgIC8vICAgICAgICAgW25lc3RlZEZpZWxkXTogdmFsdWUsXG4gICAgLy8gICAgICAgfSxcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICB9IGVsc2Uge1xuICAgIC8vICAgICBjb25zb2xlLndhcm4oXG4gICAgLy8gICAgICAgJ0Nhbm5vdCB1cGRhdGUgbmVzdGVkIHZhbHVlIGZvciBjb2x1bW4gd2l0aG91dCBhY2Nlc3NvcktleTonLFxuICAgIC8vICAgICAgIGNvbHVtbi5pZFxuICAgIC8vICAgICApO1xuICAgIC8vICAgfVxuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIGdldENlbGxDb250ZXh0KFxuICAgIHJvdzogRGF0YVdpdGhLZXk8VD4sXG4gICAgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LFxuICAgIHJvd0luZGV4OiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3Qgcm93SWQgPSByb3cuX2tleTtcbiAgICBjb25zdCBpc0VkaXRpbmcgPSB0aGlzLmlzUm93RWRpdGluZyhyb3cuX2tleSk7XG4gICAgLy8gY29uc3QgZWRpdGVkRGF0YSA9IHRoaXMuZWRpdGVkRGF0YVNpZ25hbCgpLmdldChyb3dJZCk7XG4gICAgY29uc3QgZWRpdGVkRm9ybSA9IHRoaXMuZm9ybUdyb3Vwc1NpZ25hbCgpLmdldChyb3dJZCk7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSBlZGl0ZWRGb3JtPy5nZXQoY29sdW1uLmZvcm1Db250cm9sTmFtZSB8fCAnJyk7XG5cbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoaXNFZGl0aW5nKSB7XG4gICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgdmFsdWUgPSBmb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5nZXRDZWxsVmFsdWUocm93Lm9yaWdpbmFsRGF0YSwgY29sdW1uKTtcbiAgICAgIH1cbiAgICAgIC8vIGVsc2UgaWYgKGVkaXRlZERhdGEpIHtcbiAgICAgIC8vICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSAmJiBjb2x1bW4uYWNjZXNzb3JLZXkgaW4gZWRpdGVkRGF0YSkge1xuICAgICAgLy8gICAgIC8vIElmIGNvbHVtbiBoYXMgYW4gYWNjZXNzb3JLZXkgYW5kIGl0IGV4aXN0cyBpbiBlZGl0ZWQgZGF0YSwgdXNlIHRoYXRcbiAgICAgIC8vICAgICB2YWx1ZSA9IGVkaXRlZERhdGFbY29sdW1uLmFjY2Vzc29yS2V5XTtcbiAgICAgIC8vICAgfSBlbHNlIGlmIChjb2x1bW4uYWNjZXNzb3JGbikge1xuICAgICAgLy8gICAgIC8vIElmIGNvbHVtbiBoYXMgYW4gYWNjZXNzb3JGbiwgYXBwbHkgaXQgdG8gdGhlIGVkaXRlZCBkYXRhXG4gICAgICAvLyAgICAgdmFsdWUgPSBjb2x1bW4uYWNjZXNzb3JGbih7IC4uLnJvdywgLi4uZWRpdGVkRGF0YSB9KTtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICAvLyBGYWxsYmFjayB0byBnZXR0aW5nIHRoZSB2YWx1ZSBmcm9tIHRoZSBvcmlnaW5hbCByb3dcbiAgICAgIC8vICAgICB2YWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdywgY29sdW1uKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdy5vcmlnaW5hbERhdGEsIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogdmFsdWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHJvdzogcm93Lm9yaWdpbmFsRGF0YSxcbiAgICAgIGNvbHVtbixcbiAgICAgIHJvd0luZGV4LFxuICAgICAgcm93SWQsXG4gICAgICBpc0VkaXRpbmcsXG4gICAgICBmb3JtQ29udHJvbCxcbiAgICAgIGlzU2VsZWN0ZWQ6IHRoaXMuaXNSb3dTZWxlY3RlZChyb3dJZCksXG4gICAgICB0b2dnbGVSb3dTZWxlY3Rpb246ICgpID0+IHRoaXMudG9nZ2xlUm93U2VsZWN0aW9uKHJvd0lkKSxcbiAgICAgIHRvZ2dsZVJvd0VkaXQ6ICgpID0+IHRoaXMudG9nZ2xlUm93RWRpdEludGVybmFsKHJvdywgcm93SW5kZXgpLFxuICAgICAgZGVsZXRlUm93OiAoKSA9PiB0aGlzLmRlbGV0ZVJvdyhyb3dJZCksXG4gICAgICB1cGRhdGVWYWx1ZTogKG5ld1ZhbHVlOiBhbnkpID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkVmFsdWUocm93SWQsIGNvbHVtbiwgbmV3VmFsdWUpLFxuICAgICAgdXBkYXRlTmVzdGVkVmFsdWU6IChuZXN0ZWRGaWVsZDogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZU5lc3RlZEVkaXRlZFZhbHVlKHJvd0lkLCBjb2x1bW4sIG5lc3RlZEZpZWxkLCBuZXdWYWx1ZSksXG4gICAgICB1cGRhdGVWYWx1ZUZuOiAodmFsdWVGbjogKHZhbHVlOiBhbnkpID0+IFQsIG5ld1ZhbHVlOiBhbnkpID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkVmFsdWVGbihyb3dJZCwgdmFsdWVGbiwgbmV3VmFsdWUpLFxuICAgICAgdXBkYXRlRGF0YTogKG5ld0RhdGE6IFBhcnRpYWw8VD4pID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkRGF0YShyb3dJZCwgbmV3RGF0YSksXG4gICAgfTtcbiAgfVxuXG4gIGRlbGV0ZVJvdyA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgcm93VG9EZWxldGUgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbmQoKHJvdykgPT4gcm93Ll9rZXkgPT09IHJvd0lkKTtcbiAgICBpZiAocm93VG9EZWxldGUpIHtcbiAgICAgIHRoaXMucm93RGVsZXRlLmVtaXQocm93VG9EZWxldGUub3JpZ2luYWxEYXRhKTtcbiAgICB9XG4gIH07XG5cbiAgZ2V0Rm9vdGVyQ29udGV4dChjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiBjb2x1bW4sXG4gICAgICBjb2x1bW4sXG4gICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIGdldFRhYmxlU3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZyxcbiAgICAgIGZvbnRGYW1pbHk6IHRoaXMuc3R5bGVDb25maWcuZm9udEZhbWlseSxcbiAgICAgIGZvbnRTaXplOiB0aGlzLnN0eWxlQ29uZmlnLmZvbnRTaXplLFxuICAgICAgd2hpdGVTcGFjZTogdGhpcy5zdHlsZUNvbmZpZy53aGl0ZVNwYWNlLFxuICAgICAgbWFyZ2luOiB0aGlzLnN0eWxlQ29uZmlnLm1hcmdpbixcbiAgICAgIGJvcmRlcjogdGhpcy5zdHlsZUNvbmZpZy5ib3JkZXIsXG4gICAgICBib3JkZXJDb2xsYXBzZTogdGhpcy5zdHlsZUNvbmZpZy5ib3JkZXJDb2xsYXBzZSxcbiAgICAgIGJvcmRlclNwYWNpbmc6IHRoaXMuc3R5bGVDb25maWcuYm9yZGVyU3BhY2luZyxcbiAgICAgIHRhYmxlTGF5b3V0OiB0aGlzLnN0eWxlQ29uZmlnLnRhYmxlTGF5b3V0LFxuICAgICAgd2lkdGg6IHRoaXMuc3R5bGVDb25maWcud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGdldEhlYWRlclN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc3R5bGVDb25maWcuaGVhZGVyLFxuICAgICAgcG9zaXRpb246IHRoaXMuc3R5bGVDb25maWcuaGVhZGVyPy5zdGlja3lUb3AgPyAnc3RpY2t5JyA6ICdzdGF0aWMnLFxuICAgICAgdG9wOiB0aGlzLnN0eWxlQ29uZmlnLmhlYWRlcj8uc3RpY2t5VG9wID8gJzAnIDogJ2F1dG8nLFxuICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmhlYWRlcj8uekluZGV4IHx8ICdhdXRvJyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0Rm9vdGVyU3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZy5mb290ZXIsXG4gICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5mb290ZXI/LnN0aWNreUJvdHRvbSA/ICdzdGlja3knIDogJ3N0YXRpYycsXG4gICAgICBib3R0b206IHRoaXMuc3R5bGVDb25maWcuZm9vdGVyPy5zdGlja3lCb3R0b20gPyAnMCcgOiAnYXV0bycsXG4gICAgICB6SW5kZXg6IHRoaXMuc3R5bGVDb25maWcuZm9vdGVyPy56SW5kZXggfHwgJ2F1dG8nLFxuICAgIH07XG4gIH1cblxuICBnZXRSb3dTdHlsZShyb3dJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCByb3dTdHlsZXMgPSB0aGlzLnN0eWxlQ29uZmlnLnJvd3M7XG4gICAgaWYgKHJvd1N0eWxlcyAmJiAnZXZlbicgaW4gcm93U3R5bGVzICYmICdvZGQnIGluIHJvd1N0eWxlcykge1xuICAgICAgcmV0dXJuIHJvd0luZGV4ICUgMiA9PT0gMCA/IHJvd1N0eWxlcy5ldmVuIDogcm93U3R5bGVzLm9kZDtcbiAgICB9IGVsc2UgaWYgKHJvd1N0eWxlcyAmJiAnbnRoJyBpbiByb3dTdHlsZXMgJiYgcm93U3R5bGVzLm50aCkge1xuICAgICAgY29uc3QgeyBpbnRlcnZhbCwgc3R5bGUgfSA9IHJvd1N0eWxlcy5udGg7XG4gICAgICByZXR1cm4gKHJvd0luZGV4ICsgMSkgJSAoaW50ZXJ2YWwgfHwgMSkgPT09IDAgPyBzdHlsZSA6IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcm93U3R5bGVzIHx8IHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldENlbGxTdHlsZShyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBpc0ZpcnN0Q29sdW1uID0gY29sSW5kZXggPT09IDA7XG4gICAgY29uc3QgaXNMYXN0Q29sdW1uID0gY29sSW5kZXggPT09IHRoaXMuZGlzcGxheUNvbHVtbnMoKS5sZW5ndGggLSAxO1xuXG4gICAgbGV0IGNlbGxTdHlsZSA9IHsgLi4udGhpcy5zdHlsZUNvbmZpZy5jZWxscyB9O1xuXG4gICAgaWYgKGlzRmlyc3RDb2x1bW4pIHtcbiAgICAgIGNlbGxTdHlsZSA9IHtcbiAgICAgICAgLi4uY2VsbFN0eWxlLFxuICAgICAgICAuLi50aGlzLnN0eWxlQ29uZmlnLmZpcnN0Q29sdW1uLFxuICAgICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5maXJzdENvbHVtbj8uc3RpY2t5TGVmdFxuICAgICAgICAgID8gJ3N0aWNreSdcbiAgICAgICAgICA6ICdzdGF0aWMnLFxuICAgICAgICBsZWZ0OiB0aGlzLnN0eWxlQ29uZmlnLmZpcnN0Q29sdW1uPy5zdGlja3lMZWZ0ID8gJzAnIDogJ2F1dG8nLFxuICAgICAgICB6SW5kZXg6IHRoaXMuc3R5bGVDb25maWcuZmlyc3RDb2x1bW4/LnpJbmRleCB8fCAnYXV0bycsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNMYXN0Q29sdW1uKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7XG4gICAgICAgIC4uLmNlbGxTdHlsZSxcbiAgICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uLFxuICAgICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uPy5zdGlja3lSaWdodFxuICAgICAgICAgID8gJ3N0aWNreSdcbiAgICAgICAgICA6ICdzdGF0aWMnLFxuICAgICAgICByaWdodDogdGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uPy5zdGlja3lSaWdodCA/ICcwJyA6ICdhdXRvJyxcbiAgICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmxhc3RDb2x1bW4/LnpJbmRleCB8fCAnYXV0bycsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAvLyBBcHBseSBib2R5IHN0eWxlcyB0byBhbGwgY2VsbHNcbiAgICAgIGNlbGxTdHlsZSA9IHsgLi4uY2VsbFN0eWxlLCAuLi50aGlzLnN0eWxlQ29uZmlnLmJvZHkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2VsbFN0eWxlID0geyAuLi50aGlzLnN0eWxlQ29uZmlnLmhlYWRlciB9O1xuICAgIH1cblxuICAgIHJldHVybiBjZWxsU3R5bGU7XG4gIH1cbn1cblxuLy8gRGVmYXVsdCBzdHlsZXNcbmNvbnN0IGRlZmF1bHRUYWJsZVN0eWxlczogVGFibGVTdHlsZXMgPSB7XG4gIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBib3hTaGFkb3c6ICcwIDJweCA0cHggcmdiYSgwLDAsMCwwLjEpJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVhZGVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y1ZjVmNScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGNvbG9yOiAnIzMzMycsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgcGFkZGluZzogJzEycHggMTZweCcsXG4gICAgYm9yZGVyQm90dG9tOiAnMnB4IHNvbGlkICNlMGUwZTAnLFxuICB9LFxuICByb3dzOiB7XG4gICAgZXZlbjoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgfSxcbiAgICBvZGQ6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWY5ZjknLFxuICAgIH0sXG4gICAgbnRoOiB7XG4gICAgICBpbnRlcnZhbDogNSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmMGYwZjAnLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBjZWxsczoge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgIGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgfSxcbiAgZm9vdGVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y1ZjVmNScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGNvbG9yOiAnIzMzMycsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgcGFkZGluZzogJzEycHggMTZweCcsXG4gICAgYm9yZGVyVG9wOiAnMnB4IHNvbGlkICNlMGUwZTAnLFxuICB9LFxufTtcbiIsIkBpZiAodXNlVmlydHVhbFNjcm9sbCgpKSB7XG48Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gIFtpdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemUoKVwiXG4gIGNsYXNzPVwidmlydHVhbC1zY3JvbGwtdmlld3BvcnRcIlxuICBbc3R5bGUuaGVpZ2h0LnB4XT1cInZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpICogMTBcIlxuPlxuICA8dGFibGUgW25nU3R5bGVdPVwiZ2V0VGFibGVTdHlsZSgpXCI+XG4gICAgPHRoZWFkPlxuICAgICAgPCEtLSA8dHIgW25nU3R5bGVdPVwiZ2V0SGVhZGVyU3R5bGUoKVwiPlxuICAgICAgPHRoIGNvbHNwYW49XCIyXCIgc2NvcGU9XCJjb2xncm91cFwiPkdyb3VwIDE8L3RoPlxuICAgICAgPHRoIGNvbHNwYW49XCIxXCIgc2NvcGU9XCJjb2xncm91cFwiPkdyb3VwIDI8L3RoPlxuICAgIDwvdHI+IC0tPlxuXG4gICAgICA8dHIgW25nU3R5bGVdPVwiZ2V0SGVhZGVyU3R5bGUoKVwiPlxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgZGlzcGxheUNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmlkKSB7XG4gICAgICAgIDx0aCBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUoLTEsICRpbmRleClcIj5cbiAgICAgICAgICBAaWYgKGNvbHVtbi5oZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0SGVhZGVyQ29udGV4dChjb2x1bW4pXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAge3sgY29sdW1uLmhlYWRlciB9fVxuICAgICAgICAgIH1cbiAgICAgICAgPC90aD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keT5cbiAgICAgIDx0clxuICAgICAgICAqY2RrVmlydHVhbEZvcj1cIlxuICAgICAgICAgIGxldCByb3cgb2YgdGFibGVEYXRhKCk7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeVJvd0tleTtcbiAgICAgICAgICBsZXQgcm93SW5kZXggPSBpbmRleFxuICAgICAgICBcIlxuICAgICAgICBbbmdTdHlsZV09XCJnZXRSb3dTdHlsZShyb3dJbmRleClcIlxuICAgICAgPlxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgZGlzcGxheUNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmlkOyBsZXQgY29sSW5kZXggPVxuICAgICAgICAkaW5kZXgpIHtcbiAgICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZShyb3dJbmRleCwgY29sSW5kZXgpXCI+XG4gICAgICAgICAgQGlmIChpc1Jvd0VkaXRpbmcocm93Ll9rZXkpICYmIGNvbHVtbi5jZWxsRWRpdFRlbXBsYXRlKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxFZGl0VGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENlbGxDb250ZXh0KHJvdywgY29sdW1uLCByb3dJbmRleClcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBlbHNlIGlmIChjb2x1bW4uY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Q2VsbENvbnRleHQocm93LCBjb2x1bW4sIHJvd0luZGV4KVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBjb2x1bW4pIH19XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG5cbiAgICBAaWYgKGhhc0Zvb3RlcigpKSB7XG4gICAgPHRmb290PlxuICAgICAgPHRyIFtuZ1N0eWxlXT1cImdldEZvb3RlclN0eWxlKClcIj5cbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgICA8dGQgW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKC0xLCAkaW5kZXgpXCI+XG4gICAgICAgICAgQGlmIChjb2x1bW4uZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uZm9vdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldEZvb3RlckNvbnRleHQoY29sdW1uKVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICA8L3Rmb290PlxuXG4gICAgfVxuICA8L3RhYmxlPlxuPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG59IEBlbHNlIHtcbjx0YWJsZSBbbmdTdHlsZV09XCJnZXRUYWJsZVN0eWxlKClcIj5cbiAgPHRoZWFkPlxuICAgIDwhLS0gPHRyIFtuZ1N0eWxlXT1cImdldEhlYWRlclN0eWxlKClcIj5cbiAgICAgIDx0aCBjb2xzcGFuPVwiMlwiIHNjb3BlPVwiY29sZ3JvdXBcIj5Hcm91cCAxPC90aD5cbiAgICAgIDx0aCBjb2xzcGFuPVwiMVwiIHNjb3BlPVwiY29sZ3JvdXBcIj5Hcm91cCAyPC90aD5cbiAgICA8L3RyPiAtLT5cblxuICAgIDx0ciBbbmdTdHlsZV09XCJnZXRIZWFkZXJTdHlsZSgpXCI+XG4gICAgICBAZm9yIChjb2x1bW4gb2YgZGlzcGxheUNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmlkKSB7XG4gICAgICA8dGggW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKC0xLCAkaW5kZXgpXCI+XG4gICAgICAgIEBpZiAoY29sdW1uLmhlYWRlclRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRIZWFkZXJDb250ZXh0KGNvbHVtbilcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XG4gICAgICAgIH1cbiAgICAgIDwvdGg+XG4gICAgICB9XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIEBmb3IgKHJvdyBvZiB0YWJsZURhdGEoKTsgdHJhY2sgcm93Ll9rZXk7IGxldCByb3dJbmRleCA9ICRpbmRleCkgeyBAaWZcbiAgICAoaXNHcm91cFJvdyhyb3cub3JpZ2luYWxEYXRhKSkge1xuICAgIDx0ciBjbGFzcz1cImdyb3VwLXJvd1wiIFtuZ1N0eWxlXT1cImdldFJvd1N0eWxlKHJvd0luZGV4KVwiPlxuICAgICAgPHRkXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiZGlzcGxheUNvbHVtbnMoKS5sZW5ndGhcIlxuICAgICAgICBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUocm93SW5kZXgsIDApXCJcbiAgICAgID5cbiAgICAgICAge3sgZ2V0Q2VsbFZhbHVlKHJvdy5vcmlnaW5hbERhdGEsIGRpc3BsYXlDb2x1bW5zKClbMF0pIH19XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gICAgfSBAZWxzZSB7XG4gICAgPHRyIFtuZ1N0eWxlXT1cImdldFJvd1N0eWxlKHJvd0luZGV4KVwiPlxuICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZDsgbGV0IGNvbEluZGV4ID0gJGluZGV4KVxuICAgICAge1xuICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZShyb3dJbmRleCwgY29sSW5kZXgpXCI+XG4gICAgICAgIEBpZiAoaXNSb3dFZGl0aW5nKHJvdy5fa2V5KSAmJiBjb2x1bW4uY2VsbEVkaXRUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxFZGl0VGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRDZWxsQ29udGV4dChyb3csIGNvbHVtbiwgcm93SW5kZXgpXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9IEBlbHNlIGlmIChjb2x1bW4uY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Q2VsbENvbnRleHQocm93LCBjb2x1bW4sIHJvd0luZGV4KVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBjb2x1bW4pIH19XG4gICAgICAgIH1cbiAgICAgIDwvdGQ+XG4gICAgICB9XG4gICAgPC90cj5cbiAgICB9IH1cbiAgPC90Ym9keT5cblxuICBAaWYgKGhhc0Zvb3RlcigpKSB7XG4gIDx0Zm9vdD5cbiAgICA8dHIgW25nU3R5bGVdPVwiZ2V0Rm9vdGVyU3R5bGUoKVwiPlxuICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZSgtMSwgJGluZGV4KVwiPlxuICAgICAgICBAaWYgKGNvbHVtbi5mb290ZXJUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmZvb3RlclRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Rm9vdGVyQ29udGV4dChjb2x1bW4pXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICA8L3RkPlxuICAgICAgfVxuICAgIDwvdHI+XG4gIDwvdGZvb3Q+XG5cbiAgfVxuPC90YWJsZT5cbn1cbiJdfQ==
|
|
528
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFPdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBbUIsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFRNUQsTUFBTSxPQUFPLGtCQUFrQjtJQUM3Qix3Q0FBd0M7SUFDeEMsSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQU8sQ0FBQztJQUM3QixPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBeUIsQ0FBQztJQUNsRCxPQUFPLEdBQUcsS0FBSyxFQUFXLENBQUMsQ0FBQywyQ0FBMkM7SUFDdkUsZUFBZSxHQUFHLEtBQUssRUFJcEIsQ0FBQztJQUVKLE9BQU8sR0FBRyxLQUFLLEVBQStCLENBQUM7SUFDL0MsZ0JBQWdCLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLHFCQUFxQixHQUFHLEtBQUssQ0FBUyxFQUFFLENBQUMsQ0FBQztJQUVqQyxXQUFXLEdBQWdCLGtCQUFrQixDQUFDO0lBRXZELGVBQWUsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFekMsT0FBTyxHQUFH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QixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBS0csU0FBUztzQkFBbEIsTUFBTTtnQkFLRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07O0FBeWhCVCxpQkFBaUI7QUFDakIsTUFBTSxrQkFBa0IsR0FBZ0I7SUFDdEMsTUFBTSxFQUFFLG1CQUFtQjtJQUMzQixZQUFZLEVBQUUsS0FBSztJQUNuQixRQUFRLEVBQUUsUUFBUTtJQUNsQixTQUFTLEVBQUUsMkJBQTJCO0lBQ3RDLEtBQUssRUFBRSxNQUFNO0lBQ2IsTUFBTSxFQUFFO1FBQ04sZUFBZSxFQUFFLFNBQVM7UUFDMUIsVUFBVSxFQUFFLE1BQU07UUFDbEIsS0FBSyxFQUFFLE1BQU07UUFDYixTQUFTLEVBQUUsTUFBTTtRQUNqQixPQUFPLEVBQUUsV0FBVztRQUNwQixZQUFZLEVBQUUsbUJBQW1CO0tBQ2xDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFO1lBQ0osZUFBZSxFQUFFLFNBQVM7U0FDM0I7UUFDRCxHQUFHLEVBQUU7WUFDSCxlQUFlLEVBQUUsU0FBUztTQUMzQjtRQUNELEdBQUcsRUFBRTtZQUNILFFBQVEsRUFBRSxDQUFDO1lBQ1gsS0FBSyxFQUFFO2dCQUNMLGVBQWUsRUFBRSxTQUFTO2FBQzNCO1NBQ0Y7S0FDRjtJQUNELEtBQUssRUFBRTtRQUNMLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFlBQVksRUFBRSxtQkFBbUI7S0FDbEM7SUFDRCxNQUFNLEVBQUU7UUFDTixlQUFlLEVBQUUsU0FBUztRQUMxQixVQUFVLEVBQUUsTUFBTTtRQUNsQixLQUFLLEVBQUUsTUFBTTtRQUNiLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFNBQVMsRUFBRSxtQkFBbUI7S0FDL0I7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGNvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBpbnB1dCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgU2lnbmFsLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgRGF0YVdpdGhLZXksXG4gIEZvcm1Hcm91cENvbmZpZyxcbiAgR3JvdXBlZERhdGFSb3csXG59IGZyb20gJy4vZGF0YS10YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuL2NvbHVtbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGFibGVTdHlsZXMgfSBmcm9tICcuL3N0eWxlLnR5cGVzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGF0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50LmNzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQ8VD4ge1xuICAvLyBNb2RpZnkgZGF0YSBpbnB1dCB0byB1c2UgZ3JvdXBlZCBkYXRhXG4gIGRhdGEgPSBpbnB1dC5yZXF1aXJlZDxUW10+KCk7XG4gIGNvbHVtbnMgPSBpbnB1dC5yZXF1aXJlZDxDb2x1bW5EZWZpbml0aW9uPFQ+W10+KCk7XG4gIGRhdGFLZXkgPSBpbnB1dDxrZXlvZiBUPigpOyAvLyBOZXcgcmVxdWlyZWQgaW5wdXQgZm9yIHVuaXF1ZSBpZGVudGlmaWVyXG4gIGZvcm1Hcm91cENvbmZpZyA9IGlucHV0PFxuICAgIEZvcm1Hcm91cENvbmZpZzx7XG4gICAgICBbSyBpbiBrZXlvZiBUXTogQWJzdHJhY3RDb250cm9sO1xuICAgIH0+XG4gID4oKTtcblxuICBncm91cEJ5ID0gaW5wdXQ8a2V5b2YgVCB8ICgocm93OiBUKSA9PiBhbnkpPigpO1xuICB1c2VWaXJ0dWFsU2Nyb2xsID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSBpbnB1dDxudW1iZXI+KDQ4KTtcblxuICBASW5wdXQoKSBzdHlsZUNvbmZpZzogVGFibGVTdHlsZXMgPSBkZWZhdWx0VGFibGVTdHlsZXM7XG5cbiAgY29sdW1uVGVtcGxhdGVzID0gY29udGVudENoaWxkcmVuKENvbHVtbkRpcmVjdGl2ZSk7XG5cbiAgQE91dHB1dCgpIHJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSByb3dTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBrZXk6IG51bWJlciB8IHN0cmluZztcbiAgICBkYXRhOiBQYXJ0aWFsPFQ+O1xuICB9PigpO1xuICBAT3V0cHV0KCkgcm93UmV2ZXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBrZXk6IG51bWJlciB8IHN0cmluZztcbiAgICBkYXRhOiBUO1xuICB9PigpO1xuICBAT3V0cHV0KCkgcm93RGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XG5cbiAgLyoqIEludGVybmFsbHkgbWFpbnRhaW5lZCBkYXRhLCB3aXRoIGd1YXJhbnRlZWQgdW5pcXVlbmVzcyBkdWUgdG8ga2V5IHByb3BlcnR5ICovXG4gIHRhYmxlRGF0YTogU2lnbmFsPERhdGFXaXRoS2V5PFQ+W10+O1xuXG4gIHByaXZhdGUgZWRpdGluZ1Jvd3NTaWduYWwgPSBzaWduYWw8U2V0PHN0cmluZyB8IG51bWJlcj4+KG5ldyBTZXQoKSk7XG4gIHByaXZhdGUgc2VsZWN0ZWRSb3dzU2lnbmFsID0gc2lnbmFsPFNldDxzdHJpbmcgfCBudW1iZXI+PihuZXcgU2V0KCkpO1xuICAvLyBwcml2YXRlIGVkaXRlZERhdGFTaWduYWwgPSBzaWduYWw8TWFwPHN0cmluZyB8IG51bWJlciwgRWRpdGVkRGF0YTxUPj4+KFxuICAvLyAgIG5ldyBNYXAoKVxuICAvLyApO1xuICBwcml2YXRlIHVuRWRpdGVkRGF0YVNpZ25hbCA9IHNpZ25hbDxNYXA8c3RyaW5nIHwgbnVtYmVyLCBUPj4obmV3IE1hcCgpKTtcbiAgcHJpdmF0ZSBmb3JtR3JvdXBzU2lnbmFsID0gc2lnbmFsPE1hcDxzdHJpbmcgfCBudW1iZXIsIEZvcm1Hcm91cD4+KG5ldyBNYXAoKSk7XG5cbiAgLy8gY29sdW1uc1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29sdW1ucygpKTtcblxuICBkaXNwbGF5Q29sdW1uczogU2lnbmFsPENvbHVtbkRlZmluaXRpb248VD5bXT47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGluZ1RlbXBsYXRlID0gdGhpcy5jb2x1bW5UZW1wbGF0ZXMoKS5maW5kKFxuICAgICAgICAgICh0KSA9PiB0LmNvbHVtbklkID09PSBjb2x1bW4uaWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nVGVtcGxhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnRm91bmQgbWF0Y2hpbmcgdGVtcGxhdGU6JywgbWF0Y2hpbmdUZW1wbGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5jZWxsVGVtcGxhdGUgPz8gY29sdW1uLmNlbGxUZW1wbGF0ZSxcbiAgICAgICAgICAgIGNlbGxFZGl0VGVtcGxhdGU6XG4gICAgICAgICAgICAgIG1hdGNoaW5nVGVtcGxhdGUuY2VsbEVkaXRUZW1wbGF0ZSA/PyBjb2x1bW4uY2VsbEVkaXRUZW1wbGF0ZSxcbiAgICAgICAgICAgIGhlYWRlclRlbXBsYXRlOlxuICAgICAgICAgICAgICBtYXRjaGluZ1RlbXBsYXRlLmhlYWRlclRlbXBsYXRlID8/IGNvbHVtbi5oZWFkZXJUZW1wbGF0ZSxcbiAgICAgICAgICAgIGZvb3RlclRlbXBsYXRlOlxuICAgICAgICAgICAgICBtYXRjaGluZ1RlbXBsYXRlLmZvb3RlclRlbXBsYXRlID8/IGNvbHVtbi5mb290ZXJUZW1wbGF0ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMudGFibGVEYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGtleTtcbiAgICAgICAgY29uc3QgZGF0YUtleSA9IHRoaXMuX2dldFJvd0lkQnlEYXRhS2V5KGl0ZW0pO1xuICAgICAgICBpZiAoZGF0YUtleSkge1xuICAgICAgICAgIGtleSA9IGRhdGFLZXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5ID0gaW5kZXggYXMgRGF0YVdpdGhLZXk8VD5bJ19rZXknXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9yaWdpbmFsRGF0YTogaXRlbSxcbiAgICAgICAgICBfa2V5OiBrZXksXG4gICAgICAgICAgX2tleV9wcm9wOiB0aGlzLmRhdGFLZXkoKSA/PyAnX2luZGV4JyxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaGFzRm9vdGVyID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zKCkuc29tZSgoY29sKSA9PiBjb2wuZm9vdGVyVGVtcGxhdGUgIT09IHVuZGVmaW5lZClcbiAgKTtcblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCB1bmlxdWUgaWRlbnRpZmllciBmb3IgYSByb3dcbiAgcHJpdmF0ZSBfZ2V0Um93SWRCeURhdGFLZXkocm93OiBUKTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmRhdGFLZXkoKTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJvd1trZXldO1xuXG4gICAgICAvLyBDb252ZXJ0IHRvIHN0cmluZyBvciBudW1iZXIgaWYgcG9zc2libGUsIG90aGVyd2lzZSBzdHJpbmdpZnlcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVHlwZSBndWFyZCBtZXRob2QgdG8gY2hlY2sgZm9yIGdyb3VwIHJvd3NcbiAgaXNHcm91cFJvdyhyb3c6IFQpOiByb3cgaXMgVCAmIHsgaXNHcm91cFJvdzogdHJ1ZTsgZ3JvdXBUaXRsZTogYW55IH0ge1xuICAgIHJldHVybiAhIShyb3cgYXMgYW55KS5pc0dyb3VwUm93O1xuICB9XG5cbiAgdHJhY2tCeVJvd0tleShpbmRleDogbnVtYmVyLCByb3c6IGFueSkge1xuICAgIHJldHVybiByb3cuX2tleTtcbiAgfVxuXG4gIC8vIENvbXB1dGVkIHByb3BlcnR5IGZvciBncm91cGVkIGRhdGFcblxuICBncm91cGVkRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuZ3JvdXBCeSgpKSByZXR1cm4gdGhpcy50YWJsZURhdGEoKSBhcyBHcm91cGVkRGF0YVJvdzxUPltdO1xuXG4gICAgY29uc3QgZ2V0R3JvdXBWYWx1ZSA9XG4gICAgICB0eXBlb2YgdGhpcy5ncm91cEJ5KCkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyAodGhpcy5ncm91cEJ5KCkgYXMgKHJvdzogVCkgPT4gYW55KVxuICAgICAgICA6IChyb3c6IFQpID0+IHJvd1t0aGlzLmdyb3VwQnkoKSBhcyBrZXlvZiBUXTtcblxuICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8YW55LCBEYXRhV2l0aEtleTxUPltdPigpO1xuXG4gICAgdGhpcy50YWJsZURhdGEoKS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGlmIChnZXRHcm91cFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBWYWx1ZSA9IGdldEdyb3VwVmFsdWUocm93Lm9yaWdpbmFsRGF0YSk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nR3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwVmFsdWUpIHx8IFtdO1xuICAgICAgICBncm91cHMuc2V0KGdyb3VwVmFsdWUsIFsuLi5leGlzdGluZ0dyb3VwLCByb3ddKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGdyb3VwZWREYXRhQXJyYXk6IEdyb3VwZWREYXRhUm93PFQ+W10gPSBbXTtcblxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cFJvd3MsIGdyb3VwVmFsdWUpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBncm91cCBoZWFkZXIgcm93XG4gICAgICBjb25zdCBncm91cFJvdzogR3JvdXBlZERhdGFSb3c8VD4gPSB7XG4gICAgICAgIC4uLih7fSBhcyBEYXRhV2l0aEtleTxUPiksIC8vIENyZWF0ZSBlbXB0eSBvYmplY3Qgb2YgdHlwZSBUIGFzIGJhc2VcbiAgICAgICAgX2tleTogYGdyb3VwLSR7Z3JvdXBWYWx1ZX1gLFxuICAgICAgICBpc0dyb3VwUm93OiB0cnVlLFxuICAgICAgICBncm91cFZhbHVlLFxuICAgICAgICBncm91cFRpdGxlOiBncm91cFZhbHVlLFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBlZERhdGFBcnJheS5wdXNoKGdyb3VwUm93KTtcbiAgICAgIC8vIEFkZCByZWd1bGFyIHJvd3Mgd2l0aCB0aGUgb3B0aW9uYWwgaXNHcm91cFJvdyBwcm9wZXJ0eSAodW5kZWZpbmVkIGJ5IGRlZmF1bHQpXG4gICAgICBncm91cGVkRGF0YUFycmF5LnB1c2goLi4uKGdyb3VwUm93cyBhcyBHcm91cGVkRGF0YVJvdzxUPltdKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ3JvdXBlZERhdGFBcnJheTtcbiAgfSk7XG5cbiAgZ2V0Q2VsbFZhbHVlID0gKHJvdzogVCwgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogYW55ID0+IHtcbiAgICAvLyBGb3IgZ3JvdXAgcm93cywgcmV0dXJuIHRoZSBncm91cCB0aXRsZSBpZiBpdCBleGlzdHNcbiAgICBpZiAodGhpcy5pc0dyb3VwUm93KHJvdykpIHtcbiAgICAgIHJldHVybiAocm93IGFzIGFueSkuZ3JvdXBUaXRsZTtcbiAgICB9XG5cbiAgICAvLyBFeGlzdGluZyBsb2dpYyBmb3Igbm9ybWFsIHJvd3NcbiAgICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSB7XG4gICAgICByZXR1cm4gcm93W2NvbHVtbi5hY2Nlc3NvcktleV07XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW4uYWNjZXNzb3JGbiA/IGNvbHVtbi5hY2Nlc3NvckZuKHJvdykgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgcHVibGljIGlzUm93RWRpdGluZyA9IChyb3dLZXk6IERhdGFXaXRoS2V5PFQ+Wydfa2V5J10pOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nUm93c1NpZ25hbCgpLmhhcyhyb3dLZXkpO1xuICB9O1xuXG4gIHB1YmxpYyB0b2dnbGVSb3dFZGl0ID0gKHJvd0lkOiBEYXRhV2l0aEtleTxUPlsnX2tleSddKSA9PiB7XG4gICAgbGV0IGRhdGE6IERhdGFXaXRoS2V5PFQ+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBpbmRleDogbnVtYmVyID0gLTE7XG5cbiAgICB0aGlzLnRhYmxlRGF0YSgpLmZvckVhY2goKGRhdHVtLCBpKSA9PiB7XG4gICAgICBpZiAoZGF0dW0uX2tleSA9PT0gcm93SWQpIHtcbiAgICAgICAgZGF0YSA9IGRhdHVtO1xuICAgICAgICBpbmRleCA9IGk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMudG9nZ2xlUm93RWRpdEludGVybmFsKGRhdGEsIGluZGV4KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSB0b2dnbGVSb3dFZGl0SW50ZXJuYWwgPSAocm93OiBEYXRhV2l0aEtleTxUPiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuZWRpdGluZ1Jvd3NTaWduYWwudXBkYXRlKChzZXQpID0+IHtcbiAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQoc2V0KTtcbiAgICAgIGlmIChuZXdTZXQuaGFzKHJvdy5fa2V5KSkge1xuICAgICAgICBuZXdTZXQuZGVsZXRlKHJvdy5fa2V5KTtcbiAgICAgICAgdGhpcy5zYXZlUm93KHJvdy5fa2V5LCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZXQuYWRkKHJvdy5fa2V5KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRWRpdGVkRGF0YShyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1NldDtcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIGluaXRpYWxpemVFZGl0ZWREYXRhKHJvdzogRGF0YVdpdGhLZXk8VD4pIHtcbiAgICBjb25zdCByb3dJZCA9IHJvdy5fa2V5O1xuICAgIHRoaXMudW5FZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgICBuZXdNYXAuc2V0KHJvd0lkLCB7IC4uLnJvdy5vcmlnaW5hbERhdGEgfSk7XG4gICAgICByZXR1cm4gbmV3TWFwO1xuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1Hcm91cENvbmZpZyA9IHRoaXMuZm9ybUdyb3VwQ29uZmlnKCk7XG4gICAgaWYgKGZvcm1Hcm91cENvbmZpZykge1xuICAgICAgY29uc3QgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChcbiAgICAgICAgZm9ybUdyb3VwQ29uZmlnLmNvbnRyb2xzLFxuICAgICAgICBmb3JtR3JvdXBDb25maWcudmFsaWRhdG9yT3JPcHRzLFxuICAgICAgICBmb3JtR3JvdXBDb25maWcuYXN5bmNWYWxpZGF0b3JcbiAgICAgICk7XG4gICAgICBmb3JtR3JvdXAucGF0Y2hWYWx1ZShyb3cub3JpZ2luYWxEYXRhIGFzIGFueSk7XG4gICAgICB0aGlzLmZvcm1Hcm91cHNTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgICAgICBuZXdNYXAuc2V0KHJvd0lkLCBmb3JtR3JvdXApO1xuICAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzYXZlUm93KHJvd0lkOiBzdHJpbmcgfCBudW1iZXIsIHJvd0luZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBlZGl0ZWRGb3JtID0gdGhpcy5mb3JtR3JvdXBzU2lnbmFsKCkuZ2V0KHJvd0lkKTtcbiAgICBjb25zdCB1bkVkaXRlZERhdGEgPSB0aGlzLnVuRWRpdGVkRGF0YVNpZ25hbCgpLmdldChyb3dJZCk7XG5cbiAgICAvLyBpZiAoZWRpdGVkRGF0YSkge1xuICAgIC8vICAgY29uc3Qgb3JpZ2luYWxSb3cgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbmQoKHJvdykgPT4gcm93Ll9rZXkgPT09IHJvd0lkKTtcbiAgICAvLyAgIGlmIChvcmlnaW5hbFJvdykge1xuICAgIC8vICAgICBjb25zdCB1cGRhdGVkUm93ID0geyAuLi5vcmlnaW5hbFJvdywgLi4uZWRpdGVkRGF0YSB9O1xuICAgIC8vICAgICB0aGlzLnJvd1NhdmUuZW1pdCh1cGRhdGVkUm93KTtcbiAgICAvLyAgICAgdGhpcy5lZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgLy8gICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgIC8vICAgICAgIG5ld01hcC5kZWxldGUocm93SWQpO1xuICAgIC8vICAgICAgIHJldHVybiBuZXdNYXA7XG4gICAgLy8gICAgIH0pO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZm9ybUdyb3VwQ29uZmlnKCkpO1xuICAgIC8vIGNvbnNvbGUubG9nKGVkaXRlZEZvcm0pO1xuICAgIC8vIGNvbnNvbGUubG9nKHVuRWRpdGVkRGF0YSk7XG5cbiAgICBpZiAoZWRpdGVkRm9ybSkge1xuICAgICAgZWRpdGVkRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgZWRpdGVkRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3Vwc1NpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgICAgIG5ld01hcC5kZWxldGUocm93SWQpO1xuICAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJvd1NhdmUuZW1pdCh7XG4gICAgICAgIGluZGV4OiByb3dJbmRleCxcbiAgICAgICAga2V5OiByb3dJZCxcbiAgICAgICAgZGF0YTogZWRpdGVkRm9ybS52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh1bkVkaXRlZERhdGEpIHtcbiAgICAgIHRoaXMudW5FZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAgICAgbmV3TWFwLmRlbGV0ZShyb3dJZCk7XG4gICAgICAgIHJldHVybiBuZXdNYXA7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucm93UmV2ZXJ0LmVtaXQoe1xuICAgICAgICBpbmRleDogcm93SW5kZXgsXG4gICAgICAgIGtleTogcm93SWQsXG4gICAgICAgIGRhdGE6IHVuRWRpdGVkRGF0YSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNSb3dTZWxlY3RlZCA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuaGFzKHJvd0lkKTtcbiAgfTtcblxuICBwcml2YXRlIHRvZ2dsZVJvd1NlbGVjdGlvbiA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwudXBkYXRlKChzZXQpID0+IHtcbiAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQoc2V0KTtcbiAgICAgIGlmIChuZXdTZXQuaGFzKHJvd0lkKSkge1xuICAgICAgICBuZXdTZXQuZGVsZXRlKHJvd0lkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1NldC5hZGQocm93SWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICByZXR1cm4gbmV3U2V0O1xuICAgIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgYWxsUm93c1NlbGVjdGVkID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IG5vbkdyb3VwUm93cyA9IHRoaXMuZGF0YSgpLmZpbHRlcigocm93KSA9PiAhdGhpcy5pc0dyb3VwUm93KHJvdykpO1xuICAgIHJldHVybiAoXG4gICAgICBub25Hcm91cFJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwoKS5zaXplID09PSBub25Hcm91cFJvd3MubGVuZ3RoXG4gICAgKTtcbiAgfTtcblxuICBwcml2YXRlIHNvbWVSb3dzU2VsZWN0ZWQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3Qgbm9uR3JvdXBSb3dzID0gdGhpcy5kYXRhKCkuZmlsdGVyKChyb3cpID0+ICF0aGlzLmlzR3JvdXBSb3cocm93KSk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuc2l6ZSA+IDAgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuc2l6ZSA8IG5vbkdyb3VwUm93cy5sZW5ndGhcbiAgICApO1xuICB9O1xuXG4gIHByaXZhdGUgdG9nZ2xlQWxsUm93cyA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5hbGxSb3dzU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwuc2V0KG5ldyBTZXQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vbkdyb3VwUm93cyA9IHRoaXMudGFibGVEYXRhKCkuZmlsdGVyKFxuICAgICAgICAocm93KSA9PiAhdGhpcy5pc0dyb3VwUm93KHJvdy5vcmlnaW5hbERhdGEpXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwuc2V0KG5ldyBTZXQobm9uR3JvdXBSb3dzLm1hcCgocm93KSA9PiByb3cuX2tleSkpKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMudGFibGVEYXRhKCkuZmlsdGVyKChyb3cpID0+XG4gICAgICB0aGlzLnNlbGVjdGVkUm93c1NpZ25hbCgpLmhhcyhyb3cuX2tleSlcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoXG4gICAgICBzZWxlY3RlZFJvd3MubWFwKCh7IG9yaWdpbmFsRGF0YSB9KSA9PiBvcmlnaW5hbERhdGEpXG4gICAgKTtcbiAgfVxuXG4gIGdldEhlYWRlckNvbnRleHQoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogY29sdW1uLFxuICAgICAgY29sdW1uLFxuICAgICAgYWxsUm93c1NlbGVjdGVkOiB0aGlzLmFsbFJvd3NTZWxlY3RlZCxcbiAgICAgIHNvbWVSb3dzU2VsZWN0ZWQ6IHRoaXMuc29tZVJvd3NTZWxlY3RlZCxcbiAgICAgIHRvZ2dsZUFsbFJvd3M6IHRoaXMudG9nZ2xlQWxsUm93cyxcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlRWRpdGVkVmFsdWUoXG4gICAgcm93SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4sXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICAvLyB0aGlzLmVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAvLyAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgIGNvbnN0IHJvd0RhdGEgPSBuZXdNYXAuZ2V0KHJvd0lkKSB8fCAoe30gYXMgRWRpdGVkRGF0YTxUPik7XG4gICAgLy8gICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSB7XG4gICAgLy8gICAgIG5ld01hcC5zZXQocm93SWQsIHsgLi4ucm93RGF0YSwgW2NvbHVtbi5hY2Nlc3NvcktleV06IHZhbHVlIH0pO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgY29uc29sZS53YXJuKFxuICAgIC8vICAgICAgICdDYW5ub3QgdXBkYXRlIHZhbHVlIGZvciBjb2x1bW4gd2l0aG91dCBhY2Nlc3NvcktleTonLFxuICAgIC8vICAgICAgIGNvbHVtbi5pZFxuICAgIC8vICAgICApO1xuICAgIC8vICAgfVxuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHVwZGF0ZUVkaXRlZFZhbHVlRm4oXG4gICAgcm93SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICB2YWx1ZUZuOiAodmFsdWU6IGFueSkgPT4gVCxcbiAgICB2YWx1ZTogYW55XG4gICkge1xuICAgIC8vIHRoaXMuZWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgIC8vICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgIC8vICAgY29uc3Qgcm93RGF0YSA9IG5ld01hcC5nZXQocm93SWQpIHx8ICh7fSBhcyBFZGl0ZWREYXRhPFQ+KTtcbiAgICAvLyAgIG5ld01hcC5zZXQocm93SWQsIHsgLi4ucm93RGF0YSwgLi4udmFsdWVGbih2YWx1ZSkgfSk7XG4gICAgLy8gICByZXR1cm4gbmV3TWFwO1xuICAgIC8vIH0pO1xuICB9XG5cbiAgdXBkYXRlRWRpdGVkRGF0YShyb3dJZDogc3RyaW5nIHwgbnVtYmVyLCBkYXRhOiBQYXJ0aWFsPFQ+KSB7XG4gICAgLy8gdGhpcy5lZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgLy8gICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgLy8gICBjb25zdCByb3dEYXRhID0gbmV3TWFwLmdldChyb3dJZCkgfHwgKHt9IGFzIEVkaXRlZERhdGE8VD4pO1xuICAgIC8vICAgbmV3TWFwLnNldChyb3dJZCwgeyAuLi5yb3dEYXRhLCAuLi5kYXRhIH0pO1xuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHVwZGF0ZU5lc3RlZEVkaXRlZFZhbHVlKFxuICAgIHJvd0lkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LFxuICAgIG5lc3RlZEZpZWxkOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICAvLyB0aGlzLmVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAvLyAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgIGNvbnN0IHJvd0RhdGEgPSBuZXdNYXAuZ2V0KHJvd0lkKSB8fCAoe30gYXMgRWRpdGVkRGF0YTxUPik7XG4gICAgLy8gICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSB7XG4gICAgLy8gICAgIGNvbnN0IGNvbHVtbkRhdGEgPSAocm93RGF0YVtjb2x1bW4uYWNjZXNzb3JLZXldIGFzIGFueSkgfHwge307XG4gICAgLy8gICAgIG5ld01hcC5zZXQocm93SWQsIHtcbiAgICAvLyAgICAgICAuLi5yb3dEYXRhLFxuICAgIC8vICAgICAgIFtjb2x1bW4uYWNjZXNzb3JLZXldOiB7XG4gICAgLy8gICAgICAgICAuLi5jb2x1bW5EYXRhLFxuICAgIC8vICAgICAgICAgW25lc3RlZEZpZWxkXTogdmFsdWUsXG4gICAgLy8gICAgICAgfSxcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICB9IGVsc2Uge1xuICAgIC8vICAgICBjb25zb2xlLndhcm4oXG4gICAgLy8gICAgICAgJ0Nhbm5vdCB1cGRhdGUgbmVzdGVkIHZhbHVlIGZvciBjb2x1bW4gd2l0aG91dCBhY2Nlc3NvcktleTonLFxuICAgIC8vICAgICAgIGNvbHVtbi5pZFxuICAgIC8vICAgICApO1xuICAgIC8vICAgfVxuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIGdldENlbGxDb250ZXh0KFxuICAgIHJvdzogRGF0YVdpdGhLZXk8VD4sXG4gICAgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LFxuICAgIHJvd0luZGV4OiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3Qgcm93SWQgPSByb3cuX2tleTtcbiAgICBjb25zdCBpc0VkaXRpbmcgPSB0aGlzLmlzUm93RWRpdGluZyhyb3cuX2tleSk7XG4gICAgLy8gY29uc3QgZWRpdGVkRGF0YSA9IHRoaXMuZWRpdGVkRGF0YVNpZ25hbCgpLmdldChyb3dJZCk7XG4gICAgY29uc3QgZWRpdGVkRm9ybSA9IHRoaXMuZm9ybUdyb3Vwc1NpZ25hbCgpLmdldChyb3dJZCk7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSBlZGl0ZWRGb3JtPy5nZXQoY29sdW1uLmZvcm1Db250cm9sTmFtZSB8fCAnJyk7XG5cbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoaXNFZGl0aW5nKSB7XG4gICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgdmFsdWUgPSBmb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5nZXRDZWxsVmFsdWUocm93Lm9yaWdpbmFsRGF0YSwgY29sdW1uKTtcbiAgICAgIH1cbiAgICAgIC8vIGVsc2UgaWYgKGVkaXRlZERhdGEpIHtcbiAgICAgIC8vICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSAmJiBjb2x1bW4uYWNjZXNzb3JLZXkgaW4gZWRpdGVkRGF0YSkge1xuICAgICAgLy8gICAgIC8vIElmIGNvbHVtbiBoYXMgYW4gYWNjZXNzb3JLZXkgYW5kIGl0IGV4aXN0cyBpbiBlZGl0ZWQgZGF0YSwgdXNlIHRoYXRcbiAgICAgIC8vICAgICB2YWx1ZSA9IGVkaXRlZERhdGFbY29sdW1uLmFjY2Vzc29yS2V5XTtcbiAgICAgIC8vICAgfSBlbHNlIGlmIChjb2x1bW4uYWNjZXNzb3JGbikge1xuICAgICAgLy8gICAgIC8vIElmIGNvbHVtbiBoYXMgYW4gYWNjZXNzb3JGbiwgYXBwbHkgaXQgdG8gdGhlIGVkaXRlZCBkYXRhXG4gICAgICAvLyAgICAgdmFsdWUgPSBjb2x1bW4uYWNjZXNzb3JGbih7IC4uLnJvdywgLi4uZWRpdGVkRGF0YSB9KTtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICAvLyBGYWxsYmFjayB0byBnZXR0aW5nIHRoZSB2YWx1ZSBmcm9tIHRoZSBvcmlnaW5hbCByb3dcbiAgICAgIC8vICAgICB2YWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdywgY29sdW1uKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdy5vcmlnaW5hbERhdGEsIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogdmFsdWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHJvdzogcm93Lm9yaWdpbmFsRGF0YSxcbiAgICAgIGNvbHVtbixcbiAgICAgIHJvd0luZGV4LFxuICAgICAgcm93SWQsXG4gICAgICBpc0VkaXRpbmcsXG4gICAgICBmb3JtQ29udHJvbCxcbiAgICAgIGlzU2VsZWN0ZWQ6IHRoaXMuaXNSb3dTZWxlY3RlZChyb3dJZCksXG4gICAgICB0b2dnbGVSb3dTZWxlY3Rpb246ICgpID0+IHRoaXMudG9nZ2xlUm93U2VsZWN0aW9uKHJvd0lkKSxcbiAgICAgIHRvZ2dsZVJvd0VkaXQ6ICgpID0+IHRoaXMudG9nZ2xlUm93RWRpdEludGVybmFsKHJvdywgcm93SW5kZXgpLFxuICAgICAgZGVsZXRlUm93OiAoKSA9PiB0aGlzLmRlbGV0ZVJvdyhyb3dJZCksXG4gICAgICB1cGRhdGVWYWx1ZTogKG5ld1ZhbHVlOiBhbnkpID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkVmFsdWUocm93SWQsIGNvbHVtbiwgbmV3VmFsdWUpLFxuICAgICAgdXBkYXRlTmVzdGVkVmFsdWU6IChuZXN0ZWRGaWVsZDogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZU5lc3RlZEVkaXRlZFZhbHVlKHJvd0lkLCBjb2x1bW4sIG5lc3RlZEZpZWxkLCBuZXdWYWx1ZSksXG4gICAgICB1cGRhdGVWYWx1ZUZuOiAodmFsdWVGbjogKHZhbHVlOiBhbnkpID0+IFQsIG5ld1ZhbHVlOiBhbnkpID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkVmFsdWVGbihyb3dJZCwgdmFsdWVGbiwgbmV3VmFsdWUpLFxuICAgICAgdXBkYXRlRGF0YTogKG5ld0RhdGE6IFBhcnRpYWw8VD4pID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkRGF0YShyb3dJZCwgbmV3RGF0YSksXG4gICAgfTtcbiAgfVxuXG4gIGRlbGV0ZVJvdyA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgcm93VG9EZWxldGUgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbmQoKHJvdykgPT4gcm93Ll9rZXkgPT09IHJvd0lkKTtcbiAgICBpZiAocm93VG9EZWxldGUpIHtcbiAgICAgIHRoaXMucm93RGVsZXRlLmVtaXQocm93VG9EZWxldGUub3JpZ2luYWxEYXRhKTtcbiAgICB9XG4gIH07XG5cbiAgZ2V0Rm9vdGVyQ29udGV4dChjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiBjb2x1bW4sXG4gICAgICBjb2x1bW4sXG4gICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIGdldFRhYmxlU3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZyxcbiAgICAgIGZvbnRGYW1pbHk6IHRoaXMuc3R5bGVDb25maWcuZm9udEZhbWlseSxcbiAgICAgIGZvbnRTaXplOiB0aGlzLnN0eWxlQ29uZmlnLmZvbnRTaXplLFxuICAgICAgd2hpdGVTcGFjZTogdGhpcy5zdHlsZUNvbmZpZy53aGl0ZVNwYWNlLFxuICAgICAgbWFyZ2luOiB0aGlzLnN0eWxlQ29uZmlnLm1hcmdpbixcbiAgICAgIGJvcmRlcjogdGhpcy5zdHlsZUNvbmZpZy5ib3JkZXIsXG4gICAgICBib3JkZXJDb2xsYXBzZTogdGhpcy5zdHlsZUNvbmZpZy5ib3JkZXJDb2xsYXBzZSxcbiAgICAgIGJvcmRlclNwYWNpbmc6IHRoaXMuc3R5bGVDb25maWcuYm9yZGVyU3BhY2luZyxcbiAgICAgIHRhYmxlTGF5b3V0OiB0aGlzLnN0eWxlQ29uZmlnLnRhYmxlTGF5b3V0LFxuICAgICAgd2lkdGg6IHRoaXMuc3R5bGVDb25maWcud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGdldEhlYWRlclN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc3R5bGVDb25maWcuaGVhZGVyLFxuICAgICAgcG9zaXRpb246IHRoaXMuc3R5bGVDb25maWcuaGVhZGVyPy5zdGlja3lUb3AgPyAnc3RpY2t5JyA6ICdzdGF0aWMnLFxuICAgICAgdG9wOiB0aGlzLnN0eWxlQ29uZmlnLmhlYWRlcj8uc3RpY2t5VG9wID8gJzAnIDogJ2F1dG8nLFxuICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmhlYWRlcj8uekluZGV4IHx8ICdhdXRvJyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0Rm9vdGVyU3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZy5mb290ZXIsXG4gICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5mb290ZXI/LnN0aWNreUJvdHRvbSA/ICdzdGlja3knIDogJ3N0YXRpYycsXG4gICAgICBib3R0b206IHRoaXMuc3R5bGVDb25maWcuZm9vdGVyPy5zdGlja3lCb3R0b20gPyAnMCcgOiAnYXV0bycsXG4gICAgICB6SW5kZXg6IHRoaXMuc3R5bGVDb25maWcuZm9vdGVyPy56SW5kZXggfHwgJ2F1dG8nLFxuICAgIH07XG4gIH1cblxuICBnZXRSb3dTdHlsZShyb3dJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCByb3dTdHlsZXMgPSB0aGlzLnN0eWxlQ29uZmlnLnJvd3M7XG4gICAgaWYgKHJvd1N0eWxlcyAmJiAnZXZlbicgaW4gcm93U3R5bGVzICYmICdvZGQnIGluIHJvd1N0eWxlcykge1xuICAgICAgcmV0dXJuIHJvd0luZGV4ICUgMiA9PT0gMCA/IHJvd1N0eWxlcy5ldmVuIDogcm93U3R5bGVzLm9kZDtcbiAgICB9IGVsc2UgaWYgKHJvd1N0eWxlcyAmJiAnbnRoJyBpbiByb3dTdHlsZXMgJiYgcm93U3R5bGVzLm50aCkge1xuICAgICAgY29uc3QgeyBpbnRlcnZhbCwgc3R5bGUgfSA9IHJvd1N0eWxlcy5udGg7XG4gICAgICByZXR1cm4gKHJvd0luZGV4ICsgMSkgJSAoaW50ZXJ2YWwgfHwgMSkgPT09IDAgPyBzdHlsZSA6IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcm93U3R5bGVzIHx8IHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldENlbGxTdHlsZShyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBpc0ZpcnN0Q29sdW1uID0gY29sSW5kZXggPT09IDA7XG4gICAgY29uc3QgaXNMYXN0Q29sdW1uID0gY29sSW5kZXggPT09IHRoaXMuZGlzcGxheUNvbHVtbnMoKS5sZW5ndGggLSAxO1xuXG4gICAgbGV0IGNlbGxTdHlsZSA9IHsgLi4udGhpcy5zdHlsZUNvbmZpZy5jZWxscyB9O1xuXG4gICAgaWYgKGlzRmlyc3RDb2x1bW4pIHtcbiAgICAgIGNlbGxTdHlsZSA9IHtcbiAgICAgICAgLi4uY2VsbFN0eWxlLFxuICAgICAgICAuLi50aGlzLnN0eWxlQ29uZmlnLmZpcnN0Q29sdW1uLFxuICAgICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5maXJzdENvbHVtbj8uc3RpY2t5TGVmdFxuICAgICAgICAgID8gJ3N0aWNreSdcbiAgICAgICAgICA6ICdzdGF0aWMnLFxuICAgICAgICBsZWZ0OiB0aGlzLnN0eWxlQ29uZmlnLmZpcnN0Q29sdW1uPy5zdGlja3lMZWZ0ID8gJzAnIDogJ2F1dG8nLFxuICAgICAgICB6SW5kZXg6IHRoaXMuc3R5bGVDb25maWcuZmlyc3RDb2x1bW4/LnpJbmRleCB8fCAnYXV0bycsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNMYXN0Q29sdW1uKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7XG4gICAgICAgIC4uLmNlbGxTdHlsZSxcbiAgICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uLFxuICAgICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uPy5zdGlja3lSaWdodFxuICAgICAgICAgID8gJ3N0aWNreSdcbiAgICAgICAgICA6ICdzdGF0aWMnLFxuICAgICAgICByaWdodDogdGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uPy5zdGlja3lSaWdodCA/ICcwJyA6ICdhdXRvJyxcbiAgICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmxhc3RDb2x1bW4/LnpJbmRleCB8fCAnYXV0bycsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAvLyBBcHBseSBib2R5IHN0eWxlcyB0byBhbGwgY2VsbHNcbiAgICAgIGNlbGxTdHlsZSA9IHsgLi4uY2VsbFN0eWxlLCAuLi50aGlzLnN0eWxlQ29uZmlnLmJvZHkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2VsbFN0eWxlID0geyAuLi50aGlzLnN0eWxlQ29uZmlnLmhlYWRlciB9O1xuICAgIH1cblxuICAgIHJldHVybiBjZWxsU3R5bGU7XG4gIH1cbn1cblxuLy8gRGVmYXVsdCBzdHlsZXNcbmNvbnN0IGRlZmF1bHRUYWJsZVN0eWxlczogVGFibGVTdHlsZXMgPSB7XG4gIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBib3hTaGFkb3c6ICcwIDJweCA0cHggcmdiYSgwLDAsMCwwLjEpJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVhZGVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y1ZjVmNScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGNvbG9yOiAnIzMzMycsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgcGFkZGluZzogJzEycHggMTZweCcsXG4gICAgYm9yZGVyQm90dG9tOiAnMnB4IHNvbGlkICNlMGUwZTAnLFxuICB9LFxuICByb3dzOiB7XG4gICAgZXZlbjoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgfSxcbiAgICBvZGQ6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWY5ZjknLFxuICAgIH0sXG4gICAgbnRoOiB7XG4gICAgICBpbnRlcnZhbDogNSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmMGYwZjAnLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBjZWxsczoge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgIGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgfSxcbiAgZm9vdGVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y1ZjVmNScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGNvbG9yOiAnIzMzMycsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgcGFkZGluZzogJzEycHggMTZweCcsXG4gICAgYm9yZGVyVG9wOiAnMnB4IHNvbGlkICNlMGUwZTAnLFxuICB9LFxufTtcbiIsIkBpZiAodXNlVmlydHVhbFNjcm9sbCgpKSB7XG48Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gIFtpdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemUoKVwiXG4gIGNsYXNzPVwidmlydHVhbC1zY3JvbGwtdmlld3BvcnRcIlxuICBbc3R5bGUuaGVpZ2h0LnB4XT1cInZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpICogMTBcIlxuPlxuICA8dGFibGUgW25nU3R5bGVdPVwiZ2V0VGFibGVTdHlsZSgpXCI+XG4gICAgPHRoZWFkPlxuICAgICAgPCEtLSA8dHIgW25nU3R5bGVdPVwiZ2V0SGVhZGVyU3R5bGUoKVwiPlxuICAgICAgPHRoIGNvbHNwYW49XCIyXCIgc2NvcGU9XCJjb2xncm91cFwiPkdyb3VwIDE8L3RoPlxuICAgICAgPHRoIGNvbHNwYW49XCIxXCIgc2NvcGU9XCJjb2xncm91cFwiPkdyb3VwIDI8L3RoPlxuICAgIDwvdHI+IC0tPlxuXG4gICAgICA8dHIgW25nU3R5bGVdPVwiZ2V0SGVhZGVyU3R5bGUoKVwiPlxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgZGlzcGxheUNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmlkKSB7XG4gICAgICAgIDx0aCBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUoLTEsICRpbmRleClcIj5cbiAgICAgICAgICBAaWYgKGNvbHVtbi5oZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5oZWFkZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0SGVhZGVyQ29udGV4dChjb2x1bW4pXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAge3sgY29sdW1uLmhlYWRlciB9fVxuICAgICAgICAgIH1cbiAgICAgICAgPC90aD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keT5cbiAgICAgIDx0clxuICAgICAgICAqY2RrVmlydHVhbEZvcj1cIlxuICAgICAgICAgIGxldCByb3cgb2YgdGFibGVEYXRhKCk7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeVJvd0tleTtcbiAgICAgICAgICBsZXQgcm93SW5kZXggPSBpbmRleFxuICAgICAgICBcIlxuICAgICAgICBbbmdTdHlsZV09XCJnZXRSb3dTdHlsZShyb3dJbmRleClcIlxuICAgICAgPlxuICAgICAgICBAZm9yIChjb2x1bW4gb2YgZGlzcGxheUNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmlkOyBsZXQgY29sSW5kZXggPVxuICAgICAgICAkaW5kZXgpIHtcbiAgICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZShyb3dJbmRleCwgY29sSW5kZXgpXCI+XG4gICAgICAgICAgQGlmIChpc1Jvd0VkaXRpbmcocm93Ll9rZXkpICYmIGNvbHVtbi5jZWxsRWRpdFRlbXBsYXRlKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxFZGl0VGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENlbGxDb250ZXh0KHJvdywgY29sdW1uLCByb3dJbmRleClcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBlbHNlIGlmIChjb2x1bW4uY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Q2VsbENvbnRleHQocm93LCBjb2x1bW4sIHJvd0luZGV4KVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBjb2x1bW4pIH19XG4gICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgICAgICB9XG4gICAgICA8L3RyPlxuICAgIDwvdGJvZHk+XG5cbiAgICBAaWYgKGhhc0Zvb3RlcigpKSB7XG4gICAgPHRmb290PlxuICAgICAgPHRyIFtuZ1N0eWxlXT1cImdldEZvb3RlclN0eWxlKClcIj5cbiAgICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgICA8dGQgW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKC0xLCAkaW5kZXgpXCI+XG4gICAgICAgICAgQGlmIChjb2x1bW4uZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uZm9vdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldEZvb3RlckNvbnRleHQoY29sdW1uKVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICA8L3Rmb290PlxuXG4gICAgfVxuICA8L3RhYmxlPlxuPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG59IEBlbHNlIHtcbjx0YWJsZSBbbmdTdHlsZV09XCJnZXRUYWJsZVN0eWxlKClcIj5cbiAgPHRoZWFkPlxuICAgIDwhLS0gPHRyIFtuZ1N0eWxlXT1cImdldEhlYWRlclN0eWxlKClcIj5cbiAgICAgIDx0aCBjb2xzcGFuPVwiMlwiIHNjb3BlPVwiY29sZ3JvdXBcIj5Hcm91cCAxPC90aD5cbiAgICAgIDx0aCBjb2xzcGFuPVwiMVwiIHNjb3BlPVwiY29sZ3JvdXBcIj5Hcm91cCAyPC90aD5cbiAgICA8L3RyPiAtLT5cblxuICAgIDx0ciBbbmdTdHlsZV09XCJnZXRIZWFkZXJTdHlsZSgpXCI+XG4gICAgICBAZm9yIChjb2x1bW4gb2YgZGlzcGxheUNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmlkKSB7XG4gICAgICA8dGggW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKC0xLCAkaW5kZXgpXCI+XG4gICAgICAgIEBpZiAoY29sdW1uLmhlYWRlclRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRIZWFkZXJDb250ZXh0KGNvbHVtbilcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XG4gICAgICAgIH1cbiAgICAgIDwvdGg+XG4gICAgICB9XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIEBmb3IgKHJvdyBvZiB0YWJsZURhdGEoKTsgdHJhY2sgcm93Ll9rZXk7IGxldCByb3dJbmRleCA9ICRpbmRleCkgeyBAaWZcbiAgICAoaXNHcm91cFJvdyhyb3cub3JpZ2luYWxEYXRhKSkge1xuICAgIDx0ciBjbGFzcz1cImdyb3VwLXJvd1wiIFtuZ1N0eWxlXT1cImdldFJvd1N0eWxlKHJvd0luZGV4KVwiPlxuICAgICAgPHRkXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiZGlzcGxheUNvbHVtbnMoKS5sZW5ndGhcIlxuICAgICAgICBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUocm93SW5kZXgsIDApXCJcbiAgICAgID5cbiAgICAgICAge3sgZ2V0Q2VsbFZhbHVlKHJvdy5vcmlnaW5hbERhdGEsIGRpc3BsYXlDb2x1bW5zKClbMF0pIH19XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gICAgfSBAZWxzZSB7XG4gICAgPHRyIFtuZ1N0eWxlXT1cImdldFJvd1N0eWxlKHJvd0luZGV4KVwiPlxuICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZDsgbGV0IGNvbEluZGV4ID0gJGluZGV4KVxuICAgICAge1xuICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZShyb3dJbmRleCwgY29sSW5kZXgpXCI+XG4gICAgICAgIEBpZiAoaXNSb3dFZGl0aW5nKHJvdy5fa2V5KSAmJiBjb2x1bW4uY2VsbEVkaXRUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxFZGl0VGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRDZWxsQ29udGV4dChyb3csIGNvbHVtbiwgcm93SW5kZXgpXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9IEBlbHNlIGlmIChjb2x1bW4uY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Q2VsbENvbnRleHQocm93LCBjb2x1bW4sIHJvd0luZGV4KVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBjb2x1bW4pIH19XG4gICAgICAgIH1cbiAgICAgIDwvdGQ+XG4gICAgICB9XG4gICAgPC90cj5cbiAgICB9IH1cbiAgPC90Ym9keT5cblxuICBAaWYgKGhhc0Zvb3RlcigpKSB7XG4gIDx0Zm9vdD5cbiAgICA8dHIgW25nU3R5bGVdPVwiZ2V0Rm9vdGVyU3R5bGUoKVwiPlxuICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZSgtMSwgJGluZGV4KVwiPlxuICAgICAgICBAaWYgKGNvbHVtbi5mb290ZXJUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmZvb3RlclRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Rm9vdGVyQ29udGV4dChjb2x1bW4pXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICA8L3RkPlxuICAgICAgfVxuICAgIDwvdHI+XG4gIDwvdGZvb3Q+XG5cbiAgfVxuPC90YWJsZT5cbn1cbiJdfQ==
|