igniteui-angular 18.2.0-beta.0 → 18.2.0-beta.2
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/badge/badge.component.mjs +19 -3
- package/esm2022/lib/core/i18n/query-builder-resources.mjs +4 -3
- package/esm2022/lib/data-operations/filtering-expression.interface.mjs +1 -1
- package/esm2022/lib/data-operations/filtering-expressions-tree.mjs +1 -1
- package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +2 -2
- package/esm2022/lib/grids/grid/groupby-row.component.mjs +2 -2
- package/esm2022/lib/grids/grouping/grid-group-by-area.component.mjs +3 -3
- package/esm2022/lib/grids/grouping/tree-grid-group-by-area.component.mjs +3 -3
- package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +2 -2
- package/esm2022/lib/grids/selection/selection.service.mjs +9 -9
- package/esm2022/lib/icon/icon.references.mjs +6 -10
- package/esm2022/lib/query-builder/query-builder-header.component.mjs +3 -3
- package/esm2022/lib/query-builder/query-builder-tree.component.mjs +3 -3
- package/esm2022/lib/tabs/tabs/tabs.component.mjs +4 -3
- package/fesm2022/igniteui-angular.mjs +46 -33
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/badge/badge.component.d.ts +12 -1
- package/lib/core/i18n/query-builder-resources.d.ts +1 -0
- package/lib/core/styles/components/badge/_badge-component.scss +4 -0
- package/lib/core/styles/components/badge/_badge-theme.scss +6 -12
- package/lib/core/styles/components/banner/_banner-theme.scss +5 -1
- package/lib/core/styles/components/card/_card-theme.scss +18 -1
- package/lib/core/styles/components/chip/_chip-theme.scss +180 -154
- package/lib/core/styles/components/drop-down/_drop-down-theme.scss +5 -1
- package/lib/core/styles/components/navdrawer/_navdrawer-theme.scss +9 -7
- package/lib/core/styles/components/query-builder/_query-builder-component.scss +4 -0
- package/lib/core/styles/components/query-builder/_query-builder-theme.scss +39 -38
- package/lib/core/styles/components/tabs/_tabs-theme.scss +72 -18
- package/lib/core/styles/components/tree/_tree-theme.scss +1 -3
- package/lib/core/styles/typography/_indigo.scss +3 -1
- package/lib/data-operations/filtering-expression.interface.d.ts +2 -4
- package/lib/data-operations/filtering-expressions-tree.d.ts +24 -2
- package/migrations/common/ServerHost.d.ts +3 -1
- package/migrations/common/ServerHost.js +4 -1
- package/migrations/common/UpdateChanges.d.ts +7 -2
- package/migrations/common/UpdateChanges.js +39 -29
- package/migrations/common/project-service-container.d.ts +11 -0
- package/migrations/common/project-service-container.js +25 -0
- package/migrations/update-13_0_0/changes/members.json +1 -1
- package/migrations/update-18_2_0/changes/inputs.json +14 -0
- package/migrations/update-18_2_0/changes/theme-changes.json +6 -0
- package/migrations/update-18_2_0/index.js +36 -0
- package/package.json +2 -2
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -381,7 +381,7 @@ export class IgxGridSelectionService {
|
|
|
381
381
|
}
|
|
382
382
|
/** Select all rows, if filtering is applied select only from filtered data. */
|
|
383
383
|
selectAllRows(event) {
|
|
384
|
-
const addedRows = this.allData.filter((row) => !this.
|
|
384
|
+
const addedRows = this.allData.filter((row) => !this.rowSelection.has(this.getRecordKey(row)));
|
|
385
385
|
const selectedRows = this.getSelectedRowsData();
|
|
386
386
|
const newSelection = this.rowSelection.size ? selectedRows.concat(addedRows) : addedRows;
|
|
387
387
|
this.indeterminateRows.clear();
|
|
@@ -542,10 +542,8 @@ export class IgxGridSelectionService {
|
|
|
542
542
|
if (this.allRowsSelected !== undefined && !newSelection) {
|
|
543
543
|
return this.allRowsSelected;
|
|
544
544
|
}
|
|
545
|
-
const selectedData = new Set(newSelection
|
|
546
|
-
|
|
547
|
-
const unSelectedRows = allData.filter(row => !selectedData.has(row));
|
|
548
|
-
return this.allRowsSelected = this.allData.length > 0 && unSelectedRows.length === 0;
|
|
545
|
+
const selectedData = new Set(this.getRowIDs(newSelection || this.rowSelection));
|
|
546
|
+
return this.allRowsSelected = this.allData.length > 0 && this.allData.every(row => selectedData.has(this.getRecordKey(row)));
|
|
549
547
|
}
|
|
550
548
|
hasSomeRowSelected() {
|
|
551
549
|
const filteredData = this.isFilteringApplied() ?
|
|
@@ -566,9 +564,11 @@ export class IgxGridSelectionService {
|
|
|
566
564
|
owner: this.grid,
|
|
567
565
|
oldSelection: currSelection,
|
|
568
566
|
newSelection,
|
|
569
|
-
added,
|
|
570
|
-
|
|
571
|
-
|
|
567
|
+
added,
|
|
568
|
+
removed,
|
|
569
|
+
event,
|
|
570
|
+
cancel: false,
|
|
571
|
+
allRowsSelected: this.areAllRowSelected(newSelection)
|
|
572
572
|
};
|
|
573
573
|
this.grid.rowSelectionChanging.emit(args);
|
|
574
574
|
if (args.cancel) {
|
|
@@ -756,4 +756,4 @@ export class IgxGridSelectionService {
|
|
|
756
756
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: IgxGridSelectionService, decorators: [{
|
|
757
757
|
type: Injectable
|
|
758
758
|
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.PlatformUtil }] });
|
|
759
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFZNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFJckQsTUFBTSxPQUFPLHVCQUF1QjtJQTZCaEM7OztPQUdHO0lBQ0gsSUFBVyxNQUFNO1FBRWIsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV4RSxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDckUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQVcsYUFBYSxDQUFD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LEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDakcsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxvQkFBb0IsQ0FBQyxJQUFVO1FBQ25DLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN4QyxTQUFTLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMxQixLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztZQUN0RSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFLO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQzs4R0FqMEJRLHVCQUF1QjtrSEFBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElSb3dTZWxlY3Rpb25FdmVudEFyZ3MgfSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gICAgR3JpZFNlbGVjdGlvblJhbmdlLFxuICAgIElDb2x1bW5TZWxlY3Rpb25TdGF0ZSxcbiAgICBJTXVsdGlSb3dMYXlvdXROb2RlLFxuICAgIElTZWxlY3Rpb25LZXlib2FyZFN0YXRlLFxuICAgIElTZWxlY3Rpb25Ob2RlLFxuICAgIElTZWxlY3Rpb25Qb2ludGVyU3RhdGUsXG4gICAgU2VsZWN0aW9uU3RhdGVcbn0gZnJvbSAnLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IFBpdm90VXRpbCB9IGZyb20gJy4uL3Bpdm90LWdyaWQvcGl2b3QtdXRpbCc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgICBwdWJsaWMgZ3JpZDogR3JpZFR5cGU7XG4gICAgcHVibGljIGRyYWdNb2RlID0gZmFsc2U7XG4gICAgcHVibGljIGFjdGl2ZUVsZW1lbnQ6IElTZWxlY3Rpb25Ob2RlIHwgbnVsbDtcbiAgICBwdWJsaWMga2V5Ym9hcmRTdGF0ZSA9IHt9IGFzIElTZWxlY3Rpb25LZXlib2FyZFN0YXRlO1xuICAgIHB1YmxpYyBwb2ludGVyU3RhdGUgPSB7fSBhcyBJU2VsZWN0aW9uUG9pbnRlclN0YXRlO1xuICAgIHB1YmxpYyBjb2x1bW5zU3RhdGUgPSB7fSBhcyBJQ29sdW1uU2VsZWN0aW9uU3RhdGU7XG5cbiAgICBwdWJsaWMgc2VsZWN0aW9uID0gbmV3IE1hcDxudW1iZXIsIFNldDxudW1iZXI+PigpO1xuICAgIHB1YmxpYyB0ZW1wID0gbmV3IE1hcDxudW1iZXIsIFNldDxudW1iZXI+PigpO1xuICAgIHB1YmxpYyByb3dTZWxlY3Rpb246IFNldDxhbnk+ID0gbmV3IFNldDxhbnk+KCk7XG4gICAgcHVibGljIGluZGV0ZXJtaW5hdGVSb3dzOiBTZXQ8YW55PiA9IG5ldyBTZXQ8YW55PigpO1xuICAgIHB1YmxpYyBjb2x1bW5TZWxlY3Rpb246IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRSb3dzQ2hhbmdlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZWQgd2hlbiBhIHBvaW50ZXJkb3duIGV2ZW50IGlzIHRyaWdnZXJlZCBpbnNpZGUgdGhlIGdyaWQgYm9keSAoY2VsbHMpLlxuICAgICAqIFdoZW4gYGZhbHNlYCB0aGUgZHJhZyBzZWxlY3QgYmVoYXZpb3IgaXMgZGlzYWJsZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwb2ludGVyRXZlbnRJbkdyaWRCb2R5ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGFsbFJvd3NTZWxlY3RlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9sYXN0U2VsZWN0ZWROb2RlOiBJU2VsZWN0aW9uTm9kZTtcbiAgICBwcml2YXRlIF9yYW5nZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uUmFuZ2U6IFJhbmdlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzZWxlY3RlZCByYW5nZXMgaW4gdGhlIGdyaWQgZnJvbSBib3RoXG4gICAgICoga2V5Ym9hcmQgYW5kIHBvaW50ZXIgaW50ZXJhY3Rpb25zXG4gICAgICovXG4gICAgcHVibGljIGdldCByYW5nZXMoKTogR3JpZFNlbGVjdGlvblJhbmdlW10ge1xuXG4gICAgICAgIC8vIFRoZSBsYXN0IGFjdGlvbiB3YXMga2V5Ym9hcmQgKyBzaGlmdCBzZWxlY3Rpb24gLT4gYWRkIGl0XG4gICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRSYW5nZSgpO1xuXG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IEFycmF5LmZyb20odGhpcy5fcmFuZ2VzKS5tYXAocmFuZ2UgPT4gSlNPTi5wYXJzZShyYW5nZSkpO1xuXG4gICAgICAgIC8vIE5vIHJhbmdlcyBidXQgd2UgaGF2ZSBhIGZvY3VzZWQgY2VsbCAtPiBhZGQgaXRcbiAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoICYmIHRoaXMuYWN0aXZlRWxlbWVudCAmJiB0aGlzLmdyaWQuaXNDZWxsU2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgcmFuZ2VzLnB1c2godGhpcy5nZW5lcmF0ZVJhbmdlKHRoaXMuYWN0aXZlRWxlbWVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByaW1hcnlCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvaW50ZXJTdGF0ZS5wcmltYXJ5QnV0dG9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcHJpbWFyeUJ1dHRvbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5wcmltYXJ5QnV0dG9uID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB6b25lOiBOZ1pvbmUsIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHRoaXMuaW5pdFBvaW50ZXJTdGF0ZSgpO1xuICAgICAgICB0aGlzLmluaXRLZXlib2FyZFN0YXRlKCk7XG4gICAgICAgIHRoaXMuaW5pdENvbHVtbnNTdGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUga2V5Ym9hcmQgc3RhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdEtleWJvYXJkU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLnNoaWZ0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5yYW5nZSA9IG51bGw7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIHBvaW50ZXIgc3RhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdFBvaW50ZXJTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLmN0cmwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUuc2hpZnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUucmFuZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5wcmltYXJ5QnV0dG9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIGNvbHVtbnMgc3RhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdENvbHVtbnNTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5yYW5nZSA9IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBzaW5nbGUgbm9kZS5cbiAgICAgKiBTaW5nbGUgY2xpY2tzIHwgQ3RybCArIHNpbmdsZSBjbGlja3Mgb24gY2VsbHMgaXMgdGhlIHVzdWFsIGNhc2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZChub2RlOiBJU2VsZWN0aW9uTm9kZSwgYWRkVG9SYW5nZSA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmhhcyhub2RlLnJvdykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmdldChub2RlLnJvdykuYWRkKG5vZGUuY29sdW1uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldChub2RlLnJvdywgbmV3IFNldDxudW1iZXI+KCkpLmdldChub2RlLnJvdykuYWRkKG5vZGUuY29sdW1uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRUb1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZXMuYWRkKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgYWN0aXZlIGtleWJvYXJkIHJhbmdlIHNlbGVjdGlvbiAoaWYgYW55KSB0byB0aGUgYHJhbmdlc2AgbWV0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkS2V5Ym9hcmRSYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmRTdGF0ZS5yYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2VzLmFkZChKU09OLnN0cmluZ2lmeSh0aGlzLmtleWJvYXJkU3RhdGUucmFuZ2UpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmUobm9kZTogSVNlbGVjdGlvbk5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmhhcyhub2RlLnJvdykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmdldChub2RlLnJvdykuZGVsZXRlKG5vZGUuY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZU5vZGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmFuZ2VzLmRlbGV0ZShKU09OLnN0cmluZ2lmeSh0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNJbk1hcChub2RlOiBJU2VsZWN0aW9uTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0aW9uLmhhcyhub2RlLnJvdykgJiYgdGhpcy5zZWxlY3Rpb24uZ2V0KG5vZGUucm93KS5oYXMobm9kZS5jb2x1bW4pKSB8fFxuICAgICAgICAgICAgKHRoaXMudGVtcC5oYXMobm9kZS5yb3cpICYmIHRoaXMudGVtcC5nZXQobm9kZS5yb3cpLmhhcyhub2RlLmNvbHVtbikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RlZChub2RlOiBJU2VsZWN0aW9uTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXNBY3RpdmVOb2RlKG5vZGUpICYmIHRoaXMuZ3JpZC5pc0NlbGxTZWxlY3RhYmxlKSB8fCB0aGlzLmlzSW5NYXAobm9kZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWN0aXZlTm9kZShub2RlOiBJU2VsZWN0aW9uTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuYWN0aXZlRWxlbWVudC5jb2x1bW4gPT09IG5vZGUuY29sdW1uICYmIHRoaXMuYWN0aXZlRWxlbWVudC5yb3cgPT09IG5vZGUucm93O1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNDb2x1bW5MYXlvdXRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGF5b3V0ID0gdGhpcy5hY3RpdmVFbGVtZW50LmxheW91dDtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNBY3RpdmUgJiYgdGhpcy5pc0FjdGl2ZUxheW91dChsYXlvdXQsIG5vZGUubGF5b3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpc0FjdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWN0aXZlTGF5b3V0KGN1cnJlbnQ6IElNdWx0aVJvd0xheW91dE5vZGUsIHRhcmdldDogSU11bHRpUm93TGF5b3V0Tm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY3VycmVudC5jb2x1bW5WaXNpYmxlSW5kZXggPT09IHRhcmdldC5jb2x1bW5WaXNpYmxlSW5kZXg7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJhbmdlTWV0YShub2RlOiBJU2VsZWN0aW9uTm9kZSwgc3RhdGU/OiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yYW5nZXMuYWRkKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCBzdGF0ZSkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlUmFuZ2VNZXRhKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzdGF0ZT86IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jhbmdlcy5kZWxldGUoSlNPTi5zdHJpbmdpZnkodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHN0YXRlKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIG5ldyBzZWxlY3Rpb24gcmFuZ2UgZnJvbSB0aGUgZ2l2ZW4gYG5vZGVgLlxuICAgICAqIElmIGBzdGF0ZWAgaXMgcGFzc2VkIGluc3RlYWQgaXQgd2lsbCBnZW5lcmF0ZSB0aGUgcmFuZ2UgYmFzZWQgb24gdGhlIHBhc3NlZCBgbm9kZWBcbiAgICAgKiBhbmQgdGhlIHN0YXJ0IG5vZGUgb2YgdGhlIGBzdGF0ZWAuXG4gICAgICovXG4gICAgcHVibGljIGdlbmVyYXRlUmFuZ2Uobm9kZTogSVNlbGVjdGlvbk5vZGUsIHN0YXRlPzogU2VsZWN0aW9uU3RhdGUpOiBHcmlkU2VsZWN0aW9uUmFuZ2Uge1xuICAgICAgICB0aGlzLl9sYXN0U2VsZWN0ZWROb2RlID0gbm9kZTtcblxuICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiBub2RlLnJvdyxcbiAgICAgICAgICAgICAgICByb3dFbmQ6IG5vZGUucm93LFxuICAgICAgICAgICAgICAgIGNvbHVtblN0YXJ0OiBub2RlLmNvbHVtbixcbiAgICAgICAgICAgICAgICBjb2x1bW5FbmQ6IG5vZGUuY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyByb3csIGNvbHVtbiB9ID0gc3RhdGUubm9kZTtcbiAgICAgICAgY29uc3Qgcm93U3RhcnQgPSBNYXRoLm1pbihub2RlLnJvdywgcm93KTtcbiAgICAgICAgY29uc3Qgcm93RW5kID0gTWF0aC5tYXgobm9kZS5yb3csIHJvdyk7XG4gICAgICAgIGNvbnN0IGNvbHVtblN0YXJ0ID0gTWF0aC5taW4obm9kZS5jb2x1bW4sIGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNvbHVtbkVuZCA9IE1hdGgubWF4KG5vZGUuY29sdW1uLCBjb2x1bW4pO1xuXG4gICAgICAgIHJldHVybiB7IHJvd1N0YXJ0LCByb3dFbmQsIGNvbHVtblN0YXJ0LCBjb2x1bW5FbmQgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqL1xuICAgIHB1YmxpYyBrZXlib2FyZFN0YXRlT25LZXlkb3duKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzaGlmdDogYm9vbGVhbiwgc2hpZnRUYWI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5pdFBvaW50ZXJTdGF0ZSgpO1xuICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUuc2hpZnQgPSBzaGlmdCAmJiAhc2hpZnRUYWI7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLm5hdmlnYXRpb24uaXNEYXRhUm93KG5vZGUucm93KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEtiIG5hdmlnYXRpb24gd2l0aCBzaGlmdCBhbmQgbm8gcHJldmlvdXMgbm9kZS5cbiAgICAgICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluaXQgdGhlIHN0YXJ0IG5vZGUuXG4gICAgICAgIGlmICh0aGlzLmtleWJvYXJkU3RhdGUuc2hpZnQgJiYgIXRoaXMua2V5Ym9hcmRTdGF0ZS5ub2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUubm9kZSA9IE9iamVjdC5hc3NpZ24oe30sIG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGtleWJvYXJkU3RhdGVPbkZvY3VzKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBlbWl0dGVyOiBFdmVudEVtaXR0ZXI8R3JpZFNlbGVjdGlvblJhbmdlPiwgZG9tKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGtiU3RhdGUgPSB0aGlzLmtleWJvYXJkU3RhdGU7XG5cbiAgICAgICAgLy8gRm9jdXMgdHJpZ2dlcmVkIGJ5IGtleWJvYXJkIG5hdmlnYXRpb25cbiAgICAgICAgaWYgKGtiU3RhdGUuYWN0aXZlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0Nocm9taXVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVNlbGVjdGlvbkNocm9tZShkb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RhcnQgZ2VuZXJhdGluZyBhIHJhbmdlIGlmIHNoaWZ0IGlzIGhvbGRcbiAgICAgICAgICAgIGlmIChrYlN0YXRlLnNoaWZ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnU2VsZWN0KG5vZGUsIGtiU3RhdGUpO1xuICAgICAgICAgICAgICAgIGtiU3RhdGUucmFuZ2UgPSB0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSwga2JTdGF0ZSk7XG4gICAgICAgICAgICAgICAgZW1pdHRlci5lbWl0KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCBrYlN0YXRlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmluaXRLZXlib2FyZFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmFkZChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwb2ludGVyRG93bihub2RlOiBJU2VsZWN0aW9uTm9kZSwgc2hpZnQ6IGJvb2xlYW4sIGN0cmw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZGRLZXlib2FyZFJhbmdlKCk7XG4gICAgICAgIHRoaXMuaW5pdEtleWJvYXJkU3RhdGUoKTtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUuY3RybCA9IGN0cmw7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLnNoaWZ0ID0gc2hpZnQ7XG4gICAgICAgIHRoaXMucG9pbnRlckV2ZW50SW5HcmlkQm9keSA9IHRydWU7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5wb2ludGVyT3JpZ2luSGFuZGxlcik7XG5cbiAgICAgICAgLy8gTm8gY3RybCBrZXkgcHJlc3NlZCAtIG5vIG11bHRpcGxlIHNlbGVjdGlvblxuICAgICAgICBpZiAoIWN0cmwpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaGlmdCkge1xuICAgICAgICAgICAgLy8gTm8gcHJldmlvdXNseSAnY2xpY2tlZCcgbm9kZS4gVXNlIHRoZSBsYXN0IGFjdGl2ZSBub2RlLlxuICAgICAgICAgICAgaWYgKCF0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUubm9kZSA9IHRoaXMuYWN0aXZlRWxlbWVudCB8fCBub2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb2ludGVyRG93blNoaWZ0S2V5KG5vZGUpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclRleHRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlUmFuZ2VNZXRhKG5vZGUpO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlID0gbm9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9pbnRlckRvd25TaGlmdEtleShub2RlOiBJU2VsZWN0aW9uTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0UmFuZ2Uobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtZXJnZU1hcCh0YXJnZXQ6IE1hcDxudW1iZXIsIFNldDxudW1iZXI+Piwgc291cmNlOiBNYXA8bnVtYmVyLCBTZXQ8bnVtYmVyPj4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBzb3VyY2UuZW50cmllcygpO1xuICAgICAgICBsZXQgcGFpciA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgbGV0IGtleTogbnVtYmVyO1xuICAgICAgICBsZXQgdmFsdWU6IFNldDxudW1iZXI+O1xuXG4gICAgICAgIHdoaWxlICghcGFpci5kb25lKSB7XG4gICAgICAgICAgICBba2V5LCB2YWx1ZV0gPSBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHRhcmdldC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGFyZ2V0LmdldChrZXkpO1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2gocmVjb3JkID0+IG5ld1ZhbHVlLmFkZChyZWNvcmQpKTtcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0KGtleSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFpciA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwb2ludGVyRW50ZXIobm9kZTogSVNlbGVjdGlvbk5vZGUsIGV2ZW50OiBQb2ludGVyRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvI3RoZS1idXR0b24tcHJvcGVydHlcbiAgICAgICAgdGhpcy5kcmFnTW9kZSA9IChldmVudC5idXR0b25zID09PSAxICYmIChldmVudC5idXR0b24gPT09IC0xIHx8IGV2ZW50LmJ1dHRvbiA9PT0gMCkpICYmIHRoaXMucG9pbnRlckV2ZW50SW5HcmlkQm9keTtcbiAgICAgICAgaWYgKCF0aGlzLmRyYWdNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhclRleHRTZWxlY3Rpb24oKTtcblxuICAgICAgICAvLyBJZiB0aGUgdXNlcnMgdHJpZ2dlcnMgYSBkcmFnLWxpa2UgZXZlbnQgYnkgZmlyc3QgY2xpY2tpbmcgb3V0c2lkZSB0aGUgZ3JpZCBjZWxsc1xuICAgICAgICAvLyBhbmQgdGhlbiBlbnRlcnMgaW4gdGhlIGdyaWQgYm9keSB3ZSBtYXkgbm90IGhhdmUgYSBpbml0aWFsIHBvaW50ZXIgc3RhcnRpbmcgbm9kZS5cbiAgICAgICAgLy8gQXNzdW1lIHRoZSBmaXJzdCBwb2ludGVyZW50ZXIgbm9kZSBpcyB3aGVyZSB3ZSBzdGFydC5cbiAgICAgICAgaWYgKCF0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlKSB7XG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlID0gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvaW50ZXJTdGF0ZS5jdHJsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJhbmdlKG5vZGUsIHRoaXMucG9pbnRlclN0YXRlLCB0aGlzLnRlbXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kcmFnU2VsZWN0KG5vZGUsIHRoaXMucG9pbnRlclN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9pbnRlclVwKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBlbWl0dGVyOiBFdmVudEVtaXR0ZXI8R3JpZFNlbGVjdGlvblJhbmdlPiwgZmlyZWRPdXRzaWRlR3JpZD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ01vZGUgfHwgZmlyZWRPdXRzaWRlR3JpZCkge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlVGV4dFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5hZGRSYW5nZU1ldGEobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpO1xuICAgICAgICAgICAgdGhpcy5tZXJnZU1hcCh0aGlzLnNlbGVjdGlvbiwgdGhpcy50ZW1wKTtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW5UYXNrKCgpID0+IGVtaXR0ZXIuZW1pdCh0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpKSk7XG4gICAgICAgICAgICB0aGlzLnRlbXAuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ01vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucG9pbnRlclN0YXRlLnNoaWZ0KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGV4dFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlVGV4dFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5hZGRSYW5nZU1ldGEobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpO1xuICAgICAgICAgICAgZW1pdHRlci5lbWl0KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wb2ludGVyRXZlbnRJbkdyaWRCb2R5ICYmIHRoaXMuaXNBY3RpdmVOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdFJhbmdlKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzdGF0ZTogU2VsZWN0aW9uU3RhdGUsIGNvbGxlY3Rpb246IE1hcDxudW1iZXIsIFNldDxudW1iZXI+PiA9IHRoaXMuc2VsZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChjb2xsZWN0aW9uID09PSB0aGlzLnRlbXApIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHJvd1N0YXJ0LCByb3dFbmQsIGNvbHVtblN0YXJ0LCBjb2x1bW5FbmQgfSA9IHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCBzdGF0ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dTdGFydDsgaSA8PSByb3dFbmQ7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGNvbHVtblN0YXJ0IGFzIG51bWJlcjsgaiA8PSAoY29sdW1uRW5kIGFzIG51bWJlcik7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmhhcyhpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmdldChpKS5hZGQoaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5zZXQoaSwgbmV3IFNldDxudW1iZXI+KCkpLmdldChpKS5hZGQoaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRyYWdTZWxlY3Qobm9kZTogSVNlbGVjdGlvbk5vZGUsIHN0YXRlOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucG9pbnRlclN0YXRlLmN0cmwpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RSYW5nZShub2RlLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKGNsZWFyQWNyaXZlRWwgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAoY2xlYXJBY3JpdmVFbCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLnRlbXAuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fcmFuZ2VzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyVGV4dFNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25SYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZXN0b3JlVGV4dFNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UodGhpcy5fc2VsZWN0aW9uUmFuZ2UgfHwgZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC50eXBlID09PSAncGl2b3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmRhdGFWaWV3LmZpbHRlcihyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gci5kaW1lbnNpb25zLm1hcChkID0+IFBpdm90VXRpbC5nZXRSZWNvcmRLZXkociwgZCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBrZXlzLnNvbWUoayA9PiB0aGlzLmlzUGl2b3RSb3dTZWxlY3RlZChrKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5wcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnJvd1NlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gW107XG4gICAgICAgIGNvbnN0IGdyaWREYXRhTWFwID0ge307XG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKS5mb3JFYWNoKHJvdyA9PiBncmlkRGF0YU1hcFt0aGlzLmdldFJlY29yZEtleShyb3cpXSA9IHJvdyk7XG4gICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmZvckVhY2gocklEID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJEYXRhID0gZ3JpZERhdGFNYXBbcklEXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxSb3dEYXRhID0ge307XG4gICAgICAgICAgICBwYXJ0aWFsUm93RGF0YVt0aGlzLmdyaWQucHJpbWFyeUtleV0gPSBySUQ7XG4gICAgICAgICAgICBzZWxlY3Rpb24ucHVzaChyRGF0YSA/IHJEYXRhIDogcGFydGlhbFJvd0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgc2VsZWN0ZWQgcm93IGlkJ3MuICovXG4gICAgcHVibGljIGdldFNlbGVjdGVkUm93cygpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93U2VsZWN0aW9uLnNpemUgPyBBcnJheS5mcm9tKHRoaXMucm93U2VsZWN0aW9uLmtleXMoKSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgcm93cyBpbiBpbmRldGVybWluYXRlIHN0YXRlLiAqL1xuICAgIHB1YmxpYyBnZXRJbmRldGVybWluYXRlUm93cygpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3Muc2l6ZSA/IEFycmF5LmZyb20odGhpcy5pbmRldGVybWluYXRlUm93cy5rZXlzKCkpIDogW107XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyByb3cgc2VsZWN0aW9uLCBpZiBmaWx0ZXJpbmcgaXMgYXBwbGllZCBjbGVhcnMgb25seSBzZWxlY3RlZCByb3dzIGZyb20gZmlsdGVyZWQgZGF0YS4gKi9cbiAgICBwdWJsaWMgY2xlYXJSb3dTZWxlY3Rpb24oZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCByZW1vdmVkUmVjID0gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/XG4gICAgICAgICAgICB0aGlzLmFsbERhdGEuZmlsdGVyKHJvdyA9PiB0aGlzLmlzUm93U2VsZWN0ZWQodGhpcy5nZXRSZWNvcmRLZXkocm93KSkpIDogc2VsZWN0ZWRSb3dzO1xuICAgICAgICBsZXQgbmV3U2VsZWN0aW9uO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IHRoaXMuaXNGaWx0ZXJpbmdBcHBsaWVkKCkgPyBzZWxlY3RlZFJvd3MuZmlsdGVyKHggPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhcmVtb3ZlZFJlYy5zb21lKGl0ZW0gPT4gaXRlbVt0aGlzLmdyaWQucHJpbWFyeUtleV0gPT09IHhbdGhpcy5ncmlkLnByaW1hcnlLZXldKTtcbiAgICAgICAgICAgIH0pIDogW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSB0aGlzLmlzRmlsdGVyaW5nQXBwbGllZCgpID8gc2VsZWN0ZWRSb3dzLmZpbHRlcih4ID0+ICFyZW1vdmVkUmVjLmluY2x1ZGVzKHgpKSA6IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIHJlbW92ZWRSZWMsIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgYWxsIHJvd3MsIGlmIGZpbHRlcmluZyBpcyBhcHBsaWVkIHNlbGVjdCBvbmx5IGZyb20gZmlsdGVyZWQgZGF0YS4gKi9cbiAgICBwdWJsaWMgc2VsZWN0QWxsUm93cyhldmVudD8pIHtcbiAgICAgICAgY29uc3QgYWRkZWRSb3dzID0gdGhpcy5hbGxEYXRhLmZpbHRlcigocm93KSA9PiAhdGhpcy5pc1Jvd1NlbGVjdGVkKHRoaXMuZ2V0UmVjb3JkS2V5KHJvdykpKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMucm93U2VsZWN0aW9uLnNpemUgPyBzZWxlY3RlZFJvd3MuY29uY2F0KGFkZGVkUm93cykgOiBhZGRlZFJvd3M7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZFJvd3MsIFtdLCBldmVudCwgc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHRoZSBzcGVjaWZpZWQgcm93IGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RSb3dCeUlkKHJvd0lELCBjbGVhclByZXZTZWxlY3Rpb24/LCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgaWYgKCEodGhpcy5ncmlkLmlzUm93U2VsZWN0YWJsZSB8fCB0aGlzLmdyaWQudHlwZSA9PT0gJ3Bpdm90JykgfHwgdGhpcy5pc1Jvd0RlbGV0ZWQocm93SUQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJQcmV2U2VsZWN0aW9uID0gIXRoaXMuZ3JpZC5pc011bHRpUm93U2VsZWN0aW9uRW5hYmxlZCB8fCBjbGVhclByZXZTZWxlY3Rpb247XG4gICAgICAgIGlmICh0aGlzLmdyaWQudHlwZSA9PT0gJ3Bpdm90Jykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQaXZvdFJvd0J5SWQocm93SUQsIGNsZWFyUHJldlNlbGVjdGlvbiwgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjbGVhclByZXZTZWxlY3Rpb24gPyBbdGhpcy5nZXRSb3dEYXRhQnlJZChyb3dJRCldIDogdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKSA/XG4gICAgICAgICAgICBzZWxlY3RlZFJvd3MgOiBbLi4uc2VsZWN0ZWRSb3dzLCB0aGlzLmdldFJvd0RhdGFCeUlkKHJvd0lEKV07XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBjbGVhclByZXZTZWxlY3Rpb24gPyBzZWxlY3RlZFJvd3MgOiBbXTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbdGhpcy5nZXRSb3dEYXRhQnlJZChyb3dJRCldLCByZW1vdmVkLCBldmVudCwgc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0UGl2b3RSb3dCeUlkKHJvd0lELCBjbGVhclByZXZTZWxlY3Rpb246IGJvb2xlYW4sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjbGVhclByZXZTZWxlY3Rpb24gPyBbcm93SURdIDogdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKSA/IHNlbGVjdGVkUm93cyA6IFsuLi5zZWxlY3RlZFJvd3MsIHJvd0lEXTtcbiAgICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLmdldFBpdm90Um93c0J5SWRzKFtyb3dJRF0pO1xuICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5nZXRQaXZvdFJvd3NCeUlkcyhjbGVhclByZXZTZWxlY3Rpb24gPyBzZWxlY3RlZFJvd3MgOiBbXSk7XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50UGl2b3RHcmlkKHNlbGVjdGVkUm93cywgbmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCB0aGUgc3BlY2lmaWVkIHJvdyBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RSb3cocm93SUQsIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNSb3dTZWxlY3RlZChyb3dJRCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLmdyaWQudHlwZSA9PT0gJ3Bpdm90Jykge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFBpdm90Um93QnlJRChyb3dJRCwgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBzZWxlY3RlZFJvd3MuZmlsdGVyKHIgPT4gIHRoaXMuZ2V0UmVjb3JkS2V5KHIpICE9PSByb3dJRCk7XG4gICAgICAgIGlmICh0aGlzLnJvd1NlbGVjdGlvbi5zaXplICYmIHRoaXMucm93U2VsZWN0aW9uLmhhcyhyb3dJRCkpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIFt0aGlzLmdldFJvd0RhdGFCeUlkKHJvd0lEKV0sIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VsZWN0UGl2b3RSb3dCeUlEKHJvd0lELCBldmVudD8pIHtcbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uLnNpemUgJiYgdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKSkge1xuICAgICAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjdXJyU2VsZWN0aW9uLmZpbHRlcihyID0+IHIgIT09IHJvd0lEKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgID0gdGhpcy5nZXRQaXZvdFJvd3NCeUlkcyhbcm93SURdKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50UGl2b3RHcmlkKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbiwgW10sIHJlbW92ZWQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdFJvd1NlbGVjdGlvbkV2ZW50UGl2b3RHcmlkKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJTZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgYXJnczogSVJvd1NlbGVjdGlvbkV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBvbGRTZWxlY3Rpb246IGN1cnJTZWxlY3RlZFJvd3MsXG4gICAgICAgICAgICBuZXdTZWxlY3Rpb246IHRoaXMuZ2V0UGl2b3RSb3dzQnlJZHMobmV3U2VsZWN0aW9uKSxcbiAgICAgICAgICAgIGFkZGVkLFxuICAgICAgICAgICAgcmVtb3ZlZCxcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIGFsbFJvd3NTZWxlY3RlZDogdGhpcy5hcmVBbGxSb3dTZWxlY3RlZChuZXdTZWxlY3Rpb24pXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RSb3dzV2l0aE5vRXZlbnQobmV3U2VsZWN0aW9uLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHRoZSBzcGVjaWZpZWQgcm93cyBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Um93cyhrZXlzOiBhbnlbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPzogYm9vbGVhbiwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmlzTXVsdGlSb3dTZWxlY3Rpb25FbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcm93c1RvU2VsZWN0ID0ga2V5cy5maWx0ZXIoeCA9PiAhdGhpcy5pc1Jvd0RlbGV0ZWQoeCkgJiYgIXRoaXMucm93U2VsZWN0aW9uLmhhcyh4KSk7XG4gICAgICAgIGlmICghcm93c1RvU2VsZWN0Lmxlbmd0aCAmJiAhY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBubyB2YWxpZC9hZGRpdGlvbmFsIHJvd3MgdG8gc2VsZWN0IGFuZCBubyBjbGVhclxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIHJvd3NUb1NlbGVjdCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gcm93c1RvU2VsZWN0Lm1hcChyID0+IHRoaXMuZ2V0Um93RGF0YUJ5SWQocikpIDogcm93c1RvU2VsZWN0O1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjbGVhclByZXZTZWxlY3Rpb24gPyByb3dzVG9TZWxlY3QgOiBbLi4uc2VsZWN0ZWRSb3dzLCAuLi5yb3dzVG9TZWxlY3RdO1xuICAgICAgICBjb25zdCBrZXlzQXNTZXQgPSBuZXcgU2V0KHJvd3NUb1NlbGVjdCk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBjbGVhclByZXZTZWxlY3Rpb24gPyBzZWxlY3RlZFJvd3MuZmlsdGVyKHggPT4gIWtleXNBc1NldC5oYXMoeCkpIDogW107XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgcm93c1RvU2VsZWN0LCByZW1vdmVkLCBldmVudCwgc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZWxlY3RSb3dzKGtleXM6IGFueVtdLCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd1NlbGVjdGlvbi5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJvd3NUb0Rlc2VsZWN0ID0ga2V5cy5maWx0ZXIoeCA9PiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMoeCkpO1xuICAgICAgICBpZiAoIXJvd3NUb0Rlc2VsZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICByb3dzVG9EZXNlbGVjdCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gcm93c1RvRGVzZWxlY3QubWFwKHIgPT4gdGhpcy5nZXRSb3dEYXRhQnlJZChyKSkgOiByb3dzVG9EZXNlbGVjdDtcbiAgICAgICAgY29uc3Qga2V5c0FzU2V0ID0gbmV3IFNldChyb3dzVG9EZXNlbGVjdCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHNlbGVjdGVkUm93cy5maWx0ZXIociA9PiAha2V5c0FzU2V0LmhhcyhyKSk7XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIHJvd3NUb0Rlc2VsZWN0LCBldmVudCwgc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHNwZWNpZmllZCByb3dzLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPyk6IHZvaWQge1xuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHJvd0lEcy5mb3JFYWNoKHJvd0lEID0+IHRoaXMucm93U2VsZWN0aW9uLmFkZChyb3dJRCkpO1xuICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHNwZWNpZmllZCByb3dzLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHM6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgIHJvd0lEcy5mb3JFYWNoKHJvd0lEID0+IHRoaXMucm93U2VsZWN0aW9uLmRlbGV0ZShyb3dJRCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUm93U2VsZWN0ZWQocm93SUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93U2VsZWN0aW9uLnNpemUgPiAwICYmIHRoaXMucm93U2VsZWN0aW9uLmhhcyhyb3dJRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUGl2b3RSb3dTZWxlY3RlZChyb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY29udGFpbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RSb3dJZCA9IHJvd0lELnJlcGxhY2UoeCwnJyk7XG4gICAgICAgICAgICBpZiAocm93SUQuaW5jbHVkZXMoeCkgJiYgKGNvcnJlY3RSb3dJZCA9PT0gJycgfHwgY29ycmVjdFJvd0lkLnN0YXJ0c1dpdGgoJ18nKSkgKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGlvbi5zaXplID4gMCAmJiBjb250YWlucztcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNSb3dJbkluZGV0ZXJtaW5hdGVTdGF0ZShyb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRldGVybWluYXRlUm93cy5zaXplID4gMCAmJiB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLmhhcyhyb3dJRCk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCByYW5nZSBmcm9tIGxhc3Qgc2VsZWN0ZWQgcm93IHRvIHRoZSBjdXJyZW50IHNwZWNpZmllZCByb3cuICovXG4gICAgcHVibGljIHNlbGVjdE11bHRpcGxlUm93cyhyb3dJRCwgcm93RGF0YSwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgIGlmICghdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSB8fCB0aGlzLmlzUm93RGVsZXRlZChyb3dJRCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93QnlJZChyb3dJRCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JpZERhdGEgPSB0aGlzLmFsbERhdGE7XG4gICAgICAgIGNvbnN0IGxhc3RSb3dJRCA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKClbdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSAtIDFdO1xuICAgICAgICBjb25zdCBjdXJySW5kZXggPSBncmlkRGF0YS5pbmRleE9mKHRoaXMuZ2V0Um93RGF0YUJ5SWQobGFzdFJvd0lEKSk7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gZ3JpZERhdGEuaW5kZXhPZihyb3dEYXRhKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IGdyaWREYXRhLnNsaWNlKE1hdGgubWluKGN1cnJJbmRleCwgbmV3SW5kZXgpLCBNYXRoLm1heChjdXJySW5kZXgsIG5ld0luZGV4KSArIDEpO1xuICAgICAgICBjb25zdCBjdXJyU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IGFkZGVkID0gcm93cy5maWx0ZXIociA9PiAhdGhpcy5pc1Jvd1NlbGVjdGVkKHRoaXMuZ2V0UmVjb3JkS2V5KHIpKSk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGN1cnJTZWxlY3Rpb24uY29uY2F0KGFkZGVkKTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgW10sIGV2ZW50LCBjdXJyU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXJlQWxsUm93U2VsZWN0ZWQobmV3U2VsZWN0aW9uPyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5kYXRhICYmICFuZXdTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hbGxSb3dzU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCAmJiAhbmV3U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxSb3dzU2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRhID0gbmV3IFNldChuZXdTZWxlY3Rpb24gPyBuZXdTZWxlY3Rpb24gOiBbLi4udGhpcy5yb3dTZWxlY3Rpb25dKTtcbiAgICAgICAgY29uc3QgYWxsRGF0YSA9IHRoaXMuZ2V0Um93SURzKHRoaXMuYWxsRGF0YSk7XG4gICAgICAgIGNvbnN0IHVuU2VsZWN0ZWRSb3dzID0gYWxsRGF0YS5maWx0ZXIocm93ID0+ICFzZWxlY3RlZERhdGEuaGFzKHJvdykpO1xuICAgICAgICByZXR1cm4gdGhpcy5hbGxSb3dzU2VsZWN0ZWQgPSB0aGlzLmFsbERhdGEubGVuZ3RoID4gMCAmJiB1blNlbGVjdGVkUm93cy5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc1NvbWVSb3dTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhID0gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/XG4gICAgICAgICAgICB0aGlzLmdldFJvd0lEcyh0aGlzLmdyaWQuZmlsdGVyZWREYXRhKS5zb21lKHJJRCA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocklEKSkgOiB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSA+IDAgJiYgZmlsdGVyZWREYXRhICYmICF0aGlzLmFyZUFsbFJvd1NlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWx0ZXJlZFNlbGVjdGVkUm93SWRzKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNGaWx0ZXJpbmdBcHBsaWVkKCkgP1xuICAgICAgICAgICAgdGhpcy5nZXRSb3dJRHModGhpcy5hbGxEYXRhKS5maWx0ZXIocm93SUQgPT4gdGhpcy5pc1Jvd1NlbGVjdGVkKHJvd0lEKSkgOlxuICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RlZFJvd3MoKS5maWx0ZXIocm93SUQgPT4gIXRoaXMuaXNSb3dEZWxldGVkKHJvd0lEKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8sIGN1cnJTZWxlY3Rpb24/KTogYm9vbGVhbiB7XG4gICAgICAgIGN1cnJTZWxlY3Rpb24gPSBjdXJyU2VsZWN0aW9uID8/IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBpZiAodGhpcy5hcmVFcXVhbENvbGxlY3Rpb25zKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzOiBJUm93U2VsZWN0aW9uRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogY3VyclNlbGVjdGlvbixcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkLCByZW1vdmVkLFxuICAgICAgICAgICAgZXZlbnQsIGNhbmNlbDogZmFsc2UsXG4gICAgICAgICAgICBhbGxSb3dzU2VsZWN0ZWQ6IHRoaXMuYXJlQWxsUm93U2VsZWN0ZWQobmV3U2VsZWN0aW9uLm1hcChyID0+ICB0aGlzLmdldFJlY29yZEtleShyKSkpXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ncmlkLnJvd1NlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdFJvd3NXaXRoTm9FdmVudChhcmdzLm5ld1NlbGVjdGlvbi5tYXAociA9PiB0aGlzLmdldFJlY29yZEtleShyKSksIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQaXZvdFJvd3NCeUlkcyhpZHM6IGFueVtdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmlsdGVyKHIgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IHIuZGltZW5zaW9ucy5tYXAoZCA9PiBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHIsIGQpKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2V0KGlkcy5jb25jYXQoa2V5cykpLnNpemUgPCBpZHMubGVuZ3RoICsga2V5cy5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSb3dEYXRhQnlJZChyb3dJRCk6IGFueSB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiByb3dJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuZ2V0Um93SURzKHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKSkuaW5kZXhPZihyb3dJRCk7XG4gICAgICAgIHJldHVybiByb3dJbmRleCA8IDAgPyByb3dJRCA6IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKVtyb3dJbmRleF07XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFySGVhZGVyQ0JTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hbGxSb3dzU2VsZWN0ZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvd0lEcyhkYXRhKTogQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleSAmJiBkYXRhLmxlbmd0aCA/IGRhdGEubWFwKHJlYyA9PiByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlY29yZEtleShyZWNvcmQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gcmVjb3JkW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHJlY29yZDtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXIgcm93U2VsZWN0aW9uIGFuZCB1cGRhdGUgY2hlY2tib3ggc3RhdGUgKi9cbiAgICBwdWJsaWMgY2xlYXJBbGxTZWxlY3RlZFJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGFsbCBkYXRhIGluIHRoZSBncmlkLCB3aXRoIGFwcGxpZWQgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIGFuZCB3aXRob3V0IGRlbGV0ZWQgcm93cy4gKi9cbiAgICBwdWJsaWMgZ2V0IGFsbERhdGEoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIGxldCBhbGxEYXRhO1xuICAgICAgICAvLyBWLlQuIEphbiAxN3RoLCAyMDI0ICMxMzc1NyBBZGRpbmcgYW4gYWRkaXRpb25hbCBjb25kaXRpb25hbCBjaGVjayB0byB0YWtlIGFjY291bnQgV0lUSElOIHJhbmdlIG9mIGdyb3Vwc1xuICAgICAgICBpZiAodGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSB8fCB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCB8fCB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBhbGxEYXRhID0gdGhpcy5ncmlkLnBpbm5lZFJlY29yZHNDb3VudCA/IHRoaXMuZ3JpZC5fZmlsdGVyZWRTb3J0ZWRVbnBpbm5lZERhdGEgOiB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWxsRGF0YSA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxsRGF0YS5maWx0ZXIockRhdGEgPT4gIXRoaXMuaXNSb3dEZWxldGVkKHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfaWQockRhdGEpKSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2YgdGhlIHNlbGVjdGVkIGNvbHVtbnMgZmllbGRzLiAqL1xuICAgIHB1YmxpYyBnZXRTZWxlY3RlZENvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtblNlbGVjdGlvbi5zaXplID8gQXJyYXkuZnJvbSh0aGlzLmNvbHVtblNlbGVjdGlvbi5rZXlzKCkpIDogW107XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29sdW1uU2VsZWN0ZWQoZmllbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5TZWxlY3Rpb24uc2l6ZSA+IDAgJiYgdGhpcy5jb2x1bW5TZWxlY3Rpb24uaGFzKGZpZWxkKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHRoZSBzcGVjaWZpZWQgY29sdW1uIGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW4oZmllbGQ6IHN0cmluZywgY2xlYXJQcmV2U2VsZWN0aW9uPywgc2VsZWN0Q29sdW1uc1JhbmdlPywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXRlQ29sdW1uID0gdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPyB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlOYW1lKHRoaXMuY29sdW1uc1N0YXRlLmZpZWxkKSA6IG51bGw7XG4gICAgICAgIGlmICghZXZlbnQgfHwgIXN0YXRlQ29sdW1uIHx8IHN0YXRlQ29sdW1uLnZpc2libGVJbmRleCA8IDAgfHwgIXNlbGVjdENvbHVtbnNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPSBmaWVsZDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1N0YXRlLnJhbmdlID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IFtmaWVsZF0gOiB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmluZGV4T2YoZmllbGQpICE9PSAtMSA/XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKSA6IFsuLi50aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLCBmaWVsZF07XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoY29sRmllbGQgPT4gY29sRmllbGQgIT09IGZpZWxkKSA6IFtdO1xuICAgICAgICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoZmllbGQpID8gW10gOiBbZmllbGRdO1xuICAgICAgICAgICAgdGhpcy5lbWl0Q29sdW1uU2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdENvbHVtbnNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RDb2x1bW5zUmFuZ2UoZmllbGQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTZWxlY3Qgc3BlY2lmaWVkIGNvbHVtbnMuIEFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW5zKGZpZWxkczogc3RyaW5nW10sIGNsZWFyUHJldlNlbGVjdGlvbj8sIHNlbGVjdENvbHVtbnNSYW5nZT8sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gZmllbGRzLm1hcChmID0+IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUoZikpLnNvcnQoKGEsIGIpID0+IGEudmlzaWJsZUluZGV4IC0gYi52aXNpYmxlSW5kZXgpO1xuICAgICAgICBjb25zdCBzdGF0ZUNvbHVtbiA9IHRoaXMuY29sdW1uc1N0YXRlLmZpZWxkID8gdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZSh0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCkgOiBudWxsO1xuICAgICAgICBpZiAoIXN0YXRlQ29sdW1uIHx8IHN0YXRlQ29sdW1uLnZpc2libGVJbmRleCA8IDAgfHwgIXNlbGVjdENvbHVtbnNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPSBjb2x1bW5zWzBdID8gY29sdW1uc1swXS5maWVsZCA6IG51bGw7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5yYW5nZSA9IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IGZpZWxkcy5maWx0ZXIoY29sRmllbGQgPT4gIXRoaXMuaXNDb2x1bW5TZWxlY3RlZChjb2xGaWVsZCkpO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuZmlsdGVyKGNvbEZpZWxkID0+IGZpZWxkcy5pbmRleE9mKGNvbEZpZWxkKSA9PT0gLTEpIDogW107XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjbGVhclByZXZTZWxlY3Rpb24gPyBmaWVsZHMgOiB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmNvbmNhdChhZGRlZCk7XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVkU3RhcnQgPSBzdGF0ZUNvbHVtbi52aXNpYmxlSW5kZXggPlxuICAgICAgICAgICAgICAgIGNvbHVtbnNbY29sdW1ucy5sZW5ndGggLSAxXS52aXNpYmxlSW5kZXggPyBjb2x1bW5zWzBdLmZpZWxkIDogY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdLmZpZWxkO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RDb2x1bW5zUmFuZ2UoZmlsZWRTdGFydCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCByYW5nZSBmcm9tIGxhc3QgY2xpY2tlZCBjb2x1bW4gdG8gdGhlIGN1cnJlbnQgc3BlY2lmaWVkIGNvbHVtbi4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Q29sdW1uc1JhbmdlKGZpZWxkOiBzdHJpbmcsIGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJJbmRleCA9IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUodGhpcy5jb2x1bW5zU3RhdGUuZmllbGQpLnZpc2libGVJbmRleDtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmdyaWQuY29sdW1uVG9WaXNpYmxlSW5kZXgoZmllbGQpO1xuICAgICAgICBjb25zdCBjb2x1bW5zRmllbGRzID0gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKGMgPT4gIWMuY29sdW1uR3JvdXApXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS52aXNpYmxlSW5kZXggLSBiLnZpc2libGVJbmRleClcbiAgICAgICAgICAgIC5zbGljZShNYXRoLm1pbihjdXJySW5kZXgsIG5ld0luZGV4KSwgTWF0aC5tYXgoY3VyckluZGV4LCBuZXdJbmRleCkgKyAxKVxuICAgICAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLnNlbGVjdGFibGUpLm1hcChjb2wgPT4gY29sLmZpZWxkKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IFtdO1xuICAgICAgICBjb25zdCBvbGRBZGRlZCA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZCA9IGNvbHVtbnNGaWVsZHMuZmlsdGVyKGNvbEZpZWxkID0+ICF0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoY29sRmllbGQpKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUucmFuZ2UuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW5zRmllbGRzLmluZGV4T2YoZikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvbGRBZGRlZC5wdXNoKGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUucmFuZ2UgPSBjb2x1bW5zRmllbGRzLmZpbHRlcihjb2xGaWVsZCA9PiAhdGhpcy5pc0NvbHVtblNlbGVjdGVkKGNvbEZpZWxkKSB8fCBvbGRBZGRlZC5pbmRleE9mKGNvbEZpZWxkKSA+IC0xKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5jb25jYXQoYWRkZWQpLmZpbHRlcihjID0+IHJlbW92ZWQuaW5kZXhPZihjKSA9PT0gLTEpO1xuICAgICAgICB0aGlzLmVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCBzcGVjaWZpZWQgY29sdW1ucy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Q29sdW1uc1dpdGhOb0V2ZW50KGZpZWxkczogc3RyaW5nW10sIGNsZWFyUHJldlNlbGVjdGlvbj8pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNsZWFyUHJldlNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5TZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbi5hZGQoZmllbGQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3QgdGhlIHNwZWNpZmllZCBjb2x1bW4gYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Q29sdW1uKGZpZWxkOiBzdHJpbmcsIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRDb2x1bW5zU3RhdGUoKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoYyA9PiBjICE9PSBmaWVsZCk7XG4gICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIFtmaWVsZF0sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3Qgc3BlY2lmaWVkIGNvbHVtbnMuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Q29sdW1uc1dpdGhOb0V2ZW50KGZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4gdGhpcy5jb2x1bW5TZWxlY3Rpb24uZGVsZXRlKGZpZWxkKSk7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHNwZWNpZmllZCBjb2x1bW5zLiBBbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RDb2x1bW5zKGZpZWxkczogc3RyaW5nW10sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoY29sRmllbGQgPT4gZmllbGRzLmluZGV4T2YoY29sRmllbGQpID4gLTEpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjb2xGaWVsZCA9PiBmaWVsZHMuaW5kZXhPZihjb2xGaWVsZCkgPT09IC0xKTtcblxuICAgICAgICB0aGlzLmVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFtdLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLFxuICAgICAgICAgICAgYWRkZWQsIHJlbW92ZWQsIGV2ZW50LCBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdENvbHVtbnNXaXRoTm9FdmVudChhcmdzLm5ld1NlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIENsZWFyIGNvbHVtblNlbGVjdGlvbiAqL1xuICAgIHB1YmxpYyBjbGVhckFsbFNlbGVjdGVkQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5TZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXJlRXF1YWxDb2xsZWN0aW9ucyhmaXJzdCwgc2Vjb25kKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaXJzdC5sZW5ndGggPT09IHNlY29uZC5sZW5ndGggJiYgbmV3IFNldChmaXJzdC5jb25jYXQoc2Vjb25kKSkuc2l6ZSA9PT0gZmlyc3QubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICjila/CsOKWocKw77yJ4pWv77i1IOKUu+KUgeKUu1xuICAgICAqIENocm9tZSBhbmQgQ2hyb21pdW0gZG9uJ3QgY2FyZSBhYm91dCB0aGUgYWN0aXZlXG4gICAgICogcmFuZ2UgYWZ0ZXIga2V5Ym9hcmQgbmF2aWdhdGlvbiwgdGh1cyB0aGlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX21vdmVTZWxlY3Rpb25DaHJvbWUobm9kZTogTm9kZSkge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShub2RlKTtcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0ZpbHRlcmluZ0FwcGxpZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KHRoaXMuZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHx8XG4gICAgICAgICAgICAhRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KHRoaXMuZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Jvd0RlbGV0ZWQocm93SUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLnJvd19kZWxldGVkX3RyYW5zYWN0aW9uKHJvd0lEKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvaW50ZXJPcmlnaW5IYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMucG9pbnRlckV2ZW50SW5HcmlkQm9keSA9IGZhbHNlO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMucG9pbnRlck9yaWdpbkhhbmRsZXIpO1xuXG4gICAgICAgIGNvbnN0IHRhcmdldFRhZ05hbWUgPSBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAodGFyZ2V0VGFnTmFtZSAhPT0gJ2lneC1ncmlkLWNlbGwnICYmIHRhcmdldFRhZ05hbWUgIT09ICdpZ3gtdHJlZS1ncmlkLWNlbGwnKSB7XG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJVcCh0aGlzLl9sYXN0U2VsZWN0ZWROb2RlLCB0aGlzLmdyaWQucmFuZ2VTZWxlY3RlZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIl19
|
|
759
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFZNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFJckQsTUFBTSxPQUFPLHVCQUF1QjtJQTZCaEM7OztPQUdHO0lBQ0gsSUFBVyxNQUFNO1FBRWIsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV4RSxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDckUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQVcsYUFBYSxDQUFD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SSxLQUFLLEVBQUUsQ0FBQztRQUMxQixLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztZQUN0RSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFLO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQzs4R0FsMEJRLHVCQUF1QjtrSEFBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIH0gZnJvbSAnLi4vLi4vZGF0YS1vcGVyYXRpb25zL2ZpbHRlcmluZy1leHByZXNzaW9ucy10cmVlJztcbmltcG9ydCB7IElSb3dTZWxlY3Rpb25FdmVudEFyZ3MgfSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gICAgR3JpZFNlbGVjdGlvblJhbmdlLFxuICAgIElDb2x1bW5TZWxlY3Rpb25TdGF0ZSxcbiAgICBJTXVsdGlSb3dMYXlvdXROb2RlLFxuICAgIElTZWxlY3Rpb25LZXlib2FyZFN0YXRlLFxuICAgIElTZWxlY3Rpb25Ob2RlLFxuICAgIElTZWxlY3Rpb25Qb2ludGVyU3RhdGUsXG4gICAgU2VsZWN0aW9uU3RhdGVcbn0gZnJvbSAnLi4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IFBpdm90VXRpbCB9IGZyb20gJy4uL3Bpdm90LWdyaWQvcGl2b3QtdXRpbCc7XG5cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgICBwdWJsaWMgZ3JpZDogR3JpZFR5cGU7XG4gICAgcHVibGljIGRyYWdNb2RlID0gZmFsc2U7XG4gICAgcHVibGljIGFjdGl2ZUVsZW1lbnQ6IElTZWxlY3Rpb25Ob2RlIHwgbnVsbDtcbiAgICBwdWJsaWMga2V5Ym9hcmRTdGF0ZSA9IHt9IGFzIElTZWxlY3Rpb25LZXlib2FyZFN0YXRlO1xuICAgIHB1YmxpYyBwb2ludGVyU3RhdGUgPSB7fSBhcyBJU2VsZWN0aW9uUG9pbnRlclN0YXRlO1xuICAgIHB1YmxpYyBjb2x1bW5zU3RhdGUgPSB7fSBhcyBJQ29sdW1uU2VsZWN0aW9uU3RhdGU7XG5cbiAgICBwdWJsaWMgc2VsZWN0aW9uID0gbmV3IE1hcDxudW1iZXIsIFNldDxudW1iZXI+PigpO1xuICAgIHB1YmxpYyB0ZW1wID0gbmV3IE1hcDxudW1iZXIsIFNldDxudW1iZXI+PigpO1xuICAgIHB1YmxpYyByb3dTZWxlY3Rpb246IFNldDxhbnk+ID0gbmV3IFNldDxhbnk+KCk7XG4gICAgcHVibGljIGluZGV0ZXJtaW5hdGVSb3dzOiBTZXQ8YW55PiA9IG5ldyBTZXQ8YW55PigpO1xuICAgIHB1YmxpYyBjb2x1bW5TZWxlY3Rpb246IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRSb3dzQ2hhbmdlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZWQgd2hlbiBhIHBvaW50ZXJkb3duIGV2ZW50IGlzIHRyaWdnZXJlZCBpbnNpZGUgdGhlIGdyaWQgYm9keSAoY2VsbHMpLlxuICAgICAqIFdoZW4gYGZhbHNlYCB0aGUgZHJhZyBzZWxlY3QgYmVoYXZpb3IgaXMgZGlzYWJsZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwb2ludGVyRXZlbnRJbkdyaWRCb2R5ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGFsbFJvd3NTZWxlY3RlZDogYm9vbGVhbjtcbiAgICBwcml2YXRlIF9sYXN0U2VsZWN0ZWROb2RlOiBJU2VsZWN0aW9uTm9kZTtcbiAgICBwcml2YXRlIF9yYW5nZXM6IFNldDxzdHJpbmc+ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uUmFuZ2U6IFJhbmdlO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBzZWxlY3RlZCByYW5nZXMgaW4gdGhlIGdyaWQgZnJvbSBib3RoXG4gICAgICoga2V5Ym9hcmQgYW5kIHBvaW50ZXIgaW50ZXJhY3Rpb25zXG4gICAgICovXG4gICAgcHVibGljIGdldCByYW5nZXMoKTogR3JpZFNlbGVjdGlvblJhbmdlW10ge1xuXG4gICAgICAgIC8vIFRoZSBsYXN0IGFjdGlvbiB3YXMga2V5Ym9hcmQgKyBzaGlmdCBzZWxlY3Rpb24gLT4gYWRkIGl0XG4gICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRSYW5nZSgpO1xuXG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IEFycmF5LmZyb20odGhpcy5fcmFuZ2VzKS5tYXAocmFuZ2UgPT4gSlNPTi5wYXJzZShyYW5nZSkpO1xuXG4gICAgICAgIC8vIE5vIHJhbmdlcyBidXQgd2UgaGF2ZSBhIGZvY3VzZWQgY2VsbCAtPiBhZGQgaXRcbiAgICAgICAgaWYgKCFyYW5nZXMubGVuZ3RoICYmIHRoaXMuYWN0aXZlRWxlbWVudCAmJiB0aGlzLmdyaWQuaXNDZWxsU2VsZWN0YWJsZSkge1xuICAgICAgICAgICAgcmFuZ2VzLnB1c2godGhpcy5nZW5lcmF0ZVJhbmdlKHRoaXMuYWN0aXZlRWxlbWVudCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByaW1hcnlCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvaW50ZXJTdGF0ZS5wcmltYXJ5QnV0dG9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcHJpbWFyeUJ1dHRvbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5wcmltYXJ5QnV0dG9uID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB6b25lOiBOZ1pvbmUsIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsKSB7XG4gICAgICAgIHRoaXMuaW5pdFBvaW50ZXJTdGF0ZSgpO1xuICAgICAgICB0aGlzLmluaXRLZXlib2FyZFN0YXRlKCk7XG4gICAgICAgIHRoaXMuaW5pdENvbHVtbnNTdGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUga2V5Ym9hcmQgc3RhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdEtleWJvYXJkU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLnNoaWZ0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5yYW5nZSA9IG51bGw7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIHBvaW50ZXIgc3RhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdFBvaW50ZXJTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLmN0cmwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUuc2hpZnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUucmFuZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5wcmltYXJ5QnV0dG9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIGNvbHVtbnMgc3RhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgaW5pdENvbHVtbnNTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPSBudWxsO1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5yYW5nZSA9IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBzaW5nbGUgbm9kZS5cbiAgICAgKiBTaW5nbGUgY2xpY2tzIHwgQ3RybCArIHNpbmdsZSBjbGlja3Mgb24gY2VsbHMgaXMgdGhlIHVzdWFsIGNhc2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZChub2RlOiBJU2VsZWN0aW9uTm9kZSwgYWRkVG9SYW5nZSA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmhhcyhub2RlLnJvdykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmdldChub2RlLnJvdykuYWRkKG5vZGUuY29sdW1uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNldChub2RlLnJvdywgbmV3IFNldDxudW1iZXI+KCkpLmdldChub2RlLnJvdykuYWRkKG5vZGUuY29sdW1uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhZGRUb1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZXMuYWRkKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0aGUgYWN0aXZlIGtleWJvYXJkIHJhbmdlIHNlbGVjdGlvbiAoaWYgYW55KSB0byB0aGUgYHJhbmdlc2AgbWV0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkS2V5Ym9hcmRSYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmRTdGF0ZS5yYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2VzLmFkZChKU09OLnN0cmluZ2lmeSh0aGlzLmtleWJvYXJkU3RhdGUucmFuZ2UpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmUobm9kZTogSVNlbGVjdGlvbk5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmhhcyhub2RlLnJvdykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmdldChub2RlLnJvdykuZGVsZXRlKG5vZGUuY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FjdGl2ZU5vZGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmFuZ2VzLmRlbGV0ZShKU09OLnN0cmluZ2lmeSh0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNJbk1hcChub2RlOiBJU2VsZWN0aW9uTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0aW9uLmhhcyhub2RlLnJvdykgJiYgdGhpcy5zZWxlY3Rpb24uZ2V0KG5vZGUucm93KS5oYXMobm9kZS5jb2x1bW4pKSB8fFxuICAgICAgICAgICAgKHRoaXMudGVtcC5oYXMobm9kZS5yb3cpICYmIHRoaXMudGVtcC5nZXQobm9kZS5yb3cpLmhhcyhub2RlLmNvbHVtbikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RlZChub2RlOiBJU2VsZWN0aW9uTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXNBY3RpdmVOb2RlKG5vZGUpICYmIHRoaXMuZ3JpZC5pc0NlbGxTZWxlY3RhYmxlKSB8fCB0aGlzLmlzSW5NYXAobm9kZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWN0aXZlTm9kZShub2RlOiBJU2VsZWN0aW9uTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuYWN0aXZlRWxlbWVudC5jb2x1bW4gPT09IG5vZGUuY29sdW1uICYmIHRoaXMuYWN0aXZlRWxlbWVudC5yb3cgPT09IG5vZGUucm93O1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNDb2x1bW5MYXlvdXRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGF5b3V0ID0gdGhpcy5hY3RpdmVFbGVtZW50LmxheW91dDtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNBY3RpdmUgJiYgdGhpcy5pc0FjdGl2ZUxheW91dChsYXlvdXQsIG5vZGUubGF5b3V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpc0FjdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWN0aXZlTGF5b3V0KGN1cnJlbnQ6IElNdWx0aVJvd0xheW91dE5vZGUsIHRhcmdldDogSU11bHRpUm93TGF5b3V0Tm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gY3VycmVudC5jb2x1bW5WaXNpYmxlSW5kZXggPT09IHRhcmdldC5jb2x1bW5WaXNpYmxlSW5kZXg7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFJhbmdlTWV0YShub2RlOiBJU2VsZWN0aW9uTm9kZSwgc3RhdGU/OiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yYW5nZXMuYWRkKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCBzdGF0ZSkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlUmFuZ2VNZXRhKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzdGF0ZT86IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jhbmdlcy5kZWxldGUoSlNPTi5zdHJpbmdpZnkodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHN0YXRlKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIG5ldyBzZWxlY3Rpb24gcmFuZ2UgZnJvbSB0aGUgZ2l2ZW4gYG5vZGVgLlxuICAgICAqIElmIGBzdGF0ZWAgaXMgcGFzc2VkIGluc3RlYWQgaXQgd2lsbCBnZW5lcmF0ZSB0aGUgcmFuZ2UgYmFzZWQgb24gdGhlIHBhc3NlZCBgbm9kZWBcbiAgICAgKiBhbmQgdGhlIHN0YXJ0IG5vZGUgb2YgdGhlIGBzdGF0ZWAuXG4gICAgICovXG4gICAgcHVibGljIGdlbmVyYXRlUmFuZ2Uobm9kZTogSVNlbGVjdGlvbk5vZGUsIHN0YXRlPzogU2VsZWN0aW9uU3RhdGUpOiBHcmlkU2VsZWN0aW9uUmFuZ2Uge1xuICAgICAgICB0aGlzLl9sYXN0U2VsZWN0ZWROb2RlID0gbm9kZTtcblxuICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiBub2RlLnJvdyxcbiAgICAgICAgICAgICAgICByb3dFbmQ6IG5vZGUucm93LFxuICAgICAgICAgICAgICAgIGNvbHVtblN0YXJ0OiBub2RlLmNvbHVtbixcbiAgICAgICAgICAgICAgICBjb2x1bW5FbmQ6IG5vZGUuY29sdW1uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyByb3csIGNvbHVtbiB9ID0gc3RhdGUubm9kZTtcbiAgICAgICAgY29uc3Qgcm93U3RhcnQgPSBNYXRoLm1pbihub2RlLnJvdywgcm93KTtcbiAgICAgICAgY29uc3Qgcm93RW5kID0gTWF0aC5tYXgobm9kZS5yb3csIHJvdyk7XG4gICAgICAgIGNvbnN0IGNvbHVtblN0YXJ0ID0gTWF0aC5taW4obm9kZS5jb2x1bW4sIGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNvbHVtbkVuZCA9IE1hdGgubWF4KG5vZGUuY29sdW1uLCBjb2x1bW4pO1xuXG4gICAgICAgIHJldHVybiB7IHJvd1N0YXJ0LCByb3dFbmQsIGNvbHVtblN0YXJ0LCBjb2x1bW5FbmQgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqL1xuICAgIHB1YmxpYyBrZXlib2FyZFN0YXRlT25LZXlkb3duKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzaGlmdDogYm9vbGVhbiwgc2hpZnRUYWI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5pdFBvaW50ZXJTdGF0ZSgpO1xuICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUuc2hpZnQgPSBzaGlmdCAmJiAhc2hpZnRUYWI7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLm5hdmlnYXRpb24uaXNEYXRhUm93KG5vZGUucm93KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEtiIG5hdmlnYXRpb24gd2l0aCBzaGlmdCBhbmQgbm8gcHJldmlvdXMgbm9kZS5cbiAgICAgICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIGluaXQgdGhlIHN0YXJ0IG5vZGUuXG4gICAgICAgIGlmICh0aGlzLmtleWJvYXJkU3RhdGUuc2hpZnQgJiYgIXRoaXMua2V5Ym9hcmRTdGF0ZS5ub2RlKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUubm9kZSA9IE9iamVjdC5hc3NpZ24oe30sIG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGtleWJvYXJkU3RhdGVPbkZvY3VzKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBlbWl0dGVyOiBFdmVudEVtaXR0ZXI8R3JpZFNlbGVjdGlvblJhbmdlPiwgZG9tKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGtiU3RhdGUgPSB0aGlzLmtleWJvYXJkU3RhdGU7XG5cbiAgICAgICAgLy8gRm9jdXMgdHJpZ2dlcmVkIGJ5IGtleWJvYXJkIG5hdmlnYXRpb25cbiAgICAgICAgaWYgKGtiU3RhdGUuYWN0aXZlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0Nocm9taXVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW92ZVNlbGVjdGlvbkNocm9tZShkb20pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RhcnQgZ2VuZXJhdGluZyBhIHJhbmdlIGlmIHNoaWZ0IGlzIGhvbGRcbiAgICAgICAgICAgIGlmIChrYlN0YXRlLnNoaWZ0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcmFnU2VsZWN0KG5vZGUsIGtiU3RhdGUpO1xuICAgICAgICAgICAgICAgIGtiU3RhdGUucmFuZ2UgPSB0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSwga2JTdGF0ZSk7XG4gICAgICAgICAgICAgICAgZW1pdHRlci5lbWl0KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCBrYlN0YXRlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmluaXRLZXlib2FyZFN0YXRlKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmFkZChub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwb2ludGVyRG93bihub2RlOiBJU2VsZWN0aW9uTm9kZSwgc2hpZnQ6IGJvb2xlYW4sIGN0cmw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hZGRLZXlib2FyZFJhbmdlKCk7XG4gICAgICAgIHRoaXMuaW5pdEtleWJvYXJkU3RhdGUoKTtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUuY3RybCA9IGN0cmw7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLnNoaWZ0ID0gc2hpZnQ7XG4gICAgICAgIHRoaXMucG9pbnRlckV2ZW50SW5HcmlkQm9keSA9IHRydWU7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5wb2ludGVyT3JpZ2luSGFuZGxlcik7XG5cbiAgICAgICAgLy8gTm8gY3RybCBrZXkgcHJlc3NlZCAtIG5vIG11bHRpcGxlIHNlbGVjdGlvblxuICAgICAgICBpZiAoIWN0cmwpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaGlmdCkge1xuICAgICAgICAgICAgLy8gTm8gcHJldmlvdXNseSAnY2xpY2tlZCcgbm9kZS4gVXNlIHRoZSBsYXN0IGFjdGl2ZSBub2RlLlxuICAgICAgICAgICAgaWYgKCF0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUubm9kZSA9IHRoaXMuYWN0aXZlRWxlbWVudCB8fCBub2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb2ludGVyRG93blNoaWZ0S2V5KG5vZGUpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclRleHRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVtb3ZlUmFuZ2VNZXRhKG5vZGUpO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlID0gbm9kZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9pbnRlckRvd25TaGlmdEtleShub2RlOiBJU2VsZWN0aW9uTm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0UmFuZ2Uobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtZXJnZU1hcCh0YXJnZXQ6IE1hcDxudW1iZXIsIFNldDxudW1iZXI+Piwgc291cmNlOiBNYXA8bnVtYmVyLCBTZXQ8bnVtYmVyPj4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBzb3VyY2UuZW50cmllcygpO1xuICAgICAgICBsZXQgcGFpciA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgbGV0IGtleTogbnVtYmVyO1xuICAgICAgICBsZXQgdmFsdWU6IFNldDxudW1iZXI+O1xuXG4gICAgICAgIHdoaWxlICghcGFpci5kb25lKSB7XG4gICAgICAgICAgICBba2V5LCB2YWx1ZV0gPSBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgaWYgKHRhcmdldC5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGFyZ2V0LmdldChrZXkpO1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2gocmVjb3JkID0+IG5ld1ZhbHVlLmFkZChyZWNvcmQpKTtcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0KGtleSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcGFpciA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwb2ludGVyRW50ZXIobm9kZTogSVNlbGVjdGlvbk5vZGUsIGV2ZW50OiBQb2ludGVyRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvI3RoZS1idXR0b24tcHJvcGVydHlcbiAgICAgICAgdGhpcy5kcmFnTW9kZSA9IChldmVudC5idXR0b25zID09PSAxICYmIChldmVudC5idXR0b24gPT09IC0xIHx8IGV2ZW50LmJ1dHRvbiA9PT0gMCkpICYmIHRoaXMucG9pbnRlckV2ZW50SW5HcmlkQm9keTtcbiAgICAgICAgaWYgKCF0aGlzLmRyYWdNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhclRleHRTZWxlY3Rpb24oKTtcblxuICAgICAgICAvLyBJZiB0aGUgdXNlcnMgdHJpZ2dlcnMgYSBkcmFnLWxpa2UgZXZlbnQgYnkgZmlyc3QgY2xpY2tpbmcgb3V0c2lkZSB0aGUgZ3JpZCBjZWxsc1xuICAgICAgICAvLyBhbmQgdGhlbiBlbnRlcnMgaW4gdGhlIGdyaWQgYm9keSB3ZSBtYXkgbm90IGhhdmUgYSBpbml0aWFsIHBvaW50ZXIgc3RhcnRpbmcgbm9kZS5cbiAgICAgICAgLy8gQXNzdW1lIHRoZSBmaXJzdCBwb2ludGVyZW50ZXIgbm9kZSBpcyB3aGVyZSB3ZSBzdGFydC5cbiAgICAgICAgaWYgKCF0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlKSB7XG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlID0gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvaW50ZXJTdGF0ZS5jdHJsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJhbmdlKG5vZGUsIHRoaXMucG9pbnRlclN0YXRlLCB0aGlzLnRlbXApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kcmFnU2VsZWN0KG5vZGUsIHRoaXMucG9pbnRlclN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcG9pbnRlclVwKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBlbWl0dGVyOiBFdmVudEVtaXR0ZXI8R3JpZFNlbGVjdGlvblJhbmdlPiwgZmlyZWRPdXRzaWRlR3JpZD86IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ01vZGUgfHwgZmlyZWRPdXRzaWRlR3JpZCkge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlVGV4dFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5hZGRSYW5nZU1ldGEobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpO1xuICAgICAgICAgICAgdGhpcy5tZXJnZU1hcCh0aGlzLnNlbGVjdGlvbiwgdGhpcy50ZW1wKTtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW5UYXNrKCgpID0+IGVtaXR0ZXIuZW1pdCh0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpKSk7XG4gICAgICAgICAgICB0aGlzLnRlbXAuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ01vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucG9pbnRlclN0YXRlLnNoaWZ0KSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGV4dFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JlVGV4dFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5hZGRSYW5nZU1ldGEobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpO1xuICAgICAgICAgICAgZW1pdHRlci5lbWl0KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wb2ludGVyRXZlbnRJbkdyaWRCb2R5ICYmIHRoaXMuaXNBY3RpdmVOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdFJhbmdlKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzdGF0ZTogU2VsZWN0aW9uU3RhdGUsIGNvbGxlY3Rpb246IE1hcDxudW1iZXIsIFNldDxudW1iZXI+PiA9IHRoaXMuc2VsZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIGlmIChjb2xsZWN0aW9uID09PSB0aGlzLnRlbXApIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHJvd1N0YXJ0LCByb3dFbmQsIGNvbHVtblN0YXJ0LCBjb2x1bW5FbmQgfSA9IHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCBzdGF0ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSByb3dTdGFydDsgaSA8PSByb3dFbmQ7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGNvbHVtblN0YXJ0IGFzIG51bWJlcjsgaiA8PSAoY29sdW1uRW5kIGFzIG51bWJlcik7IGorKykge1xuICAgICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmhhcyhpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmdldChpKS5hZGQoaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5zZXQoaSwgbmV3IFNldDxudW1iZXI+KCkpLmdldChpKS5hZGQoaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRyYWdTZWxlY3Qobm9kZTogSVNlbGVjdGlvbk5vZGUsIHN0YXRlOiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucG9pbnRlclN0YXRlLmN0cmwpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RSYW5nZShub2RlLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyKGNsZWFyQWNyaXZlRWwgPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICBpZiAoY2xlYXJBY3JpdmVFbCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLnRlbXAuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5fcmFuZ2VzLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyVGV4dFNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvblJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25SYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZXN0b3JlVGV4dFNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAoIXNlbGVjdGlvbi5yYW5nZUNvdW50KSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UodGhpcy5fc2VsZWN0aW9uUmFuZ2UgfHwgZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC50eXBlID09PSAncGl2b3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmRhdGFWaWV3LmZpbHRlcihyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gci5kaW1lbnNpb25zLm1hcChkID0+IFBpdm90VXRpbC5nZXRSZWNvcmRLZXkociwgZCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBrZXlzLnNvbWUoayA9PiB0aGlzLmlzUGl2b3RSb3dTZWxlY3RlZChrKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5wcmltYXJ5S2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnJvd1NlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gW107XG4gICAgICAgIGNvbnN0IGdyaWREYXRhTWFwID0ge307XG4gICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKS5mb3JFYWNoKHJvdyA9PiBncmlkRGF0YU1hcFt0aGlzLmdldFJlY29yZEtleShyb3cpXSA9IHJvdyk7XG4gICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmZvckVhY2gocklEID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJEYXRhID0gZ3JpZERhdGFNYXBbcklEXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRpYWxSb3dEYXRhID0ge307XG4gICAgICAgICAgICBwYXJ0aWFsUm93RGF0YVt0aGlzLmdyaWQucHJpbWFyeUtleV0gPSBySUQ7XG4gICAgICAgICAgICBzZWxlY3Rpb24ucHVzaChyRGF0YSA/IHJEYXRhIDogcGFydGlhbFJvd0RhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgc2VsZWN0ZWQgcm93IGlkJ3MuICovXG4gICAgcHVibGljIGdldFNlbGVjdGVkUm93cygpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93U2VsZWN0aW9uLnNpemUgPyBBcnJheS5mcm9tKHRoaXMucm93U2VsZWN0aW9uLmtleXMoKSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgcm93cyBpbiBpbmRldGVybWluYXRlIHN0YXRlLiAqL1xuICAgIHB1YmxpYyBnZXRJbmRldGVybWluYXRlUm93cygpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3Muc2l6ZSA/IEFycmF5LmZyb20odGhpcy5pbmRldGVybWluYXRlUm93cy5rZXlzKCkpIDogW107XG4gICAgfVxuXG4gICAgLyoqIENsZWFycyByb3cgc2VsZWN0aW9uLCBpZiBmaWx0ZXJpbmcgaXMgYXBwbGllZCBjbGVhcnMgb25seSBzZWxlY3RlZCByb3dzIGZyb20gZmlsdGVyZWQgZGF0YS4gKi9cbiAgICBwdWJsaWMgY2xlYXJSb3dTZWxlY3Rpb24oZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCByZW1vdmVkUmVjID0gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/XG4gICAgICAgICAgICB0aGlzLmFsbERhdGEuZmlsdGVyKHJvdyA9PiB0aGlzLmlzUm93U2VsZWN0ZWQodGhpcy5nZXRSZWNvcmRLZXkocm93KSkpIDogc2VsZWN0ZWRSb3dzO1xuICAgICAgICBsZXQgbmV3U2VsZWN0aW9uO1xuICAgICAgICBpZiAodGhpcy5ncmlkLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IHRoaXMuaXNGaWx0ZXJpbmdBcHBsaWVkKCkgPyBzZWxlY3RlZFJvd3MuZmlsdGVyKHggPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhcmVtb3ZlZFJlYy5zb21lKGl0ZW0gPT4gaXRlbVt0aGlzLmdyaWQucHJpbWFyeUtleV0gPT09IHhbdGhpcy5ncmlkLnByaW1hcnlLZXldKTtcbiAgICAgICAgICAgIH0pIDogW107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSB0aGlzLmlzRmlsdGVyaW5nQXBwbGllZCgpID8gc2VsZWN0ZWRSb3dzLmZpbHRlcih4ID0+ICFyZW1vdmVkUmVjLmluY2x1ZGVzKHgpKSA6IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIHJlbW92ZWRSZWMsIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgYWxsIHJvd3MsIGlmIGZpbHRlcmluZyBpcyBhcHBsaWVkIHNlbGVjdCBvbmx5IGZyb20gZmlsdGVyZWQgZGF0YS4gKi9cbiAgICBwdWJsaWMgc2VsZWN0QWxsUm93cyhldmVudD8pIHtcbiAgICAgICAgY29uc3QgYWRkZWRSb3dzID0gdGhpcy5hbGxEYXRhLmZpbHRlcigocm93KSA9PiAhdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHRoaXMuZ2V0UmVjb3JkS2V5KHJvdykpKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMucm93U2VsZWN0aW9uLnNpemUgPyBzZWxlY3RlZFJvd3MuY29uY2F0KGFkZGVkUm93cykgOiBhZGRlZFJvd3M7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZFJvd3MsIFtdLCBldmVudCwgc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHRoZSBzcGVjaWZpZWQgcm93IGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RSb3dCeUlkKHJvd0lELCBjbGVhclByZXZTZWxlY3Rpb24/LCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgaWYgKCEodGhpcy5ncmlkLmlzUm93U2VsZWN0YWJsZSB8fCB0aGlzLmdyaWQudHlwZSA9PT0gJ3Bpdm90JykgfHwgdGhpcy5pc1Jvd0RlbGV0ZWQocm93SUQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJQcmV2U2VsZWN0aW9uID0gIXRoaXMuZ3JpZC5pc011bHRpUm93U2VsZWN0aW9uRW5hYmxlZCB8fCBjbGVhclByZXZTZWxlY3Rpb247XG4gICAgICAgIGlmICh0aGlzLmdyaWQudHlwZSA9PT0gJ3Bpdm90Jykge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RQaXZvdFJvd0J5SWQocm93SUQsIGNsZWFyUHJldlNlbGVjdGlvbiwgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjbGVhclByZXZTZWxlY3Rpb24gPyBbdGhpcy5nZXRSb3dEYXRhQnlJZChyb3dJRCldIDogdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKSA/XG4gICAgICAgICAgICBzZWxlY3RlZFJvd3MgOiBbLi4uc2VsZWN0ZWRSb3dzLCB0aGlzLmdldFJvd0RhdGFCeUlkKHJvd0lEKV07XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBjbGVhclByZXZTZWxlY3Rpb24gPyBzZWxlY3RlZFJvd3MgOiBbXTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbdGhpcy5nZXRSb3dEYXRhQnlJZChyb3dJRCldLCByZW1vdmVkLCBldmVudCwgc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0UGl2b3RSb3dCeUlkKHJvd0lELCBjbGVhclByZXZTZWxlY3Rpb246IGJvb2xlYW4sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjbGVhclByZXZTZWxlY3Rpb24gPyBbcm93SURdIDogdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKSA/IHNlbGVjdGVkUm93cyA6IFsuLi5zZWxlY3RlZFJvd3MsIHJvd0lEXTtcbiAgICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLmdldFBpdm90Um93c0J5SWRzKFtyb3dJRF0pO1xuICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5nZXRQaXZvdFJvd3NCeUlkcyhjbGVhclByZXZTZWxlY3Rpb24gPyBzZWxlY3RlZFJvd3MgOiBbXSk7XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50UGl2b3RHcmlkKHNlbGVjdGVkUm93cywgbmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCB0aGUgc3BlY2lmaWVkIHJvdyBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RSb3cocm93SUQsIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNSb3dTZWxlY3RlZChyb3dJRCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZih0aGlzLmdyaWQudHlwZSA9PT0gJ3Bpdm90Jykge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdFBpdm90Um93QnlJRChyb3dJRCwgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBzZWxlY3RlZFJvd3MuZmlsdGVyKHIgPT4gIHRoaXMuZ2V0UmVjb3JkS2V5KHIpICE9PSByb3dJRCk7XG4gICAgICAgIGlmICh0aGlzLnJvd1NlbGVjdGlvbi5zaXplICYmIHRoaXMucm93U2VsZWN0aW9uLmhhcyhyb3dJRCkpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIFt0aGlzLmdldFJvd0RhdGFCeUlkKHJvd0lEKV0sIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRlc2VsZWN0UGl2b3RSb3dCeUlEKHJvd0lELCBldmVudD8pIHtcbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uLnNpemUgJiYgdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKSkge1xuICAgICAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjdXJyU2VsZWN0aW9uLmZpbHRlcihyID0+IHIgIT09IHJvd0lEKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgID0gdGhpcy5nZXRQaXZvdFJvd3NCeUlkcyhbcm93SURdKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50UGl2b3RHcmlkKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbiwgW10sIHJlbW92ZWQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdFJvd1NlbGVjdGlvbkV2ZW50UGl2b3RHcmlkKGN1cnJTZWxlY3Rpb24sIG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJTZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgYXJnczogSVJvd1NlbGVjdGlvbkV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG93bmVyOiB0aGlzLmdyaWQsXG4gICAgICAgICAgICBvbGRTZWxlY3Rpb246IGN1cnJTZWxlY3RlZFJvd3MsXG4gICAgICAgICAgICBuZXdTZWxlY3Rpb246IHRoaXMuZ2V0UGl2b3RSb3dzQnlJZHMobmV3U2VsZWN0aW9uKSxcbiAgICAgICAgICAgIGFkZGVkLFxuICAgICAgICAgICAgcmVtb3ZlZCxcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIGFsbFJvd3NTZWxlY3RlZDogdGhpcy5hcmVBbGxSb3dTZWxlY3RlZChuZXdTZWxlY3Rpb24pXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ3JpZC5yb3dTZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RSb3dzV2l0aE5vRXZlbnQobmV3U2VsZWN0aW9uLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHRoZSBzcGVjaWZpZWQgcm93cyBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Um93cyhrZXlzOiBhbnlbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPzogYm9vbGVhbiwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmlzTXVsdGlSb3dTZWxlY3Rpb25FbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcm93c1RvU2VsZWN0ID0ga2V5cy5maWx0ZXIoeCA9PiAhdGhpcy5pc1Jvd0RlbGV0ZWQoeCkgJiYgIXRoaXMucm93U2VsZWN0aW9uLmhhcyh4KSk7XG4gICAgICAgIGlmICghcm93c1RvU2VsZWN0Lmxlbmd0aCAmJiAhY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBubyB2YWxpZC9hZGRpdGlvbmFsIHJvd3MgdG8gc2VsZWN0IGFuZCBubyBjbGVhclxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIHJvd3NUb1NlbGVjdCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gcm93c1RvU2VsZWN0Lm1hcChyID0+IHRoaXMuZ2V0Um93RGF0YUJ5SWQocikpIDogcm93c1RvU2VsZWN0O1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjbGVhclByZXZTZWxlY3Rpb24gPyByb3dzVG9TZWxlY3QgOiBbLi4uc2VsZWN0ZWRSb3dzLCAuLi5yb3dzVG9TZWxlY3RdO1xuICAgICAgICBjb25zdCBrZXlzQXNTZXQgPSBuZXcgU2V0KHJvd3NUb1NlbGVjdCk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSBjbGVhclByZXZTZWxlY3Rpb24gPyBzZWxlY3RlZFJvd3MuZmlsdGVyKHggPT4gIWtleXNBc1NldC5oYXMoeCkpIDogW107XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgcm93c1RvU2VsZWN0LCByZW1vdmVkLCBldmVudCwgc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZWxlY3RSb3dzKGtleXM6IGFueVtdLCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnJvd1NlbGVjdGlvbi5zaXplKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJvd3NUb0Rlc2VsZWN0ID0ga2V5cy5maWx0ZXIoeCA9PiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMoeCkpO1xuICAgICAgICBpZiAoIXJvd3NUb0Rlc2VsZWN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICByb3dzVG9EZXNlbGVjdCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gcm93c1RvRGVzZWxlY3QubWFwKHIgPT4gdGhpcy5nZXRSb3dEYXRhQnlJZChyKSkgOiByb3dzVG9EZXNlbGVjdDtcbiAgICAgICAgY29uc3Qga2V5c0FzU2V0ID0gbmV3IFNldChyb3dzVG9EZXNlbGVjdCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHNlbGVjdGVkUm93cy5maWx0ZXIociA9PiAha2V5c0FzU2V0LmhhcyhyKSk7XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIHJvd3NUb0Rlc2VsZWN0LCBldmVudCwgc2VsZWN0ZWRSb3dzKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHNwZWNpZmllZCByb3dzLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RSb3dzV2l0aE5vRXZlbnQocm93SURzOiBhbnlbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPyk6IHZvaWQge1xuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHJvd0lEcy5mb3JFYWNoKHJvd0lEID0+IHRoaXMucm93U2VsZWN0aW9uLmFkZChyb3dJRCkpO1xuICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHNwZWNpZmllZCByb3dzLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHM6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgIHJvd0lEcy5mb3JFYWNoKHJvd0lEID0+IHRoaXMucm93U2VsZWN0aW9uLmRlbGV0ZShyb3dJRCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUm93U2VsZWN0ZWQocm93SUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93U2VsZWN0aW9uLnNpemUgPiAwICYmIHRoaXMucm93U2VsZWN0aW9uLmhhcyhyb3dJRCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUGl2b3RSb3dTZWxlY3RlZChyb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgY29udGFpbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvcnJlY3RSb3dJZCA9IHJvd0lELnJlcGxhY2UoeCwnJyk7XG4gICAgICAgICAgICBpZiAocm93SUQuaW5jbHVkZXMoeCkgJiYgKGNvcnJlY3RSb3dJZCA9PT0gJycgfHwgY29ycmVjdFJvd0lkLnN0YXJ0c1dpdGgoJ18nKSkgKSB7XG4gICAgICAgICAgICAgICAgY29udGFpbnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGlvbi5zaXplID4gMCAmJiBjb250YWlucztcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNSb3dJbkluZGV0ZXJtaW5hdGVTdGF0ZShyb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRldGVybWluYXRlUm93cy5zaXplID4gMCAmJiB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLmhhcyhyb3dJRCk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCByYW5nZSBmcm9tIGxhc3Qgc2VsZWN0ZWQgcm93IHRvIHRoZSBjdXJyZW50IHNwZWNpZmllZCByb3cuICovXG4gICAgcHVibGljIHNlbGVjdE11bHRpcGxlUm93cyhyb3dJRCwgcm93RGF0YSwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgIGlmICghdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSB8fCB0aGlzLmlzUm93RGVsZXRlZChyb3dJRCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93QnlJZChyb3dJRCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JpZERhdGEgPSB0aGlzLmFsbERhdGE7XG4gICAgICAgIGNvbnN0IGxhc3RSb3dJRCA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKClbdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSAtIDFdO1xuICAgICAgICBjb25zdCBjdXJySW5kZXggPSBncmlkRGF0YS5pbmRleE9mKHRoaXMuZ2V0Um93RGF0YUJ5SWQobGFzdFJvd0lEKSk7XG4gICAgICAgIGNvbnN0IG5ld0luZGV4ID0gZ3JpZERhdGEuaW5kZXhPZihyb3dEYXRhKTtcbiAgICAgICAgY29uc3Qgcm93cyA9IGdyaWREYXRhLnNsaWNlKE1hdGgubWluKGN1cnJJbmRleCwgbmV3SW5kZXgpLCBNYXRoLm1heChjdXJySW5kZXgsIG5ld0luZGV4KSArIDEpO1xuICAgICAgICBjb25zdCBjdXJyU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IGFkZGVkID0gcm93cy5maWx0ZXIociA9PiAhdGhpcy5pc1Jvd1NlbGVjdGVkKHRoaXMuZ2V0UmVjb3JkS2V5KHIpKSk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGN1cnJTZWxlY3Rpb24uY29uY2F0KGFkZGVkKTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgW10sIGV2ZW50LCBjdXJyU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXJlQWxsUm93U2VsZWN0ZWQobmV3U2VsZWN0aW9uPyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5kYXRhICYmICFuZXdTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hbGxSb3dzU2VsZWN0ZWQgIT09IHVuZGVmaW5lZCAmJiAhbmV3U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hbGxSb3dzU2VsZWN0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRhID0gbmV3IFNldCh0aGlzLmdldFJvd0lEcyhuZXdTZWxlY3Rpb24gfHwgdGhpcy5yb3dTZWxlY3Rpb24pKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsUm93c1NlbGVjdGVkID0gdGhpcy5hbGxEYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5hbGxEYXRhLmV2ZXJ5KHJvdyA9PiBzZWxlY3RlZERhdGEuaGFzKHRoaXMuZ2V0UmVjb3JkS2V5KHJvdykpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzU29tZVJvd1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSB0aGlzLmlzRmlsdGVyaW5nQXBwbGllZCgpID9cbiAgICAgICAgICAgIHRoaXMuZ2V0Um93SURzKHRoaXMuZ3JpZC5maWx0ZXJlZERhdGEpLnNvbWUocklEID0+IHRoaXMuaXNSb3dTZWxlY3RlZChySUQpKSA6IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGlvbi5zaXplID4gMCAmJiBmaWx0ZXJlZERhdGEgJiYgIXRoaXMuYXJlQWxsUm93U2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlcmVkU2VsZWN0ZWRSb3dJZHMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/XG4gICAgICAgICAgICB0aGlzLmdldFJvd0lEcyh0aGlzLmFsbERhdGEpLmZpbHRlcihyb3dJRCA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocm93SUQpKSA6XG4gICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkUm93cygpLmZpbHRlcihyb3dJRCA9PiAhdGhpcy5pc1Jvd0RlbGV0ZWQocm93SUQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50PywgY3VyclNlbGVjdGlvbj8pOiBib29sZWFuIHtcbiAgICAgICAgY3VyclNlbGVjdGlvbiA9IGN1cnJTZWxlY3Rpb24gPz8gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBhcmdzOiBJUm93U2VsZWN0aW9uRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogY3VyclNlbGVjdGlvbixcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbixcbiAgICAgICAgICAgIGFkZGVkLFxuICAgICAgICAgICAgcmVtb3ZlZCxcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIGFsbFJvd3NTZWxlY3RlZDogdGhpcy5hcmVBbGxSb3dTZWxlY3RlZChuZXdTZWxlY3Rpb24pXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5ncmlkLnJvd1NlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdFJvd3NXaXRoTm9FdmVudChhcmdzLm5ld1NlbGVjdGlvbi5tYXAociA9PiB0aGlzLmdldFJlY29yZEtleShyKSksIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQaXZvdFJvd3NCeUlkcyhpZHM6IGFueVtdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmlsdGVyKHIgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IHIuZGltZW5zaW9ucy5tYXAoZCA9PiBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHIsIGQpKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2V0KGlkcy5jb25jYXQoa2V5cykpLnNpemUgPCBpZHMubGVuZ3RoICsga2V5cy5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSb3dEYXRhQnlJZChyb3dJRCk6IGFueSB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiByb3dJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuZ2V0Um93SURzKHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKSkuaW5kZXhPZihyb3dJRCk7XG4gICAgICAgIHJldHVybiByb3dJbmRleCA8IDAgPyByb3dJRCA6IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKVtyb3dJbmRleF07XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFySGVhZGVyQ0JTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hbGxSb3dzU2VsZWN0ZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvd0lEcyhkYXRhKTogQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucHJpbWFyeUtleSAmJiBkYXRhLmxlbmd0aCA/IGRhdGEubWFwKHJlYyA9PiByZWNbdGhpcy5ncmlkLnByaW1hcnlLZXldKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJlY29yZEtleShyZWNvcmQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gcmVjb3JkW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IHJlY29yZDtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXIgcm93U2VsZWN0aW9uIGFuZCB1cGRhdGUgY2hlY2tib3ggc3RhdGUgKi9cbiAgICBwdWJsaWMgY2xlYXJBbGxTZWxlY3RlZFJvd3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2UubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGFsbCBkYXRhIGluIHRoZSBncmlkLCB3aXRoIGFwcGxpZWQgZmlsdGVyaW5nIGFuZCBzb3J0aW5nIGFuZCB3aXRob3V0IGRlbGV0ZWQgcm93cy4gKi9cbiAgICBwdWJsaWMgZ2V0IGFsbERhdGEoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIGxldCBhbGxEYXRhO1xuICAgICAgICAvLyBWLlQuIEphbiAxN3RoLCAyMDI0ICMxMzc1NyBBZGRpbmcgYW4gYWRkaXRpb25hbCBjb25kaXRpb25hbCBjaGVjayB0byB0YWtlIGFjY291bnQgV0lUSElOIHJhbmdlIG9mIGdyb3Vwc1xuICAgICAgICBpZiAodGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSB8fCB0aGlzLmdyaWQuc29ydGluZ0V4cHJlc3Npb25zLmxlbmd0aCB8fCB0aGlzLmdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBhbGxEYXRhID0gdGhpcy5ncmlkLnBpbm5lZFJlY29yZHNDb3VudCA/IHRoaXMuZ3JpZC5fZmlsdGVyZWRTb3J0ZWRVbnBpbm5lZERhdGEgOiB0aGlzLmdyaWQuZmlsdGVyZWRTb3J0ZWREYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYWxsRGF0YSA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9hbGxfZGF0YSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxsRGF0YS5maWx0ZXIockRhdGEgPT4gIXRoaXMuaXNSb3dEZWxldGVkKHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfaWQockRhdGEpKSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2YgdGhlIHNlbGVjdGVkIGNvbHVtbnMgZmllbGRzLiAqL1xuICAgIHB1YmxpYyBnZXRTZWxlY3RlZENvbHVtbnMoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtblNlbGVjdGlvbi5zaXplID8gQXJyYXkuZnJvbSh0aGlzLmNvbHVtblNlbGVjdGlvbi5rZXlzKCkpIDogW107XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29sdW1uU2VsZWN0ZWQoZmllbGQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5TZWxlY3Rpb24uc2l6ZSA+IDAgJiYgdGhpcy5jb2x1bW5TZWxlY3Rpb24uaGFzKGZpZWxkKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHRoZSBzcGVjaWZpZWQgY29sdW1uIGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW4oZmllbGQ6IHN0cmluZywgY2xlYXJQcmV2U2VsZWN0aW9uPywgc2VsZWN0Q29sdW1uc1JhbmdlPywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXRlQ29sdW1uID0gdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPyB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlOYW1lKHRoaXMuY29sdW1uc1N0YXRlLmZpZWxkKSA6IG51bGw7XG4gICAgICAgIGlmICghZXZlbnQgfHwgIXN0YXRlQ29sdW1uIHx8IHN0YXRlQ29sdW1uLnZpc2libGVJbmRleCA8IDAgfHwgIXNlbGVjdENvbHVtbnNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPSBmaWVsZDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1N0YXRlLnJhbmdlID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IFtmaWVsZF0gOiB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmluZGV4T2YoZmllbGQpICE9PSAtMSA/XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKSA6IFsuLi50aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLCBmaWVsZF07XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoY29sRmllbGQgPT4gY29sRmllbGQgIT09IGZpZWxkKSA6IFtdO1xuICAgICAgICAgICAgY29uc3QgYWRkZWQgPSB0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoZmllbGQpID8gW10gOiBbZmllbGRdO1xuICAgICAgICAgICAgdGhpcy5lbWl0Q29sdW1uU2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdENvbHVtbnNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RDb2x1bW5zUmFuZ2UoZmllbGQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBTZWxlY3Qgc3BlY2lmaWVkIGNvbHVtbnMuIEFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW5zKGZpZWxkczogc3RyaW5nW10sIGNsZWFyUHJldlNlbGVjdGlvbj8sIHNlbGVjdENvbHVtbnNSYW5nZT8sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gZmllbGRzLm1hcChmID0+IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUoZikpLnNvcnQoKGEsIGIpID0+IGEudmlzaWJsZUluZGV4IC0gYi52aXNpYmxlSW5kZXgpO1xuICAgICAgICBjb25zdCBzdGF0ZUNvbHVtbiA9IHRoaXMuY29sdW1uc1N0YXRlLmZpZWxkID8gdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZSh0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCkgOiBudWxsO1xuICAgICAgICBpZiAoIXN0YXRlQ29sdW1uIHx8IHN0YXRlQ29sdW1uLnZpc2libGVJbmRleCA8IDAgfHwgIXNlbGVjdENvbHVtbnNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPSBjb2x1bW5zWzBdID8gY29sdW1uc1swXS5maWVsZCA6IG51bGw7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5yYW5nZSA9IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IGZpZWxkcy5maWx0ZXIoY29sRmllbGQgPT4gIXRoaXMuaXNDb2x1bW5TZWxlY3RlZChjb2xGaWVsZCkpO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuZmlsdGVyKGNvbEZpZWxkID0+IGZpZWxkcy5pbmRleE9mKGNvbEZpZWxkKSA9PT0gLTEpIDogW107XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBjbGVhclByZXZTZWxlY3Rpb24gPyBmaWVsZHMgOiB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmNvbmNhdChhZGRlZCk7XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVkU3RhcnQgPSBzdGF0ZUNvbHVtbi52aXNpYmxlSW5kZXggPlxuICAgICAgICAgICAgICAgIGNvbHVtbnNbY29sdW1ucy5sZW5ndGggLSAxXS52aXNpYmxlSW5kZXggPyBjb2x1bW5zWzBdLmZpZWxkIDogY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdLmZpZWxkO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RDb2x1bW5zUmFuZ2UoZmlsZWRTdGFydCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCByYW5nZSBmcm9tIGxhc3QgY2xpY2tlZCBjb2x1bW4gdG8gdGhlIGN1cnJlbnQgc3BlY2lmaWVkIGNvbHVtbi4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Q29sdW1uc1JhbmdlKGZpZWxkOiBzdHJpbmcsIGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJJbmRleCA9IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUodGhpcy5jb2x1bW5zU3RhdGUuZmllbGQpLnZpc2libGVJbmRleDtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSB0aGlzLmdyaWQuY29sdW1uVG9WaXNpYmxlSW5kZXgoZmllbGQpO1xuICAgICAgICBjb25zdCBjb2x1bW5zRmllbGRzID0gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKGMgPT4gIWMuY29sdW1uR3JvdXApXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS52aXNpYmxlSW5kZXggLSBiLnZpc2libGVJbmRleClcbiAgICAgICAgICAgIC5zbGljZShNYXRoLm1pbihjdXJySW5kZXgsIG5ld0luZGV4KSwgTWF0aC5tYXgoY3VyckluZGV4LCBuZXdJbmRleCkgKyAxKVxuICAgICAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLnNlbGVjdGFibGUpLm1hcChjb2wgPT4gY29sLmZpZWxkKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IFtdO1xuICAgICAgICBjb25zdCBvbGRBZGRlZCA9IFtdO1xuICAgICAgICBjb25zdCBhZGRlZCA9IGNvbHVtbnNGaWVsZHMuZmlsdGVyKGNvbEZpZWxkID0+ICF0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoY29sRmllbGQpKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUucmFuZ2UuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW5zRmllbGRzLmluZGV4T2YoZikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvbGRBZGRlZC5wdXNoKGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUucmFuZ2UgPSBjb2x1bW5zRmllbGRzLmZpbHRlcihjb2xGaWVsZCA9PiAhdGhpcy5pc0NvbHVtblNlbGVjdGVkKGNvbEZpZWxkKSB8fCBvbGRBZGRlZC5pbmRleE9mKGNvbEZpZWxkKSA+IC0xKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5jb25jYXQoYWRkZWQpLmZpbHRlcihjID0+IHJlbW92ZWQuaW5kZXhPZihjKSA9PT0gLTEpO1xuICAgICAgICB0aGlzLmVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCBzcGVjaWZpZWQgY29sdW1ucy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0Q29sdW1uc1dpdGhOb0V2ZW50KGZpZWxkczogc3RyaW5nW10sIGNsZWFyUHJldlNlbGVjdGlvbj8pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNsZWFyUHJldlNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5TZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbi5hZGQoZmllbGQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3QgdGhlIHNwZWNpZmllZCBjb2x1bW4gYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Q29sdW1uKGZpZWxkOiBzdHJpbmcsIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRDb2x1bW5zU3RhdGUoKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoYyA9PiBjICE9PSBmaWVsZCk7XG4gICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIFtmaWVsZF0sIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3Qgc3BlY2lmaWVkIGNvbHVtbnMuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Q29sdW1uc1dpdGhOb0V2ZW50KGZpZWxkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4gdGhpcy5jb2x1bW5TZWxlY3Rpb24uZGVsZXRlKGZpZWxkKSk7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHNwZWNpZmllZCBjb2x1bW5zLiBBbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RDb2x1bW5zKGZpZWxkczogc3RyaW5nW10sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoY29sRmllbGQgPT4gZmllbGRzLmluZGV4T2YoY29sRmllbGQpID4gLTEpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjb2xGaWVsZCA9PiBmaWVsZHMuaW5kZXhPZihjb2xGaWVsZCkgPT09IC0xKTtcblxuICAgICAgICB0aGlzLmVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFtdLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudD8pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJncyA9IHtcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLFxuICAgICAgICAgICAgYWRkZWQsIHJlbW92ZWQsIGV2ZW50LCBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdENvbHVtbnNXaXRoTm9FdmVudChhcmdzLm5ld1NlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqIENsZWFyIGNvbHVtblNlbGVjdGlvbiAqL1xuICAgIHB1YmxpYyBjbGVhckFsbFNlbGVjdGVkQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5TZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgYXJlRXF1YWxDb2xsZWN0aW9ucyhmaXJzdCwgc2Vjb25kKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBmaXJzdC5sZW5ndGggPT09IHNlY29uZC5sZW5ndGggJiYgbmV3IFNldChmaXJzdC5jb25jYXQoc2Vjb25kKSkuc2l6ZSA9PT0gZmlyc3QubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICjila/CsOKWocKw77yJ4pWv77i1IOKUu+KUgeKUu1xuICAgICAqIENocm9tZSBhbmQgQ2hyb21pdW0gZG9uJ3QgY2FyZSBhYm91dCB0aGUgYWN0aXZlXG4gICAgICogcmFuZ2UgYWZ0ZXIga2V5Ym9hcmQgbmF2aWdhdGlvbiwgdGh1cyB0aGlzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX21vdmVTZWxlY3Rpb25DaHJvbWUobm9kZTogTm9kZSkge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShub2RlKTtcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0ZpbHRlcmluZ0FwcGxpZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KHRoaXMuZ3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpIHx8XG4gICAgICAgICAgICAhRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlLmVtcHR5KHRoaXMuZ3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Jvd0RlbGV0ZWQocm93SUQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5ncmlkQVBJLnJvd19kZWxldGVkX3RyYW5zYWN0aW9uKHJvd0lEKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvaW50ZXJPcmlnaW5IYW5kbGVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMucG9pbnRlckV2ZW50SW5HcmlkQm9keSA9IGZhbHNlO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMucG9pbnRlck9yaWdpbkhhbmRsZXIpO1xuXG4gICAgICAgIGNvbnN0IHRhcmdldFRhZ05hbWUgPSBldmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAodGFyZ2V0VGFnTmFtZSAhPT0gJ2lneC1ncmlkLWNlbGwnICYmIHRhcmdldFRhZ05hbWUgIT09ICdpZ3gtdHJlZS1ncmlkLWNlbGwnKSB7XG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJVcCh0aGlzLl9sYXN0U2VsZWN0ZWROb2RlLCB0aGlzLmdyaWQucmFuZ2VTZWxlY3RlZCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIl19
|