@wavemaker/app-ng-runtime 11.14.1-3.6306 → 11.14.1-32.647748
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/components/base/bundles/index.umd.js +6 -22
- package/components/base/esm2022/pipes/custom-pipes.mjs +1 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +8 -24
- package/components/base/fesm2022/index.mjs +7 -23
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/chart/bundles/index.umd.js +2 -2
- package/components/chart/esm2022/chart.utils.mjs +3 -3
- package/components/chart/fesm2022/index.mjs +2 -2
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/bundles/index.umd.js +21 -2
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +3 -1
- package/components/containers/wizard/esm2022/wizard.component.mjs +20 -3
- package/components/containers/wizard/fesm2022/index.mjs +21 -2
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +2 -0
- package/components/data/pagination/bundles/index.umd.js +6 -1
- package/components/data/pagination/esm2022/pagination.component.mjs +7 -2
- package/components/data/pagination/fesm2022/index.mjs +6 -1
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +331 -23
- package/components/data/table/esm2022/table-action/table-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table-column/table-column.directive.mjs +108 -4
- package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +9 -1
- package/components/data/table/esm2022/table-cud.directive.mjs +22 -5
- package/components/data/table/esm2022/table-filter.directive.mjs +43 -4
- package/components/data/table/esm2022/table-row/table-row.directive.mjs +8 -1
- package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +8 -1
- package/components/data/table/esm2022/table.component.mjs +134 -15
- package/components/data/table/fesm2022/index.mjs +333 -25
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table-action/table-action.directive.d.ts +3 -2
- package/components/data/table/table-column/table-column.directive.d.ts +3 -2
- package/components/data/table/table-column-group/table-column-group.directive.d.ts +3 -2
- package/components/data/table/table-cud.directive.d.ts +3 -1
- package/components/data/table/table-filter.directive.d.ts +3 -1
- package/components/data/table/table-row/table-row.directive.d.ts +3 -2
- package/components/data/table/table-row-action/table-row-action.directive.d.ts +3 -2
- package/components/data/table/table.component.d.ts +10 -0
- package/components/page/default/bundles/index.umd.js +1 -0
- package/components/page/default/esm2022/page.directive.mjs +2 -1
- package/components/page/default/fesm2022/index.mjs +1 -0
- package/components/page/default/fesm2022/index.mjs.map +1 -1
- package/core/bundles/index.umd.js +185 -330
- package/core/esm2022/public_api.mjs +2 -2
- package/core/esm2022/utils/watcher.mjs +189 -328
- package/core/fesm2022/index.mjs +192 -330
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/public_api.d.ts +1 -1
- package/core/utils/watcher.d.ts +5 -26
- package/locales/moment-timezone/moment-timezone-with-data.js +179 -27
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +20 -46
- package/runtime/base/components/base-prefab.component.d.ts +6 -4
- package/runtime/base/esm2022/components/app-component/app.component.mjs +2 -7
- package/runtime/base/esm2022/components/base-page.component.mjs +2 -8
- package/runtime/base/esm2022/components/base-partial.component.mjs +3 -11
- package/runtime/base/esm2022/components/base-prefab.component.mjs +21 -21
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +2 -9
- package/runtime/base/fesm2022/index.mjs +21 -47
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/dynamic/bundles/index.umd.js +4 -0
- package/runtime/dynamic/esm2022/app/app.config.mjs +6 -2
- package/runtime/dynamic/fesm2022/index.mjs +5 -1
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +336 -33
|
@@ -486,7 +486,8 @@ export class PaginationComponent extends StylableComponent {
|
|
|
486
486
|
if (parts[0] === 'Variables' || parts[0] === 'Widgets') {
|
|
487
487
|
bindPagingOptions = `${parts[0]}.${parts[1]}.pagination`;
|
|
488
488
|
}
|
|
489
|
-
|
|
489
|
+
const isVariableLevelBind = binddataset?.startsWith('Prefab.Variables.');
|
|
490
|
+
if (!binddatasource && dataset && !datasetBoundExpr && !isVariableLevelBind) {
|
|
490
491
|
this.dataset = dataset;
|
|
491
492
|
this._debouncedApplyDataset();
|
|
492
493
|
return;
|
|
@@ -699,6 +700,10 @@ export class PaginationComponent extends StylableComponent {
|
|
|
699
700
|
}
|
|
700
701
|
this.navigatePage('first', $event, true);
|
|
701
702
|
this.calculatePagingValues();
|
|
703
|
+
if (this.nativeElement.closest('popover-container, .popover')) {
|
|
704
|
+
$event.stopPropagation();
|
|
705
|
+
this.bsDropdown.hide();
|
|
706
|
+
}
|
|
702
707
|
}
|
|
703
708
|
ngAfterViewInit() {
|
|
704
709
|
const paginationElem = this.nativeElement;
|
|
@@ -734,4 +739,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
734
739
|
type: ViewChild,
|
|
735
740
|
args: [BsDropdownDirective]
|
|
736
741
|
}] } });
|
|
737
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9wYWdpbmF0aW9uL3NyYy9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3BhZ2luYXRpb24vc3JjL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuSCxPQUFPLEVBQ0gsY0FBYyxFQUNkLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixnQ0FBZ0MsRUFDaEMsU0FBUyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFD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ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7JGFwcERpZ2VzdCwgJHdhdGNoLCBBcHBDb25zdGFudHMsIERhdGFTb3VyY2UsIGRlYm91bmNlLCBpc0RlZmluZWQsIHN3aXRjaENsYXNzLCB0cmlnZ2VyRm59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgREVCT1VOQ0VfVElNRVMsXG4gICAgZ2V0T3JkZXJCeUV4cHIsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlcixcbiAgICB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcyxcbiAgICBXaWRnZXRSZWZcbn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vcGFnaW5hdGlvbi5wcm9wcyc7XG5pbXBvcnQge2ZvckVhY2gsIGdldCwgaXNBcnJheSwgaXNFbXB0eSwgaXNOdWxsLCBpc1N0cmluZywgcmFuZ2V9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7UGFnaW5hdGlvbk1vZHVsZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wYWdpbmF0aW9uJztcbmltcG9ydCB7QnNEcm9wZG93bkRpcmVjdGl2ZSwgQnNEcm9wZG93bk1vZHVsZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1kYXRhbmF2aWdhdG9yIGNsZWFyZml4JztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLXBhZ2luYXRpb24nLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuY29uc3Qgc2l6ZUNsYXNzZXMgPSB7XG4gICAgJ1BhZ2VyJzoge1xuICAgICAgICAnc21hbGwnOiAncGFnZXItc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnZXItbGcnXG4gICAgfSxcbiAgICAnQmFzaWMnOiB7XG4gICAgICAgICdzbWFsbCc6ICdwYWdpbmF0aW9uLXNtJyxcbiAgICAgICAgJ2xhcmdlJzogJ3BhZ2luYXRpb24tbGcnXG4gICAgfSxcbiAgICAnQ2xhc3NpYyc6IHtcbiAgICAgICAgJ3NtYWxsJzogJ3BhZ2luYXRpb24tc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnaW5hdGlvbi1sZydcbiAgICB9XG59O1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFBhZ2luYXRpb25Nb2R1bGUsIEJzRHJvcGRvd25Nb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnW3dtUGFnaW5hdGlvbl0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFBhZ2luYXRpb25Db21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIEBPdXRwdXQoKSByZXN1bHRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgbWF4UmVzdWx0c0VtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBWaWV3Q2hpbGQoQnNEcm9wZG93bkRpcmVjdGl2ZSkgcHJvdGVjdGVkIGJzRHJvcGRvd247XG5cbiAgICBkYXRhc291cmNlO1xuICAgIG1heFJlc3VsdHM7XG4gICAgcGFnZVNpemVPcHRpb25zO1xuICAgIHByZXZQYWdlU2l6ZTtcbiAgICBhY3R1YWxQYWdlU2l6ZTtcbiAgICBhbGxvd3BhZ2VzaXplY2hhbmdlO1xuICAgIGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSBbXTtcbiAgICBmb2N1c2VkSW5kZXggPSAwO1xuICAgIHJvd1N1bW1hcnk7XG4gICAgbmF2aWdhdGlvbnNpemU7XG4gICAgc2hvd3JlY29yZGNvdW50O1xuXG4gICAgbmF2Y29udHJvbHM7XG4gICAgbmF2aWdhdGlvbjtcblxuICAgIGJvdW5kYXJ5bGlua3M7XG4gICAgZGlyZWN0aW9ubGlua3M7XG5cbiAgICBuYXZpZ2F0aW9uQ2xhc3M7XG4gICAgZG4gPSB7XG4gICAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcblxuICAgIHBhZ2VDb3VudCA9IDA7XG4gICAgaXNEaXNhYmxlTmV4dCA9IHRydWU7XG4gICAgaXNEaXNhYmxlUHJldmlvdXMgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUZpcnN0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVMYXN0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVDdXJyZW50O1xuICAgIGRhdGFTaXplO1xuICAgIHByZXZzaG93cmVjb3JkY291bnQ7XG4gICAgaXNEaXNhYmxlQ291bnQ7XG4gICAgZmlyc3RSb3c7XG4gICAgcmVzdWx0O1xuICAgIF9fZnVsbERhdGE7XG4gICAgZGF0YXNldDtcbiAgICBvcHRpb25zO1xuICAgIHN0YXRlaGFuZGxlcjtcbiAgICBmaWx0ZXJGaWVsZHM7XG4gICAgc29ydE9wdGlvbnM7XG4gICAgYmluZGRhdGFzZXQ7XG4gICAgcGFnaW5hdGlvbjtcbiAgICBsb2dpY2FsT3A7XG5cbiAgICBwcml2YXRlIF9kZWJvdW5jZWRBcHBseURhdGFzZXQgPSBkZWJvdW5jZSgoKSA9PiB0aGlzLndpZGdldC5kYXRhc2V0ID0gdGhpcy5kYXRhc2V0LCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUpO1xuICAgIHByaXZhdGUgX2RlYm91bmNlZFBhZ2VDaGFuZ2VkID0gZGVib3VuY2UoZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZSA9IGV2ZW50ICYmIGV2ZW50LnBhZ2U7XG4gICAgICAgIGNvbnN0IG1heFJlc3VsdHMgPSBldmVudCAmJiAoZXZlbnQucGFnZXNpemUgfHwgZXZlbnQuaXRlbXNQZXJQYWdlKSB8fCB0aGlzLm1heFJlc3VsdHM7XG5cbiAgICAgICAgLy8gRG8gbm90IGNhbGwgZ29Ub1BhZ2UgaWYgcGFnZSBoYXMgbm90IGNoYW5nZWRcbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlICE9PSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IHRoaXMubWF4UmVzdWx0cyAhPT0gbWF4UmVzdWx0cykge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9ICh0aGlzIGFzIGFueSkucGFyZW50IHx8IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLm1heFJlc3VsdHMgPSBtYXhSZXN1bHRzO1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzRW1pdHRlci5lbWl0KHRoaXMubWF4UmVzdWx0cyk7XG4gICAgICAgICAgICBpbnN0Lmludm9rZUV2ZW50Q2FsbGJhY2soJ3BhZ2luYXRpb25jaGFuZ2UnLCB7JGV2ZW50OiB1bmRlZmluZWQsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZX0pO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbiA9PT0gJ0Jhc2ljJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEFyaWFGb3JCYXNpY05hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG5cbiAgICBwcml2YXRlIF9zZXRBcmlhRm9yQmFzaWNOYXZpZ2F0aW9uKCkge1xuICAgICAgICBmb3JFYWNoKHRoaXMubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApOycpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gaXRlbS5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlPy5kYXRhc2V0LmlzYWNpdHZlcGFnZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGNoaWxkTm9kZT8uZGF0YXNldC5pc2Rpc2FibGVkID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbS5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgQFNraXBTZWxmKCkgQEluamVjdChXaWRnZXRSZWYpIHB1YmxpYyBwYXJlbnQsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlID0gdGhpcy5wYXJlbnQuYWxsb3dwYWdlc2l6ZWNoYW5nZTtcbiAgICAgICAgICAgIGlmKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSlcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnBhcmVudD8ucGFnZXNpemVvcHRpb25zID8gdGhpcy5wYXJlbnQucGFnZXNpemVvcHRpb25zPy5zcGxpdCgnLCcpLm1hcChOdW1iZXIpLnNvcnQoKGEsIGIpID0+IGEgLSBiKSA6IFtdO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBzZXRSZXN1bHQocmVzdWx0KSB7XG4gICAgICAgIC8vIFRPRE86IEVtaXQgZXZlbnQgb25seSBpZiByZXN1bHQgaXMgY2hhbmdlZFxuICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5yZXN1bHRFbWl0dGVyLmVtaXQodGhpcy5yZXN1bHQpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBuYXZpZ2F0aW9uQ2xhc3MgYmFzZWQgb24gbmF2aWdhdGlvbiBhbmQgbmF2aWdhdGlvblNpemUgcHJvcHNcbiAgICBwcml2YXRlIHVwZGF0ZU5hdlNpemUoKSB7XG4gICAgICAgIGNvbnN0IHNpemVDbHMgPSBzaXplQ2xhc3Nlc1t0aGlzLm5hdmNvbnRyb2xzXTtcbiAgICAgICAgaWYgKHNpemVDbHMgJiYgdGhpcy5uYXZpZ2F0aW9uc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ2xhc3MgPSBzaXplQ2xzW3RoaXMubmF2aWdhdGlvbnNpemVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ2xhc3MgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIHJlc2V0IHRoZSBwYWdpbmcgdmFsdWVzIHRvIGRlZmF1bHQuXG4gICAgcmVzZXRQYWdlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHBhZ2luZyB2YWx1ZXMuKi9cbiAgICBjYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKSB7XG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gKHRoaXMuZGF0YVNpemUgPiB0aGlzLm1heFJlc3VsdHMpID8gKE1hdGguY2VpbCh0aGlzLmRhdGFTaXplIC8gdGhpcy5tYXhSZXN1bHRzKSkgOiAodGhpcy5kYXRhU2l6ZSA8IDAgPyAwIDogMSk7XG4gICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIHBhZ2luZyBwYXJhbWV0ZXJzKi9cbiAgICBzZXREZWZhdWx0UGFnaW5nVmFsdWVzKGRhdGFTaXplLCBtYXhSZXN1bHRzLCBjdXJyZW50UGFnZSkge1xuICAgICAgICAvKklmIG5laXRoZXIgJ2RhdGFTaXplJyBub3IgJ21heFJlc3VsdHMnIGlzIHNldCwgdGhlbiBzZXQgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIHBhZ2luZyBwYXJhbWV0ZXJzLiovXG4gICAgICAgIGlmICghZGF0YVNpemUgJiYgIW1heFJlc3VsdHMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gMTtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gZGF0YVNpemU7XG4gICAgICAgICAgICB0aGlzLmRhdGFTaXplID0gZGF0YVNpemU7XG4gICAgICAgIH0gZWxzZSB7IC8qRWxzZSwgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVzIGFuZCByZWNhbGN1bGF0ZSBwYWdpbmcgcGFyYW1ldGVycy4qL1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gbWF4UmVzdWx0cyB8fCB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICB0aGlzLmRhdGFTaXplID0gaXNEZWZpbmVkKGRhdGFTaXplKSA/IGRhdGFTaXplIDogdGhpcy5kYXRhU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSBjdXJyZW50UGFnZSB8fCB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1heFJlc3VsdHNFbWl0dGVyLmVtaXQodGhpcy5tYXhSZXN1bHRzKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBkYXRhU2l6ZSBhbmQgbWFuaXB1bGF0ZSB0aGUgbmF2aWdhdG9yIGFjY29yZGluZ2x5LiovXG4gICAgY2hlY2tEYXRhU2l6ZShkYXRhU2l6ZSwgbnVtYmVyT2ZFbGVtZW50cz8sIHNpemU/KSB7XG4gICAgICAgIC8qSWYgdGhlIGRhdGFTaXplIGlzIC0xIG9yIEludGVnZXIuTUFYX1ZBTFVFKCB3aGljaCBpcyAyMTQ3NDgzNjQ3KSwgdGhlbiB0aGUgdG90YWwgbnVtYmVyIG9mIHJlY29yZHMgaXMgbm90IGtub3duLlxuICAgICAgICAgKiBIZW5jZSxcbiAgICAgICAgICogMS4gSGlkZSB0aGUgJ1RvdGFsIFJlY29yZCBDb3VudCcuXG4gICAgICAgICAqIDIuIERpc2FibGUgdGhlICdHb1RvTGFzdFBhZ2UnIGxpbmsgYXMgdGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSBsYXN0IHBhZ2UgaXMgbm90IGtub3duLiovXG4gICAgICAgIGlmIChkYXRhU2l6ZSA9PT0gLTEgfHwgZGF0YVNpemUgPT09IEFwcENvbnN0YW50cy5JTlRfTUFYX1ZBTFVFKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZzaG93cmVjb3JkY291bnQgPSB0aGlzLnNob3dyZWNvcmRjb3VudDtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTGFzdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUNvdW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd3JlY29yZGNvdW50ID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBJZiBudW1iZXIgb2YgcmVjb3JkcyBpbiBjdXJyZW50IHBhZ2UgaXMgbGVzcyB0aGFuIHRoZSBtYXggcmVjb3JkcyBzaXplLCB0aGlzIGlzIHRoZSBsYXN0IHBhZ2UuIFNvIGRpc2FibGUgbmV4dCBidXR0b24uXG4gICAgICAgICAgICBpZiAobnVtYmVyT2ZFbGVtZW50cyA8IHNpemUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVDb3VudCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93cmVjb3JkY291bnQgPSB0aGlzLnByZXZzaG93cmVjb3JkY291bnQgfHwgdGhpcy5zaG93cmVjb3JkY291bnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGRpc2FibGUgbmF2aWdhdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCBhbmQgdG90YWwgcGFnZXMuKi9cbiAgICBkaXNhYmxlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgY29uc3QgaXNDdXJyZW50UGFnZUZpcnN0ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IDEpLFxuICAgICAgICAgICAgaXNDdXJyZW50UGFnZUxhc3QgPSAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gdGhpcy5wYWdlQ291bnQpO1xuICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbj8ubmV4dCkge1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVGaXJzdCA9IHRoaXMuaXNEaXNhYmxlUHJldmlvdXMgPSBpc0N1cnJlbnRQYWdlRmlyc3Q7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0aGlzLmlzRGlzYWJsZUxhc3QgPSBpc0N1cnJlbnRQYWdlTGFzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdNUy0xODg2NzogSW4gY2FzZSBvZiBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLCBmb3IgcGFnZXIgdHlwZSBwYWdpbmF0aW9uIGRlcGVuZCBvbiBwcmV2IGFuZCBuZXh0IGZsYWdzIHdoaWNoIGFyZSBzZXQgYnkgZGV2ZWxvcGVyXG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUZpcnN0ID0gdGhpcy5pc0Rpc2FibGVQcmV2aW91cyA9ICF0aGlzLnBhZ2luYXRpb24ucHJldjtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTmV4dCA9IHRoaXMuaXNEaXNhYmxlTGFzdCA9ICF0aGlzLnBhZ2luYXRpb24ubmV4dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRGlzYWJsZUN1cnJlbnQgPSBpc0N1cnJlbnRQYWdlRmlyc3QgJiYgaXNDdXJyZW50UGFnZUxhc3Q7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgY2xpZW50IHNpZGUgcGFnaW5hdGlvbiwgd2hlbiBsb2FkIG1vcmUgcmVhY2hlcyBsYXN0IHBhZ2UgaGlkZSB0aGUgb24tZGVtYW5kIGdyaWQgZWxlXG4gICAgICAgIGlmICh0aGlzLmRhdGFzZXQgJiYgdGhpcy5kYXRhc2V0Lmxlbmd0aCAmJiB0aGlzLmlzRGlzYWJsZU5leHQgJiYgdGhpcy5wYXJlbnQub25EZW1hbmRMb2FkICYmIHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmNhbGxEYXRhR3JpZE1ldGhvZCgnaGlkZUxvYWRpbmdJbmRpY2F0b3InLCB0aGlzLmlzRGlzYWJsZU5leHQsIHRoaXMucGFyZW50LmluZlNjcm9sbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSB2YXJpYWJsZSBib3VuZCB0byB0aGUgZGF0YS1uYXZpZ2F0b3IgaGFzIHBhZ2luZy4qL1xuICAgIGlzRGF0YVNvdXJjZUhhc1BhZ2luZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBnaXZlcyBzdW1tYXJ5IG9mIHRoZSBjdXJyZW50IHBhZ2UgZGF0YSAoZXg6IEluIFVJIGl0IGlzIHNob3duIGFzICAxIHRvIDEwIG91dCBvZiA1MCByZWNvcmRzKVxuICAgIGdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0b3RhbFJlY29yZHMpIHtcbiAgICAgICAgdGhpcy5yb3dTdW1tYXJ5ID0gIChpc0RlZmluZWQoc3RhcnRJbmRleCkgJiYgaXNEZWZpbmVkKGVuZEluZGV4KSAmJiBpc0RlZmluZWQodG90YWxSZWNvcmRzKSkgPyB7XG4gICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgZW5kSW5kZXg6IGVuZEluZGV4LFxuICAgICAgICAgICAgdG90YWxSZWNvcmRzOiB0b3RhbFJlY29yZHNcbiAgICAgICAgfToge307XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSByZXN1bHQgZm9yIGNsaWVudCBzaWRlIHBhZ2luYXRpb25cbiAgICBzZXROb25QYWdlYWJsZURhdGEobmV3VmFsKSB7XG4gICAgICAgIGxldCBkYXRhU2l6ZSxcbiAgICAgICAgICAgIG1heFJlc3VsdHMsXG4gICAgICAgICAgICBjdXJyZW50UGFnZSxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg7XG4gICAgICAgIGRhdGFTaXplID0gaXNBcnJheShuZXdWYWwpID8gbmV3VmFsLmxlbmd0aCA6IChpc0VtcHR5KG5ld1ZhbCkgPyAwIDogMSk7XG4gICAgICAgIG1heFJlc3VsdHMgPSAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tYXhSZXN1bHRzKSB8fCBkYXRhU2l6ZTtcblxuICAgICAgICBpZiAodGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlKSB7IC8vIHdoZW4gZGVmYXVsdCBwYWdlIHNpemUgaXMgbm90IGdpdmVuIHRoZW4gdXNlIG1heFJlc3VsdHMgaW5zdGVhZCBvZiBvcHRpb25zLm1heFJlc3VsdHNcbiAgICAgICAgICAgIG1heFJlc3VsdHMgPSB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIHN0YXRpYyB2YXJpYWJsZSwga2VlcCB0aGUgY3VycmVudCBwYWdlLiBGb3Igb3RoZXIgdmFyaWFibGVzIHdpdGhvdXQgcGFnaW5hdGlvbiByZXNldCB0aGUgcGFnZSB0byAxXG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzI2M106IGdyaWRPcHRpb25zLmlzTmV4dFBhZ2VEYXRhIGZsYWcgaXMgZmFsc2Ugd2hlbiBkYXRhc2V0IGlzIGNoYW5nZWQgZnJvbSBzY3JpcHQsIHNvIHNldHRpbmcgY3VycmVudCBwYWdlIHRvIDFcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiAodGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSB8fCAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiAodGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpICYmIChnZXQodGhpcy5wYXJlbnQsICdncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkJykgPT09IHRoaXMucGFyZW50LmdyaWRPcHRpb25zLkFDVElPTlMuREFUQVNFVF9VUERBVEUgfHwgIWdldCh0aGlzLnBhcmVudCwgJ2dyaWRPcHRpb25zLmlzTmV4dFBhZ2VEYXRhJykpKSkpKSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBhZ2luZ1ZhbHVlcyhkYXRhU2l6ZSwgbWF4UmVzdWx0cywgY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLmRpc2FibGVOYXZpZ2F0aW9uKCk7XG5cbiAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIHRoaXMuZ2V0UGFnZURldGFpbHMoc3RhcnRJbmRleCArIDEsIE1hdGgubWluKHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMsIG5ld1ZhbD8ubGVuZ3RoKSwgbmV3VmFsPy5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNldFJlc3VsdChpc0FycmF5KG5ld1ZhbCkgPyBuZXdWYWwuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cykgOiBuZXdWYWwpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZXMgbmVlZGVkIGZvciBwYWdpbmF0aW9uKi9cbiAgICBwcml2YXRlIHNldFBhZ2luZ1ZhbHVlcyhuZXdWYWwpIHtcbiAgICAgICAgbGV0IGRhdGFTaXplLFxuICAgICAgICAgICAgbWF4UmVzdWx0cyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGRhdGFTb3VyY2U7XG4gICAgICAgIGxldCB2YXJpYWJsZU9wdGlvbnM6IGFueSA9IHt9O1xuICAgICAgICAvLyBTdG9yZSB0aGUgZGF0YSBpbiBfX2Z1bGxEYXRhLiBUaGlzIGlzIHVzZWQgZm9yIGNsaWVudCBzaWRlIHNlYXJjaGluZyB3aXR2YWggb3V0IG1vZGlmeWluZyB0aGUgYWN0dWFsIGRhdGFzZXQuXG4gICAgICAgIHRoaXMuX19mdWxsRGF0YSA9IG5ld1ZhbDtcbiAgICAgICAgLypDaGVjayBmb3Igc2FuaXR5Ki9cbiAgICAgICAgaWYgKHRoaXMuYmluZGRhdGFzZXQpIHtcbiAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB0aGlzLmRhdGFzb3VyY2UgfHwge307XG4gICAgICAgICAgICB2YXJpYWJsZU9wdGlvbnMgPSBkYXRhU291cmNlLl9vcHRpb25zIHx8IHt9O1xuICAgICAgICAgICAgLypDaGVjayBmb3IgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBkYXRhIHNldCovXG4gICAgICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhU291cmNlSGFzUGFnaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BBR0lOR19PUFRJT05TKSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgXCJmaWx0ZXJGaWVsZHNcIiBhbmQgXCJzb3J0T3B0aW9uc1wiIGhhdmUgYmVlbiBzZXQsIHRoZW4gc2V0IHRoZW0gc28gdGhhdCB0aGUgZmlsdGVycyBjYW4gYmUgcmV0YWluZWQgd2hpbGUgZmV0Y2hpbmcgZGF0YSB1cG9uIHBhZ2UgbmF2aWdhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGaWVsZHMgPSB2YXJpYWJsZU9wdGlvbnMuZmlsdGVyRmllbGRzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2ljYWxPcCA9IHZhcmlhYmxlT3B0aW9ucy5sb2dpY2FsT3AgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydE9wdGlvbnMgPSB2YXJpYWJsZU9wdGlvbnMub3JkZXJCeSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGlzQXJyYXkodGhpcy5wYWdpbmF0aW9uLnNvcnQpID8gZ2V0T3JkZXJCeUV4cHIodGhpcy5wYWdpbmF0aW9uLnNvcnQpIDogJycpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZSA9IHRoaXMucGFnaW5hdGlvbi50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICBtYXhSZXN1bHRzID0gdGhpcy5wYWdpbmF0aW9uLnNpemUgPSBOdW1iZXIodGhpcy5wYWdpbmF0aW9uLnNpemUpID8gdGhpcy5wYWdpbmF0aW9uLnNpemUgOiBnZXQodGhpcy5kYXRhc291cmNlLmRhdGFTZXQsIHRoaXMucGFnaW5hdGlvbi5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMgPSBOdW1iZXIodGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMpID8gdGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMgOiBnZXQodGhpcy5kYXRhc291cmNlLmRhdGFTZXQsIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucGFnaW5hdGlvbi5udW1iZXIpKSB7IC8vIG51bWJlciBpcyBwYWdlIG51bWJlciByZWNlaXZlZCBmcm9tIGJhY2tlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdpbmF0aW9uLm51bWJlciArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKiBTZW5kaW5nIHBhZ2VDb3VudCB1bmRlZmluZWQgdG8gY2FsY3VsYXRlIGl0IGFnYWluIGZvciBxdWVyeS4qL1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdpbmdWYWx1ZXMoZGF0YVNpemUsIG1heFJlc3VsdHMsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRGF0YVNpemUoZGF0YVNpemUsIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzLCB0aGlzLnBhZ2luYXRpb24uc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAoY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSwgc3RhcnRJbmRleCArIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNTdHJpbmcobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vblBhZ2VhYmxlRGF0YShuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0UGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb24gPT09ICdCYXNpYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRBcmlhRm9yQmFzaWNOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobmV3VmFsICYmICFpc1N0cmluZyhuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb25QYWdlYWJsZURhdGEobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgZmlyc3QgcGFnZSovXG4gICAgaXNGaXJzdFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gMSB8fCAhdGhpcy5kbi5jdXJyZW50UGFnZSk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IHBhZ2UqL1xuICAgIGlzTGFzdFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gdGhpcy5wYWdlQ291bnQpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGxhc3QgcGFnZSovXG4gICAgZ29Ub0xhc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0xhc3RQYWdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VDb3VudDtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGZpcnN0IHBhZ2UqL1xuICAgIGdvVG9GaXJzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRmlyc3RQYWdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUmVmcmVzaCkge1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgY3VycmVudCBwYWdlKi9cbiAgICBnb1RvUGFnZShldmVudD8sIGNhbGxiYWNrPykge1xuICAgICAgICB0aGlzLmZpcnN0Um93ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UuY29tcHV0ZU1vZGUodGhpcy5zdGF0ZWhhbmRsZXIpLFxuICAgICAgICAgICAgYWxsb3dwYWdlc2l6ZWNoYW5nZSA9IHRoaXMucGFyZW50LmFsbG93cGFnZXNpemVjaGFuZ2U7XG4gICAgICAgIGlmIChtb2RlICYmIG1vZGUudG9Mb3dlckNhc2UoKSAhPT0gJ25vbmUnICYmICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnIHx8IHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS1saXN0JykpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Ll9zZWxlY3RlZEl0ZW1zRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNGaXJzdFBhZ2UoKSAmJiAhYWxsb3dwYWdlc2l6ZWNoYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsICdwYWdpbmF0aW9uJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcy5pbmRleE9mKHRoaXMucGFyZW50Lm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZTogeyBwYWdpbmF0aW9uOiBudW1iZXI7IHBhZ2VzaXplPzogbnVtYmVyIH0gPSB7IHBhZ2luYXRpb246IHRoaXMuZG4uY3VycmVudFBhZ2UgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93cGFnZXNpemVjaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhZ2VzaXplID0gdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHN0YXRlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS1saXN0JyB8fCB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy5wYXJlbnQubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuY3VycmVudHBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQubmF0aXZlRWxlbWVudD8uc2V0QXR0cmlidXRlKCdjdXJyZW50cGFnZScsIHRoaXMuZG4uY3VycmVudFBhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNhbGwgZ2V0UGFnZURhdGEgYWZ0ZXIgY2hlY2tpbmcgc3RhdGUgY29uZmlnIHNvIHRoYXQgU3RhdGljIFZhcmlhYmxlcyBjYW4gdXNlIGl0XG4gICAgICAgIHRoaXMuZ2V0UGFnZURhdGEoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlIGRhdGEgb2YgdGhlIHBhZ2UgaGFzIGJlZW4gZmV0Y2hlZC4qL1xuICAgIG9uUGFnZURhdGFSZWFkeShldmVudCwgZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuICAgICAgICB0aGlzLmludm9rZVNldFJlY29yZChldmVudCwgZGF0YSk7XG4gICAgICAgIHRyaWdnZXJGbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBnZXQgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSovXG4gICAgZ2V0UGFnZURhdGEoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBkYXRhLFxuICAgICAgICAgICAgc3RhcnRJbmRleDtcblxuICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJbiB0YWJsZSBjb21wb25lbnQsIGluIGNhc2Ugb2Ygb24gZGVtYW5kIGFuZCBzY3JvbGwgcGFnaW5hdGlvblxuICAgICAgICAgICAgICogV2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBkYXRhIGl0ZW0gd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgICogRmV0Y2ggdGhlIGl0ZW1zIG9mIHRoZSBwYWdlIHdoZXJlIHRoZSBjaGFuZ2UgaXMgbWFkZVxuICAgICAgICAgICAgICogKi9cbiAgICAgICAgICAgIGxldCBwYWdlSW5kZXggPSB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0Tm90SW5DdXJyZW50UGFnZSgpICYmIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLmxhc3RBY3Rpb25QZXJmb3JtZWQgIT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgICAgICAgcGFnZUluZGV4ID0gdGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkxJU1RfUkVDT1JEUywge1xuICAgICAgICAgICAgICAgICdwYWdlJzogcGFnZUluZGV4LFxuICAgICAgICAgICAgICAgICdzaXplJzogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgICdmaWx0ZXJGaWVsZHMnOiB0aGlzLmZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgICAgICAnb3JkZXJCeSc6IHRoaXMuc29ydE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgJ2xvZ2ljYWxPcCc6IHRoaXMubG9naWNhbE9wLFxuICAgICAgICAgICAgICAgICdtYXRjaE1vZGUnOiAnYW55d2hlcmVpZ25vcmVjYXNlJ1xuICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VEYXRhUmVhZHkoZXZlbnQsIHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxICwgc3RhcnRJbmRleCArIHRoaXMucGFnaW5hdGlvbj8ubnVtYmVyT2ZFbGVtZW50cywgdGhpcy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZXJyb3IgaXMgdW5kZWZpbmVkLCBkbyBub3Qgc2hvdyBhbnkgbWVzc2FnZSBhcyB0aGlzIG1heSBiZSBkaXNjYXJkZWQgcmVxdWVzdFxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gd21Ub2FzdGVyLnNob3coJ2Vycm9yJywgJ0VSUk9SJywgJ1VuYWJsZSB0byBnZXQgZGF0YSBvZiBwYWdlIC0nICsgdGhpcy5kbi5jdXJyZW50UGFnZSArICc6JyArIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEgPSBpc0FycmF5KHRoaXMuX19mdWxsRGF0YSkgPyB0aGlzLl9fZnVsbERhdGEuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cykgOiB0aGlzLl9fZnVsbERhdGE7XG4gICAgICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxICwgTWF0aC5taW4oc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cywgdGhpcy5fX2Z1bGxEYXRhPy5sZW5ndGgpLCB0aGlzLl9fZnVsbERhdGE/Lmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLnNldFJlc3VsdChkYXRhKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlRGF0YVJlYWR5KGV2ZW50LCBkYXRhLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBlZGl0IGFjdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIHByZXZpb3VzIHBhZ2UgZGF0YSBvZiB0aGUgdGFibGVcbiAgICAqL1xuICAgIGlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSB7XG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IHRoaXMuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnICYmIHBhZ2VJbmRleCA9PT0gdGhpcy5wYXJlbnQuY3VycmVudFBhZ2UgJiZcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgJiYgdGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZSA8IHBhZ2VJbmRleDtcbiAgICB9XG5cbiAgICBpbnZva2VTZXRSZWNvcmQoZXZlbnQsIGRhdGEpIHtcbiAgICAgICAgLy8gVHJpZ2dlciB0aGUgZXZlbnQgaGFuZGxlciBpZiBleGlzdHMuXG4gICAgICAgIGNvbnN0IHBhZ2VJbmZvID0ge1xuICAgICAgICAgICAgY3VycmVudFBhZ2U6IHRoaXMuZG4uY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICB0b3RhbEVsZW1lbnRzOiB0aGlzLmRhdGFTaXplLFxuICAgICAgICAgICAgdG90YWxQYWdlczogdGhpcy5wYWdlQ291bnRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5pbnZva2VFdmVudENhbGxiYWNrKCdzZXRyZWNvcmQnLCB7JGV2ZW50OiBldmVudCwgJGRhdGE6IGRhdGEsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZSwgcGFnZUluZm8sIGRhdGF9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2V0cmVjb3JkJywgeyRldmVudDogZXZlbnQsICRkYXRhOiBkYXRhLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2UsIHBhZ2VJbmZvLCBkYXRhfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBwYWdlIGlucHV0LlxuICAgICBJbiBjYXNlIG9mIGludmFsaWQgaW5wdXQsIG5hdmlnYXRlIHRvIHRoZSBhcHByb3ByaWF0ZSBwYWdlOyBhbHNvIHJldHVybiBmYWxzZS5cbiAgICAgSW4gY2FzZSBvZiB2YWxpZCBpbnB1dCwgcmV0dXJuIHRydWUuKi9cbiAgICB2YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50LCBjYWxsYmFjaz8pIHtcbiAgICAgICAgLypJZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gdGhlIGxhc3QgcGFnZSBudW1iZXIgb3IgaW52YWxpZCB2YWx1ZSwgdGhlbiBoaWdobGlnaHRpbmcgdGhlIGZpZWxkIHNob3dpbmcgZXJyb3IuKi9cbiAgICAgICAgaWYgKGV2ZW50ICYmIChpc05hTih0aGlzLmRuLmN1cnJlbnRQYWdlKSB8fCB0aGlzLmRuLmN1cnJlbnRQYWdlIDw9IDAgfHwgKHRoaXMucGFnZUNvdW50ICYmICh0aGlzLmRuLmN1cnJlbnRQYWdlID4gdGhpcy5wYWdlQ291bnQgfHwgaXNOdWxsKHRoaXMuZG4uY3VycmVudFBhZ2UpKSkpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kbi5jdXJyZW50UGFnZSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZG4uY3VycmVudFBhZ2UgPiB0aGlzLnBhZ2VDb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VDb3VudDtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXRFbGUgPSAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnYScpO1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0tleUUnKSB7XG4gICAgICAgICAgICB0YXJnZXRFbGUuYWRkQ2xhc3MoJ25nLWludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRFbGUucmVtb3ZlQ2xhc3MoJ25nLWludmFsaWQnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcGFnZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgICAgIHRoaXMuX2RlYm91bmNlZFBhZ2VDaGFuZ2VkKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSByZXNwZWN0aXZlIHBhZ2VzLiovXG4gICAgbmF2aWdhdGVQYWdlKGluZGV4LCBldmVudCwgaXNSZWZyZXNoPywgY2FsbGJhY2s/KSB7XG4gICAgICAgIC8vIHdoZW4gbmF2aWdhdGVkIHRvIG5leHQgcGFnZSB0dXJuIG9uIHRoZSBpc0RhdGFMb2FkaW5nIGZsYWcgdG8gc2hvdyB0aGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnBhcmVudC5pc0RhdGFMb2FkaW5nKSAmJiAhdGhpcy5pc0Rpc2FibGVOZXh0KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgaW5maW5pdGUgc2Nyb2xsIGNhbGxpbmcgdGhlIHNob3dMb2FkaW5nSW5kaWNhdG9yIG1ldGhvZCB0byB1cGRhdGUgdGhlIGxvYWRpbmcgbWVzc2FnZSBpbW1lZGlhdGVseSB3aGVuIG5hdmlnYXRlZCB0byBuZXh0IHBhZ2VcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudC5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC52YXJpYWJsZUluZmxpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jYWxsRGF0YUdyaWRNZXRob2QoJ3Nob3dMb2FkaW5nSW5kaWNhdG9yJywgdGhpcy5wYXJlbnQubG9hZGluZ2RhdGFtc2csIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlc2V0IHRoZSBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgdG8gXCJzY3JvbGxcIiBhbmQgaXNEYXRhc2V0VXBkYXRlZCB0byBmYWxzZVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuQUNUSU9OUy5ERUZBVUxUKTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLnNldElzRGF0YXNldFVwZGF0ZWQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncGFnaW5hdGlvbmNoYW5nZScsIHskZXZlbnQ6IHVuZGVmaW5lZCwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlfSk7XG5cbiAgICAgICAgLy8gQ29udmVydCB0aGUgY3VycmVudCBwYWdlIHRvIGEgdmFsaWQgcGFnZSBudW1iZXIuXG4gICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSArdGhpcy5kbi5jdXJyZW50UGFnZTtcblxuICAgICAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICAgICAgICBjYXNlICdmaXJzdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvRmlyc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdwcmV2JzpcbiAgICAgICAgICAgICAgICAvKlJldHVybiBpZiBhbHJlYWR5IG9uIHRoZSBmaXJzdCBwYWdlLiovXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24/Lm5leHQgJiYgKHRoaXMuaXNGaXJzdFBhZ2UoKSB8fCAhdGhpcy52YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50LCBjYWxsYmFjaykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFnaW5hdGlvbj8ubmV4dCkgeyAvLyBXTVMtMTg4Njc6IEZvciBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLCBza2lwcGluZyB0aGUgcmVndWxhciBmbG93IGFuZCBlbmFibGluZyBpc05leHQgZmxhZyBpbiBwYWdpbmF0aW9uIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzTmV4dCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc1ByZXYgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKkRlY3JlbWVudCB0aGUgY3VycmVudCBwYWdlIGJ5IDEuKi9cbiAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlIC09IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgICAgICAgICAvKlJldHVybiBpZiBhbHJlYWR5IG9uIHRoZSBsYXN0IHBhZ2UuKi9cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbj8ubmV4dCAmJiAodGhpcy5pc0xhc3RQYWdlKCkgfHwgIXRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShldmVudCwgY2FsbGJhY2spKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2luYXRpb24/Lm5leHQpIHsgLy8gV01TLTE4ODY3OiBGb3Igc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgc2tpcHBpbmcgdGhlIHJlZ3VsYXIgZmxvdyBhbmQgZW5hYmxpbmcgaXNQcmV2IGZsYWcgaW4gcGFnaW5hdGlvbiBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc05leHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc1ByZXYgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLypJbmNyZW1lbnQgdGhlIGN1cnJlbnQgcGFnZSBieSAxLiovXG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSArPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGFzdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTGFzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvKk5hdmlnYXRlIHRvIHRoZSBjdXJyZW50IHBhZ2UuKi9cbiAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHNldEJpbmREYXRhU2V0KGJpbmRkYXRhc2V0LCBwYXJlbnQsIGRhdGFTb3VyY2UsIGRhdGFzZXQ/LCBiaW5kZGF0YXNvdXJjZT8sIGRhdGFzZXRCb3VuZEV4cHI/LCBzdGF0ZWhhbmRsZXI/KSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gYmluZGRhdGFzZXQuc3BsaXQoJy4nKTtcbiAgICAgICAgbGV0IGJpbmRQYWdpbmdPcHRpb25zO1xuICAgICAgICB0aGlzLnN0YXRlaGFuZGxlciA9IHN0YXRlaGFuZGxlcjtcbiAgICAgICAgaWYgKHBhcnRzWzBdID09PSAnVmFyaWFibGVzJyB8fCBwYXJ0c1swXSA9PT0gJ1dpZGdldHMnKSB7XG4gICAgICAgICAgICBiaW5kUGFnaW5nT3B0aW9ucyA9IGAke3BhcnRzWzBdfS4ke3BhcnRzWzFdfS5wYWdpbmF0aW9uYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJpbmRkYXRhc291cmNlICYmIGRhdGFzZXQgJiYgIWRhdGFzZXRCb3VuZEV4cHIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNldCA9IGRhdGFzZXQ7XG4gICAgICAgICAgICB0aGlzLl9kZWJvdW5jZWRBcHBseURhdGFzZXQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJpbmRkYXRhc2V0ID0gYmluZGRhdGFzZXQ7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gd2F0Y2hpbmcgZm9yIGRhdGFzZXQgY2hhbmdlcyBldmVuIHdoZW4gZGF0YXNldCBpcyBib3VuZCB0byBcIml0ZW0uXCIgKGkuZS4gYnkgY2hlY2tpbmcgZm9yIGRhdGFzZXRCb3VuZEV4cHIpXG4gICAgICAgICAgICAvLyBpdGVtIGNvbnRleHQgaXMgcGFzc2VkIGFzIGRhdGFTb3VyY2UgaGVyZVxuICAgICAgICAgICAgLy8gW1RvZG8tQ1NQXTogY2hlY2sgaWYgc2FtZSBleHByIGZuIGlzIGdlbmVyYXRlZCBieSBwYXJlbnQgd2lkZ2V0IChsaXN0LCB0YWJsZSlcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgJHdhdGNoKFxuICAgICAgICAgICAgICAgICAgICBiaW5kZGF0YXNldCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0Qm91bmRFeHByID8gZGF0YVNvdXJjZSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICBudiA9PiAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc2V0ID0gbnY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV01TLTE5Mjg1OiBTZXR0aW5nIGRhdGFzZXQgb24gcHJveHkgb25seSB0byBoYW5kbGUgcHJvcGVydHljaGFuZ2UgaGFuZGxlciBjYWxsIGZvciB1bmRlZmluZWQgY2FzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gbnY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBSZWdpc3RlciBhIHdhdGNoIG9uIHBhZ2luZyBvcHRpb25zLiBDYWxsIGRhdGFzZXQgcHJvcGVydHkgY2hhbmdlIGhhbmRsZXIgZXZlbiBpZiBwYWdpbmcgb3B0aW9ucyBjaGFuZ2VzIHRvIHJlZmxlY3QgcGFnaW5hdGlvbiBzdGF0ZVxuICAgICAgICAgICAgaWYgKCFiaW5kUGFnaW5nT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogZWl0aGVyIGdlbmVyYXRlIHdhdGNoIGV4cHIgZm4gb3IgcmVnaXN0ZXIgYW4gZXZlbnQgZnJvbSB0aGUgZGF0YXNvdXJjZSBpdHNlbGZcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgJHdhdGNoKFxuICAgICAgICAgICAgICAgICAgICBiaW5kUGFnaW5nT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYXBwbHkgZGF0YXNvdXJjZSBvbmx5IHdoZW4gZGF0YXNldCBpcyBub3QgYm91bmQgdG8gXCJpdGVtLkZJRUxEXCJcbiAgICAgICAgaWYgKCFkYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBkYXRhc291cmNlIG9mIHBhZ2luYXRpb24gZnJvbSB0aGUgcGFyZW50IHdpZGdldFxuICAgIHNldERhdGFTb3VyY2UoZGF0YVNvdXJjZSkge1xuICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52LCBvdikge1xuICAgICAgICBsZXQgcGFnZVNpemUsIHByZXZQYWdlU2l6ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5vbkRhdGFOYXZpZ2F0b3JEYXRhU2V0Q2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMucGFyZW50Lm9uRGF0YU5hdmlnYXRvckRhdGFTZXRDaGFuZ2UobnYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gbnY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgbGFzdCBhY3Rpb24gcGVyZm9ybWVkIHRvIFwiZGF0YXNldF91cGRhdGVcIiB3aGVuZXZlciBkYXRhc2V0IGlzIGNoYW5nZWQgaW4gdGFibGUgY29tcG9uZW50XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Ll90cmlnZ2VyZWRCeVVzZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhPy5sZW5ndGgpIHsgLy8gY2FsY3VsYXRlIFBhZ2VzaXplIG9wdGlvbnMgYmFzZWQgb24gYWN0dWFsIHBhZ2Ugc2l6ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpKSB7IC8vIGZvciBMaXZlIHZhcmlhYmxlc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZVNpemUgPSBnZXQoZGF0YSwgJ3BhZ2luYXRpb24uc2l6ZScpIHx8IGdldCh0aGlzLmRhdGFzb3VyY2UsICdwYWdpbmF0aW9uLnNpemUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRWxlbWVudHMgPSBnZXQoZGF0YSwgJ3BhZ2luYXRpb24udG90YWxFbGVtZW50cycpIHx8IGdldCh0aGlzLmRhdGFzb3VyY2UsICdwYWdpbmF0aW9uLnRvdGFsRWxlbWVudHMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlID0gdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0dWFsUGFnZVNpemUgPSB3aWRnZXRTdGF0ZT8uYWN0dWFscGFnZXNpemUgfHwgY3VycmVudFBhZ2VTaXplO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbFBhZ2VTaXplID0gTnVtYmVyKHRoaXMuYWN0dWFsUGFnZVNpemUpID8gdGhpcy5hY3R1YWxQYWdlU2l6ZSA6IGdldCh0aGlzLmRhdGFzb3VyY2UuZGF0YVNldCwgdGhpcy5hY3R1YWxQYWdlU2l6ZSlcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gWy4uLnRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9uc107XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSByYW5nZSh0aGlzLmFjdHVhbFBhZ2VTaXplLCAgTWF0aC5tYXgodGhpcy5hY3R1YWxQYWdlU2l6ZSArIDEsIHRoaXMuYWN0dWFsUGFnZVNpemUgKyB0b3RhbEVsZW1lbnRzKSwgdGhpcy5hY3R1YWxQYWdlU2l6ZSk7IC8vIGhlcmUgZGF0YSBoYXMgb25seSB0aGF0IHBhZ2UgZGF0YSBhbmQgcGFnZXNpemUgaGFzIHRvdGFsTm9vZiBFbGVtZW50c1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZT8uc2VsZWN0ZWRJdGVtICYmIHdpZGdldFN0YXRlLmFjdHVhbHBhZ2VzaXplICE9PSB3aWRnZXRTdGF0ZS5wYWdlc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZQYWdlU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VTaXplID0gdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCBkYXRhPy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkSXRlbXMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zZm9yTmV3UGFnZVNpemUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCB0aGlzLnByZXZQYWdlU2l6ZSwgZGF0YT8ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkSXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMucGFyZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbHBhZ2VzaXplOiB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiB1cGRhdGVkSXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VTaXplID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVNpemUgPSB0aGlzLnBhcmVudC5nZXRBY3R1YWxQYWdlU2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSBbLi4udGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zXTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHJhbmdlKHBhZ2VTaXplLCBkYXRhLmxlbmd0aCArIHBhZ2VTaXplLCBwYWdlU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaGVuIHRoZSBkYXRhc2V0IGlzIG5vdCBpbiBjdXJyZW50IHBhZ2UsIGJ1dCBpbiBwcmV2aW91cyBvbmVzIGRpcmVjdGx5IHNldCB0aGUgcmVzdWx0IHdpdGhvdXQgc2V0dGluZyBwYWdlIHZhbHVlc1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0Tm90SW5DdXJyZW50UGFnZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQoZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFnaW5nVmFsdWVzKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hdmlnYXRpb24nKSB7XG4gICAgICAgICAgICBpZiAobnYgPT09ICdBZHZhbmNlZCcpIHsgLy8gU3VwcG9ydCBmb3Igb2xkZXIgcHJvamVjdHMgd2hlcmUgbmF2aWdhdGlvbiB0eXBlIHdhcyBhZHZhbmNlZCBpbnN0ZWFkIG9mIGNsYXNpY1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbiA9ICdDbGFzc2ljJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTmF2U2l6ZSgpO1xuICAgICAgICAgICAgdGhpcy5uYXZjb250cm9scyA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hdmlnYXRpb25zaXplJykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVOYXZTaXplKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbmFsaWduJykge1xuICAgICAgICAgICAgc3dpdGNoQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBgdGV4dC0ke252fWAsIGB0ZXh0LSR7b3Z9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbWF4UmVzdWx0cycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFnaW5nVmFsdWVzKHRoaXMuZGF0YXNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cbiAgIC8vIGNoYW5nZSB0aGUgc2VsZWN0ZWRJdGVtcyBwYWdlIG51bWJlciBhbmQgaW5kZXggaW4gdGhlIHN0YXRlcGFyYW1zIHdoZW4gcGFnZXNpemUgaXMgY2hhbmdlZFxuICAgIGhhbmRsZVN0YXRlUGFyYW1zZm9yTmV3UGFnZVNpemUoXG4gICAgICAgIHNlbGVjdGVkSXRlbTogeyBwYWdlOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdLFxuICAgICAgICBvbGRQYWdlU2l6ZTogbnVtYmVyLFxuICAgICAgICBuZXdQYWdlU2l6ZTogbnVtYmVyXG4gICAgKTogeyBwYWdlOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbS5tYXAoKHsgcGFnZSwgaW5kZXggfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGVJbmRleCA9IChwYWdlIC0gMSkgKiBvbGRQYWdlU2l6ZSArIGluZGV4O1xuICAgICAgICAgICAgY29uc3QgbmV3UGFnZSA9IE1hdGguZmxvb3IoYWJzb2x1dGVJbmRleCAvIG5ld1BhZ2VTaXplKSArIDE7IC8vIGJhY2sgdG8gMS1iYXNlZFxuICAgICAgICAgICAgY29uc3QgbmV3SW5kZXggPSBhYnNvbHV0ZUluZGV4ICUgbmV3UGFnZVNpemU7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGFnZTogbmV3UGFnZSxcbiAgICAgICAgICAgICAgICBpbmRleDogbmV3SW5kZXhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRHJvcGRvd25LZXlkb3duKGV2ZW50LCBpbmRleCkge1xuICAgICAgICBjb25zdCAkaXRlbXMgPSAkKCd1bCNkcm9wZG93bi1iYXNpYyBhLmRyb3Bkb3duLWl0ZW0nKTtcbiAgICAgICAgY29uc3QgbWF4SW5kZXggPSB0aGlzLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICBsZXQgc2VsZWN0ZWRPcHRpb247XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICBjYXNlICdUYWInOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgU2hpZnQrVGFiIGFzIEFycm93VXBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSAoaW5kZXggLSAxKSA8IDAgPyBtYXhJbmRleCA6IGluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBUYWIgb3IgQXJyb3dEb3duIGFzIEFycm93RG93blxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IChpbmRleCArIDEpID4gbWF4SW5kZXggPyAwIDogaW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSAoaW5kZXggLSAxKSA8IDAgPyBtYXhJbmRleCA6IGluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBhZ2VTaXplT3B0aW9uc1t0aGlzLmZvY3VzZWRJbmRleF07XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VTaXplQ2hhbmdlKGV2ZW50LCBzZWxlY3RlZE9wdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmUgZm9jdXMgYWZ0ZXIgaW5kZXggaXMgdXBkYXRlZFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICRpdGVtcy5lcSh0aGlzLmZvY3VzZWRJbmRleCk/LmZvY3VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgY2xvc2VEcm9wZG93bigpIHtcbiAgICAgICAgLy8gQ2xvc2UgZHJvcGRvd25cbiAgICAgICAgdGhpcy5ic0Ryb3Bkb3duLmhpZGUoKTtcbiAgICAgICAgY29uc3QgJHRvZ2dsZUJ1dHRvbiA9ICQoJ2J1dHRvblthcmlhLWNvbnRyb2xzPVwiZHJvcGRvd24tYmFzaWNcIl0nKTtcbiAgICAgICAgJHRvZ2dsZUJ1dHRvbi5mb2N1cygpOyAvLyBSZXR1cm4gZm9jdXMgdG8gYnV0dG9uXG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gZ2V0cyBjYWxsZWQgb24gZHJvcGRvd24gb3BlbiAmIGNsb3NlXG4gICAgb25PcGVuQ2hhbmdlKGlzT3Blbikge1xuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IDA7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBtYW51YWxseSBmb2N1cyB0aGUgZHJvcGRvd24gYXMgZHJvcGRvd24gaGFzIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgIGNvbnN0ICRpdGVtcyA9ICQoJ3VsI2Ryb3Bkb3duLWJhc2ljIGEuZHJvcGRvd24taXRlbScpO1xuICAgICAgICAgICAgICAgIGNvbnN0ICRmaXJzdEl0ZW0gPSAkaXRlbXMuZXEodGhpcy5mb2N1c2VkSW5kZXgpO1xuICAgICAgICAgICAgICAgICRmaXJzdEl0ZW0/LmZvY3VzKCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblBhZ2VTaXplQ2hhbmdlKCRldmVudCwgbmV3UGFnZVNpemUpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMucGFyZW50KTtcbiAgICAgICAgICAgIGxldCB1cGRhdGVkSXRlbXM7XG4gICAgICAgIGlmICh3aWRnZXRTdGF0ZT8uc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICB1cGRhdGVkSXRlbXMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zZm9yTmV3UGFnZVNpemUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCB0aGlzLm1heFJlc3VsdHMsICtuZXdQYWdlU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3R1YWxQYWdlU2l6ZSA9IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB0aGlzLm1heFJlc3VsdHMgPSArbmV3UGFnZVNpemU7XG4gICAgICAgIHRoaXMubWF4UmVzdWx0c0VtaXR0ZXIuZW1pdCh0aGlzLm1heFJlc3VsdHMpO1xuICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSAmJiB0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzID0gdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2VzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgYWN0dWFscGFnZXNpemU6IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogdXBkYXRlZEl0ZW1zXG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IDEsXG4gICAgICAgICAgICAgICAgcGFnZXNpemU6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICBhY3R1YWxwYWdlc2l6ZTogdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHNcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVBhZ2UoJ2ZpcnN0JywgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBjb25zdCBwYWdpbmF0aW9uRWxlbSA9ICB0aGlzLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHBhZ2luYXRpb25FbGVtLm9uY2xpY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIlxuQGlmIChuYXZjb250cm9scyA9PT0gJ0NsYXNzaWMnKSB7XG48dWwgY2xhc3M9XCJwYWdpbmF0aW9uIGFkdmFuY2VkIHt7bmF2aWdhdGlvbkNsYXNzfX1cIj5cbiAgICBAaWYgKGFsbG93cGFnZXNpemVjaGFuZ2UgJiYgIHBhZ2VTaXplT3B0aW9ucz8uWzBdPHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtcy1wZXItcGFnZVwiPlxuICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFXCIgY2xhc3M9XCJhcHAtbGFiZWxcIj57e2FwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRX19IDo8L2xhYmVsPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZHJvcGRvd24gIGNvbnRhaW5lcj1cImJvZHlcIiAoaXNPcGVuQ2hhbmdlKT1cIm9uT3BlbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ1dHRvbi1iYXNpY1wiIGRyb3Bkb3duVG9nZ2xlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBhcHAtYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgICAge3ttYXhSZXN1bHRzfX0gPHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8dWwgaWQ9XCJkcm9wZG93bi1iYXNpY1wiICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IHBhZ2VzaXplLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImJ1dHRvbi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgcGFnZVNpemVPcHRpb25zOyB0cmFjayBvcHRpb247IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJtZW51aXRlbVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IG9wdGlvbiA9PSBtYXhSZXN1bHRzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImkgPT09IGZvY3VzZWRJbmRleCA/IDAgOiAtMVwiPnt7b3B0aW9ufX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICBAaWYgKHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtLXJhbmdlXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkuc3RhcnRJbmRleH19IC0ge3tyb3dTdW1tYXJ5LmVuZEluZGV4fX08L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj5vZjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS50b3RhbFJlY29yZHN9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlRmlyc3R9XCI+XG4gICAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfRklSU1RcIiBuYW1lPVwiZmlyc3RcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlRmlyc3RcIlxuICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCdmaXJzdCcsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktZmlyc3QtcGFnZVwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBmaXJzdCBwYWdlIHt7IGlzRGlzYWJsZUZpcnN0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZVByZXZpb3VzfVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX1BSRVZJT1VTXCIgbmFtZT1cInByZXZcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZVByZXZpb3VzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ3ByZXYnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tbGVmdFwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBwcmV2aW91cyBwYWdlIHt7IGlzRGlzYWJsZVByZXZpb3VzID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgY2xhc3M9XCJwYWdlY291bnQgZGlzYWJsZWRcIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBhcmlhLWxhYmVsPVwiQ2hhbmdlIFBhZ2UgTnVtYmVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJkbi5jdXJyZW50UGFnZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Nob3dpbmcgUGFnZSAnICsgZG4uY3VycmVudFBhZ2UgKyAnIG9mICcgKyBwYWdlQ291bnRcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlQ3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiIChjaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIi8+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIGNsYXNzPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgPGEgW2hpZGRlbl09XCJpc0Rpc2FibGVDb3VudFwiPiAvIHt7cGFnZUNvdW50fX08L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVOZXh0fVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX05FWFRcIiBuYW1lPVwibmV4dFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVOZXh0XCJcbiAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1yaWdodFwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBuZXh0IHBhZ2Uge3sgaXNEaXNhYmxlTmV4dCA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVMYXN0fVwiPlxuICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9MQVNUXCIgbmFtZT1cImxhc3RcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlTGFzdFwiXG4gICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ2xhc3QnLCAkZXZlbnQpXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktbGFzdC1wYWdlXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gbGFzdCBwYWdlIHt7IGlzRGlzYWJsZUxhc3QgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKHNob3dyZWNvcmRjb3VudCkge1xuICAgICAgPGxpIGNsYXNzPVwidG90YWxjb3VudCBkaXNhYmxlZFwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPnt7YXBwTG9jYWxlLkxBQkVMX1RPVEFMX1JFQ09SRFN9fToge3tkYXRhU2l6ZX19PC9hPlxuICAgICAgPC9saT5cbiAgICB9XG48L3VsPlxufVxuQGlmIChuYXZjb250cm9scyA9PT0gJ1BhZ2VyJykge1xuICA8dWwgY2xhc3M9XCJwYWdlciB7e25hdmlnYXRpb25DbGFzc319XCI+XG4gICAgICAgIEBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiAgcGFnZVNpemVPcHRpb25zPy5bMF08cm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW1zLXBlci1wYWdlXCI+XG4gICAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0VcIiBjbGFzcz1cImFwcC1sYWJlbFwiPnt7YXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFfX0gOjwvbGFiZWw+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiBkcm9wZG93biBjb250YWluZXI9XCJib2R5XCIgKGlzT3BlbkNoYW5nZSk9XCJvbk9wZW5DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidXR0b24tYmFzaWNcIiBkcm9wZG93blRvZ2dsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYXBwLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bWF4UmVzdWx0c319IDxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPHVsIGlkPVwiZHJvcGRvd24tYmFzaWNcIiAqZHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudSBwYWdlc2l6ZS1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJidXR0b24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHBhZ2VTaXplT3B0aW9uczsgdHJhY2sgb3B0aW9uOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJtZW51aXRlbVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IG9wdGlvbiA9PSBtYXhSZXN1bHRzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQsIG9wdGlvbilcIiAoa2V5ZG93bik9XCJvbkRyb3Bkb3duS2V5ZG93bigkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpID09PSBmb2N1c2VkSW5kZXggPyAwIDogLTFcIj57e29wdGlvbn19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIEBpZiAocm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW0tcmFuZ2VcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPm9mPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS50b3RhbFJlY29yZHN9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgfVxuQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBjbGFzcz1cInByZXZpb3VzXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlUHJldmlvdXN9XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ3ByZXYnLCAkZXZlbnQpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVQcmV2aW91c1wiPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tbGVmdFwiPjwvaT48L3NwYW4+XG4gICAgICAgIHt7YXBwTG9jYWxlLkxBQkVMX1BSRVZJT1VTfX1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+e3sgaXNEaXNhYmxlUHJldmlvdXMgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIDxsaSBjbGFzcz1cIm5leHRcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVOZXh0fVwiPlxuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCduZXh0JywgJGV2ZW50KVwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlTmV4dFwiPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tcmlnaHRcIj48L2k+PC9zcGFuPlxuICAgICAgICB7e2FwcExvY2FsZS5MQUJFTF9ORVhUfX1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+e3sgaXNEaXNhYmxlTmV4dCA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gIH1cbiAgPC91bD5cbn1cblxuQGlmIChuYXZjb250cm9scyA9PT0gJ0Jhc2ljJykge1xuICAgIEBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiAgcGFnZVNpemVPcHRpb25zPy5bMF08cm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2VcIj5cbiAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0VcIiBjbGFzcz1cImFwcC1sYWJlbFwiPnt7YXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFIH19IDo8L2xhYmVsPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiBkcm9wZG93biBjb250YWluZXI9XCJib2R5XCIgIChpc09wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidXR0b24tYmFzaWNcIiBkcm9wZG93blRvZ2dsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYXBwLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICB7e21heFJlc3VsdHN9fSA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8dWwgaWQ9XCJkcm9wZG93bi1iYXNpY1wiICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IHBhZ2VzaXplLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiYnV0dG9uLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHBhZ2VTaXplT3B0aW9uczsgdHJhY2sgb3B0aW9uOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogb3B0aW9uID09IG1heFJlc3VsdHMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tcmFuZ2VcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS5zdGFydEluZGV4fX0gLSB7e3Jvd1N1bW1hcnkuZW5kSW5kZXh9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPm9mPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnRvdGFsUmVjb3Jkc319PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgICAgPHBhZ2luYXRpb24gY2xhc3M9XCJwYWdpbmF0aW9uIGJhc2ljXCIgW25nQ2xhc3NdPVwibmF2aWdhdGlvbkNsYXNzXCIgcm9sZT1cIm5hdmlnYXRpb25cIlxuICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIm1heFJlc3VsdHNcIiBbdG90YWxJdGVtc109XCJkYXRhU2l6ZVwiXG4gICAgICAgIChwYWdlQ2hhbmdlZCk9XCJwYWdlQ2hhbmdlZCgkZXZlbnQpXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOnRydWV9XCIgW25nTW9kZWxdPVwiZG4uY3VycmVudFBhZ2VcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTaG93aW5nIFBhZ2UgJyArIGRuLmN1cnJlbnRQYWdlICsgJyBvZiAnICsgcGFnZUNvdW50ICsgJyBwYWdlcydcIlxuICAgICAgICBbYm91bmRhcnlMaW5rc109XCJib3VuZGFyeWxpbmtzXCIgW21heFNpemVdPVwibWF4c2l6ZVwiXG4gICAgICAgIFtkaXJlY3Rpb25MaW5rc109XCJkaXJlY3Rpb25saW5rc1wiXG4gICAgICAgIGZpcnN0VGV4dD1cIkZpcnRzdFwiIGxhc3RUZXh0PVwiTGFzdFwiXG4gICAgICAgIFtjdXN0b21QcmV2aW91c1RlbXBsYXRlXT1cInByZXZUZW1wbGF0ZVwiXG4gICAgICAgIFtjdXN0b21OZXh0VGVtcGxhdGVdPVwibmV4dFRlbXBsYXRlXCJcbiAgICAgICAgW2N1c3RvbVBhZ2VUZW1wbGF0ZV09XCJwYWdlVGVtcGxhdGVcIj48L3BhZ2luYXRpb24+XG4gICAgfVxufVxuXG5AaWYgKG5hdmNvbnRyb2xzID09PSAnQmFzaWMnICYmIHNob3dyZWNvcmRjb3VudCkge1xuICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XG4gICAgPGxpIGNsYXNzPVwidG90YWxjb3VudCBkaXNhYmxlZCBiYXNpY2NvdW50XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPnt7YXBwTG9jYWxlLkxBQkVMX1RPVEFMX1JFQ09SRFN9fToge3tkYXRhU2l6ZX19PC9hPlxuICAgIDwvbGk+XG4gIDwvdWw+XG59XG5cbjxuZy10ZW1wbGF0ZSAjcGFnZVRlbXBsYXRlIGxldC1wYWdlPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzYWNpdHZlcGFnZV09XCJwYWdlLmFjdGl2ZVwiPnt7J1BhZ2UgJ319PC9zcGFuPlxuICB7e3BhZ2UubnVtYmVyfX1cbiAgQGlmIChwYWdlLmFjdGl2ZSkge1xuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPiB7eycsIFNob3dpbmcgcGFnZSAnICsgcGFnZS5udW1iZXIgKyAnIG9mICcgKyBwYWdlQ291bnR9fTwvc3Bhbj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcHJldlRlbXBsYXRlIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIFthdHRyLmRhdGEtaXNkaXNhYmxlZF09XCJkaXNhYmxlZFwiPkdvIHRvIFByZXZpb3VzIHBhZ2Uge3tkaXNhYmxlZCA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNuZXh0VGVtcGxhdGUgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgW2F0dHIuZGF0YS1pc2Rpc2FibGVkXT1cImRpc2FibGVkXCI+R28gdG8gTmV4dCBwYWdlIHt7ZGlzYWJsZWQgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
742
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9wYWdpbmF0aW9uL3NyYy9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3BhZ2luYXRpb24vc3JjL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuSCxPQUFPLEVBQ0gsY0FBYyxFQUNkLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixnQ0FBZ0MsRUFDaEMsU0FBUyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFD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QyxZQUM5RCxnQkFBZ0IsYUFFZjt3QkFDUCxrQkFBa0IscUJBQXFCO3FCQUMxQzs7MEJBc0YyQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFNBQVM7OzBCQUFrQixNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQUcsUUFBUTt5Q0FsRnBHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNtQyxVQUFVO3NCQUFuRCxTQUFTO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7JGFwcERpZ2VzdCwgJHdhdGNoLCBBcHBDb25zdGFudHMsIERhdGFTb3VyY2UsIGRlYm91bmNlLCBpc0RlZmluZWQsIHN3aXRjaENsYXNzLCB0cmlnZ2VyRm59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgREVCT1VOQ0VfVElNRVMsXG4gICAgZ2V0T3JkZXJCeUV4cHIsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlcixcbiAgICB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcyxcbiAgICBXaWRnZXRSZWZcbn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vcGFnaW5hdGlvbi5wcm9wcyc7XG5pbXBvcnQge2ZvckVhY2gsIGdldCwgaXNBcnJheSwgaXNFbXB0eSwgaXNOdWxsLCBpc1N0cmluZywgcmFuZ2V9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7UGFnaW5hdGlvbk1vZHVsZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wYWdpbmF0aW9uJztcbmltcG9ydCB7QnNEcm9wZG93bkRpcmVjdGl2ZSwgQnNEcm9wZG93bk1vZHVsZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1kYXRhbmF2aWdhdG9yIGNsZWFyZml4JztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLXBhZ2luYXRpb24nLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuY29uc3Qgc2l6ZUNsYXNzZXMgPSB7XG4gICAgJ1BhZ2VyJzoge1xuICAgICAgICAnc21hbGwnOiAncGFnZXItc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnZXItbGcnXG4gICAgfSxcbiAgICAnQmFzaWMnOiB7XG4gICAgICAgICdzbWFsbCc6ICdwYWdpbmF0aW9uLXNtJyxcbiAgICAgICAgJ2xhcmdlJzogJ3BhZ2luYXRpb24tbGcnXG4gICAgfSxcbiAgICAnQ2xhc3NpYyc6IHtcbiAgICAgICAgJ3NtYWxsJzogJ3BhZ2luYXRpb24tc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnaW5hdGlvbi1sZydcbiAgICB9XG59O1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFBhZ2luYXRpb25Nb2R1bGUsIEJzRHJvcGRvd25Nb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnW3dtUGFnaW5hdGlvbl0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFBhZ2luYXRpb25Db21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIEBPdXRwdXQoKSByZXN1bHRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgbWF4UmVzdWx0c0VtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBWaWV3Q2hpbGQoQnNEcm9wZG93bkRpcmVjdGl2ZSkgcHJvdGVjdGVkIGJzRHJvcGRvd247XG5cbiAgICBkYXRhc291cmNlO1xuICAgIG1heFJlc3VsdHM7XG4gICAgcGFnZVNpemVPcHRpb25zO1xuICAgIHByZXZQYWdlU2l6ZTtcbiAgICBhY3R1YWxQYWdlU2l6ZTtcbiAgICBhbGxvd3BhZ2VzaXplY2hhbmdlO1xuICAgIGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSBbXTtcbiAgICBmb2N1c2VkSW5kZXggPSAwO1xuICAgIHJvd1N1bW1hcnk7XG4gICAgbmF2aWdhdGlvbnNpemU7XG4gICAgc2hvd3JlY29yZGNvdW50O1xuXG4gICAgbmF2Y29udHJvbHM7XG4gICAgbmF2aWdhdGlvbjtcblxuICAgIGJvdW5kYXJ5bGlua3M7XG4gICAgZGlyZWN0aW9ubGlua3M7XG5cbiAgICBuYXZpZ2F0aW9uQ2xhc3M7XG4gICAgZG4gPSB7XG4gICAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcblxuICAgIHBhZ2VDb3VudCA9IDA7XG4gICAgaXNEaXNhYmxlTmV4dCA9IHRydWU7XG4gICAgaXNEaXNhYmxlUHJldmlvdXMgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUZpcnN0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVMYXN0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVDdXJyZW50O1xuICAgIGRhdGFTaXplO1xuICAgIHByZXZzaG93cmVjb3JkY291bnQ7XG4gICAgaXNEaXNhYmxlQ291bnQ7XG4gICAgZmlyc3RSb3c7XG4gICAgcmVzdWx0O1xuICAgIF9fZnVsbERhdGE7XG4gICAgZGF0YXNldDtcbiAgICBvcHRpb25zO1xuICAgIHN0YXRlaGFuZGxlcjtcbiAgICBmaWx0ZXJGaWVsZHM7XG4gICAgc29ydE9wdGlvbnM7XG4gICAgYmluZGRhdGFzZXQ7XG4gICAgcGFnaW5hdGlvbjtcbiAgICBsb2dpY2FsT3A7XG5cbiAgICBwcml2YXRlIF9kZWJvdW5jZWRBcHBseURhdGFzZXQgPSBkZWJvdW5jZSgoKSA9PiB0aGlzLndpZGdldC5kYXRhc2V0ID0gdGhpcy5kYXRhc2V0LCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUpO1xuICAgIHByaXZhdGUgX2RlYm91bmNlZFBhZ2VDaGFuZ2VkID0gZGVib3VuY2UoZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZSA9IGV2ZW50ICYmIGV2ZW50LnBhZ2U7XG4gICAgICAgIGNvbnN0IG1heFJlc3VsdHMgPSBldmVudCAmJiAoZXZlbnQucGFnZXNpemUgfHwgZXZlbnQuaXRlbXNQZXJQYWdlKSB8fCB0aGlzLm1heFJlc3VsdHM7XG5cbiAgICAgICAgLy8gRG8gbm90IGNhbGwgZ29Ub1BhZ2UgaWYgcGFnZSBoYXMgbm90IGNoYW5nZWRcbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlICE9PSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IHRoaXMubWF4UmVzdWx0cyAhPT0gbWF4UmVzdWx0cykge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9ICh0aGlzIGFzIGFueSkucGFyZW50IHx8IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLm1heFJlc3VsdHMgPSBtYXhSZXN1bHRzO1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzRW1pdHRlci5lbWl0KHRoaXMubWF4UmVzdWx0cyk7XG4gICAgICAgICAgICBpbnN0Lmludm9rZUV2ZW50Q2FsbGJhY2soJ3BhZ2luYXRpb25jaGFuZ2UnLCB7JGV2ZW50OiB1bmRlZmluZWQsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZX0pO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbiA9PT0gJ0Jhc2ljJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEFyaWFGb3JCYXNpY05hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG5cbiAgICBwcml2YXRlIF9zZXRBcmlhRm9yQmFzaWNOYXZpZ2F0aW9uKCkge1xuICAgICAgICBmb3JFYWNoKHRoaXMubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApOycpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gaXRlbS5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlPy5kYXRhc2V0LmlzYWNpdHZlcGFnZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGNoaWxkTm9kZT8uZGF0YXNldC5pc2Rpc2FibGVkID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbS5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgQFNraXBTZWxmKCkgQEluamVjdChXaWRnZXRSZWYpIHB1YmxpYyBwYXJlbnQsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlID0gdGhpcy5wYXJlbnQuYWxsb3dwYWdlc2l6ZWNoYW5nZTtcbiAgICAgICAgICAgIGlmKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSlcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnBhcmVudD8ucGFnZXNpemVvcHRpb25zID8gdGhpcy5wYXJlbnQucGFnZXNpemVvcHRpb25zPy5zcGxpdCgnLCcpLm1hcChOdW1iZXIpLnNvcnQoKGEsIGIpID0+IGEgLSBiKSA6IFtdO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBzZXRSZXN1bHQocmVzdWx0KSB7XG4gICAgICAgIC8vIFRPRE86IEVtaXQgZXZlbnQgb25seSBpZiByZXN1bHQgaXMgY2hhbmdlZFxuICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5yZXN1bHRFbWl0dGVyLmVtaXQodGhpcy5yZXN1bHQpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBuYXZpZ2F0aW9uQ2xhc3MgYmFzZWQgb24gbmF2aWdhdGlvbiBhbmQgbmF2aWdhdGlvblNpemUgcHJvcHNcbiAgICBwcml2YXRlIHVwZGF0ZU5hdlNpemUoKSB7XG4gICAgICAgIGNvbnN0IHNpemVDbHMgPSBzaXplQ2xhc3Nlc1t0aGlzLm5hdmNvbnRyb2xzXTtcbiAgICAgICAgaWYgKHNpemVDbHMgJiYgdGhpcy5uYXZpZ2F0aW9uc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ2xhc3MgPSBzaXplQ2xzW3RoaXMubmF2aWdhdGlvbnNpemVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ2xhc3MgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIHJlc2V0IHRoZSBwYWdpbmcgdmFsdWVzIHRvIGRlZmF1bHQuXG4gICAgcmVzZXRQYWdlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHBhZ2luZyB2YWx1ZXMuKi9cbiAgICBjYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKSB7XG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gKHRoaXMuZGF0YVNpemUgPiB0aGlzLm1heFJlc3VsdHMpID8gKE1hdGguY2VpbCh0aGlzLmRhdGFTaXplIC8gdGhpcy5tYXhSZXN1bHRzKSkgOiAodGhpcy5kYXRhU2l6ZSA8IDAgPyAwIDogMSk7XG4gICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIHBhZ2luZyBwYXJhbWV0ZXJzKi9cbiAgICBzZXREZWZhdWx0UGFnaW5nVmFsdWVzKGRhdGFTaXplLCBtYXhSZXN1bHRzLCBjdXJyZW50UGFnZSkge1xuICAgICAgICAvKklmIG5laXRoZXIgJ2RhdGFTaXplJyBub3IgJ21heFJlc3VsdHMnIGlzIHNldCwgdGhlbiBzZXQgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIHBhZ2luZyBwYXJhbWV0ZXJzLiovXG4gICAgICAgIGlmICghZGF0YVNpemUgJiYgIW1heFJlc3VsdHMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gMTtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gZGF0YVNpemU7XG4gICAgICAgICAgICB0aGlzLmRhdGFTaXplID0gZGF0YVNpemU7XG4gICAgICAgIH0gZWxzZSB7IC8qRWxzZSwgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVzIGFuZCByZWNhbGN1bGF0ZSBwYWdpbmcgcGFyYW1ldGVycy4qL1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gbWF4UmVzdWx0cyB8fCB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICB0aGlzLmRhdGFTaXplID0gaXNEZWZpbmVkKGRhdGFTaXplKSA/IGRhdGFTaXplIDogdGhpcy5kYXRhU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSBjdXJyZW50UGFnZSB8fCB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1heFJlc3VsdHNFbWl0dGVyLmVtaXQodGhpcy5tYXhSZXN1bHRzKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBkYXRhU2l6ZSBhbmQgbWFuaXB1bGF0ZSB0aGUgbmF2aWdhdG9yIGFjY29yZGluZ2x5LiovXG4gICAgY2hlY2tEYXRhU2l6ZShkYXRhU2l6ZSwgbnVtYmVyT2ZFbGVtZW50cz8sIHNpemU/KSB7XG4gICAgICAgIC8qSWYgdGhlIGRhdGFTaXplIGlzIC0xIG9yIEludGVnZXIuTUFYX1ZBTFVFKCB3aGljaCBpcyAyMTQ3NDgzNjQ3KSwgdGhlbiB0aGUgdG90YWwgbnVtYmVyIG9mIHJlY29yZHMgaXMgbm90IGtub3duLlxuICAgICAgICAgKiBIZW5jZSxcbiAgICAgICAgICogMS4gSGlkZSB0aGUgJ1RvdGFsIFJlY29yZCBDb3VudCcuXG4gICAgICAgICAqIDIuIERpc2FibGUgdGhlICdHb1RvTGFzdFBhZ2UnIGxpbmsgYXMgdGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSBsYXN0IHBhZ2UgaXMgbm90IGtub3duLiovXG4gICAgICAgIGlmIChkYXRhU2l6ZSA9PT0gLTEgfHwgZGF0YVNpemUgPT09IEFwcENvbnN0YW50cy5JTlRfTUFYX1ZBTFVFKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZzaG93cmVjb3JkY291bnQgPSB0aGlzLnNob3dyZWNvcmRjb3VudDtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTGFzdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUNvdW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd3JlY29yZGNvdW50ID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBJZiBudW1iZXIgb2YgcmVjb3JkcyBpbiBjdXJyZW50IHBhZ2UgaXMgbGVzcyB0aGFuIHRoZSBtYXggcmVjb3JkcyBzaXplLCB0aGlzIGlzIHRoZSBsYXN0IHBhZ2UuIFNvIGRpc2FibGUgbmV4dCBidXR0b24uXG4gICAgICAgICAgICBpZiAobnVtYmVyT2ZFbGVtZW50cyA8IHNpemUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVDb3VudCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93cmVjb3JkY291bnQgPSB0aGlzLnByZXZzaG93cmVjb3JkY291bnQgfHwgdGhpcy5zaG93cmVjb3JkY291bnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGRpc2FibGUgbmF2aWdhdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCBhbmQgdG90YWwgcGFnZXMuKi9cbiAgICBkaXNhYmxlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgY29uc3QgaXNDdXJyZW50UGFnZUZpcnN0ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IDEpLFxuICAgICAgICAgICAgaXNDdXJyZW50UGFnZUxhc3QgPSAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gdGhpcy5wYWdlQ291bnQpO1xuICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbj8ubmV4dCkge1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVGaXJzdCA9IHRoaXMuaXNEaXNhYmxlUHJldmlvdXMgPSBpc0N1cnJlbnRQYWdlRmlyc3Q7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0aGlzLmlzRGlzYWJsZUxhc3QgPSBpc0N1cnJlbnRQYWdlTGFzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdNUy0xODg2NzogSW4gY2FzZSBvZiBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLCBmb3IgcGFnZXIgdHlwZSBwYWdpbmF0aW9uIGRlcGVuZCBvbiBwcmV2IGFuZCBuZXh0IGZsYWdzIHdoaWNoIGFyZSBzZXQgYnkgZGV2ZWxvcGVyXG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUZpcnN0ID0gdGhpcy5pc0Rpc2FibGVQcmV2aW91cyA9ICF0aGlzLnBhZ2luYXRpb24ucHJldjtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTmV4dCA9IHRoaXMuaXNEaXNhYmxlTGFzdCA9ICF0aGlzLnBhZ2luYXRpb24ubmV4dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRGlzYWJsZUN1cnJlbnQgPSBpc0N1cnJlbnRQYWdlRmlyc3QgJiYgaXNDdXJyZW50UGFnZUxhc3Q7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgY2xpZW50IHNpZGUgcGFnaW5hdGlvbiwgd2hlbiBsb2FkIG1vcmUgcmVhY2hlcyBsYXN0IHBhZ2UgaGlkZSB0aGUgb24tZGVtYW5kIGdyaWQgZWxlXG4gICAgICAgIGlmICh0aGlzLmRhdGFzZXQgJiYgdGhpcy5kYXRhc2V0Lmxlbmd0aCAmJiB0aGlzLmlzRGlzYWJsZU5leHQgJiYgdGhpcy5wYXJlbnQub25EZW1hbmRMb2FkICYmIHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmNhbGxEYXRhR3JpZE1ldGhvZCgnaGlkZUxvYWRpbmdJbmRpY2F0b3InLCB0aGlzLmlzRGlzYWJsZU5leHQsIHRoaXMucGFyZW50LmluZlNjcm9sbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSB2YXJpYWJsZSBib3VuZCB0byB0aGUgZGF0YS1uYXZpZ2F0b3IgaGFzIHBhZ2luZy4qL1xuICAgIGlzRGF0YVNvdXJjZUhhc1BhZ2luZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBnaXZlcyBzdW1tYXJ5IG9mIHRoZSBjdXJyZW50IHBhZ2UgZGF0YSAoZXg6IEluIFVJIGl0IGlzIHNob3duIGFzICAxIHRvIDEwIG91dCBvZiA1MCByZWNvcmRzKVxuICAgIGdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0b3RhbFJlY29yZHMpIHtcbiAgICAgICAgdGhpcy5yb3dTdW1tYXJ5ID0gIChpc0RlZmluZWQoc3RhcnRJbmRleCkgJiYgaXNEZWZpbmVkKGVuZEluZGV4KSAmJiBpc0RlZmluZWQodG90YWxSZWNvcmRzKSkgPyB7XG4gICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgZW5kSW5kZXg6IGVuZEluZGV4LFxuICAgICAgICAgICAgdG90YWxSZWNvcmRzOiB0b3RhbFJlY29yZHNcbiAgICAgICAgfToge307XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSByZXN1bHQgZm9yIGNsaWVudCBzaWRlIHBhZ2luYXRpb25cbiAgICBzZXROb25QYWdlYWJsZURhdGEobmV3VmFsKSB7XG4gICAgICAgIGxldCBkYXRhU2l6ZSxcbiAgICAgICAgICAgIG1heFJlc3VsdHMsXG4gICAgICAgICAgICBjdXJyZW50UGFnZSxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg7XG4gICAgICAgIGRhdGFTaXplID0gaXNBcnJheShuZXdWYWwpID8gbmV3VmFsLmxlbmd0aCA6IChpc0VtcHR5KG5ld1ZhbCkgPyAwIDogMSk7XG4gICAgICAgIG1heFJlc3VsdHMgPSAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tYXhSZXN1bHRzKSB8fCBkYXRhU2l6ZTtcblxuICAgICAgICBpZiAodGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlKSB7IC8vIHdoZW4gZGVmYXVsdCBwYWdlIHNpemUgaXMgbm90IGdpdmVuIHRoZW4gdXNlIG1heFJlc3VsdHMgaW5zdGVhZCBvZiBvcHRpb25zLm1heFJlc3VsdHNcbiAgICAgICAgICAgIG1heFJlc3VsdHMgPSB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIHN0YXRpYyB2YXJpYWJsZSwga2VlcCB0aGUgY3VycmVudCBwYWdlLiBGb3Igb3RoZXIgdmFyaWFibGVzIHdpdGhvdXQgcGFnaW5hdGlvbiByZXNldCB0aGUgcGFnZSB0byAxXG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzI2M106IGdyaWRPcHRpb25zLmlzTmV4dFBhZ2VEYXRhIGZsYWcgaXMgZmFsc2Ugd2hlbiBkYXRhc2V0IGlzIGNoYW5nZWQgZnJvbSBzY3JpcHQsIHNvIHNldHRpbmcgY3VycmVudCBwYWdlIHRvIDFcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiAodGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSB8fCAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiAodGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpICYmIChnZXQodGhpcy5wYXJlbnQsICdncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkJykgPT09IHRoaXMucGFyZW50LmdyaWRPcHRpb25zLkFDVElPTlMuREFUQVNFVF9VUERBVEUgfHwgIWdldCh0aGlzLnBhcmVudCwgJ2dyaWRPcHRpb25zLmlzTmV4dFBhZ2VEYXRhJykpKSkpKSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBhZ2luZ1ZhbHVlcyhkYXRhU2l6ZSwgbWF4UmVzdWx0cywgY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLmRpc2FibGVOYXZpZ2F0aW9uKCk7XG5cbiAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIHRoaXMuZ2V0UGFnZURldGFpbHMoc3RhcnRJbmRleCArIDEsIE1hdGgubWluKHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMsIG5ld1ZhbD8ubGVuZ3RoKSwgbmV3VmFsPy5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNldFJlc3VsdChpc0FycmF5KG5ld1ZhbCkgPyBuZXdWYWwuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cykgOiBuZXdWYWwpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZXMgbmVlZGVkIGZvciBwYWdpbmF0aW9uKi9cbiAgICBwcml2YXRlIHNldFBhZ2luZ1ZhbHVlcyhuZXdWYWwpIHtcbiAgICAgICAgbGV0IGRhdGFTaXplLFxuICAgICAgICAgICAgbWF4UmVzdWx0cyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGRhdGFTb3VyY2U7XG4gICAgICAgIGxldCB2YXJpYWJsZU9wdGlvbnM6IGFueSA9IHt9O1xuICAgICAgICAvLyBTdG9yZSB0aGUgZGF0YSBpbiBfX2Z1bGxEYXRhLiBUaGlzIGlzIHVzZWQgZm9yIGNsaWVudCBzaWRlIHNlYXJjaGluZyB3aXR2YWggb3V0IG1vZGlmeWluZyB0aGUgYWN0dWFsIGRhdGFzZXQuXG4gICAgICAgIHRoaXMuX19mdWxsRGF0YSA9IG5ld1ZhbDtcbiAgICAgICAgLypDaGVjayBmb3Igc2FuaXR5Ki9cbiAgICAgICAgaWYgKHRoaXMuYmluZGRhdGFzZXQpIHtcbiAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB0aGlzLmRhdGFzb3VyY2UgfHwge307XG4gICAgICAgICAgICB2YXJpYWJsZU9wdGlvbnMgPSBkYXRhU291cmNlLl9vcHRpb25zIHx8IHt9O1xuICAgICAgICAgICAgLypDaGVjayBmb3IgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBkYXRhIHNldCovXG4gICAgICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhU291cmNlSGFzUGFnaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BBR0lOR19PUFRJT05TKSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgXCJmaWx0ZXJGaWVsZHNcIiBhbmQgXCJzb3J0T3B0aW9uc1wiIGhhdmUgYmVlbiBzZXQsIHRoZW4gc2V0IHRoZW0gc28gdGhhdCB0aGUgZmlsdGVycyBjYW4gYmUgcmV0YWluZWQgd2hpbGUgZmV0Y2hpbmcgZGF0YSB1cG9uIHBhZ2UgbmF2aWdhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGaWVsZHMgPSB2YXJpYWJsZU9wdGlvbnMuZmlsdGVyRmllbGRzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2ljYWxPcCA9IHZhcmlhYmxlT3B0aW9ucy5sb2dpY2FsT3AgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydE9wdGlvbnMgPSB2YXJpYWJsZU9wdGlvbnMub3JkZXJCeSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGlzQXJyYXkodGhpcy5wYWdpbmF0aW9uLnNvcnQpID8gZ2V0T3JkZXJCeUV4cHIodGhpcy5wYWdpbmF0aW9uLnNvcnQpIDogJycpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZSA9IHRoaXMucGFnaW5hdGlvbi50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICBtYXhSZXN1bHRzID0gdGhpcy5wYWdpbmF0aW9uLnNpemUgPSBOdW1iZXIodGhpcy5wYWdpbmF0aW9uLnNpemUpID8gdGhpcy5wYWdpbmF0aW9uLnNpemUgOiBnZXQodGhpcy5kYXRhc291cmNlLmRhdGFTZXQsIHRoaXMucGFnaW5hdGlvbi5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMgPSBOdW1iZXIodGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMpID8gdGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMgOiBnZXQodGhpcy5kYXRhc291cmNlLmRhdGFTZXQsIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucGFnaW5hdGlvbi5udW1iZXIpKSB7IC8vIG51bWJlciBpcyBwYWdlIG51bWJlciByZWNlaXZlZCBmcm9tIGJhY2tlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdpbmF0aW9uLm51bWJlciArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKiBTZW5kaW5nIHBhZ2VDb3VudCB1bmRlZmluZWQgdG8gY2FsY3VsYXRlIGl0IGFnYWluIGZvciBxdWVyeS4qL1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdpbmdWYWx1ZXMoZGF0YVNpemUsIG1heFJlc3VsdHMsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRGF0YVNpemUoZGF0YVNpemUsIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzLCB0aGlzLnBhZ2luYXRpb24uc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAoY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSwgc3RhcnRJbmRleCArIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNTdHJpbmcobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vblBhZ2VhYmxlRGF0YShuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0UGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb24gPT09ICdCYXNpYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRBcmlhRm9yQmFzaWNOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobmV3VmFsICYmICFpc1N0cmluZyhuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb25QYWdlYWJsZURhdGEobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgZmlyc3QgcGFnZSovXG4gICAgaXNGaXJzdFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gMSB8fCAhdGhpcy5kbi5jdXJyZW50UGFnZSk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IHBhZ2UqL1xuICAgIGlzTGFzdFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gdGhpcy5wYWdlQ291bnQpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGxhc3QgcGFnZSovXG4gICAgZ29Ub0xhc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0xhc3RQYWdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VDb3VudDtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGZpcnN0IHBhZ2UqL1xuICAgIGdvVG9GaXJzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRmlyc3RQYWdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUmVmcmVzaCkge1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgY3VycmVudCBwYWdlKi9cbiAgICBnb1RvUGFnZShldmVudD8sIGNhbGxiYWNrPykge1xuICAgICAgICB0aGlzLmZpcnN0Um93ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UuY29tcHV0ZU1vZGUodGhpcy5zdGF0ZWhhbmRsZXIpLFxuICAgICAgICAgICAgYWxsb3dwYWdlc2l6ZWNoYW5nZSA9IHRoaXMucGFyZW50LmFsbG93cGFnZXNpemVjaGFuZ2U7XG4gICAgICAgIGlmIChtb2RlICYmIG1vZGUudG9Mb3dlckNhc2UoKSAhPT0gJ25vbmUnICYmICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnIHx8IHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS1saXN0JykpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Ll9zZWxlY3RlZEl0ZW1zRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNGaXJzdFBhZ2UoKSAmJiAhYWxsb3dwYWdlc2l6ZWNoYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsICdwYWdpbmF0aW9uJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcy5pbmRleE9mKHRoaXMucGFyZW50Lm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZTogeyBwYWdpbmF0aW9uOiBudW1iZXI7IHBhZ2VzaXplPzogbnVtYmVyIH0gPSB7IHBhZ2luYXRpb246IHRoaXMuZG4uY3VycmVudFBhZ2UgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93cGFnZXNpemVjaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhZ2VzaXplID0gdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHN0YXRlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS1saXN0JyB8fCB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy5wYXJlbnQubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuY3VycmVudHBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQubmF0aXZlRWxlbWVudD8uc2V0QXR0cmlidXRlKCdjdXJyZW50cGFnZScsIHRoaXMuZG4uY3VycmVudFBhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNhbGwgZ2V0UGFnZURhdGEgYWZ0ZXIgY2hlY2tpbmcgc3RhdGUgY29uZmlnIHNvIHRoYXQgU3RhdGljIFZhcmlhYmxlcyBjYW4gdXNlIGl0XG4gICAgICAgIHRoaXMuZ2V0UGFnZURhdGEoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlIGRhdGEgb2YgdGhlIHBhZ2UgaGFzIGJlZW4gZmV0Y2hlZC4qL1xuICAgIG9uUGFnZURhdGFSZWFkeShldmVudCwgZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuICAgICAgICB0aGlzLmludm9rZVNldFJlY29yZChldmVudCwgZGF0YSk7XG4gICAgICAgIHRyaWdnZXJGbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBnZXQgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSovXG4gICAgZ2V0UGFnZURhdGEoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBkYXRhLFxuICAgICAgICAgICAgc3RhcnRJbmRleDtcblxuICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJbiB0YWJsZSBjb21wb25lbnQsIGluIGNhc2Ugb2Ygb24gZGVtYW5kIGFuZCBzY3JvbGwgcGFnaW5hdGlvblxuICAgICAgICAgICAgICogV2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBkYXRhIGl0ZW0gd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgICogRmV0Y2ggdGhlIGl0ZW1zIG9mIHRoZSBwYWdlIHdoZXJlIHRoZSBjaGFuZ2UgaXMgbWFkZVxuICAgICAgICAgICAgICogKi9cbiAgICAgICAgICAgIGxldCBwYWdlSW5kZXggPSB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0Tm90SW5DdXJyZW50UGFnZSgpICYmIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLmxhc3RBY3Rpb25QZXJmb3JtZWQgIT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgICAgICAgcGFnZUluZGV4ID0gdGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkxJU1RfUkVDT1JEUywge1xuICAgICAgICAgICAgICAgICdwYWdlJzogcGFnZUluZGV4LFxuICAgICAgICAgICAgICAgICdzaXplJzogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgICdmaWx0ZXJGaWVsZHMnOiB0aGlzLmZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgICAgICAnb3JkZXJCeSc6IHRoaXMuc29ydE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgJ2xvZ2ljYWxPcCc6IHRoaXMubG9naWNhbE9wLFxuICAgICAgICAgICAgICAgICdtYXRjaE1vZGUnOiAnYW55d2hlcmVpZ25vcmVjYXNlJ1xuICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VEYXRhUmVhZHkoZXZlbnQsIHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxICwgc3RhcnRJbmRleCArIHRoaXMucGFnaW5hdGlvbj8ubnVtYmVyT2ZFbGVtZW50cywgdGhpcy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZXJyb3IgaXMgdW5kZWZpbmVkLCBkbyBub3Qgc2hvdyBhbnkgbWVzc2FnZSBhcyB0aGlzIG1heSBiZSBkaXNjYXJkZWQgcmVxdWVzdFxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gd21Ub2FzdGVyLnNob3coJ2Vycm9yJywgJ0VSUk9SJywgJ1VuYWJsZSB0byBnZXQgZGF0YSBvZiBwYWdlIC0nICsgdGhpcy5kbi5jdXJyZW50UGFnZSArICc6JyArIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEgPSBpc0FycmF5KHRoaXMuX19mdWxsRGF0YSkgPyB0aGlzLl9fZnVsbERhdGEuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cykgOiB0aGlzLl9fZnVsbERhdGE7XG4gICAgICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxICwgTWF0aC5taW4oc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cywgdGhpcy5fX2Z1bGxEYXRhPy5sZW5ndGgpLCB0aGlzLl9fZnVsbERhdGE/Lmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLnNldFJlc3VsdChkYXRhKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlRGF0YVJlYWR5KGV2ZW50LCBkYXRhLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBlZGl0IGFjdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIHByZXZpb3VzIHBhZ2UgZGF0YSBvZiB0aGUgdGFibGVcbiAgICAqL1xuICAgIGlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSB7XG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IHRoaXMuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnICYmIHBhZ2VJbmRleCA9PT0gdGhpcy5wYXJlbnQuY3VycmVudFBhZ2UgJiZcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgJiYgdGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZSA8IHBhZ2VJbmRleDtcbiAgICB9XG5cbiAgICBpbnZva2VTZXRSZWNvcmQoZXZlbnQsIGRhdGEpIHtcbiAgICAgICAgLy8gVHJpZ2dlciB0aGUgZXZlbnQgaGFuZGxlciBpZiBleGlzdHMuXG4gICAgICAgIGNvbnN0IHBhZ2VJbmZvID0ge1xuICAgICAgICAgICAgY3VycmVudFBhZ2U6IHRoaXMuZG4uY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICB0b3RhbEVsZW1lbnRzOiB0aGlzLmRhdGFTaXplLFxuICAgICAgICAgICAgdG90YWxQYWdlczogdGhpcy5wYWdlQ291bnRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5pbnZva2VFdmVudENhbGxiYWNrKCdzZXRyZWNvcmQnLCB7JGV2ZW50OiBldmVudCwgJGRhdGE6IGRhdGEsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZSwgcGFnZUluZm8sIGRhdGF9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2V0cmVjb3JkJywgeyRldmVudDogZXZlbnQsICRkYXRhOiBkYXRhLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2UsIHBhZ2VJbmZvLCBkYXRhfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBwYWdlIGlucHV0LlxuICAgICBJbiBjYXNlIG9mIGludmFsaWQgaW5wdXQsIG5hdmlnYXRlIHRvIHRoZSBhcHByb3ByaWF0ZSBwYWdlOyBhbHNvIHJldHVybiBmYWxzZS5cbiAgICAgSW4gY2FzZSBvZiB2YWxpZCBpbnB1dCwgcmV0dXJuIHRydWUuKi9cbiAgICB2YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50LCBjYWxsYmFjaz8pIHtcbiAgICAgICAgLypJZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gdGhlIGxhc3QgcGFnZSBudW1iZXIgb3IgaW52YWxpZCB2YWx1ZSwgdGhlbiBoaWdobGlnaHRpbmcgdGhlIGZpZWxkIHNob3dpbmcgZXJyb3IuKi9cbiAgICAgICAgaWYgKGV2ZW50ICYmIChpc05hTih0aGlzLmRuLmN1cnJlbnRQYWdlKSB8fCB0aGlzLmRuLmN1cnJlbnRQYWdlIDw9IDAgfHwgKHRoaXMucGFnZUNvdW50ICYmICh0aGlzLmRuLmN1cnJlbnRQYWdlID4gdGhpcy5wYWdlQ291bnQgfHwgaXNOdWxsKHRoaXMuZG4uY3VycmVudFBhZ2UpKSkpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kbi5jdXJyZW50UGFnZSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZG4uY3VycmVudFBhZ2UgPiB0aGlzLnBhZ2VDb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VDb3VudDtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXRFbGUgPSAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnYScpO1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0tleUUnKSB7XG4gICAgICAgICAgICB0YXJnZXRFbGUuYWRkQ2xhc3MoJ25nLWludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRFbGUucmVtb3ZlQ2xhc3MoJ25nLWludmFsaWQnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcGFnZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgICAgIHRoaXMuX2RlYm91bmNlZFBhZ2VDaGFuZ2VkKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSByZXNwZWN0aXZlIHBhZ2VzLiovXG4gICAgbmF2aWdhdGVQYWdlKGluZGV4LCBldmVudCwgaXNSZWZyZXNoPywgY2FsbGJhY2s/KSB7XG4gICAgICAgIC8vIHdoZW4gbmF2aWdhdGVkIHRvIG5leHQgcGFnZSB0dXJuIG9uIHRoZSBpc0RhdGFMb2FkaW5nIGZsYWcgdG8gc2hvdyB0aGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnBhcmVudC5pc0RhdGFMb2FkaW5nKSAmJiAhdGhpcy5pc0Rpc2FibGVOZXh0KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgaW5maW5pdGUgc2Nyb2xsIGNhbGxpbmcgdGhlIHNob3dMb2FkaW5nSW5kaWNhdG9yIG1ldGhvZCB0byB1cGRhdGUgdGhlIGxvYWRpbmcgbWVzc2FnZSBpbW1lZGlhdGVseSB3aGVuIG5hdmlnYXRlZCB0byBuZXh0IHBhZ2VcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudC5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC52YXJpYWJsZUluZmxpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jYWxsRGF0YUdyaWRNZXRob2QoJ3Nob3dMb2FkaW5nSW5kaWNhdG9yJywgdGhpcy5wYXJlbnQubG9hZGluZ2RhdGFtc2csIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlc2V0IHRoZSBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgdG8gXCJzY3JvbGxcIiBhbmQgaXNEYXRhc2V0VXBkYXRlZCB0byBmYWxzZVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuQUNUSU9OUy5ERUZBVUxUKTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLnNldElzRGF0YXNldFVwZGF0ZWQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncGFnaW5hdGlvbmNoYW5nZScsIHskZXZlbnQ6IHVuZGVmaW5lZCwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlfSk7XG5cbiAgICAgICAgLy8gQ29udmVydCB0aGUgY3VycmVudCBwYWdlIHRvIGEgdmFsaWQgcGFnZSBudW1iZXIuXG4gICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSArdGhpcy5kbi5jdXJyZW50UGFnZTtcblxuICAgICAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICAgICAgICBjYXNlICdmaXJzdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvRmlyc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdwcmV2JzpcbiAgICAgICAgICAgICAgICAvKlJldHVybiBpZiBhbHJlYWR5IG9uIHRoZSBmaXJzdCBwYWdlLiovXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24/Lm5leHQgJiYgKHRoaXMuaXNGaXJzdFBhZ2UoKSB8fCAhdGhpcy52YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50LCBjYWxsYmFjaykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFnaW5hdGlvbj8ubmV4dCkgeyAvLyBXTVMtMTg4Njc6IEZvciBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLCBza2lwcGluZyB0aGUgcmVndWxhciBmbG93IGFuZCBlbmFibGluZyBpc05leHQgZmxhZyBpbiBwYWdpbmF0aW9uIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzTmV4dCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc1ByZXYgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKkRlY3JlbWVudCB0aGUgY3VycmVudCBwYWdlIGJ5IDEuKi9cbiAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlIC09IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgICAgICAgICAvKlJldHVybiBpZiBhbHJlYWR5IG9uIHRoZSBsYXN0IHBhZ2UuKi9cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbj8ubmV4dCAmJiAodGhpcy5pc0xhc3RQYWdlKCkgfHwgIXRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShldmVudCwgY2FsbGJhY2spKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2luYXRpb24/Lm5leHQpIHsgLy8gV01TLTE4ODY3OiBGb3Igc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgc2tpcHBpbmcgdGhlIHJlZ3VsYXIgZmxvdyBhbmQgZW5hYmxpbmcgaXNQcmV2IGZsYWcgaW4gcGFnaW5hdGlvbiBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc05leHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc1ByZXYgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLypJbmNyZW1lbnQgdGhlIGN1cnJlbnQgcGFnZSBieSAxLiovXG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSArPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGFzdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTGFzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvKk5hdmlnYXRlIHRvIHRoZSBjdXJyZW50IHBhZ2UuKi9cbiAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHNldEJpbmREYXRhU2V0KGJpbmRkYXRhc2V0LCBwYXJlbnQsIGRhdGFTb3VyY2UsIGRhdGFzZXQ/LCBiaW5kZGF0YXNvdXJjZT8sIGRhdGFzZXRCb3VuZEV4cHI/LCBzdGF0ZWhhbmRsZXI/KSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gYmluZGRhdGFzZXQuc3BsaXQoJy4nKTtcbiAgICAgICAgbGV0IGJpbmRQYWdpbmdPcHRpb25zO1xuICAgICAgICB0aGlzLnN0YXRlaGFuZGxlciA9IHN0YXRlaGFuZGxlcjtcbiAgICAgICAgaWYgKHBhcnRzWzBdID09PSAnVmFyaWFibGVzJyB8fCBwYXJ0c1swXSA9PT0gJ1dpZGdldHMnKSB7XG4gICAgICAgICAgICBiaW5kUGFnaW5nT3B0aW9ucyA9IGAke3BhcnRzWzBdfS4ke3BhcnRzWzFdfS5wYWdpbmF0aW9uYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1ZhcmlhYmxlTGV2ZWxCaW5kID0gYmluZGRhdGFzZXQ/LnN0YXJ0c1dpdGgoJ1ByZWZhYi5WYXJpYWJsZXMuJyk7XG4gICAgICAgIGlmICghYmluZGRhdGFzb3VyY2UgJiYgZGF0YXNldCAmJiAhZGF0YXNldEJvdW5kRXhwciAmJiAhaXNWYXJpYWJsZUxldmVsQmluZCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhc2V0ID0gZGF0YXNldDtcbiAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmluZGRhdGFzZXQgPSBiaW5kZGF0YXNldDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyB3YXRjaGluZyBmb3IgZGF0YXNldCBjaGFuZ2VzIGV2ZW4gd2hlbiBkYXRhc2V0IGlzIGJvdW5kIHRvIFwiaXRlbS5cIiAoaS5lLiBieSBjaGVja2luZyBmb3IgZGF0YXNldEJvdW5kRXhwcilcbiAgICAgICAgICAgIC8vIGl0ZW0gY29udGV4dCBpcyBwYXNzZWQgYXMgZGF0YVNvdXJjZSBoZXJlXG4gICAgICAgICAgICAvLyBbVG9kby1DU1BdOiBjaGVjayBpZiBzYW1lIGV4cHIgZm4gaXMgZ2VuZXJhdGVkIGJ5IHBhcmVudCB3aWRnZXQgKGxpc3QsIHRhYmxlKVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGJpbmRkYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXRCb3VuZEV4cHIgPyBkYXRhU291cmNlIDoge30sXG4gICAgICAgICAgICAgICAgICAgIG52ID0+ICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSBudjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJvdW5jZWRBcHBseURhdGFzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXTVMtMTkyODU6IFNldHRpbmcgZGF0YXNldCBvbiBwcm94eSBvbmx5IHRvIGhhbmRsZSBwcm9wZXJ0eWNoYW5nZSBoYW5kbGVyIGNhbGwgZm9yIHVuZGVmaW5lZCBjYXNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBudjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGEgd2F0Y2ggb24gcGFnaW5nIG9wdGlvbnMuIENhbGwgZGF0YXNldCBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlciBldmVuIGlmIHBhZ2luZyBvcHRpb25zIGNoYW5nZXMgdG8gcmVmbGVjdCBwYWdpbmF0aW9uIHN0YXRlXG4gICAgICAgICAgICBpZiAoIWJpbmRQYWdpbmdPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBlaXRoZXIgZ2VuZXJhdGUgd2F0Y2ggZXhwciBmbiBvciByZWdpc3RlciBhbiBldmVudCBmcm9tIHRoZSBkYXRhc291cmNlIGl0c2VsZlxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGJpbmRQYWdpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLl9kZWJvdW5jZWRBcHBseURhdGFzZXQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhcHBseSBkYXRhc291cmNlIG9ubHkgd2hlbiBkYXRhc2V0IGlzIG5vdCBib3VuZCB0byBcIml0ZW0uRklFTERcIlxuICAgICAgICBpZiAoIWRhdGFzZXRCb3VuZEV4cHIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGRhdGFzb3VyY2Ugb2YgcGFnaW5hdGlvbiBmcm9tIHRoZSBwYXJlbnQgd2lkZ2V0XG4gICAgc2V0RGF0YVNvdXJjZShkYXRhU291cmNlKSB7XG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnYsIG92KSB7XG4gICAgICAgIGxldCBwYWdlU2l6ZSwgcHJldlBhZ2VTaXplO1xuICAgICAgICBpZiAoa2V5ID09PSAnZGF0YXNldCcpIHtcbiAgICAgICAgICAgIGxldCBkYXRhO1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50ICYmIHRoaXMucGFyZW50Lm9uRGF0YU5hdmlnYXRvckRhdGFTZXRDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5wYXJlbnQub25EYXRhTmF2aWdhdG9yRGF0YVNldENoYW5nZShudik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBudjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNldCBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgdG8gXCJkYXRhc2V0X3VwZGF0ZVwiIHdoZW5ldmVyIGRhdGFzZXQgaXMgY2hhbmdlZCBpbiB0YWJsZSBjb21wb25lbnRcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuX3RyaWdnZXJlZEJ5VXNlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGE/Lmxlbmd0aCkgeyAvLyBjYWxjdWxhdGUgUGFnZXNpemUgb3B0aW9ucyBiYXNlZCBvbiBhY3R1YWwgcGFnZSBzaXplXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhU291cmNlSGFzUGFnaW5nKCkpIHsgLy8gZm9yIExpdmUgdmFyaWFibGVzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlU2l6ZSA9IGdldChkYXRhLCAncGFnaW5hdGlvbi5zaXplJykgfHwgZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ3BhZ2luYXRpb24uc2l6ZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxFbGVtZW50cyA9IGdldChkYXRhLCAncGFnaW5hdGlvbi50b3RhbEVsZW1lbnRzJykgfHwgZ2V0KHRoaXMuZGF0YXNvdXJjZSwgJ3BhZ2luYXRpb24udG90YWxFbGVtZW50cycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkZ2V0U3RhdGUgPSB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMucGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3R1YWxQYWdlU2l6ZSA9IHdpZGdldFN0YXRlPy5hY3R1YWxwYWdlc2l6ZSB8fCBjdXJyZW50UGFnZVNpemU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0dWFsUGFnZVNpemUgPSBOdW1iZXIodGhpcy5hY3R1YWxQYWdlU2l6ZSkgPyB0aGlzLmFjdHVhbFBhZ2VTaXplIDogZ2V0KHRoaXMuZGF0YXNvdXJjZS5kYXRhU2V0LCB0aGlzLmFjdHVhbFBhZ2VTaXplKVxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSBbLi4udGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zXTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHJhbmdlKHRoaXMuYWN0dWFsUGFnZVNpemUsICBNYXRoLm1heCh0aGlzLmFjdHVhbFBhZ2VTaXplICsgMSwgdGhpcy5hY3R1YWxQYWdlU2l6ZSArIHRvdGFsRWxlbWVudHMpLCB0aGlzLmFjdHVhbFBhZ2VTaXplKTsgLy8gaGVyZSBkYXRhIGhhcyBvbmx5IHRoYXQgcGFnZSBkYXRhIGFuZCBwYWdlc2l6ZSBoYXMgdG90YWxOb29mIEVsZW1lbnRzXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpZGdldFN0YXRlPy5zZWxlY3RlZEl0ZW0gJiYgd2lkZ2V0U3RhdGUuYWN0dWFscGFnZXNpemUgIT09IHdpZGdldFN0YXRlLnBhZ2VzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucHJldlBhZ2VTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2UGFnZVNpemUgPSB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IGRhdGE/Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRJdGVtcyA9IHRoaXMuaGFuZGxlU3RhdGVQYXJhbXNmb3JOZXdQYWdlU2l6ZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIHRoaXMucHJldlBhZ2VTaXplLCBkYXRhPy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRJdGVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZXNpemU6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFscGFnZXNpemU6IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW06IHVwZGF0ZWRJdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2UGFnZVNpemUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZSA9IHRoaXMucGFyZW50LmdldEFjdHVhbFBhZ2VTaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IFsuLi50aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnNdO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gcmFuZ2UocGFnZVNpemUsIGRhdGEubGVuZ3RoICsgcGFnZVNpemUsIHBhZ2VTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIGRhdGFzZXQgaXMgbm90IGluIGN1cnJlbnQgcGFnZSwgYnV0IGluIHByZXZpb3VzIG9uZXMgZGlyZWN0bHkgc2V0IHRoZSByZXN1bHQgd2l0aG91dCBzZXR0aW5nIHBhZ2UgdmFsdWVzXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlc3VsdChkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmdWYWx1ZXMoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChudiA9PT0gJ0FkdmFuY2VkJykgeyAvLyBTdXBwb3J0IGZvciBvbGRlciBwcm9qZWN0cyB3aGVyZSBuYXZpZ2F0aW9uIHR5cGUgd2FzIGFkdmFuY2VkIGluc3RlYWQgb2YgY2xhc2ljXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gJ0NsYXNzaWMnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVOYXZTaXplKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmNvbnRyb2xzID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbnNpemUnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5hdlNpemUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYXZpZ2F0aW9uYWxpZ24nKSB7XG4gICAgICAgICAgICBzd2l0Y2hDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGB0ZXh0LSR7bnZ9YCwgYHRleHQtJHtvdn1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdtYXhSZXN1bHRzJykge1xuICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmdWYWx1ZXModGhpcy5kYXRhc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG4gICAgfVxuICAgLy8gY2hhbmdlIHRoZSBzZWxlY3RlZEl0ZW1zIHBhZ2UgbnVtYmVyIGFuZCBpbmRleCBpbiB0aGUgc3RhdGVwYXJhbXMgd2hlbiBwYWdlc2l6ZSBpcyBjaGFuZ2VkXG4gICAgaGFuZGxlU3RhdGVQYXJhbXNmb3JOZXdQYWdlU2l6ZShcbiAgICAgICAgc2VsZWN0ZWRJdGVtOiB7IHBhZ2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W10sXG4gICAgICAgIG9sZFBhZ2VTaXplOiBudW1iZXIsXG4gICAgICAgIG5ld1BhZ2VTaXplOiBudW1iZXJcbiAgICApOiB7IHBhZ2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W10ge1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtLm1hcCgoeyBwYWdlLCBpbmRleCB9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhYnNvbHV0ZUluZGV4ID0gKHBhZ2UgLSAxKSAqIG9sZFBhZ2VTaXplICsgaW5kZXg7XG4gICAgICAgICAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5mbG9vcihhYnNvbHV0ZUluZGV4IC8gbmV3UGFnZVNpemUpICsgMTsgLy8gYmFjayB0byAxLWJhc2VkXG4gICAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IGFic29sdXRlSW5kZXggJSBuZXdQYWdlU2l6ZTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBwYWdlOiBuZXdQYWdlLFxuICAgICAgICAgICAgICAgIGluZGV4OiBuZXdJbmRleFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Ecm9wZG93bktleWRvd24oZXZlbnQsIGluZGV4KSB7XG4gICAgICAgIGNvbnN0ICRpdGVtcyA9ICQoJ3VsI2Ryb3Bkb3duLWJhc2ljIGEuZHJvcGRvd24taXRlbScpO1xuICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCAtIDE7XG4gICAgICAgIGxldCBzZWxlY3RlZE9wdGlvbjtcblxuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiBldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBTaGlmdCtUYWIgYXMgQXJyb3dVcFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IChpbmRleCAtIDEpIDwgMCA/IG1heEluZGV4IDogaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IFRhYiBvciBBcnJvd0Rvd24gYXMgQXJyb3dEb3duXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gKGluZGV4ICsgMSkgPiBtYXhJbmRleCA/IDAgOiBpbmRleCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IChpbmRleCAtIDEpIDwgMCA/IG1heEluZGV4IDogaW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbiA9IHRoaXMucGFnZVNpemVPcHRpb25zW3RoaXMuZm9jdXNlZEluZGV4XTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUGFnZVNpemVDaGFuZ2UoZXZlbnQsIHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTW92ZSBmb2N1cyBhZnRlciBpbmRleCBpcyB1cGRhdGVkXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJGl0ZW1zLmVxKHRoaXMuZm9jdXNlZEluZGV4KT8uZm9jdXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBjbG9zZURyb3Bkb3duKCkge1xuICAgICAgICAvLyBDbG9zZSBkcm9wZG93blxuICAgICAgICB0aGlzLmJzRHJvcGRvd24uaGlkZSgpO1xuICAgICAgICBjb25zdCAkdG9nZ2xlQnV0dG9uID0gJCgnYnV0dG9uW2FyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiXScpO1xuICAgICAgICAkdG9nZ2xlQnV0dG9uLmZvY3VzKCk7IC8vIFJldHVybiBmb2N1cyB0byBidXR0b25cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiBnZXRzIGNhbGxlZCBvbiBkcm9wZG93biBvcGVuICYgY2xvc2VcbiAgICBvbk9wZW5DaGFuZ2UoaXNPcGVuKSB7XG4gICAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gMDtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIG1hbnVhbGx5IGZvY3VzIHRoZSBkcm9wZG93biBhcyBkcm9wZG93biBoYXMgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgY29uc3QgJGl0ZW1zID0gJCgndWwjZHJvcGRvd24tYmFzaWMgYS5kcm9wZG93bi1pdGVtJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgJGZpcnN0SXRlbSA9ICRpdGVtcy5lcSh0aGlzLmZvY3VzZWRJbmRleCk7XG4gICAgICAgICAgICAgICAgJGZpcnN0SXRlbT8uZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBuZXdQYWdlU2l6ZSkge1xuICAgICAgICBjb25zdCB3aWRnZXRTdGF0ZSA9IHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQpO1xuICAgICAgICAgICAgbGV0IHVwZGF0ZWRJdGVtcztcbiAgICAgICAgaWYgKHdpZGdldFN0YXRlPy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIHVwZGF0ZWRJdGVtcyA9IHRoaXMuaGFuZGxlU3RhdGVQYXJhbXNmb3JOZXdQYWdlU2l6ZSh3aWRnZXRTdGF0ZS5zZWxlY3RlZEl0ZW0sIHRoaXMubWF4UmVzdWx0cywgK25ld1BhZ2VTaXplKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdHVhbFBhZ2VTaXplID0gdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIHRoaXMubWF4UmVzdWx0cyA9ICtuZXdQYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5tYXhSZXN1bHRzRW1pdHRlci5lbWl0KHRoaXMubWF4UmVzdWx0cyk7XG4gICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpICYmIHRoaXMuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLm1heFJlc3VsdHMgPSB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZWRJdGVtcykge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IDEsXG4gICAgICAgICAgICAgICAgcGFnZXNpemU6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICBhY3R1YWxwYWdlc2l6ZTogdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiB1cGRhdGVkSXRlbXNcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMucGFyZW50LCB7XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogMSxcbiAgICAgICAgICAgICAgICBwYWdlc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgIGFjdHVhbHBhZ2VzaXplOiB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IHRoaXMubWF4UmVzdWx0c1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdmlnYXRlUGFnZSgnZmlyc3QnLCAkZXZlbnQsIHRydWUpO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZVBhZ2luZ1ZhbHVlcygpO1xuICAgICAgICBpZih0aGlzLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgncG9wb3Zlci1jb250YWluZXIsIC5wb3BvdmVyJykpe1xuICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5ic0Ryb3Bkb3duLmhpZGUoKVxuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkVsZW0gPSAgdGhpcy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBwYWdpbmF0aW9uRWxlbS5vbmNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJcbkBpZiAobmF2Y29udHJvbHMgPT09ICdDbGFzc2ljJykge1xuPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBhZHZhbmNlZCB7e25hdmlnYXRpb25DbGFzc319XCI+XG4gICAgQGlmIChhbGxvd3BhZ2VzaXplY2hhbmdlICYmICBwYWdlU2l6ZU9wdGlvbnM/LlswXTxyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGxpIGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2VcIj5cbiAgICAgICAgICA8bGFiZWwgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRVwiIGNsYXNzPVwiYXBwLWxhYmVsXCI+e3thcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0V9fSA6PC9sYWJlbD5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIGRyb3Bkb3duICBjb250YWluZXI9XCJib2R5XCIgKGlzT3BlbkNoYW5nZSk9XCJvbk9wZW5DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidXR0b24tYmFzaWNcIiBkcm9wZG93blRvZ2dsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYXBwLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bWF4UmVzdWx0c319IDxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPHVsIGlkPVwiZHJvcGRvd24tYmFzaWNcIiAqZHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudSBwYWdlc2l6ZS1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJidXR0b24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHBhZ2VTaXplT3B0aW9uczsgdHJhY2sgb3B0aW9uOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibWVudWl0ZW1cIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBvcHRpb24gPT0gbWF4UmVzdWx0cyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudCwgb3B0aW9uKVwiIChrZXlkb3duKT1cIm9uRHJvcGRvd25LZXlkb3duKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpID09PSBmb2N1c2VkSW5kZXggPyAwIDogLTFcIj57e29wdGlvbn19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgQGlmIChyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGxpIGNsYXNzPVwiaXRlbS1yYW5nZVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+b2Y8L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkudG90YWxSZWNvcmRzfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgfVxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZUZpcnN0fVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0ZJUlNUXCIgbmFtZT1cImZpcnN0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZUZpcnN0XCJcbiAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnZmlyc3QnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWZpcnN0LXBhZ2VcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gZmlyc3QgcGFnZSB7eyBpc0Rpc2FibGVGaXJzdCA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVQcmV2aW91c31cIj5cbiAgICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9QUkVWSU9VU1wiIG5hbWU9XCJwcmV2XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVQcmV2aW91c1wiXG4gICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCdwcmV2JywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLWxlZnRcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gcHJldmlvdXMgcGFnZSB7eyBpc0Rpc2FibGVQcmV2aW91cyA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIGNsYXNzPVwicGFnZWNvdW50IGRpc2FibGVkXCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgYXJpYS1sYWJlbD1cIkNoYW5nZSBQYWdlIE51bWJlclwiPlxuICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiZG4uY3VycmVudFBhZ2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidTaG93aW5nIFBhZ2UgJyArIGRuLmN1cnJlbnRQYWdlICsgJyBvZiAnICsgcGFnZUNvdW50XCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIiAoY2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIvPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBjbGFzcz1cImRpc2FibGVkXCI+XG4gICAgICAgIDxhIFtoaWRkZW5dPVwiaXNEaXNhYmxlQ291bnRcIj4gLyB7e3BhZ2VDb3VudH19PC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlTmV4dH1cIj5cbiAgICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9ORVhUXCIgbmFtZT1cIm5leHRcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlTmV4dFwiXG4gICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tcmlnaHRcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gbmV4dCBwYWdlIHt7IGlzRGlzYWJsZU5leHQgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlTGFzdH1cIj5cbiAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfTEFTVFwiIG5hbWU9XCJsYXN0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZUxhc3RcIlxuICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCdsYXN0JywgJGV2ZW50KVwiPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWxhc3QtcGFnZVwiPjwvaT48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIGxhc3QgcGFnZSB7eyBpc0Rpc2FibGVMYXN0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmIChzaG93cmVjb3JkY291bnQpIHtcbiAgICAgIDxsaSBjbGFzcz1cInRvdGFsY291bnQgZGlzYWJsZWRcIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIj57e2FwcExvY2FsZS5MQUJFTF9UT1RBTF9SRUNPUkRTfX06IHt7ZGF0YVNpemV9fTwvYT5cbiAgICAgIDwvbGk+XG4gICAgfVxuPC91bD5cbn1cbkBpZiAobmF2Y29udHJvbHMgPT09ICdQYWdlcicpIHtcbiAgPHVsIGNsYXNzPVwicGFnZXIge3tuYXZpZ2F0aW9uQ2xhc3N9fVwiPlxuICAgICAgICBAaWYgKGFsbG93cGFnZXNpemVjaGFuZ2UgJiYgIHBhZ2VTaXplT3B0aW9ucz8uWzBdPHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtcy1wZXItcGFnZVwiPlxuICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFXCIgY2xhc3M9XCJhcHAtbGFiZWxcIj57e2FwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRX19IDo8L2xhYmVsPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZHJvcGRvd24gY29udGFpbmVyPVwiYm9keVwiIChpc09wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnV0dG9uLWJhc2ljXCIgZHJvcGRvd25Ub2dnbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFwcC1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICB7e21heFJlc3VsdHN9fSA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDx1bCBpZD1cImRyb3Bkb3duLWJhc2ljXCIgKmRyb3Bkb3duTWVudSBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcGFnZXNpemUtb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiYnV0dG9uLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBwYWdlU2l6ZU9wdGlvbnM7IHRyYWNrIG9wdGlvbjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibWVudWl0ZW1cIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBvcHRpb24gPT0gbWF4UmVzdWx0cyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICBAaWYgKHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtLXJhbmdlXCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS5zdGFydEluZGV4fX0gLSB7e3Jvd1N1bW1hcnkuZW5kSW5kZXh9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5vZjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkudG90YWxSZWNvcmRzfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgfVxuICAgIH1cbkBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgY2xhc3M9XCJwcmV2aW91c1wiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZVByZXZpb3VzfVwiPlxuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCdwcmV2JywgJGV2ZW50KVwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlUHJldmlvdXNcIj5cbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLWxlZnRcIj48L2k+PC9zcGFuPlxuICAgICAgICB7e2FwcExvY2FsZS5MQUJFTF9QUkVWSU9VU319XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnt7IGlzRGlzYWJsZVByZXZpb3VzID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgICA8bGkgY2xhc3M9XCJuZXh0XCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlTmV4dH1cIj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudClcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZU5leHRcIj5cbiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLXJpZ2h0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAge3thcHBMb2NhbGUuTEFCRUxfTkVYVH19XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnt7IGlzRGlzYWJsZU5leHQgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICA8L2xpPlxuICB9XG4gIDwvdWw+XG59XG5cbkBpZiAobmF2Y29udHJvbHMgPT09ICdCYXNpYycpIHtcbiAgICBAaWYgKGFsbG93cGFnZXNpemVjaGFuZ2UgJiYgIHBhZ2VTaXplT3B0aW9ucz8uWzBdPHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLXBlci1wYWdlXCI+XG4gICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFXCIgY2xhc3M9XCJhcHAtbGFiZWxcIj57e2FwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRSB9fSA6PC9sYWJlbD5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZHJvcGRvd24gY29udGFpbmVyPVwiYm9keVwiICAoaXNPcGVuQ2hhbmdlKT1cIm9uT3BlbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnV0dG9uLWJhc2ljXCIgZHJvcGRvd25Ub2dnbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFwcC1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAge3ttYXhSZXN1bHRzfX0gPHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPHVsIGlkPVwiZHJvcGRvd24tYmFzaWNcIiAqZHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudSBwYWdlc2l6ZS1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImJ1dHRvbi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBwYWdlU2l6ZU9wdGlvbnM7IHRyYWNrIG9wdGlvbjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJtZW51aXRlbVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IG9wdGlvbiA9PSBtYXhSZXN1bHRzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIChjbGljayk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudCwgb3B0aW9uKVwiIChrZXlkb3duKT1cIm9uRHJvcGRvd25LZXlkb3duKCRldmVudCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImkgPT09IGZvY3VzZWRJbmRleCA/IDAgOiAtMVwiPnt7b3B0aW9ufX08L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAocm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtLXJhbmdlXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkuc3RhcnRJbmRleH19IC0ge3tyb3dTdW1tYXJ5LmVuZEluZGV4fX08L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj5vZjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS50b3RhbFJlY29yZHN9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICAgIDxwYWdpbmF0aW9uIGNsYXNzPVwicGFnaW5hdGlvbiBiYXNpY1wiIFtuZ0NsYXNzXT1cIm5hdmlnYXRpb25DbGFzc1wiIHJvbGU9XCJuYXZpZ2F0aW9uXCJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJtYXhSZXN1bHRzXCIgW3RvdGFsSXRlbXNdPVwiZGF0YVNpemVcIlxuICAgICAgICAocGFnZUNoYW5nZWQpPVwicGFnZUNoYW5nZWQoJGV2ZW50KVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTp0cnVlfVwiIFtuZ01vZGVsXT1cImRuLmN1cnJlbnRQYWdlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2hvd2luZyBQYWdlICcgKyBkbi5jdXJyZW50UGFnZSArICcgb2YgJyArIHBhZ2VDb3VudCArICcgcGFnZXMnXCJcbiAgICAgICAgW2JvdW5kYXJ5TGlua3NdPVwiYm91bmRhcnlsaW5rc1wiIFttYXhTaXplXT1cIm1heHNpemVcIlxuICAgICAgICBbZGlyZWN0aW9uTGlua3NdPVwiZGlyZWN0aW9ubGlua3NcIlxuICAgICAgICBmaXJzdFRleHQ9XCJGaXJ0c3RcIiBsYXN0VGV4dD1cIkxhc3RcIlxuICAgICAgICBbY3VzdG9tUHJldmlvdXNUZW1wbGF0ZV09XCJwcmV2VGVtcGxhdGVcIlxuICAgICAgICBbY3VzdG9tTmV4dFRlbXBsYXRlXT1cIm5leHRUZW1wbGF0ZVwiXG4gICAgICAgIFtjdXN0b21QYWdlVGVtcGxhdGVdPVwicGFnZVRlbXBsYXRlXCI+PC9wYWdpbmF0aW9uPlxuICAgIH1cbn1cblxuQGlmIChuYXZjb250cm9scyA9PT0gJ0Jhc2ljJyAmJiBzaG93cmVjb3JkY291bnQpIHtcbiAgPHVsIGNsYXNzPVwicGFnaW5hdGlvblwiPlxuICAgIDxsaSBjbGFzcz1cInRvdGFsY291bnQgZGlzYWJsZWQgYmFzaWNjb3VudFwiPlxuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIj57e2FwcExvY2FsZS5MQUJFTF9UT1RBTF9SRUNPUkRTfX06IHt7ZGF0YVNpemV9fTwvYT5cbiAgICA8L2xpPlxuICA8L3VsPlxufVxuXG48bmctdGVtcGxhdGUgI3BhZ2VUZW1wbGF0ZSBsZXQtcGFnZT5cbiAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgW2F0dHIuZGF0YS1pc2FjaXR2ZXBhZ2VdPVwicGFnZS5hY3RpdmVcIj57eydQYWdlICd9fTwvc3Bhbj5cbiAge3twYWdlLm51bWJlcn19XG4gIEBpZiAocGFnZS5hY3RpdmUpIHtcbiAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj4ge3snLCBTaG93aW5nIHBhZ2UgJyArIHBhZ2UubnVtYmVyICsgJyBvZiAnICsgcGFnZUNvdW50fX08L3NwYW4+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3ByZXZUZW1wbGF0ZSBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5HbyB0byBQcmV2aW91cyBwYWdlIHt7ZGlzYWJsZWQgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbmV4dFRlbXBsYXRlIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIFthdHRyLmRhdGEtaXNkaXNhYmxlZF09XCJkaXNhYmxlZFwiPkdvIHRvIE5leHQgcGFnZSB7e2Rpc2FibGVkID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -508,7 +508,8 @@ class PaginationComponent extends StylableComponent {
|
|
|
508
508
|
if (parts[0] === 'Variables' || parts[0] === 'Widgets') {
|
|
509
509
|
bindPagingOptions = `${parts[0]}.${parts[1]}.pagination`;
|
|
510
510
|
}
|
|
511
|
-
|
|
511
|
+
const isVariableLevelBind = binddataset?.startsWith('Prefab.Variables.');
|
|
512
|
+
if (!binddatasource && dataset && !datasetBoundExpr && !isVariableLevelBind) {
|
|
512
513
|
this.dataset = dataset;
|
|
513
514
|
this._debouncedApplyDataset();
|
|
514
515
|
return;
|
|
@@ -721,6 +722,10 @@ class PaginationComponent extends StylableComponent {
|
|
|
721
722
|
}
|
|
722
723
|
this.navigatePage('first', $event, true);
|
|
723
724
|
this.calculatePagingValues();
|
|
725
|
+
if (this.nativeElement.closest('popover-container, .popover')) {
|
|
726
|
+
$event.stopPropagation();
|
|
727
|
+
this.bsDropdown.hide();
|
|
728
|
+
}
|
|
724
729
|
}
|
|
725
730
|
ngAfterViewInit() {
|
|
726
731
|
const paginationElem = this.nativeElement;
|