@datorama/core 21.4.0-rc.2 → 21.4.0-rc.20
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/bundle.scss +8 -1
- package/bundles/datorama-core.umd.js +179 -78
- package/bundles/datorama-core.umd.js.map +1 -1
- package/bundles/datorama-core.umd.min.js +49 -49
- package/bundles/datorama-core.umd.min.js.map +1 -1
- package/datorama-core.metadata.json +1 -1
- package/esm2015/lib/grid-v2/grid-controller/grid-controller.component.js +5 -2
- package/esm2015/lib/grid-v2/grid-filter/filter-validator.js +14 -21
- package/esm2015/lib/grid-v2/grid-filter/grid-filter.component.js +30 -14
- package/esm2015/lib/grid-v2/grid-filter/grid-filter.types.js +1 -1
- package/esm2015/lib/grid-v2/grid-pagination/grid-pagination.component.js +5 -3
- package/esm2015/lib/grid-v2/grid-store/grid.query.js +34 -9
- package/esm2015/lib/grid-v2/grid-store/grid.service.js +57 -20
- package/esm2015/lib/grid-v2/grid-store/grid.store.types.js +1 -1
- package/esm2015/lib/grid-v2/grid-store/public_api.js +2 -0
- package/esm2015/lib/grid-v2/grid-store/util.js +11 -1
- package/esm2015/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +7 -2
- package/esm2015/lib/grid-v2/public_api.js +2 -2
- package/esm5/lib/grid-v2/grid-controller/grid-controller.component.js +5 -2
- package/esm5/lib/grid-v2/grid-filter/filter-validator.js +16 -21
- package/esm5/lib/grid-v2/grid-filter/grid-filter.component.js +31 -14
- package/esm5/lib/grid-v2/grid-filter/grid-filter.types.js +1 -1
- package/esm5/lib/grid-v2/grid-pagination/grid-pagination.component.js +6 -3
- package/esm5/lib/grid-v2/grid-store/grid.query.js +34 -9
- package/esm5/lib/grid-v2/grid-store/grid.service.js +79 -35
- package/esm5/lib/grid-v2/grid-store/grid.store.types.js +1 -1
- package/esm5/lib/grid-v2/grid-store/public_api.js +2 -0
- package/esm5/lib/grid-v2/grid-store/util.js +11 -1
- package/esm5/lib/grid-v2/grid-toolbar/grid-toolbar.component.js +7 -2
- package/esm5/lib/grid-v2/public_api.js +2 -2
- package/fesm2015/datorama-core.js +153 -64
- package/fesm2015/datorama-core.js.map +1 -1
- package/fesm5/datorama-core.js +179 -79
- package/fesm5/datorama-core.js.map +1 -1
- package/i18n/locale-en_US.json +2 -1
- package/lib/grid-v2/grid-controller/grid-controller.component.d.ts +3 -2
- package/lib/grid-v2/grid-filter/filter-validator.d.ts +4 -3
- package/lib/grid-v2/grid-filter/grid-filter.types.d.ts +7 -1
- package/lib/grid-v2/grid-store/grid.query.d.ts +3 -1
- package/lib/grid-v2/grid-store/grid.service.d.ts +4 -3
- package/lib/grid-v2/grid-store/grid.store.types.d.ts +4 -0
- package/lib/grid-v2/grid-store/public_api.d.ts +2 -0
- package/lib/grid-v2/grid-store/util.d.ts +2 -0
- package/lib/grid-v2/grid-toolbar/grid-toolbar.component.d.ts +1 -0
- package/lib/grid-v2/public_api.d.ts +1 -2
- package/package.json +1 -1
|
@@ -23,7 +23,7 @@ import { OperatorTypes } from '../../operator-toggler/operator-toggler.types';
|
|
|
23
23
|
import { deepmerge } from '../../internal/deep-merge';
|
|
24
24
|
import { combineLatest } from 'rxjs';
|
|
25
25
|
import { triggerWindowResize } from '../../utils/user-agent';
|
|
26
|
-
import { getColField, getColumnsSizes } from './util';
|
|
26
|
+
import { getColField, getColumnsSizes, tryParsePivotValue } from './util';
|
|
27
27
|
import { DatoGridMultiSelectColumnHeaderComponent } from '../grid-column-header/grid-multi-select-header/grid-multi-select-header.component';
|
|
28
28
|
let GridService = class GridService {
|
|
29
29
|
constructor(store, gridQuery, translate, iconRegistry, svgRegistry, storageAPI, logger) {
|
|
@@ -373,19 +373,39 @@ let GridService = class GridService {
|
|
|
373
373
|
});
|
|
374
374
|
this.notifyFilterUpdate();
|
|
375
375
|
}
|
|
376
|
-
setColumnFilter(column, filter) {
|
|
376
|
+
setColumnFilter(column, filter, notifyGrid = true) {
|
|
377
377
|
this._logEvent("Grids - Filter Applied" /* GRID_FILTER_APPLIED */, {
|
|
378
378
|
column: column.getColId(),
|
|
379
379
|
numOfConditions: (filter.conditional && filter.conditional.conditions.length) || 0,
|
|
380
380
|
byValue: !!filter.byValue ? 'Yes' : 'No'
|
|
381
381
|
});
|
|
382
|
+
this.updateFilter(column, filter);
|
|
383
|
+
if (notifyGrid) {
|
|
384
|
+
this.notifyFilterUpdate();
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
setGridFilters(filters) {
|
|
388
|
+
if (this.api) {
|
|
389
|
+
for (const { filter } of filters) {
|
|
390
|
+
const column = this.api.columns.getColumn(filter.colId);
|
|
391
|
+
if (column) {
|
|
392
|
+
this.setColumnFilter(column, filter);
|
|
393
|
+
}
|
|
394
|
+
else {
|
|
395
|
+
const pivotColumn = this.gridQuery.getSecondaryColumn(filter.colId);
|
|
396
|
+
this.setColumnFilter(pivotColumn, filter);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
this.notifyFilterUpdate();
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
updateFilter(column, filter) {
|
|
382
403
|
const colField = getColField(column.getColDef());
|
|
383
404
|
this.store.update(state => {
|
|
384
405
|
return {
|
|
385
406
|
settings: Object.assign(Object.assign({}, state.settings), { filter: Object.assign(Object.assign({}, state.settings.filter), { [colField]: filter }) })
|
|
386
407
|
};
|
|
387
408
|
});
|
|
388
|
-
this.notifyFilterUpdate();
|
|
389
409
|
}
|
|
390
410
|
setSearchTerm(searchTerm) {
|
|
391
411
|
this.store.update(state => {
|
|
@@ -840,32 +860,48 @@ let GridService = class GridService {
|
|
|
840
860
|
/**
|
|
841
861
|
* When pivoting,
|
|
842
862
|
* we add the field name to the column header class in order to access it through the auto generated pivot column.
|
|
843
|
-
* @private
|
|
844
863
|
*/
|
|
845
864
|
initPivotSecondaryColsProcess({ gridOptions }) {
|
|
846
865
|
gridOptions.processSecondaryColDef = colDef => {
|
|
847
|
-
const
|
|
848
|
-
if (
|
|
849
|
-
|
|
850
|
-
const originalColDef = valueColumns
|
|
851
|
-
.map(({ userProvidedColDef }) => userProvidedColDef)
|
|
852
|
-
.find(({ colId }) => colId === colDef.pivotValueColumn.getColId());
|
|
853
|
-
if (originalColDef) {
|
|
854
|
-
colDef.filter = originalColDef.filter;
|
|
855
|
-
}
|
|
866
|
+
const userProvidedColDef = colDef.pivotValueColumn && colDef.pivotValueColumn.getUserProvidedColDef();
|
|
867
|
+
if (userProvidedColDef) {
|
|
868
|
+
colDef.filter = userProvidedColDef.filter;
|
|
856
869
|
}
|
|
857
870
|
if (colDef.pivotKeys) {
|
|
858
|
-
colDef.pivotKeys = colDef.pivotKeys.map(key =>
|
|
871
|
+
colDef.pivotKeys = colDef.pivotKeys.map(key => {
|
|
872
|
+
const parsedKey = tryParsePivotValue(key);
|
|
873
|
+
return (parsedKey && parsedKey.value) || '';
|
|
874
|
+
});
|
|
859
875
|
}
|
|
860
876
|
};
|
|
861
877
|
gridOptions.processSecondaryColGroupDef = (colGroupDef) => {
|
|
862
878
|
if (colGroupDef.headerName) {
|
|
863
|
-
const
|
|
864
|
-
|
|
865
|
-
|
|
879
|
+
const parsedValue = tryParsePivotValue(colGroupDef.headerName);
|
|
880
|
+
if (parsedValue) {
|
|
881
|
+
const { field, value } = parsedValue;
|
|
882
|
+
colGroupDef.headerClass = [field];
|
|
883
|
+
colGroupDef.headerName = value;
|
|
884
|
+
if (colGroupDef.children && colGroupDef.children.length > 0) {
|
|
885
|
+
colGroupDef.headerClass.push('group-pivot-cell');
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
else if (colGroupDef.children) {
|
|
890
|
+
const [colChild] = colGroupDef.children;
|
|
891
|
+
const pivotTotalColumnIds = colChild && colChild.pivotTotalColumnIds;
|
|
892
|
+
if (pivotTotalColumnIds && pivotTotalColumnIds.length > 0) {
|
|
893
|
+
colGroupDef.headerClass = ['total-pivot-cell'];
|
|
894
|
+
colGroupDef.headerName = this.translate.transform('core.total');
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
else {
|
|
898
|
+
colGroupDef.headerClass = ['empty-pivot-header'];
|
|
866
899
|
}
|
|
867
900
|
if (colGroupDef.pivotKeys) {
|
|
868
|
-
colGroupDef.pivotKeys = colGroupDef.pivotKeys.map(key =>
|
|
901
|
+
colGroupDef.pivotKeys = colGroupDef.pivotKeys.map(key => {
|
|
902
|
+
const parsedKey = tryParsePivotValue(key);
|
|
903
|
+
return (parsedKey && parsedKey.value) || '';
|
|
904
|
+
});
|
|
869
905
|
}
|
|
870
906
|
};
|
|
871
907
|
}
|
|
@@ -875,7 +911,8 @@ let GridService = class GridService {
|
|
|
875
911
|
const mappedValues = Object.assign({}, currentValue);
|
|
876
912
|
for (const col of pivotColumns) {
|
|
877
913
|
const field = col.getColDef().field;
|
|
878
|
-
|
|
914
|
+
const pivotValue = { field, value: currentValue[field] };
|
|
915
|
+
mappedValues[field] = JSON.stringify(pivotValue);
|
|
879
916
|
}
|
|
880
917
|
return mappedValues;
|
|
881
918
|
});
|
|
@@ -902,4 +939,4 @@ GridService = __decorate([
|
|
|
902
939
|
SvgRegistry, Object, Object])
|
|
903
940
|
], GridService);
|
|
904
941
|
export { GridService };
|
|
905
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBZXpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUNMLG9CQUFvQixFQUlwQixzQkFBc0IsRUFRdkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUWxGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBSUwsbUJBQW1CLEVBT25CLHVDQUF1QyxFQUN2QyxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLDJCQUEy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QUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUM7Z0JBRXBDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzdFO1lBRUQsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGLENBQUE7O1lBai9Ca0IsU0FBUztZQUNMLFNBQVM7WUFDVCxvQkFBb0I7WUFDakIsWUFBWTtZQUNiLFdBQVc7NENBQy9CLE1BQU0sU0FBQyxxQkFBcUI7NENBQzVCLE1BQU0sU0FBQyxnQkFBZ0I7O0FBaENmLFdBQVc7SUFEdkIsVUFBVSxFQUFFO0lBZ0NSLFdBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDN0IsV0FBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtxQ0FOVixTQUFTO1FBQ0wsU0FBUztRQUNULG9CQUFvQjtRQUNqQixZQUFZO1FBQ2IsV0FBVztHQTlCdkIsV0FBVyxDQTJnQ3ZCO1NBM2dDWSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0b0dyaWRBcGkgfSBmcm9tICcuLi9ncmlkLWNvbnRyb2xsZXIvZ3JpZC1jb250cm9sbGVyLnR5cGVzJztcbmltcG9ydCB7XG4gIENlbGxDbGFzc1BhcmFtcyxcbiAgQ29sR3JvdXBEZWYsXG4gIENvbHVtbixcbiAgR2V0Q29udGV4dE1lbnVJdGVtc1BhcmFtcyxcbiAgR3JpZE9wdGlvbnMsXG4gIElDZWxsUmVuZGVyZXJQYXJhbXMsXG4gIElHZXRSb3dzUGFyYW1zLFxuICBSb3dOb2RlLFxuICBSb3dOb2RlVHJhbnNhY3Rpb24sXG4gIFJvd1NlbGVjdGVkRXZlbnRcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgUm93RGF0YVRyYW5zYWN0aW9uIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHkvZGlzdC9saWIvcm93TW9kZWxzL2NsaWVudFNpZGUvY2xpZW50U2lkZVJvd01vZGVsJztcbmltcG9ydCB7IEdyaWRRdWVyeSB9IGZyb20gJy4vZ3JpZC5xdWVyeSc7XG5pbXBvcnQgeyBEYXRvQ29yZUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0b0N1c3RvbUhlYWRlclRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jdXN0b20taGVhZGVyL2N1c3RvbS1oZWFkZXItdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0dyaWRDb25kaXRpb25hbEZpbHRlcixcbiAgRGF0b0dyaWRGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLFxuICBEYXRvR3JpZEZpbHRlcnNNYXAsXG4gIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24sXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZGl0aW9uLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcixcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24sXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uUmFuZ2VDb25kaXRpb25cbn0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICcuLi8uLi91dGlscy9jb2VyY2lvbic7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc0Z1bmN0aW9uLCBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsdGVyIH0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZmlsdGVyLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBBZ0dyaWROZzIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgSWNvblJlZ2lzdHJ5LCBTdmdSZWdpc3RyeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ljb24tcmVnaXN0cnknO1xuaW1wb3J0IHsgZ2V0VmlzaWJsZUFjdGlvbnMsIHRvb2xiYXJBY3Rpb25Ub0NvbnRleHRBY3Rpb24gfSBmcm9tICcuLi9ncmlkLXYyLnV0aWwnO1xuaW1wb3J0IHtcbiAgRGF0b0dyaWRTZXR0aW5ncyxcbiAgTm9ybWFsaXplT3B0aW9uc1BhcmFtcyxcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25Db25maWcsXG4gIFN1Y2Nlc3NXcmFwcGVyUGFyYW1zXG59IGZyb20gJy4vZ3JpZC5zdG9yZS50eXBlcyc7XG5pbXBvcnQgeyBSb3dBY3Rpb24gfSBmcm9tICcuLi9ncmlkLXRvb2xiYXIvZ3JpZC10b29sYmFyLnR5cGVzJztcbmltcG9ydCB7IGNvcHlUb0NsaXBib2FyZCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2xpcGJvYXJkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBHcmlkU3RvcmUgfSBmcm9tICcuL2dyaWQuc3RvcmUnO1xuaW1wb3J0IHsgREFUT19HUklEX1NUT1JBR0VfQVBJLCBHcmlkU3RvcmFnZUFQSSB9IGZyb20gJy4uL2dyaWQtc2V0dGluZ3MnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udmVydGVyUGFyYW1zLFxuICBEYXRvR3JpZEFsaWdubWVudCxcbiAgRGF0b0dyaWRDb2x1bW5EZWYsXG4gIERhdG9HcmlkQ29sdW1uVHlwZXMsXG4gIERhdG9HcmlkR2V0Um93c1BhcmFtcyxcbiAgRGF0b0dyaWRPcHRpb25zLFxuICBEYXRvR3JpZFNlcnZlclNvcnQsXG4gIERhdG9HcmlkU2VydmVyU29ydERpcmVjdGlvbixcbiAgRGF0b0dyaWRTb3J0LFxuICBEYXRvR3JpZFRyZWVDb25maWcsXG4gIGVkaXRhYmxlQ2VsbFJlbmRlcmVyV2l0aFNlYXJjaEhpZ2hsaWdodCxcbiAgR3JpZE1pbldpZHRocyxcbiAgR3JpZFJvd1NlbGVjdGlvblR5cGUsXG4gIHNlYXJjaEhpZ2hsaWdodENlbGxSZW5kZXJlclxufSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9UcmVlRGF0YSwgZGVmYXVsdEdyaWRPcHRpb25zLCBkZWZhdWx0R3JpZFRyZWVMYWJlbCB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi5jb25maWcnO1xuaW1wb3J0IHsgZGlmZiB9IGZyb20gJy4uLy4uL3V0aWxzL29iamVjdCc7XG5pbXBvcnQgeyB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ25neC10YWtlLXVudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgQ29yZUV2ZW50TG9nZ2VyLCBDb3JlRXZlbnRUeXBlcywgREFUT19DT1JFX0xPR0dFUiB9IGZyb20gJy4uLy4uL2V2ZW50LWxvZ2dlcic7XG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgc2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgT3BlcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uL29wZXJhdG9yLXRvZ2dsZXIvb3BlcmF0b3ItdG9nZ2xlci50eXBlcyc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9kZWVwLW1lcmdlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRyaWdnZXJXaW5kb3dSZXNpemUgfSBmcm9tICcuLi8uLi91dGlscy91c2VyLWFnZW50JztcbmltcG9ydCB7IGdldENvbEZpZWxkLCBnZXRDb2x1bW5zU2l6ZXMgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgRGF0b0dyaWRNdWx0aVNlbGVjdENvbHVtbkhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY29sdW1uLWhlYWRlci9ncmlkLW11bHRpLXNlbGVjdC1oZWFkZXIvZ3JpZC1tdWx0aS1zZWxlY3QtaGVhZGVyLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHcmlkU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGFwaTogRGF0b0dyaWRBcGk7XG4gIHRyZWVDb25maWc6IERhdG9HcmlkVHJlZUNvbmZpZyA9IGRlZmF1bHRHcmlkVHJlZUxhYmVsO1xuICBpc1Bpdm90TW9kZTogYm9vbGVhbjtcblxuICAvKiogQGludGVybmFsIC0gdXNlZCBmb3Igc2VydmVyIHNpZGUgYnkgdmFsdWUgZmlsdGVyICovXG4gIF9vcmlnaW5hbEdldFJvd3M6IChwYXJhbXM6IERhdG9HcmlkR2V0Um93c1BhcmFtcykgPT4gdm9pZDtcbiAgcHJpdmF0ZSBpbml0aWFsU2V0dGluZ3M6IERhdG9HcmlkU2V0dGluZ3M7XG4gIHByaXZhdGUgZ3JpZE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBncmlkUmVmOiBBZ0dyaWROZzI7XG4gIHByaXZhdGUgY3VzdG9tSGVhZGVyc1RlbXBsYXRlczogUXVlcnlMaXN0PERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudD47XG4gIHByaXZhdGUgaXNUcmVlRGF0YTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBwYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPSAtMTtcbiAgcHJpdmF0ZSBsYXN0VG90YWxSb3dzOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBDSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lEID0gJ2dyaWQtY2hlY2tib3gtc2VsZWN0aW9uJztcblxuICBzZXQgdHJlZURhdGEoaXNUcmVlRGF0YTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNUcmVlRGF0YSA9IGlzVHJlZURhdGE7XG4gIH1cblxuICBnZXQgdHJlZURhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUcmVlRGF0YTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IEdyaWRTdG9yZSxcbiAgICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogSWNvblJlZ2lzdHJ5LFxuICAgIHByaXZhdGUgc3ZnUmVnaXN0cnk6IFN2Z1JlZ2lzdHJ5LFxuICAgIEBJbmplY3QoREFUT19HUklEX1NUT1JBR0VfQVBJKSBwcml2YXRlIHN0b3JhZ2VBUEk6IEdyaWRTdG9yYWdlQVBJLFxuICAgIEBJbmplY3QoREFUT19DT1JFX0xPR0dFUikgcHJpdmF0ZSBsb2dnZXI6IENvcmVFdmVudExvZ2dlclxuICApIHt9XG5cbiAgbmdPbkRlc3Ryb3koKSB7fVxuXG4gIC8qKiBAaW50ZXJuYWwgLSB1c2VkIHRvIGluaXQgdGhlIHNlcnZpY2UgKi9cbiAgX3NldEFwaShhcGk6IERhdG9HcmlkQXBpLCBncmlkUmVmOiBBZ0dyaWROZzIpIHtcbiAgICB0aGlzLmFwaSA9IGFwaTtcbiAgICB0aGlzLmdyaWRSZWYgPSBncmlkUmVmO1xuICAgIHRoaXMuZ3JpZE5hbWUgPSAoZ3JpZFJlZi5ncmlkT3B0aW9ucyBhcyBEYXRvR3JpZE9wdGlvbnMpLmdyaWROYW1lO1xuICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oe1xuICAgICAgZW5hYmxlZDogdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRSZWYuZ3JpZE9wdGlvbnMpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2VydmVyU2lkZVBhZ2luYXRpb24oZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdyaWRPcHRpb25zLnJvd01vZGVsVHlwZSA9PT0gJ2luZmluaXRlJztcbiAgfVxuXG4gIHVwZGF0ZUdyaWRDb250ZXh0KGNvbnRleHQgPSB7fSwgcmVwbGFjZSA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKS5jb250ZXh0ID0gcmVwbGFjZVxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IGRlZXBtZXJnZSh0aGlzLmdyaWRSZWYuZ3JpZE9wdGlvbnMuY29udGV4dCB8fCB7fSwgY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNlbGVjdFJvd3MgaW5zdGVhZFxuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBzZXRTZWxlY3RlZFJvd3M8VD4ocm93OiAoVCAmIFJvd05vZGUpIHwgKFRbXSAmIFJvd05vZGVbXSkpIHtcbiAgICB0aGlzLnNlbGVjdFJvd3Mocm93KTtcbiAgfVxuXG4gIHNlbGVjdFJvd3M8VD4ocm93OiAoVCAmIFJvd05vZGUpIHwgKFRbXSAmIFJvd05vZGVbXSkpIHtcbiAgICBjb25zdCByb3dOb2RlcyA9IGNvZXJjZUFycmF5KHJvdykuZmlsdGVyKHJvd05vZGUgPT4gIXJvd05vZGUuaXNTZWxlY3RlZCgpKTtcbiAgICBjb25zdCBsYXN0Tm9kZSA9IHJvd05vZGVzLnBvcCgpO1xuICAgIHJvd05vZGVzLmZvckVhY2gocm93Tm9kZSA9PiByb3dOb2RlLnNldFNlbGVjdGVkKHRydWUsIGZhbHNlLCB0cnVlKSk7XG4gICAgaWYgKGxhc3ROb2RlKSB7XG4gICAgICBsYXN0Tm9kZS5zZXRTZWxlY3RlZCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBkZXNlbGVjdFJvd3M8VD4ocm93OiAoVCAmIFJvd05vZGUpIHwgKFRbXSAmIFJvd05vZGVbXSkpIHtcbiAgICBjb25zdCByb3dOb2RlcyA9IGNvZXJjZUFycmF5KHJvdykuZmlsdGVyKHJvd05vZGUgPT4gcm93Tm9kZS5pc1NlbGVjdGVkKCkpO1xuICAgIGNvbnN0IGxhc3ROb2RlID0gcm93Tm9kZXMucG9wKCk7XG4gICAgcm93Tm9kZXMuZm9yRWFjaChyb3dOb2RlID0+IHJvd05vZGUuc2V0U2VsZWN0ZWQoZmFsc2UsIGZhbHNlLCB0cnVlKSk7XG4gICAgaWYgKGxhc3ROb2RlKSB7XG4gICAgICBsYXN0Tm9kZS5zZXRTZWxlY3RlZChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0Um93czxUPihkYXRhOiBUW10sIGZpdENvbnRhaW5lciA9IGZhbHNlLCB0cmVlQ29uZmlnOiBQYXJ0aWFsPERhdG9HcmlkVHJlZUNvbmZpZz4gPSB7fSkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWFkeSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNUcmVlRGF0YSkge1xuICAgICAgICB0aGlzLnRyZWVDb25maWcgPSB7XG4gICAgICAgICAgLi4uZGVmYXVsdEdyaWRUcmVlTGFiZWwsXG4gICAgICAgICAgLi4udHJlZUNvbmZpZ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0cmVlRGF0ZSA9IGNvbnZlcnRUb1RyZWVEYXRhKGRhdGEsIHRoaXMudHJlZUNvbmZpZyk7XG4gICAgICAgIHRoaXMuYXBpLmdyaWQuc2V0Um93RGF0YSh0cmVlRGF0ZSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNQaXZvdE1vZGUpIHtcbiAgICAgICAgdGhpcy5zZXRQaXZvdE1vZGVSb3dzPFQ+KGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hcGkuZ3JpZC5zZXRSb3dEYXRhKGRhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKGZpdENvbnRhaW5lcikge1xuICAgICAgICB0aGlzLmZpdEdyaWQoJ2NvbnRhaW5lcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJpZ2dlcldpbmRvd1Jlc2l6ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGF0YXNvdXJjZShnZXRSb3dzOiAocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHZvaWQsIHJldHVyblRvQ3VycmVudFBhZ2UgPSBmYWxzZSwgc2hvd0xvYWRpbmcgPSBmYWxzZSkge1xuICAgIHJldHVyblRvQ3VycmVudFBhZ2UgJiYgdGhpcy51cGRhdGVQYWdlVG9LZWVwT25SZWZyZXNoU2VydmVyRGF0YSgpO1xuICAgIHNob3dMb2FkaW5nICYmIHRoaXMuc2V0TG9hZGluZyh0cnVlKTtcbiAgICB0aGlzLl9vcmlnaW5hbEdldFJvd3MgPSBnZXRSb3dzO1xuICAgIHRoaXMuYXBpLmdyaWQuc2V0RGF0YXNvdXJjZSh7IGdldFJvd3M6IHRoaXMud3JhcEdldFJvd3ModGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKSwgZ2V0Um93cykgfSk7XG4gIH1cblxuICByZWZyZXNoU2VydmVyRGF0YShrZWVwQ3VycmVudFBhZ2UgPSBmYWxzZSwgc2hvd0xvYWRpbmcgPSBmYWxzZSkge1xuICAgIGtlZXBDdXJyZW50UGFnZSAmJiB0aGlzLnVwZGF0ZVBhZ2VUb0tlZXBPblJlZnJlc2hTZXJ2ZXJEYXRhKCk7XG4gICAgc2hvd0xvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIHRoaXMuYXBpLmdyaWQuc2V0RGF0YXNvdXJjZSh7IGdldFJvd3M6IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkuZGF0YXNvdXJjZS5nZXRSb3dzIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYWdlVG9LZWVwT25SZWZyZXNoU2VydmVyRGF0YSgpIHtcbiAgICAvLyBLZWVwaW5nIHRoZSBjdXJyZW50IHBhZ2Ugb24gc2VydmVyIHJlZnJlc2ggaXMgY3VycmVudGx5IGF2YWlsYWJsZSBvbmx5IHdoZW4gbm8gcGFnZSBjbGllbnQgY2FjaGluZyBpcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkubWF4QmxvY2tzSW5DYWNoZSA9PT0gMSkge1xuICAgICAgdGhpcy5wYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPSB0aGlzLmFwaS5ncmlkLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJvd3M8VD4ocm93OiBULCBpbmRleD86IG51bWJlcik6IFJvd05vZGVUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qgcm93cyA9IGNvZXJjZUFycmF5KHJvdyk7XG4gICAgY29uc3QgZGF0YTogUm93RGF0YVRyYW5zYWN0aW9uID0geyBhZGQ6IHJvd3MgfTtcbiAgICBpZiAoIWlzTmlsKGluZGV4KSkge1xuICAgICAgZGF0YS5hZGRJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hcGkuZ3JpZC51cGRhdGVSb3dEYXRhKGRhdGEpO1xuICB9XG5cbiAgdXBkYXRlUm93czxUPihyb3c6IFRbXSk6IGFueSB7XG4gICAgY29uc3Qgcm93cyA9IGNvZXJjZUFycmF5KHJvdyk7XG4gICAgcmV0dXJuIHRoaXMuYXBpLmdyaWQudXBkYXRlUm93RGF0YSh7IHVwZGF0ZTogcm93cyB9KTtcbiAgfVxuXG4gIHVwZGF0ZVJvd1ZhbHVlPFQ+KHJvdzogUm93Tm9kZSwga2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBUKTtcbiAgdXBkYXRlUm93VmFsdWU8VD4oaWQ6IHN0cmluZywga2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBUKTtcbiAgdXBkYXRlUm93VmFsdWU8VD4ocm93OiBzdHJpbmcgfCBSb3dOb2RlLCBrZXk6IHN0cmluZywgbmV3VmFsdWU6IFQpIHtcbiAgICBjb25zdCByb3dOb2RlID0gaXNTdHJpbmcocm93KSA/IHRoaXMuYXBpLmdyaWQuZ2V0Um93Tm9kZShyb3cpIDogcm93O1xuICAgIHJvd05vZGUuc2V0RGF0YVZhbHVlKGtleSwgbmV3VmFsdWUpO1xuICB9XG5cbiAgcmVtb3ZlUm93cyhyb3c6IFJvd05vZGUgfCBSb3dOb2RlW10pOiBSb3dOb2RlVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHJvd3MgPSBjb2VyY2VBcnJheShyb3cpLm1hcCgoeyBkYXRhIH0pID0+IGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmFwaS5ncmlkLnVwZGF0ZVJvd0RhdGEoeyByZW1vdmU6IHJvd3MgfSk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZFJvd3MoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5ncmlkUXVlcnkuZ2V0U2VsZWN0ZWRSb3dOb2RlcygpO1xuICAgIHJldHVybiB0aGlzLnJlbW92ZVJvd3Moc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIGNsZWFyVGFibGUoKSB7XG4gICAgdGhpcy5zZXRSb3dzKFtdKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbHVtbnMoY29sRGVmczogRGF0b0dyaWRDb2x1bW5EZWYgfCBEYXRvR3JpZENvbHVtbkRlZltdLCByZWxvYWRTZXR0aW5ncyA9IGZhbHNlKSB7XG4gICAgaWYgKCFjb2xEZWZzKSB7XG4gICAgICB0aHJvdyBuZXcgRGF0b0NvcmVFcnJvcignTm8gY29sdW1uRGVmcyB3ZXJlIHByb3ZpZGVkLiDwn5W18J+Pu+KAjeKZgO+4jycpO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVDb2x1bW5zKGNvZXJjZUFycmF5KGNvbERlZnMpKTtcbiAgICBjb25zdCBzYXZlZFNldHRpbmdzID0gcmVsb2FkU2V0dGluZ3MgJiYgdGhpcy5ncmlkUXVlcnkuZ2V0Q3VycmVudEdyaWRTZXR0aW5ncygpO1xuICAgIHRoaXMuYXBpLmdyaWQuc2V0Q29sdW1uRGVmcyhub3JtYWxpemVkKTtcbiAgICBpZiAoc2F2ZWRTZXR0aW5ncykge1xuICAgICAgdGhpcy5sb2FkU2F2ZWRTZXR0aW5ncyhzYXZlZFNldHRpbmdzKTtcbiAgICB9XG4gIH1cblxuICBub3JtYWxpemVPcHRpb25zKHBhcmFtczogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIHRoaXMuY3VzdG9tSGVhZGVyc1RlbXBsYXRlcyA9IHBhcmFtcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzO1xuICAgIGNvbnN0IGhlYWRlckNvbXBvbmVudFBhcmFtcyA9IHsgZ3JpZFNlcnZpY2U6IHRoaXMsIGdyaWRRdWVyeTogdGhpcy5ncmlkUXVlcnkgfTtcbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuYXV0b0dyb3VwQ29sdW1uRGVmID0ge1xuICAgICAgLi4uaGVhZGVyQ29tcG9uZW50UGFyYW1zLFxuICAgICAgLi4ucGFyYW1zLmdyaWRPcHRpb25zLmF1dG9Hcm91cENvbHVtbkRlZlxuICAgIH07XG5cbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZGVmYXVsdENvbERlZiA9IHtcbiAgICAgIC4uLnBhcmFtcy5ncmlkT3B0aW9ucy5kZWZhdWx0Q29sRGVmLFxuICAgICAgaGVhZGVyQ29tcG9uZW50UGFyYW1zXG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2ggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoID0gcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVYyXzE7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZUJhY2tncm91bmQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlQmFja2dyb3VuZCA9IHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVWMl8xO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5zaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLnNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgPVxuICAgICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMSAmJiBwYXJhbXMuZ3JpZE9wdGlvbnMucm93U2VsZWN0aW9uICE9PSBHcmlkUm93U2VsZWN0aW9uVHlwZS5TSU5HTEU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaEhpZ2hsaWdodCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHQgPVxuICAgICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoICYmIGRlZmF1bHRHcmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHQ7XG4gICAgfVxuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzID0gdGhpcy5ub3JtYWxpemVDb2x1bW5zKHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLCBwYXJhbXMuZ3JpZE9wdGlvbnMpO1xuXG4gICAgLyoqIEFkZCBjb3JlIGZpbHRlcnMgKi9cbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuaXNFeHRlcm5hbEZpbHRlclByZXNlbnQgPSAoKSA9PiB0cnVlO1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5kb2VzRXh0ZXJuYWxGaWx0ZXJQYXNzID0gKHJvdzogUm93Tm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdmFsaWRhdGVGaWx0ZXIoeyByb3csIGFwaTogdGhpcy5ncmlkUXVlcnkuYXBpLmdyaWQgfSwgdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCkpICYmIHRoaXMucm93TWF0Y2hlc1NlYXJjaChyb3cpXG4gICAgICApO1xuICAgIH07XG5cbiAgICAvKiogV3JhcCB0aGUgc2VydmVyIHNpZGUgcGFnaW5hdGlvbiBnZXQgcm93cyBmdW5jdGlvbiAqL1xuICAgIGlmICh0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24ocGFyYW1zLmdyaWRPcHRpb25zKSkge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmJsb2NrTG9hZERlYm91bmNlTWlsbGlzID0gMzAwO1xuICAgICAgdGhpcy5fb3JpZ2luYWxHZXRSb3dzID0gcGFyYW1zLmdyaWRPcHRpb25zLmRhdGFzb3VyY2UuZ2V0Um93cztcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5kYXRhc291cmNlLmdldFJvd3MgPSB0aGlzLndyYXBHZXRSb3dzKHBhcmFtcy5ncmlkT3B0aW9ucyk7XG4gICAgICAvKiBUaGUgY2FjaGUgc2l6ZSBpcyBzeW5jZWQgd2l0aCB0aGUgcGFnaW5hdGlvbiBwYWdlIHNpemUgKi9cbiAgICAgIGNvbnN0IGNhY2hlU2l6ZSA9IHBhcmFtcy5ncmlkT3B0aW9ucy5wYWdpbmF0aW9uUGFnZVNpemU7XG4gICAgICBpZiAoY2FjaGVTaXplKSB7XG4gICAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jYWNoZUJsb2NrU2l6ZSA9IGNhY2hlU2l6ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRWRpdGFibGUgY2VsbCAqL1xuICAgIHRoaXMuaW5pdEVkaXRhYmxlQ29sdW1uc0NlbGxDbGFzcyhwYXJhbXMpO1xuXG4gICAgLyoqIFdyYXAgY29udGV4dCBtZW51ICovXG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmdldENvbnRleHRNZW51SXRlbXMgPSB0aGlzLndyYXBDb250ZXh0TWVudUJ1aWxkZXIocGFyYW1zKTtcblxuICAgIC8qKiBTYXZlIGdyaWQgc2V0dGluZ3MgKi9cbiAgICBjb25zdCB7IHNhdmVTZXR0aW5ncywgZ3JpZE5hbWUgfSA9IHBhcmFtcy5ncmlkT3B0aW9ucztcbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuc2F2ZVNldHRpbmdzID0gc2F2ZVNldHRpbmdzICE9PSBmYWxzZSAmJiAhaXNOaWwoZ3JpZE5hbWUpO1xuXG4gICAgLyoqIFNlcnZlciBTaWRlIFBhZ2luYXRpb24gZm9yIHNlbGVjdCBhbGwgb3B0aW9uICovXG4gICAgdGhpcy5pbml0T25Sb3dTZWxlY3RlZEZvclNlcnZlclNpZGVQYWdpbmF0aW9uKHBhcmFtcyk7XG5cbiAgICAvKiogQWRkIHBpdm90IHNwZWNpZmljIHJlcXVpcmVkIHNldHRpbmdzICovXG4gICAgaWYgKHBhcmFtcy5ncmlkT3B0aW9ucy5waXZvdE1vZGUpIHtcbiAgICAgIHRoaXMuaW5pdFBpdm90U2Vjb25kYXJ5Q29sc1Byb2Nlc3MocGFyYW1zKTtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVWMl8xID0gdHJ1ZTtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5zYXZlU2V0dGluZ3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zLmdyaWRPcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDb2x1bW5zKGNvbERlZnM6IERhdG9HcmlkQ29sdW1uRGVmW10sIGdyaWRPcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMgPSBudWxsKTogRGF0b0dyaWRDb2x1bW5EZWZbXSB7XG4gICAgaWYgKCFncmlkT3B0aW9ucykge1xuICAgICAgZ3JpZE9wdGlvbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkQ29sRGVmcyA9IGNvbERlZnMubWFwKChjb2w6IERhdG9HcmlkQ29sdW1uRGVmKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgICAgICAuLi5jb2wsXG4gICAgICAgIGhlYWRlck5hbWU6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybShjb2wuaGVhZGVyTmFtZSlcbiAgICAgIH07XG4gICAgICAvKiogQWRqdXN0IHRoZSB3aWR0aCBpbiBjYXNlIHRoZSBjb2x1bW4gaGFzIGluZm8gKi9cbiAgICAgIGlmIChjb2wuaW5mbykge1xuICAgICAgICBub3JtYWxpemVkLm1pbldpZHRoID0gY29sLm1pbldpZHRoIHx8IEdyaWRNaW5XaWR0aHMuV2l0aF9JbmZvO1xuICAgICAgfVxuICAgICAgaWYgKCFjb2wuY29sSWQpIHtcbiAgICAgICAgbm9ybWFsaXplZC5jb2xJZCA9IGNvbC5maWVsZDtcbiAgICAgIH1cbiAgICAgIGlmIChub3JtYWxpemVkLnR5cGUgPT09IERhdG9HcmlkQ29sdW1uVHlwZXMuSXRlbXMgJiYgIW5vcm1hbGl6ZWQuZmlsdGVyc0NvbmZpZykge1xuICAgICAgICBub3JtYWxpemVkLmZpbHRlcnNDb25maWcgPSB7IHNlY3Rpb25zOiBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsIH07XG4gICAgICB9XG4gICAgICB0aGlzLm5vcm1hbGl6ZUNvbHVtblNlYXJjaENvbmZpZyhncmlkT3B0aW9ucywgY29sLCBub3JtYWxpemVkKTtcbiAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYWRkTXVsdGlTZWxlY3RIZWFkZXJDb2x1bW5JZlJlcXVpcmVkKHVwZGF0ZWRDb2xEZWZzLCBncmlkT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUNvbHVtblNlYXJjaENvbmZpZyhcbiAgICBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zLFxuICAgIGNvbDogRGF0b0dyaWRDb2x1bW5EZWYsXG4gICAgbm9ybWFsaXplZDogRGF0b0dyaWRDb2x1bW5EZWZcbiAgKSB7XG4gICAgLyoqIENoZWNrIGlmIGNvbHVtbiBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBzZWFyY2ggKiovXG4gICAgY29uc3QgaXNTZXJ2ZXJQYWdpbmF0aW9uID0gdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRPcHRpb25zKTtcbiAgICBpZiAodHlwZW9mIGNvbC5pbmNsdWRlSW5TZWFyY2ggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoaXNTZXJ2ZXJQYWdpbmF0aW9uICYmIGNvbC50eXBlID09PSBEYXRvR3JpZENvbHVtblR5cGVzLkRhdGUpIHtcbiAgICAgICAgbm9ybWFsaXplZC5pbmNsdWRlSW5TZWFyY2ggPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZUluU2VhcmNoID1cbiAgICAgICAgICB0eXBlb2YgZ3JpZE9wdGlvbnMuY29sdW1uc0luY2x1ZGVkSW5TZWFyY2hCeURlZmF1bHQgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IGdyaWRPcHRpb25zLmNvbHVtbnNJbmNsdWRlZEluU2VhcmNoQnlEZWZhdWx0XG4gICAgICAgICAgICA6IGRlZmF1bHRHcmlkT3B0aW9ucy5jb2x1bW5zSW5jbHVkZWRJblNlYXJjaEJ5RGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgbm9ybWFsaXplZC5pbmNsdWRlSW5TZWFyY2ggJiZcbiAgICAgICF0aGlzLmhhc0NlbGxSZW5kZXJlcihub3JtYWxpemVkLCBncmlkT3B0aW9ucykgJiZcbiAgICAgIGdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaEhpZ2hsaWdodFxuICAgICkge1xuICAgICAgbm9ybWFsaXplZC5jZWxsUmVuZGVyZXIgPSAocGFyYW1zOiBJQ2VsbFJlbmRlcmVyUGFyYW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzRWRpdGFibGUgPVxuICAgICAgICAgIChpc0Z1bmN0aW9uKG5vcm1hbGl6ZWQuZWRpdGFibGUpICYmIG5vcm1hbGl6ZWQuZWRpdGFibGUocGFyYW1zKSkgfHxcbiAgICAgICAgICAoIWlzRnVuY3Rpb24obm9ybWFsaXplZC5lZGl0YWJsZSkgJiYgbm9ybWFsaXplZC5lZGl0YWJsZSk7XG4gICAgICAgIHJldHVybiBpc0VkaXRhYmxlXG4gICAgICAgICAgPyBlZGl0YWJsZUNlbGxSZW5kZXJlcldpdGhTZWFyY2hIaWdobGlnaHQocGFyYW1zLCB0aGlzLmdyaWRRdWVyeS5nZXRTZWFyY2hUZXJtKCkpXG4gICAgICAgICAgOiBzZWFyY2hIaWdobGlnaHRDZWxsUmVuZGVyZXIocGFyYW1zLCB0aGlzLmdyaWRRdWVyeS5nZXRTZWFyY2hUZXJtKCkpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc0NlbGxSZW5kZXJlcihjb2x1bW46IERhdG9HcmlkQ29sdW1uRGVmLCBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbHVtbi5jZWxsUmVuZGVyZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gY29sdW1uLnR5cGUgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGNvbHVtblR5cGVIYXNDZWxsUmVuZGVyZXIgPSAob3B0aW9uczogUGFydGlhbDxEYXRvR3JpZE9wdGlvbnM+KTogYm9vbGVhbiA9PlxuICAgICAgb3B0aW9ucy5jb2x1bW5UeXBlcyAmJiAhIW9wdGlvbnMuY29sdW1uVHlwZXNbdHlwZV0gJiYgISFvcHRpb25zLmNvbHVtblR5cGVzW3R5cGVdLmNlbGxSZW5kZXJlcjtcblxuICAgIHJldHVybiBjb2x1bW5UeXBlSGFzQ2VsbFJlbmRlcmVyKGdyaWRPcHRpb25zKSB8fCBjb2x1bW5UeXBlSGFzQ2VsbFJlbmRlcmVyKGRlZmF1bHRHcmlkT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGFkZE11bHRpU2VsZWN0SGVhZGVyQ29sdW1uSWZSZXF1aXJlZChcbiAgICBjb2x1bW5EZWZzOiBEYXRvR3JpZENvbHVtbkRlZltdLFxuICAgIGdyaWRPcHRpb25zOiBEYXRvR3JpZE9wdGlvbnNcbiAgKTogRGF0b0dyaWRDb2x1bW5EZWZbXSB7XG4gICAgY29uc3Qgc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcyA9IGdyaWRPcHRpb25zICYmIGdyaWRPcHRpb25zLnNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXM7XG4gICAgY29uc3Qgcm93U2VsZWN0aW9uID1cbiAgICAgIGdyaWRPcHRpb25zICYmIGdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiA/IGdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiA6IGRlZmF1bHRHcmlkT3B0aW9ucy5yb3dTZWxlY3Rpb247XG5cbiAgICBpZiAoc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcyAmJiByb3dTZWxlY3Rpb24gPT09IEdyaWRSb3dTZWxlY3Rpb25UeXBlLk1VTFRJUExFKSB7XG4gICAgICBjb25zdCBjaGVja2JveGVzQ29sdW1uOiBEYXRvR3JpZENvbHVtbkRlZiA9IHtcbiAgICAgICAgY29sSWQ6IHRoaXMuQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRCxcbiAgICAgICAgY2hlY2tib3hTZWxlY3Rpb246IHRydWUsXG4gICAgICAgIGhlYWRlckNvbXBvbmVudEZyYW1ld29yazogRGF0b0dyaWRNdWx0aVNlbGVjdENvbHVtbkhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgd2lkdGg6IDMwLFxuICAgICAgICBtYXhXaWR0aDogMzAsXG4gICAgICAgIHN1cHByZXNzU2l6ZVRvRml0OiB0cnVlLFxuICAgICAgICBjZWxsQ2xhc3M6ICdjaGVja2JveC1zZWxlY3Rpb24tY2VsbCcsXG4gICAgICAgIGhlYWRlckNsYXNzOiAnaGVhZGVyLWNoZWNrYm94LXNlbGVjdGlvbi1jZWxsJyxcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgcGlubmVkOiAnbGVmdCcsXG4gICAgICAgIGxvY2tQb3NpdGlvbjogdHJ1ZSxcbiAgICAgICAgaW5jbHVkZUluU2VhcmNoOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBbY2hlY2tib3hlc0NvbHVtbiwgLi4uY29sdW1uRGVmc107XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5EZWZzO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0T25Sb3dTZWxlY3RlZEZvclNlcnZlclNpZGVQYWdpbmF0aW9uKHsgZ3JpZE9wdGlvbnMgfTogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIGlmICghdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRPcHRpb25zKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBleHRlcm5hbE9uUm93U2VsZWN0ZWQgPSBncmlkT3B0aW9ucy5vblJvd1NlbGVjdGVkO1xuICAgIGdyaWRPcHRpb25zLm9uUm93U2VsZWN0ZWQgPSAoZXZ0OiBSb3dTZWxlY3RlZEV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBub2RlID0gZXZ0Lm5vZGU7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBub2RlLmlzU2VsZWN0ZWQoKTtcbiAgICAgICAgY29uc3QgeyBleGNsdWRlZEZyb21TZWxlY3RBbGwgfSA9IHRoaXMuZ3JpZFF1ZXJ5LnNlcnZlclNpZGVDb25maWc7XG4gICAgICAgIGNvbnN0IGlzRXhjbHVkZWQgPSBleGNsdWRlZEZyb21TZWxlY3RBbGwuaW5jbHVkZXMobm9kZS5pZCk7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkICYmIGlzRXhjbHVkZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHtcbiAgICAgICAgICAgIGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbDogZXhjbHVkZWRGcm9tU2VsZWN0QWxsLmZpbHRlcigobm9kZUlkOiBzdHJpbmcpID0+IG5vZGVJZCAhPT0gbm9kZS5pZClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNTZWxlY3RlZCAmJiAhaXNFeGNsdWRlZCkge1xuICAgICAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBleGNsdWRlZEZyb21TZWxlY3RBbGw6IFsuLi5leGNsdWRlZEZyb21TZWxlY3RBbGwsIG5vZGUuaWRdIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXh0ZXJuYWxPblJvd1NlbGVjdGVkKSB7XG4gICAgICAgIGV4dGVybmFsT25Sb3dTZWxlY3RlZChldnQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJvd01hdGNoZXNTZWFyY2gocm93OiBSb3dOb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VhcmNoVGVybSA9ICh0aGlzLmdyaWRRdWVyeS5nZXRTZWFyY2hUZXJtKCkgfHwgJycpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmIChpc0VtcHR5KHNlYXJjaFRlcm0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkuaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaFxuICAgICAgPyB0aGlzLmdyaWRRdWVyeS5nZXRBbGxDb2x1bW5zKClcbiAgICAgIDogdGhpcy5ncmlkUXVlcnkuZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGNvbERlZiA9IHRoaXMuYXBpLmdyaWQuZ2V0Q29sdW1uRGVmKGNvbC5nZXRDb2xJZCgpKSBhcyBEYXRvR3JpZENvbHVtbkRlZjtcbiAgICAgIGlmICghY29sRGVmLmluY2x1ZGVJblNlYXJjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvd1ZhbHVlID0gKHRoaXMuYXBpLmdyaWQuZ2V0VmFsdWUoY29sLmdldENvbElkKCksIHJvdykgfHwgJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChyb3dWYWx1ZS5pbmNsdWRlcyhzZWFyY2hUZXJtKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBmaXRHcmlkKCdjb250YWluZXInKSBpbnN0ZWFkXG4gICAqL1xuICBmaXRUb0NvbnRhaW5lcigpIHtcbiAgICB0aGlzLmFwaS5ncmlkLnNpemVDb2x1bW5zVG9GaXQoKTtcbiAgfVxuXG4gIGdldEN1c3RvbUhlYWRlcihmaWVsZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY3VzdG9tSGVhZGVyc1RlbXBsYXRlcykge1xuICAgICAgY29uc3Qgc3BlY2lmaWMgPSB0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMuZmluZCgoeyBjb2x1bW4gfSkgPT4gY29sdW1uID09PSBmaWVsZCk7XG4gICAgICBjb25zdCBjb21tb24gPSB0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMuZmluZCgoeyBjb2x1bW4gfSkgPT4gIWNvbHVtbik7XG4gICAgICBpZiAoc3BlY2lmaWMgfHwgY29tbW9uKSB7XG4gICAgICAgIGNvbnN0IHsgbW9yZU1lbnUsIGN1c3RvbUhlYWRlciB9ID0ge1xuICAgICAgICAgIG1vcmVNZW51OiAoc3BlY2lmaWMgJiYgc3BlY2lmaWMubW9yZU1lbnUpIHx8IChjb21tb24gJiYgY29tbW9uLm1vcmVNZW51KSxcbiAgICAgICAgICBjdXN0b21IZWFkZXI6IChzcGVjaWZpYyAmJiBzcGVjaWZpYy5jdXN0b21IZWFkZXIpIHx8IChjb21tb24gJiYgY29tbW9uLmN1c3RvbUhlYWRlcilcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgbW9yZU1lbnU6IG1vcmVNZW51ICYmIG1vcmVNZW51LnRwbCwgY3VzdG9tSGVhZGVyOiBjdXN0b21IZWFkZXIgJiYgY3VzdG9tSGVhZGVyLnRwbCB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNsZWFyQWxsRmlsdGVycygpIHtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIGZpbHRlcjoge30sXG4gICAgICAgICAgc2VhcmNoVGVybTogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcihjb2x1bW5GaWVsZDogc3RyaW5nKSB7XG4gICAgY29uc3QgeyBbY29sdW1uRmllbGRdOiBkZWxldGVkLCAuLi5maWx0ZXIgfSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpO1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgfVxuXG4gIHNldENvbHVtbkZpbHRlcihjb2x1bW46IENvbHVtbiwgZmlsdGVyOiBEYXRvR3JpZEZpbHRlcikge1xuICAgIHRoaXMuX2xvZ0V2ZW50KENvcmVFdmVudFR5cGVzLkdSSURfRklMVEVSX0FQUExJRUQsIHtcbiAgICAgIGNvbHVtbjogY29sdW1uLmdldENvbElkKCksXG4gICAgICBudW1PZkNvbmRpdGlvbnM6IChmaWx0ZXIuY29uZGl0aW9uYWwgJiYgZmlsdGVyLmNvbmRpdGlvbmFsLmNvbmRpdGlvbnMubGVuZ3RoKSB8fCAwLFxuICAgICAgYnlWYWx1ZTogISFmaWx0ZXIuYnlWYWx1ZSA/ICdZZXMnIDogJ05vJ1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29sRmllbGQgPSBnZXRDb2xGaWVsZChjb2x1bW4uZ2V0Q29sRGVmKCkpO1xuXG4gICAgdGhpcy5zdG9yZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXR0aW5ncyxcbiAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLmZpbHRlcixcbiAgICAgICAgICAgIFtjb2xGaWVsZF06IGZpbHRlclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBzZXRTZWFyY2hUZXJtKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgc2VhcmNoVGVybVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBzZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbihjb25maWc6IFBhcnRpYWw8U2VydmVyU2lkZVBhZ2luYXRpb25Db25maWc+KSB7XG4gICAgdGhpcy5zdG9yZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VydmVyU2lkZVBhZ2luYXRpb246IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbixcbiAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldExvYWRpbmcoc2hvdzogYm9vbGVhbikge1xuICAgIGlmIChzaG93KSB7XG4gICAgICB0aGlzLmFwaS5ncmlkLnNob3dMb2FkaW5nT3ZlcmxheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwaS5ncmlkLmdldERpc3BsYXllZFJvd0NvdW50KCkgPT09IDAgPyB0aGlzLnNldE92ZXJsYXkodHJ1ZSkgOiB0aGlzLnNldE92ZXJsYXkoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2Ugc2V0T3ZlcmxheSBpbnN0ZWFkXG4gICAqIEBwYXJhbSBzaG93XG4gICAqL1xuICBzZXROb0RhdGEoc2hvdzogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0T3ZlcmxheShzaG93KTtcbiAgfVxuXG4gIHNldE92ZXJsYXkoc2hvdzogYm9vbGVhbikge1xuICAgIHNob3cgPyB0aGlzLmFwaS5ncmlkLnNob3dOb1Jvd3NPdmVybGF5KCkgOiB0aGlzLmFwaS5ncmlkLmhpZGVPdmVybGF5KCk7XG4gIH1cblxuICB1cGRhdGVTZXR0aW5ncyhzZXR0aW5nczogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPikge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgLi4uc2V0dGluZ3NcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpdEdyaWQodG86ICdjb250YWluZXInIHwgJ2NvbnRlbnQnKSB7XG4gICAgdG8gPT09ICdjb250YWluZXInID8gdGhpcy5hcGkuZ3JpZC5zaXplQ29sdW1uc1RvRml0KCkgOiB0aGlzLmFwaS5jb2x1bW5zLmF1dG9TaXplQWxsQ29sdW1ucygpO1xuICAgIGNvbnN0IGdyaWRBbGlnbm1lbnQgPSB0byA9PT0gJ2NvbnRhaW5lcicgPyBEYXRvR3JpZEFsaWdubWVudC5GSVRfVE9fQ09OVEFJTkVSIDogRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRFTlQ7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyh7IGdyaWRBbGlnbm1lbnQsIGNvbHVtbnNTaXplczogbnVsbCB9KTtcbiAgfVxuXG4gIHNhdmVTZXR0aW5nc1RvU2VydmVyKHNldHRpbmdzOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+KSB7XG4gICAgY29uc3QgaXNHbG9iYWwgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmlzR2xvYmFsU2V0dGluZ3M7XG4gICAgdGhpcy5zdG9yYWdlQVBJLnNldCh0aGlzLmdyaWROYW1lLCBzZXR0aW5ncywgaXNHbG9iYWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCB1c2VkIHRvIGxvZyBncmlkIGV2ZW50cyB0byB0aGUgcGxhdGZvcm0ncyBsb2dnaW5nIHNlcnZpY2VcbiAgICovXG4gIF9sb2dFdmVudChldmVudFR5cGU6IENvcmVFdmVudFR5cGVzLCBldmVudFByb3BlcnRpZXM/OiBIYXNoTWFwPGFueT4pIHtcbiAgICB0aGlzLmxvZ2dlci5sb2dFdmVudChldmVudFR5cGUsIHsgdGFibGU6IHRoaXMuZ3JpZE5hbWUsIC4uLmV2ZW50UHJvcGVydGllcyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcFN1Y2Nlc3NDYWxsYmFjayh7IHN1Y2Nlc3NDYiwgcGFnZU51bWJlciwgaXNQZW5kaW5nUmV0dXJuVG9QYWdlIH06IFN1Y2Nlc3NXcmFwcGVyUGFyYW1zKSB7XG4gICAgcmV0dXJuIChyb3dzVGhpc0Jsb2NrOiBhbnlbXSwgdG90YWxSb3dzOiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyB0b3RhbFJvd3MsIGhhc0Vycm9yOiBmYWxzZSB9KTtcbiAgICAgIHN1Y2Nlc3NDYihyb3dzVGhpc0Jsb2NrLCB0b3RhbFJvd3MpO1xuICAgICAgdGhpcy5ncmlkUXVlcnkuX3NlcnZlckRhdGFMb2FkZWQubmV4dCh7XG4gICAgICAgIGFwaTogdGhpcy5hcGkuZ3JpZCxcbiAgICAgICAgY29sdW1uQXBpOiB0aGlzLmFwaS5jb2x1bW5zLFxuICAgICAgICB0eXBlOiAnU2VydmVyRGF0YUxvYWRlZCcsXG4gICAgICAgIHBhZ2luYXRpb25QYWdlOiBwYWdlTnVtYmVyXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNQZW5kaW5nUmV0dXJuVG9QYWdlKSB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIC8qKiBzbyB0aGUgZ3JpZCBmaXRzIGluIGV2ZXJ5IG5ldyBkYXRhIGlucHV0ICovXG4gICAgICAgIHRyaWdnZXJXaW5kb3dSZXNpemUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdFRvdGFsUm93cyA9IHRvdGFsUm93cztcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB3cmFwR2V0Um93cyhvcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMsIGdldFJvd3M/OiAocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHZvaWQpIHtcbiAgICBjb25zdCBnZXRSb3dzQ2IgPSBnZXRSb3dzIHx8IG9wdGlvbnMuZGF0YXNvdXJjZS5nZXRSb3dzO1xuICAgIHJldHVybiAoZ2V0Um93c1BhcmFtczogSUdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RhcnRSb3csIGVuZFJvdywgc29ydE1vZGVsLCBzdWNjZXNzQ2FsbGJhY2sgfSA9IGdldFJvd3NQYXJhbXM7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IG9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplIHx8IDEwMDtcbiAgICAgIGNvbnN0IGlzUmV0dXJuVG9DdXJyZW50UGFnZVJlcXVpcmVkID0gdGhpcy5wYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPiAwO1xuICAgICAgY29uc3QgaXNQZW5kaW5nUmV0dXJuVG9QYWdlID0gaXNSZXR1cm5Ub0N1cnJlbnRQYWdlUmVxdWlyZWQgJiYgc3RhcnRSb3cgPT09IDA7XG5cbiAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBpc1JldHVyblRvQ3VycmVudFBhZ2VSZXF1aXJlZFxuICAgICAgICA/IHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoICsgMVxuICAgICAgICA6IE1hdGguY2VpbChlbmRSb3cgLyBwYWdlU2l6ZSk7XG5cbiAgICAgIHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gLTE7XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpO1xuICAgICAgY29uc3QgbmV3UGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMgPSB7XG4gICAgICAgIC4uLmdldFJvd3NQYXJhbXMsXG4gICAgICAgIGZhaWxDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBoYXNFcnJvcjogdHJ1ZSB9KTtcbiAgICAgICAgICB0aGlzLnNldE92ZXJsYXkodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjazogdGhpcy53cmFwU3VjY2Vzc0NhbGxiYWNrKHsgcGFnZU51bWJlciwgc3VjY2Vzc0NiOiBzdWNjZXNzQ2FsbGJhY2ssIGlzUGVuZGluZ1JldHVyblRvUGFnZSB9KSxcbiAgICAgICAgc2VydmVyQ29uZmlnOiB7XG4gICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgcGFnZU51bWJlcixcbiAgICAgICAgICBjb2x1bW5GaWx0ZXJzOiBpc0VtcHR5KGZpbHRlcikgfHwgb3B0aW9ucy5lbmFibGVWMl8xID8gbnVsbCA6IHRoaXMuYnVpbGRTZXJ2ZXJSZXF1ZXN0RmlsdGVycyhmaWx0ZXIpLFxuICAgICAgICAgIGZpbHRlcjogb3B0aW9ucy5lbmFibGVWMl8xID8gdGhpcy5idWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEob3B0aW9ucy5jb2x1bW5EZWZzKSA6IG51bGwsXG4gICAgICAgICAgc29ydDogdGhpcy5idWlsZFNlcnZlclJlcXVlc3RTb3J0KHNvcnRNb2RlbClcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChpc1BlbmRpbmdSZXR1cm5Ub1BhZ2UpIHtcbiAgICAgICAgLy8gU2NlbmFyaW8gdGhlIGZvbGxvd2luZyBoYW5kbGVzIC0gc2VydmVyIHJlZnJlc2ggd2hlcmUgaXQgd2FzIHJlcXVlc3RlZCB0byBrZWVwIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAgICAgIC8vIFRoZSBwcm9ibGVtIC0gZ2V0Um93cyB3aWxsIGluaXRpYWxseSBiZSBjYWxsZWQgZm9yIHBhZ2UgMSAoYXV0b21hdGljYWxseSBoYXBwZW5zIHdoZW4gY2FsbGluZyBhZy1ncmlkJ3Mgc2V0RGF0YVNvdXJjZSkuXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIHRyaWdnZXIgaXQgYWdhaW4sIHN1Y2Nlc3NDYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGUgZGVzaXJlZCBwYWdlLlxuICAgICAgICAvLyBmYWtlR2V0Um93cyBpcyB1c2VkIGluIG9yZGVyIHRvIGF2b2lkIHJldHJpZXZpbmcgdGhlIHVubmVjZXNzYXJ5IHJlYWwgZGF0YSBmb3IgcGFnZSAxLlxuICAgICAgICBjb25zdCBmYWtlR2V0Um93cyA9ICh7IHN1Y2Nlc3NDYWxsYmFjayB9OiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soW10sIHRoaXMubGFzdFRvdGFsUm93cyk7XG4gICAgICAgIH07XG4gICAgICAgIGZha2VHZXRSb3dzKG5ld1BhcmFtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRSb3dzQ2IobmV3UGFyYW1zKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RWRpdGFibGVDb2x1bW5zQ2VsbENsYXNzKHBhcmFtczogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLmZvckVhY2goY29sRGVmID0+IHtcbiAgICAgIGlmIChjb2xEZWYuZWRpdGFibGUpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY29sRGVmLmVkaXRhYmxlKSkge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxDZWxsQ2xhc3MgPSBjb2xEZWYuY2VsbENsYXNzO1xuICAgICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSAoY2VsbENsYXNzUGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzRWRpdGFibGUgPSAoY29sRGVmLmVkaXRhYmxlIGFzIEZ1bmN0aW9uKShjZWxsQ2xhc3NQYXJhbXMgYXMgYW55KTtcbiAgICAgICAgICAgIGlmIChpc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVkaXRhYmxlUmVzdWx0ID0gdGhpcy5hZGRFZGl0YWJsZUNlbGxDbGFzcyhpbml0aWFsQ2VsbENsYXNzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZWRpdGFibGVSZXN1bHQpID8gZWRpdGFibGVSZXN1bHQoY2VsbENsYXNzUGFyYW1zKSA6IGVkaXRhYmxlUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5pdGlhbENlbGxDbGFzcykgPyBpbml0aWFsQ2VsbENsYXNzKGNlbGxDbGFzc1BhcmFtcykgOiBpbml0aWFsQ2VsbENsYXNzO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9IHRoaXMuYWRkRWRpdGFibGVDZWxsQ2xhc3MoY29sRGVmLmNlbGxDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcENvbnRleHRNZW51QnVpbGRlcihwYXJhbXM6IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBjb25zdCB7IGN1c3RvbUNvbnRleHRNZW51IH0gPSBwYXJhbXMuZ3JpZE9wdGlvbnM7XG4gICAgY29uc3QgYWxsQWN0aW9ucyA9IGlzRnVuY3Rpb24oY3VzdG9tQ29udGV4dE1lbnUpID8gY3VzdG9tQ29udGV4dE1lbnUocGFyYW1zLnJvd0FjdGlvbnMpIDogcGFyYW1zLnJvd0FjdGlvbnM7XG4gICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWxsQWN0aW9ucyk7XG4gICAgY29uc3QgY29weUFjdGlvbjogUm93QWN0aW9uID0ge1xuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5jb3B5LWNlbGwnKSxcbiAgICAgIGljb246ICdjb3B5JyxcbiAgICAgIGtleTogJ0NvcHkgQ2VsbCdcbiAgICB9O1xuICAgIHJldHVybiAoeyBub2RlLCBjb2x1bW4sIGNvbnRleHQgfTogR2V0Q29udGV4dE1lbnVJdGVtc1BhcmFtcykgPT4ge1xuICAgICAgY29uc3Qgb25Ib3ZlckFjdGlvbk1lbnUgPSBjb250ZXh0ICYmIGNvbnRleHQuY29udGV4dE1lbnUgJiYgY29udGV4dC5jb250ZXh0TWVudS5mcm9tT25Ib3ZlcjtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuIFtdO1xuICAgICAgbGV0IHNlbGVjdGVkID0gW25vZGVdO1xuICAgICAgbGV0IHJvd3NDb3VudCA9IDE7XG4gICAgICBpZiAob25Ib3ZlckFjdGlvbk1lbnUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkQ29udGV4dCh7IGNvbnRleHRNZW51OiB7IGZyb21PbkhvdmVyOiBmYWxzZSB9IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29weUFjdGlvbi5vbkNsaWNrID0gKFtyb3ddKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSB0aGlzLmFwaS5ncmlkLmdldFZhbHVlKGNvbHVtbi5nZXRDb2xJZCgpLCByb3cpO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNvbHVtbi5nZXRDb2xEZWYoKS52YWx1ZUZvcm1hdHRlcjtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdHRlciA/IGZvcm1hdHRlcihyYXdWYWx1ZSkgOiByYXdWYWx1ZTtcbiAgICAgICAgICBjb3B5VG9DbGlwYm9hcmQodmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobm9kZS5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICBzZWxlY3RlZCA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlbGVjdGVkUm93Tm9kZXMoKTtcbiAgICAgICAgICByb3dzQ291bnQgPSBzaXplKHNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdmlzaWJsZUFjdGlvbnMgPSBnZXRWaXNpYmxlQWN0aW9ucyhcbiAgICAgICAgYWxsQWN0aW9ucyxcbiAgICAgICAgcm93c0NvdW50LFxuICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZFxuICAgICAgKS5maWx0ZXIoKHsgdmlzaWJsZSB9KSA9PiB2aXNpYmxlKTtcbiAgICAgIGxldCB0b29sYmFyQWN0aW9ucyA9IFtjb3B5QWN0aW9uXTtcbiAgICAgIGlmIChvbkhvdmVyQWN0aW9uTWVudSkge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyA9IHZpc2libGVBY3Rpb25zO1xuICAgICAgfSBlbHNlIGlmICh2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRvb2xiYXJBY3Rpb25zID0gW3sgLi4uY29weUFjdGlvbiwgc2VwYXJhdG9yOiB0cnVlIH0sIC4uLnZpc2libGVBY3Rpb25zXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnZlcnRlclBhcmFtczogQWN0aW9uQ29udmVydGVyUGFyYW1zID0ge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRSb3dzOiBzZWxlY3RlZCxcbiAgICAgICAgaWNvblJlZ2lzdHJ5OiB0aGlzLnN2Z1JlZ2lzdHJ5LFxuICAgICAgICBub2RlLFxuICAgICAgICBsb2dnZXI6IHtcbiAgICAgICAgICBsb2c6IHRoaXMuX2xvZ0V2ZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgZXZlbnRPcmlnaW46IG9uSG92ZXJBY3Rpb25NZW51ID8gJ09uIEhvdmVyJyA6ICdDb250ZXh0IE1lbnUnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdG9vbGJhckFjdGlvblRvQ29udGV4dEFjdGlvbihjb252ZXJ0ZXJQYXJhbXMpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRyYW5zbGF0ZUFjdGlvbkxhYmVscyhhbGxBY3Rpb25zOiBSb3dBY3Rpb25bXSkge1xuICAgIGFsbEFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgYWN0aW9uLmxhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGFjdGlvbi5sYWJlbCk7XG4gICAgICBpZiAoYWN0aW9uLnN1Yk1lbnUpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWN0aW9uLnN1Yk1lbnUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZFNhdmVkU2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICBjb25zdCB7XG4gICAgICBzb3J0LFxuICAgICAgaGlkZGVuQ29sdW1ucyxcbiAgICAgIGZpbHRlcixcbiAgICAgIGdyb3VwZWRDb2x1bW5zLFxuICAgICAgY29sdW1uc1NpemVzLFxuICAgICAgcGlubmVkQ29sdW1ucyxcbiAgICAgIGNvbHVtbnNPcmRlcixcbiAgICAgIGdyaWRBbGlnbm1lbnRcbiAgICB9ID0gc2V0dGluZ3M7XG4gICAgY29uc3QgeyBncmlkLCBjb2x1bW5zIH0gPSB0aGlzLmFwaTtcbiAgICAvKiBIaWRlIGNvbHVtbnMgKi9cbiAgICAvKiBOT1RFOiBjb2x1bW5zIG9yZGVyIGFyZSB0cmVhdGVkIGFzIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBjb2x1bW5zICovXG4gICAgY29sdW1ucy5zZXRDb2x1bW5zVmlzaWJsZSh0aGlzLmluaXRpYWxTZXR0aW5ncy5jb2x1bW5zT3JkZXIsIHRydWUpO1xuICAgIGNvbnN0IGNvbHVtblRvSGlkZSA9ICFpc05pbChoaWRkZW5Db2x1bW5zKSA/IGhpZGRlbkNvbHVtbnMgOiB0aGlzLmluaXRpYWxTZXR0aW5ncy5oaWRkZW5Db2x1bW5zO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUoY29sdW1uVG9IaWRlLCBmYWxzZSk7XG5cbiAgICAvKiBBcHBseSBmaWx0ZXJzICovXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgZ3JpZC5vbkZpbHRlckNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICAvKiBHcm91cCBjb2x1bW5zICovXG4gICAgY29uc3QgYWxsR3JvdXBlZENvbHVtbnMgPSBjb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuICAgIGxldCByZW1vdmVHcm91cGVkO1xuICAgIGlmIChncm91cGVkQ29sdW1ucykge1xuICAgICAgcmVtb3ZlR3JvdXBlZCA9IGFsbEdyb3VwZWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gIWdyb3VwZWRDb2x1bW5zLmluY2x1ZGVzKGNvbC5nZXRDb2xJZCgpKSk7XG4gICAgICBjb2x1bW5zLmFkZFJvd0dyb3VwQ29sdW1ucyhncm91cGVkQ29sdW1ucyk7XG4gICAgICBjb2x1bW5zLnNldENvbHVtbnNWaXNpYmxlKGdyb3VwZWRDb2x1bW5zLCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbHVtbnMucmVtb3ZlUm93R3JvdXBDb2x1bW5zKHJlbW92ZUdyb3VwZWQpO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUocmVtb3ZlR3JvdXBlZCwgdHJ1ZSk7XG5cbiAgICAvKiBBcHBseSBzb3J0ICovXG4gICAgY29uc3QgZ3JpZFNvcnQgPSBzb3J0IHx8IHRoaXMuaW5pdGlhbFNldHRpbmdzLnNvcnQ7XG4gICAgZ3JpZC5zZXRTb3J0TW9kZWwoZ3JpZFNvcnQgPyBbZ3JpZFNvcnRdIDogbnVsbCk7XG5cbiAgICAvKiBBbGlnbiBncmlkICovXG4gICAgaWYgKGdyaWRBbGlnbm1lbnQgPT09IERhdG9HcmlkQWxpZ25tZW50LkNVU1RPTSkge1xuICAgICAgLyogU2V0IGNvbHVtbiBzaXplcyAqL1xuICAgICAgY29sdW1uc1NpemVzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbHVtbnNTaXplcykuZm9yRWFjaChjb2xJZCA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbnNTaXplc1tjb2xJZF0gPT09IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05URU5UKSB7XG4gICAgICAgICAgICBjb2x1bW5zLmF1dG9TaXplQ29sdW1uKGNvbElkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sdW1ucy5zZXRDb2x1bW5XaWR0aChjb2xJZCwgY29sdW1uc1NpemVzW2NvbElkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JpZEFsaWdubWVudCA9PT0gRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRFTlQgPyBjb2x1bW5zLmF1dG9TaXplQWxsQ29sdW1ucygpIDogZ3JpZC5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuXG4gICAgLyogUGluIGNvbHVtbnMgbGVmdCAqL1xuICAgIGNvbnN0IGZpbHRlcmVkUGlubmVkQ29sdW1ucyA9IHBpbm5lZENvbHVtbnNcbiAgICAgID8gcGlubmVkQ29sdW1ucy5maWx0ZXIoKGNvbDogc3RyaW5nKSA9PiBjb2wgIT09IHRoaXMuQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5zT3JkZXJcbiAgICAgID8gY29sdW1uc09yZGVyLmZpbHRlcigoY29sOiBzdHJpbmcpID0+IGNvbCAhPT0gdGhpcy5DSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lEKVxuICAgICAgOiBudWxsO1xuICAgIHNpemUoZmlsdGVyZWRQaW5uZWRDb2x1bW5zKSA+IDBcbiAgICAgID8gY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkUGlubmVkQ29sdW1ucywgJ2xlZnQnKVxuICAgICAgOiBmaWx0ZXJlZENvbHVtbnMgJiYgY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkQ29sdW1ucywgbnVsbCk7XG5cbiAgICAvKiBPcmRlciBjb2x1bW5zICovXG4gICAgY29sdW1uc09yZGVyICYmIGNvbHVtbnMubW92ZUNvbHVtbnMoY29sdW1uc09yZGVyLCAwKTtcbiAgfVxuXG4gIGdldFNldHRpbmdzRGlmZigpOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+IHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdyaWRRdWVyeS5nZXRDdXJyZW50R3JpZFNldHRpbmdzKCk7XG4gICAgcmV0dXJuIGRpZmYoY3VycmVudFN0YXRlLCB0aGlzLmluaXRpYWxTZXR0aW5ncyk7XG4gIH1cblxuICByZXNldFRhYmxlU2V0dGluZ3MoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXIsIC4uLnJlc3QgfSA9IHRoaXMuaW5pdGlhbFNldHRpbmdzO1xuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5hcGk7XG4gICAgY29uc3Qgb3JpZ2luYWxDb2xTaXplcyA9IGdldENvbHVtbnNTaXplcyhjb2x1bW5zLmdldEFsbEdyaWRDb2x1bW5zKCksIHRydWUpO1xuICAgIGNvbnN0IGdyaWRBbGlnbm1lbnQgPSBpc0VtcHR5KG9yaWdpbmFsQ29sU2l6ZXMpID8gcmVzdC5ncmlkQWxpZ25tZW50IDogRGF0b0dyaWRBbGlnbm1lbnQuQ1VTVE9NO1xuICAgIGNvbnN0IG5ld1NldHRpbmdzID0geyAuLi5yZXN0LCBjb2x1bW5zU2l6ZXM6IG9yaWdpbmFsQ29sU2l6ZXMsIGdyaWRBbGlnbm1lbnQgfTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLmxvYWRTYXZlZFNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc1RvU2VydmVyKHsgZmlsdGVyIH0pO1xuICB9XG5cbiAgaW5pdFNldHRpbmdzKHNhdmVkU2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLmluaXRpYWxTZXR0aW5ncyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKHNhdmVkU2V0dGluZ3MpO1xuICAgIHRoaXMubG9hZFNhdmVkU2V0dGluZ3Moc2F2ZWRTZXR0aW5ncyk7XG4gIH1cblxuICBub3RpZnlGaWx0ZXJVcGRhdGUoKSB7XG4gICAgY29uc3Qgd2F0Y2ggPSBbdGhpcy5ncmlkUmVmLmZpbHRlckNoYW5nZWQuYXNPYnNlcnZhYmxlKCldO1xuICAgIGlmICh0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNpZGUpIHtcbiAgICAgIHdhdGNoLnB1c2godGhpcy5ncmlkUXVlcnkuc2VydmVyRGF0YUxvYWRlZCQpO1xuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIH1cbiAgICBjb21iaW5lTGF0ZXN0KHdhdGNoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm93c0FmdGVyRmlsdGVyID0gdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpO1xuICAgICAgICB0aGlzLnNldE92ZXJsYXkocm93c0FmdGVyRmlsdGVyID09PSAwKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYXBpLmdyaWQub25GaWx0ZXJDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnMoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcnNNYXApOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMge1xuICAgIGNvbnN0IGNvbHVtbnNGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgICBjb25zdCB7IGJ5VmFsdWUsIGNvbmRpdGlvbmFsIH0gPSB2YWx1ZTtcbiAgICAgIGlmIChieVZhbHVlKSB7XG4gICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0gPSB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGZpbHRlcnM6IFtieVZhbHVlXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbmFsKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBjb25kaXRpb25hbC5vcGVyYXRvcixcbiAgICAgICAgICBmaWx0ZXJzOiBjb25kaXRpb25hbC5jb25kaXRpb25zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBlbmQ6IChpdGVtIGFzIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24pLnJhbmdlRW5kXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgICBpZiAoYnlWYWx1ZSkge1xuICAgICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0uZmlsdGVycy5wdXNoKGNvbmRpdGlvbmFsRmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW5zRmlsdGVyc1tjb2x1bW5dID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uc0ZpbHRlcnM7XG4gIH1cblxuICBidWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEoZ3JpZENvbHVtbnM6IERhdG9HcmlkQ29sdW1uRGVmW10pOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCk7XG4gICAgY29uc3Qgc2VhcmNoVGVybSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlYXJjaFRlcm0oKTtcblxuICAgIGxldCBjb2x1bW5GaWx0ZXJzID0gdGhpcy5idWlsZFNlcnZlckNvbHVtbkZpbHRlcnNfdjJfMShmaWx0ZXIpO1xuICAgIGlmIChjb2x1bW5GaWx0ZXJzLmV2ZXJ5KCh7IG9wZXJhdG9yIH06IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyKSA9PiBvcGVyYXRvciA9PT0gT3BlcmF0b3JUeXBlcy5BTkQpKSB7XG4gICAgICBjb25zdCBmbGF0dGVuZWRGaWx0ZXJzID0gY29sdW1uRmlsdGVyc1xuICAgICAgICAubWFwKCh7IGZpbHRlcnMgfTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIpID0+IGZpbHRlcnMpXG4gICAgICAgIC5yZWR1Y2UoKGFyciwgcmVzKSA9PiByZXMuY29uY2F0KGFyciksIFtdKTtcbiAgICAgIGNvbHVtbkZpbHRlcnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgZmlsdGVyczogZmxhdHRlbmVkRmlsdGVyc1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoY29sdW1uRmlsdGVycykgPiAxXG4gICAgICAgID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsIGZpbHRlcnM6IGNvbHVtbkZpbHRlcnMgfVxuICAgICAgICA6IHNpemUoY29sdW1uRmlsdGVycykgPT09IDFcbiAgICAgICAgPyBjb2x1bW5GaWx0ZXJzWzBdXG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAoIXNlYXJjaFRlcm0pIHtcbiAgICAgIHJldHVybiBjb2x1bW5GaWx0ZXI7XG4gICAgfVxuICAgIGNvbnN0IHsgaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB9ID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICBjb25zdCBzZWFyY2hhYmxlQ29sdW1ucyA9IGdyaWRDb2x1bW5zLmZpbHRlcigoY29sRGVmOiBEYXRvR3JpZENvbHVtbkRlZikgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY29sRGVmLmluY2x1ZGVJblNlYXJjaCAmJiAoaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB8fCB0aGlzLmFwaS5jb2x1bW5zLmdldENvbHVtbihjb2xEZWYuY29sSWQpLmlzVmlzaWJsZSgpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbltdID0gc2VhcmNoYWJsZUNvbHVtbnMubWFwKCh7IGZpZWxkIH06IERhdG9HcmlkQ29sdW1uRGVmKSA9PiAoe1xuICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5DT05UQUlOUyxcbiAgICAgIHZhbHVlOiBzZWFyY2hUZXJtLFxuICAgICAgY29sdW1uOiBmaWVsZFxuICAgIH0pKTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoc2VhcmNoRmlsdGVycykgPiAwID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5PUiwgZmlsdGVyczogc2VhcmNoRmlsdGVycyB9IDogbnVsbDtcbiAgICBpZiAoIWNvbHVtbkZpbHRlcikge1xuICAgICAgcmV0dXJuIHNlYXJjaEZpbHRlcjtcbiAgICB9XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzOiBbY29sdW1uRmlsdGVyLCBzZWFyY2hGaWx0ZXJdIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyQ29sdW1uRmlsdGVyc192Ml8xKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXJzTWFwKTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJbXSB7XG4gICAgbGV0IGNvbHVtbkZpbHRlcnM6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2NvbHVtbiwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcikpIHtcbiAgICAgIGxldCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID0gbnVsbDtcbiAgICAgIGNvbnN0IHsgYnlWYWx1ZSwgY29uZGl0aW9uYWwgfSA9IHZhbHVlO1xuICAgICAgaWYgKGJ5VmFsdWUpIHtcbiAgICAgICAgY29sdW1uRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICBmaWx0ZXJzOiBbeyBjb2x1bW4sIC4uLmJ5VmFsdWUgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25kaXRpb25hbCkge1xuICAgICAgICBjb25zdCBjb25kaXRpb25hbEZpbHRlcjogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIgPSB0aGlzLmdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKGNvbmRpdGlvbmFsLCBjb2x1bW4pO1xuICAgICAgICBpZiAoY29sdW1uRmlsdGVyKSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyLmZpbHRlcnMucHVzaChjb25kaXRpb25hbEZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbHVtbkZpbHRlcnMucHVzaChjb2x1bW5GaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRmlsdGVycztcbiAgfVxuXG4gIGdldEZpbHRlckZvclNlcnZlckFjdGlvbk9uU2VsZWN0QWxsKCk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICBjb25zdCB7IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCB9ID0gdGhpcy5ncmlkUXVlcnkuc2VydmVyU2lkZUNvbmZpZztcbiAgICBjb25zdCB7IGNvbHVtbkRlZnMsIGlkQ29sdW1uS2V5IH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpO1xuICAgIGNvbnN0IG1haW5GaWx0ZXIgPSB0aGlzLmJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnNfdjJfMShjb2x1bW5EZWZzKTtcbiAgICBpZiAoaXNFbXB0eShleGNsdWRlZEZyb21TZWxlY3RBbGwpKSB7XG4gICAgICByZXR1cm4gbWFpbkZpbHRlcjtcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZWRSb3dzRmlsdGVyOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24gPSB7XG4gICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgdmFsdWVzOiBleGNsdWRlZEZyb21TZWxlY3RBbGwsXG4gICAgICBjb2x1bW46IGlkQ29sdW1uS2V5XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJzID0gbWFpbkZpbHRlciA/IFttYWluRmlsdGVyLCBleGNsdWRlZFJvd3NGaWx0ZXJdIDogW2V4Y2x1ZGVkUm93c0ZpbHRlcl07XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzIH07XG4gIH1cblxuICBwcml2YXRlIGdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKFxuICAgIGNvbmRpdGlvbmFsRmlsdGVyOiBEYXRvR3JpZENvbmRpdGlvbmFsRmlsdGVyLFxuICAgIGNvbHVtbjogc3RyaW5nXG4gICk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGNvbmRpdGlvbmFsRmlsdGVyLm9wZXJhdG9yLFxuICAgICAgZmlsdGVyczogY29uZGl0aW9uYWxGaWx0ZXIuY29uZGl0aW9ucy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgc3RhcnQ6IHZhbHVlLFxuICAgICAgICAgICAgZW5kOiAoaXRlbSBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKS5yYW5nZUVuZCxcbiAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgIH0gYXMgU2VydmVyU2lkZVBhZ2luYXRpb25SYW5nZUNvbmRpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSB8fCBjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLFxuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFkgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgICAgICAgY29sdW1uXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjb2x1bW4gfSBhcyBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbjtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJSZXF1ZXN0U29ydChzb3J0TW9kZWw6IERhdG9HcmlkU29ydFtdKTogRGF0b0dyaWRTZXJ2ZXJTb3J0W10ge1xuICAgIHJldHVybiBzb3J0TW9kZWwubWFwKCh7IGNvbElkLCBzb3J0IH0pID0+ICh7XG4gICAgICBjb2x1bW46IGNvbElkLFxuICAgICAgc29ydE9yZGVyOiBzb3J0LnRvVXBwZXJDYXNlKCkgYXMgRGF0b0dyaWRTZXJ2ZXJTb3J0RGlyZWN0aW9uXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFZGl0YWJsZUNlbGxDbGFzcyhcbiAgICBjZWxsQ2xhc3NWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCAoKGNlbGxDbGFzc1BhcmFtczogQ2VsbENsYXNzUGFyYW1zKSA9PiBzdHJpbmcgfCBzdHJpbmdbXSlcbiAgKSB7XG4gICAgaWYgKGlzTmlsKGNlbGxDbGFzc1ZhbHVlKSkge1xuICAgICAgcmV0dXJuICdkYXRvLWVkaXRhYmxlLWNlbGwnO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihjZWxsQ2xhc3NWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsQ2xhc3NQYXJhbXMgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFZGl0YWJsZUNsYXNzQXJyYXkoY2VsbENsYXNzVmFsdWUoY2VsbENsYXNzUGFyYW1zKSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRFZGl0YWJsZUNsYXNzQXJyYXkoY2VsbENsYXNzVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZGl0YWJsZUNsYXNzQXJyYXkoY3VycmVudENsYXNzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjZWxsQ2xhc3MgPSBjb2VyY2VBcnJheShjdXJyZW50Q2xhc3MpO1xuICAgIGNlbGxDbGFzcy5wdXNoKCdkYXRvLWVkaXRhYmxlLWNlbGwnKTtcbiAgICByZXR1cm4gY2VsbENsYXNzO1xuICB9XG5cbiAgc2VsZWN0QWxsQ3VycmVudFBhZ2VSb3dzKGlzU2VsZWN0ZWQgPSB0cnVlLCBjb25zaWRlckV4Y2x1ZGVkID0gZmFsc2UpIHtcbiAgICBsZXQgcm93c0ZvclNlbGVjdGlvbiA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRQYWdlUm93cygpO1xuICAgIGlmIChjb25zaWRlckV4Y2x1ZGVkKSB7XG4gICAgICBjb25zdCB7IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCB9ID0gdGhpcy5ncmlkUXVlcnkuc2VydmVyU2lkZUNvbmZpZztcbiAgICAgIGlmICghaXNFbXB0eShleGNsdWRlZEZyb21TZWxlY3RBbGwpKSB7XG4gICAgICAgIHJvd3NGb3JTZWxlY3Rpb24gPSByb3dzRm9yU2VsZWN0aW9uLmZpbHRlcigoeyBpZCB9OiBSb3dOb2RlKSA9PiAhZXhjbHVkZWRGcm9tU2VsZWN0QWxsLmluY2x1ZGVzKGlkKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlzU2VsZWN0ZWQgPyB0aGlzLnNlbGVjdFJvd3Mocm93c0ZvclNlbGVjdGlvbikgOiB0aGlzLmRlc2VsZWN0Um93cyhyb3dzRm9yU2VsZWN0aW9uKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsUm93cygpIHtcbiAgICB0aGlzLmFwaS5ncmlkLmRlc2VsZWN0QWxsKCk7XG4gICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBzZWxlY3RBbGxSb3dzRW5hYmxlZDogZmFsc2UsIGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbDogW10gfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gcGl2b3RpbmcsXG4gICAqIHdlIGFkZCB0aGUgZmllbGQgbmFtZSB0byB0aGUgY29sdW1uIGhlYWRlciBjbGFzcyBpbiBvcmRlciB0byBhY2Nlc3MgaXQgdGhyb3VnaCB0aGUgYXV0byBnZW5lcmF0ZWQgcGl2b3QgY29sdW1uLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0UGl2b3RTZWNvbmRhcnlDb2xzUHJvY2Vzcyh7IGdyaWRPcHRpb25zIH06IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sRGVmID0gY29sRGVmID0+IHtcbiAgICAgIGNvbnN0IGFwaSA9IGNvbERlZi5oZWFkZXJDb21wb25lbnRQYXJhbXMuZ3JpZFF1ZXJ5LmFwaTtcblxuICAgICAgaWYgKGFwaSkge1xuICAgICAgICBjb25zdCB2YWx1ZUNvbHVtbnMgPSBjb2xEZWYuaGVhZGVyQ29tcG9uZW50UGFyYW1zLmdyaWRRdWVyeS5hcGkuY29sdW1ucy5nZXRWYWx1ZUNvbHVtbnMoKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDb2xEZWYgPSB2YWx1ZUNvbHVtbnNcbiAgICAgICAgICAubWFwKCh7IHVzZXJQcm92aWRlZENvbERlZiB9KSA9PiB1c2VyUHJvdmlkZWRDb2xEZWYpXG4gICAgICAgICAgLmZpbmQoKHsgY29sSWQgfSkgPT4gY29sSWQgPT09IGNvbERlZi5waXZvdFZhbHVlQ29sdW1uLmdldENvbElkKCkpO1xuXG4gICAgICAgIGlmIChvcmlnaW5hbENvbERlZikge1xuICAgICAgICAgIGNvbERlZi5maWx0ZXIgPSBvcmlnaW5hbENvbERlZi5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbERlZi5waXZvdEtleXMpIHtcbiAgICAgICAgY29sRGVmLnBpdm90S2V5cyA9IGNvbERlZi5waXZvdEtleXMubWFwKGtleSA9PiBKU09OLnBhcnNlKGtleSkudmFsdWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sR3JvdXBEZWYgPSAoY29sR3JvdXBEZWY6IENvbEdyb3VwRGVmKSA9PiB7XG4gICAgICBpZiAoY29sR3JvdXBEZWYuaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gSlNPTi5wYXJzZShjb2xHcm91cERlZi5oZWFkZXJOYW1lKTtcblxuICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJDbGFzcyA9IGZpZWxkO1xuICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJOYW1lID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2xHcm91cERlZi5waXZvdEtleXMpIHtcbiAgICAgICAgY29sR3JvdXBEZWYucGl2b3RLZXlzID0gY29sR3JvdXBEZWYucGl2b3RLZXlzLm1hcChrZXkgPT4gSlNPTi5wYXJzZShrZXkpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQaXZvdE1vZGVSb3dzPFQ+KGRhdGE6IFRbXSkge1xuICAgIGNvbnN0IHBpdm90Q29sdW1ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEFsbFBpdm90Q29sdW1ucygpO1xuICAgIGNvbnN0IGNvbnZlcnRlZERhdGEgPSBkYXRhLm1hcCgoY3VycmVudFZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbWFwcGVkVmFsdWVzID0geyAuLi5jdXJyZW50VmFsdWUgfTtcblxuICAgICAgZm9yIChjb25zdCBjb2wgb2YgcGl2b3RDb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gY29sLmdldENvbERlZigpLmZpZWxkO1xuXG4gICAgICAgIG1hcHBlZFZhbHVlc1tmaWVsZF0gPSBKU09OLnN0cmluZ2lmeSh7IGZpZWxkLCB2YWx1ZTogY3VycmVudFZhbHVlW2ZpZWxkXSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcHBlZFZhbHVlcztcbiAgICB9KTtcblxuICAgIHRoaXMuYXBpLmdyaWQuc2V0Um93RGF0YShjb252ZXJ0ZWREYXRhKTtcbiAgfVxufVxuIl19
|
|
942
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBZXpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUNMLG9CQUFvQixFQUtwQixzQkFBc0IsRUFRdkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBU2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBSUwsbUJBQW1CLEVBT25CLHVDQUF1QyxFQUN2QyxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLDJCQUEy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TUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNyRCxNQUFNLFlBQVkscUJBQVEsWUFBWSxDQUFFLENBQUM7WUFFekMsS0FBSyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUU7Z0JBQzlCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BDLE1BQU0sVUFBVSxHQUFvQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBRTFFLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ2xEO1lBRUQsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGLENBQUE7O1lBNWhDa0IsU0FBUztZQUNMLFNBQVM7WUFDVCxvQkFBb0I7WUFDakIsWUFBWTtZQUNiLFdBQVc7NENBQy9CLE1BQU0sU0FBQyxxQkFBcUI7NENBQzVCLE1BQU0sU0FBQyxnQkFBZ0I7O0FBaENmLFdBQVc7SUFEdkIsVUFBVSxFQUFFO0lBZ0NSLFdBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDN0IsV0FBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtxQ0FOVixTQUFTO1FBQ0wsU0FBUztRQUNULG9CQUFvQjtRQUNqQixZQUFZO1FBQ2IsV0FBVztHQTlCdkIsV0FBVyxDQXNqQ3ZCO1NBdGpDWSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0b0dyaWRBcGkgfSBmcm9tICcuLi9ncmlkLWNvbnRyb2xsZXIvZ3JpZC1jb250cm9sbGVyLnR5cGVzJztcbmltcG9ydCB7XG4gIENlbGxDbGFzc1BhcmFtcyxcbiAgQ29sR3JvdXBEZWYsXG4gIENvbHVtbixcbiAgR2V0Q29udGV4dE1lbnVJdGVtc1BhcmFtcyxcbiAgR3JpZE9wdGlvbnMsXG4gIElDZWxsUmVuZGVyZXJQYXJhbXMsXG4gIElHZXRSb3dzUGFyYW1zLFxuICBSb3dOb2RlLFxuICBSb3dOb2RlVHJhbnNhY3Rpb24sXG4gIFJvd1NlbGVjdGVkRXZlbnRcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgUm93RGF0YVRyYW5zYWN0aW9uIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHkvZGlzdC9saWIvcm93TW9kZWxzL2NsaWVudFNpZGUvY2xpZW50U2lkZVJvd01vZGVsJztcbmltcG9ydCB7IEdyaWRRdWVyeSB9IGZyb20gJy4vZ3JpZC5xdWVyeSc7XG5pbXBvcnQgeyBEYXRvQ29yZUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0b0N1c3RvbUhlYWRlclRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jdXN0b20taGVhZGVyL2N1c3RvbS1oZWFkZXItdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0dyaWRDb25kaXRpb25hbEZpbHRlcixcbiAgRGF0b0dyaWRFeHRlcm5hbEZpbHRlcixcbiAgRGF0b0dyaWRGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLFxuICBEYXRvR3JpZEZpbHRlcnNNYXAsXG4gIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24sXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZGl0aW9uLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcixcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24sXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uUmFuZ2VDb25kaXRpb25cbn0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICcuLi8uLi91dGlscy9jb2VyY2lvbic7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc0Z1bmN0aW9uLCBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsdGVyIH0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZmlsdGVyLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBBZ0dyaWROZzIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgSWNvblJlZ2lzdHJ5LCBTdmdSZWdpc3RyeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ljb24tcmVnaXN0cnknO1xuaW1wb3J0IHsgZ2V0VmlzaWJsZUFjdGlvbnMsIHRvb2xiYXJBY3Rpb25Ub0NvbnRleHRBY3Rpb24gfSBmcm9tICcuLi9ncmlkLXYyLnV0aWwnO1xuaW1wb3J0IHtcbiAgRGF0b0dyaWRTZXR0aW5ncyxcbiAgTm9ybWFsaXplT3B0aW9uc1BhcmFtcyxcbiAgUGl2b3RDb2x1bW5EYXRhLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmZpZyxcbiAgU3VjY2Vzc1dyYXBwZXJQYXJhbXNcbn0gZnJvbSAnLi9ncmlkLnN0b3JlLnR5cGVzJztcbmltcG9ydCB7IFJvd0FjdGlvbiB9IGZyb20gJy4uL2dyaWQtdG9vbGJhci9ncmlkLXRvb2xiYXIudHlwZXMnO1xuaW1wb3J0IHsgY29weVRvQ2xpcGJvYXJkIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9jbGlwYm9hcmQuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRTdG9yZSB9IGZyb20gJy4vZ3JpZC5zdG9yZSc7XG5pbXBvcnQgeyBEQVRPX0dSSURfU1RPUkFHRV9BUEksIEdyaWRTdG9yYWdlQVBJIH0gZnJvbSAnLi4vZ3JpZC1zZXR0aW5ncyc7XG5pbXBvcnQge1xuICBBY3Rpb25Db252ZXJ0ZXJQYXJhbXMsXG4gIERhdG9HcmlkQWxpZ25tZW50LFxuICBEYXRvR3JpZENvbHVtbkRlZixcbiAgRGF0b0dyaWRDb2x1bW5UeXBlcyxcbiAgRGF0b0dyaWRHZXRSb3dzUGFyYW1zLFxuICBEYXRvR3JpZE9wdGlvbnMsXG4gIERhdG9HcmlkU2VydmVyU29ydCxcbiAgRGF0b0dyaWRTZXJ2ZXJTb3J0RGlyZWN0aW9uLFxuICBEYXRvR3JpZFNvcnQsXG4gIERhdG9HcmlkVHJlZUNvbmZpZyxcbiAgZWRpdGFibGVDZWxsUmVuZGVyZXJXaXRoU2VhcmNoSGlnaGxpZ2h0LFxuICBHcmlkTWluV2lkdGhzLFxuICBHcmlkUm93U2VsZWN0aW9uVHlwZSxcbiAgc2VhcmNoSGlnaGxpZ2h0Q2VsbFJlbmRlcmVyXG59IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi50eXBlcyc7XG5cbmltcG9ydCB7IGNvbnZlcnRUb1RyZWVEYXRhLCBkZWZhdWx0R3JpZE9wdGlvbnMsIGRlZmF1bHRHcmlkVHJlZUxhYmVsIH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLmNvbmZpZyc7XG5pbXBvcnQgeyBkaWZmIH0gZnJvbSAnLi4vLi4vdXRpbHMvb2JqZWN0JztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnbmd4LXRha2UtdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBDb3JlRXZlbnRMb2dnZXIsIENvcmVFdmVudFR5cGVzLCBEQVRPX0NPUkVfTE9HR0VSIH0gZnJvbSAnLi4vLi4vZXZlbnQtbG9nZ2VyJztcbmltcG9ydCB7IEhhc2hNYXAgfSBmcm9tICcuLi8uLi91dGlscy90eXBlcyc7XG5pbXBvcnQgeyBzaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29sbGVjdGlvbic7XG5pbXBvcnQgeyBPcGVyYXRvclR5cGVzIH0gZnJvbSAnLi4vLi4vb3BlcmF0b3ItdG9nZ2xlci9vcGVyYXRvci10b2dnbGVyLnR5cGVzJztcbmltcG9ydCB7IGRlZXBtZXJnZSB9IGZyb20gJy4uLy4uL2ludGVybmFsL2RlZXAtbWVyZ2UnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdHJpZ2dlcldpbmRvd1Jlc2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZXItYWdlbnQnO1xuaW1wb3J0IHsgZ2V0Q29sRmllbGQsIGdldENvbHVtbnNTaXplcywgdHJ5UGFyc2VQaXZvdFZhbHVlIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IERhdG9HcmlkTXVsdGlTZWxlY3RDb2x1bW5IZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkLWNvbHVtbi1oZWFkZXIvZ3JpZC1tdWx0aS1zZWxlY3QtaGVhZGVyL2dyaWQtbXVsdGktc2VsZWN0LWhlYWRlci5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR3JpZFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBhcGk6IERhdG9HcmlkQXBpO1xuICB0cmVlQ29uZmlnOiBEYXRvR3JpZFRyZWVDb25maWcgPSBkZWZhdWx0R3JpZFRyZWVMYWJlbDtcbiAgaXNQaXZvdE1vZGU6IGJvb2xlYW47XG5cbiAgLyoqIEBpbnRlcm5hbCAtIHVzZWQgZm9yIHNlcnZlciBzaWRlIGJ5IHZhbHVlIGZpbHRlciAqL1xuICBfb3JpZ2luYWxHZXRSb3dzOiAocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHZvaWQ7XG4gIHByaXZhdGUgaW5pdGlhbFNldHRpbmdzOiBEYXRvR3JpZFNldHRpbmdzO1xuICBwcml2YXRlIGdyaWROYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgZ3JpZFJlZjogQWdHcmlkTmcyO1xuICBwcml2YXRlIGN1c3RvbUhlYWRlcnNUZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxEYXRvQ3VzdG9tSGVhZGVyVGVtcGxhdGVDb21wb25lbnQ+O1xuICBwcml2YXRlIGlzVHJlZURhdGE6IGJvb2xlYW47XG4gIHByaXZhdGUgcGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gLTE7XG4gIHByaXZhdGUgbGFzdFRvdGFsUm93czogbnVtYmVyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRCA9ICdncmlkLWNoZWNrYm94LXNlbGVjdGlvbic7XG5cbiAgc2V0IHRyZWVEYXRhKGlzVHJlZURhdGE6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzVHJlZURhdGEgPSBpc1RyZWVEYXRhO1xuICB9XG5cbiAgZ2V0IHRyZWVEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmlzVHJlZURhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBHcmlkU3RvcmUsXG4gICAgcHJpdmF0ZSBncmlkUXVlcnk6IEdyaWRRdWVyeSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogRGF0b1RyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IEljb25SZWdpc3RyeSxcbiAgICBwcml2YXRlIHN2Z1JlZ2lzdHJ5OiBTdmdSZWdpc3RyeSxcbiAgICBASW5qZWN0KERBVE9fR1JJRF9TVE9SQUdFX0FQSSkgcHJpdmF0ZSBzdG9yYWdlQVBJOiBHcmlkU3RvcmFnZUFQSSxcbiAgICBASW5qZWN0KERBVE9fQ09SRV9MT0dHRVIpIHByaXZhdGUgbG9nZ2VyOiBDb3JlRXZlbnRMb2dnZXJcbiAgKSB7fVxuXG4gIG5nT25EZXN0cm95KCkge31cblxuICAvKiogQGludGVybmFsIC0gdXNlZCB0byBpbml0IHRoZSBzZXJ2aWNlICovXG4gIF9zZXRBcGkoYXBpOiBEYXRvR3JpZEFwaSwgZ3JpZFJlZjogQWdHcmlkTmcyKSB7XG4gICAgdGhpcy5hcGkgPSBhcGk7XG4gICAgdGhpcy5ncmlkUmVmID0gZ3JpZFJlZjtcbiAgICB0aGlzLmdyaWROYW1lID0gKGdyaWRSZWYuZ3JpZE9wdGlvbnMgYXMgRGF0b0dyaWRPcHRpb25zKS5ncmlkTmFtZTtcbiAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHtcbiAgICAgIGVuYWJsZWQ6IHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkUmVmLmdyaWRPcHRpb25zKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRPcHRpb25zOiBHcmlkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBncmlkT3B0aW9ucy5yb3dNb2RlbFR5cGUgPT09ICdpbmZpbml0ZSc7XG4gIH1cblxuICB1cGRhdGVHcmlkQ29udGV4dChjb250ZXh0ID0ge30sIHJlcGxhY2UgPSBmYWxzZSkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkuY29udGV4dCA9IHJlcGxhY2VcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBkZWVwbWVyZ2UodGhpcy5ncmlkUmVmLmdyaWRPcHRpb25zLmNvbnRleHQgfHwge30sIGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBzZWxlY3RSb3dzIGluc3RlYWRcbiAgICogQHBhcmFtIHJvd1xuICAgKi9cbiAgc2V0U2VsZWN0ZWRSb3dzPFQ+KHJvdzogKFQgJiBSb3dOb2RlKSB8IChUW10gJiBSb3dOb2RlW10pKSB7XG4gICAgdGhpcy5zZWxlY3RSb3dzKHJvdyk7XG4gIH1cblxuICBzZWxlY3RSb3dzPFQ+KHJvdzogKFQgJiBSb3dOb2RlKSB8IChUW10gJiBSb3dOb2RlW10pKSB7XG4gICAgY29uc3Qgcm93Tm9kZXMgPSBjb2VyY2VBcnJheShyb3cpLmZpbHRlcihyb3dOb2RlID0+ICFyb3dOb2RlLmlzU2VsZWN0ZWQoKSk7XG4gICAgY29uc3QgbGFzdE5vZGUgPSByb3dOb2Rlcy5wb3AoKTtcbiAgICByb3dOb2Rlcy5mb3JFYWNoKHJvd05vZGUgPT4gcm93Tm9kZS5zZXRTZWxlY3RlZCh0cnVlLCBmYWxzZSwgdHJ1ZSkpO1xuICAgIGlmIChsYXN0Tm9kZSkge1xuICAgICAgbGFzdE5vZGUuc2V0U2VsZWN0ZWQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZGVzZWxlY3RSb3dzPFQ+KHJvdzogKFQgJiBSb3dOb2RlKSB8IChUW10gJiBSb3dOb2RlW10pKSB7XG4gICAgY29uc3Qgcm93Tm9kZXMgPSBjb2VyY2VBcnJheShyb3cpLmZpbHRlcihyb3dOb2RlID0+IHJvd05vZGUuaXNTZWxlY3RlZCgpKTtcbiAgICBjb25zdCBsYXN0Tm9kZSA9IHJvd05vZGVzLnBvcCgpO1xuICAgIHJvd05vZGVzLmZvckVhY2gocm93Tm9kZSA9PiByb3dOb2RlLnNldFNlbGVjdGVkKGZhbHNlLCBmYWxzZSwgdHJ1ZSkpO1xuICAgIGlmIChsYXN0Tm9kZSkge1xuICAgICAgbGFzdE5vZGUuc2V0U2VsZWN0ZWQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHNldFJvd3M8VD4oZGF0YTogVFtdLCBmaXRDb250YWluZXIgPSBmYWxzZSwgdHJlZUNvbmZpZzogUGFydGlhbDxEYXRvR3JpZFRyZWVDb25maWc+ID0ge30pIHtcbiAgICB0aGlzLmdyaWRRdWVyeS5ncmlkUmVhZHkkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzVHJlZURhdGEpIHtcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmRlZmF1bHRHcmlkVHJlZUxhYmVsLFxuICAgICAgICAgIC4uLnRyZWVDb25maWdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHJlZURhdGUgPSBjb252ZXJ0VG9UcmVlRGF0YShkYXRhLCB0aGlzLnRyZWVDb25maWcpO1xuICAgICAgICB0aGlzLmFwaS5ncmlkLnNldFJvd0RhdGEodHJlZURhdGUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUGl2b3RNb2RlKSB7XG4gICAgICAgIHRoaXMuc2V0UGl2b3RNb2RlUm93czxUPihkYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXBpLmdyaWQuc2V0Um93RGF0YShkYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaXRDb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5maXRHcmlkKCdjb250YWluZXInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyaWdnZXJXaW5kb3dSZXNpemUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldERhdGFzb3VyY2UoZ2V0Um93czogKHBhcmFtczogRGF0b0dyaWRHZXRSb3dzUGFyYW1zKSA9PiB2b2lkLCByZXR1cm5Ub0N1cnJlbnRQYWdlID0gZmFsc2UsIHNob3dMb2FkaW5nID0gZmFsc2UpIHtcbiAgICByZXR1cm5Ub0N1cnJlbnRQYWdlICYmIHRoaXMudXBkYXRlUGFnZVRvS2VlcE9uUmVmcmVzaFNlcnZlckRhdGEoKTtcbiAgICBzaG93TG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgdGhpcy5fb3JpZ2luYWxHZXRSb3dzID0gZ2V0Um93cztcbiAgICB0aGlzLmFwaS5ncmlkLnNldERhdGFzb3VyY2UoeyBnZXRSb3dzOiB0aGlzLndyYXBHZXRSb3dzKHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCksIGdldFJvd3MpIH0pO1xuICB9XG5cbiAgcmVmcmVzaFNlcnZlckRhdGEoa2VlcEN1cnJlbnRQYWdlID0gZmFsc2UsIHNob3dMb2FkaW5nID0gZmFsc2UpIHtcbiAgICBrZWVwQ3VycmVudFBhZ2UgJiYgdGhpcy51cGRhdGVQYWdlVG9LZWVwT25SZWZyZXNoU2VydmVyRGF0YSgpO1xuICAgIHNob3dMb2FkaW5nICYmIHRoaXMuc2V0TG9hZGluZyh0cnVlKTtcbiAgICB0aGlzLmFwaS5ncmlkLnNldERhdGFzb3VyY2UoeyBnZXRSb3dzOiB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmRhdGFzb3VyY2UuZ2V0Um93cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGFnZVRvS2VlcE9uUmVmcmVzaFNlcnZlckRhdGEoKSB7XG4gICAgLy8gS2VlcGluZyB0aGUgY3VycmVudCBwYWdlIG9uIHNlcnZlciByZWZyZXNoIGlzIGN1cnJlbnRseSBhdmFpbGFibGUgb25seSB3aGVuIG5vIHBhZ2UgY2xpZW50IGNhY2hpbmcgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLm1heEJsb2Nrc0luQ2FjaGUgPT09IDEpIHtcbiAgICAgIHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gdGhpcy5hcGkuZ3JpZC5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBhZGRSb3dzPFQ+KHJvdzogVCwgaW5kZXg/OiBudW1iZXIpOiBSb3dOb2RlVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHJvd3MgPSBjb2VyY2VBcnJheShyb3cpO1xuICAgIGNvbnN0IGRhdGE6IFJvd0RhdGFUcmFuc2FjdGlvbiA9IHsgYWRkOiByb3dzIH07XG4gICAgaWYgKCFpc05pbChpbmRleCkpIHtcbiAgICAgIGRhdGEuYWRkSW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBpLmdyaWQudXBkYXRlUm93RGF0YShkYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZVJvd3M8VD4ocm93OiBUW10pOiBhbnkge1xuICAgIGNvbnN0IHJvd3MgPSBjb2VyY2VBcnJheShyb3cpO1xuICAgIHJldHVybiB0aGlzLmFwaS5ncmlkLnVwZGF0ZVJvd0RhdGEoeyB1cGRhdGU6IHJvd3MgfSk7XG4gIH1cblxuICB1cGRhdGVSb3dWYWx1ZTxUPihyb3c6IFJvd05vZGUsIGtleTogc3RyaW5nLCBuZXdWYWx1ZTogVCk7XG4gIHVwZGF0ZVJvd1ZhbHVlPFQ+KGlkOiBzdHJpbmcsIGtleTogc3RyaW5nLCBuZXdWYWx1ZTogVCk7XG4gIHVwZGF0ZVJvd1ZhbHVlPFQ+KHJvdzogc3RyaW5nIHwgUm93Tm9kZSwga2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBUKSB7XG4gICAgY29uc3Qgcm93Tm9kZSA9IGlzU3RyaW5nKHJvdykgPyB0aGlzLmFwaS5ncmlkLmdldFJvd05vZGUocm93KSA6IHJvdztcbiAgICByb3dOb2RlLnNldERhdGFWYWx1ZShrZXksIG5ld1ZhbHVlKTtcbiAgfVxuXG4gIHJlbW92ZVJvd3Mocm93OiBSb3dOb2RlIHwgUm93Tm9kZVtdKTogUm93Tm9kZVRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCByb3dzID0gY29lcmNlQXJyYXkocm93KS5tYXAoKHsgZGF0YSB9KSA9PiBkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5hcGkuZ3JpZC51cGRhdGVSb3dEYXRhKHsgcmVtb3ZlOiByb3dzIH0pO1xuICB9XG5cbiAgcmVtb3ZlU2VsZWN0ZWRSb3dzKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlbGVjdGVkUm93Tm9kZXMoKTtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVSb3dzKHNlbGVjdGVkUm93cyk7XG4gIH1cblxuICBjbGVhclRhYmxlKCkge1xuICAgIHRoaXMuc2V0Um93cyhbXSk7XG4gIH1cblxuICB1cGRhdGVDb2x1bW5zKGNvbERlZnM6IERhdG9HcmlkQ29sdW1uRGVmIHwgRGF0b0dyaWRDb2x1bW5EZWZbXSwgcmVsb2FkU2V0dGluZ3MgPSBmYWxzZSkge1xuICAgIGlmICghY29sRGVmcykge1xuICAgICAgdGhyb3cgbmV3IERhdG9Db3JlRXJyb3IoJ05vIGNvbHVtbkRlZnMgd2VyZSBwcm92aWRlZC4g8J+VtfCfj7vigI3imYDvuI8nKTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplQ29sdW1ucyhjb2VyY2VBcnJheShjb2xEZWZzKSk7XG4gICAgY29uc3Qgc2F2ZWRTZXR0aW5ncyA9IHJlbG9hZFNldHRpbmdzICYmIHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTtcbiAgICB0aGlzLmFwaS5ncmlkLnNldENvbHVtbkRlZnMobm9ybWFsaXplZCk7XG4gICAgaWYgKHNhdmVkU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMubG9hZFNhdmVkU2V0dGluZ3Moc2F2ZWRTZXR0aW5ncyk7XG4gICAgfVxuICB9XG5cbiAgbm9ybWFsaXplT3B0aW9ucyhwYXJhbXM6IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICB0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMgPSBwYXJhbXMuY3VzdG9tSGVhZGVyc1RlbXBsYXRlcztcbiAgICBjb25zdCBoZWFkZXJDb21wb25lbnRQYXJhbXMgPSB7IGdyaWRTZXJ2aWNlOiB0aGlzLCBncmlkUXVlcnk6IHRoaXMuZ3JpZFF1ZXJ5IH07XG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgIC4uLmhlYWRlckNvbXBvbmVudFBhcmFtcyxcbiAgICAgIC4uLnBhcmFtcy5ncmlkT3B0aW9ucy5hdXRvR3JvdXBDb2x1bW5EZWZcbiAgICB9O1xuXG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmRlZmF1bHRDb2xEZWYgPSB7XG4gICAgICAuLi5wYXJhbXMuZ3JpZE9wdGlvbnMuZGVmYXVsdENvbERlZixcbiAgICAgIGhlYWRlckNvbXBvbmVudFBhcmFtc1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaCA9IHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVWMl8xO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVCYWNrZ3JvdW5kID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZUJhY2tncm91bmQgPSBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZ3JpZE9wdGlvbnMuc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5zaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzID1cbiAgICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVYyXzEgJiYgcGFyYW1zLmdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiAhPT0gR3JpZFJvd1NlbGVjdGlvblR5cGUuU0lOR0xFO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoSGlnaGxpZ2h0ID1cbiAgICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaCAmJiBkZWZhdWx0R3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoSGlnaGxpZ2h0O1xuICAgIH1cbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcyA9IHRoaXMubm9ybWFsaXplQ29sdW1ucyhwYXJhbXMuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcywgcGFyYW1zLmdyaWRPcHRpb25zKTtcblxuICAgIC8qKiBBZGQgY29yZSBmaWx0ZXJzICovXG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmlzRXh0ZXJuYWxGaWx0ZXJQcmVzZW50ID0gKCkgPT4gdHJ1ZTtcbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZG9lc0V4dGVybmFsRmlsdGVyUGFzcyA9IChyb3c6IFJvd05vZGUpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHZhbGlkYXRlRmlsdGVyKHsgcm93LCBhcGk6IHRoaXMuZ3JpZFF1ZXJ5LmFwaS5ncmlkIH0sIHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpKSAmJiB0aGlzLnJvd01hdGNoZXNTZWFyY2gocm93KVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgLyoqIFdyYXAgdGhlIHNlcnZlciBzaWRlIHBhZ2luYXRpb24gZ2V0IHJvd3MgZnVuY3Rpb24gKi9cbiAgICBpZiAodGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKHBhcmFtcy5ncmlkT3B0aW9ucykpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5ibG9ja0xvYWREZWJvdW5jZU1pbGxpcyA9IDMwMDtcbiAgICAgIHRoaXMuX29yaWdpbmFsR2V0Um93cyA9IHBhcmFtcy5ncmlkT3B0aW9ucy5kYXRhc291cmNlLmdldFJvd3M7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZGF0YXNvdXJjZS5nZXRSb3dzID0gdGhpcy53cmFwR2V0Um93cyhwYXJhbXMuZ3JpZE9wdGlvbnMpO1xuICAgICAgLyogVGhlIGNhY2hlIHNpemUgaXMgc3luY2VkIHdpdGggdGhlIHBhZ2luYXRpb24gcGFnZSBzaXplICovXG4gICAgICBjb25zdCBjYWNoZVNpemUgPSBwYXJhbXMuZ3JpZE9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplO1xuICAgICAgaWYgKGNhY2hlU2l6ZSkge1xuICAgICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuY2FjaGVCbG9ja1NpemUgPSBjYWNoZVNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEVkaXRhYmxlIGNlbGwgKi9cbiAgICB0aGlzLmluaXRFZGl0YWJsZUNvbHVtbnNDZWxsQ2xhc3MocGFyYW1zKTtcblxuICAgIC8qKiBXcmFwIGNvbnRleHQgbWVudSAqL1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5nZXRDb250ZXh0TWVudUl0ZW1zID0gdGhpcy53cmFwQ29udGV4dE1lbnVCdWlsZGVyKHBhcmFtcyk7XG5cbiAgICAvKiogU2F2ZSBncmlkIHNldHRpbmdzICovXG4gICAgY29uc3QgeyBzYXZlU2V0dGluZ3MsIGdyaWROYW1lIH0gPSBwYXJhbXMuZ3JpZE9wdGlvbnM7XG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLnNhdmVTZXR0aW5ncyA9IHNhdmVTZXR0aW5ncyAhPT0gZmFsc2UgJiYgIWlzTmlsKGdyaWROYW1lKTtcblxuICAgIC8qKiBTZXJ2ZXIgU2lkZSBQYWdpbmF0aW9uIGZvciBzZWxlY3QgYWxsIG9wdGlvbiAqL1xuICAgIHRoaXMuaW5pdE9uUm93U2VsZWN0ZWRGb3JTZXJ2ZXJTaWRlUGFnaW5hdGlvbihwYXJhbXMpO1xuXG4gICAgLyoqIEFkZCBwaXZvdCBzcGVjaWZpYyByZXF1aXJlZCBzZXR0aW5ncyAqL1xuICAgIGlmIChwYXJhbXMuZ3JpZE9wdGlvbnMucGl2b3RNb2RlKSB7XG4gICAgICB0aGlzLmluaXRQaXZvdFNlY29uZGFyeUNvbHNQcm9jZXNzKHBhcmFtcyk7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMSA9IHRydWU7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuc2F2ZVNldHRpbmdzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcy5ncmlkT3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQ29sdW1ucyhjb2xEZWZzOiBEYXRvR3JpZENvbHVtbkRlZltdLCBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zID0gbnVsbCk6IERhdG9HcmlkQ29sdW1uRGVmW10ge1xuICAgIGlmICghZ3JpZE9wdGlvbnMpIHtcbiAgICAgIGdyaWRPcHRpb25zID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlZENvbERlZnMgPSBjb2xEZWZzLm1hcCgoY29sOiBEYXRvR3JpZENvbHVtbkRlZikgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBoZWFkZXJOYW1lOiB0aGlzLnRyYW5zbGF0ZS50cmFuc2Zvcm0oY29sLmhlYWRlck5hbWUpXG4gICAgICB9O1xuICAgICAgLyoqIEFkanVzdCB0aGUgd2lkdGggaW4gY2FzZSB0aGUgY29sdW1uIGhhcyBpbmZvICovXG4gICAgICBpZiAoY29sLmluZm8pIHtcbiAgICAgICAgbm9ybWFsaXplZC5taW5XaWR0aCA9IGNvbC5taW5XaWR0aCB8fCBHcmlkTWluV2lkdGhzLldpdGhfSW5mbztcbiAgICAgIH1cbiAgICAgIGlmICghY29sLmNvbElkKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuY29sSWQgPSBjb2wuZmllbGQ7XG4gICAgICB9XG4gICAgICBpZiAobm9ybWFsaXplZC50eXBlID09PSBEYXRvR3JpZENvbHVtblR5cGVzLkl0ZW1zICYmICFub3JtYWxpemVkLmZpbHRlcnNDb25maWcpIHtcbiAgICAgICAgbm9ybWFsaXplZC5maWx0ZXJzQ29uZmlnID0geyBzZWN0aW9uczogRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCB9O1xuICAgICAgfVxuICAgICAgdGhpcy5ub3JtYWxpemVDb2x1bW5TZWFyY2hDb25maWcoZ3JpZE9wdGlvbnMsIGNvbCwgbm9ybWFsaXplZCk7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmFkZE11bHRpU2VsZWN0SGVhZGVyQ29sdW1uSWZSZXF1aXJlZCh1cGRhdGVkQ29sRGVmcywgZ3JpZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDb2x1bW5TZWFyY2hDb25maWcoXG4gICAgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucyxcbiAgICBjb2w6IERhdG9HcmlkQ29sdW1uRGVmLFxuICAgIG5vcm1hbGl6ZWQ6IERhdG9HcmlkQ29sdW1uRGVmXG4gICkge1xuICAgIC8qKiBDaGVjayBpZiBjb2x1bW4gc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gc2VhcmNoICoqL1xuICAgIGNvbnN0IGlzU2VydmVyUGFnaW5hdGlvbiA9IHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkT3B0aW9ucyk7XG4gICAgaWYgKHR5cGVvZiBjb2wuaW5jbHVkZUluU2VhcmNoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKGlzU2VydmVyUGFnaW5hdGlvbiAmJiBjb2wudHlwZSA9PT0gRGF0b0dyaWRDb2x1bW5UeXBlcy5EYXRlKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZUluU2VhcmNoID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtYWxpemVkLmluY2x1ZGVJblNlYXJjaCA9XG4gICAgICAgICAgdHlwZW9mIGdyaWRPcHRpb25zLmNvbHVtbnNJbmNsdWRlZEluU2VhcmNoQnlEZWZhdWx0ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBncmlkT3B0aW9ucy5jb2x1bW5zSW5jbHVkZWRJblNlYXJjaEJ5RGVmYXVsdFxuICAgICAgICAgICAgOiBkZWZhdWx0R3JpZE9wdGlvbnMuY29sdW1uc0luY2x1ZGVkSW5TZWFyY2hCeURlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZUluU2VhcmNoICYmXG4gICAgICAhdGhpcy5oYXNDZWxsUmVuZGVyZXIobm9ybWFsaXplZCwgZ3JpZE9wdGlvbnMpICYmXG4gICAgICBncmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHRcbiAgICApIHtcbiAgICAgIG5vcm1hbGl6ZWQuY2VsbFJlbmRlcmVyID0gKHBhcmFtczogSUNlbGxSZW5kZXJlclBhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBpc0VkaXRhYmxlID1cbiAgICAgICAgICAoaXNGdW5jdGlvbihub3JtYWxpemVkLmVkaXRhYmxlKSAmJiBub3JtYWxpemVkLmVkaXRhYmxlKHBhcmFtcykpIHx8XG4gICAgICAgICAgKCFpc0Z1bmN0aW9uKG5vcm1hbGl6ZWQuZWRpdGFibGUpICYmIG5vcm1hbGl6ZWQuZWRpdGFibGUpO1xuICAgICAgICByZXR1cm4gaXNFZGl0YWJsZVxuICAgICAgICAgID8gZWRpdGFibGVDZWxsUmVuZGVyZXJXaXRoU2VhcmNoSGlnaGxpZ2h0KHBhcmFtcywgdGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpKVxuICAgICAgICAgIDogc2VhcmNoSGlnaGxpZ2h0Q2VsbFJlbmRlcmVyKHBhcmFtcywgdGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNDZWxsUmVuZGVyZXIoY29sdW1uOiBEYXRvR3JpZENvbHVtbkRlZiwgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIGlmIChjb2x1bW4uY2VsbFJlbmRlcmVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IGNvbHVtbi50eXBlIGFzIHN0cmluZztcbiAgICBjb25zdCBjb2x1bW5UeXBlSGFzQ2VsbFJlbmRlcmVyID0gKG9wdGlvbnM6IFBhcnRpYWw8RGF0b0dyaWRPcHRpb25zPik6IGJvb2xlYW4gPT5cbiAgICAgIG9wdGlvbnMuY29sdW1uVHlwZXMgJiYgISFvcHRpb25zLmNvbHVtblR5cGVzW3R5cGVdICYmICEhb3B0aW9ucy5jb2x1bW5UeXBlc1t0eXBlXS5jZWxsUmVuZGVyZXI7XG5cbiAgICByZXR1cm4gY29sdW1uVHlwZUhhc0NlbGxSZW5kZXJlcihncmlkT3B0aW9ucykgfHwgY29sdW1uVHlwZUhhc0NlbGxSZW5kZXJlcihkZWZhdWx0R3JpZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNdWx0aVNlbGVjdEhlYWRlckNvbHVtbklmUmVxdWlyZWQoXG4gICAgY29sdW1uRGVmczogRGF0b0dyaWRDb2x1bW5EZWZbXSxcbiAgICBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zXG4gICk6IERhdG9HcmlkQ29sdW1uRGVmW10ge1xuICAgIGNvbnN0IHNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgPSBncmlkT3B0aW9ucyAmJiBncmlkT3B0aW9ucy5zaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzO1xuICAgIGNvbnN0IHJvd1NlbGVjdGlvbiA9XG4gICAgICBncmlkT3B0aW9ucyAmJiBncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24gPyBncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24gOiBkZWZhdWx0R3JpZE9wdGlvbnMucm93U2VsZWN0aW9uO1xuXG4gICAgaWYgKHNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgJiYgcm93U2VsZWN0aW9uID09PSBHcmlkUm93U2VsZWN0aW9uVHlwZS5NVUxUSVBMRSkge1xuICAgICAgY29uc3QgY2hlY2tib3hlc0NvbHVtbjogRGF0b0dyaWRDb2x1bW5EZWYgPSB7XG4gICAgICAgIGNvbElkOiB0aGlzLkNIRUNLQk9YX1NFTEVDVElPTl9DT0xfSUQsXG4gICAgICAgIGNoZWNrYm94U2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICBoZWFkZXJDb21wb25lbnRGcmFtZXdvcms6IERhdG9HcmlkTXVsdGlTZWxlY3RDb2x1bW5IZWFkZXJDb21wb25lbnQsXG4gICAgICAgIHdpZHRoOiAzMCxcbiAgICAgICAgbWF4V2lkdGg6IDMwLFxuICAgICAgICBzdXBwcmVzc1NpemVUb0ZpdDogdHJ1ZSxcbiAgICAgICAgY2VsbENsYXNzOiAnY2hlY2tib3gtc2VsZWN0aW9uLWNlbGwnLFxuICAgICAgICBoZWFkZXJDbGFzczogJ2hlYWRlci1jaGVja2JveC1zZWxlY3Rpb24tY2VsbCcsXG4gICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgICAgIHBpbm5lZDogJ2xlZnQnLFxuICAgICAgICBsb2NrUG9zaXRpb246IHRydWUsXG4gICAgICAgIGluY2x1ZGVJblNlYXJjaDogZmFsc2VcbiAgICAgIH07XG4gICAgICByZXR1cm4gW2NoZWNrYm94ZXNDb2x1bW4sIC4uLmNvbHVtbkRlZnNdO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGVmcztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE9uUm93U2VsZWN0ZWRGb3JTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7IGdyaWRPcHRpb25zIH06IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBpZiAoIXRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkT3B0aW9ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXh0ZXJuYWxPblJvd1NlbGVjdGVkID0gZ3JpZE9wdGlvbnMub25Sb3dTZWxlY3RlZDtcbiAgICBncmlkT3B0aW9ucy5vblJvd1NlbGVjdGVkID0gKGV2dDogUm93U2VsZWN0ZWRFdmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGV2dC5ub2RlO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gbm9kZS5pc1NlbGVjdGVkKCk7XG4gICAgICAgIGNvbnN0IHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkID0gZXhjbHVkZWRGcm9tU2VsZWN0QWxsLmluY2x1ZGVzKG5vZGUuaWQpO1xuICAgICAgICBpZiAoaXNTZWxlY3RlZCAmJiBpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7XG4gICAgICAgICAgICBleGNsdWRlZEZyb21TZWxlY3RBbGw6IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbC5maWx0ZXIoKG5vZGVJZDogc3RyaW5nKSA9PiBub2RlSWQgIT09IG5vZGUuaWQpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzU2VsZWN0ZWQgJiYgIWlzRXhjbHVkZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsOiBbLi4uZXhjbHVkZWRGcm9tU2VsZWN0QWxsLCBub2RlLmlkXSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVybmFsT25Sb3dTZWxlY3RlZCkge1xuICAgICAgICBleHRlcm5hbE9uUm93U2VsZWN0ZWQoZXZ0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByb3dNYXRjaGVzU2VhcmNoKHJvdzogUm93Tm9kZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSAodGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpIHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoaXNFbXB0eShzZWFyY2hUZXJtKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmluY2x1ZGVIaWRkZW5Db2x1bW5zSW5TZWFyY2hcbiAgICAgID8gdGhpcy5ncmlkUXVlcnkuZ2V0QWxsQ29sdW1ucygpXG4gICAgICA6IHRoaXMuZ3JpZFF1ZXJ5LmdldEFsbERpc3BsYXllZENvbHVtbnMoKTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBjb25zdCBjb2xEZWYgPSB0aGlzLmFwaS5ncmlkLmdldENvbHVtbkRlZihjb2wuZ2V0Q29sSWQoKSkgYXMgRGF0b0dyaWRDb2x1bW5EZWY7XG4gICAgICBpZiAoIWNvbERlZi5pbmNsdWRlSW5TZWFyY2gpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByb3dWYWx1ZSA9ICh0aGlzLmFwaS5ncmlkLmdldFZhbHVlKGNvbC5nZXRDb2xJZCgpLCByb3cpIHx8ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAocm93VmFsdWUuaW5jbHVkZXMoc2VhcmNoVGVybSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZml0R3JpZCgnY29udGFpbmVyJykgaW5zdGVhZFxuICAgKi9cbiAgZml0VG9Db250YWluZXIoKSB7XG4gICAgdGhpcy5hcGkuZ3JpZC5zaXplQ29sdW1uc1RvRml0KCk7XG4gIH1cblxuICBnZXRDdXN0b21IZWFkZXIoZmllbGQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMpIHtcbiAgICAgIGNvbnN0IHNwZWNpZmljID0gdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzLmZpbmQoKHsgY29sdW1uIH0pID0+IGNvbHVtbiA9PT0gZmllbGQpO1xuICAgICAgY29uc3QgY29tbW9uID0gdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzLmZpbmQoKHsgY29sdW1uIH0pID0+ICFjb2x1bW4pO1xuICAgICAgaWYgKHNwZWNpZmljIHx8IGNvbW1vbikge1xuICAgICAgICBjb25zdCB7IG1vcmVNZW51LCBjdXN0b21IZWFkZXIgfSA9IHtcbiAgICAgICAgICBtb3JlTWVudTogKHNwZWNpZmljICYmIHNwZWNpZmljLm1vcmVNZW51KSB8fCAoY29tbW9uICYmIGNvbW1vbi5tb3JlTWVudSksXG4gICAgICAgICAgY3VzdG9tSGVhZGVyOiAoc3BlY2lmaWMgJiYgc3BlY2lmaWMuY3VzdG9tSGVhZGVyKSB8fCAoY29tbW9uICYmIGNvbW1vbi5jdXN0b21IZWFkZXIpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IG1vcmVNZW51OiBtb3JlTWVudSAmJiBtb3JlTWVudS50cGwsIGN1c3RvbUhlYWRlcjogY3VzdG9tSGVhZGVyICYmIGN1c3RvbUhlYWRlci50cGwgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5zdG9yZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXR0aW5ncyxcbiAgICAgICAgICBmaWx0ZXI6IHt9LFxuICAgICAgICAgIHNlYXJjaFRlcm06IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICB9XG5cbiAgY2xlYXJDb2x1bW5GaWx0ZXIoY29sdW1uRmllbGQ6IHN0cmluZykge1xuICAgIGNvbnN0IHsgW2NvbHVtbkZpZWxkXTogZGVsZXRlZCwgLi4uZmlsdGVyIH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKTtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIGZpbHRlclxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBzZXRDb2x1bW5GaWx0ZXIoY29sdW1uOiBDb2x1bW4sIGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIsIG5vdGlmeUdyaWQgPSB0cnVlKSB7XG4gICAgdGhpcy5fbG9nRXZlbnQoQ29yZUV2ZW50VHlwZXMuR1JJRF9GSUxURVJfQVBQTElFRCwge1xuICAgICAgY29sdW1uOiBjb2x1bW4uZ2V0Q29sSWQoKSxcbiAgICAgIG51bU9mQ29uZGl0aW9uczogKGZpbHRlci5jb25kaXRpb25hbCAmJiBmaWx0ZXIuY29uZGl0aW9uYWwuY29uZGl0aW9ucy5sZW5ndGgpIHx8IDAsXG4gICAgICBieVZhbHVlOiAhIWZpbHRlci5ieVZhbHVlID8gJ1llcycgOiAnTm8nXG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUZpbHRlcihjb2x1bW4sIGZpbHRlcik7XG5cbiAgICBpZiAobm90aWZ5R3JpZCkge1xuICAgICAgdGhpcy5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBzZXRHcmlkRmlsdGVycyhmaWx0ZXJzOiBEYXRvR3JpZEV4dGVybmFsRmlsdGVyW10pIHtcbiAgICBpZiAodGhpcy5hcGkpIHtcbiAgICAgIGZvciAoY29uc3QgeyBmaWx0ZXIgfSBvZiBmaWx0ZXJzKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuYXBpLmNvbHVtbnMuZ2V0Q29sdW1uKGZpbHRlci5jb2xJZCk7XG5cbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgIHRoaXMuc2V0Q29sdW1uRmlsdGVyKGNvbHVtbiwgZmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwaXZvdENvbHVtbiA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlY29uZGFyeUNvbHVtbihmaWx0ZXIuY29sSWQpO1xuXG4gICAgICAgICAgdGhpcy5zZXRDb2x1bW5GaWx0ZXIocGl2b3RDb2x1bW4sIGZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbHRlcihjb2x1bW46IENvbHVtbiwgZmlsdGVyOiBEYXRvR3JpZEZpbHRlcikge1xuICAgIGNvbnN0IGNvbEZpZWxkID0gZ2V0Q29sRmllbGQoY29sdW1uLmdldENvbERlZigpKTtcblxuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5zZXR0aW5ncy5maWx0ZXIsXG4gICAgICAgICAgICBbY29sRmllbGRdOiBmaWx0ZXJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzZXRTZWFyY2hUZXJtKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgc2VhcmNoVGVybVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBzZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbihjb25maWc6IFBhcnRpYWw8U2VydmVyU2lkZVBhZ2luYXRpb25Db25maWc+KSB7XG4gICAgdGhpcy5zdG9yZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VydmVyU2lkZVBhZ2luYXRpb246IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbixcbiAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldExvYWRpbmcoc2hvdzogYm9vbGVhbikge1xuICAgIGlmIChzaG93KSB7XG4gICAgICB0aGlzLmFwaS5ncmlkLnNob3dMb2FkaW5nT3ZlcmxheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwaS5ncmlkLmdldERpc3BsYXllZFJvd0NvdW50KCkgPT09IDAgPyB0aGlzLnNldE92ZXJsYXkodHJ1ZSkgOiB0aGlzLnNldE92ZXJsYXkoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2Ugc2V0T3ZlcmxheSBpbnN0ZWFkXG4gICAqIEBwYXJhbSBzaG93XG4gICAqL1xuICBzZXROb0RhdGEoc2hvdzogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0T3ZlcmxheShzaG93KTtcbiAgfVxuXG4gIHNldE92ZXJsYXkoc2hvdzogYm9vbGVhbikge1xuICAgIHNob3cgPyB0aGlzLmFwaS5ncmlkLnNob3dOb1Jvd3NPdmVybGF5KCkgOiB0aGlzLmFwaS5ncmlkLmhpZGVPdmVybGF5KCk7XG4gIH1cblxuICB1cGRhdGVTZXR0aW5ncyhzZXR0aW5nczogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPikge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgLi4uc2V0dGluZ3NcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpdEdyaWQodG86ICdjb250YWluZXInIHwgJ2NvbnRlbnQnKSB7XG4gICAgdG8gPT09ICdjb250YWluZXInID8gdGhpcy5hcGkuZ3JpZC5zaXplQ29sdW1uc1RvRml0KCkgOiB0aGlzLmFwaS5jb2x1bW5zLmF1dG9TaXplQWxsQ29sdW1ucygpO1xuICAgIGNvbnN0IGdyaWRBbGlnbm1lbnQgPSB0byA9PT0gJ2NvbnRhaW5lcicgPyBEYXRvR3JpZEFsaWdubWVudC5GSVRfVE9fQ09OVEFJTkVSIDogRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRFTlQ7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyh7IGdyaWRBbGlnbm1lbnQsIGNvbHVtbnNTaXplczogbnVsbCB9KTtcbiAgfVxuXG4gIHNhdmVTZXR0aW5nc1RvU2VydmVyKHNldHRpbmdzOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+KSB7XG4gICAgY29uc3QgaXNHbG9iYWwgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmlzR2xvYmFsU2V0dGluZ3M7XG4gICAgdGhpcy5zdG9yYWdlQVBJLnNldCh0aGlzLmdyaWROYW1lLCBzZXR0aW5ncywgaXNHbG9iYWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCB1c2VkIHRvIGxvZyBncmlkIGV2ZW50cyB0byB0aGUgcGxhdGZvcm0ncyBsb2dnaW5nIHNlcnZpY2VcbiAgICovXG4gIF9sb2dFdmVudChldmVudFR5cGU6IENvcmVFdmVudFR5cGVzLCBldmVudFByb3BlcnRpZXM/OiBIYXNoTWFwPGFueT4pIHtcbiAgICB0aGlzLmxvZ2dlci5sb2dFdmVudChldmVudFR5cGUsIHsgdGFibGU6IHRoaXMuZ3JpZE5hbWUsIC4uLmV2ZW50UHJvcGVydGllcyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcFN1Y2Nlc3NDYWxsYmFjayh7IHN1Y2Nlc3NDYiwgcGFnZU51bWJlciwgaXNQZW5kaW5nUmV0dXJuVG9QYWdlIH06IFN1Y2Nlc3NXcmFwcGVyUGFyYW1zKSB7XG4gICAgcmV0dXJuIChyb3dzVGhpc0Jsb2NrOiBhbnlbXSwgdG90YWxSb3dzOiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyB0b3RhbFJvd3MsIGhhc0Vycm9yOiBmYWxzZSB9KTtcbiAgICAgIHN1Y2Nlc3NDYihyb3dzVGhpc0Jsb2NrLCB0b3RhbFJvd3MpO1xuICAgICAgdGhpcy5ncmlkUXVlcnkuX3NlcnZlckRhdGFMb2FkZWQubmV4dCh7XG4gICAgICAgIGFwaTogdGhpcy5hcGkuZ3JpZCxcbiAgICAgICAgY29sdW1uQXBpOiB0aGlzLmFwaS5jb2x1bW5zLFxuICAgICAgICB0eXBlOiAnU2VydmVyRGF0YUxvYWRlZCcsXG4gICAgICAgIHBhZ2luYXRpb25QYWdlOiBwYWdlTnVtYmVyXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNQZW5kaW5nUmV0dXJuVG9QYWdlKSB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIC8qKiBzbyB0aGUgZ3JpZCBmaXRzIGluIGV2ZXJ5IG5ldyBkYXRhIGlucHV0ICovXG4gICAgICAgIHRyaWdnZXJXaW5kb3dSZXNpemUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdFRvdGFsUm93cyA9IHRvdGFsUm93cztcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB3cmFwR2V0Um93cyhvcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMsIGdldFJvd3M/OiAocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHZvaWQpIHtcbiAgICBjb25zdCBnZXRSb3dzQ2IgPSBnZXRSb3dzIHx8IG9wdGlvbnMuZGF0YXNvdXJjZS5nZXRSb3dzO1xuICAgIHJldHVybiAoZ2V0Um93c1BhcmFtczogSUdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RhcnRSb3csIGVuZFJvdywgc29ydE1vZGVsLCBzdWNjZXNzQ2FsbGJhY2sgfSA9IGdldFJvd3NQYXJhbXM7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IG9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplIHx8IDEwMDtcbiAgICAgIGNvbnN0IGlzUmV0dXJuVG9DdXJyZW50UGFnZVJlcXVpcmVkID0gdGhpcy5wYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPiAwO1xuICAgICAgY29uc3QgaXNQZW5kaW5nUmV0dXJuVG9QYWdlID0gaXNSZXR1cm5Ub0N1cnJlbnRQYWdlUmVxdWlyZWQgJiYgc3RhcnRSb3cgPT09IDA7XG5cbiAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBpc1JldHVyblRvQ3VycmVudFBhZ2VSZXF1aXJlZFxuICAgICAgICA/IHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoICsgMVxuICAgICAgICA6IE1hdGguY2VpbChlbmRSb3cgLyBwYWdlU2l6ZSk7XG5cbiAgICAgIHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gLTE7XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpO1xuICAgICAgY29uc3QgbmV3UGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMgPSB7XG4gICAgICAgIC4uLmdldFJvd3NQYXJhbXMsXG4gICAgICAgIGZhaWxDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBoYXNFcnJvcjogdHJ1ZSB9KTtcbiAgICAgICAgICB0aGlzLnNldE92ZXJsYXkodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjazogdGhpcy53cmFwU3VjY2Vzc0NhbGxiYWNrKHsgcGFnZU51bWJlciwgc3VjY2Vzc0NiOiBzdWNjZXNzQ2FsbGJhY2ssIGlzUGVuZGluZ1JldHVyblRvUGFnZSB9KSxcbiAgICAgICAgc2VydmVyQ29uZmlnOiB7XG4gICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgcGFnZU51bWJlcixcbiAgICAgICAgICBjb2x1bW5GaWx0ZXJzOiBpc0VtcHR5KGZpbHRlcikgfHwgb3B0aW9ucy5lbmFibGVWMl8xID8gbnVsbCA6IHRoaXMuYnVpbGRTZXJ2ZXJSZXF1ZXN0RmlsdGVycyhmaWx0ZXIpLFxuICAgICAgICAgIGZpbHRlcjogb3B0aW9ucy5lbmFibGVWMl8xID8gdGhpcy5idWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEob3B0aW9ucy5jb2x1bW5EZWZzKSA6IG51bGwsXG4gICAgICAgICAgc29ydDogdGhpcy5idWlsZFNlcnZlclJlcXVlc3RTb3J0KHNvcnRNb2RlbClcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChpc1BlbmRpbmdSZXR1cm5Ub1BhZ2UpIHtcbiAgICAgICAgLy8gU2NlbmFyaW8gdGhlIGZvbGxvd2luZyBoYW5kbGVzIC0gc2VydmVyIHJlZnJlc2ggd2hlcmUgaXQgd2FzIHJlcXVlc3RlZCB0byBrZWVwIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAgICAgIC8vIFRoZSBwcm9ibGVtIC0gZ2V0Um93cyB3aWxsIGluaXRpYWxseSBiZSBjYWxsZWQgZm9yIHBhZ2UgMSAoYXV0b21hdGljYWxseSBoYXBwZW5zIHdoZW4gY2FsbGluZyBhZy1ncmlkJ3Mgc2V0RGF0YVNvdXJjZSkuXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIHRyaWdnZXIgaXQgYWdhaW4sIHN1Y2Nlc3NDYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGUgZGVzaXJlZCBwYWdlLlxuICAgICAgICAvLyBmYWtlR2V0Um93cyBpcyB1c2VkIGluIG9yZGVyIHRvIGF2b2lkIHJldHJpZXZpbmcgdGhlIHVubmVjZXNzYXJ5IHJlYWwgZGF0YSBmb3IgcGFnZSAxLlxuICAgICAgICBjb25zdCBmYWtlR2V0Um93cyA9ICh7IHN1Y2Nlc3NDYWxsYmFjayB9OiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soW10sIHRoaXMubGFzdFRvdGFsUm93cyk7XG4gICAgICAgIH07XG4gICAgICAgIGZha2VHZXRSb3dzKG5ld1BhcmFtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRSb3dzQ2IobmV3UGFyYW1zKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RWRpdGFibGVDb2x1bW5zQ2VsbENsYXNzKHBhcmFtczogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLmZvckVhY2goY29sRGVmID0+IHtcbiAgICAgIGlmIChjb2xEZWYuZWRpdGFibGUpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY29sRGVmLmVkaXRhYmxlKSkge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxDZWxsQ2xhc3MgPSBjb2xEZWYuY2VsbENsYXNzO1xuICAgICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSAoY2VsbENsYXNzUGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzRWRpdGFibGUgPSAoY29sRGVmLmVkaXRhYmxlIGFzIEZ1bmN0aW9uKShjZWxsQ2xhc3NQYXJhbXMgYXMgYW55KTtcbiAgICAgICAgICAgIGlmIChpc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVkaXRhYmxlUmVzdWx0ID0gdGhpcy5hZGRFZGl0YWJsZUNlbGxDbGFzcyhpbml0aWFsQ2VsbENsYXNzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZWRpdGFibGVSZXN1bHQpID8gZWRpdGFibGVSZXN1bHQoY2VsbENsYXNzUGFyYW1zKSA6IGVkaXRhYmxlUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5pdGlhbENlbGxDbGFzcykgPyBpbml0aWFsQ2VsbENsYXNzKGNlbGxDbGFzc1BhcmFtcykgOiBpbml0aWFsQ2VsbENsYXNzO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9IHRoaXMuYWRkRWRpdGFibGVDZWxsQ2xhc3MoY29sRGVmLmNlbGxDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcENvbnRleHRNZW51QnVpbGRlcihwYXJhbXM6IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBjb25zdCB7IGN1c3RvbUNvbnRleHRNZW51IH0gPSBwYXJhbXMuZ3JpZE9wdGlvbnM7XG4gICAgY29uc3QgYWxsQWN0aW9ucyA9IGlzRnVuY3Rpb24oY3VzdG9tQ29udGV4dE1lbnUpID8gY3VzdG9tQ29udGV4dE1lbnUocGFyYW1zLnJvd0FjdGlvbnMpIDogcGFyYW1zLnJvd0FjdGlvbnM7XG4gICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWxsQWN0aW9ucyk7XG4gICAgY29uc3QgY29weUFjdGlvbjogUm93QWN0aW9uID0ge1xuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5jb3B5LWNlbGwnKSxcbiAgICAgIGljb246ICdjb3B5JyxcbiAgICAgIGtleTogJ0NvcHkgQ2VsbCdcbiAgICB9O1xuICAgIHJldHVybiAoeyBub2RlLCBjb2x1bW4sIGNvbnRleHQgfTogR2V0Q29udGV4dE1lbnVJdGVtc1BhcmFtcykgPT4ge1xuICAgICAgY29uc3Qgb25Ib3ZlckFjdGlvbk1lbnUgPSBjb250ZXh0ICYmIGNvbnRleHQuY29udGV4dE1lbnUgJiYgY29udGV4dC5jb250ZXh0TWVudS5mcm9tT25Ib3ZlcjtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuIFtdO1xuICAgICAgbGV0IHNlbGVjdGVkID0gW25vZGVdO1xuICAgICAgbGV0IHJvd3NDb3VudCA9IDE7XG4gICAgICBpZiAob25Ib3ZlckFjdGlvbk1lbnUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkQ29udGV4dCh7IGNvbnRleHRNZW51OiB7IGZyb21PbkhvdmVyOiBmYWxzZSB9IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29weUFjdGlvbi5vbkNsaWNrID0gKFtyb3ddKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSB0aGlzLmFwaS5ncmlkLmdldFZhbHVlKGNvbHVtbi5nZXRDb2xJZCgpLCByb3cpO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNvbHVtbi5nZXRDb2xEZWYoKS52YWx1ZUZvcm1hdHRlcjtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdHRlciA/IGZvcm1hdHRlcihyYXdWYWx1ZSkgOiByYXdWYWx1ZTtcbiAgICAgICAgICBjb3B5VG9DbGlwYm9hcmQodmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobm9kZS5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICBzZWxlY3RlZCA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlbGVjdGVkUm93Tm9kZXMoKTtcbiAgICAgICAgICByb3dzQ291bnQgPSBzaXplKHNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdmlzaWJsZUFjdGlvbnMgPSBnZXRWaXNpYmxlQWN0aW9ucyhcbiAgICAgICAgYWxsQWN0aW9ucyxcbiAgICAgICAgcm93c0NvdW50LFxuICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZFxuICAgICAgKS5maWx0ZXIoKHsgdmlzaWJsZSB9KSA9PiB2aXNpYmxlKTtcbiAgICAgIGxldCB0b29sYmFyQWN0aW9ucyA9IFtjb3B5QWN0aW9uXTtcbiAgICAgIGlmIChvbkhvdmVyQWN0aW9uTWVudSkge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyA9IHZpc2libGVBY3Rpb25zO1xuICAgICAgfSBlbHNlIGlmICh2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRvb2xiYXJBY3Rpb25zID0gW3sgLi4uY29weUFjdGlvbiwgc2VwYXJhdG9yOiB0cnVlIH0sIC4uLnZpc2libGVBY3Rpb25zXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnZlcnRlclBhcmFtczogQWN0aW9uQ29udmVydGVyUGFyYW1zID0ge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRSb3dzOiBzZWxlY3RlZCxcbiAgICAgICAgaWNvblJlZ2lzdHJ5OiB0aGlzLnN2Z1JlZ2lzdHJ5LFxuICAgICAgICBub2RlLFxuICAgICAgICBsb2dnZXI6IHtcbiAgICAgICAgICBsb2c6IHRoaXMuX2xvZ0V2ZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgZXZlbnRPcmlnaW46IG9uSG92ZXJBY3Rpb25NZW51ID8gJ09uIEhvdmVyJyA6ICdDb250ZXh0IE1lbnUnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdG9vbGJhckFjdGlvblRvQ29udGV4dEFjdGlvbihjb252ZXJ0ZXJQYXJhbXMpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRyYW5zbGF0ZUFjdGlvbkxhYmVscyhhbGxBY3Rpb25zOiBSb3dBY3Rpb25bXSkge1xuICAgIGFsbEFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgYWN0aW9uLmxhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGFjdGlvbi5sYWJlbCk7XG4gICAgICBpZiAoYWN0aW9uLnN1Yk1lbnUpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWN0aW9uLnN1Yk1lbnUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZFNhdmVkU2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICBjb25zdCB7XG4gICAgICBzb3J0LFxuICAgICAgaGlkZGVuQ29sdW1ucyxcbiAgICAgIGZpbHRlcixcbiAgICAgIGdyb3VwZWRDb2x1bW5zLFxuICAgICAgY29sdW1uc1NpemVzLFxuICAgICAgcGlubmVkQ29sdW1ucyxcbiAgICAgIGNvbHVtbnNPcmRlcixcbiAgICAgIGdyaWRBbGlnbm1lbnRcbiAgICB9ID0gc2V0dGluZ3M7XG4gICAgY29uc3QgeyBncmlkLCBjb2x1bW5zIH0gPSB0aGlzLmFwaTtcbiAgICAvKiBIaWRlIGNvbHVtbnMgKi9cbiAgICAvKiBOT1RFOiBjb2x1bW5zIG9yZGVyIGFyZSB0cmVhdGVkIGFzIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBjb2x1bW5zICovXG4gICAgY29sdW1ucy5zZXRDb2x1bW5zVmlzaWJsZSh0aGlzLmluaXRpYWxTZXR0aW5ncy5jb2x1bW5zT3JkZXIsIHRydWUpO1xuICAgIGNvbnN0IGNvbHVtblRvSGlkZSA9ICFpc05pbChoaWRkZW5Db2x1bW5zKSA/IGhpZGRlbkNvbHVtbnMgOiB0aGlzLmluaXRpYWxTZXR0aW5ncy5oaWRkZW5Db2x1bW5zO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUoY29sdW1uVG9IaWRlLCBmYWxzZSk7XG5cbiAgICAvKiBBcHBseSBmaWx0ZXJzICovXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgZ3JpZC5vbkZpbHRlckNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICAvKiBHcm91cCBjb2x1bW5zICovXG4gICAgY29uc3QgYWxsR3JvdXBlZENvbHVtbnMgPSBjb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuICAgIGxldCByZW1vdmVHcm91cGVkO1xuICAgIGlmIChncm91cGVkQ29sdW1ucykge1xuICAgICAgcmVtb3ZlR3JvdXBlZCA9IGFsbEdyb3VwZWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gIWdyb3VwZWRDb2x1bW5zLmluY2x1ZGVzKGNvbC5nZXRDb2xJZCgpKSk7XG4gICAgICBjb2x1bW5zLmFkZFJvd0dyb3VwQ29sdW1ucyhncm91cGVkQ29sdW1ucyk7XG4gICAgICBjb2x1bW5zLnNldENvbHVtbnNWaXNpYmxlKGdyb3VwZWRDb2x1bW5zLCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbHVtbnMucmVtb3ZlUm93R3JvdXBDb2x1bW5zKHJlbW92ZUdyb3VwZWQpO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUocmVtb3ZlR3JvdXBlZCwgdHJ1ZSk7XG5cbiAgICAvKiBBcHBseSBzb3J0ICovXG4gICAgY29uc3QgZ3JpZFNvcnQgPSBzb3J0IHx8IHRoaXMuaW5pdGlhbFNldHRpbmdzLnNvcnQ7XG4gICAgZ3JpZC5zZXRTb3J0TW9kZWwoZ3JpZFNvcnQgPyBbZ3JpZFNvcnRdIDogbnVsbCk7XG5cbiAgICAvKiBBbGlnbiBncmlkICovXG4gICAgaWYgKGdyaWRBbGlnbm1lbnQgPT09IERhdG9HcmlkQWxpZ25tZW50LkNVU1RPTSkge1xuICAgICAgLyogU2V0IGNvbHVtbiBzaXplcyAqL1xuICAgICAgY29sdW1uc1NpemVzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbHVtbnNTaXplcykuZm9yRWFjaChjb2xJZCA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbnNTaXplc1tjb2xJZF0gPT09IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05URU5UKSB7XG4gICAgICAgICAgICBjb2x1bW5zLmF1dG9TaXplQ29sdW1uKGNvbElkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sdW1ucy5zZXRDb2x1bW5XaWR0aChjb2xJZCwgY29sdW1uc1NpemVzW2NvbElkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JpZEFsaWdubWVudCA9PT0gRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRFTlQgPyBjb2x1bW5zLmF1dG9TaXplQWxsQ29sdW1ucygpIDogZ3JpZC5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuXG4gICAgLyogUGluIGNvbHVtbnMgbGVmdCAqL1xuICAgIGNvbnN0IGZpbHRlcmVkUGlubmVkQ29sdW1ucyA9IHBpbm5lZENvbHVtbnNcbiAgICAgID8gcGlubmVkQ29sdW1ucy5maWx0ZXIoKGNvbDogc3RyaW5nKSA9PiBjb2wgIT09IHRoaXMuQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5zT3JkZXJcbiAgICAgID8gY29sdW1uc09yZGVyLmZpbHRlcigoY29sOiBzdHJpbmcpID0+IGNvbCAhPT0gdGhpcy5DSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lEKVxuICAgICAgOiBudWxsO1xuICAgIHNpemUoZmlsdGVyZWRQaW5uZWRDb2x1bW5zKSA+IDBcbiAgICAgID8gY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkUGlubmVkQ29sdW1ucywgJ2xlZnQnKVxuICAgICAgOiBmaWx0ZXJlZENvbHVtbnMgJiYgY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkQ29sdW1ucywgbnVsbCk7XG5cbiAgICAvKiBPcmRlciBjb2x1bW5zICovXG4gICAgY29sdW1uc09yZGVyICYmIGNvbHVtbnMubW92ZUNvbHVtbnMoY29sdW1uc09yZGVyLCAwKTtcbiAgfVxuXG4gIGdldFNldHRpbmdzRGlmZigpOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+IHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdyaWRRdWVyeS5nZXRDdXJyZW50R3JpZFNldHRpbmdzKCk7XG4gICAgcmV0dXJuIGRpZmYoY3VycmVudFN0YXRlLCB0aGlzLmluaXRpYWxTZXR0aW5ncyk7XG4gIH1cblxuICByZXNldFRhYmxlU2V0dGluZ3MoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXIsIC4uLnJlc3QgfSA9IHRoaXMuaW5pdGlhbFNldHRpbmdzO1xuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5hcGk7XG4gICAgY29uc3Qgb3JpZ2luYWxDb2xTaXplcyA9IGdldENvbHVtbnNTaXplcyhjb2x1bW5zLmdldEFsbEdyaWRDb2x1bW5zKCksIHRydWUpO1xuICAgIGNvbnN0IGdyaWRBbGlnbm1lbnQgPSBpc0VtcHR5KG9yaWdpbmFsQ29sU2l6ZXMpID8gcmVzdC5ncmlkQWxpZ25tZW50IDogRGF0b0dyaWRBbGlnbm1lbnQuQ1VTVE9NO1xuICAgIGNvbnN0IG5ld1NldHRpbmdzID0geyAuLi5yZXN0LCBjb2x1bW5zU2l6ZXM6IG9yaWdpbmFsQ29sU2l6ZXMsIGdyaWRBbGlnbm1lbnQgfTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLmxvYWRTYXZlZFNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc1RvU2VydmVyKHsgZmlsdGVyIH0pO1xuICB9XG5cbiAgaW5pdFNldHRpbmdzKHNhdmVkU2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLmluaXRpYWxTZXR0aW5ncyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKHNhdmVkU2V0dGluZ3MpO1xuICAgIHRoaXMubG9hZFNhdmVkU2V0dGluZ3Moc2F2ZWRTZXR0aW5ncyk7XG4gIH1cblxuICBub3RpZnlGaWx0ZXJVcGRhdGUoKSB7XG4gICAgY29uc3Qgd2F0Y2ggPSBbdGhpcy5ncmlkUmVmLmZpbHRlckNoYW5nZWQuYXNPYnNlcnZhYmxlKCldO1xuICAgIGlmICh0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNpZGUpIHtcbiAgICAgIHdhdGNoLnB1c2godGhpcy5ncmlkUXVlcnkuc2VydmVyRGF0YUxvYWRlZCQpO1xuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIH1cbiAgICBjb21iaW5lTGF0ZXN0KHdhdGNoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm93c0FmdGVyRmlsdGVyID0gdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpO1xuICAgICAgICB0aGlzLnNldE92ZXJsYXkocm93c0FmdGVyRmlsdGVyID09PSAwKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYXBpLmdyaWQub25GaWx0ZXJDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnMoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcnNNYXApOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMge1xuICAgIGNvbnN0IGNvbHVtbnNGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgICBjb25zdCB7IGJ5VmFsdWUsIGNvbmRpdGlvbmFsIH0gPSB2YWx1ZTtcbiAgICAgIGlmIChieVZhbHVlKSB7XG4gICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0gPSB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGZpbHRlcnM6IFtieVZhbHVlXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbmFsKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBjb25kaXRpb25hbC5vcGVyYXRvcixcbiAgICAgICAgICBmaWx0ZXJzOiBjb25kaXRpb25hbC5jb25kaXRpb25zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBlbmQ6IChpdGVtIGFzIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24pLnJhbmdlRW5kXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgICBpZiAoYnlWYWx1ZSkge1xuICAgICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0uZmlsdGVycy5wdXNoKGNvbmRpdGlvbmFsRmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW5zRmlsdGVyc1tjb2x1bW5dID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uc0ZpbHRlcnM7XG4gIH1cblxuICBidWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEoZ3JpZENvbHVtbnM6IERhdG9HcmlkQ29sdW1uRGVmW10pOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCk7XG4gICAgY29uc3Qgc2VhcmNoVGVybSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlYXJjaFRlcm0oKTtcblxuICAgIGxldCBjb2x1bW5GaWx0ZXJzID0gdGhpcy5idWlsZFNlcnZlckNvbHVtbkZpbHRlcnNfdjJfMShmaWx0ZXIpO1xuICAgIGlmIChjb2x1bW5GaWx0ZXJzLmV2ZXJ5KCh7IG9wZXJhdG9yIH06IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyKSA9PiBvcGVyYXRvciA9PT0gT3BlcmF0b3JUeXBlcy5BTkQpKSB7XG4gICAgICBjb25zdCBmbGF0dGVuZWRGaWx0ZXJzID0gY29sdW1uRmlsdGVyc1xuICAgICAgICAubWFwKCh7IGZpbHRlcnMgfTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIpID0+IGZpbHRlcnMpXG4gICAgICAgIC5yZWR1Y2UoKGFyciwgcmVzKSA9PiByZXMuY29uY2F0KGFyciksIFtdKTtcbiAgICAgIGNvbHVtbkZpbHRlcnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgZmlsdGVyczogZmxhdHRlbmVkRmlsdGVyc1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoY29sdW1uRmlsdGVycykgPiAxXG4gICAgICAgID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsIGZpbHRlcnM6IGNvbHVtbkZpbHRlcnMgfVxuICAgICAgICA6IHNpemUoY29sdW1uRmlsdGVycykgPT09IDFcbiAgICAgICAgPyBjb2x1bW5GaWx0ZXJzWzBdXG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAoIXNlYXJjaFRlcm0pIHtcbiAgICAgIHJldHVybiBjb2x1bW5GaWx0ZXI7XG4gICAgfVxuICAgIGNvbnN0IHsgaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB9ID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICBjb25zdCBzZWFyY2hhYmxlQ29sdW1ucyA9IGdyaWRDb2x1bW5zLmZpbHRlcigoY29sRGVmOiBEYXRvR3JpZENvbHVtbkRlZikgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY29sRGVmLmluY2x1ZGVJblNlYXJjaCAmJiAoaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB8fCB0aGlzLmFwaS5jb2x1bW5zLmdldENvbHVtbihjb2xEZWYuY29sSWQpLmlzVmlzaWJsZSgpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbltdID0gc2VhcmNoYWJsZUNvbHVtbnMubWFwKCh7IGZpZWxkIH06IERhdG9HcmlkQ29sdW1uRGVmKSA9PiAoe1xuICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5DT05UQUlOUyxcbiAgICAgIHZhbHVlOiBzZWFyY2hUZXJtLFxuICAgICAgY29sdW1uOiBmaWVsZFxuICAgIH0pKTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoc2VhcmNoRmlsdGVycykgPiAwID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5PUiwgZmlsdGVyczogc2VhcmNoRmlsdGVycyB9IDogbnVsbDtcbiAgICBpZiAoIWNvbHVtbkZpbHRlcikge1xuICAgICAgcmV0dXJuIHNlYXJjaEZpbHRlcjtcbiAgICB9XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzOiBbY29sdW1uRmlsdGVyLCBzZWFyY2hGaWx0ZXJdIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyQ29sdW1uRmlsdGVyc192Ml8xKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXJzTWFwKTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJbXSB7XG4gICAgbGV0IGNvbHVtbkZpbHRlcnM6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2NvbHVtbiwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcikpIHtcbiAgICAgIGxldCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID0gbnVsbDtcbiAgICAgIGNvbnN0IHsgYnlWYWx1ZSwgY29uZGl0aW9uYWwgfSA9IHZhbHVlO1xuICAgICAgaWYgKGJ5VmFsdWUpIHtcbiAgICAgICAgY29sdW1uRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICBmaWx0ZXJzOiBbeyBjb2x1bW4sIC4uLmJ5VmFsdWUgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25kaXRpb25hbCkge1xuICAgICAgICBjb25zdCBjb25kaXRpb25hbEZpbHRlcjogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIgPSB0aGlzLmdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKGNvbmRpdGlvbmFsLCBjb2x1bW4pO1xuICAgICAgICBpZiAoY29sdW1uRmlsdGVyKSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyLmZpbHRlcnMucHVzaChjb25kaXRpb25hbEZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbHVtbkZpbHRlcnMucHVzaChjb2x1bW5GaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRmlsdGVycztcbiAgfVxuXG4gIGdldEZpbHRlckZvclNlcnZlckFjdGlvbk9uU2VsZWN0QWxsKCk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICBjb25zdCB7IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCB9ID0gdGhpcy5ncmlkUXVlcnkuc2VydmVyU2lkZUNvbmZpZztcbiAgICBjb25zdCB7IGNvbHVtbkRlZnMsIGlkQ29sdW1uS2V5IH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpO1xuICAgIGNvbnN0IG1haW5GaWx0ZXIgPSB0aGlzLmJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnNfdjJfMShjb2x1bW5EZWZzKTtcbiAgICBpZiAoaXNFbXB0eShleGNsdWRlZEZyb21TZWxlY3RBbGwpKSB7XG4gICAgICByZXR1cm4gbWFpbkZpbHRlcjtcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZWRSb3dzRmlsdGVyOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24gPSB7XG4gICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgdmFsdWVzOiBleGNsdWRlZEZyb21TZWxlY3RBbGwsXG4gICAgICBjb2x1bW46IGlkQ29sdW1uS2V5XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJzID0gbWFpbkZpbHRlciA/IFttYWluRmlsdGVyLCBleGNsdWRlZFJvd3NGaWx0ZXJdIDogW2V4Y2x1ZGVkUm93c0ZpbHRlcl07XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzIH07XG4gIH1cblxuICBwcml2YXRlIGdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKFxuICAgIGNvbmRpdGlvbmFsRmlsdGVyOiBEYXRvR3JpZENvbmRpdGlvbmFsRmlsdGVyLFxuICAgIGNvbHVtbjogc3RyaW5nXG4gICk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGNvbmRpdGlvbmFsRmlsdGVyLm9wZXJhdG9yLFxuICAgICAgZmlsdGVyczogY29uZGl0aW9uYWxGaWx0ZXIuY29uZGl0aW9ucy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgc3RhcnQ6IHZhbHVlLFxuICAgICAgICAgICAgZW5kOiAoaXRlbSBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKS5yYW5nZUVuZCxcbiAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgIH0gYXMgU2VydmVyU2lkZVBhZ2luYXRpb25SYW5nZUNvbmRpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSB8fCBjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLFxuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFkgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgICAgICAgY29sdW1uXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjb2x1bW4gfSBhcyBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbjtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJSZXF1ZXN0U29ydChzb3J0TW9kZWw6IERhdG9HcmlkU29ydFtdKTogRGF0b0dyaWRTZXJ2ZXJTb3J0W10ge1xuICAgIHJldHVybiBzb3J0TW9kZWwubWFwKCh7IGNvbElkLCBzb3J0IH0pID0+ICh7XG4gICAgICBjb2x1bW46IGNvbElkLFxuICAgICAgc29ydE9yZGVyOiBzb3J0LnRvVXBwZXJDYXNlKCkgYXMgRGF0b0dyaWRTZXJ2ZXJTb3J0RGlyZWN0aW9uXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFZGl0YWJsZUNlbGxDbGFzcyhcbiAgICBjZWxsQ2xhc3NWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCAoKGNlbGxDbGFzc1BhcmFtczogQ2VsbENsYXNzUGFyYW1zKSA9PiBzdHJpbmcgfCBzdHJpbmdbXSlcbiAgKSB7XG4gICAgaWYgKGlzTmlsKGNlbGxDbGFzc1ZhbHVlKSkge1xuICAgICAgcmV0dXJuICdkYXRvLWVkaXRhYmxlLWNlbGwnO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihjZWxsQ2xhc3NWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsQ2xhc3NQYXJhbXMgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFZGl0YWJsZUNsYXNzQXJyYXkoY2VsbENsYXNzVmFsdWUoY2VsbENsYXNzUGFyYW1zKSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRFZGl0YWJsZUNsYXNzQXJyYXkoY2VsbENsYXNzVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZGl0YWJsZUNsYXNzQXJyYXkoY3VycmVudENsYXNzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjZWxsQ2xhc3MgPSBjb2VyY2VBcnJheShjdXJyZW50Q2xhc3MpO1xuICAgIGNlbGxDbGFzcy5wdXNoKCdkYXRvLWVkaXRhYmxlLWNlbGwnKTtcbiAgICByZXR1cm4gY2VsbENsYXNzO1xuICB9XG5cbiAgc2VsZWN0QWxsQ3VycmVudFBhZ2VSb3dzKGlzU2VsZWN0ZWQgPSB0cnVlLCBjb25zaWRlckV4Y2x1ZGVkID0gZmFsc2UpIHtcbiAgICBsZXQgcm93c0ZvclNlbGVjdGlvbiA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRQYWdlUm93cygpO1xuICAgIGlmIChjb25zaWRlckV4Y2x1ZGVkKSB7XG4gICAgICBjb25zdCB7IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCB9ID0gdGhpcy5ncmlkUXVlcnkuc2VydmVyU2lkZUNvbmZpZztcbiAgICAgIGlmICghaXNFbXB0eShleGNsdWRlZEZyb21TZWxlY3RBbGwpKSB7XG4gICAgICAgIHJvd3NGb3JTZWxlY3Rpb24gPSByb3dzRm9yU2VsZWN0aW9uLmZpbHRlcigoeyBpZCB9OiBSb3dOb2RlKSA9PiAhZXhjbHVkZWRGcm9tU2VsZWN0QWxsLmluY2x1ZGVzKGlkKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlzU2VsZWN0ZWQgPyB0aGlzLnNlbGVjdFJvd3Mocm93c0ZvclNlbGVjdGlvbikgOiB0aGlzLmRlc2VsZWN0Um93cyhyb3dzRm9yU2VsZWN0aW9uKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsUm93cygpIHtcbiAgICB0aGlzLmFwaS5ncmlkLmRlc2VsZWN0QWxsKCk7XG4gICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBzZWxlY3RBbGxSb3dzRW5hYmxlZDogZmFsc2UsIGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbDogW10gfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gcGl2b3RpbmcsXG4gICAqIHdlIGFkZCB0aGUgZmllbGQgbmFtZSB0byB0aGUgY29sdW1uIGhlYWRlciBjbGFzcyBpbiBvcmRlciB0byBhY2Nlc3MgaXQgdGhyb3VnaCB0aGUgYXV0byBnZW5lcmF0ZWQgcGl2b3QgY29sdW1uLlxuICAgKi9cbiAgcHJpdmF0ZSBpbml0UGl2b3RTZWNvbmRhcnlDb2xzUHJvY2Vzcyh7IGdyaWRPcHRpb25zIH06IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sRGVmID0gY29sRGVmID0+IHtcbiAgICAgIGNvbnN0IHVzZXJQcm92aWRlZENvbERlZiA9IGNvbERlZi5waXZvdFZhbHVlQ29sdW1uICYmIGNvbERlZi5waXZvdFZhbHVlQ29sdW1uLmdldFVzZXJQcm92aWRlZENvbERlZigpO1xuXG4gICAgICBpZiAodXNlclByb3ZpZGVkQ29sRGVmKSB7XG4gICAgICAgIGNvbERlZi5maWx0ZXIgPSB1c2VyUHJvdmlkZWRDb2xEZWYuZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sRGVmLnBpdm90S2V5cykge1xuICAgICAgICBjb2xEZWYucGl2b3RLZXlzID0gY29sRGVmLnBpdm90S2V5cy5tYXAoa2V5ID0+IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWRLZXkgPSB0cnlQYXJzZVBpdm90VmFsdWUoa2V5KTtcblxuICAgICAgICAgIHJldHVybiAocGFyc2VkS2V5ICYmIHBhcnNlZEtleS52YWx1ZSkgfHwgJyc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sR3JvdXBEZWYgPSAoY29sR3JvdXBEZWY6IENvbEdyb3VwRGVmKSA9PiB7XG4gICAgICBpZiAoY29sR3JvdXBEZWYuaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRyeVBhcnNlUGl2b3RWYWx1ZShjb2xHcm91cERlZi5oZWFkZXJOYW1lKTtcblxuICAgICAgICBpZiAocGFyc2VkVmFsdWUpIHtcbiAgICAgICAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gcGFyc2VkVmFsdWU7XG5cbiAgICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJDbGFzcyA9IFtmaWVsZF07XG4gICAgICAgICAgY29sR3JvdXBEZWYuaGVhZGVyTmFtZSA9IHZhbHVlO1xuXG4gICAgICAgICAgaWYgKGNvbEdyb3VwRGVmLmNoaWxkcmVuICYmIGNvbEdyb3VwRGVmLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbEdyb3VwRGVmLmhlYWRlckNsYXNzLnB1c2goJ2dyb3VwLXBpdm90LWNlbGwnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sR3JvdXBEZWYuY2hpbGRyZW4pIHtcbiAgICAgICAgY29uc3QgW2NvbENoaWxkXTogYW55ID0gY29sR3JvdXBEZWYuY2hpbGRyZW47XG4gICAgICAgIGNvbnN0IHBpdm90VG90YWxDb2x1bW5JZHMgPSBjb2xDaGlsZCAmJiBjb2xDaGlsZC5waXZvdFRvdGFsQ29sdW1uSWRzO1xuXG4gICAgICAgIGlmIChwaXZvdFRvdGFsQ29sdW1uSWRzICYmIHBpdm90VG90YWxDb2x1bW5JZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbEdyb3VwRGVmLmhlYWRlckNsYXNzID0gWyd0b3RhbC1waXZvdC1jZWxsJ107XG4gICAgICAgICAgY29sR3JvdXBEZWYuaGVhZGVyTmFtZSA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS50b3RhbCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJDbGFzcyA9IFsnZW1wdHktcGl2b3QtaGVhZGVyJ107XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2xHcm91cERlZi5waXZvdEtleXMpIHtcbiAgICAgICAgY29sR3JvdXBEZWYucGl2b3RLZXlzID0gY29sR3JvdXBEZWYucGl2b3RLZXlzLm1hcChrZXkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZEtleSA9IHRyeVBhcnNlUGl2b3RWYWx1ZShrZXkpO1xuXG4gICAgICAgICAgcmV0dXJuIChwYXJzZWRLZXkgJiYgcGFyc2VkS2V5LnZhbHVlKSB8fCAnJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UGl2b3RNb2RlUm93czxUPihkYXRhOiBUW10pIHtcbiAgICBjb25zdCBwaXZvdENvbHVtbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRBbGxQaXZvdENvbHVtbnMoKTtcbiAgICBjb25zdCBjb252ZXJ0ZWREYXRhID0gZGF0YS5tYXAoKGN1cnJlbnRWYWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG1hcHBlZFZhbHVlcyA9IHsgLi4uY3VycmVudFZhbHVlIH07XG5cbiAgICAgIGZvciAoY29uc3QgY29sIG9mIHBpdm90Q29sdW1ucykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGNvbC5nZXRDb2xEZWYoKS5maWVsZDtcbiAgICAgICAgY29uc3QgcGl2b3RWYWx1ZTogUGl2b3RDb2x1bW5EYXRhID0geyBmaWVsZCwgdmFsdWU6IGN1cnJlbnRWYWx1ZVtmaWVsZF0gfTtcblxuICAgICAgICBtYXBwZWRWYWx1ZXNbZmllbGRdID0gSlNPTi5zdHJpbmdpZnkocGl2b3RWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtYXBwZWRWYWx1ZXM7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFwaS5ncmlkLnNldFJvd0RhdGEoY29udmVydGVkRGF0YSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zdG9yZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zdG9yZS9ncmlkLnN0b3JlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvd0FjdGlvbiB9IGZyb20gJy4uL2dyaWQtdG9vbGJhci9ncmlkLXRvb2xiYXIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b0dyaWRBbGlnbm1lbnQsIERhdG9HcmlkT3B0aW9ucywgRGF0b0dyaWRTb3J0IH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY3VzdG9tLWhlYWRlci9jdXN0b20taGVhZGVyLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRvR3JpZEZpbHRlcnNNYXAgfSBmcm9tICcuLi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci50eXBlcyc7XG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnQGRhdG9yYW1hL2FraXRhJztcblxuZXhwb3J0IHR5cGUgTm9ybWFsaXplT3B0aW9uc1BhcmFtcyA9IHtcbiAgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucztcbiAgY3VzdG9tSGVhZGVyc1RlbXBsYXRlcz86IFF1ZXJ5TGlzdDxEYXRvQ3VzdG9tSGVhZGVyVGVtcGxhdGVDb21wb25lbnQ+
|
|
1
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zdG9yZS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zdG9yZS9ncmlkLnN0b3JlLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvd0FjdGlvbiB9IGZyb20gJy4uL2dyaWQtdG9vbGJhci9ncmlkLXRvb2xiYXIudHlwZXMnO1xuaW1wb3J0IHsgRGF0b0dyaWRBbGlnbm1lbnQsIERhdG9HcmlkT3B0aW9ucywgRGF0b0dyaWRTb3J0IH0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcbmltcG9ydCB7IERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY3VzdG9tLWhlYWRlci9jdXN0b20taGVhZGVyLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRvR3JpZEZpbHRlcnNNYXAgfSBmcm9tICcuLi9ncmlkLWZpbHRlci9ncmlkLWZpbHRlci50eXBlcyc7XG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnQGRhdG9yYW1hL2FraXRhJztcblxuZXhwb3J0IHR5cGUgTm9ybWFsaXplT3B0aW9uc1BhcmFtcyA9IHtcbiAgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucztcbiAgY3VzdG9tSGVhZGVyc1RlbXBsYXRlcz86IFF1ZXJ5TGlzdDxEYXRvQ3VzdG9tSGVhZGVyVGVtcGxhdGVDb21wb25lbnQ+O1xuICByb3dBY3Rpb25zOiBSb3dBY3Rpb25bXTtcbn07XG5cbmV4cG9ydCB0eXBlIFN1Y2Nlc3NXcmFwcGVyUGFyYW1zID0ge1xuICBzdWNjZXNzQ2I6IChyb3dzVGhpc0Jsb2NrOiBhbnlbXSwgbGFzdFJvdz86IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZU51bWJlcjogbnVtYmVyO1xuICBpc1BlbmRpbmdSZXR1cm5Ub1BhZ2U6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmZpZyA9IHtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgdG90YWxSb3dzOiBudW1iZXI7XG4gIGhhc0Vycm9yOiBib29sZWFuO1xuICBzZWxlY3RBbGxSb3dzRW5hYmxlZDogYm9vbGVhbjtcbiAgZXhjbHVkZWRGcm9tU2VsZWN0QWxsOiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIERhdG9HcmlkU2V0dGluZ3MgPSB7XG4gIHNvcnQ6IERhdG9HcmlkU29ydDtcbiAgZmlsdGVyOiBEYXRvR3JpZEZpbHRlcnNNYXA7XG4gIGdyb3VwZWRDb2x1bW5zOiBzdHJpbmdbXTtcbiAgY29sdW1uc09yZGVyOiBzdHJpbmdbXTtcbiAgcGlubmVkQ29sdW1uczogc3RyaW5nW107XG4gIGhpZGRlbkNvbHVtbnM6IHN0cmluZ1tdO1xuICBjb2x1bW5zU2l6ZXM6IEhhc2hNYXA8bnVtYmVyPjtcbiAgZ3JpZEFsaWdubWVudDogRGF0b0dyaWRBbGlnbm1lbnQ7XG4gIHNlYXJjaFRlcm06IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZFN0b3JlU3RhdGUge1xuICBzZXR0aW5nczogRGF0b0dyaWRTZXR0aW5ncztcbiAgc2VydmVyU2lkZVBhZ2luYXRpb246IFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZmlnO1xufVxuXG5leHBvcnQgdHlwZSBQaXZvdENvbHVtbkRhdGEgPSB7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG59O1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { tryParsePivotValue } from './util';
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BkYXRvcmFtYS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2dyaWQtdjIvZ3JpZC1zdG9yZS9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZ3JpZC5zdG9yZS50eXBlcyc7XG5leHBvcnQgeyB0cnlQYXJzZVBpdm90VmFsdWUgfSBmcm9tICcuL3V0aWwnO1xuIl19
|