igniteui-angular 18.3.0-beta.0 → 18.3.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/data-operations/expressions-tree-util.mjs +148 -1
- package/esm2022/lib/data-operations/filtering-expressions-tree.mjs +1 -1
- package/esm2022/lib/data-operations/filtering-strategy.mjs +3 -2
- package/esm2022/lib/grids/filtering/excel-style/common.mjs +5 -6
- package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +3 -2
- package/esm2022/lib/grids/filtering/grid-filtering.service.mjs +14 -17
- package/esm2022/lib/grids/grid-base.directive.mjs +14 -11
- package/esm2022/lib/grids/state-base.directive.mjs +4 -69
- package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +3 -3
- package/esm2022/lib/query-builder/query-builder-tree.component.mjs +84 -38
- package/esm2022/lib/query-builder/query-builder.component.mjs +34 -4
- package/esm2022/public_api.mjs +2 -2
- package/fesm2022/igniteui-angular.mjs +18361 -18209
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/data-operations/expressions-tree-util.d.ts +24 -1
- package/lib/grids/state-base.directive.d.ts +1 -5
- package/lib/query-builder/query-builder-tree.component.d.ts +5 -0
- package/lib/query-builder/query-builder.component.d.ts +9 -2
- package/package.json +1 -1
- package/public_api.d.ts +1 -1
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
import { Directive, Optional, Input, Host, Inject, createComponent } from '@angular/core';
|
|
2
|
-
import { FilteringExpressionsTree } from '../data-operations/filtering-expressions-tree';
|
|
3
2
|
import { IgxColumnComponent } from './columns/column.component';
|
|
4
3
|
import { IgxColumnGroupComponent } from './columns/column-group.component';
|
|
5
4
|
import { GridColumnDataType } from '../data-operations/data-util';
|
|
6
|
-
import { IgxBooleanFilteringOperand, IgxNumberFilteringOperand, IgxDateFilteringOperand, IgxStringFilteringOperand, IgxDateTimeFilteringOperand } from '../data-operations/filtering-condition';
|
|
7
5
|
import { IgxGridComponent } from './grid/grid.component';
|
|
8
6
|
import { IGX_GRID_BASE } from './common/grid.interface';
|
|
9
7
|
import { IgxPivotGridComponent } from './pivot-grid/pivot-grid.component';
|
|
10
8
|
import { PivotUtil } from './pivot-grid/pivot-util';
|
|
11
9
|
import { IgxPivotDateDimension } from './pivot-grid/pivot-grid-dimensions';
|
|
12
10
|
import { cloneArray, cloneValue } from '../core/utils';
|
|
11
|
+
import { recreateTreeFromFields } from '../data-operations/expressions-tree-util';
|
|
13
12
|
import * as i0 from "@angular/core";
|
|
14
13
|
/* blazorElement */
|
|
15
14
|
/* wcElementTag: igc-grid-state-base-directive */
|
|
@@ -542,77 +541,13 @@ export class IgxGridStateBaseDirective {
|
|
|
542
541
|
}
|
|
543
542
|
}
|
|
544
543
|
/**
|
|
545
|
-
* This method builds a
|
|
544
|
+
* This method builds a rehydrated IExpressionTree from a provided object.
|
|
546
545
|
*/
|
|
547
546
|
createExpressionsTreeFromObject(exprTreeObject) {
|
|
548
547
|
if (!exprTreeObject || !exprTreeObject.filteringOperands) {
|
|
549
548
|
return null;
|
|
550
549
|
}
|
|
551
|
-
|
|
552
|
-
for (const item of exprTreeObject.filteringOperands) {
|
|
553
|
-
// Check if item is an expressions tree or a single expression.
|
|
554
|
-
if (item.filteringOperands) {
|
|
555
|
-
const subTree = this.createExpressionsTreeFromObject(item);
|
|
556
|
-
expressionsTree.filteringOperands.push(subTree);
|
|
557
|
-
}
|
|
558
|
-
else {
|
|
559
|
-
const expr = item;
|
|
560
|
-
let dataType;
|
|
561
|
-
if (this.currGrid instanceof IgxPivotGridComponent) {
|
|
562
|
-
dataType = this.currGrid.allDimensions.find(x => x.memberName === expr.fieldName).dataType;
|
|
563
|
-
}
|
|
564
|
-
else if (this.currGrid.columns.length > 0) {
|
|
565
|
-
dataType = this.currGrid.columns.find(c => c.field === expr.fieldName).dataType;
|
|
566
|
-
}
|
|
567
|
-
else if (this.state.columns) {
|
|
568
|
-
dataType = this.state.columns.find(c => c.field === expr.fieldName).dataType;
|
|
569
|
-
}
|
|
570
|
-
else {
|
|
571
|
-
return null;
|
|
572
|
-
}
|
|
573
|
-
// when ESF, values are stored in Set.
|
|
574
|
-
// First those values are converted to an array before returning string in the stringifyCallback
|
|
575
|
-
// now we need to convert those back to Set
|
|
576
|
-
if (Array.isArray(expr.searchVal)) {
|
|
577
|
-
expr.searchVal = new Set(expr.searchVal);
|
|
578
|
-
}
|
|
579
|
-
else {
|
|
580
|
-
expr.searchVal = expr.searchVal && (dataType === 'date' || dataType === 'dateTime') ? new Date(Date.parse(expr.searchVal.toString())) : expr.searchVal;
|
|
581
|
-
}
|
|
582
|
-
const condition = this.generateFilteringCondition(dataType, expr.condition.name) ||
|
|
583
|
-
this.currGrid.columns.find(c => c.field === expr.fieldName).filters.condition(expr.condition.name);
|
|
584
|
-
if (condition) {
|
|
585
|
-
expr.condition = condition;
|
|
586
|
-
expressionsTree.filteringOperands.push(expr);
|
|
587
|
-
}
|
|
588
|
-
}
|
|
589
|
-
}
|
|
590
|
-
return expressionsTree;
|
|
591
|
-
}
|
|
592
|
-
/**
|
|
593
|
-
* Returns the filtering logic function for a given dataType and condition (contains, greaterThan, etc.)
|
|
594
|
-
*/
|
|
595
|
-
generateFilteringCondition(dataType, name) {
|
|
596
|
-
let filters;
|
|
597
|
-
switch (dataType) {
|
|
598
|
-
case GridColumnDataType.Boolean:
|
|
599
|
-
filters = IgxBooleanFilteringOperand.instance();
|
|
600
|
-
break;
|
|
601
|
-
case GridColumnDataType.Number:
|
|
602
|
-
filters = IgxNumberFilteringOperand.instance();
|
|
603
|
-
break;
|
|
604
|
-
case GridColumnDataType.Date:
|
|
605
|
-
filters = IgxDateFilteringOperand.instance();
|
|
606
|
-
break;
|
|
607
|
-
case GridColumnDataType.DateTime:
|
|
608
|
-
filters = IgxDateTimeFilteringOperand.instance();
|
|
609
|
-
break;
|
|
610
|
-
case GridColumnDataType.String:
|
|
611
|
-
default:
|
|
612
|
-
filters = IgxStringFilteringOperand.instance();
|
|
613
|
-
break;
|
|
614
|
-
}
|
|
615
|
-
return filters.condition(name);
|
|
550
|
+
return recreateTreeFromFields(exprTreeObject, this.currGrid.columns);
|
|
616
551
|
}
|
|
617
552
|
stringifyCallback(key, val) {
|
|
618
553
|
if (key === 'searchVal' && val instanceof Set) {
|
|
@@ -642,4 +577,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
|
|
|
642
577
|
}] }, { type: i0.ViewContainerRef }, { type: i0.EnvironmentInjector }, { type: i0.Injector }], propDecorators: { options: [{
|
|
643
578
|
type: Input
|
|
644
579
|
}] } });
|
|
645
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtYmFzZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc3RhdGUtYmFzZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBb0IsTUFBTSxFQUFFLGVBQWUsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFDM0ksT0FBTyxFQUFFLHdCQUF3QixFQUE2QixNQUFNLCtDQUErQyxDQUFDO0FBRXBILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFDSCwwQkFBMEIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFDOUUseUJBQXlCLEVBQXVCLDJCQUEyQixFQUM5RSxNQUFNLHdDQUF3QyxDQUFDO0FBR2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXpELE9BQU8sRUFBd0IsYUFBYSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBQzlGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUE0RnZELG1CQUFtQjtBQUNuQixpREFBaUQ7QUFDakQsMEJBQTBCO0FBRTFCLE1BQU0sT0FBTyx5QkFBeUI7SUEyVmxDOzs7Ozs7OztP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QUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU8saUJBQWlCLENBQUMsV0FBdUI7UUFDN0MsT0FBTyxXQUFXLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuSSxDQUFDO0lBRU8sVUFBVSxDQUFDLEdBQVc7UUFDMUIsTUFBTSxPQUFPLEdBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDOzhHQXZuQlEseUJBQXlCLGtCQXNYRixhQUFhO2tHQXRYcEMseUJBQXlCOzsyRkFBekIseUJBQXlCO2tCQURyQyxTQUFTOzswQkF1WEQsSUFBSTs7MEJBQUksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhO2lJQWpCbEMsT0FBTztzQkFEakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT3B0aW9uYWwsIElucHV0LCBIb3N0LCBWaWV3Q29udGFpbmVyUmVmLCBJbmplY3QsIGNyZWF0ZUNvbXBvbmVudCwgRW52aXJvbm1lbnRJbmplY3RvciwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbnMvY29sdW1uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJR3JvdXBpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElQYWdpbmdTdGF0ZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9wYWdpbmctc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHtcbiAgICBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZCwgSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZCwgSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQsXG4gICAgSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZCwgSUZpbHRlcmluZ09wZXJhdGlvbiwgSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kXG59IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IElHcm91cEJ5RXhwYW5kU3RhdGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1leHBhbmQtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cGluZ1N0YXRlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25SYW5nZSB9IGZyb20gJy4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IENvbHVtblR5cGUsIEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFLCBJUGlubmluZ0NvbmZpZyB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneFBpdm90R3JpZENvbXBvbmVudCB9IGZyb20gJy4vcGl2b3QtZ3JpZC9waXZvdC1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJUGl2b3RDb25maWd1cmF0aW9uLCBJUGl2b3REaW1lbnNpb24gfSBmcm9tICcuL3Bpdm90LWdyaWQvcGl2b3QtZ3JpZC5pbnRlcmZhY2UnXG5pbXBvcnQgeyBQaXZvdFV0aWwgfSBmcm9tICcuL3Bpdm90LWdyaWQvcGl2b3QtdXRpbCc7XG5pbXBvcnQgeyBJZ3hQaXZvdERhdGVEaW1lbnNpb24gfSBmcm9tICcuL3Bpdm90LWdyaWQvcGl2b3QtZ3JpZC1kaW1lbnNpb25zJztcbmltcG9ydCB7IGNsb25lQXJyYXksIGNsb25lVmFsdWUgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBJR3JpZFN0YXRlIHtcbiAgICBjb2x1bW5zPzogSUNvbHVtblN0YXRlW107XG4gICAgZmlsdGVyaW5nPzogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBhZHZhbmNlZEZpbHRlcmluZz86IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgcGFnaW5nPzogSVBhZ2luZ1N0YXRlO1xuICAgIG1vdmluZz86IGJvb2xlYW47XG4gICAgc29ydGluZz86IElTb3J0aW5nRXhwcmVzc2lvbltdO1xuICAgIGdyb3VwQnk/OiBJR3JvdXBpbmdTdGF0ZTtcbiAgICBjZWxsU2VsZWN0aW9uPzogR3JpZFNlbGVjdGlvblJhbmdlW107XG4gICAgLyogYmxhem9yUHJpbWl0aXZlVmFsdWUgKi9cbiAgICByb3dTZWxlY3Rpb24/OiBhbnlbXTtcbiAgICBjb2x1bW5TZWxlY3Rpb24/OiBzdHJpbmdbXTtcbiAgICAvKiBibGF6b3JQcmltaXRpdmVWYWx1ZSAqL1xuICAgIHJvd1Bpbm5pbmc/OiBhbnlbXTtcbiAgICBwaW5uaW5nQ29uZmlnPzogSVBpbm5pbmdDb25maWc7XG4gICAgLyogYmxhem9yUHJpbWl0aXZlVmFsdWUgKi9cbiAgICBleHBhbnNpb24/OiBhbnlbXTtcbiAgICByb3dJc2xhbmRzPzogSUdyaWRTdGF0ZUNvbGxlY3Rpb25bXTtcbiAgICBpZD86IHN0cmluZztcbiAgICBwaXZvdENvbmZpZ3VyYXRpb24/OiBJUGl2b3RDb25maWd1cmF0aW9uO1xufVxuXG4vKiBtYXJzaGFsQnlWYWx1ZSAqL1xuZXhwb3J0IGludGVyZmFjZSBJR3JpZFN0YXRlQ29sbGVjdGlvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBwYXJlbnRSb3dJRDogYW55O1xuICAgIHN0YXRlOiBJR3JpZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGVPcHRpb25zIHtcbiAgICBjb2x1bW5zPzogYm9vbGVhbjtcbiAgICBmaWx0ZXJpbmc/OiBib29sZWFuO1xuICAgIGFkdmFuY2VkRmlsdGVyaW5nPzogYm9vbGVhbjtcbiAgICBzb3J0aW5nPzogYm9vbGVhbjtcbiAgICBncm91cEJ5PzogYm9vbGVhbjtcbiAgICBwYWdpbmc/OiBib29sZWFuO1xuICAgIGNlbGxTZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIHJvd1NlbGVjdGlvbj86IGJvb2xlYW47XG4gICAgY29sdW1uU2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgICByb3dQaW5uaW5nPzogYm9vbGVhbjtcbiAgICBwaW5uaW5nQ29uZmlnPzogYm9vbGVhbjtcbiAgICBleHBhbnNpb24/OiBib29sZWFuO1xuICAgIHJvd0lzbGFuZHM/OiBib29sZWFuO1xuICAgIG1vdmluZz86IGJvb2xlYW47XG4gICAgcGl2b3RDb25maWd1cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyogbWFyc2hhbEJ5VmFsdWUgKi9cbi8qIHRzUGxhaW5JbnRlcmZhY2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbHVtblN0YXRlIHtcbiAgICBwaW5uZWQ6IGJvb2xlYW47XG4gICAgc29ydGFibGU6IGJvb2xlYW47XG4gICAgZmlsdGVyYWJsZTogYm9vbGVhbjtcbiAgICBlZGl0YWJsZTogYm9vbGVhbjtcbiAgICBzb3J0aW5nSWdub3JlQ2FzZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJpbmdJZ25vcmVDYXNlOiBib29sZWFuO1xuICAgIGhlYWRlckNsYXNzZXM6IHN0cmluZztcbiAgICBoZWFkZXJHcm91cENsYXNzZXM6IHN0cmluZztcbiAgICBtYXhXaWR0aDogc3RyaW5nO1xuICAgIGdyb3VwYWJsZTogYm9vbGVhbjtcbiAgICBoaWRkZW46IGJvb2xlYW47XG4gICAgZGF0YVR5cGU6IEdyaWRDb2x1bW5EYXRhVHlwZTtcbiAgICBoYXNTdW1tYXJ5OiBib29sZWFuO1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgd2lkdGg6IGFueTtcbiAgICBoZWFkZXI6IHN0cmluZztcbiAgICByZXNpemFibGU6IGJvb2xlYW47XG4gICAgc2VhcmNoYWJsZTogYm9vbGVhbjtcbiAgICBjb2x1bW5Hcm91cDogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIHBhcmVudD86IGFueTtcbiAgICBrZXk6IHN0cmluZztcbiAgICBwYXJlbnRLZXk6IHN0cmluZztcbiAgICBkaXNhYmxlSGlkaW5nOiBib29sZWFuO1xuICAgIGRpc2FibGVQaW5uaW5nOiBib29sZWFuO1xuICAgIGNvbGxhcHNpYmxlPzogYm9vbGVhbjtcbiAgICBleHBhbmRlZD86IGJvb2xlYW47XG4gICAgdmlzaWJsZVdoZW5Db2xsYXBzZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBHcmlkRmVhdHVyZXMgPSBrZXlvZiBJR3JpZFN0YXRlT3B0aW9ucztcblxuaW50ZXJmYWNlIEZlYXR1cmUge1xuICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUpID0+IElHcmlkU3RhdGU7XG4gICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUsIHN0YXRlOiBJQ29sdW1uU3RhdGVbXSB8IElQYWdpbmdTdGF0ZSB8IGJvb2xlYW4gfCBJU29ydGluZ0V4cHJlc3Npb25bXSB8XG4gICAgICAgIElHcm91cGluZ1N0YXRlIHwgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB8IEdyaWRTZWxlY3Rpb25SYW5nZVtdIHwgSVBpbm5pbmdDb25maWcgfCBJUGl2b3RDb25maWd1cmF0aW9uIHwgYW55W10pID0+IHZvaWQ7XG59XG5cbi8qIGJsYXpvckVsZW1lbnQgKi9cbi8qIHdjRWxlbWVudFRhZzogaWdjLWdyaWQtc3RhdGUtYmFzZS1kaXJlY3RpdmUgKi9cbi8qIGJsYXpvckluZGlyZWN0UmVuZGVyICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlIHtcblxuICAgIHByaXZhdGUgZmVhdHVyZUtleXM6IEdyaWRGZWF0dXJlc1tdID0gW107XG4gICAgcHJpdmF0ZSBzdGF0ZTogSUdyaWRTdGF0ZTtcbiAgICBwcml2YXRlIGN1cnJHcmlkOiBHcmlkVHlwZTtcbiAgICBwcm90ZWN0ZWQgX29wdGlvbnM6IElHcmlkU3RhdGVPcHRpb25zID0ge1xuICAgICAgICBjb2x1bW5zOiB0cnVlLFxuICAgICAgICBmaWx0ZXJpbmc6IHRydWUsXG4gICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nOiB0cnVlLFxuICAgICAgICBzb3J0aW5nOiB0cnVlLFxuICAgICAgICBncm91cEJ5OiB0cnVlLFxuICAgICAgICBwYWdpbmc6IHRydWUsXG4gICAgICAgIGNlbGxTZWxlY3Rpb246IHRydWUsXG4gICAgICAgIHJvd1NlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgY29sdW1uU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICByb3dQaW5uaW5nOiB0cnVlLFxuICAgICAgICBleHBhbnNpb246IHRydWUsXG4gICAgICAgIG1vdmluZzogdHJ1ZSxcbiAgICAgICAgcm93SXNsYW5kczogdHJ1ZSxcbiAgICAgICAgcGl2b3RDb25maWd1cmF0aW9uOiB0cnVlXG4gICAgfTtcbiAgICBwcml2YXRlIEZFQVRVUkVTID0ge1xuICAgICAgICBzb3J0aW5nOiAge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQuc29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAgICAgICAgICAgIHNvcnRpbmdTdGF0ZS5mb3JFYWNoKHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcy5zdHJhdGVneTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHMub3duZXI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc29ydGluZzogc29ydGluZ1N0YXRlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUsIHN0YXRlOiBJU29ydGluZ0V4cHJlc3Npb25bXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc29ydGluZ0V4cHJlc3Npb25zID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlID0gY29udGV4dC5jdXJyR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWx0ZXJpbmdTdGF0ZS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbHRlcmluZ1N0YXRlLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgKGl0ZW0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZmlsdGVyaW5nOiBmaWx0ZXJpbmdTdGF0ZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlLCBzdGF0ZTogRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVHJlZSA9IGNvbnRleHQuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgPSBmaWx0ZXJUcmVlIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICAgICAgbGV0IGFkdmFuY2VkRmlsdGVyaW5nOiBhbnk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWx0ZXJpbmdTdGF0ZS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbHRlcmluZ1N0YXRlLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgKGl0ZW0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmcgPSBmaWx0ZXJpbmdTdGF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEZpbHRlcmluZyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBhZHZhbmNlZEZpbHRlcmluZyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlLCBzdGF0ZTogRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVHJlZSA9IGNvbnRleHQuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA9IGZpbHRlclRyZWUgYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZENvbHVtbnM6IElDb2x1bW5TdGF0ZVtdID0gY29udGV4dC5jdXJyR3JpZC5jb2x1bW5zLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBjLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgc29ydGFibGU6IGMuc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmFibGU6IGMuZmlsdGVyYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGMuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRpbmdJZ25vcmVDYXNlOiBjLnNvcnRpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJpbmdJZ25vcmVDYXNlOiBjLmZpbHRlcmluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckNsYXNzZXM6IGMuaGVhZGVyQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyR3JvdXBDbGFzc2VzOiBjLmhlYWRlckdyb3VwQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGMubWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwYWJsZTogYy5ncm91cGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogYy5oaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICBoYXNTdW1tYXJ5OiBjLmhhc1N1bW1hcnksXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogYy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBjLmhlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiBjLnJlc2l6YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZTogYy5zZWFyY2hhYmxlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBjLnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGtleTogYy5jb2x1bW5Hcm91cCA/IHRoaXMuZ2V0Q29sdW1uR3JvdXBLZXkoYykgOiBjLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRLZXk6IGMucGFyZW50ID8gdGhpcy5nZXRDb2x1bW5Hcm91cEtleShjLnBhcmVudCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwOiBjLmNvbHVtbkdyb3VwLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlSGlkaW5nOiBjLmRpc2FibGVIaWRpbmcsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVQaW5uaW5nOiBjLmRpc2FibGVQaW5uaW5nLFxuICAgICAgICAgICAgICAgICAgICBjb2xsYXBzaWJsZTogYy5jb2x1bW5Hcm91cCA/IGMuY29sbGFwc2libGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBjLmNvbHVtbkdyb3VwID8gYy5leHBhbmRlZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVdoZW5Db2xsYXBzZWQ6IGMucGFyZW50Py5jb2x1bW5Hcm91cCA/IChjIGFzIElneENvbHVtbkNvbXBvbmVudCkudmlzaWJsZVdoZW5Db2xsYXBzZWQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY29sdW1uczogZ3JpZENvbHVtbnMgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2goKGNvbFN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0NvbHVtbkdyb3VwID0gY29sU3RhdGUuY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2xTdGF0ZS5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVmMTogSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgPSBjb250ZXh0LmN1cnJHcmlkLmNvbHVtbnMuZmluZCh4ID0+IHguY29sdW1uR3JvdXAgJiYgKGNvbFN0YXRlLmtleSA/IHRoaXMuZ2V0Q29sdW1uR3JvdXBLZXkoeCkgPT09IGNvbFN0YXRlLmtleSA6IHguaGVhZGVyID09PSBjb2xTdGF0ZS5oZWFkZXIpKSBhcyBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVmMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmMSA9IGNvbXBvbmVudC5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYxLmNoaWxkcmVuLnJlc2V0KFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVmMSwgY29sU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmMS5ncmlkID0gY29udGV4dC5jdXJyR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xTdGF0ZS5wYXJlbnQgfHwgY29sU3RhdGUucGFyZW50S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uR3JvdXA6IElneENvbHVtbkdyb3VwQ29tcG9uZW50ID0gbmV3Q29sdW1ucy5maW5kKGUgPT4gZS5jb2x1bW5Hcm91cCAmJiAoZS5rZXkgPyBlLmtleSA9PT0gY29sU3RhdGUucGFyZW50S2V5IDogZS5oZWFkZXIgPT09IHJlZjEucGFyZW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR3JvdXAuY2hpbGRyZW4ucmVzZXQoWy4uLmNvbHVtbkdyb3VwLmNoaWxkcmVuLnRvQXJyYXkoKSwgcmVmMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjEucGFyZW50ID0gY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYxLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb2x1bW5zLnB1c2gocmVmMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVmOiBJZ3hDb2x1bW5Db21wb25lbnQgPSBjb250ZXh0LmN1cnJHcmlkLmNvbHVtbnMuZmluZCh4ID0+ICF4LmNvbHVtbkdyb3VwICYmIHguZmllbGQgPT09IGNvbFN0YXRlLmZpZWxkKSBhcyBJZ3hDb2x1bW5Db21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmID0gY29tcG9uZW50Lmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVmLCBjb2xTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuZ3JpZCA9IGNvbnRleHQuY3VyckdyaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sU3RhdGUucGFyZW50IHx8IGNvbFN0YXRlLnBhcmVudEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwOiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCA9IG5ld0NvbHVtbnMuZmluZChlID0+ICBlLmNvbHVtbkdyb3VwICYmIChlLmtleSA/IGUua2V5ID09PSBjb2xTdGF0ZS5wYXJlbnRLZXkgOiBlLmhlYWRlciA9PT0gcmVmLnBhcmVudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYucGFyZW50ID0gY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwLmNoaWxkcmVuLnJlc2V0KFsuLi5jb2x1bW5Hcm91cC5jaGlsZHJlbi50b0FycmF5KCksIHJlZl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sdW1ucy5wdXNoKHJlZik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnVwZGF0ZUNvbHVtbnMobmV3Q29sdW1ucyk7XG4gICAgICAgICAgICAgICAgbmV3Q29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIChjb250ZXh0LmN1cnJHcmlkIGFzIGFueSkuY29sdW1uSW5pdC5lbWl0KGNvbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncmlkID0gY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hHcmlkQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwaW5nRXhwcmVzc2lvbnMgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnM7XG4gICAgICAgICAgICAgICAgZ3JvdXBpbmdFeHByZXNzaW9ucy5mb3JFYWNoKGV4cHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXhwci5zdHJhdGVneTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZSA9IGdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cHNFeHBhbmRlZCA9IGdyaWQuZ3JvdXBzRXhwYW5kZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4geyBncm91cEJ5OiB7IGV4cHJlc3Npb25zOiBncm91cGluZ0V4cHJlc3Npb25zLCBleHBhbnNpb246IGV4cGFuc2lvblN0YXRlLCBkZWZhdWx0RXhwYW5kZWQ6IGdyb3Vwc0V4cGFuZGVkfSAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IElHcm91cGluZ1N0YXRlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGNvbnRleHQuY3VyckdyaWQgYXMgSWd4R3JpZENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBzdGF0ZS5leHByZXNzaW9ucyBhcyBJR3JvdXBpbmdFeHByZXNzaW9uW107XG4gICAgICAgICAgICAgICAgc3RhdGUuZXhwYW5zaW9uLmZvckVhY2goZXhwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwLmhpZXJhcmNoeS5mb3JFYWNoKGggPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVR5cGUgPSBncmlkLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGguZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhVHlwZS5pbmNsdWRlcyhHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZSkgfHwgZGF0YVR5cGUuaW5jbHVkZXMoR3JpZENvbHVtbkRhdGFUeXBlLlRpbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaC52YWx1ZSA9IGgudmFsdWUgPyBuZXcgRGF0ZShEYXRlLnBhcnNlKGgudmFsdWUpKSA6IGgudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChncmlkLmdyb3Vwc0V4cGFuZGVkICE9PSBzdGF0ZS5kZWZhdWx0RXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC50b2dnbGVBbGxHcm91cFJvd3MoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlID0gc3RhdGUuZXhwYW5zaW9uIGFzIElHcm91cEJ5RXhwYW5kU3RhdGVbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGFnaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLnBhZ2luZ1N0YXRlO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHBhZ2luZzogcGFnaW5nU3RhdGUgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IElQYWdpbmdTdGF0ZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5jdXJyR3JpZC5wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jdXJyR3JpZC5wZXJQYWdlICE9PSBzdGF0ZS5yZWNvcmRzUGVyUGFnZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBlclBhZ2UgPSBzdGF0ZS5yZWNvcmRzUGVyUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBhZ2UgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW92aW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbW92aW5nOiBjb250ZXh0LmN1cnJHcmlkLm1vdmluZyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQubW92aW5nID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd1NlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGNvbnRleHQuY3VyckdyaWQuc2VsZWN0aW9uU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb3dTZWxlY3Rpb246IHNlbGVjdGlvbiB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlLCBzdGF0ZTogYW55W10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdFJvd3Moc3RhdGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjZWxsU2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5nZXRTZWxlY3RlZFJhbmdlcygpLm1hcChyYW5nZSA9PlxuICAgICAgICAgICAgICAgICAgICAoeyByb3dTdGFydDogcmFuZ2Uucm93U3RhcnQsIHJvd0VuZDogcmFuZ2Uucm93RW5kLCBjb2x1bW5TdGFydDogcmFuZ2UuY29sdW1uU3RhcnQsIGNvbHVtbkVuZDogcmFuZ2UuY29sdW1uRW5kIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjZWxsU2VsZWN0aW9uOiBzZWxlY3Rpb24gfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IEdyaWRTZWxlY3Rpb25SYW5nZVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUuZm9yRWFjaChyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB7IHJvd1N0YXJ0OiByLnJvd1N0YXJ0LCByb3dFbmQ6IHIucm93RW5kLCBjb2x1bW5TdGFydDogci5jb2x1bW5TdGFydCwgY29sdW1uRW5kOiByLmNvbHVtbkVuZH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc2VsZWN0UmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5TZWxlY3Rpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdGVkQ29sdW1ucygpLm1hcChjID0+IGMuZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNvbHVtblNlbGVjdGlvbjogc2VsZWN0aW9uIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUsIHN0YXRlOiBzdHJpbmdbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuZGVzZWxlY3RBbGxDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RDb2x1bW5zKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93UGlubmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpbm5lZCA9IGNvbnRleHQuY3VyckdyaWQucGlubmVkUm93cz8ubWFwKHggPT4geC5rZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJvd1Bpbm5pbmc6IHBpbm5lZCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlLCBzdGF0ZTogYW55W10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhciBjdXJyZW50IHN0YXRlLlxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGlubmVkUm93cy5mb3JFYWNoKHJvdyA9PiByb3cudW5waW4oKSk7XG4gICAgICAgICAgICAgICAgc3RhdGUuZm9yRWFjaChyb3dJRCA9PiBjb250ZXh0LmN1cnJHcmlkLnBpblJvdyhyb3dJRCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwaW5uaW5nQ29uZmlnOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiAoeyBwaW5uaW5nQ29uZmlnOiBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgfSksXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IElQaW5uaW5nQ29uZmlnKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5waW5uaW5nID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGV4cGFuc2lvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IEFycmF5LmZyb20oY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGV4cGFuc2lvbjogZXhwYW5zaW9uU3RhdGVzIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUsIHN0YXRlOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IG5ldyBNYXA8YW55LCBib29sZWFuPihzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMgPSBleHBhbnNpb25TdGF0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd0lzbGFuZHM6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkU3RhdGVzOiBJR3JpZFN0YXRlQ29sbGVjdGlvbltdID0gW107XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SXNsYW5kcyA9IChjb250ZXh0LmN1cnJHcmlkIGFzIGFueSkuYWxsTGF5b3V0TGlzdDtcbiAgICAgICAgICAgICAgICBpZiAocm93SXNsYW5kcykge1xuICAgICAgICAgICAgICAgICAgICByb3dJc2xhbmRzLmZvckVhY2gocm93SXNsYW5kID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZHMgPSByb3dJc2xhbmQucm93SXNsYW5kQVBJLmdldENoaWxkR3JpZHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkR3JpZHMuZm9yRWFjaChjaEdyaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFJvd0lEID0gdGhpcy5nZXRQYXJlbnRSb3dJRChjaEdyaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjaEdyaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuY3VyckdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkU3RhdGUgPSBjb250ZXh0LmJ1aWxkU3RhdGUoY29udGV4dC5mZWF0dXJlS2V5cykgYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkU3RhdGVzLnB1c2goeyBpZDogYCR7cm93SXNsYW5kLmlkfWAsIHBhcmVudFJvd0lELCBzdGF0ZTogY2hpbGRHcmlkU3RhdGUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY29udGV4dC5ncmlkO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJvd0lzbGFuZHM6IGNoaWxkR3JpZFN0YXRlcyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGUoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IGFueSk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lzbGFuZHMgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBhbnkpLmFsbExheW91dExpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0lzbGFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kcy5mb3JFYWNoKHJvd0lzbGFuZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRzID0gcm93SXNsYW5kLnJvd0lzbGFuZEFQSS5nZXRDaGlsZEdyaWRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRzLmZvckVhY2goY2hHcmlkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRSb3dJRCA9IHRoaXMuZ2V0UGFyZW50Um93SUQoY2hHcmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY2hHcmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZFN0YXRlID0gc3RhdGUuZmluZChzdCA9PiBzdC5pZCA9PT0gcm93SXNsYW5kLmlkICYmIHN0LnBhcmVudFJvd0lEID09PSBwYXJlbnRSb3dJRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkR3JpZFN0YXRlICYmIGNvbnRleHQuY3VyckdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlR3JpZFN0YXRlKGNoaWxkR3JpZFN0YXRlLnN0YXRlLCBjb250ZXh0LmZlYXR1cmVLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjb250ZXh0LmdyaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUcmF2ZXJzZXMgdGhlIGhpZXJhcmNoeSB1cCB0byB0aGUgcm9vdCBncmlkIHRvIHJldHVybiB0aGUgSUQgb2YgdGhlIGV4cGFuZGVkIHJvdy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0UGFyZW50Um93SUQ6IChncmlkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkR3JpZDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoZ3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkID0gZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZCA9IGdyaWQucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JpZC5ncmlkQVBJLmdldFBhcmVudFJvd0lkKGNoaWxkR3JpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHBpdm90Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUpOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hQaXZvdEdyaWRDb21wb25lbnQpLnBpdm90Q29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZyB8fCAhKGNvbnRleHQuY3VyckdyaWQgaW5zdGFuY2VvZiBJZ3hQaXZvdEdyaWRDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBpdm90Q29uZmlndXJhdGlvbjogdW5kZWZpbmVkIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0NvcHkgPSBjbG9uZVZhbHVlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5yb3dzID0gY2xvbmVBcnJheShjb25maWcucm93cywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5jb2x1bW5zID0gY2xvbmVBcnJheShjb25maWcuY29sdW1ucywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5maWx0ZXJzID0gY2xvbmVBcnJheShjb25maWcuZmlsdGVycywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGltcyA9ICBbLi4uKGNvbmZpZ0NvcHkucm93cyB8fCBbXSksIC4uLihjb25maWdDb3B5LmNvbHVtbnMgfHwgW10pLCAuLi4oY29uZmlnQ29weS5maWx0ZXJzIHx8IFtdKV07XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZURpbWVuc2lvbnMgPSBkaW1zLmZpbHRlcih4ID0+IGNvbnRleHQuaXNEYXRlRGltZW5zaW9uKHgpKTtcbiAgICAgICAgICAgICAgICBkYXRlRGltZW5zaW9ucz8uZm9yRWFjaChkaW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3Qgc2VyaWFsaXplIHRoZSBncmlkIHJlc291cmNlIHN0cmluZ3MuIFRoaXMgd291bGQgcG9sbHV0ZSB0aGUgb2JqZWN0IHdpdGggdW5uZWNlc3NhcnkgZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgKGRpbSBhcyBJZ3hQaXZvdERhdGVEaW1lbnNpb24pLnJlc291cmNlU3RyaW5ncyA9IHt9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHBpdm90Q29uZmlndXJhdGlvbjogY29uZmlnQ29weSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGUoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IGFueSk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZzogSVBpdm90Q29uZmlndXJhdGlvbiA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIGlmICghY29uZmlnIHx8ICEoY29udGV4dC5jdXJyR3JpZCBpbnN0YW5jZW9mIElneFBpdm90R3JpZENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmVWYWx1ZXMoY29uZmlnLCBjb250ZXh0LmN1cnJHcmlkIGFzIElneFBpdm90R3JpZENvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlRGltZW5zaW9ucyhjb25maWcpO1xuICAgICAgICAgICAgICAgIChjb250ZXh0LmN1cnJHcmlkIGFzIElneFBpdm90R3JpZENvbXBvbmVudCkucGl2b3RDb25maWd1cmF0aW9uID0gY29uZmlnO1xuICAgICAgICAgICAgfSxcblxuXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMgZGV0ZXJtaW5pbmcgaWYgYSBjZXJ0YWluIGZlYXR1cmUgc3RhdGUgc2hvdWxkIGJlIHNhdmVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIG9wdGlvbnMgPSB7c2VsZWN0aW9uOiBmYWxzZSwgYWR2YW5jZWRGaWx0ZXJpbmc6IGZhbHNlfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgb3B0aW9ucygpOiBJR3JpZFN0YXRlT3B0aW9ucyB7XG4gICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBJR3JpZFN0YXRlT3B0aW9ucykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX29wdGlvbnMsIHZhbHVlKTtcbiAgICAgICAgaWYgKCEodGhpcy5ncmlkIGluc3RhbmNlb2YgSWd4R3JpZENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zLmdyb3VwQnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb3B0aW9ucy5yb3dJc2xhbmRzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASG9zdCgpIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHVibGljIGdyaWQ6IEdyaWRUeXBlLFxuICAgICAgICBwcm90ZWN0ZWQgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZiwgcHJvdGVjdGVkIGVudkluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLCAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcikgeyB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdGF0ZSBvZiBhIGZlYXR1cmUgb3Igc3RhdGVzIG9mIGFsbCBncmlkIGZlYXR1cmVzLCB1bmxlc3MgYSBjZXJ0YWluIGZlYXR1cmUgaXMgZGlzYWJsZWQgdGhyb3VnaCB0aGUgYG9wdGlvbnNgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGBzZXJpYWxpemVgIGRldGVybWluZXMgd2hldGhlciB0aGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgYmUgc2VyaWFsaXplZCB0byBKU09OIHN0cmluZy4gRGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgICAqIEBwYXJhbSBgZmVhdHVyZWAgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgZGV0ZXJtaW5pbmcgdGhlIGZlYXR1cmVzIHRvIGJlIGFkZGVkIGluIHRoZSBzdGF0ZS4gSWYgc2tpcHBlZCwgYWxsIGZlYXR1cmVzIGFyZSBhZGRlZC5cbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIHRvIEpTT04gc3RyaW5nIElHcmlkU3RhdGUgb2JqZWN0LCBvciB0aGUgbm9uLXNlcmlhbGl6ZWQgSUdyaWRTdGF0ZSBvYmplY3QuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZ3JpZCBbaWd4R3JpZFN0YXRlXT1cIm9wdGlvbnNcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHN0YXRlO1xuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGUuZ2V0U3RhdGUoKTsgLy8gcmV0dXJucyBzdHJpbmdcbiAgICAgKiBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlKGZhbHNlKSAvLyByZXR1cm5zIGBJR3JpZFN0YXRlYCBvYmplY3RcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0U3RhdGVJbnRlcm5hbChzZXJpYWxpemUgPSB0cnVlLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKTogSUdyaWRTdGF0ZSB8IHN0cmluZyAge1xuICAgICAgICBsZXQgc3RhdGU6IElHcmlkU3RhdGUgfCBzdHJpbmc7XG4gICAgICAgIHRoaXMuY3VyckdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSA9IHRoaXMuYnVpbGRTdGF0ZShmZWF0dXJlcykgYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgc3RhdGUgPSBKU09OLnN0cmluZ2lmeShzdGF0ZSwgdGhpcy5zdHJpbmdpZnlDYWxsYmFjaykgYXMgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvKiBibGF6b3JTdXBwcmVzcyAqL1xuICAgIC8qKlxuICAgICAqIFJlc3RvcmVzIGdyaWQgZmVhdHVyZXMnIHN0YXRlIGJhc2VkIG9uIHRoZSBJR3JpZFN0YXRlIG9iamVjdCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gSUdyaWRTdGF0ZSBvYmplY3QgdG8gcmVzdG9yZSBzdGF0ZSBmcm9tLlxuICAgICAqIEByZXR1cm5zXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZ3JpZCBbaWd4R3JpZFN0YXRlXT1cIm9wdGlvbnNcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHN0YXRlO1xuICAgICAqIHRoaXMuc3RhdGUuc2V0U3RhdGUoZ3JpZFN0YXRlKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2V0U3RhdGVJbnRlcm5hbChzdGF0ZTogSUdyaWRTdGF0ZSwgZmVhdHVyZXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHRoaXMuY3VyckdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIHRoaXMucmVzdG9yZUdyaWRTdGF0ZShzdGF0ZSwgZmVhdHVyZXMpO1xuICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8gVE9ET1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBhbiBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGJ1aWxkU3RhdGUoa2V5cz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKTogSUdyaWRTdGF0ZSB7XG4gICAgICAgIHRoaXMuYXBwbHlGZWF0dXJlcyhrZXlzKTtcbiAgICAgICAgbGV0IGdyaWRTdGF0ZSA9IHt9IGFzIElHcmlkU3RhdGU7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbZl0pIHtcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzLmdyaWQgaW5zdGFuY2VvZiBJZ3hHcmlkQ29tcG9uZW50KSAmJiBmID09PSAnZ3JvdXBCeScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5nZXRGZWF0dXJlKGYpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVTdGF0ZTogSUdyaWRTdGF0ZSA9IGZlYXR1cmU/LmdldEZlYXR1cmVTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICBncmlkU3RhdGUgPSBPYmplY3QuYXNzaWduKGdyaWRTdGF0ZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncmlkU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGNhbGxzIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyB0byByZXN0b3JlIGZlYXR1cmVzIGZyb20gdGhlIHBhc3NlZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVHcmlkU3RhdGUoc3RhdGU6IElHcmlkU3RhdGUsIGZlYXR1cmVzPzogR3JpZEZlYXR1cmVzIHwgR3JpZEZlYXR1cmVzW10pIHtcbiAgICAgICAgdGhpcy5hcHBseUZlYXR1cmVzKGZlYXR1cmVzKTtcbiAgICAgICAgdGhpcy5yZXN0b3JlRmVhdHVyZXMoc3RhdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdG9yZUZlYXR1cmVzKHN0YXRlOiBJR3JpZFN0YXRlKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbZl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGUgPSBzdGF0ZVtmXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gJ21vdmluZycgfHwgZmVhdHVyZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldEZlYXR1cmUoZik7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmUucmVzdG9yZUZlYXR1cmVTdGF0ZSh0aGlzLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgYWxsIGdyaWQgZmVhdHVyZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBseUZlYXR1cmVzKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gW107XG4gICAgICAgIGlmICgha2V5cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZUtleXMucHVzaChrZXkgYXMgR3JpZEZlYXR1cmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gWy4uLmtleXMgYXMgR3JpZEZlYXR1cmVzW11dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5wdXNoKGtleXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmVzdG9yZXMgY29tcGxleCBvYmplY3RzIGluIHRoZSBwaXZvdCBkaW1lbnNpb25zXG4gICAgICogTGlrZSB0aGUgSWd4UGl2b3REYXRlRGltZW5zaW9uIGFuZCBmaWx0ZXJzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzdG9yZURpbWVuc2lvbnMoY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gW2NvbmZpZy5yb3dzLCBjb25maWcuY29sdW1ucywgY29uZmlnLmZpbHRlcnNdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb2xsZWN0aW9uPy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW0gPSBjb2xsZWN0aW9uW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGVEaW1lbnNpb24oZGltKSkge1xuICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZURhdGVEaW1lbnNpb24oZGltIGFzIElneFBpdm90RGF0ZURpbWVuc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlc3RvcmUgY29tcGxleCBmaWx0ZXJzXG4gICAgICAgICAgICAgICAgaWYgKGRpbS5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGltLmZpbHRlciA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChkaW0uZmlsdGVyIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyB0aGUgSWd4UGl2b3REYXRlRGltZW5zaW9uIHdpdGggaXRzIGRlZmF1bHQgZnVuY3Rpb25zIGFuZCByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzdG9yZURhdGVEaW1lbnNpb24oZGltOiBJZ3hQaXZvdERhdGVEaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3QgZGF0ZURpbSA9IG5ldyBJZ3hQaXZvdERhdGVEaW1lbnNpb24oKGRpbSBhcyBhbnkpLl9iYXNlRGltZW5zaW9uLCAoZGltIGFzIGFueSkuX29wdGlvbnMpO1xuICAgICAgICAvLyByZXN0b3JlIGZ1bmN0aW9ucyBhbmQgcmVzb3VyY2Ugc3RyaW5nc1xuICAgICAgICBkaW0ucmVzb3VyY2VTdHJpbmdzID0gZGF0ZURpbS5yZXNvdXJjZVN0cmluZ3M7XG4gICAgICAgIGRpbS5tZW1iZXJGdW5jdGlvbiA9IGRhdGVEaW0ubWVtYmVyRnVuY3Rpb247XG4gICAgICAgIGxldCBjdXJyRGltOiBJUGl2b3REaW1lbnNpb24gPSBkaW07XG4gICAgICAgIGxldCBvcmlnaW5EaW06IElQaXZvdERpbWVuc2lvbiA9IGRhdGVEaW07XG4gICAgICAgIHdoaWxlIChjdXJyRGltLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgIGN1cnJEaW0gPSBjdXJyRGltLmNoaWxkTGV2ZWw7XG4gICAgICAgICAgICBvcmlnaW5EaW0gPSBvcmlnaW5EaW0uY2hpbGRMZXZlbDtcbiAgICAgICAgICAgIGN1cnJEaW0ubWVtYmVyRnVuY3Rpb24gPSBvcmlnaW5EaW0ubWVtYmVyRnVuY3Rpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoaXMgaXMgYSBJZ3hQaXZvdERhdGVEaW1lbnNpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0RhdGVEaW1lbnNpb24oZGltOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgcmV0dXJuIChkaW0gYXMgYW55KS5fYmFzZURpbWVuc2lvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyBjb21wbGV4IG9iamVjdHMgaW4gdGhlIHBpdm90IHZhbHVlcy5cbiAgICAgKiBMaWtlIHRoZSBkZWZhdWx0IGFnZ3JlZ2F0b3IgbWV0aG9kcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVWYWx1ZXMoY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uLCBncmlkOiBJZ3hQaXZvdEdyaWRDb21wb25lbnQpIHtcbiAgICAgICAgLy8gcmVzdG9yZSBhZ2dyZWdhdG9yIGZ1bmMgaWYgaXQgbWF0Y2hlcyB0aGUgZGVmYXVsdCBhZ2dyZWdhdG9ycyBrZXkgYW5kIGxhYmVsXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVMaXN0ID0gdmFsdWUuYWdncmVnYXRlTGlzdDtcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0b3JzID0gUGl2b3RVdGlsLmdldEFnZ3JlZ2F0b3JzRm9yVmFsdWUodmFsdWUsIGdyaWQpO1xuICAgICAgICAgICAgdmFsdWUuYWdncmVnYXRlLmFnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9ycy5maW5kKHggPT4geC5rZXkgPT09IHZhbHVlLmFnZ3JlZ2F0ZS5rZXkgJiYgeC5sYWJlbCA9PT0gdmFsdWUuYWdncmVnYXRlLmxhYmVsKT8uYWdncmVnYXRvcjtcbiAgICAgICAgICAgIGlmIChhZ2dyZWdhdGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhZyBvZiBhZ2dyZWdhdGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFnLmFnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9ycy5maW5kKHggPT4geC5rZXkgPT09IGFnLmtleSAmJiB4LmxhYmVsID09PSBhZy5sYWJlbCk/LmFnZ3JlZ2F0b3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgYnVpbGRzIGEgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIGZyb20gYSBwcm92aWRlZCBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KGV4cHJUcmVlT2JqZWN0OiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUge1xuICAgICAgICBpZiAoIWV4cHJUcmVlT2JqZWN0IHx8ICFleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKGV4cHJUcmVlT2JqZWN0Lm9wZXJhdG9yLCBleHByVHJlZU9iamVjdC5maWVsZE5hbWUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXRlbSBpcyBhbiBleHByZXNzaW9ucyB0cmVlIG9yIGEgc2luZ2xlIGV4cHJlc3Npb24uXG4gICAgICAgICAgICBpZiAoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YlRyZWUgPSB0aGlzLmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3QoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSk7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goc3ViVHJlZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSBpdGVtIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhVHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJHcmlkIGluc3RhbmNlb2YgSWd4UGl2b3RHcmlkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5jdXJyR3JpZC5hbGxEaW1lbnNpb25zLmZpbmQoeCA9PiB4Lm1lbWJlck5hbWUgPT09IGV4cHIuZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VyckdyaWQuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5jdXJyR3JpZC5jb2x1bW5zLmZpbmQoYyA9PiBjLmZpZWxkID09PSBleHByLmZpZWxkTmFtZSkuZGF0YVR5cGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSB0aGlzLnN0YXRlLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGV4cHIuZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBFU0YsIHZhbHVlcyBhcmUgc3RvcmVkIGluIFNldC5cbiAgICAgICAgICAgICAgICAvLyBGaXJzdCB0aG9zZSB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBhbiBhcnJheSBiZWZvcmUgcmV0dXJuaW5nIHN0cmluZyBpbiB0aGUgc3RyaW5naWZ5Q2FsbGJhY2tcbiAgICAgICAgICAgICAgICAvLyBub3cgd2UgbmVlZCB0byBjb252ZXJ0IHRob3NlIGJhY2sgdG8gU2V0XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwci5zZWFyY2hWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIuc2VhcmNoVmFsID0gbmV3IFNldChleHByLnNlYXJjaFZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5zZWFyY2hWYWwgPSBleHByLnNlYXJjaFZhbCAmJiAoZGF0YVR5cGUgPT09ICdkYXRlJyB8fCBkYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJykgPyBuZXcgRGF0ZShEYXRlLnBhcnNlKGV4cHIuc2VhcmNoVmFsLnRvU3RyaW5nKCkpKSA6IGV4cHIuc2VhcmNoVmFsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuZ2VuZXJhdGVGaWx0ZXJpbmdDb25kaXRpb24oZGF0YVR5cGUsIGV4cHIuY29uZGl0aW9uLm5hbWUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VyckdyaWQuY29sdW1ucy5maW5kKGMgPT4gYy5maWVsZCA9PT0gZXhwci5maWVsZE5hbWUpLmZpbHRlcnMuY29uZGl0aW9uKGV4cHIuY29uZGl0aW9uLm5hbWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBleHByLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goZXhwcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb25zVHJlZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBmaWx0ZXJpbmcgbG9naWMgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gZGF0YVR5cGUgYW5kIGNvbmRpdGlvbiAoY29udGFpbnMsIGdyZWF0ZXJUaGFuLCBldGMuKVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2VuZXJhdGVGaWx0ZXJpbmdDb25kaXRpb24oZGF0YVR5cGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogSUZpbHRlcmluZ09wZXJhdGlvbiB7XG4gICAgICAgIGxldCBmaWx0ZXJzO1xuICAgICAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyOlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hOdW1iZXJGaWx0ZXJpbmdPcGVyYW5kLmluc3RhbmNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEdyaWRDb2x1bW5EYXRhVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hEYXRlRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuU3RyaW5nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJzLmNvbmRpdGlvbihuYW1lKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc3RyaW5naWZ5Q2FsbGJhY2soa2V5OiBzdHJpbmcsIHZhbDogYW55KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdzZWFyY2hWYWwnICYmIHZhbCBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odmFsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uR3JvdXBLZXkoY29sdW1uR3JvdXA6IENvbHVtblR5cGUpIDogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbkdyb3VwLmNoaWxkQ29sdW1ucy5tYXAoeCA9PiB4LmNvbHVtbkdyb3VwID8geC5sZXZlbCArIFwiX1wiICsgdGhpcy5nZXRDb2x1bW5Hcm91cEtleSh4KSA6IHguZmllbGQpLnNvcnQoKS5qb2luKFwiX1wiKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZlYXR1cmUoa2V5OiBzdHJpbmcpOiBGZWF0dXJlIHtcbiAgICAgICAgY29uc3QgZmVhdHVyZTogRmVhdHVyZSA9IHRoaXMuRkVBVFVSRVNba2V5XTtcbiAgICAgICAgcmV0dXJuIGZlYXR1cmU7XG4gICAgfVxufVxuIl19
|
|
580
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtYmFzZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc3RhdGUtYmFzZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBb0IsTUFBTSxFQUFFLGVBQWUsRUFBaUMsTUFBTSxlQUFlLENBQUM7QUFFM0ksT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHM0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFJekQsT0FBTyxFQUF3QixhQUFhLEVBQWtCLE1BQU0seUJBQXlCLENBQUM7QUFDOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOztBQTRGbEYsbUJBQW1CO0FBQ25CLGlEQUFpRDtBQUNqRCwwQkFBMEI7QUFFMUIsTUFBTSxPQUFPLHlCQUF5QjtJQTJWbEM7Ozs7Ozs7O09BUUc7SUFDSCxJQUNXLE9BQU87UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsT0FBTyxDQUFDLEtBQXdCO1FBQ3ZDLE1BQU0s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QUFDO1FBQ2hCLENBQUM7UUFFRCxPQUFPLHNCQUFzQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBb0IsQ0FBQztJQUM1RixDQUFDO0lBRVMsaUJBQWlCLENBQUMsR0FBVyxFQUFFLEdBQVE7UUFDN0MsSUFBSSxHQUFHLEtBQUssV0FBVyxJQUFJLEdBQUcsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUM1QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFdBQXVCO1FBQzdDLE9BQU8sV0FBVyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkksQ0FBQztJQUVPLFVBQVUsQ0FBQyxHQUFXO1FBQzFCLE1BQU0sT0FBTyxHQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQzs4R0F2akJRLHlCQUF5QixrQkFzWEYsYUFBYTtrR0F0WHBDLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFEckMsU0FBUzs7MEJBdVhELElBQUk7OzBCQUFJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTtpSUFqQmxDLE9BQU87c0JBRGpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIE9wdGlvbmFsLCBJbnB1dCwgSG9zdCwgVmlld0NvbnRhaW5lclJlZiwgSW5qZWN0LCBjcmVhdGVDb21wb25lbnQsIEVudmlyb25tZW50SW5qZWN0b3IsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJRXhwcmVzc2lvblRyZWUsIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbnMvY29sdW1uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJR3JvdXBpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElQYWdpbmdTdGF0ZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9wYWdpbmctc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHsgSUdyb3VwQnlFeHBhbmRTdGF0ZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LWV4cGFuZC1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUdyb3VwaW5nU3RhdGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1zdGF0ZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4R3JpZENvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC9ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9oaWVyYXJjaGljYWwtZ3JpZC9oaWVyYXJjaGljYWwtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZFNlbGVjdGlvblJhbmdlIH0gZnJvbSAnLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgSVNvcnRpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL3NvcnRpbmctc3RyYXRlZ3knO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSwgR3JpZFR5cGUsIElHWF9HUklEX0JBU0UsIElQaW5uaW5nQ29uZmlnIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4UGl2b3RHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9waXZvdC1ncmlkL3Bpdm90LWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElQaXZvdENvbmZpZ3VyYXRpb24sIElQaXZvdERpbWVuc2lvbiB9IGZyb20gJy4vcGl2b3QtZ3JpZC9waXZvdC1ncmlkLmludGVyZmFjZSdcbmltcG9ydCB7IFBpdm90VXRpbCB9IGZyb20gJy4vcGl2b3QtZ3JpZC9waXZvdC11dGlsJztcbmltcG9ydCB7IElneFBpdm90RGF0ZURpbWVuc2lvbiB9IGZyb20gJy4vcGl2b3QtZ3JpZC9waXZvdC1ncmlkLWRpbWVuc2lvbnMnO1xuaW1wb3J0IHsgY2xvbmVBcnJheSwgY2xvbmVWYWx1ZSB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgcmVjcmVhdGVUcmVlRnJvbUZpZWxkcyB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9leHByZXNzaW9ucy10cmVlLXV0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGUge1xuICAgIGNvbHVtbnM/OiBJQ29sdW1uU3RhdGVbXTtcbiAgICBmaWx0ZXJpbmc/OiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgIGFkdmFuY2VkRmlsdGVyaW5nPzogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBwYWdpbmc/OiBJUGFnaW5nU3RhdGU7XG4gICAgbW92aW5nPzogYm9vbGVhbjtcbiAgICBzb3J0aW5nPzogSVNvcnRpbmdFeHByZXNzaW9uW107XG4gICAgZ3JvdXBCeT86IElHcm91cGluZ1N0YXRlO1xuICAgIGNlbGxTZWxlY3Rpb24/OiBHcmlkU2VsZWN0aW9uUmFuZ2VbXTtcbiAgICAvKiBibGF6b3JQcmltaXRpdmVWYWx1ZSAqL1xuICAgIHJvd1NlbGVjdGlvbj86IGFueVtdO1xuICAgIGNvbHVtblNlbGVjdGlvbj86IHN0cmluZ1tdO1xuICAgIC8qIGJsYXpvclByaW1pdGl2ZVZhbHVlICovXG4gICAgcm93UGlubmluZz86IGFueVtdO1xuICAgIHBpbm5pbmdDb25maWc/OiBJUGlubmluZ0NvbmZpZztcbiAgICAvKiBibGF6b3JQcmltaXRpdmVWYWx1ZSAqL1xuICAgIGV4cGFuc2lvbj86IGFueVtdO1xuICAgIHJvd0lzbGFuZHM/OiBJR3JpZFN0YXRlQ29sbGVjdGlvbltdO1xuICAgIGlkPzogc3RyaW5nO1xuICAgIHBpdm90Q29uZmlndXJhdGlvbj86IElQaXZvdENvbmZpZ3VyYXRpb247XG59XG5cbi8qIG1hcnNoYWxCeVZhbHVlICovXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGVDb2xsZWN0aW9uIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHBhcmVudFJvd0lEOiBhbnk7XG4gICAgc3RhdGU6IElHcmlkU3RhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRTdGF0ZU9wdGlvbnMge1xuICAgIGNvbHVtbnM/OiBib29sZWFuO1xuICAgIGZpbHRlcmluZz86IGJvb2xlYW47XG4gICAgYWR2YW5jZWRGaWx0ZXJpbmc/OiBib29sZWFuO1xuICAgIHNvcnRpbmc/OiBib29sZWFuO1xuICAgIGdyb3VwQnk/OiBib29sZWFuO1xuICAgIHBhZ2luZz86IGJvb2xlYW47XG4gICAgY2VsbFNlbGVjdGlvbj86IGJvb2xlYW47XG4gICAgcm93U2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgICBjb2x1bW5TZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIHJvd1Bpbm5pbmc/OiBib29sZWFuO1xuICAgIHBpbm5pbmdDb25maWc/OiBib29sZWFuO1xuICAgIGV4cGFuc2lvbj86IGJvb2xlYW47XG4gICAgcm93SXNsYW5kcz86IGJvb2xlYW47XG4gICAgbW92aW5nPzogYm9vbGVhbjtcbiAgICBwaXZvdENvbmZpZ3VyYXRpb24/OiBib29sZWFuO1xufVxuXG4vKiBtYXJzaGFsQnlWYWx1ZSAqL1xuLyogdHNQbGFpbkludGVyZmFjZSAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uU3RhdGUge1xuICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgICBzb3J0YWJsZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJhYmxlOiBib29sZWFuO1xuICAgIGVkaXRhYmxlOiBib29sZWFuO1xuICAgIHNvcnRpbmdJZ25vcmVDYXNlOiBib29sZWFuO1xuICAgIGZpbHRlcmluZ0lnbm9yZUNhc2U6IGJvb2xlYW47XG4gICAgaGVhZGVyQ2xhc3Nlczogc3RyaW5nO1xuICAgIGhlYWRlckdyb3VwQ2xhc3Nlczogc3RyaW5nO1xuICAgIG1heFdpZHRoOiBzdHJpbmc7XG4gICAgZ3JvdXBhYmxlOiBib29sZWFuO1xuICAgIGhpZGRlbjogYm9vbGVhbjtcbiAgICBkYXRhVHlwZTogR3JpZENvbHVtbkRhdGFUeXBlO1xuICAgIGhhc1N1bW1hcnk6IGJvb2xlYW47XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICB3aWR0aDogYW55O1xuICAgIGhlYWRlcjogc3RyaW5nO1xuICAgIHJlc2l6YWJsZTogYm9vbGVhbjtcbiAgICBzZWFyY2hhYmxlOiBib29sZWFuO1xuICAgIGNvbHVtbkdyb3VwOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICovXG4gICAgcGFyZW50PzogYW55O1xuICAgIGtleTogc3RyaW5nO1xuICAgIHBhcmVudEtleTogc3RyaW5nO1xuICAgIGRpc2FibGVIaWRpbmc6IGJvb2xlYW47XG4gICAgZGlzYWJsZVBpbm5pbmc6IGJvb2xlYW47XG4gICAgY29sbGFwc2libGU/OiBib29sZWFuO1xuICAgIGV4cGFuZGVkPzogYm9vbGVhbjtcbiAgICB2aXNpYmxlV2hlbkNvbGxhcHNlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEdyaWRGZWF0dXJlcyA9IGtleW9mIElHcmlkU3RhdGVPcHRpb25zO1xuXG5pbnRlcmZhY2UgRmVhdHVyZSB7XG4gICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSkgPT4gSUdyaWRTdGF0ZTtcbiAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdIHwgSVBhZ2luZ1N0YXRlIHwgYm9vbGVhbiB8IElTb3J0aW5nRXhwcmVzc2lvbltdIHxcbiAgICAgICAgSUdyb3VwaW5nU3RhdGUgfCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIHwgR3JpZFNlbGVjdGlvblJhbmdlW10gfCBJUGlubmluZ0NvbmZpZyB8IElQaXZvdENvbmZpZ3VyYXRpb24gfCBhbnlbXSkgPT4gdm9pZDtcbn1cblxuLyogYmxhem9yRWxlbWVudCAqL1xuLyogd2NFbGVtZW50VGFnOiBpZ2MtZ3JpZC1zdGF0ZS1iYXNlLWRpcmVjdGl2ZSAqL1xuLyogYmxhem9ySW5kaXJlY3RSZW5kZXIgKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUge1xuXG4gICAgcHJpdmF0ZSBmZWF0dXJlS2V5czogR3JpZEZlYXR1cmVzW10gPSBbXTtcbiAgICBwcml2YXRlIHN0YXRlOiBJR3JpZFN0YXRlO1xuICAgIHByaXZhdGUgY3VyckdyaWQ6IEdyaWRUeXBlO1xuICAgIHByb3RlY3RlZCBfb3B0aW9uczogSUdyaWRTdGF0ZU9wdGlvbnMgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRydWUsXG4gICAgICAgIGZpbHRlcmluZzogdHJ1ZSxcbiAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmc6IHRydWUsXG4gICAgICAgIHNvcnRpbmc6IHRydWUsXG4gICAgICAgIGdyb3VwQnk6IHRydWUsXG4gICAgICAgIHBhZ2luZzogdHJ1ZSxcbiAgICAgICAgY2VsbFNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgcm93U2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICBjb2x1bW5TZWxlY3Rpb246IHRydWUsXG4gICAgICAgIHJvd1Bpbm5pbmc6IHRydWUsXG4gICAgICAgIGV4cGFuc2lvbjogdHJ1ZSxcbiAgICAgICAgbW92aW5nOiB0cnVlLFxuICAgICAgICByb3dJc2xhbmRzOiB0cnVlLFxuICAgICAgICBwaXZvdENvbmZpZ3VyYXRpb246IHRydWVcbiAgICB9O1xuICAgIHByaXZhdGUgRkVBVFVSRVMgPSB7XG4gICAgICAgIHNvcnRpbmc6ICB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gY29udGV4dC5jdXJyR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnM7XG4gICAgICAgICAgICAgICAgc29ydGluZ1N0YXRlLmZvckVhY2gocyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzLnN0cmF0ZWd5O1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcy5vd25lcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzb3J0aW5nOiBzb3J0aW5nU3RhdGUgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IElTb3J0aW5nRXhwcmVzc2lvbltdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgPSBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyaW5nU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpbHRlcmluZ1N0YXRlLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyaW5nU3RhdGUuZmlsdGVyaW5nT3BlcmFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAoaXRlbSBhcyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaWx0ZXJpbmc6IGZpbHRlcmluZ1N0YXRlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUsIHN0YXRlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVHJlZSA9IGNvbnRleHQuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgPSBmaWx0ZXJUcmVlIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgICAgIGxldCBhZHZhbmNlZEZpbHRlcmluZzogYW55O1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJpbmdTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmlsdGVyaW5nU3RhdGUub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXJpbmdTdGF0ZS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIChpdGVtIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nID0gZmlsdGVyaW5nU3RhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmcgPSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgYWR2YW5jZWRGaWx0ZXJpbmcgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJUcmVlID0gY29udGV4dC5jcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gZmlsdGVyVHJlZSBhcyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5zOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZENvbHVtbnM6IElDb2x1bW5TdGF0ZVtdID0gY29udGV4dC5jdXJyR3JpZC5jb2x1bW5zLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBjLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgc29ydGFibGU6IGMuc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmFibGU6IGMuZmlsdGVyYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGMuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRpbmdJZ25vcmVDYXNlOiBjLnNvcnRpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJpbmdJZ25vcmVDYXNlOiBjLmZpbHRlcmluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckNsYXNzZXM6IGMuaGVhZGVyQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyR3JvdXBDbGFzc2VzOiBjLmhlYWRlckdyb3VwQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGMubWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwYWJsZTogYy5ncm91cGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogYy5oaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICBoYXNTdW1tYXJ5OiBjLmhhc1N1bW1hcnksXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogYy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBjLmhlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiBjLnJlc2l6YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZTogYy5zZWFyY2hhYmxlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBjLnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGtleTogYy5jb2x1bW5Hcm91cCA/IHRoaXMuZ2V0Q29sdW1uR3JvdXBLZXkoYykgOiBjLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRLZXk6IGMucGFyZW50ID8gdGhpcy5nZXRDb2x1bW5Hcm91cEtleShjLnBhcmVudCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwOiBjLmNvbHVtbkdyb3VwLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlSGlkaW5nOiBjLmRpc2FibGVIaWRpbmcsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVQaW5uaW5nOiBjLmRpc2FibGVQaW5uaW5nLFxuICAgICAgICAgICAgICAgICAgICBjb2xsYXBzaWJsZTogYy5jb2x1bW5Hcm91cCA/IGMuY29sbGFwc2libGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBjLmNvbHVtbkdyb3VwID8gYy5leHBhbmRlZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVdoZW5Db2xsYXBzZWQ6IGMucGFyZW50Py5jb2x1bW5Hcm91cCA/IChjIGFzIElneENvbHVtbkNvbXBvbmVudCkudmlzaWJsZVdoZW5Db2xsYXBzZWQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgY29sdW1uczogZ3JpZENvbHVtbnMgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2goKGNvbFN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0NvbHVtbkdyb3VwID0gY29sU3RhdGUuY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2xTdGF0ZS5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVmMTogSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgPSBjb250ZXh0LmN1cnJHcmlkLmNvbHVtbnMuZmluZCh4ID0+IHguY29sdW1uR3JvdXAgJiYgKGNvbFN0YXRlLmtleSA/IHRoaXMuZ2V0Q29sdW1uR3JvdXBLZXkoeCkgPT09IGNvbFN0YXRlLmtleSA6IHguaGVhZGVyID09PSBjb2xTdGF0ZS5oZWFkZXIpKSBhcyBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVmMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmMSA9IGNvbXBvbmVudC5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYxLmNoaWxkcmVuLnJlc2V0KFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVmMSwgY29sU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmMS5ncmlkID0gY29udGV4dC5jdXJyR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xTdGF0ZS5wYXJlbnQgfHwgY29sU3RhdGUucGFyZW50S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uR3JvdXA6IElneENvbHVtbkdyb3VwQ29tcG9uZW50ID0gbmV3Q29sdW1ucy5maW5kKGUgPT4gZS5jb2x1bW5Hcm91cCAmJiAoZS5rZXkgPyBlLmtleSA9PT0gY29sU3RhdGUucGFyZW50S2V5IDogZS5oZWFkZXIgPT09IHJlZjEucGFyZW50KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR3JvdXAuY2hpbGRyZW4ucmVzZXQoWy4uLmNvbHVtbkdyb3VwLmNoaWxkcmVuLnRvQXJyYXkoKSwgcmVmMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjEucGFyZW50ID0gY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYxLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb2x1bW5zLnB1c2gocmVmMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVmOiBJZ3hDb2x1bW5Db21wb25lbnQgPSBjb250ZXh0LmN1cnJHcmlkLmNvbHVtbnMuZmluZCh4ID0+ICF4LmNvbHVtbkdyb3VwICYmIHguZmllbGQgPT09IGNvbFN0YXRlLmZpZWxkKSBhcyBJZ3hDb2x1bW5Db21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmID0gY29tcG9uZW50Lmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVmLCBjb2xTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYuZ3JpZCA9IGNvbnRleHQuY3VyckdyaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sU3RhdGUucGFyZW50IHx8IGNvbFN0YXRlLnBhcmVudEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwOiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCA9IG5ld0NvbHVtbnMuZmluZChlID0+ICBlLmNvbHVtbkdyb3VwICYmIChlLmtleSA/IGUua2V5ID09PSBjb2xTdGF0ZS5wYXJlbnRLZXkgOiBlLmhlYWRlciA9PT0gcmVmLnBhcmVudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYucGFyZW50ID0gY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwLmNoaWxkcmVuLnJlc2V0KFsuLi5jb2x1bW5Hcm91cC5jaGlsZHJlbi50b0FycmF5KCksIHJlZl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sdW1ucy5wdXNoKHJlZik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnVwZGF0ZUNvbHVtbnMobmV3Q29sdW1ucyk7XG4gICAgICAgICAgICAgICAgbmV3Q29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIChjb250ZXh0LmN1cnJHcmlkIGFzIGFueSkuY29sdW1uSW5pdC5lbWl0KGNvbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdyb3VwQnk6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncmlkID0gY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hHcmlkQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwaW5nRXhwcmVzc2lvbnMgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnM7XG4gICAgICAgICAgICAgICAgZ3JvdXBpbmdFeHByZXNzaW9ucy5mb3JFYWNoKGV4cHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXhwci5zdHJhdGVneTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZSA9IGdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cHNFeHBhbmRlZCA9IGdyaWQuZ3JvdXBzRXhwYW5kZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4geyBncm91cEJ5OiB7IGV4cHJlc3Npb25zOiBncm91cGluZ0V4cHJlc3Npb25zLCBleHBhbnNpb246IGV4cGFuc2lvblN0YXRlLCBkZWZhdWx0RXhwYW5kZWQ6IGdyb3Vwc0V4cGFuZGVkfSAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IElHcm91cGluZ1N0YXRlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGNvbnRleHQuY3VyckdyaWQgYXMgSWd4R3JpZENvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBzdGF0ZS5leHByZXNzaW9ucyBhcyBJR3JvdXBpbmdFeHByZXNzaW9uW107XG4gICAgICAgICAgICAgICAgc3RhdGUuZXhwYW5zaW9uLmZvckVhY2goZXhwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwLmhpZXJhcmNoeS5mb3JFYWNoKGggPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVR5cGUgPSBncmlkLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGguZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhVHlwZS5pbmNsdWRlcyhHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZSkgfHwgZGF0YVR5cGUuaW5jbHVkZXMoR3JpZENvbHVtbkRhdGFUeXBlLlRpbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaC52YWx1ZSA9IGgudmFsdWUgPyBuZXcgRGF0ZShEYXRlLnBhcnNlKGgudmFsdWUpKSA6IGgudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChncmlkLmdyb3Vwc0V4cGFuZGVkICE9PSBzdGF0ZS5kZWZhdWx0RXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC50b2dnbGVBbGxHcm91cFJvd3MoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlID0gc3RhdGUuZXhwYW5zaW9uIGFzIElHcm91cEJ5RXhwYW5kU3RhdGVbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGFnaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLnBhZ2luZ1N0YXRlO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHBhZ2luZzogcGFnaW5nU3RhdGUgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IElQYWdpbmdTdGF0ZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghY29udGV4dC5jdXJyR3JpZC5wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jdXJyR3JpZC5wZXJQYWdlICE9PSBzdGF0ZS5yZWNvcmRzUGVyUGFnZSkge1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBlclBhZ2UgPSBzdGF0ZS5yZWNvcmRzUGVyUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBhZ2UgPSBzdGF0ZS5pbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbW92aW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbW92aW5nOiBjb250ZXh0LmN1cnJHcmlkLm1vdmluZyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQubW92aW5nID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd1NlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IGNvbnRleHQuY3VyckdyaWQuc2VsZWN0aW9uU2VydmljZS5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb3dTZWxlY3Rpb246IHNlbGVjdGlvbiB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlLCBzdGF0ZTogYW55W10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdFJvd3Moc3RhdGUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjZWxsU2VsZWN0aW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5nZXRTZWxlY3RlZFJhbmdlcygpLm1hcChyYW5nZSA9PlxuICAgICAgICAgICAgICAgICAgICAoeyByb3dTdGFydDogcmFuZ2Uucm93U3RhcnQsIHJvd0VuZDogcmFuZ2Uucm93RW5kLCBjb2x1bW5TdGFydDogcmFuZ2UuY29sdW1uU3RhcnQsIGNvbHVtbkVuZDogcmFuZ2UuY29sdW1uRW5kIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjZWxsU2VsZWN0aW9uOiBzZWxlY3Rpb24gfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IEdyaWRTZWxlY3Rpb25SYW5nZVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUuZm9yRWFjaChyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB7IHJvd1N0YXJ0OiByLnJvd1N0YXJ0LCByb3dFbmQ6IHIucm93RW5kLCBjb2x1bW5TdGFydDogci5jb2x1bW5TdGFydCwgY29sdW1uRW5kOiByLmNvbHVtbkVuZH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc2VsZWN0UmFuZ2UocmFuZ2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjb2x1bW5TZWxlY3Rpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBjb250ZXh0LmN1cnJHcmlkLnNlbGVjdGVkQ29sdW1ucygpLm1hcChjID0+IGMuZmllbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNvbHVtblNlbGVjdGlvbjogc2VsZWN0aW9uIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUsIHN0YXRlOiBzdHJpbmdbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuZGVzZWxlY3RBbGxDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RDb2x1bW5zKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93UGlubmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpbm5lZCA9IGNvbnRleHQuY3VyckdyaWQucGlubmVkUm93cz8ubWFwKHggPT4geC5rZXkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJvd1Bpbm5pbmc6IHBpbm5lZCB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlLCBzdGF0ZTogYW55W10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjbGVhciBjdXJyZW50IHN0YXRlLlxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGlubmVkUm93cy5mb3JFYWNoKHJvdyA9PiByb3cudW5waW4oKSk7XG4gICAgICAgICAgICAgICAgc3RhdGUuZm9yRWFjaChyb3dJRCA9PiBjb250ZXh0LmN1cnJHcmlkLnBpblJvdyhyb3dJRCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwaW5uaW5nQ29uZmlnOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiAoeyBwaW5uaW5nQ29uZmlnOiBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgfSksXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IElQaW5uaW5nQ29uZmlnKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5waW5uaW5nID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGV4cGFuc2lvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IEFycmF5LmZyb20oY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGV4cGFuc2lvbjogZXhwYW5zaW9uU3RhdGVzIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUsIHN0YXRlOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IG5ldyBNYXA8YW55LCBib29sZWFuPihzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMgPSBleHBhbnNpb25TdGF0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd0lzbGFuZHM6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVCYXNlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkU3RhdGVzOiBJR3JpZFN0YXRlQ29sbGVjdGlvbltdID0gW107XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93SXNsYW5kcyA9IChjb250ZXh0LmN1cnJHcmlkIGFzIGFueSkuYWxsTGF5b3V0TGlzdDtcbiAgICAgICAgICAgICAgICBpZiAocm93SXNsYW5kcykge1xuICAgICAgICAgICAgICAgICAgICByb3dJc2xhbmRzLmZvckVhY2gocm93SXNsYW5kID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZHMgPSByb3dJc2xhbmQucm93SXNsYW5kQVBJLmdldENoaWxkR3JpZHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkR3JpZHMuZm9yRWFjaChjaEdyaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFJvd0lEID0gdGhpcy5nZXRQYXJlbnRSb3dJRChjaEdyaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjaEdyaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQuY3VyckdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkU3RhdGUgPSBjb250ZXh0LmJ1aWxkU3RhdGUoY29udGV4dC5mZWF0dXJlS2V5cykgYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkU3RhdGVzLnB1c2goeyBpZDogYCR7cm93SXNsYW5kLmlkfWAsIHBhcmVudFJvd0lELCBzdGF0ZTogY2hpbGRHcmlkU3RhdGUgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY29udGV4dC5ncmlkO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJvd0lzbGFuZHM6IGNoaWxkR3JpZFN0YXRlcyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGUoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IGFueSk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0lzbGFuZHMgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBhbnkpLmFsbExheW91dExpc3Q7XG4gICAgICAgICAgICAgICAgaWYgKHJvd0lzbGFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93SXNsYW5kcy5mb3JFYWNoKHJvd0lzbGFuZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRzID0gcm93SXNsYW5kLnJvd0lzbGFuZEFQSS5nZXRDaGlsZEdyaWRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRzLmZvckVhY2goY2hHcmlkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRSb3dJRCA9IHRoaXMuZ2V0UGFyZW50Um93SUQoY2hHcmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY2hHcmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkR3JpZFN0YXRlID0gc3RhdGUuZmluZChzdCA9PiBzdC5pZCA9PT0gcm93SXNsYW5kLmlkICYmIHN0LnBhcmVudFJvd0lEID09PSBwYXJlbnRSb3dJRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkR3JpZFN0YXRlICYmIGNvbnRleHQuY3VyckdyaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlR3JpZFN0YXRlKGNoaWxkR3JpZFN0YXRlLnN0YXRlLCBjb250ZXh0LmZlYXR1cmVLZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjb250ZXh0LmdyaWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUcmF2ZXJzZXMgdGhlIGhpZXJhcmNoeSB1cCB0byB0aGUgcm9vdCBncmlkIHRvIHJldHVybiB0aGUgSUQgb2YgdGhlIGV4cGFuZGVkIHJvdy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0UGFyZW50Um93SUQ6IChncmlkOiBJZ3hIaWVyYXJjaGljYWxHcmlkQ29tcG9uZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNoaWxkR3JpZDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoZ3JpZC5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkID0gZ3JpZDtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZCA9IGdyaWQucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZ3JpZC5ncmlkQVBJLmdldFBhcmVudFJvd0lkKGNoaWxkR3JpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHBpdm90Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlKGNvbnRleHQ6IElneEdyaWRTdGF0ZUJhc2VEaXJlY3RpdmUpOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hQaXZvdEdyaWRDb21wb25lbnQpLnBpdm90Q29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZyB8fCAhKGNvbnRleHQuY3VyckdyaWQgaW5zdGFuY2VvZiBJZ3hQaXZvdEdyaWRDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBpdm90Q29uZmlndXJhdGlvbjogdW5kZWZpbmVkIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0NvcHkgPSBjbG9uZVZhbHVlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5yb3dzID0gY2xvbmVBcnJheShjb25maWcucm93cywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5jb2x1bW5zID0gY2xvbmVBcnJheShjb25maWcuY29sdW1ucywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5maWx0ZXJzID0gY2xvbmVBcnJheShjb25maWcuZmlsdGVycywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGltcyA9ICBbLi4uKGNvbmZpZ0NvcHkucm93cyB8fCBbXSksIC4uLihjb25maWdDb3B5LmNvbHVtbnMgfHwgW10pLCAuLi4oY29uZmlnQ29weS5maWx0ZXJzIHx8IFtdKV07XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZURpbWVuc2lvbnMgPSBkaW1zLmZpbHRlcih4ID0+IGNvbnRleHQuaXNEYXRlRGltZW5zaW9uKHgpKTtcbiAgICAgICAgICAgICAgICBkYXRlRGltZW5zaW9ucz8uZm9yRWFjaChkaW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3Qgc2VyaWFsaXplIHRoZSBncmlkIHJlc291cmNlIHN0cmluZ3MuIFRoaXMgd291bGQgcG9sbHV0ZSB0aGUgb2JqZWN0IHdpdGggdW5uZWNlc3NhcnkgZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgKGRpbSBhcyBJZ3hQaXZvdERhdGVEaW1lbnNpb24pLnJlc291cmNlU3RyaW5ncyA9IHt9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHBpdm90Q29uZmlndXJhdGlvbjogY29uZmlnQ29weSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGUoY29udGV4dDogSWd4R3JpZFN0YXRlQmFzZURpcmVjdGl2ZSwgc3RhdGU6IGFueSk6IHZvaWQge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZzogSVBpdm90Q29uZmlndXJhdGlvbiA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIGlmICghY29uZmlnIHx8ICEoY29udGV4dC5jdXJyR3JpZCBpbnN0YW5jZW9mIElneFBpdm90R3JpZENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmVWYWx1ZXMoY29uZmlnLCBjb250ZXh0LmN1cnJHcmlkIGFzIElneFBpdm90R3JpZENvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5yZXN0b3JlRGltZW5zaW9ucyhjb25maWcpO1xuICAgICAgICAgICAgICAgIChjb250ZXh0LmN1cnJHcmlkIGFzIElneFBpdm90R3JpZENvbXBvbmVudCkucGl2b3RDb25maWd1cmF0aW9uID0gY29uZmlnO1xuICAgICAgICAgICAgfSxcblxuXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMgZGV0ZXJtaW5pbmcgaWYgYSBjZXJ0YWluIGZlYXR1cmUgc3RhdGUgc2hvdWxkIGJlIHNhdmVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIG9wdGlvbnMgPSB7c2VsZWN0aW9uOiBmYWxzZSwgYWR2YW5jZWRGaWx0ZXJpbmc6IGZhbHNlfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgb3B0aW9ucygpOiBJR3JpZFN0YXRlT3B0aW9ucyB7XG4gICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBvcHRpb25zKHZhbHVlOiBJR3JpZFN0YXRlT3B0aW9ucykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX29wdGlvbnMsIHZhbHVlKTtcbiAgICAgICAgaWYgKCEodGhpcy5ncmlkIGluc3RhbmNlb2YgSWd4R3JpZENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zLmdyb3VwQnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fb3B0aW9ucy5yb3dJc2xhbmRzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASG9zdCgpIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0dSSURfQkFTRSkgcHVibGljIGdyaWQ6IEdyaWRUeXBlLFxuICAgICAgICBwcm90ZWN0ZWQgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZiwgcHJvdGVjdGVkIGVudkluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yLCAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcikgeyB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBzdGF0ZSBvZiBhIGZlYXR1cmUgb3Igc3RhdGVzIG9mIGFsbCBncmlkIGZlYXR1cmVzLCB1bmxlc3MgYSBjZXJ0YWluIGZlYXR1cmUgaXMgZGlzYWJsZWQgdGhyb3VnaCB0aGUgYG9wdGlvbnNgIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGBzZXJpYWxpemVgIGRldGVybWluZXMgd2hldGhlciB0aGUgcmV0dXJuZWQgb2JqZWN0IHdpbGwgYmUgc2VyaWFsaXplZCB0byBKU09OIHN0cmluZy4gRGVmYXVsdCB2YWx1ZSBpcyB0cnVlLlxuICAgICAqIEBwYXJhbSBgZmVhdHVyZWAgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MgZGV0ZXJtaW5pbmcgdGhlIGZlYXR1cmVzIHRvIGJlIGFkZGVkIGluIHRoZSBzdGF0ZS4gSWYgc2tpcHBlZCwgYWxsIGZlYXR1cmVzIGFyZSBhZGRlZC5cbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBzZXJpYWxpemVkIHRvIEpTT04gc3RyaW5nIElHcmlkU3RhdGUgb2JqZWN0LCBvciB0aGUgbm9uLXNlcmlhbGl6ZWQgSUdyaWRTdGF0ZSBvYmplY3QuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZ3JpZCBbaWd4R3JpZFN0YXRlXT1cIm9wdGlvbnNcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHN0YXRlO1xuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGUuZ2V0U3RhdGUoKTsgLy8gcmV0dXJucyBzdHJpbmdcbiAgICAgKiBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlKGZhbHNlKSAvLyByZXR1cm5zIGBJR3JpZFN0YXRlYCBvYmplY3RcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0U3RhdGVJbnRlcm5hbChzZXJpYWxpemUgPSB0cnVlLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKTogSUdyaWRTdGF0ZSB8IHN0cmluZyAge1xuICAgICAgICBsZXQgc3RhdGU6IElHcmlkU3RhdGUgfCBzdHJpbmc7XG4gICAgICAgIHRoaXMuY3VyckdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSA9IHRoaXMuYnVpbGRTdGF0ZShmZWF0dXJlcykgYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgc3RhdGUgPSBKU09OLnN0cmluZ2lmeShzdGF0ZSwgdGhpcy5zdHJpbmdpZnlDYWxsYmFjaykgYXMgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvKiBibGF6b3JTdXBwcmVzcyAqL1xuICAgIC8qKlxuICAgICAqIFJlc3RvcmVzIGdyaWQgZmVhdHVyZXMnIHN0YXRlIGJhc2VkIG9uIHRoZSBJR3JpZFN0YXRlIG9iamVjdCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gSUdyaWRTdGF0ZSBvYmplY3QgdG8gcmVzdG9yZSBzdGF0ZSBmcm9tLlxuICAgICAqIEByZXR1cm5zXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtZ3JpZCBbaWd4R3JpZFN0YXRlXT1cIm9wdGlvbnNcIj48L2lneC1ncmlkPlxuICAgICAqIGBgYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHN0YXRlO1xuICAgICAqIHRoaXMuc3RhdGUuc2V0U3RhdGUoZ3JpZFN0YXRlKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2V0U3RhdGVJbnRlcm5hbChzdGF0ZTogSUdyaWRTdGF0ZSwgZmVhdHVyZXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHRoaXMuY3VyckdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIHRoaXMucmVzdG9yZUdyaWRTdGF0ZShzdGF0ZSwgZmVhdHVyZXMpO1xuICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTsgLy8gVE9ET1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJ1aWxkcyBhbiBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGJ1aWxkU3RhdGUoa2V5cz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKTogSUdyaWRTdGF0ZSB7XG4gICAgICAgIHRoaXMuYXBwbHlGZWF0dXJlcyhrZXlzKTtcbiAgICAgICAgbGV0IGdyaWRTdGF0ZSA9IHt9IGFzIElHcmlkU3RhdGU7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbZl0pIHtcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzLmdyaWQgaW5zdGFuY2VvZiBJZ3hHcmlkQ29tcG9uZW50KSAmJiBmID09PSAnZ3JvdXBCeScpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5nZXRGZWF0dXJlKGYpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVTdGF0ZTogSUdyaWRTdGF0ZSA9IGZlYXR1cmU/LmdldEZlYXR1cmVTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICBncmlkU3RhdGUgPSBPYmplY3QuYXNzaWduKGdyaWRTdGF0ZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncmlkU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGNhbGxzIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyB0byByZXN0b3JlIGZlYXR1cmVzIGZyb20gdGhlIHBhc3NlZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVHcmlkU3RhdGUoc3RhdGU6IElHcmlkU3RhdGUsIGZlYXR1cmVzPzogR3JpZEZlYXR1cmVzIHwgR3JpZEZlYXR1cmVzW10pIHtcbiAgICAgICAgdGhpcy5hcHBseUZlYXR1cmVzKGZlYXR1cmVzKTtcbiAgICAgICAgdGhpcy5yZXN0b3JlRmVhdHVyZXMoc3RhdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdG9yZUZlYXR1cmVzKHN0YXRlOiBJR3JpZFN0YXRlKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbZl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGUgPSBzdGF0ZVtmXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gJ21vdmluZycgfHwgZmVhdHVyZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldEZlYXR1cmUoZik7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmUucmVzdG9yZUZlYXR1cmVTdGF0ZSh0aGlzLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgYWxsIGdyaWQgZmVhdHVyZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBseUZlYXR1cmVzKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gW107XG4gICAgICAgIGlmICgha2V5cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZUtleXMucHVzaChrZXkgYXMgR3JpZEZlYXR1cmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gWy4uLmtleXMgYXMgR3JpZEZlYXR1cmVzW11dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5wdXNoKGtleXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmVzdG9yZXMgY29tcGxleCBvYmplY3RzIGluIHRoZSBwaXZvdCBkaW1lbnNpb25zXG4gICAgICogTGlrZSB0aGUgSWd4UGl2b3REYXRlRGltZW5zaW9uIGFuZCBmaWx0ZXJzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzdG9yZURpbWVuc2lvbnMoY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gW2NvbmZpZy5yb3dzLCBjb25maWcuY29sdW1ucywgY29uZmlnLmZpbHRlcnNdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb2xsZWN0aW9uPy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW0gPSBjb2xsZWN0aW9uW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGVEaW1lbnNpb24oZGltKSkge1xuICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZURhdGVEaW1lbnNpb24oZGltIGFzIElneFBpdm90RGF0ZURpbWVuc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlc3RvcmUgY29tcGxleCBmaWx0ZXJzXG4gICAgICAgICAgICAgICAgaWYgKGRpbS5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGltLmZpbHRlciA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChkaW0uZmlsdGVyKSBhcyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmVzdG9yZXMgdGhlIElneFBpdm90RGF0ZURpbWVuc2lvbiB3aXRoIGl0cyBkZWZhdWx0IGZ1bmN0aW9ucyBhbmQgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVEYXRlRGltZW5zaW9uKGRpbTogSWd4UGl2b3REYXRlRGltZW5zaW9uKSB7XG4gICAgICAgIGNvbnN0IGRhdGVEaW0gPSBuZXcgSWd4UGl2b3REYXRlRGltZW5zaW9uKChkaW0gYXMgYW55KS5fYmFzZURpbWVuc2lvbiwgKGRpbSBhcyBhbnkpLl9vcHRpb25zKTtcbiAgICAgICAgLy8gcmVzdG9yZSBmdW5jdGlvbnMgYW5kIHJlc291cmNlIHN0cmluZ3NcbiAgICAgICAgZGltLnJlc291cmNlU3RyaW5ncyA9IGRhdGVEaW0ucmVzb3VyY2VTdHJpbmdzO1xuICAgICAgICBkaW0ubWVtYmVyRnVuY3Rpb24gPSBkYXRlRGltLm1lbWJlckZ1bmN0aW9uO1xuICAgICAgICBsZXQgY3VyckRpbTogSVBpdm90RGltZW5zaW9uID0gZGltO1xuICAgICAgICBsZXQgb3JpZ2luRGltOiBJUGl2b3REaW1lbnNpb24gPSBkYXRlRGltO1xuICAgICAgICB3aGlsZSAoY3VyckRpbS5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICBjdXJyRGltID0gY3VyckRpbS5jaGlsZExldmVsO1xuICAgICAgICAgICAgb3JpZ2luRGltID0gb3JpZ2luRGltLmNoaWxkTGV2ZWw7XG4gICAgICAgICAgICBjdXJyRGltLm1lbWJlckZ1bmN0aW9uID0gb3JpZ2luRGltLm1lbWJlckZ1bmN0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGlzIGlzIGEgSWd4UGl2b3REYXRlRGltZW5zaW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgaXNEYXRlRGltZW5zaW9uKGRpbTogSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgIHJldHVybiAoZGltIGFzIGFueSkuX2Jhc2VEaW1lbnNpb247XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmVzdG9yZXMgY29tcGxleCBvYmplY3RzIGluIHRoZSBwaXZvdCB2YWx1ZXMuXG4gICAgICogTGlrZSB0aGUgZGVmYXVsdCBhZ2dyZWdhdG9yIG1ldGhvZHMuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXN0b3JlVmFsdWVzKGNvbmZpZzogSVBpdm90Q29uZmlndXJhdGlvbiwgZ3JpZDogSWd4UGl2b3RHcmlkQ29tcG9uZW50KSB7XG4gICAgICAgIC8vIHJlc3RvcmUgYWdncmVnYXRvciBmdW5jIGlmIGl0IG1hdGNoZXMgdGhlIGRlZmF1bHQgYWdncmVnYXRvcnMga2V5IGFuZCBsYWJlbFxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBjb25maWcudmFsdWVzO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgY29uc3QgYWdncmVnYXRlTGlzdCA9IHZhbHVlLmFnZ3JlZ2F0ZUxpc3Q7XG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdG9ycyA9IFBpdm90VXRpbC5nZXRBZ2dyZWdhdG9yc0ZvclZhbHVlKHZhbHVlLCBncmlkKTtcbiAgICAgICAgICAgIHZhbHVlLmFnZ3JlZ2F0ZS5hZ2dyZWdhdG9yID0gYWdncmVnYXRvcnMuZmluZCh4ID0+IHgua2V5ID09PSB2YWx1ZS5hZ2dyZWdhdGUua2V5ICYmIHgubGFiZWwgPT09IHZhbHVlLmFnZ3JlZ2F0ZS5sYWJlbCk/LmFnZ3JlZ2F0b3I7XG4gICAgICAgICAgICBpZiAoYWdncmVnYXRlTGlzdCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYWcgb2YgYWdncmVnYXRlTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICBhZy5hZ2dyZWdhdG9yID0gYWdncmVnYXRvcnMuZmluZCh4ID0+IHgua2V5ID09PSBhZy5rZXkgJiYgeC5sYWJlbCA9PT0gYWcubGFiZWwpPy5hZ2dyZWdhdG9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGJ1aWxkcyBhIHJlaHlkcmF0ZWQgSUV4cHJlc3Npb25UcmVlIGZyb20gYSBwcm92aWRlZCBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KGV4cHJUcmVlT2JqZWN0OiBJRXhwcmVzc2lvblRyZWUpOiBJRXhwcmVzc2lvblRyZWUge1xuICAgICAgICBpZiAoIWV4cHJUcmVlT2JqZWN0IHx8ICFleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVjcmVhdGVUcmVlRnJvbUZpZWxkcyhleHByVHJlZU9iamVjdCwgdGhpcy5jdXJyR3JpZC5jb2x1bW5zKSBhcyBJRXhwcmVzc2lvblRyZWU7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHN0cmluZ2lmeUNhbGxiYWNrKGtleTogc3RyaW5nLCB2YWw6IGFueSkge1xuICAgICAgICBpZiAoa2V5ID09PSAnc2VhcmNoVmFsJyAmJiB2YWwgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtbkdyb3VwS2V5KGNvbHVtbkdyb3VwOiBDb2x1bW5UeXBlKSA6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBjb2x1bW5Hcm91cC5jaGlsZENvbHVtbnMubWFwKHggPT4geC5jb2x1bW5Hcm91cCA/IHgubGV2ZWwgKyBcIl9cIiArIHRoaXMuZ2V0Q29sdW1uR3JvdXBLZXkoeCkgOiB4LmZpZWxkKS5zb3J0KCkuam9pbihcIl9cIik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGZWF0dXJlKGtleTogc3RyaW5nKTogRmVhdHVyZSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmU6IEZlYXR1cmUgPSB0aGlzLkZFQVRVUkVTW2tleV07XG4gICAgICAgIHJldHVybiBmZWF0dXJlO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -4,7 +4,7 @@ import { IgxIconComponent } from '../../icon/icon.component';
|
|
|
4
4
|
import { NgClass, NgIf } from '@angular/common';
|
|
5
5
|
import { IgxRippleDirective } from '../../directives/ripple/ripple.directive';
|
|
6
6
|
import { IgxButtonDirective } from '../../directives/button/button.directive';
|
|
7
|
-
import {
|
|
7
|
+
import { isTree } from '../../data-operations/expressions-tree-util';
|
|
8
8
|
import * as i0 from "@angular/core";
|
|
9
9
|
import * as i1 from "./token";
|
|
10
10
|
/* blazorElement */
|
|
@@ -51,7 +51,7 @@ export class IgxGridToolbarAdvancedFilteringComponent {
|
|
|
51
51
|
if (!filteringTree)
|
|
52
52
|
return columnNames;
|
|
53
53
|
filteringTree.filteringOperands.forEach((expr) => {
|
|
54
|
-
if (expr
|
|
54
|
+
if (isTree(expr)) {
|
|
55
55
|
columnNames.push(...this.extractUniqueFieldNamesFromFilterTree(expr));
|
|
56
56
|
}
|
|
57
57
|
else {
|
|
@@ -72,4 +72,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImpor
|
|
|
72
72
|
}] }], propDecorators: { overlaySettings: [{
|
|
73
73
|
type: Input
|
|
74
74
|
}] } });
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvdG9vbGJhci9ncmlkLXRvb2xiYXItYWR2YW5jZWQtZmlsdGVyaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy90b29sYmFyL2dyaWQtdG9vbGJhci1hZHZhbmNlZC1maWx0ZXJpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFFOUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7QUFFckUsbUJBQW1CO0FBQ25CLHVEQUF1RDtBQUN2RCwwQkFBMEI7QUFDMUIsb0RBQW9EO0FBQ3BELCtCQUErQjtBQUMvQiw4QkFBOEI7QUFDOUI7Ozs7Ozs7Ozs7OztHQVlHO0FBT0gsTUFBTSxPQUFPLHdDQUF3QztJQUVqRDs7O09BR0c7SUFDSCxJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFLRCxZQUE4QyxPQUF3QjtRQUF4QixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUNsRSxJQUFJLENBQUMsSUFBSSxFQUFFLHNDQUFzQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUN4RSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1SyxDQUFDO0lBRVMscUNBQXFDLENBQUMsYUFBeUM7UUFDckYsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDdkMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ2YsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzFFLENBQUM7aUJBQU0sQ0FBQztnQkFDSixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7OEdBckNRLHdDQUF3QyxrQkFhNUIsZUFBZTtrR0FiM0Isd0NBQXdDLCtJQ25DckQsZzZCQWFBLDRDRG9CYyxrQkFBa0Isb0lBQUUsa0JBQWtCLGlLQUFXLGdCQUFnQiwyRkFBRSxJQUFJOzsyRkFFeEUsd0NBQXdDO2tCQU5wRCxTQUFTOytCQUNJLHFDQUFxQyxjQUVuQyxJQUFJLFdBQ1AsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDOzswQkFlcEUsTUFBTTsyQkFBQyxlQUFlO3lDQUY3QixlQUFlO3NCQURyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hUb29sYmFyVG9rZW4gfSBmcm9tICcuL3Rva2VuJztcbmltcG9ydCB7IE92ZXJsYXlTZXR0aW5ncyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL292ZXJsYXkvdXRpbGl0aWVzJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IE5nQ2xhc3MsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSWd4UmlwcGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hCdXR0b25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2J1dHRvbi9idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgaXNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2V4cHJlc3Npb25zLXRyZWUtdXRpbCc7XG5cbi8qIGJsYXpvckVsZW1lbnQgKi9cbi8qIHdjRWxlbWVudFRhZzogaWdjLWdyaWQtdG9vbGJhci1hZHZhbmNlZC1maWx0ZXJpbmcgKi9cbi8qIGJsYXpvckluZGlyZWN0UmVuZGVyICovXG4vKiBibGF6b3JBbHRlcm5hdGVCYXNlVHlwZTogR3JpZFRvb2xiYXJCYXNlQWN0aW9uICovXG4vKiBqc29uQVBJTWFuYWdlSXRlbUluTWFya3VwICovXG4vKiBzaW5nbGVJbnN0YW5jZUlkZW50aWZpZXIgKi9cbi8qKlxuICogUHJvdmlkZXMgYSBwcmUtY29uZmlndXJlZCBidXR0b24gdG8gb3BlbiB0aGUgYWR2YW5jZWQgZmlsdGVyaW5nIGRpYWxvZyBvZiB0aGUgZ3JpZC5cbiAqXG4gKlxuICogQGlneE1vZHVsZSBJZ3hHcmlkVG9vbGJhck1vZHVsZVxuICogQGlneFBhcmVudCBJZ3hHcmlkVG9vbGJhckNvbXBvbmVudFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LWdyaWQtdG9vbGJhci1hZHZhbmNlZC1maWx0ZXJpbmc+PC9pZ3gtZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZz5cbiAqIDxpZ3gtZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZz5DdXN0b20gdGV4dDwvaWd4LWdyaWQtdG9vbGJhci1hZHZhbmNlZC1maWx0ZXJpbmc+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtZ3JpZC10b29sYmFyLWFkdmFuY2VkLWZpbHRlcmluZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQtdG9vbGJhci1hZHZhbmNlZC1maWx0ZXJpbmcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0lneEJ1dHRvbkRpcmVjdGl2ZSwgSWd4UmlwcGxlRGlyZWN0aXZlLCBOZ0NsYXNzLCBJZ3hJY29uQ29tcG9uZW50LCBOZ0lmXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkVG9vbGJhckFkdmFuY2VkRmlsdGVyaW5nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgcHJvdGVjdGVkIG51bWJlck9mQ29sdW1uczogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGdyaWQgY29udGFpbmluZyB0aGlzIGNvbXBvbmVudC5cbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZ3JpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhci5ncmlkO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzO1xuXG4gICAgY29uc3RydWN0b3IoIEBJbmplY3QoSWd4VG9vbGJhclRva2VuKSBwcml2YXRlIHRvb2xiYXI6IElneFRvb2xiYXJUb2tlbikge1xuICAgICAgICB0aGlzLmdyaWQ/LmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlQ2hhbmdlLnN1YnNjcmliZShmaWx0ZXJpbmdUcmVlID0+IHtcbiAgICAgICAgICAgIHRoaXMubnVtYmVyT2ZDb2x1bW5zID0gdGhpcy5leHRyYWN0VW5pcXVlRmllbGROYW1lc0Zyb21GaWx0ZXJUcmVlKGZpbHRlcmluZ1RyZWUpLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubnVtYmVyT2ZDb2x1bW5zID0gdGhpcy5ncmlkPy5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSA/IHRoaXMuZXh0cmFjdFVuaXF1ZUZpZWxkTmFtZXNGcm9tRmlsdGVyVHJlZSh0aGlzLmdyaWQ/LmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5sZW5ndGggOiAwO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBleHRyYWN0VW5pcXVlRmllbGROYW1lc0Zyb21GaWx0ZXJUcmVlKGZpbHRlcmluZ1RyZWU/OiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSA6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgY29sdW1uTmFtZXMgPSBbXTtcbiAgICAgICAgaWYgKCFmaWx0ZXJpbmdUcmVlKSByZXR1cm4gY29sdW1uTmFtZXM7XG4gICAgICAgIGZpbHRlcmluZ1RyZWUuZmlsdGVyaW5nT3BlcmFuZHMuZm9yRWFjaCgoZXhwcikgPT4ge1xuICAgICAgICAgICAgaWYgKGlzVHJlZShleHByKSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVzLnB1c2goLi4udGhpcy5leHRyYWN0VW5pcXVlRmllbGROYW1lc0Zyb21GaWx0ZXJUcmVlKGV4cHIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZXMucHVzaChleHByLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gWy4uLm5ldyBTZXQoY29sdW1uTmFtZXMpXTtcbiAgICB9XG59XG4iLCI8YnV0dG9uIGlneEJ1dHRvbj1cIm91dGxpbmVkXCIgdHlwZT1cImJ1dHRvblwiIG5hbWU9XCJidG5BZHZhbmNlZEZpbHRlcmluZ1wiIGlneFJpcHBsZVxuICAgIFt0aXRsZV09XCJncmlkPy5yZXNvdXJjZVN0cmluZ3MuaWd4X2dyaWRfdG9vbGJhcl9hZHZhbmNlZF9maWx0ZXJpbmdfYnV0dG9uX3Rvb2x0aXBcIlxuICAgIChjbGljayk9XCJncmlkLm9wZW5BZHZhbmNlZEZpbHRlcmluZ0RpYWxvZyhvdmVybGF5U2V0dGluZ3MpXCJcbiAgICBjbGFzcz1cImlneC1ncmlkLXRvb2xiYXJfX2Fkdi1maWx0ZXJcIj5cbiAgICA8aWd4LWljb24gZmFtaWx5PVwiZGVmYXVsdFwiIG5hbWU9XCJmaWx0ZXJfbGlzdFwiPjwvaWd4LWljb24+XG4gICAgPHNwYW4gI3JlZj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvc3Bhbj5cbiAgICA8IS0tIEQuUC4gZml4KGVsZW1lbnRzKTogQW5ndWxhciB0cmltcyBjaGlsZCBub2RlcywgbmF0aXZlIGRvZXNuJ3QgbGVhdmluZyB3aGl0ZSBzcGFjZSB3aGVuIG90aGVyIGl0ZW1zIHByb2plY3RcbiAgICB0ZXh0Q29udGVudCAoYXZvaWRzIGxheW91dCB0cmFzaCBvZiBpbm5lclRleHQpIHNob3VsZCBhdm9pZCB3aXBpbmcgdGhlIGRlZmF1bHQgdGV4dCB3aXRob3V0IHVzZXIgc2V0IG9uZSAtLT5cbiAgICA8c3BhbiAqbmdJZj1cIiFyZWYudGV4dENvbnRlbnQudHJpbSgpXCI+e3sgZ3JpZD8ucmVzb3VyY2VTdHJpbmdzLmlneF9ncmlkX3Rvb2xiYXJfYWR2YW5jZWRfZmlsdGVyaW5nX2J1dHRvbl9sYWJlbCB9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImlneC1hZHYtZmlsdGVyLS1jb2x1bW4tbnVtYmVyXCIgKm5nSWY9XCJncmlkPy5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZVwiPiAoe3sgbnVtYmVyT2ZDb2x1bW5zIH19KSA8L3NwYW4+XG48L2J1dHRvbj5cbiJdfQ==
|