igniteui-angular 12.3.27 → 12.3.28
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/bundles/igniteui-angular.umd.js +146 -148
- package/bundles/igniteui-angular.umd.js.map +1 -1
- package/esm2015/lib/grids/api.service.js +2 -2
- package/esm2015/lib/grids/columns/column.component.js +5 -5
- package/esm2015/lib/grids/grid/grid.component.js +11 -11
- package/esm2015/lib/grids/grid-base.directive.js +72 -76
- package/esm2015/lib/grids/grid-mrl-navigation.service.js +2 -2
- package/esm2015/lib/grids/grid-public-row.js +3 -3
- package/esm2015/lib/grids/grouping/group-by-area.directive.js +1 -1
- package/esm2015/lib/grids/grouping/tree-grid-group-by-area.component.js +6 -6
- package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.js +4 -5
- package/esm2015/lib/grids/hierarchical-grid/hierarchical-grid.component.js +23 -14
- package/esm2015/lib/grids/hierarchical-grid/row-island.component.js +7 -11
- package/esm2015/lib/grids/state.directive.js +12 -9
- package/esm2015/lib/grids/summaries/grid-summary.service.js +5 -5
- package/esm2015/lib/grids/tree-grid/tree-grid.component.js +7 -7
- package/esm2015/lib/services/exporter-common/base-export-service.js +3 -3
- package/fesm2015/igniteui-angular.js +148 -144
- package/fesm2015/igniteui-angular.js.map +1 -1
- package/igniteui-angular.metadata.json +1 -1
- package/lib/grids/grid-base.directive.d.ts +9 -13
- package/lib/grids/hierarchical-grid/hierarchical-grid.component.d.ts +2 -1
- package/lib/grids/hierarchical-grid/row-island.component.d.ts +1 -0
- package/lib/grids/tree-grid/tree-grid.component.d.ts +2 -2
- package/package.json +1 -1
|
@@ -15,7 +15,7 @@ export class GridBaseAPIService {
|
|
|
15
15
|
this.destroyMap = new Map();
|
|
16
16
|
}
|
|
17
17
|
get_column_by_name(name) {
|
|
18
|
-
return this.grid.
|
|
18
|
+
return this.grid.columns.find((col) => col.field === name);
|
|
19
19
|
}
|
|
20
20
|
get_summary_data() {
|
|
21
21
|
const grid = this.grid;
|
|
@@ -444,4 +444,4 @@ GridBaseAPIService.ctorParameters = () => [
|
|
|
444
444
|
{ type: IgxGridCRUDService },
|
|
445
445
|
{ type: IgxColumnMovingService }
|
|
446
446
|
];
|
|
447
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUt2RyxPQUFPLEVBQWUsZUFBZSxFQUFTLE1BQU0scUNBQXFDLENBQUM7QUFDMUYsT0FBTyxFQUFXLGtCQUFrQixFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFJaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBTTNCLFlBQ1csV0FBK0IsRUFDL0IsR0FBMkI7UUFEM0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQXdCO1FBSjVCLGVBQVUsR0FBa0MsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFJaEQsQ0FBQztJQUVwQyxrQkFBa0IsQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBZSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFD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QyxPQUFPLEVBQUU7WUFDM0IsTUFBTSxXQUFXLEdBQWdCO2dCQUM3QixFQUFFLEVBQUUsS0FBSztnQkFDVCxJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU07Z0JBQzVCLFFBQVEsRUFBRSxXQUFXO2FBQ3hCLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNILFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNuRDtJQUNMLENBQUM7SUFHUyxtQkFBbUIsQ0FBQyxLQUFVLEVBQUUsS0FBVSxFQUFFLEtBQWE7UUFDL0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRVMsd0JBQXdCLENBQUMsU0FBaUI7UUFDaEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDcEUsQ0FBQzs7O1lBemVKLFVBQVU7OztZQVRPLGtCQUFrQjtZQUkzQixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCByZXZlcnNlTWFwcGVyLCBtZXJnZU9iamVjdHMgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IERhdGFVdGlsLCBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiwgU29ydGluZ0RpcmVjdGlvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hSb3dEaXJlY3RpdmUgfSBmcm9tICcuL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlLCBTdGF0ZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IElneENlbGwsIElneEdyaWRDUlVEU2VydmljZSwgSWd4RWRpdFJvdyB9IGZyb20gJy4vY29tbW9uL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tICcuL2NvbW1vbi9jb2x1bW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcmlkRWRpdEV2ZW50QXJncywgSVJvd1RvZ2dsZUV2ZW50QXJncyB9IGZyb20gJy4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Nb3ZpbmdTZXJ2aWNlIH0gZnJvbSAnLi9tb3ZpbmcvbW92aW5nLnNlcnZpY2UnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdyaWRCYXNlQVBJU2VydmljZTxUIGV4dGVuZHMgSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4ge1xuXG5cbiAgICBwdWJsaWMgZ3JpZDogVDtcbiAgICBwcm90ZWN0ZWQgZGVzdHJveU1hcDogTWFwPHN0cmluZywgU3ViamVjdDxib29sZWFuPj4gPSBuZXcgTWFwPHN0cmluZywgU3ViamVjdDxib29sZWFuPj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY3J1ZFNlcnZpY2U6IElneEdyaWRDUlVEU2VydmljZSxcbiAgICAgICAgcHVibGljIGNtczogSWd4Q29sdW1uTW92aW5nU2VydmljZSkgeyB9XG5cbiAgICBwdWJsaWMgZ2V0X2NvbHVtbl9ieV9uYW1lKG5hbWU6IHN0cmluZyk6IENvbHVtblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNvbHVtbkxpc3QuZmluZCgoY29sOiBDb2x1bW5UeXBlKSA9PiBjb2wuZmllbGQgPT09IG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfc3VtbWFyeV9kYXRhKCkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBsZXQgZGF0YSA9IGdyaWQuZmlsdGVyZWREYXRhO1xuICAgICAgICBpZiAoZGF0YSAmJiBncmlkLmhhc1Bpbm5lZFJlY29yZHMpIHtcbiAgICAgICAgICAgIGRhdGEgPSBncmlkLl9maWx0ZXJlZFVucGlubmVkRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGlmIChncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLm1lcmdlVHJhbnNhY3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICBjbG9uZUFycmF5KGdyaWQuZGF0YSksXG4gICAgICAgICAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgICAgICBncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgIGdyaWQuZGF0YUNsb25lU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZWRSb3dzID0gZ3JpZC50cmFuc2FjdGlvbnMuZ2V0VHJhbnNhY3Rpb25Mb2coKS5maWx0ZXIodCA9PiB0LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ERUxFVEUpLm1hcCh0ID0+IHQuaWQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZWRSb3dzLmZvckVhY2gocm93SUQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRGF0YSA9IGdyaWQucHJpbWFyeUtleSA/IGRhdGEubWFwKHJlYyA9PiByZWNbZ3JpZC5wcmltYXJ5S2V5XSkgOiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRlbXBEYXRhLmluZGV4T2Yocm93SUQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdyaWQuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldFJvd0RhdGEocm93SUQ6IGFueSkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEodGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldF9yb3dfaW5kZXhfaW5fZGF0YShyb3dJRCwgZGF0YSk7XG4gICAgICAgIHJldHVybiBkYXRhW2luZGV4XTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19pbmRleF9pbl9kYXRhKHJvd0lEOiBhbnksIGRhdGFDb2xsZWN0aW9uPzogYW55W10pOiBudW1iZXIge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkIGFzIElneEdyaWRCYXNlRGlyZWN0aXZlO1xuICAgICAgICBpZiAoIWdyaWQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gZGF0YUNvbGxlY3Rpb24gPz8gdGhpcy5nZXRfYWxsX2RhdGEoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCk7XG4gICAgICAgIHJldHVybiBncmlkLnByaW1hcnlLZXkgPyBkYXRhLmZpbmRJbmRleChyZWNvcmQgPT4gcmVjb3JkLnJlY29yZFJlZiA/IHJlY29yZC5yZWNvcmRSZWZbZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SURcbiAgICAgICAgICAgIDogcmVjb3JkW2dyaWQucHJpbWFyeUtleV0gPT09IHJvd0lEKSA6IGRhdGEuaW5kZXhPZihyb3dJRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfYnlfa2V5KHJvd1NlbGVjdG9yOiBhbnkpOiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4ge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xuICAgICAgICBpZiAocHJpbWFyeUtleSAhPT0gdW5kZWZpbmVkICYmIHByaW1hcnlLZXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVJvd0xpc3QuZmluZCgocm93KSA9PiByb3cucm93RGF0YVtwcmltYXJ5S2V5XSA9PT0gcm93U2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhUm93TGlzdC5maW5kKChyb3cpID0+IHJvdy5yb3dEYXRhID09PSByb3dTZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19ieV9pbmRleChyb3dJbmRleDogbnVtYmVyKTogSWd4Um93RGlyZWN0aXZlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dMaXN0LmZpbmQoKHJvdykgPT4gcm93LmluZGV4ID09PSByb3dJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcm93SUQgb2YgdGhlIHJlY29yZCBhdCB0aGUgc3BlY2lmaWVkIGRhdGEgdmlldyBpbmRleFxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHBhcmFtIGRhdGFDb2xsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIGdldF9yZWNfaWRfYnlfaW5kZXgoaW5kZXg6IG51bWJlciwgZGF0YUNvbGxlY3Rpb24/OiBhbnlbXSk6IGFueSB7XG4gICAgICAgIGRhdGFDb2xsZWN0aW9uID0gZGF0YUNvbGxlY3Rpb24gfHwgdGhpcy5ncmlkLmRhdGE7XG4gICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgZGF0YUNvbGxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCByZWMgPSBkYXRhQ29sbGVjdGlvbltpbmRleF07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcmVjO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfY2VsbF9ieV9rZXkocm93U2VsZWN0b3I6IGFueSwgZmllbGQ6IHN0cmluZyk6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2tleShyb3dTZWxlY3Rvcik7XG4gICAgICAgIGlmIChyb3cgJiYgcm93LmNlbGxzKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93LmNlbGxzLmZpbmQoKGNlbGwpID0+IGNlbGwuY29sdW1uLmZpZWxkID09PSBmaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X2NlbGxfYnlfaW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sdW1uSUQ6IG51bWJlciB8IHN0cmluZyk6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgaGFzQ2VsbHMgPSByb3cgJiYgcm93LmNlbGxzO1xuICAgICAgICBpZiAoaGFzQ2VsbHMgJiYgdHlwZW9mIGNvbHVtbklEID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5jZWxscy5maW5kKChjZWxsKSA9PiBjZWxsLmNvbHVtbi5pbmRleCA9PT0gY29sdW1uSUQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNDZWxscyAmJiB0eXBlb2YgY29sdW1uSUQgPT09ICdzdHJpbmcnKXtcbiAgICAgICAgICAgIHJldHVybiByb3cuY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5jb2x1bW4uZmllbGQgPT09IGNvbHVtbklEKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIGdldF9jZWxsX2J5X3Zpc2libGVfaW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuY2VsbHMpIHtcbiAgICAgICAgICAgIHJldHVybiByb3cuY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC52aXNpYmxlQ29sdW1uSW5kZXggPT09IGNvbHVtbkluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVfY2VsbChjZWxsOiBJZ3hDZWxsKTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJncyA9IGNlbGwuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlKTtcblxuICAgICAgICB0aGlzLmdyaWQuc3VtbWFyeVNlcnZpY2UuY2xlYXJTdW1tYXJ5Q2FjaGUoYXJncyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFJvd0RhdGEoY2VsbC5pZC5yb3dJRCk7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSh0aGlzLmdyaWQsIGNlbGwuaWQucm93SUQsIGRhdGEsIGNlbGwucm93RGF0YSwgcmV2ZXJzZU1hcHBlcihjZWxsLmNvbHVtbi5maWVsZCwgYXJncy5uZXdWYWx1ZSkpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IGNlbGwuY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuaXNSb3dTZWxlY3RlZChjZWxsLmlkLnJvd0lEKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KGNlbGwuaWQucm93SUQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJvd0J5SWQoYXJncy5uZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnN1bW1hcnlTZXJ2aWNlLnJlbW92ZVN1bW1hcmllcyhjZWxsLmlkLnJvd0lEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSB8fCAhdGhpcy5jcnVkU2VydmljZS5yb3cgfHxcbiAgICAgICAgICAgIHRoaXMuY3J1ZFNlcnZpY2Uucm93LmlkICE9PSBjZWxsLmlkLnJvd0lEIHx8ICF0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zdW1tYXJ5U2VydmljZS5jbGVhclN1bW1hcnlDYWNoZShhcmdzKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5waXBlVHJpZ2dlcisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ1JVRCByZWZhY3RvciB0byBub3QgZW1pdCBlZGl0aW5nIGV2dHMuXG4gICAgcHVibGljIHVwZGF0ZV9yb3cocm93OiBJZ3hFZGl0Um93LCB2YWx1ZTogYW55LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmlzUm93U2VsZWN0ZWQocm93LmlkKTtcbiAgICAgICAgY29uc3Qgcm93SW5FZGl0TW9kZSA9IHRoaXMuY3J1ZFNlcnZpY2Uucm93O1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRfcm93X2luZGV4X2luX2RhdGEocm93LmlkLCBkYXRhKTtcbiAgICAgICAgY29uc3QgaGFzU3VtbWFyaXplZCA9IGdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnM7XG4gICAgICAgIHRoaXMuY3J1ZFNlcnZpY2UudXBkYXRlUm93RWRpdERhdGEocm93LCB2YWx1ZSk7XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcblxuICAgICAgICAvLyBJZiBubyB2YWxpZCByb3cgaXMgZm91bmRcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgY29uc3QgaGFzQ2hhbmdlcyA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKGFyZ3Mucm93SUQsIHRydWUpO1xuICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIWhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYXJncy5uZXdWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzU3VtbWFyaXplZCkge1xuICAgICAgICAgICAgZ3JpZC5zdW1tYXJ5U2VydmljZS5yZW1vdmVTdW1tYXJpZXMoYXJncy5yb3dJRCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoZ3JpZCwgcm93LmlkLCBkYXRhW2luZGV4XSwgYXJncy5vbGRWYWx1ZSwgYXJncy5uZXdWYWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld0lkID0gZ3JpZC5wcmltYXJ5S2V5ID8gYXJncy5uZXdWYWx1ZVtncmlkLnByaW1hcnlLZXldIDogYXJncy5uZXdWYWx1ZTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICBncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3cocm93LmlkKTtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dCeUlkKG5ld0lkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtYWtlIHN1cmUgc2VsZWN0aW9uIGlzIGhhbmRsZWQgcHJpb3IgdG8gdXBkYXRpbmcgdGhlIHJvdy5pZFxuICAgICAgICByb3cuaWQgPSBuZXdJZDtcbiAgICAgICAgaWYgKGhhc1N1bW1hcml6ZWQpIHtcbiAgICAgICAgICAgIGdyaWQuc3VtbWFyeVNlcnZpY2UucmVtb3ZlU3VtbWFyaWVzKG5ld0lkKTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLnBpcGVUcmlnZ2VyKys7XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIHNvcnQoZXhwcmVzc2lvbjogSVNvcnRpbmdFeHByZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChleHByZXNzaW9uLmRpciA9PT0gU29ydGluZ0RpcmVjdGlvbi5Ob25lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uKGV4cHJlc3Npb24uZmllbGROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSBjbG9uZUFycmF5KHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICB0aGlzLnByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKFtzb3J0aW5nU3RhdGVdLCBleHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHNvcnRpbmdTdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc29ydF9tdWx0aXBsZShleHByZXNzaW9uczogSVNvcnRpbmdFeHByZXNzaW9uW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGVhY2ggb2YgZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgICAgIGlmIChlYWNoLmRpciA9PT0gU29ydGluZ0RpcmVjdGlvbi5Ob25lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVfZ3JvdXBpbmdfZXhwcmVzc2lvbihlYWNoLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKFtzb3J0aW5nU3RhdGVdLCBlYWNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgPSBzb3J0aW5nU3RhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyX3NvcnQoZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSBzb3J0aW5nU3RhdGUuZmluZEluZGV4KChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZmllbGROYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHNvcnRpbmdTdGF0ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHNvcnRpbmdTdGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcl9ncm91cGJ5KF9uYW1lPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPikge1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG91bGRfYXBwbHlfbnVtYmVyX3N0eWxlKGNvbHVtbjogQ29sdW1uVHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfZGF0YSgpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBncmlkLmRhdGEgPyBncmlkLmRhdGEgOiBbXTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9hbGxfZGF0YShpbmNsdWRlVHJhbnNhY3Rpb25zID0gZmFsc2UpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGxldCBkYXRhID0gZ3JpZCAmJiBncmlkLmRhdGEgPyBncmlkLmRhdGEgOiBbXTtcbiAgICAgICAgZGF0YSA9IGluY2x1ZGVUcmFuc2FjdGlvbnMgPyBncmlkLmRhdGFXaXRoQWRkZWRJblRyYW5zYWN0aW9uUm93cyA6IGRhdGE7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfZmlsdGVyZWRfZGF0YSgpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZmlsdGVyZWREYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRSb3dUb0RhdGEocm93RGF0YTogYW55LCBwYXJlbnRJRD8pIHtcbiAgICAgICAgLy8gQWRkIHJvdyBnb2VzIHRvIHRyYW5zYWN0aW9ucyBhbmQgaWYgcm93RWRpdGFibGUgaXMgcHJvcGVybHkgaW1wbGVtZW50ZWQsIGFkZGVkIHJvd3Mgd2lsbCBnbyB0byBwZW5kaW5nIHRyYW5zYWN0aW9uc1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJvdyBpbiBlZGl0IC0gPiBjb21taXQgYW5kIGNsb3NlXG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG5cbiAgICAgICAgaWYgKGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBncmlkLnByaW1hcnlLZXkgPyByb3dEYXRhW2dyaWQucHJpbWFyeUtleV0gOiByb3dEYXRhO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0geyBpZDogdHJhbnNhY3Rpb25JZCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkFERCwgbmV3VmFsdWU6IHJvd0RhdGEgfTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncmlkLmRhdGEucHVzaChyb3dEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVSb3dGcm9tRGF0YShyb3dJRDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBhIHJvdyAoaW5kZXggIT09IDApIGRlbGV0ZSBpdFxuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgYSByb3cgaW4gQUREIG9yIFVQREFURSBzdGF0ZSBjaGFuZ2UgaXQncyBzdGF0ZSB0byBERUxFVEVcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gPSB7IGlkOiByb3dJRCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkRFTEVURSwgbmV3VmFsdWU6IG51bGwgfTtcbiAgICAgICAgICAgICAgICBncmlkLnRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24sIGdyaWQuZGF0YVtpbmRleF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncmlkLmRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBTdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd0lEKTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh7IGlkOiByb3dJRCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkRFTEVURSwgbmV3VmFsdWU6IG51bGwgfSwgc3RhdGUgJiYgc3RhdGUucmVjb3JkUmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVSb3dCeUlkKHJvd0lkOiBhbnkpOiBhbnkge1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0X2FsbF9kYXRhKCk7XG4gICAgICAgIGlmIChncmlkLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XG4gICAgICAgICAgICBpbmRleCA9IGRhdGEubWFwKChyZWNvcmQpID0+IHJlY29yZFtncmlkLnByaW1hcnlLZXldKS5pbmRleE9mKHJvd0lkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4ID0gZGF0YS5pbmRleE9mKHJvd0lkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZTogU3RhdGUgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZShyb3dJZCk7XG4gICAgICAgIGNvbnN0IGhhc1Jvd0luTm9uRGVsZXRlZFN0YXRlID0gc3RhdGUgJiYgc3RhdGUudHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLkRFTEVURTtcblxuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgYSByb3cgKGluZGV4ICE9PSAtMSkgYW5kIHRoZSB3ZSBoYXZlIGNlbGwgaW4gZWRpdCBtb2RlIG9uIHNhbWUgcm93IGV4aXQgZWRpdCBtb2RlXG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBubyByb3cgKGluZGV4ID09PSAtMSksIGJ1dCB0aGVyZSBpcyBhIHJvdyBpbiBBREQgb3IgVVBEQVRFIHN0YXRlIGRvIGFzIGFib3ZlXG4gICAgICAgIC8vICBPdGhlcndpc2UganVzdCBleGl0IC0gdGhlcmUgaXMgbm90aGluZyB0byBkZWxldGVcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSB8fCBoYXNSb3dJbk5vbkRlbGV0ZWRTdGF0ZSkge1xuICAgICAgICAgICAgLy8gQWx3YXlzIGV4aXQgZWRpdCB3aGVuIHJvdyBpcyBkZWxldGVkXG4gICAgICAgICAgICB0aGlzLmNydWRTZXJ2aWNlLmVuZEVkaXQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWNvcmQgPSBkYXRhW2luZGV4XTtcbiAgICAgICAgLy8gLy8gIFRPRE86IHNob3VsZCB3ZSBlbWl0IHRoaXMgd2hlbiBjYXNjYWRlT25EZWxldGUgaXMgdHJ1ZSBmb3IgZWFjaCByb3c/IT8hXG4gICAgICAgIGdyaWQucm93RGVsZXRlZE5vdGlmaWVyLm5leHQoeyBkYXRhOiBkYXRhW2luZGV4XSB9KTtcblxuICAgICAgICB0aGlzLmRlbGV0ZVJvd0Zyb21EYXRhKHJvd0lkLCBpbmRleCk7XG5cbiAgICAgICAgaWYgKGdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKHJvd0lkKSkge1xuICAgICAgICAgICAgZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KHJvd0lkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIGdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgICAgICAvLyBEYXRhIG5lZWRzIHRvIGJlIHJlY2FsY3VsYXRlZCBpZiB0cmFuc2FjdGlvbnMgYXJlIGluIHBsYWNlXG4gICAgICAgIC8vIElmIG5vIHRyYW5zYWN0aW9ucywgYGRhdGFgIHdpbGwgYmUgYSByZWZlcmVuY2UgdG8gdGhlIGdyaWQgZ2V0dGVyLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBzdGFsZVxuICAgICAgICBjb25zdCBkYXRhQWZ0ZXJEZWxldGUgPSBncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID8gZ3JpZC5kYXRhV2l0aEFkZGVkSW5UcmFuc2FjdGlvblJvd3MgOiBkYXRhO1xuICAgICAgICBncmlkLnJlZnJlc2hTZWFyY2goKTtcbiAgICAgICAgaWYgKGRhdGFBZnRlckRlbGV0ZS5sZW5ndGggJSBncmlkLnBlclBhZ2UgPT09IDAgJiYgZGF0YUFmdGVyRGVsZXRlLmxlbmd0aCAvIGdyaWQucGVyUGFnZSAtIDEgPCBncmlkLnBhZ2UgJiYgZ3JpZC5wYWdlICE9PSAwKSB7XG4gICAgICAgICAgICBncmlkLnBhZ2UtLTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfaWQocm93RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByb3dEYXRhW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHJvd19kZWxldGVkX3RyYW5zYWN0aW9uKHJvd0lEOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgaWYgKCFncmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdGUgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZShyb3dJRCk7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ERUxFVEU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJlY29yZDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IHN0YXRlcyA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzO1xuICAgICAgICBjb25zdCByb3dJRCA9IGdyaWQucHJpbWFyeUtleSA/IHJlY29yZFtncmlkLnByaW1hcnlLZXldIDogcmVjb3JkO1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IHN0YXRlcy5nZXQocm93SUQpO1xuXG4gICAgICAgIGlmIChleHBhbmRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ3JpZC5nZXREZWZhdWx0RXhwYW5kU3RhdGUocmVjb3JkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShyb3dJRDogYW55LCBleHBhbmRlZDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBjb25zdCBleHBhbmRlZFN0YXRlcyA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzO1xuXG4gICAgICAgIGlmICghdGhpcy5hbGxvd19leHBhbnNpb25fc3RhdGVfY2hhbmdlKHJvd0lELCBleHBhbmRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElSb3dUb2dnbGVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRCxcbiAgICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgZ3JpZC5yb3dUb2dnbGUuZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBleHBhbmRlZFN0YXRlcy5zZXQocm93SUQsIGV4cGFuZGVkKTtcbiAgICAgICAgZ3JpZC5leHBhbnNpb25TdGF0ZXMgPSBleHBhbmRlZFN0YXRlcztcbiAgICAgICAgdGhpcy5jcnVkU2VydmljZS5lbmRFZGl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3JlY19ieV9pZChyb3dJRCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyB0aGlzLmdldFJvd0RhdGEocm93SUQpIDogcm93SUQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHJlY29yZCBpbiB0aGUgZGF0YSB2aWV3IGJ5IHBrIG9yIC0xIGlmIG5vdCBmb3VuZCBvciBwcmltYXJ5S2V5IGlzIG5vdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGtcbiAgICAgKiBAcGFyYW0gZGF0YUNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0X3JlY19pbmRleF9ieV9pZChwazogc3RyaW5nIHwgbnVtYmVyLCBkYXRhQ29sbGVjdGlvbj86IGFueVtdKTogbnVtYmVyIHtcbiAgICAgICAgZGF0YUNvbGxlY3Rpb24gPSBkYXRhQ29sbGVjdGlvbiB8fCB0aGlzLmdyaWQuZGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gZGF0YUNvbGxlY3Rpb24uZmluZEluZGV4KHJlYyA9PiByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldID09PSBwaykgOiAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWxsb3dfZXhwYW5zaW9uX3N0YXRlX2NoYW5nZShyb3dJRCwgZXhwYW5kZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAhPT0gZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKHN0YXRlQ29sbGVjdGlvbnM6IEFycmF5PEFycmF5PGFueT4+LCBleHByZXNzaW9uOiBJU29ydGluZ0V4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24uZGlyID09PSBTb3J0aW5nRGlyZWN0aW9uLk5vbmUpIHtcbiAgICAgICAgICAgIHN0YXRlQ29sbGVjdGlvbnMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUuc3BsaWNlKHN0YXRlLmZpbmRJbmRleCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IGV4cHJlc3Npb24uZmllbGROYW1lKSwgMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGVzIGluIGVhY2ggY29sbGVjdGlvbiB3aXRoIHNhbWUgZmllbGRzIHBvaW50IHRvIHRoZSBzYW1lIG9iamVjdCByZWZlcmVuY2UuXG4gICAgICAgICAqIElmIHRoZSBkaWZmZXJlbnQgc3RhdGUgY29sbGVjdGlvbnMgcHJvdmlkZWQgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgd2UgbmVlZCB0byBnZXQgdGhlIGxhcmdlc3Qgb25lLlxuICAgICAgICAgKiBUaGF0IHdheSB3ZSBjYW4gZ2V0IHRoZSBzdGF0ZSByZWZlcmVuY2UgZnJvbSB0aGUgbGFyZ2VzdCBvbmUgdGhhdCBoYXMgdGhlIHNhbWUgZmllbGROYW1lIGFzIHRoZSBleHByZXNzaW9uIHRvIHByZXBhcmUuXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgbWF4Q29sbGVjdGlvbiA9IHN0YXRlQ29sbGVjdGlvbnNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3RhdGVDb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKG1heENvbGxlY3Rpb24ubGVuZ3RoIDwgc3RhdGVDb2xsZWN0aW9uc1tpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBtYXhDb2xsZWN0aW9uID0gc3RhdGVDb2xsZWN0aW9uc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhFeHByID0gbWF4Q29sbGVjdGlvbi5maW5kKChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZXhwcmVzc2lvbi5maWVsZE5hbWUpO1xuXG4gICAgICAgIHN0YXRlQ29sbGVjdGlvbnMuZm9yRWFjaChjb2xsZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG15RXhwciA9IGNvbGxlY3Rpb24uZmluZCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IGV4cHJlc3Npb24uZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmICghbXlFeHByICYmICFtYXhFeHByKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiB3aXRoIHRoaXMgZmllbGROYW1lIGlzIG1pc3NpbmcgZnJvbSB0aGUgY3VycmVudCBhbmQgdGhlIG1heCBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIW15RXhwciAmJiBtYXhFeHByKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiB3aXRoIHRoaXMgZmllbGROYW1lIGlzIG1pc3NpbmcgZnJvbSB0aGUgY3VycmVudCBhbmQgYnV0IHRoZSBtYXggY29sbGVjdGlvbiBoYXMuXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKG1heEV4cHIpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWF4RXhwciwgZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IGNvbGxlY3Rpb24gaGFzIHRoZSBleHByZXNzaW9uIHNvIGp1c3QgdXBkYXRlIGl0LlxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obXlFeHByLCBleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uKF9maWVsZE5hbWUpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmlsdGVyRGF0YUJ5RXhwcmVzc2lvbnMoZXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogYW55W10ge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZ2V0X2FsbF9kYXRhKCk7XG5cbiAgICAgICAgaWYgKGV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0geyBleHByZXNzaW9uc1RyZWUsIHN0cmF0ZWd5OiB0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kgfTtcbiAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5maWx0ZXIoY2xvbmVBcnJheShkYXRhKSwgc3RhdGUsIHRoaXMuZ3JpZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHJlbGF0ZWQgcm93IG9mIHByb3ZpZGVkIGdyaWQncyBkYXRhIHNvdXJjZSB3aXRoIHByb3ZpZGVkIG5ldyByb3cgdmFsdWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBncmlkIEdyaWQgdG8gdXBkYXRlIGRhdGEgZm9yXG4gICAgICogQHBhcmFtIHJvd0lEIElEIG9mIHRoZSByb3cgdG8gdXBkYXRlXG4gICAgICogQHBhcmFtIHJvd1ZhbHVlSW5EYXRhU291cmNlIEluaXRpYWwgdmFsdWUgb2YgdGhlIHJvdyBhcyBpdCBpcyBpbiBkYXRhIHNvdXJjZVxuICAgICAqIEBwYXJhbSByb3dDdXJyZW50VmFsdWUgQ3VycmVudCB2YWx1ZSBvZiB0aGUgcm93IGFzIGl0IGlzIHdpdGggYXBwbGllZCBwcmV2aW91cyB0cmFuc2FjdGlvbnNcbiAgICAgKiBAcGFyYW0gcm93TmV3VmFsdWUgTmV3IHZhbHVlIG9mIHRoZSByb3dcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlRGF0YShncmlkLCByb3dJRCwgcm93VmFsdWVJbkRhdGFTb3VyY2U6IGFueSwgcm93Q3VycmVudFZhbHVlOiBhbnksIHJvd05ld1ZhbHVlOiB7IFt4OiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBpZiAoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0ge1xuICAgICAgICAgICAgICAgIGlkOiByb3dJRCxcbiAgICAgICAgICAgICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuVVBEQVRFLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiByb3dOZXdWYWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbiwgcm93Q3VycmVudFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lcmdlT2JqZWN0cyhyb3dWYWx1ZUluRGF0YVNvdXJjZSwgcm93TmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlX3Jvd19pbl9hcnJheSh2YWx1ZTogYW55LCByb3dJRDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGdyaWQuZGF0YVtpbmRleF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0U29ydFN0cmF0ZWd5UGVyQ29sdW1uKGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldF9jb2x1bW5fYnlfbmFtZShmaWVsZE5hbWUpID9cbiAgICAgICAgICAgIHRoaXMuZ2V0X2NvbHVtbl9ieV9uYW1lKGZpZWxkTmFtZSkuc29ydFN0cmF0ZWd5IDogdW5kZWZpbmVkO1xuICAgIH1cblxufVxuIl19
|
|
447
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvYXBpLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVFLE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUt2RyxPQUFPLEVBQWUsZUFBZSxFQUFTLE1BQU0scUNBQXFDLENBQUM7QUFDMUYsT0FBTyxFQUFXLGtCQUFrQixFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFJaEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakU7O0dBRUc7QUFFSCxNQUFNLE9BQU8sa0JBQWtCO0lBTTNCLFlBQ1csV0FBK0IsRUFDL0IsR0FBMkI7UUFEM0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLFFBQUcsR0FBSCxHQUFHLENBQXdCO1FBSjVCLGVBQVUsR0FBa0MsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFJaEQsQ0FBQztJQUVwQyxrQkFBa0IsQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBZSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFD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QyxPQUFPLEVBQUU7WUFDM0IsTUFBTSxXQUFXLEdBQWdCO2dCQUM3QixFQUFFLEVBQUUsS0FBSztnQkFDVCxJQUFJLEVBQUUsZUFBZSxDQUFDLE1BQU07Z0JBQzVCLFFBQVEsRUFBRSxXQUFXO2FBQ3hCLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDdkQ7YUFBTTtZQUNILFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNuRDtJQUNMLENBQUM7SUFHUyxtQkFBbUIsQ0FBQyxLQUFVLEVBQUUsS0FBVSxFQUFFLEtBQWE7UUFDL0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBRVMsd0JBQXdCLENBQUMsU0FBaUI7UUFDaEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDcEUsQ0FBQzs7O1lBemVKLFVBQVU7OztZQVRPLGtCQUFrQjtZQUkzQixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCByZXZlcnNlTWFwcGVyLCBtZXJnZU9iamVjdHMgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IERhdGFVdGlsLCBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiwgU29ydGluZ0RpcmVjdGlvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi9jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hHcmlkQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hSb3dEaXJlY3RpdmUgfSBmcm9tICcuL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25UeXBlLCBTdGF0ZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zYWN0aW9uL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IElneENlbGwsIElneEdyaWRDUlVEU2VydmljZSwgSWd4RWRpdFJvdyB9IGZyb20gJy4vY29tbW9uL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tICcuL2NvbW1vbi9jb2x1bW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcmlkRWRpdEV2ZW50QXJncywgSVJvd1RvZ2dsZUV2ZW50QXJncyB9IGZyb20gJy4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Nb3ZpbmdTZXJ2aWNlIH0gZnJvbSAnLi9tb3ZpbmcvbW92aW5nLnNlcnZpY2UnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdyaWRCYXNlQVBJU2VydmljZTxUIGV4dGVuZHMgSWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4ge1xuXG5cbiAgICBwdWJsaWMgZ3JpZDogVDtcbiAgICBwcm90ZWN0ZWQgZGVzdHJveU1hcDogTWFwPHN0cmluZywgU3ViamVjdDxib29sZWFuPj4gPSBuZXcgTWFwPHN0cmluZywgU3ViamVjdDxib29sZWFuPj4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY3J1ZFNlcnZpY2U6IElneEdyaWRDUlVEU2VydmljZSxcbiAgICAgICAgcHVibGljIGNtczogSWd4Q29sdW1uTW92aW5nU2VydmljZSkgeyB9XG5cbiAgICBwdWJsaWMgZ2V0X2NvbHVtbl9ieV9uYW1lKG5hbWU6IHN0cmluZyk6IENvbHVtblR5cGUge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNvbHVtbnMuZmluZCgoY29sOiBDb2x1bW5UeXBlKSA9PiBjb2wuZmllbGQgPT09IG5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfc3VtbWFyeV9kYXRhKCkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBsZXQgZGF0YSA9IGdyaWQuZmlsdGVyZWREYXRhO1xuICAgICAgICBpZiAoZGF0YSAmJiBncmlkLmhhc1Bpbm5lZFJlY29yZHMpIHtcbiAgICAgICAgICAgIGRhdGEgPSBncmlkLl9maWx0ZXJlZFVucGlubmVkRGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIGlmIChncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IERhdGFVdGlsLm1lcmdlVHJhbnNhY3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICBjbG9uZUFycmF5KGdyaWQuZGF0YSksXG4gICAgICAgICAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgICAgICBncmlkLnByaW1hcnlLZXksXG4gICAgICAgICAgICAgICAgICAgIGdyaWQuZGF0YUNsb25lU3RyYXRlZ3lcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlbGV0ZWRSb3dzID0gZ3JpZC50cmFuc2FjdGlvbnMuZ2V0VHJhbnNhY3Rpb25Mb2coKS5maWx0ZXIodCA9PiB0LnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ERUxFVEUpLm1hcCh0ID0+IHQuaWQpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZWRSb3dzLmZvckVhY2gocm93SUQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRGF0YSA9IGdyaWQucHJpbWFyeUtleSA/IGRhdGEubWFwKHJlYyA9PiByZWNbZ3JpZC5wcmltYXJ5S2V5XSkgOiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRlbXBEYXRhLmluZGV4T2Yocm93SUQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdyaWQuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldFJvd0RhdGEocm93SUQ6IGFueSkge1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEodGhpcy5ncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldF9yb3dfaW5kZXhfaW5fZGF0YShyb3dJRCwgZGF0YSk7XG4gICAgICAgIHJldHVybiBkYXRhW2luZGV4XTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19pbmRleF9pbl9kYXRhKHJvd0lEOiBhbnksIGRhdGFDb2xsZWN0aW9uPzogYW55W10pOiBudW1iZXIge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkIGFzIElneEdyaWRCYXNlRGlyZWN0aXZlO1xuICAgICAgICBpZiAoIWdyaWQpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhID0gZGF0YUNvbGxlY3Rpb24gPz8gdGhpcy5nZXRfYWxsX2RhdGEoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCk7XG4gICAgICAgIHJldHVybiBncmlkLnByaW1hcnlLZXkgPyBkYXRhLmZpbmRJbmRleChyZWNvcmQgPT4gcmVjb3JkLnJlY29yZFJlZiA/IHJlY29yZC5yZWNvcmRSZWZbZ3JpZC5wcmltYXJ5S2V5XSA9PT0gcm93SURcbiAgICAgICAgICAgIDogcmVjb3JkW2dyaWQucHJpbWFyeUtleV0gPT09IHJvd0lEKSA6IGRhdGEuaW5kZXhPZihyb3dJRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfYnlfa2V5KHJvd1NlbGVjdG9yOiBhbnkpOiBJZ3hSb3dEaXJlY3RpdmU8SWd4R3JpZEJhc2VEaXJlY3RpdmUgJiBHcmlkVHlwZT4ge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJpbWFyeUtleSA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5O1xuICAgICAgICBpZiAocHJpbWFyeUtleSAhPT0gdW5kZWZpbmVkICYmIHByaW1hcnlLZXkgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVJvd0xpc3QuZmluZCgocm93KSA9PiByb3cucm93RGF0YVtwcmltYXJ5S2V5XSA9PT0gcm93U2VsZWN0b3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhUm93TGlzdC5maW5kKChyb3cpID0+IHJvdy5yb3dEYXRhID09PSByb3dTZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3Jvd19ieV9pbmRleChyb3dJbmRleDogbnVtYmVyKTogSWd4Um93RGlyZWN0aXZlPElneEdyaWRCYXNlRGlyZWN0aXZlICYgR3JpZFR5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dMaXN0LmZpbmQoKHJvdykgPT4gcm93LmluZGV4ID09PSByb3dJbmRleCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcm93SUQgb2YgdGhlIHJlY29yZCBhdCB0aGUgc3BlY2lmaWVkIGRhdGEgdmlldyBpbmRleFxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4XG4gICAgICogQHBhcmFtIGRhdGFDb2xsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIGdldF9yZWNfaWRfYnlfaW5kZXgoaW5kZXg6IG51bWJlciwgZGF0YUNvbGxlY3Rpb24/OiBhbnlbXSk6IGFueSB7XG4gICAgICAgIGRhdGFDb2xsZWN0aW9uID0gZGF0YUNvbGxlY3Rpb24gfHwgdGhpcy5ncmlkLmRhdGE7XG4gICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgZGF0YUNvbGxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCByZWMgPSBkYXRhQ29sbGVjdGlvbltpbmRleF07XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcmVjO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfY2VsbF9ieV9rZXkocm93U2VsZWN0b3I6IGFueSwgZmllbGQ6IHN0cmluZyk6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2tleShyb3dTZWxlY3Rvcik7XG4gICAgICAgIGlmIChyb3cgJiYgcm93LmNlbGxzKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93LmNlbGxzLmZpbmQoKGNlbGwpID0+IGNlbGwuY29sdW1uLmZpZWxkID09PSBmaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X2NlbGxfYnlfaW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sdW1uSUQ6IG51bWJlciB8IHN0cmluZyk6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgaGFzQ2VsbHMgPSByb3cgJiYgcm93LmNlbGxzO1xuICAgICAgICBpZiAoaGFzQ2VsbHMgJiYgdHlwZW9mIGNvbHVtbklEID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHJvdy5jZWxscy5maW5kKChjZWxsKSA9PiBjZWxsLmNvbHVtbi5pbmRleCA9PT0gY29sdW1uSUQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNDZWxscyAmJiB0eXBlb2YgY29sdW1uSUQgPT09ICdzdHJpbmcnKXtcbiAgICAgICAgICAgIHJldHVybiByb3cuY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC5jb2x1bW4uZmllbGQgPT09IGNvbHVtbklEKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIGdldF9jZWxsX2J5X3Zpc2libGVfaW5kZXgocm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlcik6IElneEdyaWRDZWxsQ29tcG9uZW50IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5nZXRfcm93X2J5X2luZGV4KHJvd0luZGV4KTtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuY2VsbHMpIHtcbiAgICAgICAgICAgIHJldHVybiByb3cuY2VsbHMuZmluZCgoY2VsbCkgPT4gY2VsbC52aXNpYmxlQ29sdW1uSW5kZXggPT09IGNvbHVtbkluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVfY2VsbChjZWxsOiBJZ3hDZWxsKTogSUdyaWRFZGl0RXZlbnRBcmdzIHtcbiAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJncyA9IGNlbGwuY3JlYXRlRWRpdEV2ZW50QXJncyh0cnVlKTtcblxuICAgICAgICB0aGlzLmdyaWQuc3VtbWFyeVNlcnZpY2UuY2xlYXJTdW1tYXJ5Q2FjaGUoYXJncyk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFJvd0RhdGEoY2VsbC5pZC5yb3dJRCk7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSh0aGlzLmdyaWQsIGNlbGwuaWQucm93SUQsIGRhdGEsIGNlbGwucm93RGF0YSwgcmV2ZXJzZU1hcHBlcihjZWxsLmNvbHVtbi5maWVsZCwgYXJncy5uZXdWYWx1ZSkpO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnByaW1hcnlLZXkgPT09IGNlbGwuY29sdW1uLmZpZWxkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuaXNSb3dTZWxlY3RlZChjZWxsLmlkLnJvd0lEKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KGNlbGwuaWQucm93SUQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJvd0J5SWQoYXJncy5uZXdWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnN1bW1hcnlTZXJ2aWNlLnJlbW92ZVN1bW1hcmllcyhjZWxsLmlkLnJvd0lEKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSB8fCAhdGhpcy5jcnVkU2VydmljZS5yb3cgfHxcbiAgICAgICAgICAgIHRoaXMuY3J1ZFNlcnZpY2Uucm93LmlkICE9PSBjZWxsLmlkLnJvd0lEIHx8ICF0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zdW1tYXJ5U2VydmljZS5jbGVhclN1bW1hcnlDYWNoZShhcmdzKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5waXBlVHJpZ2dlcisrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQ1JVRCByZWZhY3RvciB0byBub3QgZW1pdCBlZGl0aW5nIGV2dHMuXG4gICAgcHVibGljIHVwZGF0ZV9yb3cocm93OiBJZ3hFZGl0Um93LCB2YWx1ZTogYW55LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmlzUm93U2VsZWN0ZWQocm93LmlkKTtcbiAgICAgICAgY29uc3Qgcm93SW5FZGl0TW9kZSA9IHRoaXMuY3J1ZFNlcnZpY2Uucm93O1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRfYWxsX2RhdGEoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRfcm93X2luZGV4X2luX2RhdGEocm93LmlkLCBkYXRhKTtcbiAgICAgICAgY29uc3QgaGFzU3VtbWFyaXplZCA9IGdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnM7XG4gICAgICAgIHRoaXMuY3J1ZFNlcnZpY2UudXBkYXRlUm93RWRpdERhdGEocm93LCB2YWx1ZSk7XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHJvdy5jcmVhdGVFZGl0RXZlbnRBcmdzKHRydWUsIGV2ZW50KTtcblxuICAgICAgICAvLyBJZiBubyB2YWxpZCByb3cgaXMgZm91bmRcbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgY29uc3QgaGFzQ2hhbmdlcyA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKGFyZ3Mucm93SUQsIHRydWUpO1xuICAgICAgICAgICAgZ3JpZC50cmFuc2FjdGlvbnMuZW5kUGVuZGluZyhmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIWhhc0NoYW5nZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghYXJncy5uZXdWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzU3VtbWFyaXplZCkge1xuICAgICAgICAgICAgZ3JpZC5zdW1tYXJ5U2VydmljZS5yZW1vdmVTdW1tYXJpZXMoYXJncy5yb3dJRCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoZ3JpZCwgcm93LmlkLCBkYXRhW2luZGV4XSwgYXJncy5vbGRWYWx1ZSwgYXJncy5uZXdWYWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld0lkID0gZ3JpZC5wcmltYXJ5S2V5ID8gYXJncy5uZXdWYWx1ZVtncmlkLnByaW1hcnlLZXldIDogYXJncy5uZXdWYWx1ZTtcbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICBncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RSb3cocm93LmlkKTtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RSb3dCeUlkKG5ld0lkKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtYWtlIHN1cmUgc2VsZWN0aW9uIGlzIGhhbmRsZWQgcHJpb3IgdG8gdXBkYXRpbmcgdGhlIHJvdy5pZFxuICAgICAgICByb3cuaWQgPSBuZXdJZDtcbiAgICAgICAgaWYgKGhhc1N1bW1hcml6ZWQpIHtcbiAgICAgICAgICAgIGdyaWQuc3VtbWFyeVNlcnZpY2UucmVtb3ZlU3VtbWFyaWVzKG5ld0lkKTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLnBpcGVUcmlnZ2VyKys7XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIHNvcnQoZXhwcmVzc2lvbjogSVNvcnRpbmdFeHByZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChleHByZXNzaW9uLmRpciA9PT0gU29ydGluZ0RpcmVjdGlvbi5Ob25lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uKGV4cHJlc3Npb24uZmllbGROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSBjbG9uZUFycmF5KHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMpO1xuICAgICAgICB0aGlzLnByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKFtzb3J0aW5nU3RhdGVdLCBleHByZXNzaW9uKTtcbiAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHNvcnRpbmdTdGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc29ydF9tdWx0aXBsZShleHByZXNzaW9uczogSVNvcnRpbmdFeHByZXNzaW9uW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gY2xvbmVBcnJheSh0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGVhY2ggb2YgZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgICAgIGlmIChlYWNoLmRpciA9PT0gU29ydGluZ0RpcmVjdGlvbi5Ob25lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVfZ3JvdXBpbmdfZXhwcmVzc2lvbihlYWNoLmZpZWxkTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKFtzb3J0aW5nU3RhdGVdLCBlYWNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgPSBzb3J0aW5nU3RhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyX3NvcnQoZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc29ydGluZ1N0YXRlID0gdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgICAgY29uc3QgaW5kZXggPSBzb3J0aW5nU3RhdGUuZmluZEluZGV4KChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZmllbGROYW1lKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHNvcnRpbmdTdGF0ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucyA9IHNvcnRpbmdTdGF0ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcl9ncm91cGJ5KF9uYW1lPzogc3RyaW5nIHwgQXJyYXk8c3RyaW5nPikge1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG91bGRfYXBwbHlfbnVtYmVyX3N0eWxlKGNvbHVtbjogQ29sdW1uVHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY29sdW1uLmRhdGFUeXBlID09PSBHcmlkQ29sdW1uRGF0YVR5cGUuTnVtYmVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfZGF0YSgpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBncmlkLmRhdGEgPyBncmlkLmRhdGEgOiBbXTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9hbGxfZGF0YShpbmNsdWRlVHJhbnNhY3Rpb25zID0gZmFsc2UpOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGxldCBkYXRhID0gZ3JpZCAmJiBncmlkLmRhdGEgPyBncmlkLmRhdGEgOiBbXTtcbiAgICAgICAgZGF0YSA9IGluY2x1ZGVUcmFuc2FjdGlvbnMgPyBncmlkLmRhdGFXaXRoQWRkZWRJblRyYW5zYWN0aW9uUm93cyA6IGRhdGE7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRfZmlsdGVyZWRfZGF0YSgpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZmlsdGVyZWREYXRhO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRSb3dUb0RhdGEocm93RGF0YTogYW55LCBwYXJlbnRJRD8pIHtcbiAgICAgICAgLy8gQWRkIHJvdyBnb2VzIHRvIHRyYW5zYWN0aW9ucyBhbmQgaWYgcm93RWRpdGFibGUgaXMgcHJvcGVybHkgaW1wbGVtZW50ZWQsIGFkZGVkIHJvd3Mgd2lsbCBnbyB0byBwZW5kaW5nIHRyYW5zYWN0aW9uc1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHJvdyBpbiBlZGl0IC0gPiBjb21taXQgYW5kIGNsb3NlXG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG5cbiAgICAgICAgaWYgKGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBncmlkLnByaW1hcnlLZXkgPyByb3dEYXRhW2dyaWQucHJpbWFyeUtleV0gOiByb3dEYXRhO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0geyBpZDogdHJhbnNhY3Rpb25JZCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkFERCwgbmV3VmFsdWU6IHJvd0RhdGEgfTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncmlkLmRhdGEucHVzaChyb3dEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVSb3dGcm9tRGF0YShyb3dJRDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBhIHJvdyAoaW5kZXggIT09IDApIGRlbGV0ZSBpdFxuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgYSByb3cgaW4gQUREIG9yIFVQREFURSBzdGF0ZSBjaGFuZ2UgaXQncyBzdGF0ZSB0byBERUxFVEVcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKGdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24gPSB7IGlkOiByb3dJRCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkRFTEVURSwgbmV3VmFsdWU6IG51bGwgfTtcbiAgICAgICAgICAgICAgICBncmlkLnRyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24sIGdyaWQuZGF0YVtpbmRleF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBncmlkLmRhdGEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlOiBTdGF0ZSA9IGdyaWQudHJhbnNhY3Rpb25zLmdldFN0YXRlKHJvd0lEKTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh7IGlkOiByb3dJRCwgdHlwZTogVHJhbnNhY3Rpb25UeXBlLkRFTEVURSwgbmV3VmFsdWU6IG51bGwgfSwgc3RhdGUgJiYgc3RhdGUucmVjb3JkUmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVSb3dCeUlkKHJvd0lkOiBhbnkpOiBhbnkge1xuICAgICAgICBsZXQgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0X2FsbF9kYXRhKCk7XG4gICAgICAgIGlmIChncmlkLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XG4gICAgICAgICAgICBpbmRleCA9IGRhdGEubWFwKChyZWNvcmQpID0+IHJlY29yZFtncmlkLnByaW1hcnlLZXldKS5pbmRleE9mKHJvd0lkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluZGV4ID0gZGF0YS5pbmRleE9mKHJvd0lkKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZTogU3RhdGUgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZShyb3dJZCk7XG4gICAgICAgIGNvbnN0IGhhc1Jvd0luTm9uRGVsZXRlZFN0YXRlID0gc3RhdGUgJiYgc3RhdGUudHlwZSAhPT0gVHJhbnNhY3Rpb25UeXBlLkRFTEVURTtcblxuICAgICAgICAvLyAgaWYgdGhlcmUgaXMgYSByb3cgKGluZGV4ICE9PSAtMSkgYW5kIHRoZSB3ZSBoYXZlIGNlbGwgaW4gZWRpdCBtb2RlIG9uIHNhbWUgcm93IGV4aXQgZWRpdCBtb2RlXG4gICAgICAgIC8vICBpZiB0aGVyZSBpcyBubyByb3cgKGluZGV4ID09PSAtMSksIGJ1dCB0aGVyZSBpcyBhIHJvdyBpbiBBREQgb3IgVVBEQVRFIHN0YXRlIGRvIGFzIGFib3ZlXG4gICAgICAgIC8vICBPdGhlcndpc2UganVzdCBleGl0IC0gdGhlcmUgaXMgbm90aGluZyB0byBkZWxldGVcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSB8fCBoYXNSb3dJbk5vbkRlbGV0ZWRTdGF0ZSkge1xuICAgICAgICAgICAgLy8gQWx3YXlzIGV4aXQgZWRpdCB3aGVuIHJvdyBpcyBkZWxldGVkXG4gICAgICAgICAgICB0aGlzLmNydWRTZXJ2aWNlLmVuZEVkaXQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWNvcmQgPSBkYXRhW2luZGV4XTtcbiAgICAgICAgLy8gLy8gIFRPRE86IHNob3VsZCB3ZSBlbWl0IHRoaXMgd2hlbiBjYXNjYWRlT25EZWxldGUgaXMgdHJ1ZSBmb3IgZWFjaCByb3c/IT8hXG4gICAgICAgIGdyaWQucm93RGVsZXRlZE5vdGlmaWVyLm5leHQoeyBkYXRhOiBkYXRhW2luZGV4XSB9KTtcblxuICAgICAgICB0aGlzLmRlbGV0ZVJvd0Zyb21EYXRhKHJvd0lkLCBpbmRleCk7XG5cbiAgICAgICAgaWYgKGdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKHJvd0lkKSkge1xuICAgICAgICAgICAgZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KHJvd0lkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdyaWQuc2VsZWN0aW9uU2VydmljZS5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBncmlkLnBpcGVUcmlnZ2VyKys7XG4gICAgICAgIGdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgICAgICAvLyBEYXRhIG5lZWRzIHRvIGJlIHJlY2FsY3VsYXRlZCBpZiB0cmFuc2FjdGlvbnMgYXJlIGluIHBsYWNlXG4gICAgICAgIC8vIElmIG5vIHRyYW5zYWN0aW9ucywgYGRhdGFgIHdpbGwgYmUgYSByZWZlcmVuY2UgdG8gdGhlIGdyaWQgZ2V0dGVyLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBzdGFsZVxuICAgICAgICBjb25zdCBkYXRhQWZ0ZXJEZWxldGUgPSBncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkID8gZ3JpZC5kYXRhV2l0aEFkZGVkSW5UcmFuc2FjdGlvblJvd3MgOiBkYXRhO1xuICAgICAgICBncmlkLnJlZnJlc2hTZWFyY2goKTtcbiAgICAgICAgaWYgKGRhdGFBZnRlckRlbGV0ZS5sZW5ndGggJSBncmlkLnBlclBhZ2UgPT09IDAgJiYgZGF0YUFmdGVyRGVsZXRlLmxlbmd0aCAvIGdyaWQucGVyUGFnZSAtIDEgPCBncmlkLnBhZ2UgJiYgZ3JpZC5wYWdlICE9PSAwKSB7XG4gICAgICAgICAgICBncmlkLnBhZ2UtLTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWNvcmQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfaWQocm93RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByb3dEYXRhW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHJvd19kZWxldGVkX3RyYW5zYWN0aW9uKHJvd0lEOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZ3JpZCA9IHRoaXMuZ3JpZDtcbiAgICAgICAgaWYgKCFncmlkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFncmlkLnRyYW5zYWN0aW9ucy5lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdGUgPSBncmlkLnRyYW5zYWN0aW9ucy5nZXRTdGF0ZShyb3dJRCk7XG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnR5cGUgPT09IFRyYW5zYWN0aW9uVHlwZS5ERUxFVEU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJlY29yZDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGNvbnN0IHN0YXRlcyA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzO1xuICAgICAgICBjb25zdCByb3dJRCA9IGdyaWQucHJpbWFyeUtleSA/IHJlY29yZFtncmlkLnByaW1hcnlLZXldIDogcmVjb3JkO1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IHN0YXRlcy5nZXQocm93SUQpO1xuXG4gICAgICAgIGlmIChleHBhbmRlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ3JpZC5nZXREZWZhdWx0RXhwYW5kU3RhdGUocmVjb3JkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShyb3dJRDogYW55LCBleHBhbmRlZDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBjb25zdCBncmlkID0gdGhpcy5ncmlkO1xuICAgICAgICBjb25zdCBleHBhbmRlZFN0YXRlcyA9IGdyaWQuZXhwYW5zaW9uU3RhdGVzO1xuXG4gICAgICAgIGlmICghdGhpcy5hbGxvd19leHBhbnNpb25fc3RhdGVfY2hhbmdlKHJvd0lELCBleHBhbmRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElSb3dUb2dnbGVFdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICByb3dJRCxcbiAgICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG5cbiAgICAgICAgZ3JpZC5yb3dUb2dnbGUuZW1pdChhcmdzKTtcblxuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBleHBhbmRlZFN0YXRlcy5zZXQocm93SUQsIGV4cGFuZGVkKTtcbiAgICAgICAgZ3JpZC5leHBhbnNpb25TdGF0ZXMgPSBleHBhbmRlZFN0YXRlcztcbiAgICAgICAgdGhpcy5jcnVkU2VydmljZS5lbmRFZGl0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0X3JlY19ieV9pZChyb3dJRCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyB0aGlzLmdldFJvd0RhdGEocm93SUQpIDogcm93SUQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHJlY29yZCBpbiB0aGUgZGF0YSB2aWV3IGJ5IHBrIG9yIC0xIGlmIG5vdCBmb3VuZCBvciBwcmltYXJ5S2V5IGlzIG5vdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGtcbiAgICAgKiBAcGFyYW0gZGF0YUNvbGxlY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0X3JlY19pbmRleF9ieV9pZChwazogc3RyaW5nIHwgbnVtYmVyLCBkYXRhQ29sbGVjdGlvbj86IGFueVtdKTogbnVtYmVyIHtcbiAgICAgICAgZGF0YUNvbGxlY3Rpb24gPSBkYXRhQ29sbGVjdGlvbiB8fCB0aGlzLmdyaWQuZGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gZGF0YUNvbGxlY3Rpb24uZmluZEluZGV4KHJlYyA9PiByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldID09PSBwaykgOiAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWxsb3dfZXhwYW5zaW9uX3N0YXRlX2NoYW5nZShyb3dJRCwgZXhwYW5kZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5leHBhbnNpb25TdGF0ZXMuZ2V0KHJvd0lEKSAhPT0gZXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVfc29ydGluZ19leHByZXNzaW9uKHN0YXRlQ29sbGVjdGlvbnM6IEFycmF5PEFycmF5PGFueT4+LCBleHByZXNzaW9uOiBJU29ydGluZ0V4cHJlc3Npb24pIHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb24uZGlyID09PSBTb3J0aW5nRGlyZWN0aW9uLk5vbmUpIHtcbiAgICAgICAgICAgIHN0YXRlQ29sbGVjdGlvbnMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUuc3BsaWNlKHN0YXRlLmZpbmRJbmRleCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IGV4cHJlc3Npb24uZmllbGROYW1lKSwgMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGVzIGluIGVhY2ggY29sbGVjdGlvbiB3aXRoIHNhbWUgZmllbGRzIHBvaW50IHRvIHRoZSBzYW1lIG9iamVjdCByZWZlcmVuY2UuXG4gICAgICAgICAqIElmIHRoZSBkaWZmZXJlbnQgc3RhdGUgY29sbGVjdGlvbnMgcHJvdmlkZWQgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMgd2UgbmVlZCB0byBnZXQgdGhlIGxhcmdlc3Qgb25lLlxuICAgICAgICAgKiBUaGF0IHdheSB3ZSBjYW4gZ2V0IHRoZSBzdGF0ZSByZWZlcmVuY2UgZnJvbSB0aGUgbGFyZ2VzdCBvbmUgdGhhdCBoYXMgdGhlIHNhbWUgZmllbGROYW1lIGFzIHRoZSBleHByZXNzaW9uIHRvIHByZXBhcmUuXG4gICAgICAgICAqL1xuICAgICAgICBsZXQgbWF4Q29sbGVjdGlvbiA9IHN0YXRlQ29sbGVjdGlvbnNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3RhdGVDb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKG1heENvbGxlY3Rpb24ubGVuZ3RoIDwgc3RhdGVDb2xsZWN0aW9uc1tpXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBtYXhDb2xsZWN0aW9uID0gc3RhdGVDb2xsZWN0aW9uc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXhFeHByID0gbWF4Q29sbGVjdGlvbi5maW5kKChleHByKSA9PiBleHByLmZpZWxkTmFtZSA9PT0gZXhwcmVzc2lvbi5maWVsZE5hbWUpO1xuXG4gICAgICAgIHN0YXRlQ29sbGVjdGlvbnMuZm9yRWFjaChjb2xsZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG15RXhwciA9IGNvbGxlY3Rpb24uZmluZCgoZXhwcikgPT4gZXhwci5maWVsZE5hbWUgPT09IGV4cHJlc3Npb24uZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmICghbXlFeHByICYmICFtYXhFeHByKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiB3aXRoIHRoaXMgZmllbGROYW1lIGlzIG1pc3NpbmcgZnJvbSB0aGUgY3VycmVudCBhbmQgdGhlIG1heCBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIW15RXhwciAmJiBtYXhFeHByKSB7XG4gICAgICAgICAgICAgICAgLy8gRXhwcmVzc2lvbiB3aXRoIHRoaXMgZmllbGROYW1lIGlzIG1pc3NpbmcgZnJvbSB0aGUgY3VycmVudCBhbmQgYnV0IHRoZSBtYXggY29sbGVjdGlvbiBoYXMuXG4gICAgICAgICAgICAgICAgY29sbGVjdGlvbi5wdXNoKG1heEV4cHIpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obWF4RXhwciwgZXhwcmVzc2lvbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IGNvbGxlY3Rpb24gaGFzIHRoZSBleHByZXNzaW9uIHNvIGp1c3QgdXBkYXRlIGl0LlxuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24obXlFeHByLCBleHByZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZV9ncm91cGluZ19leHByZXNzaW9uKF9maWVsZE5hbWUpIHtcbiAgICB9XG5cbiAgICBwdWJsaWMgZmlsdGVyRGF0YUJ5RXhwcmVzc2lvbnMoZXhwcmVzc2lvbnNUcmVlOiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogYW55W10ge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZ2V0X2FsbF9kYXRhKCk7XG5cbiAgICAgICAgaWYgKGV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0geyBleHByZXNzaW9uc1RyZWUsIHN0cmF0ZWd5OiB0aGlzLmdyaWQuZmlsdGVyU3RyYXRlZ3kgfTtcbiAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5maWx0ZXIoY2xvbmVBcnJheShkYXRhKSwgc3RhdGUsIHRoaXMuZ3JpZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHJlbGF0ZWQgcm93IG9mIHByb3ZpZGVkIGdyaWQncyBkYXRhIHNvdXJjZSB3aXRoIHByb3ZpZGVkIG5ldyByb3cgdmFsdWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBncmlkIEdyaWQgdG8gdXBkYXRlIGRhdGEgZm9yXG4gICAgICogQHBhcmFtIHJvd0lEIElEIG9mIHRoZSByb3cgdG8gdXBkYXRlXG4gICAgICogQHBhcmFtIHJvd1ZhbHVlSW5EYXRhU291cmNlIEluaXRpYWwgdmFsdWUgb2YgdGhlIHJvdyBhcyBpdCBpcyBpbiBkYXRhIHNvdXJjZVxuICAgICAqIEBwYXJhbSByb3dDdXJyZW50VmFsdWUgQ3VycmVudCB2YWx1ZSBvZiB0aGUgcm93IGFzIGl0IGlzIHdpdGggYXBwbGllZCBwcmV2aW91cyB0cmFuc2FjdGlvbnNcbiAgICAgKiBAcGFyYW0gcm93TmV3VmFsdWUgTmV3IHZhbHVlIG9mIHRoZSByb3dcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdXBkYXRlRGF0YShncmlkLCByb3dJRCwgcm93VmFsdWVJbkRhdGFTb3VyY2U6IGFueSwgcm93Q3VycmVudFZhbHVlOiBhbnksIHJvd05ld1ZhbHVlOiB7IFt4OiBzdHJpbmddOiBhbnkgfSkge1xuICAgICAgICBpZiAoZ3JpZC50cmFuc2FjdGlvbnMuZW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uID0ge1xuICAgICAgICAgICAgICAgIGlkOiByb3dJRCxcbiAgICAgICAgICAgICAgICB0eXBlOiBUcmFuc2FjdGlvblR5cGUuVVBEQVRFLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiByb3dOZXdWYWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdyaWQudHJhbnNhY3Rpb25zLmFkZCh0cmFuc2FjdGlvbiwgcm93Q3VycmVudFZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1lcmdlT2JqZWN0cyhyb3dWYWx1ZUluRGF0YVNvdXJjZSwgcm93TmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlX3Jvd19pbl9hcnJheSh2YWx1ZTogYW55LCByb3dJRDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIGdyaWQuZGF0YVtpbmRleF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0U29ydFN0cmF0ZWd5UGVyQ29sdW1uKGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldF9jb2x1bW5fYnlfbmFtZShmaWVsZE5hbWUpID9cbiAgICAgICAgICAgIHRoaXMuZ2V0X2NvbHVtbl9ieV9uYW1lKGZpZWxkTmFtZSkuc29ydFN0cmF0ZWd5IDogdW5kZWZpbmVkO1xuICAgIH1cblxufVxuIl19
|