ontimize-web-ngx 15.0.0-beta.1 → 15.0.0-beta.3
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/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +2 -2
- package/esm2020/lib/components/button-toggle/o-button-toggle-group/o-button-toggle-group.component.mjs +13 -15
- package/esm2020/lib/components/card-menu-item/o-card-menu-item.component.mjs +6 -8
- package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.component.mjs +3 -3
- package/esm2020/lib/components/form/navigation/o-form.navigation.class.mjs +2 -2
- package/esm2020/lib/components/form-container/o-form-container.component.mjs +6 -8
- package/esm2020/lib/components/grid/o-grid.component.mjs +5 -5
- package/esm2020/lib/components/index.mjs +2 -3
- package/esm2020/lib/components/input/combo/o-combo.component.mjs +2 -2
- package/esm2020/lib/components/input/phone-input/o-phone-input.component.mjs +3 -3
- package/esm2020/lib/components/input/search-input/o-search-input.component.mjs +2 -2
- package/esm2020/lib/components/list/list-item/o-list-item.component.mjs +2 -2
- package/esm2020/lib/components/list/o-list.component.mjs +5 -14
- package/esm2020/lib/components/list/renderers/card/o-list-item-card.component.mjs +3 -3
- package/esm2020/lib/components/list/renderers/card-image/o-list-item-card-image.component.mjs +3 -3
- package/esm2020/lib/components/o-service-base-component.class.mjs +1 -1
- package/esm2020/lib/components/o-service-component.class.mjs +2 -1
- package/esm2020/lib/components/table/column/calculated/o-table-column-calculated.component.mjs +6 -7
- package/esm2020/lib/components/table/column/o-table-column.component.mjs +123 -129
- package/esm2020/lib/components/table/extensions/default-o-table.datasource.mjs +46 -9
- package/esm2020/lib/components/table/extensions/dialog/apply-configuration/o-table-apply-configuration-dialog.component.mjs +3 -3
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +3 -3
- package/esm2020/lib/components/table/extensions/dialog/store-configuration/o-table-store-configuration-dialog.component.mjs +3 -3
- package/esm2020/lib/components/table/extensions/dialog/visible-columns/o-table-visible-columns-dialog.component.mjs +3 -3
- package/esm2020/lib/components/table/extensions/header/table-insertable-row/o-table-insertable-row.component.mjs +6 -7
- package/esm2020/lib/components/table/extensions/header/table-quickfilter/o-table-quickfilter.component.mjs +4 -4
- package/esm2020/lib/components/table/o-table.component.mjs +17 -18
- package/esm2020/lib/components/user-info/index.mjs +5 -0
- package/esm2020/lib/components/user-info/o-user-info.module.mjs +3 -3
- package/esm2020/lib/interfaces/o-table-column.interface.mjs +1 -1
- package/esm2020/lib/layouts/form-layout/dialog/o-form-layout-dialog.component.mjs +20 -22
- package/esm2020/lib/layouts/form-layout/dialog/options/o-form-layout-dialog-options.directive.mjs +7 -3
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +10 -4
- package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +8 -9
- package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +8 -10
- package/esm2020/lib/services/o-error-dialog-manager.service.mjs +8 -4
- package/esm2020/lib/services/translate/o-translate.service.mjs +3 -2
- package/esm2020/lib/shared/components/filter/load-filter/o-load-filter-dialog.component.mjs +3 -3
- package/esm2020/lib/util/util.mjs +5 -1
- package/fesm2015/ontimize-web-ngx.mjs +297 -272
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +297 -272
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/button-toggle/o-button-toggle-group/o-button-toggle-group.component.d.ts +1 -3
- package/lib/components/card-menu-item/o-card-menu-item.component.d.ts +2 -3
- package/lib/components/form-container/o-form-container.component.d.ts +1 -3
- package/lib/components/index.d.ts +1 -2
- package/lib/components/list/o-list.component.d.ts +1 -3
- package/lib/components/table/column/calculated/o-table-column-calculated.component.d.ts +2 -3
- package/lib/components/table/column/o-table-column.component.d.ts +3 -4
- package/lib/components/table/extensions/default-o-table.datasource.d.ts +1 -0
- package/lib/components/table/extensions/header/table-insertable-row/o-table-insertable-row.component.d.ts +2 -3
- package/lib/components/table/o-table.component.d.ts +5 -6
- package/lib/components/user-info/index.d.ts +4 -0
- package/lib/components/user-info/o-user-info.module.d.ts +1 -1
- package/lib/interfaces/o-table-column.interface.d.ts +2 -2
- package/lib/layouts/form-layout/dialog/o-form-layout-dialog.component.d.ts +4 -4
- package/lib/layouts/form-layout/dialog/options/o-form-layout-dialog-options.directive.d.ts +3 -1
- package/lib/layouts/form-layout/o-form-layout-manager.component.d.ts +2 -1
- package/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.d.ts +2 -3
- package/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.d.ts +2 -3
- package/lib/services/o-error-dialog-manager.service.d.ts +2 -2
- package/lib/services/translate/o-translate.service.d.ts +1 -0
- package/lib/util/util.d.ts +1 -0
- package/ontimize.scss +2 -72
- package/package.json +1 -1
- package/theme.scss +84 -99
- package/theming/addons/report-on-demand.scss +5 -1
- package/theming/ontimize-style-v8.scss +23 -1
- package/theming/ontimize-style.scss +2 -1
- package/theming/styles/density.scss +37 -23
- package/theming/styles/ontimize-v8/o-form-field-style.scss +23 -15
- package/theming/styles/ontimize-v8/o-table-style.scss +1 -1
- package/theming/styles/ontimize-v8/variables.scss +4 -1
- package/theming/themes/ontimize-blue.scss +6 -3
|
@@ -90,13 +90,15 @@ export class DefaultOTableDataSource extends DataSource {
|
|
|
90
90
|
data = this.getVirtualScrollData(this.renderedData, x);
|
|
91
91
|
}
|
|
92
92
|
else {
|
|
93
|
-
if (
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
93
|
+
if (Array.isArray(data) && data.length > 0) {
|
|
94
|
+
if (this.existsAnyCalculatedColumn()) {
|
|
95
|
+
data = this.getColumnCalculatedData(data);
|
|
96
|
+
}
|
|
97
|
+
if (!this.table.pageable) {
|
|
98
|
+
data = this.getColumnValueFilterData(data);
|
|
99
|
+
data = this.getQuickFilterData(data);
|
|
100
|
+
data = this.getSortedData(data);
|
|
101
|
+
}
|
|
100
102
|
}
|
|
101
103
|
this.filteredData = Object.assign([], data);
|
|
102
104
|
if (this.table.pageable) {
|
|
@@ -221,7 +223,24 @@ export class DefaultOTableDataSource extends DataSource {
|
|
|
221
223
|
return searchStr.indexOf(filter) !== -1;
|
|
222
224
|
}
|
|
223
225
|
getSortedData(data) {
|
|
224
|
-
|
|
226
|
+
const rendererData = this.getDataToSort(data);
|
|
227
|
+
const sortedData = this._sort.getSortedData(rendererData);
|
|
228
|
+
const tableKeys = this.table.getKeys();
|
|
229
|
+
const originalDataSorted = [];
|
|
230
|
+
sortedData.forEach(sortedElement => {
|
|
231
|
+
const keysValuesInSortData = tableKeys.map(element => sortedElement[element]);
|
|
232
|
+
let i = 0;
|
|
233
|
+
let found = false;
|
|
234
|
+
while (i < data.length && !found) {
|
|
235
|
+
const keysValuesInData = tableKeys.map(element => data[i][element]);
|
|
236
|
+
if (Util.isArrayEqual(keysValuesInSortData, keysValuesInData)) {
|
|
237
|
+
originalDataSorted.push(data[i]);
|
|
238
|
+
found = true;
|
|
239
|
+
}
|
|
240
|
+
i++;
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
return originalDataSorted;
|
|
225
244
|
}
|
|
226
245
|
getTableData() {
|
|
227
246
|
return this._database.data;
|
|
@@ -255,6 +274,24 @@ export class DefaultOTableDataSource extends DataSource {
|
|
|
255
274
|
return obj;
|
|
256
275
|
});
|
|
257
276
|
}
|
|
277
|
+
getDataToSort(data) {
|
|
278
|
+
const sortColumns = this._tableOptions.columns.filter(oCol => oCol.visible && this._sort.activeArray.map(x => x.id).indexOf(oCol.attr) > -1);
|
|
279
|
+
const existColumnToTrasformToSort = sortColumns.filter((oCol) => (oCol.type === 'translate' || oCol.type === 'service')).length > 0;
|
|
280
|
+
if (!existColumnToTrasformToSort) {
|
|
281
|
+
return data;
|
|
282
|
+
}
|
|
283
|
+
this.table.getKeys().forEach(key => {
|
|
284
|
+
sortColumns.push(this.table.getOColumn(key));
|
|
285
|
+
});
|
|
286
|
+
return data.map((row) => {
|
|
287
|
+
const obj = {};
|
|
288
|
+
sortColumns.forEach((oCol) => {
|
|
289
|
+
const useRenderer = oCol.renderer && (oCol.type === 'translate' || oCol.type === 'service') && oCol.renderer.getCellData;
|
|
290
|
+
obj[oCol.attr] = useRenderer ? oCol.renderer.getCellData(row[oCol.attr], row) : row[oCol.attr];
|
|
291
|
+
});
|
|
292
|
+
return obj;
|
|
293
|
+
});
|
|
294
|
+
}
|
|
258
295
|
getAllData(usingRendererers, onlyVisibleColumns) {
|
|
259
296
|
let tableColumns = this._tableOptions.columns;
|
|
260
297
|
if (onlyVisibleColumns) {
|
|
@@ -669,4 +706,4 @@ export class DefaultOTableDataSource extends DataSource {
|
|
|
669
706
|
return expansionState;
|
|
670
707
|
}
|
|
671
708
|
}
|
|
672
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1vLXRhYmxlLmRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2RlZmF1bHQtby10YWJsZS5kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTNELE9BQU8sRUFBRSx5QkFBeUIsRUFBc0IsTUFBTSxpREFBaUQsQ0FBQztBQUNoSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2pFLE1BQU0sT0FBTywwQkFBMEI7SUFHckMsWUFBWSxJQUFlO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxVQUFlO0lBRzFELElBQUksSUFBSSxLQUFZLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFxQnpELElBQUksV0FBVyxLQUFhLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLElBQUksV0FBVyxDQUFDLE1BQWM7UUFD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QUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDO1FBQ25FLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7WUFDekQsY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7U0FDOUg7YUFBTTtZQUNMLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxHQUFHLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDaEosY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1NBQ2hFO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDeEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSwgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgT1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1kYXRhc291cmNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBPVGFibGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IsIE9Db2x1bW5WYWx1ZUZpbHRlciB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3RhYmxlL28tY29sdW1uLXZhbHVlLWZpbHRlci50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB0eXBlIHsgT0NvbHVtbiB9IGZyb20gJy4uL2NvbHVtbi9vLWNvbHVtbi5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9vLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVEYW8gfSBmcm9tICcuL28tdGFibGUuZGFvJztcbmltcG9ydCB7IE9UYWJsZUdyb3VwZWRSb3cgfSBmcm9tICcuL3Jvdy9vLXRhYmxlLXJvdy1ncm91cC5jbGFzcyc7XG5pbXBvcnQgeyBPTWF0U29ydCB9IGZyb20gJy4vc29ydC9vLW1hdC1zb3J0JztcblxuZXhwb3J0IGNsYXNzIE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsIHtcbiAgcHVibGljIHJhbmdlOiBMaXN0UmFuZ2U7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogTGlzdFJhbmdlKSB7XG4gICAgdGhpcy5yYW5nZSA9IGRhdGE7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlZmF1bHRPVGFibGVEYXRhU291cmNlIGV4dGVuZHMgRGF0YVNvdXJjZTxhbnk+IGltcGxlbWVudHMgT1RhYmxlRGF0YVNvdXJjZSB7XG4gIGRhdGFUb3RhbHNDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG5cbiAgZ2V0IGRhdGEoKTogYW55W10geyByZXR1cm4gdGhpcy5kYXRhVG90YWxzQ2hhbmdlLnZhbHVlOyB9XG5cbiAgcHJvdGVjdGVkIF9kYXRhYmFzZTogT1RhYmxlRGFvO1xuICBwcm90ZWN0ZWQgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuICBwcm90ZWN0ZWQgX3RhYmxlT3B0aW9uczogT1RhYmxlT3B0aW9ucztcbiAgcHJvdGVjdGVkIF9zb3J0OiBPTWF0U29ydDtcblxuICBwcm90ZWN0ZWQgX3ZpcnR1YWxQYWdlQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbD4obmV3IE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsKHsgc3RhcnQ6IDAsIGVuZDogMCB9KSk7XG4gIHByb3RlY3RlZCBfcXVpY2tGaWx0ZXJDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcbiAgcHJvdGVjdGVkIF9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gIHByb3RlY3RlZCBncm91cEJ5Q29sdW1uQ2hhbmdlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD47XG5cbiAgcHJvdGVjdGVkIGZpbHRlcmVkRGF0YTogYW55W10gPSBbXTtcbiAgcHJvdGVjdGVkIGFnZ3JlZ2F0ZURhdGE6IGFueSA9IHt9O1xuXG4gIG9uUmVuZGVyZWREYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG5cbiAgcHJvdGVjdGVkIF9yZW5kZXJlZERhdGE6IGFueVtdID0gW107XG4gIHJlc3VsdHNMZW5ndGg6IG51bWJlciA9IDA7XG5cbiAgZ2V0IHF1aWNrRmlsdGVyKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl9xdWlja0ZpbHRlckNoYW5nZS52YWx1ZSB8fCAnJzsgfVxuICBzZXQgcXVpY2tGaWx0ZXIoZmlsdGVyOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9xdWlja0ZpbHRlckNoYW5nZS5uZXh0KGZpbHRlcik7XG4gIH1cblxuICBwcml2YXRlIGNvbHVtblZhbHVlRmlsdGVyczogQXJyYXk8T0NvbHVtblZhbHVlRmlsdGVyPiA9IFtdO1xuICBwcml2YXRlIGdyb3VwZWRSb3dTdGF0ZTogT1RhYmxlR3JvdXBlZFJvd1tdID0gW107XG4gIHByaXZhdGUgYWN0aXZlQWdncmVnYXRlcyA9IHt9O1xuICBwcml2YXRlIGdyb3VwZWRSb3dzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIGxldmVsc0V4cGFuc2lvblN0YXRlID0ge307XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHRhYmxlOiBPVGFibGVDb21wb25lbnQpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RhdGFiYXNlID0gdGFibGUuZGFvVGFibGU7XG4gICAgaWYgKHRoaXMuX2RhdGFiYXNlKSB7XG4gICAgICB0aGlzLnJlc3VsdHNMZW5ndGggPSB0aGlzLl9kYXRhYmFzZS5kYXRhLmxlbmd0aDtcbiAgICB9XG4gICAgaWYgKHRhYmxlLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5fcGFnaW5hdG9yID0gdGFibGUubWF0cGFnaW5hdG9yO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhYmxlLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgdGhpcy50YWJsZS52aXJ0dWFsU2Nyb2xsVmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbVxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICh2YWx1ZTogTGlzdFJhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl92aXJ0dWFsUGFnZUNoYW5nZS5uZXh0KG5ldyBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCh2YWx1ZSkpO1xuICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3RhYmxlT3B0aW9ucyA9IHRhYmxlLm9UYWJsZU9wdGlvbnM7XG4gICAgdGhpcy5fc29ydCA9IHRhYmxlLnNvcnQ7XG5cbiAgfVxuXG4gIHNvcnRGdW5jdGlvbihhOiBhbnksIGI6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnQuc29ydEZ1bmN0aW9uKGEsIGIpO1xuICB9XG5cbiAgZ2V0IHJlbmRlcmVkRGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlcmVkRGF0YTtcbiAgfVxuXG4gIHNldCByZW5kZXJlZERhdGEoYXJnOiBhbnlbXSkge1xuICAgIHRoaXMuX3JlbmRlcmVkRGF0YSA9IGFyZztcbiAgICB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25uZWN0IGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgdGFibGUgdG8gcmV0cmlldmUgb25lIHN0cmVhbSBjb250YWluaW5nIHRoZSBkYXRhIHRvIHJlbmRlci5cbiAgICovXG4gIGNvbm5lY3QoKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIGNvbnN0IGRpc3BsYXlEYXRhQ2hhbmdlczogYW55W10gPSBbXG4gICAgICB0aGlzLl9kYXRhYmFzZS5kYXRhQ2hhbmdlXG4gICAgXTtcblxuICAgIGlmICghdGhpcy50YWJsZS5wYWdlYWJsZSkge1xuXG5cbiAgICAgIGlmICh0aGlzLl9zb3J0KSB7XG4gICAgICAgIGRpc3BsYXlEYXRhQ2hhbmdlcy5wdXNoKHRoaXMuX3NvcnQub1NvcnRDaGFuZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fdGFibGVPcHRpb25zLmZpbHRlcikge1xuICAgICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0aGlzLl9xdWlja0ZpbHRlckNoYW5nZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9wYWdpbmF0b3IpIHtcbiAgICAgICAgZGlzcGxheURhdGFDaGFuZ2VzLnB1c2godGhpcy5fcGFnaW5hdG9yLnBhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRhYmxlLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCkge1xuICAgICAgZGlzcGxheURhdGFDaGFuZ2VzLnB1c2godGhpcy5fdmlydHVhbFBhZ2VDaGFuZ2UpO1xuICAgIH1cblxuICAgIGRpc3BsYXlEYXRhQ2hhbmdlcy5wdXNoKHRoaXMuX2NvbHVtblZhbHVlRmlsdGVyQ2hhbmdlKTtcblxuICAgIGlmICh0aGlzLnRhYmxlLmdyb3VwYWJsZSkge1xuICAgICAgZGlzcGxheURhdGFDaGFuZ2VzLnB1c2godGhpcy5ncm91cEJ5Q29sdW1uQ2hhbmdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoLi4uZGlzcGxheURhdGFDaGFuZ2VzKS5waXBlKFxuICAgICAgbWFwKCh4OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGRhdGEgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLl9kYXRhYmFzZS5kYXRhKTtcbiAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgIC8vIHJlbmRlciBzdWJzZXQgKHJhbmdlKSBvZiByZW5kZXJlZERhdGEgd2hlbiBuZXcgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwgZXZlbnQgaXMgZW1pdHRlZFxuICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFZpcnR1YWxTY3JvbGxEYXRhKHRoaXMucmVuZGVyZWREYXRhLCB4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvKlxuICAgICAgICAgICAgaXQgaXMgbmVjZXNzYXJ5IHRvIGZpcnN0IGNhbGN1bGF0ZSB0aGUgY2FsY3VsYXRlZCBjb2x1bW5zIGFuZFxuICAgICAgICAgICAgdGhlbiBmaWx0ZXIgYW5kIHNvcnQgdGhlIGRhdGFcbiAgICAgICAgICAqL1xuXG4gICAgICAgICAgaWYgKHRoaXMuZXhpc3RzQW55Q2FsY3VsYXRlZENvbHVtbigpKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRDb2x1bW5DYWxjdWxhdGVkRGF0YShkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXRoaXMudGFibGUucGFnZWFibGUpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldENvbHVtblZhbHVlRmlsdGVyRGF0YShkYXRhKTtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFF1aWNrRmlsdGVyRGF0YShkYXRhKTtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFNvcnRlZERhdGEoZGF0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZERhdGEgPSBPYmplY3QuYXNzaWduKFtdLCBkYXRhKTtcblxuICAgICAgICAgIGlmICh0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCB0b3RhbFJlY29yZHNOdW1iZXIgPSB0aGlzLnRhYmxlLmdldFRvdGFsUmVjb3Jkc051bWJlcigpO1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gdG90YWxSZWNvcmRzTnVtYmVyICE9PSB1bmRlZmluZWQgPyB0b3RhbFJlY29yZHNOdW1iZXIgOiBkYXRhLmxlbmd0aDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXN1bHRzTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRQYWdpbmF0aW9uRGF0YShkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMudGFibGUuZ3JvdXBhYmxlICYmICFVdGlsLmlzQXJyYXlFbXB0eSh0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXkpICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0R3JvdXBlZERhdGEoZGF0YSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSBkYXRhO1xuXG4gICAgICAgICAgLypcbiAgICAgICAgICAgIHdoZW4gdGhlIGRhdGEgaXMgdmVyeSBsYXJnZSwgdGhlIGFwcGxpY2F0aW9uIGNyYXNoZXMgc28gaXQgZ2V0cyBhIGxpbWl0ZWQgcmFuZ2Ugb2YgZGF0YSB0aGUgZmlyc3QgdGltZVxuICAgICAgICAgICAgYmVjYXVzZSBhdCBuZXh0IHRoZSBDdXN0b21WaXJ0dWFsU2Nyb2xsU3RyYXRlZ3kgd2lsbCBlbWl0IGV2ZW50IE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsXG4gICAgICAgICAgKi9cbiAgICAgICAgICBpZiAodGhpcy50YWJsZS52aXJ0dWFsU2Nyb2xsVmlld3BvcnQgJiYgIXRoaXMuX3BhZ2luYXRvcikge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0VmlydHVhbFNjcm9sbERhdGEoZGF0YSwgbmV3IE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsKHsgc3RhcnQ6IDAsIGVuZDogQ29kZXMuTElNSVRfU0NST0xMVklSVFVBTCB9KSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5hZ2dyZWdhdGVEYXRhID0gdGhpcy5nZXRBZ2dyZWdhdGVzRGF0YSh0aGlzLnJlbmRlcmVkRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9KSk7XG4gIH1cblxuICBnZXRHcm91cGVkRGF0YShkYXRhOiBhbnlbXSkge1xuICAgIGRhdGEgPSB0aGlzLmdldFN1Ykdyb3Vwc09mR3JvdXBlZFJvdyhkYXRhKTtcbiAgICAvKiogZGF0YSBjb250YWlucyByb3cgZ3JvdXAgaGVhZGVycyAoT1RhYmxlR3JvdXBlZFJvdykgYW5kIHRoZSBkYXRhIGJlbG9uZ2luZyB0byBleHBhbmRlZCBncm91cGVkIHJvd3MgKi9cbiAgICBkYXRhID0gdGhpcy5maWx0ZXJDb2xsYXBzZWRSb3dHcm91cChkYXRhKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHN1Ymdyb3VwcyBvZiBncm91cGVkIHJvd1xuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyBzdWJncm91cHMgb2YgZ3JvdXBlZCByb3dcbiAgICovXG4gIGdldFN1Ykdyb3Vwc09mR3JvdXBlZFJvdyhkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YSA9IHRoaXMuZ2V0U3VibGV2ZWwoZGF0YSwgMCk7XG4gIH1cblxuICBnZXRBZ2dyZWdhdGVzRGF0YShkYXRhOiBhbnlbXSk6IGFueSB7XG4gICAgY29uc3Qgb2JqID0ge307XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuX3RhYmxlT3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBPQ29sdW1uKSA9PiB7XG4gICAgICBsZXQgdG90YWxWYWx1ZSA9ICcnO1xuICAgICAgaWYgKGNvbHVtbi5hZ2dyZWdhdGUgJiYgY29sdW1uLnZpc2libGUpIHtcbiAgICAgICAgdG90YWxWYWx1ZSA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRlKGRhdGEsIGNvbHVtbi5hdHRyLCBjb2x1bW4uYWdncmVnYXRlLm9wZXJhdG9yKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGtleSA9IGNvbHVtbi5hdHRyO1xuICAgICAgb2JqW2tleV0gPSB0b3RhbFZhbHVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdGhhdCBnZXQgdmFsdWUgdGhlIGNvbHVtbnMgY2FsY3VsYXRlZFxuICAgKiBAcGFyYW0gZGF0YSBkYXRhIG9mIHRoZSBkYXRhYmFzZVxuICAgKi9cbiAgZ2V0Q29sdW1uQ2FsY3VsYXRlZERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgY2FsY3VsYXRlZENvbHMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIoKG9Db2w6IE9Db2x1bW4pID0+IG9Db2wudmlzaWJsZSAmJiBvQ29sLmNhbGN1bGF0ZSAhPT0gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdzogYW55KSA9PiB7XG4gICAgICBjYWxjdWxhdGVkQ29scy5mb3JFYWNoKChvQ29sdW1uOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBvQ29sdW1uLmNhbGN1bGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHNlbGYudHJhbnNmb3JtRm9ybXVsYShvQ29sdW1uLmNhbGN1bGF0ZSwgcm93KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb0NvbHVtbi5jYWxjdWxhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YWx1ZSA9IG9Db2x1bW4uY2FsY3VsYXRlKHJvdyk7XG4gICAgICAgIH1cbiAgICAgICAgcm93W29Db2x1bW4uYXR0cl0gPSBpc05hTih2YWx1ZSkgPyAwIDogdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByb3c7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJhbnNmb3JtRm9ybXVsYShmb3JtdWxhQXJnLCByb3cpOiBzdHJpbmcge1xuICAgIGxldCBmb3JtdWxhID0gZm9ybXVsYUFyZztcbiAgICAvLyAxLiByZXBsYWNlIGNvbHVtbnMgYnkgdmFsdWVzIG9mIHJvd1xuICAgIGNvbnN0IGNvbHVtbnNBdHRyID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMubWFwKChvQ29sOiBPQ29sdW1uKSA9PiBvQ29sLmF0dHIpO1xuICAgIGNvbHVtbnNBdHRyLmZvckVhY2goKGNvbHVtbjogc3RyaW5nKSA9PiB7XG4gICAgICBmb3JtdWxhID0gZm9ybXVsYS5yZXBsYWNlKGNvbHVtbiwgcm93W2NvbHVtbl0pO1xuICAgIH0pO1xuXG4gICAgbGV0IHJlc3VsdEZvcm11bGEgPSAnJztcbiAgICAvLyAyLiBUcmFuc2Zvcm0gZm9ybXVsYVxuICAgIHRyeSB7XG4gICAgICByZXN1bHRGb3JtdWxhID0gKG5ldyBGdW5jdGlvbigncmV0dXJuICcgKyBmb3JtdWxhKSkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdPcGVyYXRpb24gZGVmaW5lZCBpbiB0aGUgY2FsY3VsYXRlZCBjb2x1bW4gaXMgaW5jb3JyZWN0ICcpO1xuICAgIH1cbiAgICAvLyAzLiBSZXR1cm4gcmVzdWx0XG4gICAgcmV0dXJuIHJlc3VsdEZvcm11bGE7XG4gIH1cblxuICBnZXRRdWlja0ZpbHRlckRhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMucXVpY2tGaWx0ZXIpICYmIHRoaXMucXVpY2tGaWx0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlsdGVyRGF0YSA9ICF0aGlzLl90YWJsZU9wdGlvbnMuZmlsdGVyQ2FzZVNlbnNpdGl2ZSA/IHRoaXMucXVpY2tGaWx0ZXIudG9Mb3dlckNhc2UoKSA6IHRoaXMucXVpY2tGaWx0ZXI7XG4gICAgICByZXR1cm4gZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAvLyBHZXR0aW5nIGN1c3RvbSBjb2x1bW5zIGZpbHRlciBjb2x1bW5zIHJlc3VsdFxuICAgICAgICBjb25zdCBwYXNzQ3VzdG9tRmlsdGVyID0gdGhpcy5mdWxmaWxsc0N1c3RvbUZpbHRlckZ1bmN0aW9ucyhmaWx0ZXJEYXRhLCBpdGVtKTtcbiAgICAgICAgLy8gR2V0dGluZyBvdGhlciBzZWFyY2hhYmxlIGNvbHVtbnMgc3RhbmRhcmQgcmVzdWx0XG4gICAgICAgIGNvbnN0IHBhc3NTZWFyY2hTdHJpbmcgPSB0aGlzLmZ1bGZpbGxzUXVpY2tmaWx0ZXIoZmlsdGVyRGF0YSwgaXRlbSk7XG4gICAgICAgIHJldHVybiBwYXNzQ3VzdG9tRmlsdGVyIHx8IHBhc3NTZWFyY2hTdHJpbmc7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGFnaW5hdGlvbkRhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCF0aGlzLl9wYWdpbmF0b3IgfHwgaXNOYU4odGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGxldCBzdGFydEluZGV4ID0gaXNOYU4odGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplKSA/IDAgOiB0aGlzLl9wYWdpbmF0b3IucGFnZUluZGV4ICogdGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplO1xuICAgIGlmIChkYXRhLmxlbmd0aCA+IDAgJiYgZGF0YS5sZW5ndGggPCBzdGFydEluZGV4KSB7XG4gICAgICBzdGFydEluZGV4ID0gMDtcbiAgICAgIHRoaXMuX3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS5zcGxpY2Uoc3RhcnRJbmRleCwgdGhpcy5fcGFnaW5hdG9yLnBhZ2VTaXplKTtcbiAgfVxuXG4gIGdldFZpcnR1YWxTY3JvbGxEYXRhKGRhdGE6IGFueVtdLCB4OiBPblJhbmdlQ2hhbmdlVmlydHVhbFNjcm9sbCk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5zbGljZSh4LnJhbmdlLnN0YXJ0LCB4LnJhbmdlLmVuZClcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKSB7XG4gICAgdGhpcy5kYXRhVG90YWxzQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fcXVpY2tGaWx0ZXJDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZ3JvdXBCeUNvbHVtbkNoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3ZpcnR1YWxQYWdlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZnVsZmlsbHNDdXN0b21GaWx0ZXJGdW5jdGlvbnMoZmlsdGVyOiBzdHJpbmcsIGl0ZW06IGFueSkge1xuICAgIGNvbnN0IGN1c3RvbUZpbHRlckNvbHMgPSB0aGlzLnRhYmxlLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIob0NvbCA9PiBvQ29sLnVzZUN1c3RvbUZpbHRlckZ1bmN0aW9uKCkpO1xuICAgIHJldHVybiBjdXN0b21GaWx0ZXJDb2xzLnNvbWUob0NvbCA9PiBvQ29sLnJlbmRlcmVyLmZpbHRlckZ1bmN0aW9uKGl0ZW1bb0NvbC5hdHRyXSwgaXRlbSwgZmlsdGVyKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZnVsZmlsbHNRdWlja2ZpbHRlcihmaWx0ZXI6IHN0cmluZywgaXRlbTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcigob0NvbDogT0NvbHVtbikgPT4gb0NvbC51c2VRdWlja2ZpbHRlckZ1bmN0aW9uKCkpO1xuICAgIGxldCBzZWFyY2hTdHIgPSBjb2x1bW5zLm1hcCgob0NvbDogT0NvbHVtbikgPT4gb0NvbC5nZXRGaWx0ZXJWYWx1ZShpdGVtW29Db2wuYXR0cl0sIGl0ZW0pLmpvaW4oJyAnKSkuam9pbignICcpO1xuICAgIGlmICghdGhpcy5fdGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUpIHtcbiAgICAgIHNlYXJjaFN0ciA9IHNlYXJjaFN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc2VhcmNoU3RyLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICAvKiogUmV0dXJucyBhIHNvcnRlZCBjb3B5IG9mIHRoZSBkYXRhYmFzZSBkYXRhLiAqL1xuICBwcm90ZWN0ZWQgZ2V0U29ydGVkRGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydC5nZXRTb3J0ZWREYXRhKGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGRhdGEgdGhlIHRhYmxlIHN0b3Jlcy4gTm8gZmlsdGVycyBhcmUgYXBwbGllZC5cbiAgICovXG4gIGdldFRhYmxlRGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlLmRhdGE7XG4gIH1cblxuICAvKiogUmV0dXJuIGRhdGEgb2YgdGhlIHZpc2libGUgY29sdW1ucyBvZiB0aGUgdGFibGUgd2l0aG91dCByZW5kZXJpbmcgKi9cbiAgZ2V0Q3VycmVudERhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmdldERhdGEoKTtcbiAgfVxuXG4gIGdldEN1cnJlbnRBbGxEYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxEYXRhKGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICAvKiogUmV0dXJuIGRhdGEgb2YgdGhlIHZpc2libGUgY29sdW1ucyBvZiB0aGUgdGFibGUgIHJlbmRlcmluZyAqL1xuICBnZXRDdXJyZW50UmVuZGVyZXJEYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZW5kZXJlZERhdGEodGhpcy5yZW5kZXJlZERhdGEpO1xuICB9XG5cbiAgLyoqIFJldHVybiBhbGwgZGF0YSBvZiB0aGUgdGFibGUgcmVuZGVyaW5nICovXG4gIGdldEFsbFJlbmRlcmVyRGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsRGF0YSh0cnVlLCB0cnVlKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gc3FsIHR5cGVzIG9mIHRoZSBjdXJyZW50IGRhdGEgKi9cbiAgZ2V0IHNxbFR5cGVzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlLnNxbFR5cGVzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWREYXRhO1xuICB9XG5cbiAgcHVibGljIGdldFJlbmRlcmVkRGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihvQ29sID0+IG9Db2wudmlzaWJsZSk7XG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgdmlzaWJsZUNvbHVtbnMuZm9yRWFjaCgob0NvbDogT0NvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCB1c2VSZW5kZXJlciA9IG9Db2wucmVuZGVyZXIgJiYgb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YTtcbiAgICAgICAgb2JqW29Db2wuYXR0cl0gPSB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBbGxEYXRhKHVzaW5nUmVuZGVyZXJlcnM/OiBib29sZWFuLCBvbmx5VmlzaWJsZUNvbHVtbnM/OiBib29sZWFuKSB7XG4gICAgbGV0IHRhYmxlQ29sdW1ucyA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zO1xuICAgIGlmIChvbmx5VmlzaWJsZUNvbHVtbnMpIHtcbiAgICAgIHRhYmxlQ29sdW1ucyA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihvQ29sID0+IG9Db2wudmlzaWJsZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZpbHRlcmVkRGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICB0YWJsZUNvbHVtbnMuZm9yRWFjaCgob0NvbDogT0NvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCB1c2VSZW5kZXJlciA9IHVzaW5nUmVuZGVyZXJlcnMgJiYgb0NvbC5yZW5kZXJlciAmJiBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhO1xuICAgICAgICBvYmpbb0NvbC5hdHRyXSA9IHVzZVJlbmRlcmVyID8gb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YShyb3dbb0NvbC5hdHRyXSwgcm93KSA6IHJvd1tvQ29sLmF0dHJdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZW5kZXJlcnNEYXRhKGRhdGE6IGFueVtdLCB0YWJsZUNvbHVtbnM6IE9Db2x1bW5bXSk6IGFueVtdIHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgLy8gcmVuZGVyIGVhY2ggY29sdW1uXG4gICAgICBjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHt9LCByb3cpO1xuICAgICAgdGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2w6IE9Db2x1bW4pID0+IHtcbiAgICAgICAgb2JqW29Db2wuYXR0cl0gPSBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1tvQ29sLmF0dHJdLCByb3cpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldENvbHVtbkRhdGEob2NvbHVtbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVuZGVyZWREYXRhLm1hcCgocm93KSA9PiB7XG4gICAgICAvLyByZW5kZXIgZWFjaCBjb2x1bW5cbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgaWYgKG9jb2x1bW4pIHtcbiAgICAgICAgb2JqW29jb2x1bW5dID0gcm93W29jb2x1bW5dO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIGluaXRpYWxpemVDb2x1bW5zRmlsdGVycyhmaWx0ZXJzOiBPQ29sdW1uVmFsdWVGaWx0ZXJbXSkge1xuICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzID0gW107XG4gICAgZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgfSk7XG4gICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLl9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZS5uZXh0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGlzQ29sdW1uVmFsdWVGaWx0ZXJBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmxlbmd0aCAhPT0gMDtcbiAgfVxuXG4gIGdldENvbHVtblZhbHVlRmlsdGVycygpOiBPQ29sdW1uVmFsdWVGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzO1xuICB9XG5cbiAgZ2V0Q29sdW1uVmFsdWVGaWx0ZXJCeUF0dHIoYXR0cjogc3RyaW5nKTogT0NvbHVtblZhbHVlRmlsdGVyIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMuZmluZChpdGVtID0+IGl0ZW0uYXR0ciA9PT0gYXR0cik7XG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcnModHJpZ2dlcjogYm9vbGVhbiA9IHRydWUsIGNvbHVtbnNBdHRyPzogc3RyaW5nW10pIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uc0F0dHIpKSB7XG4gICAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycyA9IHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZpbHRlcih4ID0+ICFjb2x1bW5zQXR0ci5pbmNsdWRlcyh4LmF0dHIpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMgPSBbXTtcbiAgICB9XG4gICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgIHRoaXMuX2NvbHVtblZhbHVlRmlsdGVyQ2hhbmdlLm5leHQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJDb2x1bW5GaWx0ZXIoYXR0cjogc3RyaW5nLCB0cmlnZ2VyOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzID0gdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMuZmlsdGVyKHggPT4geC5hdHRyICE9PSBhdHRyKTtcbiAgICBpZiAodHJpZ2dlcikge1xuICAgICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UubmV4dChudWxsKTtcbiAgICB9XG4gIH1cblxuICBhZGRDb2x1bW5GaWx0ZXIoZmlsdGVyOiBPQ29sdW1uVmFsdWVGaWx0ZXIpIHtcbiAgICBjb25zdCBleGlzdGluZ0ZpbHRlckluZGV4ID0gdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5hdHRyID09PSBmaWx0ZXIuYXR0cik7XG4gICAgaWYgKGV4aXN0aW5nRmlsdGVySW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMuc3BsaWNlKGV4aXN0aW5nRmlsdGVySW5kZXgsIDEsIGZpbHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB2YWxpZEZpbHRlciA9IFV0aWwuaXNEZWZpbmVkKGZpbHRlci52YWx1ZXMpO1xuICAgICAgaWYgKHZhbGlkRmlsdGVyKSB7XG4gICAgICAgIHN3aXRjaCAoZmlsdGVyLm9wZXJhdG9yKSB7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLklOOlxuICAgICAgICAgICAgdmFsaWRGaWx0ZXIgPSBmaWx0ZXIudmFsdWVzLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuQkVUV0VFTjpcbiAgICAgICAgICAgIHZhbGlkRmlsdGVyID0gZmlsdGVyLnZhbHVlcy5sZW5ndGggPT09IDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuRVFVQUw6XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkxFU1NfRVFVQUw6XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUw6XG4gICAgICAgICAgICB2YWxpZEZpbHRlciA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFsaWRGaWx0ZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsaWRGaWx0ZXIpIHtcbiAgICAgICAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5wdXNoKGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgdGhlIHRhYmxlIGlzIHBhZ2luYXRlZCwgZmlsdGVyIHdpbGwgYmUgYXBwbGllZCBvbiByZW1vdGUgcXVlcnlcbiAgICBpZiAoIXRoaXMudGFibGUucGFnZWFibGUpIHtcbiAgICAgIHRoaXMuX2NvbHVtblZhbHVlRmlsdGVyQ2hhbmdlLm5leHQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29sdW1uVmFsdWVGaWx0ZXJEYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMudGFibGUub1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbmQoY29sID0+IGNvbC5hdHRyID09PSBmaWx0ZXIuYXR0cik7XG4gICAgICBpZiAoZmlsdGVyQ29sdW1uKSB7XG4gICAgICAgIHN3aXRjaCAoZmlsdGVyLm9wZXJhdG9yKSB7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLklOOlxuICAgICAgICAgICAgY29uc3QgZmlsdGVyVmFsdWVzID0gKGZpbHRlci52YWx1ZXMgfHwgW10pLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+XG4gICAgICAgICAgICAgIHByZXZpb3VzLmNvbmNhdChmaWx0ZXJDb2x1bW4uZ2V0RmlsdGVyVmFsdWUoY3VycmVudCkubWFwKGYgPT4gVXRpbC5ub3JtYWxpemVTdHJpbmcoZikpKSwgW10pO1xuXG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZmlsdGVyQ29sdW1uLnJlbmRlcmVyICYmIGZpbHRlckNvbHVtbi5yZW5kZXJlci5maWx0ZXJGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJDb2x1bW4ucmVuZGVyZXIuZmlsdGVyRnVuY3Rpb24oaXRlbVtmaWx0ZXIuYXR0cl0sIGl0ZW0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlcyA9IGZpbHRlckNvbHVtbi5nZXRGaWx0ZXJWYWx1ZShpdGVtW2ZpbHRlci5hdHRyXSwgaXRlbSkubWFwKGYgPT4gVXRpbC5ub3JtYWxpemVTdHJpbmcoZikpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJWYWx1ZXMuc29tZSh2YWx1ZSA9PiBjb2xWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgIT09IC0xKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuRVFVQUw6XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBVdGlsLm5vcm1hbGl6ZVN0cmluZyhmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgY29sVmFsdWVzID0gZmlsdGVyQ29sdW1uLmdldEZpbHRlclZhbHVlKGl0ZW1bZmlsdGVyLmF0dHJdLCBpdGVtKS5tYXAoZiA9PiBVdGlsLm5vcm1hbGl6ZVN0cmluZyhmKSk7XG4gICAgICAgICAgICAgIGxldCByZWdFeHA7XG4gICAgICAgICAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaW5jbHVkZXMoJyonKSkge1xuICAgICAgICAgICAgICAgIHJlZ0V4cCA9IG5ldyBSZWdFeHAoJ14nICsgbm9ybWFsaXplZFZhbHVlLnNwbGl0KCcqJykuam9pbignLionKSArICckJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGNvbFZhbHVlcy5zb21lKGNvbFZhbHVlID0+IHJlZ0V4cCA/IHJlZ0V4cC50ZXN0KGNvbFZhbHVlKSA6IGNvbFZhbHVlLmluY2x1ZGVzKG5vcm1hbGl6ZWRWYWx1ZSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuQkVUV0VFTjpcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpdGVtID0+IGl0ZW1bZmlsdGVyLmF0dHJdID49IGZpbHRlci52YWx1ZXNbMF0gJiYgaXRlbVtmaWx0ZXIuYXR0cl0gPD0gZmlsdGVyLnZhbHVlc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuTU9SRV9FUVVBTDpcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLmZpbHRlcihpdGVtID0+IGl0ZW1bZmlsdGVyLmF0dHJdID49IGZpbHRlci52YWx1ZXMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkxFU1NfRVFVQUw6XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtW2ZpbHRlci5hdHRyXSA8PSBmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBnZXRBZ2dyZWdhdGVEYXRhKGNvbHVtbjogT0NvbHVtbikge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIGxldCB0b3RhbFZhbHVlID0gJyc7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuX3RhYmxlT3B0aW9ucyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBuZXcgQXJyYXkob2JqKTtcbiAgICB9XG4gICAgdG90YWxWYWx1ZSA9IHRoaXMuYWdncmVnYXRlRGF0YVtjb2x1bW4uYXR0cl07XG4gICAgcmV0dXJuIHRvdGFsVmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FsY3VsYXRlQWdncmVnYXRlKGRhdGE6IGFueVtdLCBjb2x1bW5BdHRyOiBzdHJpbmcsIG9wZXJhdG9yOiBzdHJpbmcgfCBGdW5jdGlvbik6IGFueSB7XG4gICAgbGV0IHJlc3VsdEFnZ3JlZ2F0ZTtcbiAgICBpZiAodHlwZW9mIG9wZXJhdG9yID09PSAnc3RyaW5nJykge1xuICAgICAgc3dpdGNoIChvcGVyYXRvci50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGNhc2UgJ2NvdW50JzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLmNvdW50KGNvbHVtbkF0dHIsIGRhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtaW4nOlxuICAgICAgICAgIHJlc3VsdEFnZ3JlZ2F0ZSA9IHRoaXMubWluKGNvbHVtbkF0dHIsIGRhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtYXgnOlxuICAgICAgICAgIHJlc3VsdEFnZ3JlZ2F0ZSA9IHRoaXMubWF4KGNvbHVtbkF0dHIsIGRhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdhdmcnOlxuICAgICAgICAgIHJlc3VsdEFnZ3JlZ2F0ZSA9IHRoaXMuYXZnKGNvbHVtbkF0dHIsIGRhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJlc3VsdEFnZ3JlZ2F0ZSA9IHRoaXMuc3VtKGNvbHVtbkF0dHIsIGRhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb2x1bW5EYXRhOiBhbnlbXSA9IHRoaXMuZ2V0Q29sdW1uRGF0YShjb2x1bW5BdHRyKTtcbiAgICAgIGlmICh0eXBlb2Ygb3BlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzdWx0QWdncmVnYXRlID0gb3BlcmF0b3IoY29sdW1uRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRBZ2dyZWdhdGU7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VtKGNvbHVtbiwgZGF0YSk6IG51bWJlciB7XG4gICAgbGV0IHZhbHVlID0gMDtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgLy9JZiB0aGUgZGF0YSBpcyBncm91cGVkLCB0aGUgdmFsdWVzIOKAi+KAi29mIHRoZSBzdWJncm91cHMgaW4gbGV2ZWwgMSBhcmUgc3VtbWVkXG4gICAgICBpZiAoZGF0YVswXSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICAgICAgdGhpcy5nZXREYXRhRnJvbUZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KGRhdGEpLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgdmFsdWUgPSB4LmdldENvbHVtbkFnZ3JlZ2F0ZURhdGEoY29sdW1uKS5yZWR1Y2UoKGFjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjdW11bGF0b3IgKyAoaXNOYU4oY3VycmVudFZhbHVlW2NvbHVtbl0pID8gMCA6IGN1cnJlbnRWYWx1ZVtjb2x1bW5dKTtcbiAgICAgICAgICB9LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBkYXRhLnJlZHVjZSgoYWN1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjdW11bGF0b3IgKyAoaXNOYU4oY3VycmVudFZhbHVlW2NvbHVtbl0pID8gMCA6IGN1cnJlbnRWYWx1ZVtjb2x1bW5dKTtcbiAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKyh2YWx1ZSkudG9GaXhlZCgyKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb3VudChjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIC8vSWYgdGhlIGRhdGEgaXMgZ3JvdXBlZCwgdGhlIGNvdW50IGlzIGNhbGN1bGF0ZWQgYnkgYWRkaW5nIHRoZSBjb3VudHMgZm9yIGVhY2ggc3ViZ3JvdXAgaW4gbGV2ZWwgMVxuICAgICAgaWYgKGRhdGFbMF0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICAgIHRoaXMuZ2V0RGF0YUZyb21GaXJzdExldmVsVGFibGVHcm91cFJvdyhkYXRhKS5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIHZhbHVlID0geC5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbikucmVkdWNlKChhY3VtdWxhdG9yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYWN1bXVsYXRvciArIDE7XG4gICAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZGF0YS5yZWR1Y2UoKGFjdW11bGF0b3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gYWN1bXVsYXRvciArIDE7XG4gICAgICAgIH0sIDApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXZnKGNvbHVtbiwgZGF0YSk6IG51bWJlciB7XG4gICAgY29uc3QgdG90YWxTdW0gPSB0aGlzLnN1bShjb2x1bW4sIGRhdGEpO1xuICAgIGNvbnN0IHRvdGFsQ291bnQgPSB0aGlzLmNvdW50KGNvbHVtbiwgZGF0YSk7XG4gICAgcmV0dXJuICsoKHRvdGFsU3VtID09PSAwIHx8IHRvdGFsQ291bnQgPT09IDApID8gMCA6ICh0b3RhbFN1bSAvIHRvdGFsQ291bnQpKS50b0ZpeGVkKDIpO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgbWluKGNvbHVtbiwgZGF0YSk6IG51bWJlciB7XG4gICAgbGV0IHRlbXBNaW4gPSBbXTtcbiAgICAvL0lmIHRoZSBkYXRhIGlzIGdyb3VwZWQsIHRoZSBtaW5pbXVtIGlzIGNhbGN1bGF0ZWQgd2l0aCB0aGUgbWluaW11bSBvZiBlYWNoIHN1Ymdyb3VwIGluIGxldmVsIDFcbiAgICBpZiAoZGF0YVswXSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICAgIHRlbXBNaW4gPSB0aGlzLmdldERhdGFGcm9tRmlyc3RMZXZlbFRhYmxlR3JvdXBSb3coZGF0YSkubWFwKHggPT4ge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4oLi4ueC5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbikubWFwKHggPT4geFtjb2x1bW5dKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVtcE1pbiA9IGRhdGEubWFwKHggPT4geFtjb2x1bW5dKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVtcE1pbi5sZW5ndGggPiAwID8gTWF0aC5taW4oLi4udGVtcE1pbikgOiAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1heChjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGxldCB0ZW1wTWF4ID0gW107XG4gICAgaWYgKGRhdGFbMF0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICAvL0lmIHRoZSBkYXRhIGFyZSBncm91cGVkLCB0aGUgbWF4aW11bSBpcyBjYWxjdWxhdGVkIHdpdGggdGhlIG1heGltdW0gb2YgZWFjaCBzdWJncm91cCBpbiBsZXZlbCAxXG4gICAgICB0ZW1wTWF4ID0gdGhpcy5nZXREYXRhRnJvbUZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KGRhdGEpLm1hcCh4ID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLnguZ2V0Q29sdW1uQWdncmVnYXRlRGF0YShjb2x1bW4pLm1hcCh4ID0+IHhbY29sdW1uXSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlbXBNYXggPSBkYXRhLm1hcCh4ID0+IHhbY29sdW1uXSk7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wTWF4Lmxlbmd0aCA+IDAgPyBNYXRoLm1heCguLi50ZW1wTWF4KSA6IDA7XG4gIH1cblxuICBwcml2YXRlIGlzRmlyc3RMZXZlbFRhYmxlR3JvdXBSb3codGFibGVSb3dHcm91cERhdGE6IGFueSkge1xuICAgIHJldHVybiB0YWJsZVJvd0dyb3VwRGF0YSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cgJiYgdGFibGVSb3dHcm91cERhdGEubGV2ZWwgPT09IDE7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGFGcm9tRmlyc3RMZXZlbFRhYmxlR3JvdXBSb3coZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKHggPT4gdGhpcy5pc0ZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KHgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBleGlzdHNBbnlDYWxjdWxhdGVkQ29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maW5kKChvQ29sOiBPQ29sdW1uKSA9PiBvQ29sLmNhbGN1bGF0ZSAhPT0gdW5kZWZpbmVkKSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdXBkYXRlUmVuZGVyZWRSb3dEYXRhKHJvd0RhdGE6IGFueSkge1xuICAgIGNvbnN0IHRhYmxlS2V5cyA9IHRoaXMudGFibGUuZ2V0S2V5cygpO1xuICAgIGNvbnN0IHJlY29yZCA9IHRoaXMucmVuZGVyZWREYXRhLmZpbmQoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgbGV0IGZvdW5kID0gdHJ1ZTtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0YWJsZUtleXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGFibGVLZXlzW2ldO1xuICAgICAgICBpZiAoZGF0YVtrZXldICE9PSByb3dEYXRhW2tleV0pIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZm91bmQ7XG4gICAgfSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHJlY29yZCkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVjb3JkLCByb3dEYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERhdGFJbmZvcm1hdGlvbkJ5R3JvdXAoZGF0YTogYW55W10sIGxldmVsOiBudW1iZXIpIHtcbiAgICBjb25zdCByZWNvcmRIYXNoID0ge307XG4gICAgZGF0YS5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGxldmVsOyBpKyspIHtcbiAgICAgICAga2V5c1t0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXlbaV1dID0gdGhpcy50YWJsZS5nZXRDb2x1bW5EYXRhQnlBdHRyKHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtpXSwgcm93KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY29yZEtleSA9IEpTT04uc3RyaW5naWZ5KGtleXMpO1xuICAgICAgaWYgKHJlY29yZEhhc2guaGFzT3duUHJvcGVydHkocmVjb3JkS2V5KSkge1xuICAgICAgICByZWNvcmRIYXNoW3JlY29yZEtleV0ucHVzaChpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZEhhc2hbcmVjb3JkS2V5XSA9IFtpXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVjb3JkSGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVDb2x1bW5BZ2dyZWdhdGUoY29sdW1uQXR0cjogc3RyaW5nLCByb3c6IE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICBjb25zdCBhZ2dyZWdhdGVDb25mID0gcm93LmdldEFjdGl2ZUNvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24oY29sdW1uQXR0cik7XG4gICAgY29uc3QgZGF0YSA9IHJvdy5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbkF0dHIpO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWxjdWxhdGVBZ2dyZWdhdGUoZGF0YSwgYWdncmVnYXRlQ29uZi5hdHRyLCBhZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZUZ1bmN0aW9uIHx8IGFnZ3JlZ2F0ZUNvbmYuYWdncmVnYXRlKTtcbiAgICByb3cuc2V0Q29sdW1uQWdncmVnYXRlVmFsdWUoY29sdW1uQXR0ciwgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdWJsZXZlbChkYXRhOiBhbnlbXSwgbGV2ZWw6IG51bWJlciwgcGFyZW50PzogT1RhYmxlR3JvdXBlZFJvdyk6IGFueVtdIHtcbiAgICBpZiAobGV2ZWwgPj0gdGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZEhhc2ggPSB0aGlzLmdldERhdGFJbmZvcm1hdGlvbkJ5R3JvdXAoZGF0YSwgbGV2ZWwpO1xuXG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIE9iamVjdC5rZXlzKHJlY29yZEhhc2gpLmZvckVhY2gocmVjb3JkS2V5ID0+IHtcblxuICAgICAgY29uc3Qgcm93ID0gbmV3IE9UYWJsZUdyb3VwZWRSb3coe1xuICAgICAgICBjb2x1bW46IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtsZXZlbF0sXG4gICAgICAgIGtleXNBc1N0cmluZzogcmVjb3JkS2V5LFxuICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZ3JvdXBlZFJvd3NTdWJzY3JpcHRpb24uYWRkKHJvdy5hZ2dyZWdhdGVGdW5jdGlvbkNoYW5nZS5zdWJzY3JpYmUoYXJnID0+IHtcbiAgICAgICAgaWYgKGFyZy5jaGFuZ2VBbGxHcm91cGVkUm93cykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlQWdncmVnYXRlc1thcmcuY29sdW1uQXR0cl0gPSBhcmcuYWN0aXZlQWdncmVnYXRlO1xuICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhLmZpbHRlcihyb3cgPT4gcm93IGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgcm93LnNldENvbHVtbkFjdGl2ZUFnZ3JlZ2F0ZUZ1bmN0aW9uKGFyZy5jb2x1bW5BdHRyLCBhcmcuYWN0aXZlQWdncmVnYXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQ29sdW1uQWdncmVnYXRlKGFyZy5jb2x1bW5BdHRyLCByb3cpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVDb2x1bW5BZ2dyZWdhdGUoYXJnLmNvbHVtbkF0dHIsIGFyZy5yb3cpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICBjb25zdCBhZmZlY3RlZEluZGV4ZXMgPSByZWNvcmRIYXNoW3Jvdy5rZXlzQXNTdHJpbmddO1xuICAgICAgY29uc3QgZ3JvdXBEYXRhID0gZGF0YS5maWx0ZXIoKHJvdywgaW5kZXgpID0+IGFmZmVjdGVkSW5kZXhlcy5pbmNsdWRlcyhpbmRleCkpO1xuICAgICAgdGhpcy50YWJsZS52aXNpYmxlQ29sQXJyYXkuZm9yRWFjaCgoY29sdW1uQXR0ciwgaSkgPT4ge1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIHJvdy50aXRsZSA9IHRoaXMuZ2V0VGV4dEdyb3VwUm93KHJvdywgYWZmZWN0ZWRJbmRleGVzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNlQ29sdW1uQWdncmVnYXRlID0gdGhpcy50YWJsZS51c2VDb2x1bW5Hcm91cGluZ0FnZ3JlZ2F0ZShjb2x1bW5BdHRyKTtcbiAgICAgICAgaWYgKHVzZUNvbHVtbkFnZ3JlZ2F0ZSkge1xuICAgICAgICAgIHJvdy5pbml0aWFsaXplQ29sdW1uQWdncmVnYXRlKGNvbHVtbkF0dHIsIHRoaXMudGFibGUuZ2V0Q29sdW1uR3JvdXBpbmdDb21wb25lbnQoY29sdW1uQXR0cikpO1xuXG4gICAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuYWN0aXZlQWdncmVnYXRlc1tjb2x1bW5BdHRyXSkpIHtcbiAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BY3RpdmVBZ2dyZWdhdGVGdW5jdGlvbihjb2x1bW5BdHRyLCB0aGlzLmFjdGl2ZUFnZ3JlZ2F0ZXNbY29sdW1uQXR0cl0sIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocm93Lmhhc0FjdGl2ZUFnZ3JlZ2F0ZShjb2x1bW5BdHRyKSkge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlRGF0YSA9IGdyb3VwRGF0YS5tYXAoeCA9PiB7IGNvbnN0IG9iaiA9IHt9OyBvYmpbY29sdW1uQXR0cl0gPSB4W2NvbHVtbkF0dHJdOyByZXR1cm4gb2JqOyB9KTtcbiAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbkF0dHIsIGFnZ3JlZ2F0ZURhdGEpO1xuXG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVDb25mID0gcm93LmdldEFjdGl2ZUNvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24oY29sdW1uQXR0cik7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRlKGFnZ3JlZ2F0ZURhdGEsIGFnZ3JlZ2F0ZUNvbmYuYXR0ciwgYWdncmVnYXRlQ29uZi5hZ2dyZWdhdGVGdW5jdGlvbiB8fCBhZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZSk7XG4gICAgICAgICAgICByb3cuc2V0Q29sdW1uQWdncmVnYXRlVmFsdWUoY29sdW1uQXR0ciwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByb3cuZXhwYW5kZWQgPSB0aGlzLmdldEV4cGFuc2lvblN0YXRlKHJvdyk7XG4gICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZ2V0U3VibGV2ZWwoZ3JvdXBEYXRhLCBsZXZlbCArIDEsIHJvdyk7XG4gICAgICBzdWJHcm91cC51bnNoaWZ0KHJvdyk7XG4gICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgY29sbGFwc2VkIHJvdyBncm91cFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyBjb2xsYXBzZWQgcm93IGdyb3VwXG4gICAqL1xuICBmaWx0ZXJDb2xsYXBzZWRSb3dHcm91cChkYXRhOiBhbnkpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4gKHJvdyBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpID8gcm93LnZpc2libGUgOiB0aGlzLmJlbG9uZ3NUb0V4cGFuZGVkR3JvdXBlZFJvdyhkYXRhLCByb3cpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWxvbmdzIHRvIGFuIGV4cGFuZGVkIGdyb3VwZWQgcm93XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0byBleHBhbmRlZCBncm91cGVkIHJvd1xuICAgKi9cbiAgYmVsb25nc1RvRXhwYW5kZWRHcm91cGVkUm93KGRhdGE6IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgcGFyZW50OiBPVGFibGVHcm91cGVkUm93O1xuICAgIGxldCBtYXRjaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aCAmJiAhbWF0Y2g7IGluZGV4KyspIHtcbiAgICAgIGlmIChkYXRhW2luZGV4XSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICAgICAgcGFyZW50ID0gZGF0YVtpbmRleF07XG4gICAgICB9IGVsc2UgaWYgKFV0aWwuaXNFcXVpdmFsZW50KGRhdGFbaW5kZXhdLCByb3cpKSB7XG4gICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHBhcmVudCkgPyAocGFyZW50LnZpc2libGUgJiYgcGFyZW50LmV4cGFuZGVkKSA6IHRydWU7XG4gIH1cblxuICB1cGRhdGVHcm91cGVkQ29sdW1ucygpIHtcbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgZ3JvdXAgYnkgY29sdW1uXG4gICAqIEBwYXJhbSByb3dHcm91cFxuICAgKi9cbiAgdG9nZ2xlR3JvdXBCeUNvbHVtbihyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIGlmIChyb3dHcm91cC5leHBhbmRTYW1lTGV2ZWwodGhpcy50YWJsZS5leHBhbmRHcm91cHNTYW1lTGV2ZWwpKSB7XG4gICAgICB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvd0dyb3VwLmxldmVsXSA9ICFyb3dHcm91cC5leHBhbmRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZVJvd0dyb3VwZWQocm93R3JvdXApO1xuICAgIH1cbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UubmV4dCgpO1xuICB9XG5cbiAgc2V0Um93R3JvdXBMZXZlbEV4cGFuc2lvbihyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdywgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvd0dyb3VwLmxldmVsXSA9IHZhbHVlO1xuICAgIHRoaXMuZ3JvdXBCeUNvbHVtbkNoYW5nZS5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlUm93R3JvdXBlZChyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIGNvbnN0IHN0YXRlUm93R3JvdXBlZCA9IHRoaXMuZ3JvdXBlZFJvd1N0YXRlLmZpbmQocm93ID0+IHJvd0dyb3VwLmtleXNBc1N0cmluZyA9PT0gcm93LmtleXNBc1N0cmluZyAmJiBKU09OLnN0cmluZ2lmeShyb3dHcm91cC5wYXJlbnQpID09PSBKU09OLnN0cmluZ2lmeShyb3cucGFyZW50KSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHN0YXRlUm93R3JvdXBlZCkpIHtcbiAgICAgIHN0YXRlUm93R3JvdXBlZC5leHBhbmRlZCA9ICFzdGF0ZVJvd0dyb3VwZWQuZXhwYW5kZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd0dyb3VwLmV4cGFuZGVkID0gIXJvd0dyb3VwLmV4cGFuZGVkO1xuICAgICAgdGhpcy5ncm91cGVkUm93U3RhdGUucHVzaChyb3dHcm91cCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZXh0R3JvdXBSb3coZ3JvdXA6IE9UYWJsZUdyb3VwZWRSb3csIHRvdGFsQ291bnRzOiBudW1iZXIpIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtncm91cC5sZXZlbCAtIDFdO1xuICAgIGxldCB2YWx1ZSA9IEpTT04ucGFyc2UoZ3JvdXAua2V5c0FzU3RyaW5nKVt0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXlbZ3JvdXAubGV2ZWwgLSAxXV07XG5cbiAgICBjb25zdCBvQ29sID0gdGhpcy50YWJsZS5nZXRPQ29sdW1uKGZpZWxkKTtcblxuICAgIGlmICghdmFsdWUgJiYgVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlcikgJiYgKHRoaXMudGFibGUgYXMgYW55KS5pc0luc3RhbmNlT2ZPVGFibGVDZWxsUmVuZGVyZXJTZXJ2aWNlQ29tcG9uZW50KG9Db2wucmVuZGVyZXIpKSB7XG4gICAgICB2YWx1ZSA9ICcgLSAnO1xuICAgICAgaWYgKCF0aGlzLnRhYmxlLm9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnRhYmxlLm9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbiA9IChvQ29sLnJlbmRlcmVyIGFzIGFueSkub25EYXRhTG9hZGVkLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUdyb3VwZWRDb2x1bW5zKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKHRoaXMudGFibGUgYXMgYW55KS50cmFuc2xhdGVTZXJ2aWNlLmdldChvQ29sLnRpdGxlKSArICc6ICcgKyB2YWx1ZSArICcgKCcgKyB0b3RhbENvdW50cyArICcpJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhwYW5zaW9uU3RhdGUocm93OiBPVGFibGVHcm91cGVkUm93KTogYm9vbGVhbiB7XG4gICAgbGV0IGV4cGFuc2lvblN0YXRlID0gIXBhcmVudCB8fCAhdGhpcy50YWJsZS5jb2xsYXBzZUdyb3VwZWRDb2x1bW5zO1xuICAgIGlmIChyb3cuZXhwYW5kU2FtZUxldmVsKHRoaXMudGFibGUuZXhwYW5kR3JvdXBzU2FtZUxldmVsKSkge1xuICAgICAgZXhwYW5zaW9uU3RhdGUgPSB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlLmhhc093blByb3BlcnR5KHJvdy5sZXZlbCkgPyB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvdy5sZXZlbF0gOiBleHBhbnNpb25TdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93R3JvdXAgPSB0aGlzLmdyb3VwZWRSb3dTdGF0ZS5maW5kKHggPT4geC5rZXlzQXNTdHJpbmcgPT09IHJvdy5rZXlzQXNTdHJpbmcgJiYgSlNPTi5zdHJpbmdpZnkoeC5wYXJlbnQpID09PSBKU09OLnN0cmluZ2lmeShyb3cucGFyZW50KSk7XG4gICAgICBleHBhbnNpb25TdGF0ZSA9IHJvd0dyb3VwID8gcm93R3JvdXAuZXhwYW5kZWQgOiBleHBhbnNpb25TdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGFuc2lvblN0YXRlO1xuICB9XG59XG5cblxuXG4iXX0=
|
|
709
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1vLXRhYmxlLmRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2RlZmF1bHQtby10YWJsZS5kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSwwQkFBMEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTNELE9BQU8sRUFBRSx5QkFBeUIsRUFBc0IsTUFBTSxpREFBaUQsQ0FBQztBQUNoSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2pFLE1BQU0sT0FBTywwQkFBMEI7SUFHckMsWUFBWSxJQUFlO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxVQUFlO0lBRzFELElBQUksSUFBSSxLQUFZLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFxQnpELElBQUksV0FBVyxLQUFhLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLElBQUksV0FBVyxDQUFDLE1BQWM7UUFD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LENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDO0lBQ3hHLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxHQUFxQjtRQUM3QyxJQUFJLGNBQWMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUM7UUFDbkUsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRTtZQUN6RCxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztTQUM5SDthQUFNO1lBQ0wsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLEdBQUcsQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNoSixjQUFjLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7U0FDaEU7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhU291cmNlLCBMaXN0UmFuZ2UgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBPVGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWRhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9UYWJsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtb3B0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvciwgT0NvbHVtblZhbHVlRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdGFibGUvby1jb2x1bW4tdmFsdWUtZmlsdGVyLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBPQ29sdW1uIH0gZnJvbSAnLi4vY29sdW1uL28tY29sdW1uLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL28tdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZURhbyB9IGZyb20gJy4vby10YWJsZS5kYW8nO1xuaW1wb3J0IHsgT1RhYmxlR3JvdXBlZFJvdyB9IGZyb20gJy4vcm93L28tdGFibGUtcm93LWdyb3VwLmNsYXNzJztcbmltcG9ydCB7IE9NYXRTb3J0IH0gZnJvbSAnLi9zb3J0L28tbWF0LXNvcnQnO1xuXG5leHBvcnQgY2xhc3MgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwge1xuICBwdWJsaWMgcmFuZ2U6IExpc3RSYW5nZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBMaXN0UmFuZ2UpIHtcbiAgICB0aGlzLnJhbmdlID0gZGF0YTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRGVmYXVsdE9UYWJsZURhdGFTb3VyY2UgZXh0ZW5kcyBEYXRhU291cmNlPGFueT4gaW1wbGVtZW50cyBPVGFibGVEYXRhU291cmNlIHtcbiAgZGF0YVRvdGFsc0NoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcblxuICBnZXQgZGF0YSgpOiBhbnlbXSB7IHJldHVybiB0aGlzLmRhdGFUb3RhbHNDaGFuZ2UudmFsdWU7IH1cblxuICBwcm90ZWN0ZWQgX2RhdGFiYXNlOiBPVGFibGVEYW87XG4gIHByb3RlY3RlZCBfcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gIHByb3RlY3RlZCBfdGFibGVPcHRpb25zOiBPVGFibGVPcHRpb25zO1xuICBwcm90ZWN0ZWQgX3NvcnQ6IE9NYXRTb3J0O1xuXG4gIHByb3RlY3RlZCBfdmlydHVhbFBhZ2VDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsPihuZXcgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwoeyBzdGFydDogMCwgZW5kOiAwIH0pKTtcbiAgcHJvdGVjdGVkIF9xdWlja0ZpbHRlckNoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICBwcm90ZWN0ZWQgX2NvbHVtblZhbHVlRmlsdGVyQ2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgcHJvdGVjdGVkIGdyb3VwQnlDb2x1bW5DaGFuZ2U6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPjtcblxuICBwcm90ZWN0ZWQgZmlsdGVyZWREYXRhOiBhbnlbXSA9IFtdO1xuICBwcm90ZWN0ZWQgYWdncmVnYXRlRGF0YTogYW55ID0ge307XG5cbiAgb25SZW5kZXJlZERhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cblxuICBwcm90ZWN0ZWQgX3JlbmRlcmVkRGF0YTogYW55W10gPSBbXTtcbiAgcmVzdWx0c0xlbmd0aDogbnVtYmVyID0gMDtcblxuICBnZXQgcXVpY2tGaWx0ZXIoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlLnZhbHVlIHx8ICcnOyB9XG4gIHNldCBxdWlja0ZpbHRlcihmaWx0ZXI6IHN0cmluZykge1xuICAgIHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlLm5leHQoZmlsdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sdW1uVmFsdWVGaWx0ZXJzOiBBcnJheTxPQ29sdW1uVmFsdWVGaWx0ZXI+ID0gW107XG4gIHByaXZhdGUgZ3JvdXBlZFJvd1N0YXRlOiBPVGFibGVHcm91cGVkUm93W10gPSBbXTtcbiAgcHJpdmF0ZSBhY3RpdmVBZ2dyZWdhdGVzID0ge307XG4gIHByaXZhdGUgZ3JvdXBlZFJvd3NTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgbGV2ZWxzRXhwYW5zaW9uU3RhdGUgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgdGFibGU6IE9UYWJsZUNvbXBvbmVudCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZGF0YWJhc2UgPSB0YWJsZS5kYW9UYWJsZTtcbiAgICBpZiAodGhpcy5fZGF0YWJhc2UpIHtcbiAgICAgIHRoaXMucmVzdWx0c0xlbmd0aCA9IHRoaXMuX2RhdGFiYXNlLmRhdGEubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAodGFibGUucGFnaW5hdG9yKSB7XG4gICAgICB0aGlzLl9wYWdpbmF0b3IgPSB0YWJsZS5tYXRwYWdpbmF0b3I7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGUudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnRhYmxlLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5yZW5kZXJlZFJhbmdlU3RyZWFtXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgKHZhbHVlOiBMaXN0UmFuZ2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3ZpcnR1YWxQYWdlQ2hhbmdlLm5leHQobmV3IE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsKHZhbHVlKSk7XG4gICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGFibGVPcHRpb25zID0gdGFibGUub1RhYmxlT3B0aW9ucztcbiAgICB0aGlzLl9zb3J0ID0gdGFibGUuc29ydDtcblxuICB9XG5cbiAgc29ydEZ1bmN0aW9uKGE6IGFueSwgYjogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydC5zb3J0RnVuY3Rpb24oYSwgYik7XG4gIH1cblxuICBnZXQgcmVuZGVyZWREYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcmVuZGVyZWREYXRhO1xuICB9XG5cbiAgc2V0IHJlbmRlcmVkRGF0YShhcmc6IGFueVtdKSB7XG4gICAgdGhpcy5fcmVuZGVyZWREYXRhID0gYXJnO1xuICAgIHRoaXMub25SZW5kZXJlZERhdGFDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbm5lY3QgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSB0YWJsZSB0byByZXRyaWV2ZSBvbmUgc3RyZWFtIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gcmVuZGVyLlxuICAgKi9cbiAgY29ubmVjdCgpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgY29uc3QgZGlzcGxheURhdGFDaGFuZ2VzOiBhbnlbXSA9IFtcbiAgICAgIHRoaXMuX2RhdGFiYXNlLmRhdGFDaGFuZ2VcbiAgICBdO1xuXG4gICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG5cblxuICAgICAgaWYgKHRoaXMuX3NvcnQpIHtcbiAgICAgICAgZGlzcGxheURhdGFDaGFuZ2VzLnB1c2godGhpcy5fc29ydC5vU29ydENoYW5nZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl90YWJsZU9wdGlvbnMuZmlsdGVyKSB7XG4gICAgICAgIGRpc3BsYXlEYXRhQ2hhbmdlcy5wdXNoKHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3BhZ2luYXRvcikge1xuICAgICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0aGlzLl9wYWdpbmF0b3IucGFnZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGFibGUudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0aGlzLl92aXJ0dWFsUGFnZUNoYW5nZSk7XG4gICAgfVxuXG4gICAgZGlzcGxheURhdGFDaGFuZ2VzLnB1c2godGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UpO1xuXG4gICAgaWYgKHRoaXMudGFibGUuZ3JvdXBhYmxlKSB7XG4gICAgICBkaXNwbGF5RGF0YUNoYW5nZXMucHVzaCh0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UpO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZSguLi5kaXNwbGF5RGF0YUNoYW5nZXMpLnBpcGUoXG4gICAgICBtYXAoKHg6IGFueSkgPT4ge1xuICAgICAgICBsZXQgZGF0YSA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuX2RhdGFiYXNlLmRhdGEpO1xuXG4gICAgICAgIGlmICh4IGluc3RhbmNlb2YgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAvLyByZW5kZXIgc3Vic2V0IChyYW5nZSkgb2YgcmVuZGVyZWREYXRhIHdoZW4gbmV3IE9uUmFuZ2VDaGFuZ2VWaXJ0dWFsU2Nyb2xsIGV2ZW50IGlzIGVtaXR0ZWRcbiAgICAgICAgICBkYXRhID0gdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsRGF0YSh0aGlzLnJlbmRlcmVkRGF0YSwgeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLypcbiAgICAgICAgICAgIGl0IGlzIG5lY2Vzc2FyeSB0byBmaXJzdCBjYWxjdWxhdGUgdGhlIGNhbGN1bGF0ZWQgY29sdW1ucyBhbmRcbiAgICAgICAgICAgIHRoZW4gZmlsdGVyIGFuZCBzb3J0IHRoZSBkYXRhXG4gICAgICAgICAgKi9cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4aXN0c0FueUNhbGN1bGF0ZWRDb2x1bW4oKSkge1xuICAgICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRDb2x1bW5DYWxjdWxhdGVkRGF0YShkYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldENvbHVtblZhbHVlRmlsdGVyRGF0YShkYXRhKTtcbiAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXJEYXRhKGRhdGEpO1xuICAgICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRTb3J0ZWREYXRhKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IE9iamVjdC5hc3NpZ24oW10sIGRhdGEpO1xuXG4gICAgICAgICAgaWYgKHRoaXMudGFibGUucGFnZWFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvdGFsUmVjb3Jkc051bWJlciA9IHRoaXMudGFibGUuZ2V0VG90YWxSZWNvcmRzTnVtYmVyKCk7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNMZW5ndGggPSB0b3RhbFJlY29yZHNOdW1iZXIgIT09IHVuZGVmaW5lZCA/IHRvdGFsUmVjb3Jkc051bWJlciA6IGRhdGEubGVuZ3RoO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc3VsdHNMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmdldFBhZ2luYXRpb25EYXRhKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy50YWJsZS5ncm91cGFibGUgJiYgIVV0aWwuaXNBcnJheUVtcHR5KHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheSkgJiYgZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRHcm91cGVkRGF0YShkYXRhKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnJlbmRlcmVkRGF0YSA9IGRhdGE7XG5cbiAgICAgICAgICAvKlxuICAgICAgICAgICAgd2hlbiB0aGUgZGF0YSBpcyB2ZXJ5IGxhcmdlLCB0aGUgYXBwbGljYXRpb24gY3Jhc2hlcyBzbyBpdCBnZXRzIGEgbGltaXRlZCByYW5nZSBvZiBkYXRhIHRoZSBmaXJzdCB0aW1lXG4gICAgICAgICAgICBiZWNhdXNlIGF0IG5leHQgdGhlIEN1c3RvbVZpcnR1YWxTY3JvbGxTdHJhdGVneSB3aWxsIGVtaXQgZXZlbnQgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGxcbiAgICAgICAgICAqL1xuICAgICAgICAgIGlmICh0aGlzLnRhYmxlLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCAmJiAhdGhpcy5fcGFnaW5hdG9yKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5nZXRWaXJ0dWFsU2Nyb2xsRGF0YShkYXRhLCBuZXcgT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwoeyBzdGFydDogMCwgZW5kOiBDb2Rlcy5MSU1JVF9TQ1JPTExWSVJUVUFMIH0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0ZURhdGEgPSB0aGlzLmdldEFnZ3JlZ2F0ZXNEYXRhKHRoaXMucmVuZGVyZWREYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSkpO1xuICB9XG5cbiAgZ2V0R3JvdXBlZERhdGEoZGF0YTogYW55W10pIHtcbiAgICBkYXRhID0gdGhpcy5nZXRTdWJHcm91cHNPZkdyb3VwZWRSb3coZGF0YSk7XG4gICAgLyoqIGRhdGEgY29udGFpbnMgcm93IGdyb3VwIGhlYWRlcnMgKE9UYWJsZUdyb3VwZWRSb3cpIGFuZCB0aGUgZGF0YSBiZWxvbmdpbmcgdG8gZXhwYW5kZWQgZ3JvdXBlZCByb3dzICovXG4gICAgZGF0YSA9IHRoaXMuZmlsdGVyQ29sbGFwc2VkUm93R3JvdXAoZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdWJncm91cHMgb2YgZ3JvdXBlZCByb3dcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHJldHVybnMgc3ViZ3JvdXBzIG9mIGdyb3VwZWQgcm93XG4gICAqL1xuICBnZXRTdWJHcm91cHNPZkdyb3VwZWRSb3coZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEgPSB0aGlzLmdldFN1YmxldmVsKGRhdGEsIDApO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlc0RhdGEoZGF0YTogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl90YWJsZU9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cblxuICAgIHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbjogT0NvbHVtbikgPT4ge1xuICAgICAgbGV0IHRvdGFsVmFsdWUgPSAnJztcbiAgICAgIGlmIChjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi52aXNpYmxlKSB7XG4gICAgICAgIHRvdGFsVmFsdWUgPSB0aGlzLmNhbGN1bGF0ZUFnZ3JlZ2F0ZShkYXRhLCBjb2x1bW4uYXR0ciwgY29sdW1uLmFnZ3JlZ2F0ZS5vcGVyYXRvcik7XG4gICAgICB9XG4gICAgICBjb25zdCBrZXkgPSBjb2x1bW4uYXR0cjtcbiAgICAgIG9ialtrZXldID0gdG90YWxWYWx1ZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRoYXQgZ2V0IHZhbHVlIHRoZSBjb2x1bW5zIGNhbGN1bGF0ZWRcbiAgICogQHBhcmFtIGRhdGEgZGF0YSBvZiB0aGUgZGF0YWJhc2VcbiAgICovXG4gIGdldENvbHVtbkNhbGN1bGF0ZWREYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRDb2xzID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKChvQ29sOiBPQ29sdW1uKSA9PiBvQ29sLnZpc2libGUgJiYgb0NvbC5jYWxjdWxhdGUgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3c6IGFueSkgPT4ge1xuICAgICAgY2FsY3VsYXRlZENvbHMuZm9yRWFjaCgob0NvbHVtbjogT0NvbHVtbikgPT4ge1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2Ygb0NvbHVtbi5jYWxjdWxhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdmFsdWUgPSBzZWxmLnRyYW5zZm9ybUZvcm11bGEob0NvbHVtbi5jYWxjdWxhdGUsIHJvdyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9Db2x1bW4uY2FsY3VsYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFsdWUgPSBvQ29sdW1uLmNhbGN1bGF0ZShyb3cpO1xuICAgICAgICB9XG4gICAgICAgIHJvd1tvQ29sdW1uLmF0dHJdID0gaXNOYU4odmFsdWUpID8gMCA6IHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcm93O1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRyYW5zZm9ybUZvcm11bGEoZm9ybXVsYUFyZywgcm93KTogc3RyaW5nIHtcbiAgICBsZXQgZm9ybXVsYSA9IGZvcm11bGFBcmc7XG4gICAgLy8gMS4gcmVwbGFjZSBjb2x1bW5zIGJ5IHZhbHVlcyBvZiByb3dcbiAgICBjb25zdCBjb2x1bW5zQXR0ciA9IHRoaXMuX3RhYmxlT3B0aW9ucy5jb2x1bW5zLm1hcCgob0NvbDogT0NvbHVtbikgPT4gb0NvbC5hdHRyKTtcbiAgICBjb2x1bW5zQXR0ci5mb3JFYWNoKChjb2x1bW46IHN0cmluZykgPT4ge1xuICAgICAgZm9ybXVsYSA9IGZvcm11bGEucmVwbGFjZShjb2x1bW4sIHJvd1tjb2x1bW5dKTtcbiAgICB9KTtcblxuICAgIGxldCByZXN1bHRGb3JtdWxhID0gJyc7XG4gICAgLy8gMi4gVHJhbnNmb3JtIGZvcm11bGFcbiAgICB0cnkge1xuICAgICAgcmVzdWx0Rm9ybXVsYSA9IChuZXcgRnVuY3Rpb24oJ3JldHVybiAnICsgZm9ybXVsYSkpKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignT3BlcmF0aW9uIGRlZmluZWQgaW4gdGhlIGNhbGN1bGF0ZWQgY29sdW1uIGlzIGluY29ycmVjdCAnKTtcbiAgICB9XG4gICAgLy8gMy4gUmV0dXJuIHJlc3VsdFxuICAgIHJldHVybiByZXN1bHRGb3JtdWxhO1xuICB9XG5cbiAgZ2V0UXVpY2tGaWx0ZXJEYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1aWNrRmlsdGVyKSAmJiB0aGlzLnF1aWNrRmlsdGVyLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbHRlckRhdGEgPSAhdGhpcy5fdGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUgPyB0aGlzLnF1aWNrRmlsdGVyLnRvTG93ZXJDYXNlKCkgOiB0aGlzLnF1aWNrRmlsdGVyO1xuICAgICAgcmV0dXJuIGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgLy8gR2V0dGluZyBjdXN0b20gY29sdW1ucyBmaWx0ZXIgY29sdW1ucyByZXN1bHRcbiAgICAgICAgY29uc3QgcGFzc0N1c3RvbUZpbHRlciA9IHRoaXMuZnVsZmlsbHNDdXN0b21GaWx0ZXJGdW5jdGlvbnMoZmlsdGVyRGF0YSwgaXRlbSk7XG4gICAgICAgIC8vIEdldHRpbmcgb3RoZXIgc2VhcmNoYWJsZSBjb2x1bW5zIHN0YW5kYXJkIHJlc3VsdFxuICAgICAgICBjb25zdCBwYXNzU2VhcmNoU3RyaW5nID0gdGhpcy5mdWxmaWxsc1F1aWNrZmlsdGVyKGZpbHRlckRhdGEsIGl0ZW0pO1xuICAgICAgICByZXR1cm4gcGFzc0N1c3RvbUZpbHRlciB8fCBwYXNzU2VhcmNoU3RyaW5nO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIGdldFBhZ2luYXRpb25EYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghdGhpcy5fcGFnaW5hdG9yIHx8IGlzTmFOKHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZSkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBsZXQgc3RhcnRJbmRleCA9IGlzTmFOKHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZSkgPyAwIDogdGhpcy5fcGFnaW5hdG9yLnBhZ2VJbmRleCAqIHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwICYmIGRhdGEubGVuZ3RoIDwgc3RhcnRJbmRleCkge1xuICAgICAgc3RhcnRJbmRleCA9IDA7XG4gICAgICB0aGlzLl9wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuc3BsaWNlKHN0YXJ0SW5kZXgsIHRoaXMuX3BhZ2luYXRvci5wYWdlU2l6ZSk7XG4gIH1cblxuICBnZXRWaXJ0dWFsU2Nyb2xsRGF0YShkYXRhOiBhbnlbXSwgeDogT25SYW5nZUNoYW5nZVZpcnR1YWxTY3JvbGwpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEuc2xpY2UoeC5yYW5nZS5zdGFydCwgeC5yYW5nZS5lbmQpXG4gIH1cblxuICBkaXNjb25uZWN0KCkge1xuICAgIHRoaXMuZGF0YVRvdGFsc0NoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3F1aWNrRmlsdGVyQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UuY29tcGxldGUoKTtcbiAgICB0aGlzLl92aXJ0dWFsUGFnZUNoYW5nZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZ1bGZpbGxzQ3VzdG9tRmlsdGVyRnVuY3Rpb25zKGZpbHRlcjogc3RyaW5nLCBpdGVtOiBhbnkpIHtcbiAgICBjb25zdCBjdXN0b21GaWx0ZXJDb2xzID0gdGhpcy50YWJsZS5vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4gb0NvbC51c2VDdXN0b21GaWx0ZXJGdW5jdGlvbigpKTtcbiAgICByZXR1cm4gY3VzdG9tRmlsdGVyQ29scy5zb21lKG9Db2wgPT4gb0NvbC5yZW5kZXJlci5maWx0ZXJGdW5jdGlvbihpdGVtW29Db2wuYXR0cl0sIGl0ZW0sIGZpbHRlcikpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZ1bGZpbGxzUXVpY2tmaWx0ZXIoZmlsdGVyOiBzdHJpbmcsIGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIoKG9Db2w6IE9Db2x1bW4pID0+IG9Db2wudXNlUXVpY2tmaWx0ZXJGdW5jdGlvbigpKTtcbiAgICBsZXQgc2VhcmNoU3RyID0gY29sdW1ucy5tYXAoKG9Db2w6IE9Db2x1bW4pID0+IG9Db2wuZ2V0RmlsdGVyVmFsdWUoaXRlbVtvQ29sLmF0dHJdLCBpdGVtKS5qb2luKCcgJykpLmpvaW4oJyAnKTtcbiAgICBpZiAoIXRoaXMuX3RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlKSB7XG4gICAgICBzZWFyY2hTdHIgPSBzZWFyY2hTdHIudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlYXJjaFN0ci5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBzb3J0ZWQgY29weSBvZiB0aGUgZGF0YWJhc2UgZGF0YS4gKi9cbiAgcHJvdGVjdGVkIGdldFNvcnRlZERhdGEoZGF0YTogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgcmVuZGVyZXJEYXRhID0gdGhpcy5nZXREYXRhVG9Tb3J0KGRhdGEpO1xuICAgIGNvbnN0IHNvcnRlZERhdGEgPSB0aGlzLl9zb3J0LmdldFNvcnRlZERhdGEocmVuZGVyZXJEYXRhKTtcblxuICAgIGNvbnN0IHRhYmxlS2V5cyA9IHRoaXMudGFibGUuZ2V0S2V5cygpO1xuICAgIGNvbnN0IG9yaWdpbmFsRGF0YVNvcnRlZCA9IFtdO1xuXG4gICAgc29ydGVkRGF0YS5mb3JFYWNoKHNvcnRlZEVsZW1lbnQgPT4ge1xuICAgICAgY29uc3Qga2V5c1ZhbHVlc0luU29ydERhdGEgPSB0YWJsZUtleXMubWFwKGVsZW1lbnQgPT4gc29ydGVkRWxlbWVudFtlbGVtZW50XSk7XG5cbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgd2hpbGUgKGkgPCBkYXRhLmxlbmd0aCAmJiAhZm91bmQpIHtcbiAgICAgICAgY29uc3Qga2V5c1ZhbHVlc0luRGF0YSA9IHRhYmxlS2V5cy5tYXAoZWxlbWVudCA9PiBkYXRhW2ldW2VsZW1lbnRdKTtcbiAgICAgICAgaWYgKFV0aWwuaXNBcnJheUVxdWFsKGtleXNWYWx1ZXNJblNvcnREYXRhLCBrZXlzVmFsdWVzSW5EYXRhKSkge1xuICAgICAgICAgIG9yaWdpbmFsRGF0YVNvcnRlZC5wdXNoKGRhdGFbaV0pO1xuICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG9yaWdpbmFsRGF0YVNvcnRlZDtcblxuICB9XG5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZGF0YSB0aGUgdGFibGUgc3RvcmVzLiBObyBmaWx0ZXJzIGFyZSBhcHBsaWVkLlxuICAgKi9cbiAgZ2V0VGFibGVEYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2UuZGF0YTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gZGF0YSBvZiB0aGUgdmlzaWJsZSBjb2x1bW5zIG9mIHRoZSB0YWJsZSB3aXRob3V0IHJlbmRlcmluZyAqL1xuICBnZXRDdXJyZW50RGF0YSgpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RGF0YSgpO1xuICB9XG5cbiAgZ2V0Q3VycmVudEFsbERhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbERhdGEoZmFsc2UsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm4gZGF0YSBvZiB0aGUgdmlzaWJsZSBjb2x1bW5zIG9mIHRoZSB0YWJsZSAgcmVuZGVyaW5nICovXG4gIGdldEN1cnJlbnRSZW5kZXJlckRhdGEoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmdldFJlbmRlcmVkRGF0YSh0aGlzLnJlbmRlcmVkRGF0YSk7XG4gIH1cblxuICAvKiogUmV0dXJuIGFsbCBkYXRhIG9mIHRoZSB0YWJsZSByZW5kZXJpbmcgKi9cbiAgZ2V0QWxsUmVuZGVyZXJEYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRBbGxEYXRhKHRydWUsIHRydWUpO1xuICB9XG5cbiAgLyoqIFJldHVybiBzcWwgdHlwZXMgb2YgdGhlIGN1cnJlbnQgZGF0YSAqL1xuICBnZXQgc3FsVHlwZXMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YWJhc2Uuc3FsVHlwZXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlZERhdGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVuZGVyZWREYXRhKGRhdGE6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4gb0NvbC52aXNpYmxlKTtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICB2aXNpYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZVJlbmRlcmVyID0gb0NvbC5yZW5kZXJlciAmJiBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhO1xuICAgICAgICBvYmpbb0NvbC5hdHRyXSA9IHVzZVJlbmRlcmVyID8gb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YShyb3dbb0NvbC5hdHRyXSwgcm93KSA6IHJvd1tvQ29sLmF0dHJdO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBnZXREYXRhVG9Tb3J0KGRhdGE6IGFueVtdKTogYW55W10ge1xuXG4gICAgY29uc3Qgc29ydENvbHVtbnMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIob0NvbCA9PiBvQ29sLnZpc2libGUgJiYgdGhpcy5fc29ydC5hY3RpdmVBcnJheS5tYXAoeCA9PiB4LmlkKS5pbmRleE9mKG9Db2wuYXR0cikgPiAtMSk7XG4gICAgY29uc3QgZXhpc3RDb2x1bW5Ub1RyYXNmb3JtVG9Tb3J0ID0gc29ydENvbHVtbnMuZmlsdGVyKChvQ29sOiBPQ29sdW1uKSA9PiAob0NvbC50eXBlID09PSAndHJhbnNsYXRlJyB8fCBvQ29sLnR5cGUgPT09ICdzZXJ2aWNlJykpLmxlbmd0aCA+IDA7XG4gICAgaWYgKCFleGlzdENvbHVtblRvVHJhc2Zvcm1Ub1NvcnQpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICB0aGlzLnRhYmxlLmdldEtleXMoKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBzb3J0Q29sdW1ucy5wdXNoKHRoaXMudGFibGUuZ2V0T0NvbHVtbihrZXkpKTtcbiAgICB9KVxuXG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgc29ydENvbHVtbnMuZm9yRWFjaCgob0NvbDogT0NvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCB1c2VSZW5kZXJlciA9IG9Db2wucmVuZGVyZXIgJiYgKG9Db2wudHlwZSA9PT0gJ3RyYW5zbGF0ZScgfHwgb0NvbC50eXBlID09PSAnc2VydmljZScpICYmIG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGE7XG4gICAgICAgIG9ialtvQ29sLmF0dHJdID0gdXNlUmVuZGVyZXIgPyBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhKHJvd1tvQ29sLmF0dHJdLCByb3cpIDogcm93W29Db2wuYXR0cl07XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0QWxsRGF0YSh1c2luZ1JlbmRlcmVyZXJzPzogYm9vbGVhbiwgb25seVZpc2libGVDb2x1bW5zPzogYm9vbGVhbikge1xuICAgIGxldCB0YWJsZUNvbHVtbnMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucztcbiAgICBpZiAob25seVZpc2libGVDb2x1bW5zKSB7XG4gICAgICB0YWJsZUNvbHVtbnMgPSB0aGlzLl90YWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIob0NvbCA9PiBvQ29sLnZpc2libGUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZERhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgdGFibGVDb2x1bW5zLmZvckVhY2goKG9Db2w6IE9Db2x1bW4pID0+IHtcbiAgICAgICAgY29uc3QgdXNlUmVuZGVyZXIgPSB1c2luZ1JlbmRlcmVyZXJzICYmIG9Db2wucmVuZGVyZXIgJiYgb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YTtcbiAgICAgICAgb2JqW29Db2wuYXR0cl0gPSB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVuZGVyZXJzRGF0YShkYXRhOiBhbnlbXSwgdGFibGVDb2x1bW5zOiBPQ29sdW1uW10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIC8vIHJlbmRlciBlYWNoIGNvbHVtblxuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgcm93KTtcbiAgICAgIHRhYmxlQ29sdW1ucy5mb3JFYWNoKChvQ29sOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIG9ialtvQ29sLmF0dHJdID0gb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YShyb3dbb0NvbC5hdHRyXSwgcm93KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5EYXRhKG9jb2x1bW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnJlbmRlcmVkRGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgLy8gcmVuZGVyIGVhY2ggY29sdW1uXG4gICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgIGlmIChvY29sdW1uKSB7XG4gICAgICAgIG9ialtvY29sdW1uXSA9IHJvd1tvY29sdW1uXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXplQ29sdW1uc0ZpbHRlcnMoZmlsdGVyczogT0NvbHVtblZhbHVlRmlsdGVyW10pIHtcbiAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycyA9IFtdO1xuICAgIGZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgIH0pO1xuICAgIGlmICghdGhpcy50YWJsZS5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5fY29sdW1uVmFsdWVGaWx0ZXJDaGFuZ2UubmV4dChudWxsKTtcbiAgICB9XG4gIH1cblxuICBpc0NvbHVtblZhbHVlRmlsdGVyQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5sZW5ndGggIT09IDA7XG4gIH1cblxuICBnZXRDb2x1bW5WYWx1ZUZpbHRlcnMoKTogT0NvbHVtblZhbHVlRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblZhbHVlRmlsdGVycztcbiAgfVxuXG4gIGdldENvbHVtblZhbHVlRmlsdGVyQnlBdHRyKGF0dHI6IHN0cmluZyk6IE9Db2x1bW5WYWx1ZUZpbHRlciB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZpbmQoaXRlbSA9PiBpdGVtLmF0dHIgPT09IGF0dHIpO1xuICB9XG5cbiAgY2xlYXJDb2x1bW5GaWx0ZXJzKHRyaWdnZXI6IGJvb2xlYW4gPSB0cnVlLCBjb2x1bW5zQXR0cj86IHN0cmluZ1tdKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbnNBdHRyKSkge1xuICAgICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMgPSB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5maWx0ZXIoeCA9PiAhY29sdW1uc0F0dHIuaW5jbHVkZXMoeC5hdHRyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzID0gW107XG4gICAgfVxuICAgIGlmICh0cmlnZ2VyKSB7XG4gICAgICB0aGlzLl9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZS5uZXh0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQ29sdW1uRmlsdGVyKGF0dHI6IHN0cmluZywgdHJpZ2dlcjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycyA9IHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZpbHRlcih4ID0+IHguYXR0ciAhPT0gYXR0cik7XG4gICAgaWYgKHRyaWdnZXIpIHtcbiAgICAgIHRoaXMuX2NvbHVtblZhbHVlRmlsdGVyQ2hhbmdlLm5leHQobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgYWRkQ29sdW1uRmlsdGVyKGZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyKSB7XG4gICAgY29uc3QgZXhpc3RpbmdGaWx0ZXJJbmRleCA9IHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uYXR0ciA9PT0gZmlsdGVyLmF0dHIpO1xuICAgIGlmIChleGlzdGluZ0ZpbHRlckluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuY29sdW1uVmFsdWVGaWx0ZXJzLnNwbGljZShleGlzdGluZ0ZpbHRlckluZGV4LCAxLCBmaWx0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdmFsaWRGaWx0ZXIgPSBVdGlsLmlzRGVmaW5lZChmaWx0ZXIudmFsdWVzKTtcbiAgICAgIGlmICh2YWxpZEZpbHRlcikge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci5vcGVyYXRvcikge1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5JTjpcbiAgICAgICAgICAgIHZhbGlkRmlsdGVyID0gZmlsdGVyLnZhbHVlcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkJFVFdFRU46XG4gICAgICAgICAgICB2YWxpZEZpbHRlciA9IGZpbHRlci52YWx1ZXMubGVuZ3RoID09PSAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMOlxuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMOlxuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5NT1JFX0VRVUFMOlxuICAgICAgICAgICAgdmFsaWRGaWx0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhbGlkRmlsdGVyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbGlkRmlsdGVyKSB7XG4gICAgICAgICAgdGhpcy5jb2x1bW5WYWx1ZUZpbHRlcnMucHVzaChmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSB0YWJsZSBpcyBwYWdpbmF0ZWQsIGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgb24gcmVtb3RlIHF1ZXJ5XG4gICAgaWYgKCF0aGlzLnRhYmxlLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLl9jb2x1bW5WYWx1ZUZpbHRlckNoYW5nZS5uZXh0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGdldENvbHVtblZhbHVlRmlsdGVyRGF0YShkYXRhOiBhbnlbXSk6IGFueVtdIHtcbiAgICB0aGlzLmNvbHVtblZhbHVlRmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJDb2x1bW4gPSB0aGlzLnRhYmxlLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuYXR0ciA9PT0gZmlsdGVyLmF0dHIpO1xuICAgICAgaWYgKGZpbHRlckNvbHVtbikge1xuICAgICAgICBzd2l0Y2ggKGZpbHRlci5vcGVyYXRvcikge1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5JTjpcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbHVlcyA9IChmaWx0ZXIudmFsdWVzIHx8IFtdKS5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PlxuICAgICAgICAgICAgICBwcmV2aW91cy5jb25jYXQoZmlsdGVyQ29sdW1uLmdldEZpbHRlclZhbHVlKGN1cnJlbnQpLm1hcChmID0+IFV0aWwubm9ybWFsaXplU3RyaW5nKGYpKSksIFtdKTtcblxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGZpbHRlckNvbHVtbi5yZW5kZXJlciAmJiBmaWx0ZXJDb2x1bW4ucmVuZGVyZXIuZmlsdGVyRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyQ29sdW1uLnJlbmRlcmVyLmZpbHRlckZ1bmN0aW9uKGl0ZW1bZmlsdGVyLmF0dHJdLCBpdGVtKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xWYWx1ZXMgPSBmaWx0ZXJDb2x1bW4uZ2V0RmlsdGVyVmFsdWUoaXRlbVtmaWx0ZXIuYXR0cl0sIGl0ZW0pLm1hcChmID0+IFV0aWwubm9ybWFsaXplU3RyaW5nKGYpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyVmFsdWVzLnNvbWUodmFsdWUgPT4gY29sVmFsdWVzLmluZGV4T2YodmFsdWUpICE9PSAtMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMOlxuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gVXRpbC5ub3JtYWxpemVTdHJpbmcoZmlsdGVyLnZhbHVlcyk7XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbFZhbHVlcyA9IGZpbHRlckNvbHVtbi5nZXRGaWx0ZXJWYWx1ZShpdGVtW2ZpbHRlci5hdHRyXSwgaXRlbSkubWFwKGYgPT4gVXRpbC5ub3JtYWxpemVTdHJpbmcoZikpO1xuICAgICAgICAgICAgICBsZXQgcmVnRXhwO1xuICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFZhbHVlLmluY2x1ZGVzKCcqJykpIHtcbiAgICAgICAgICAgICAgICByZWdFeHAgPSBuZXcgUmVnRXhwKCdeJyArIG5vcm1hbGl6ZWRWYWx1ZS5zcGxpdCgnKicpLmpvaW4oJy4qJykgKyAnJCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBjb2xWYWx1ZXMuc29tZShjb2xWYWx1ZSA9PiByZWdFeHAgPyByZWdFeHAudGVzdChjb2xWYWx1ZSkgOiBjb2xWYWx1ZS5pbmNsdWRlcyhub3JtYWxpemVkVmFsdWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkJFVFdFRU46XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtW2ZpbHRlci5hdHRyXSA+PSBmaWx0ZXIudmFsdWVzWzBdICYmIGl0ZW1bZmlsdGVyLmF0dHJdIDw9IGZpbHRlci52YWx1ZXNbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUw6XG4gICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoaXRlbSA9PiBpdGVtW2ZpbHRlci5hdHRyXSA+PSBmaWx0ZXIudmFsdWVzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMOlxuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGl0ZW0gPT4gaXRlbVtmaWx0ZXIuYXR0cl0gPD0gZmlsdGVyLnZhbHVlcyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRlRGF0YShjb2x1bW46IE9Db2x1bW4pIHtcbiAgICBjb25zdCBvYmogPSB7fTtcbiAgICBsZXQgdG90YWxWYWx1ZSA9ICcnO1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLl90YWJsZU9wdGlvbnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5KG9iaik7XG4gICAgfVxuICAgIHRvdGFsVmFsdWUgPSB0aGlzLmFnZ3JlZ2F0ZURhdGFbY29sdW1uLmF0dHJdO1xuICAgIHJldHVybiB0b3RhbFZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhbGN1bGF0ZUFnZ3JlZ2F0ZShkYXRhOiBhbnlbXSwgY29sdW1uQXR0cjogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nIHwgRnVuY3Rpb24pOiBhbnkge1xuICAgIGxldCByZXN1bHRBZ2dyZWdhdGU7XG4gICAgaWYgKHR5cGVvZiBvcGVyYXRvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHN3aXRjaCAob3BlcmF0b3IudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICBjYXNlICdjb3VudCc6XG4gICAgICAgICAgcmVzdWx0QWdncmVnYXRlID0gdGhpcy5jb3VudChjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWluJzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLm1pbihjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWF4JzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLm1heChjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYXZnJzpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLmF2Zyhjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXN1bHRBZ2dyZWdhdGUgPSB0aGlzLnN1bShjb2x1bW5BdHRyLCBkYXRhKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29sdW1uRGF0YTogYW55W10gPSB0aGlzLmdldENvbHVtbkRhdGEoY29sdW1uQXR0cik7XG4gICAgICBpZiAodHlwZW9mIG9wZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJlc3VsdEFnZ3JlZ2F0ZSA9IG9wZXJhdG9yKGNvbHVtbkRhdGEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0QWdncmVnYXRlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1bShjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGxldCB2YWx1ZSA9IDA7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIC8vSWYgdGhlIGRhdGEgaXMgZ3JvdXBlZCwgdGhlIHZhbHVlcyDigIvigItvZiB0aGUgc3ViZ3JvdXBzIGluIGxldmVsIDEgYXJlIHN1bW1lZFxuICAgICAgaWYgKGRhdGFbMF0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICAgIHRoaXMuZ2V0RGF0YUZyb21GaXJzdExldmVsVGFibGVHcm91cFJvdyhkYXRhKS5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIHZhbHVlID0geC5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbikucmVkdWNlKChhY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhY3VtdWxhdG9yICsgKGlzTmFOKGN1cnJlbnRWYWx1ZVtjb2x1bW5dKSA/IDAgOiBjdXJyZW50VmFsdWVbY29sdW1uXSk7XG4gICAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZGF0YS5yZWR1Y2UoKGFjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhY3VtdWxhdG9yICsgKGlzTmFOKGN1cnJlbnRWYWx1ZVtjb2x1bW5dKSA/IDAgOiBjdXJyZW50VmFsdWVbY29sdW1uXSk7XG4gICAgICAgIH0sIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICsodmFsdWUpLnRvRml4ZWQoMik7XG4gIH1cblxuICBwcm90ZWN0ZWQgY291bnQoY29sdW1uLCBkYXRhKTogbnVtYmVyIHtcbiAgICBsZXQgdmFsdWUgPSAwO1xuICAgIGlmIChkYXRhKSB7XG4gICAgICAvL0lmIHRoZSBkYXRhIGlzIGdyb3VwZWQsIHRoZSBjb3VudCBpcyBjYWxjdWxhdGVkIGJ5IGFkZGluZyB0aGUgY291bnRzIGZvciBlYWNoIHN1Ymdyb3VwIGluIGxldmVsIDFcbiAgICAgIGlmIChkYXRhWzBdIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgICB0aGlzLmdldERhdGFGcm9tRmlyc3RMZXZlbFRhYmxlR3JvdXBSb3coZGF0YSkuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICB2YWx1ZSA9IHguZ2V0Q29sdW1uQWdncmVnYXRlRGF0YShjb2x1bW4pLnJlZHVjZSgoYWN1bXVsYXRvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGFjdW11bGF0b3IgKyAxO1xuICAgICAgICAgIH0sIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRhdGEucmVkdWNlKChhY3VtdWxhdG9yKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGFjdW11bGF0b3IgKyAxO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF2Zyhjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGNvbnN0IHRvdGFsU3VtID0gdGhpcy5zdW0oY29sdW1uLCBkYXRhKTtcbiAgICBjb25zdCB0b3RhbENvdW50ID0gdGhpcy5jb3VudChjb2x1bW4sIGRhdGEpO1xuICAgIHJldHVybiArKCh0b3RhbFN1bSA9PT0gMCB8fCB0b3RhbENvdW50ID09PSAwKSA/IDAgOiAodG90YWxTdW0gLyB0b3RhbENvdW50KSkudG9GaXhlZCgyKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIG1pbihjb2x1bW4sIGRhdGEpOiBudW1iZXIge1xuICAgIGxldCB0ZW1wTWluID0gW107XG4gICAgLy9JZiB0aGUgZGF0YSBpcyBncm91cGVkLCB0aGUgbWluaW11bSBpcyBjYWxjdWxhdGVkIHdpdGggdGhlIG1pbmltdW0gb2YgZWFjaCBzdWJncm91cCBpbiBsZXZlbCAxXG4gICAgaWYgKGRhdGFbMF0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgICB0ZW1wTWluID0gdGhpcy5nZXREYXRhRnJvbUZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KGRhdGEpLm1hcCh4ID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKC4uLnguZ2V0Q29sdW1uQWdncmVnYXRlRGF0YShjb2x1bW4pLm1hcCh4ID0+IHhbY29sdW1uXSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRlbXBNaW4gPSBkYXRhLm1hcCh4ID0+IHhbY29sdW1uXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBNaW4ubGVuZ3RoID4gMCA/IE1hdGgubWluKC4uLnRlbXBNaW4pIDogMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXgoY29sdW1uLCBkYXRhKTogbnVtYmVyIHtcbiAgICBsZXQgdGVtcE1heCA9IFtdO1xuICAgIGlmIChkYXRhWzBdIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykge1xuICAgICAgLy9JZiB0aGUgZGF0YSBhcmUgZ3JvdXBlZCwgdGhlIG1heGltdW0gaXMgY2FsY3VsYXRlZCB3aXRoIHRoZSBtYXhpbXVtIG9mIGVhY2ggc3ViZ3JvdXAgaW4gbGV2ZWwgMVxuICAgICAgdGVtcE1heCA9IHRoaXMuZ2V0RGF0YUZyb21GaXJzdExldmVsVGFibGVHcm91cFJvdyhkYXRhKS5tYXAoeCA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCguLi54LmdldENvbHVtbkFnZ3JlZ2F0ZURhdGEoY29sdW1uKS5tYXAoeCA9PiB4W2NvbHVtbl0pKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZW1wTWF4ID0gZGF0YS5tYXAoeCA9PiB4W2NvbHVtbl0pO1xuICAgIH1cbiAgICByZXR1cm4gdGVtcE1heC5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4udGVtcE1heCkgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KHRhYmxlUm93R3JvdXBEYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGFibGVSb3dHcm91cERhdGEgaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93ICYmIHRhYmxlUm93R3JvdXBEYXRhLmxldmVsID09PSAxO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRhRnJvbUZpcnN0TGV2ZWxUYWJsZUdyb3VwUm93KGRhdGE6IGFueSkge1xuICAgIHJldHVybiBkYXRhLmZpbHRlcih4ID0+IHRoaXMuaXNGaXJzdExldmVsVGFibGVHcm91cFJvdyh4KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXhpc3RzQW55Q2FsY3VsYXRlZENvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdGFibGVPcHRpb25zLmNvbHVtbnMuZmluZCgob0NvbDogT0NvbHVtbikgPT4gb0NvbC5jYWxjdWxhdGUgIT09IHVuZGVmaW5lZCkgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHVwZGF0ZVJlbmRlcmVkUm93RGF0YShyb3dEYXRhOiBhbnkpIHtcbiAgICBjb25zdCB0YWJsZUtleXMgPSB0aGlzLnRhYmxlLmdldEtleXMoKTtcbiAgICBjb25zdCByZWNvcmQgPSB0aGlzLnJlbmRlcmVkRGF0YS5maW5kKChkYXRhOiBhbnkpID0+IHtcbiAgICAgIGxldCBmb3VuZCA9IHRydWU7XG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGFibGVLZXlzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRhYmxlS2V5c1tpXTtcbiAgICAgICAgaWYgKGRhdGFba2V5XSAhPT0gcm93RGF0YVtrZXldKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZvdW5kO1xuICAgIH0pO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChyZWNvcmQpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHJlY29yZCwgcm93RGF0YSk7XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIGdldERhdGFJbmZvcm1hdGlvbkJ5R3JvdXAoZGF0YTogYW55W10sIGxldmVsOiBudW1iZXIpIHtcbiAgICBjb25zdCByZWNvcmRIYXNoID0ge307XG4gICAgZGF0YS5mb3JFYWNoKChyb3csIGkpID0+IHtcbiAgICAgIGNvbnN0IGtleXMgPSB7fTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGxldmVsOyBpKyspIHtcbiAgICAgICAga2V5c1t0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXlbaV1dID0gdGhpcy50YWJsZS5nZXRDb2x1bW5EYXRhQnlBdHRyKHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtpXSwgcm93KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlY29yZEtleSA9IEpTT04uc3RyaW5naWZ5KGtleXMpO1xuICAgICAgaWYgKHJlY29yZEhhc2guaGFzT3duUHJvcGVydHkocmVjb3JkS2V5KSkge1xuICAgICAgICByZWNvcmRIYXNoW3JlY29yZEtleV0ucHVzaChpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZEhhc2hbcmVjb3JkS2V5XSA9IFtpXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVjb3JkSGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjdWxhdGVDb2x1bW5BZ2dyZWdhdGUoY29sdW1uQXR0cjogc3RyaW5nLCByb3c6IE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICBjb25zdCBhZ2dyZWdhdGVDb25mID0gcm93LmdldEFjdGl2ZUNvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24oY29sdW1uQXR0cik7XG4gICAgY29uc3QgZGF0YSA9IHJvdy5nZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbkF0dHIpO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWxjdWxhdGVBZ2dyZWdhdGUoZGF0YSwgYWdncmVnYXRlQ29uZi5hdHRyLCBhZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZUZ1bmN0aW9uIHx8IGFnZ3JlZ2F0ZUNvbmYuYWdncmVnYXRlKTtcbiAgICByb3cuc2V0Q29sdW1uQWdncmVnYXRlVmFsdWUoY29sdW1uQXR0ciwgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdWJsZXZlbChkYXRhOiBhbnlbXSwgbGV2ZWw6IG51bWJlciwgcGFyZW50PzogT1RhYmxlR3JvdXBlZFJvdyk6IGFueVtdIHtcbiAgICBpZiAobGV2ZWwgPj0gdGhpcy50YWJsZS5ncm91cGVkQ29sdW1uc0FycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZEhhc2ggPSB0aGlzLmdldERhdGFJbmZvcm1hdGlvbkJ5R3JvdXAoZGF0YSwgbGV2ZWwpO1xuXG4gICAgbGV0IHJlc3VsdCA9IFtdO1xuICAgIE9iamVjdC5rZXlzKHJlY29yZEhhc2gpLmZvckVhY2gocmVjb3JkS2V5ID0+IHtcblxuICAgICAgY29uc3Qgcm93ID0gbmV3IE9UYWJsZUdyb3VwZWRSb3coe1xuICAgICAgICBjb2x1bW46IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtsZXZlbF0sXG4gICAgICAgIGtleXNBc1N0cmluZzogcmVjb3JkS2V5LFxuICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICBwYXJlbnQ6IHBhcmVudFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZ3JvdXBlZFJvd3NTdWJzY3JpcHRpb24uYWRkKHJvdy5hZ2dyZWdhdGVGdW5jdGlvbkNoYW5nZS5zdWJzY3JpYmUoYXJnID0+IHtcbiAgICAgICAgaWYgKGFyZy5jaGFuZ2VBbGxHcm91cGVkUm93cykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlQWdncmVnYXRlc1thcmcuY29sdW1uQXR0cl0gPSBhcmcuYWN0aXZlQWdncmVnYXRlO1xuICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhLmZpbHRlcihyb3cgPT4gcm93IGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdykuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICAgICAgcm93LnNldENvbHVtbkFjdGl2ZUFnZ3JlZ2F0ZUZ1bmN0aW9uKGFyZy5jb2x1bW5BdHRyLCBhcmcuYWN0aXZlQWdncmVnYXRlLCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnJlY2FsY3VsYXRlQ29sdW1uQWdncmVnYXRlKGFyZy5jb2x1bW5BdHRyLCByb3cpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVjYWxjdWxhdGVDb2x1bW5BZ2dyZWdhdGUoYXJnLmNvbHVtbkF0dHIsIGFyZy5yb3cpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgICBjb25zdCBhZmZlY3RlZEluZGV4ZXMgPSByZWNvcmRIYXNoW3Jvdy5rZXlzQXNTdHJpbmddO1xuICAgICAgY29uc3QgZ3JvdXBEYXRhID0gZGF0YS5maWx0ZXIoKHJvdywgaW5kZXgpID0+IGFmZmVjdGVkSW5kZXhlcy5pbmNsdWRlcyhpbmRleCkpO1xuICAgICAgdGhpcy50YWJsZS52aXNpYmxlQ29sQXJyYXkuZm9yRWFjaCgoY29sdW1uQXR0ciwgaSkgPT4ge1xuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIHJvdy50aXRsZSA9IHRoaXMuZ2V0VGV4dEdyb3VwUm93KHJvdywgYWZmZWN0ZWRJbmRleGVzLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXNlQ29sdW1uQWdncmVnYXRlID0gdGhpcy50YWJsZS51c2VDb2x1bW5Hcm91cGluZ0FnZ3JlZ2F0ZShjb2x1bW5BdHRyKTtcbiAgICAgICAgaWYgKHVzZUNvbHVtbkFnZ3JlZ2F0ZSkge1xuICAgICAgICAgIHJvdy5pbml0aWFsaXplQ29sdW1uQWdncmVnYXRlKGNvbHVtbkF0dHIsIHRoaXMudGFibGUuZ2V0Q29sdW1uR3JvdXBpbmdDb21wb25lbnQoY29sdW1uQXR0cikpO1xuXG4gICAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuYWN0aXZlQWdncmVnYXRlc1tjb2x1bW5BdHRyXSkpIHtcbiAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BY3RpdmVBZ2dyZWdhdGVGdW5jdGlvbihjb2x1bW5BdHRyLCB0aGlzLmFjdGl2ZUFnZ3JlZ2F0ZXNbY29sdW1uQXR0cl0sIGZhbHNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocm93Lmhhc0FjdGl2ZUFnZ3JlZ2F0ZShjb2x1bW5BdHRyKSkge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlRGF0YSA9IGdyb3VwRGF0YS5tYXAoeCA9PiB7IGNvbnN0IG9iaiA9IHt9OyBvYmpbY29sdW1uQXR0cl0gPSB4W2NvbHVtbkF0dHJdOyByZXR1cm4gb2JqOyB9KTtcbiAgICAgICAgICAgIHJvdy5zZXRDb2x1bW5BZ2dyZWdhdGVEYXRhKGNvbHVtbkF0dHIsIGFnZ3JlZ2F0ZURhdGEpO1xuXG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVDb25mID0gcm93LmdldEFjdGl2ZUNvbHVtbkFnZ3JlZ2F0ZUNvbmZpZ3VyYXRpb24oY29sdW1uQXR0cik7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY2FsY3VsYXRlQWdncmVnYXRlKGFnZ3JlZ2F0ZURhdGEsIGFnZ3JlZ2F0ZUNvbmYuYXR0ciwgYWdncmVnYXRlQ29uZi5hZ2dyZWdhdGVGdW5jdGlvbiB8fCBhZ2dyZWdhdGVDb25mLmFnZ3JlZ2F0ZSk7XG4gICAgICAgICAgICByb3cuc2V0Q29sdW1uQWdncmVnYXRlVmFsdWUoY29sdW1uQXR0ciwgdmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByb3cuZXhwYW5kZWQgPSB0aGlzLmdldEV4cGFuc2lvblN0YXRlKHJvdyk7XG4gICAgICBjb25zdCBzdWJHcm91cCA9IHRoaXMuZ2V0U3VibGV2ZWwoZ3JvdXBEYXRhLCBsZXZlbCArIDEsIHJvdyk7XG4gICAgICBzdWJHcm91cC51bnNoaWZ0KHJvdyk7XG4gICAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KHN1Ykdyb3VwKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgY29sbGFwc2VkIHJvdyBncm91cFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyBjb2xsYXBzZWQgcm93IGdyb3VwXG4gICAqL1xuICBmaWx0ZXJDb2xsYXBzZWRSb3dHcm91cChkYXRhOiBhbnkpOiBhbnlbXSB7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyb3c6IGFueSkgPT4gKHJvdyBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpID8gcm93LnZpc2libGUgOiB0aGlzLmJlbG9uZ3NUb0V4cGFuZGVkR3JvdXBlZFJvdyhkYXRhLCByb3cpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCZWxvbmdzIHRvIGFuIGV4cGFuZGVkIGdyb3VwZWQgcm93XG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEBwYXJhbSByb3dcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0byBleHBhbmRlZCBncm91cGVkIHJvd1xuICAgKi9cbiAgYmVsb25nc1RvRXhwYW5kZWRHcm91cGVkUm93KGRhdGE6IGFueSwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgcGFyZW50OiBPVGFibGVHcm91cGVkUm93O1xuICAgIGxldCBtYXRjaCA9IGZhbHNlO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkYXRhLmxlbmd0aCAmJiAhbWF0Y2g7IGluZGV4KyspIHtcbiAgICAgIGlmIChkYXRhW2luZGV4XSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICAgICAgcGFyZW50ID0gZGF0YVtpbmRleF07XG4gICAgICB9IGVsc2UgaWYgKFV0aWwuaXNFcXVpdmFsZW50KGRhdGFbaW5kZXhdLCByb3cpKSB7XG4gICAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHBhcmVudCkgPyAocGFyZW50LnZpc2libGUgJiYgcGFyZW50LmV4cGFuZGVkKSA6IHRydWU7XG4gIH1cblxuICB1cGRhdGVHcm91cGVkQ29sdW1ucygpIHtcbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgZ3JvdXAgYnkgY29sdW1uXG4gICAqIEBwYXJhbSByb3dHcm91cFxuICAgKi9cbiAgdG9nZ2xlR3JvdXBCeUNvbHVtbihyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIGlmIChyb3dHcm91cC5leHBhbmRTYW1lTGV2ZWwodGhpcy50YWJsZS5leHBhbmRHcm91cHNTYW1lTGV2ZWwpKSB7XG4gICAgICB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvd0dyb3VwLmxldmVsXSA9ICFyb3dHcm91cC5leHBhbmRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTdGF0ZVJvd0dyb3VwZWQocm93R3JvdXApO1xuICAgIH1cbiAgICB0aGlzLmdyb3VwQnlDb2x1bW5DaGFuZ2UubmV4dCgpO1xuICB9XG5cbiAgc2V0Um93R3JvdXBMZXZlbEV4cGFuc2lvbihyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdywgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvd0dyb3VwLmxldmVsXSA9IHZhbHVlO1xuICAgIHRoaXMuZ3JvdXBCeUNvbHVtbkNoYW5nZS5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0YXRlUm93R3JvdXBlZChyb3dHcm91cDogT1RhYmxlR3JvdXBlZFJvdykge1xuICAgIGNvbnN0IHN0YXRlUm93R3JvdXBlZCA9IHRoaXMuZ3JvdXBlZFJvd1N0YXRlLmZpbmQocm93ID0+IHJvd0dyb3VwLmtleXNBc1N0cmluZyA9PT0gcm93LmtleXNBc1N0cmluZyAmJiBKU09OLnN0cmluZ2lmeShyb3dHcm91cC5wYXJlbnQpID09PSBKU09OLnN0cmluZ2lmeShyb3cucGFyZW50KSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHN0YXRlUm93R3JvdXBlZCkpIHtcbiAgICAgIHN0YXRlUm93R3JvdXBlZC5leHBhbmRlZCA9ICFzdGF0ZVJvd0dyb3VwZWQuZXhwYW5kZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd0dyb3VwLmV4cGFuZGVkID0gIXJvd0dyb3VwLmV4cGFuZGVkO1xuICAgICAgdGhpcy5ncm91cGVkUm93U3RhdGUucHVzaChyb3dHcm91cCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZXh0R3JvdXBSb3coZ3JvdXA6IE9UYWJsZUdyb3VwZWRSb3csIHRvdGFsQ291bnRzOiBudW1iZXIpIHtcbiAgICBjb25zdCBmaWVsZCA9IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheVtncm91cC5sZXZlbCAtIDFdO1xuICAgIGxldCB2YWx1ZSA9IEpTT04ucGFyc2UoZ3JvdXAua2V5c0FzU3RyaW5nKVt0aGlzLnRhYmxlLmdyb3VwZWRDb2x1bW5zQXJyYXlbZ3JvdXAubGV2ZWwgLSAxXV07XG5cbiAgICBjb25zdCBvQ29sID0gdGhpcy50YWJsZS5nZXRPQ29sdW1uKGZpZWxkKTtcblxuICAgIGlmICghdmFsdWUgJiYgVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlcikgJiYgKHRoaXMudGFibGUgYXMgYW55KS5pc0luc3RhbmNlT2ZPVGFibGVDZWxsUmVuZGVyZXJTZXJ2aWNlQ29tcG9uZW50KG9Db2wucmVuZGVyZXIpKSB7XG4gICAgICB2YWx1ZSA9ICcgLSAnO1xuICAgICAgaWYgKCF0aGlzLnRhYmxlLm9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnRhYmxlLm9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbiA9IChvQ29sLnJlbmRlcmVyIGFzIGFueSkub25EYXRhTG9hZGVkLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUdyb3VwZWRDb2x1bW5zKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKHRoaXMudGFibGUgYXMgYW55KS50cmFuc2xhdGVTZXJ2aWNlLmdldChvQ29sLnRpdGxlKSArICc6ICcgKyB2YWx1ZSArICcgKCcgKyB0b3RhbENvdW50cyArICcpJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhwYW5zaW9uU3RhdGUocm93OiBPVGFibGVHcm91cGVkUm93KTogYm9vbGVhbiB7XG4gICAgbGV0IGV4cGFuc2lvblN0YXRlID0gIXBhcmVudCB8fCAhdGhpcy50YWJsZS5jb2xsYXBzZUdyb3VwZWRDb2x1bW5zO1xuICAgIGlmIChyb3cuZXhwYW5kU2FtZUxldmVsKHRoaXMudGFibGUuZXhwYW5kR3JvdXBzU2FtZUxldmVsKSkge1xuICAgICAgZXhwYW5zaW9uU3RhdGUgPSB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlLmhhc093blByb3BlcnR5KHJvdy5sZXZlbCkgPyB0aGlzLmxldmVsc0V4cGFuc2lvblN0YXRlW3Jvdy5sZXZlbF0gOiBleHBhbnNpb25TdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm93R3JvdXAgPSB0aGlzLmdyb3VwZWRSb3dTdGF0ZS5maW5kKHggPT4geC5rZXlzQXNTdHJpbmcgPT09IHJvdy5rZXlzQXNTdHJpbmcgJiYgSlNPTi5zdHJpbmdpZnkoeC5wYXJlbnQpID09PSBKU09OLnN0cmluZ2lmeShyb3cucGFyZW50KSk7XG4gICAgICBleHBhbnNpb25TdGF0ZSA9IHJvd0dyb3VwID8gcm93R3JvdXAuZXhwYW5kZWQgOiBleHBhbnNpb25TdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGFuc2lvblN0YXRlO1xuICB9XG59XG5cblxuXG4iXX0=
|
|
@@ -44,10 +44,10 @@ export class OTableApplyConfigurationDialogComponent {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
OTableApplyConfigurationDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableApplyConfigurationDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
47
|
-
OTableApplyConfigurationDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTableApplyConfigurationDialogComponent, selector: "o-table-apply-configuration-dialog", viewQueries: [{ propertyName: "configurationList", first: true, predicate: MatSelectionList, descendants: true, static: true }], ngImport: i0, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' | oTranslate }}</span>\n\n<mat-dialog-content fxLayout=\"column\">\n <div mat-subheader>{{ 'TABLE.DIALOG.APPLY_CONFIGURATION' | oTranslate }}</div>\n <mat-selection-list #configurationList
|
|
47
|
+
OTableApplyConfigurationDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTableApplyConfigurationDialogComponent, selector: "o-table-apply-configuration-dialog", viewQueries: [{ propertyName: "configurationList", first: true, predicate: MatSelectionList, descendants: true, static: true }], ngImport: i0, template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' | oTranslate }}</span>\n\n<mat-dialog-content fxLayout=\"column\">\n <div mat-subheader>{{ 'TABLE.DIALOG.APPLY_CONFIGURATION' | oTranslate }}</div>\n <mat-selection-list #configurationList class=\"o-table-apply-configuration-dialog-list\">\n <mat-list-option checkboxPosition=\"before\" [value]=\"default_configuration\">\n <span matListItemTitle class=\"o-table-apply-configuration-dialog-list-title\">\n {{ 'TABLE.DIALOG.APPLY_CONFIGURATION_DEFAULT' | oTranslate }}\n </span>\n <span matListItemLine>{{ 'TABLE.DIALOG.APPLY_CONFIGURATION_DEFAULT_DESCRIPTION' | oTranslate }}</span>\n </mat-list-option>\n <mat-list-option checkboxPosition=\"before\" *ngFor=\"let configuration of configurations; let i = index\" [value]=\"configuration.name\">\n <span matListItemTitle>{{ configuration.name }}</span>\n <span matListItemLine>{{ configuration.description }}</span>\n </mat-list-option>\n </mat-selection-list>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button type=\"button\" mat-stroked-button [disabled]=\"configurationList.selectedOptions.selected.length!==1 || isDefaultConfigurationSelected()\"\n (click)=\"removeConfiguration(configurationList.selectedOptions.selected[0].value)\" class=\"o-button-danger\">\n {{ 'DELETE' | oTranslate }}\n </button>\n <span fxFlex></span>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"false\" class=\"o-button-default cancel\">{{ 'CANCEL' | oTranslate }}</button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"true\" [disabled]=\"configurationList.selectedOptions.selected.length!==1\"\n class=\"o-button-primary\">{{ 'OK' | oTranslate }}</button>\n</mat-dialog-actions>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i5.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i5.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "directive", type: i5.MatListSubheaderCssMatStyler, selector: "[mat-subheader], [matSubheader]" }, { kind: "directive", type: i5.MatListItemLine, selector: "[matListItemLine]" }, { kind: "directive", type: i5.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "pipe", type: i6.OTranslatePipe, name: "oTranslate" }] });
|
|
48
48
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableApplyConfigurationDialogComponent, decorators: [{
|
|
49
49
|
type: Component,
|
|
50
|
-
args: [{ selector: 'o-table-apply-configuration-dialog', template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' | oTranslate }}</span>\n\n<mat-dialog-content fxLayout=\"column\">\n <div mat-subheader>{{ 'TABLE.DIALOG.APPLY_CONFIGURATION' | oTranslate }}</div>\n <mat-selection-list #configurationList
|
|
50
|
+
args: [{ selector: 'o-table-apply-configuration-dialog', template: "<span mat-dialog-title>{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' | oTranslate }}</span>\n\n<mat-dialog-content fxLayout=\"column\">\n <div mat-subheader>{{ 'TABLE.DIALOG.APPLY_CONFIGURATION' | oTranslate }}</div>\n <mat-selection-list #configurationList class=\"o-table-apply-configuration-dialog-list\">\n <mat-list-option checkboxPosition=\"before\" [value]=\"default_configuration\">\n <span matListItemTitle class=\"o-table-apply-configuration-dialog-list-title\">\n {{ 'TABLE.DIALOG.APPLY_CONFIGURATION_DEFAULT' | oTranslate }}\n </span>\n <span matListItemLine>{{ 'TABLE.DIALOG.APPLY_CONFIGURATION_DEFAULT_DESCRIPTION' | oTranslate }}</span>\n </mat-list-option>\n <mat-list-option checkboxPosition=\"before\" *ngFor=\"let configuration of configurations; let i = index\" [value]=\"configuration.name\">\n <span matListItemTitle>{{ configuration.name }}</span>\n <span matListItemLine>{{ configuration.description }}</span>\n </mat-list-option>\n </mat-selection-list>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button type=\"button\" mat-stroked-button [disabled]=\"configurationList.selectedOptions.selected.length!==1 || isDefaultConfigurationSelected()\"\n (click)=\"removeConfiguration(configurationList.selectedOptions.selected[0].value)\" class=\"o-button-danger\">\n {{ 'DELETE' | oTranslate }}\n </button>\n <span fxFlex></span>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"false\" class=\"o-button-default cancel\">{{ 'CANCEL' | oTranslate }}</button>\n <button type=\"button\" mat-stroked-button [mat-dialog-close]=\"true\" [disabled]=\"configurationList.selectedOptions.selected.length!==1\"\n class=\"o-button-primary\">{{ 'OK' | oTranslate }}</button>\n</mat-dialog-actions>\n" }]
|
|
51
51
|
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
52
52
|
type: Inject,
|
|
53
53
|
args: [MAT_DIALOG_DATA]
|
|
@@ -55,4 +55,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
55
55
|
type: ViewChild,
|
|
56
56
|
args: [MatSelectionList, { static: true }]
|
|
57
57
|
}] } });
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1hcHBseS1jb25maWd1cmF0aW9uLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2RpYWxvZy9hcHBseS1jb25maWd1cmF0aW9uL28tdGFibGUtYXBwbHktY29uZmlndXJhdGlvbi1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvZXh0ZW5zaW9ucy9kaWFsb2cvYXBwbHktY29uZmlndXJhdGlvbi9vLXRhYmxlLWFwcGx5LWNvbmZpZ3VyYXRpb24tZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBaUIsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7O0FBT3ZFLE1BQU0sT0FBTyx1Q0FBdUM7SUFZbEQsWUFDUyxTQUFnRSxFQUM5QyxJQUEyQixFQUMxQyxRQUFrQjtRQUZyQixjQUFTLEdBQVQsU0FBUyxDQUF1RDtRQUU3RCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBYnZCLDBCQUFxQixHQUFHLGlEQUFpRCxDQUFDO1FBQzFFLG1CQUFjLEdBQTBCLEVBQUUsQ0FBQztRQUUzQyxhQUFRLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFZekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVNLFFBQVE7UUFDYixJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxHQUFHLElBQUksY0FBYyxDQUFnQixLQUFLLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU0sa0JBQWtCLENBQUMsY0FBcUM7UUFDN0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDdkMsQ0FBQztJQUVNLG1CQUFtQixDQUFDLGlCQUF5QjtRQUNsRCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsMkNBQTJDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDL0YsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUN2QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLDhCQUE4QjtRQUNuQyxNQUFNLFFBQVEsR0FBb0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7UUFDbEYsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkUsT0FBTyxhQUFhLEtBQUssSUFBSSxDQUFDLHFCQUFxQixDQUFDO0lBQ3RELENBQUM7SUFFTSw0QkFBNEI7UUFDakMsTUFBTSxRQUFRLEdBQW9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO1FBQ2xGLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsQ0FBQzs7b0lBOUNVLHVDQUF1Qyw4Q0FjeEMsZUFBZTt3SEFkZCx1Q0FBdUMsNkhBT3ZDLGdCQUFnQiw4RENuQjdCLHN3REE0QkE7MkZEaEJhLHVDQUF1QztrQkFKbkQsU0FBUzsrQkFDRSxvQ0FBb0M7OzBCQWlCM0MsTUFBTTsyQkFBQyxlQUFlO21FQU5mLGlCQUFpQjtzQkFEMUIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdExpc3RPcHRpb24sIE1hdFNlbGVjdGlvbkxpc3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9saXN0JztcblxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9UYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLWNvbmZpZ3VyYXRpb24udHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdGFibGUtYXBwbHktY29uZmlndXJhdGlvbi1kaWFsb2cnLFxuICB0ZW1wbGF0ZVVybDogJy4vby10YWJsZS1hcHBseS1jb25maWd1cmF0aW9uLWRpYWxvZy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgT1RhYmxlQXBwbHlDb25maWd1cmF0aW9uRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgZGVmYXVsdF9jb25maWd1cmF0aW9uID0gJ09UYWJsZUFwcGx5Q29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudC1kZWZhdWx0JztcbiAgcHVibGljIGNvbmZpZ3VyYXRpb25zOiBPVGFibGVDb25maWd1cmF0aW9uW10gPSBbXTtcblxuICBwdWJsaWMgb25EZWxldGU6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBWaWV3Q2hpbGQoTWF0U2VsZWN0aW9uTGlzdCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJvdGVjdGVkIGNvbmZpZ3VyYXRpb25MaXN0OiBNYXRTZWxlY3Rpb25MaXN0O1xuXG4gIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxPVGFibGVBcHBseUNvbmZpZ3VyYXRpb25EaWFsb2dDb21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBkYXRhOiBPVGFibGVDb25maWd1cmF0aW9uW10sXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvclxuICApIHtcbiAgICB0aGlzLmxvYWRDb25maWd1cmF0aW9ucyhkYXRhKTtcbiAgICB0aGlzLmRpYWxvZ1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChEaWFsb2dTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25MaXN0LnNlbGVjdGVkT3B0aW9ucyA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxNYXRMaXN0T3B0aW9uPihmYWxzZSk7XG4gIH1cblxuICBwdWJsaWMgbG9hZENvbmZpZ3VyYXRpb25zKGNvbmZpZ3VyYXRpb25zOiBPVGFibGVDb25maWd1cmF0aW9uW10pOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25zID0gY29uZmlndXJhdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oJ0NPTkZJUk0nLCAnVEFCTEUuRElBTE9HLkNPTkZJUk1fUkVNT1ZFX0NPTkZJR1VSQVRJT04nKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMub25EZWxldGUuZW1pdChjb25maWd1cmF0aW9uTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaXNEZWZhdWx0Q29uZmlndXJhdGlvblNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkOiBNYXRMaXN0T3B0aW9uW10gPSB0aGlzLmNvbmZpZ3VyYXRpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZDtcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gc2VsZWN0ZWQubGVuZ3RoID8gc2VsZWN0ZWRbMF0udmFsdWUgOiB2b2lkIDA7XG4gICAgcmV0dXJuIHNlbGVjdGVkVmFsdWUgPT09IHRoaXMuZGVmYXVsdF9jb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldFNlbGVjdGVkQ29uZmlndXJhdGlvbk5hbWUoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWxlY3RlZDogTWF0TGlzdE9wdGlvbltdID0gdGhpcy5jb25maWd1cmF0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQ7XG4gICAgcmV0dXJuIHNlbGVjdGVkLmxlbmd0aCA/IHNlbGVjdGVkWzBdLnZhbHVlIDogdm9pZCAwO1xuICB9XG5cbn1cbiIsIjxzcGFuIG1hdC1kaWFsb2ctdGl0bGU+e3sgJ1RBQkxFLkJVVFRPTlMuQVBQTFlfQ09ORklHVVJBVElPTicgfCBvVHJhbnNsYXRlIH19PC9zcGFuPlxuXG48bWF0LWRpYWxvZy1jb250ZW50IGZ4TGF5b3V0PVwiY29sdW1uXCI+XG4gIDxkaXYgbWF0LXN1YmhlYWRlcj57eyAnVEFCTEUuRElBTE9HLkFQUExZX0NPTkZJR1VSQVRJT04nIHwgb1RyYW5zbGF0ZSB9fTwvZGl2PlxuICA8bWF0LXNlbGVjdGlvbi1saXN0ICNjb25maWd1cmF0aW9uTGlzdCBjbGFzcz1cIm8tdGFibGUtYXBwbHktY29uZmlndXJhdGlvbi1kaWFsb2ctbGlzdFwiPlxuICAgIDxtYXQtbGlzdC1vcHRpb24gY2hlY2tib3hQb3NpdGlvbj1cImJlZm9yZVwiIFt2YWx1ZV09XCJkZWZhdWx0X2NvbmZpZ3VyYXRpb25cIj5cbiAgICAgIDxzcGFuIG1hdExpc3RJdGVtVGl0bGUgY2xhc3M9XCJvLXRhYmxlLWFwcGx5LWNvbmZpZ3VyYXRpb24tZGlhbG9nLWxpc3QtdGl0bGVcIj5cbiAgICAgICAge3sgJ1RBQkxFLkRJQUxPRy5BUFBMWV9DT05GSUdVUkFUSU9OX0RFRkFVTFQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gbWF0TGlzdEl0ZW1MaW5lPnt7ICdUQUJMRS5ESUFMT0cuQVBQTFlfQ09ORklHVVJBVElPTl9ERUZBVUxUX0RFU0NSSVBUSU9OJyB8IG9UcmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9tYXQtbGlzdC1vcHRpb24+XG4gICAgPG1hdC1saXN0LW9wdGlvbiBjaGVja2JveFBvc2l0aW9uPVwiYmVmb3JlXCIgKm5nRm9yPVwibGV0IGNvbmZpZ3VyYXRpb24gb2YgY29uZmlndXJhdGlvbnM7IGxldCBpID0gaW5kZXhcIiBbdmFsdWVdPVwiY29uZmlndXJhdGlvbi5uYW1lXCI+XG4gICAgICA8c3BhbiBtYXRMaXN0SXRlbVRpdGxlPnt7IGNvbmZpZ3VyYXRpb24ubmFtZSB9fTwvc3Bhbj5cbiAgICAgIDxzcGFuIG1hdExpc3RJdGVtTGluZT57eyBjb25maWd1cmF0aW9uLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgIDwvbWF0LWxpc3Qtb3B0aW9uPlxuICA8L21hdC1zZWxlY3Rpb24tbGlzdD5cbjwvbWF0LWRpYWxvZy1jb250ZW50PlxuXG48bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1zdHJva2VkLWJ1dHRvbiBbZGlzYWJsZWRdPVwiY29uZmlndXJhdGlvbkxpc3Quc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLmxlbmd0aCE9PTEgfHwgaXNEZWZhdWx0Q29uZmlndXJhdGlvblNlbGVjdGVkKClcIlxuICAgIChjbGljayk9XCJyZW1vdmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb25MaXN0LnNlbGVjdGVkT3B0aW9ucy5zZWxlY3RlZFswXS52YWx1ZSlcIiBjbGFzcz1cIm8tYnV0dG9uLWRhbmdlclwiPlxuICAgIHt7ICdERUxFVEUnIHwgb1RyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LXN0cm9rZWQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cImZhbHNlXCIgY2xhc3M9XCJvLWJ1dHRvbi1kZWZhdWx0IGNhbmNlbFwiPnt7ICdDQU5DRUwnIHwgb1RyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtc3Ryb2tlZC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiIFtkaXNhYmxlZF09XCJjb25maWd1cmF0aW9uTGlzdC5zZWxlY3RlZE9wdGlvbnMuc2VsZWN0ZWQubGVuZ3RoIT09MVwiXG4gICAgY2xhc3M9XCJvLWJ1dHRvbi1wcmltYXJ5XCI+e3sgJ09LJyB8IG9UcmFuc2xhdGUgfX08L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuIl19
|