ontimize-web-ngx 15.0.0-beta.2 → 15.0.0-beta.4

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.
Files changed (41) hide show
  1. package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +2 -2
  2. package/esm2020/lib/components/contextmenu/context-menu/o-wrapper-content-menu/o-wrapper-content-menu.component.mjs +3 -3
  3. package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.component.mjs +3 -3
  4. package/esm2020/lib/components/grid/o-grid.component.mjs +5 -5
  5. package/esm2020/lib/components/input/combo/o-combo.component.mjs +2 -2
  6. package/esm2020/lib/components/input/currency-input/o-currency-input.component.mjs +3 -11
  7. package/esm2020/lib/components/input/phone-input/o-phone-input.component.mjs +3 -3
  8. package/esm2020/lib/components/input/search-input/o-search-input.component.mjs +2 -2
  9. package/esm2020/lib/components/list/list-item/o-list-item.component.mjs +2 -2
  10. package/esm2020/lib/components/list/o-list.component.mjs +5 -14
  11. package/esm2020/lib/components/list/renderers/card/o-list-item-card.component.mjs +3 -3
  12. package/esm2020/lib/components/list/renderers/card-image/o-list-item-card-image.component.mjs +3 -3
  13. package/esm2020/lib/components/table/extensions/dialog/apply-configuration/o-table-apply-configuration-dialog.component.mjs +3 -3
  14. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +2 -2
  15. package/esm2020/lib/components/table/extensions/dialog/store-configuration/o-table-store-configuration-dialog.component.mjs +3 -3
  16. package/esm2020/lib/components/table/extensions/dialog/visible-columns/o-table-visible-columns-dialog.component.mjs +3 -3
  17. package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +3 -3
  18. package/esm2020/lib/components/table/extensions/header/table-quickfilter/o-table-quickfilter.component.mjs +3 -3
  19. package/esm2020/lib/components/table/o-table.component.mjs +8 -8
  20. package/esm2020/lib/i18n/i18n.mjs +2 -2
  21. package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +2 -2
  22. package/esm2020/lib/services/local-storage.service.mjs +5 -2
  23. package/esm2020/lib/shared/components/filter/load-filter/o-load-filter-dialog.component.mjs +3 -3
  24. package/esm2020/lib/util/currencyUtil.mjs +53 -0
  25. package/esm2020/lib/util/index.mjs +2 -1
  26. package/fesm2015/ontimize-web-ngx.mjs +109 -70
  27. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  28. package/fesm2020/ontimize-web-ngx.mjs +108 -70
  29. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  30. package/lib/components/input/currency-input/o-currency-input.component.d.ts +7 -0
  31. package/lib/components/list/o-list.component.d.ts +1 -3
  32. package/lib/util/currencyUtil.d.ts +41 -0
  33. package/lib/util/index.d.ts +1 -0
  34. package/ontimize.scss +2 -72
  35. package/package.json +1 -1
  36. package/theme.scss +147 -163
  37. package/theming/addons/report-on-demand.scss +5 -1
  38. package/theming/ontimize-style-v8.scss +3 -2
  39. package/theming/styles/density.scss +52 -23
  40. package/theming/styles/ontimize-v8/o-form-field-style.scss +3 -2
  41. package/theming/styles/ontimize-v8/o-table-style.scss +1 -1
@@ -393,7 +393,7 @@ export class OTableMenuComponent {
393
393
  }
394
394
  }
395
395
  OTableMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableMenuComponent, deps: [{ token: i0.Injector }, { token: i1.MatDialog }, { token: i0.ChangeDetectorRef }, { token: forwardRef(() => OTableBase) }, { token: O_CHART_ON_DEMAND_SERVICE, optional: true }, { token: O_REPORT_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
396
- OTableMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTableMenuComponent, selector: "o-table-menu", inputs: { selectAllCheckbox: ["select-all-checkbox", "selectAllCheckbox"], exportButton: ["export-button", "exportButton"], columnsVisibilityButton: ["columns-visibility-button", "columnsVisibilityButton"], showConfigurationOption: ["show-configuration-option", "showConfigurationOption"], showFilterOption: ["show-filter-option", "showFilterOption"], showGroupByOption: ["show-group-by-option", "showGroupByOption"], showResetWidthOption: ["show-reset-width-option", "showResetWidthOption"], showReportOnDemandOption: ["show-report-on-demand-option", "showReportOnDemandOption"], showChartsOnDemandOption: ["show-charts-on-demand-option", "showChartsOnDemandOption"] }, host: { properties: { "class.o-table-menu": "true" } }, viewQueries: [{ propertyName: "matMenu", first: true, predicate: ["menu"], descendants: true, static: true }, { propertyName: "selectAllCheckboxOption", first: true, predicate: ["selectAllCheckboxOption"], descendants: true }, { propertyName: "exportButtonOption", first: true, predicate: ["exportButtonOption"], descendants: true }, { propertyName: "columnsVisibilityButtonOption", first: true, predicate: ["columnsVisibilityButtonOption"], descendants: true }, { propertyName: "filterMenuButton", first: true, predicate: ["filterMenuButton"], descendants: true, read: ElementRef }, { propertyName: "configurationMenuButton", first: true, predicate: ["configurationMenuButton"], descendants: true, read: ElementRef }, { propertyName: "filterMenu", first: true, predicate: ["filterMenu"], descendants: true }, { propertyName: "configurationMenu", first: true, predicate: ["configurationMenu"], descendants: true }, { propertyName: "columnFilterOption", first: true, predicate: ["columnFilterOption"], descendants: true }, { propertyName: "chartMenu", first: true, predicate: ["chartMenu"], descendants: true, static: true }], ngImport: i0, template: "<mat-menu #menu=\"matMenu\" x-position=\"before\" [class]=\"(rowHeightObservable | async) +' o-table-menu'\">\n <!-- DEFAULT OPTIONS -->\n <o-table-option #selectAllCheckboxOption *ngIf=\"showSelectAllCheckbox\" [active]=\"isSelectAllOptionActive\" (onClick)=\"onShowsSelects()\"\n label=\"TABLE.BUTTONS.SELECT\" show-checkbox-option=\"true\"></o-table-option>\n <o-table-option #columnsVisibilityButtonOption *ngIf=\"showColumnsVisibilityButton\" (onClick)=\"onChangeColumnsVisibilityClicked()\"\n label=\"TABLE.BUTTONS.COLVIS\"></o-table-option>\n <o-table-option *ngIf=\"showResetWidthOption\" (onClick)=\"onResetWidthClicked()\" label=\"TABLE.BUTTONS.RESETWIDTH\"></o-table-option>\n\n <mat-divider *ngIf=\"showSelectAllCheckbox || showColumnsVisibilityButton || showResetWidthOption\"></mat-divider>\n\n <o-table-option #exportButtonOption *ngIf=\"showExportButton\" (onClick)=\"onExportButtonClicked()\" label=\"TABLE.BUTTONS.EXPORT\"></o-table-option>\n <o-table-option (onClick)=\"onReportOnDemandClicked()\" label=\"TABLE.BUTTONS.REPORT_ON_DEMAND\" *ngIf=\"showReportOnDemandButton\"></o-table-option>\n <o-table-option *ngIf=\"showChartsOnDemandButton\" (onClick)=\"onChartsOnDemandClicked()\" label=\"TABLE.BUTTONS.CHART_ON_DEMAND\"></o-table-option>\n <mat-divider *ngIf=\" showExportButton || showReportOnDemandButton || showChartsOnDemandButton\"></mat-divider>\n\n <o-table-option #columnsGroupByOption *ngIf=\"showGroupByButton\" (onClick)=\"onGroupByClicked()\" label=\"TABLE.BUTTONS.GROUPBY\"></o-table-option>\n\n <button type=\"button\" #filterMenuButton *ngIf=\"showFilterMenu\" mat-menu-item [matMenuTriggerFor]=\"filterMenu\">{{\n 'TABLE.BUTTONS.FILTER' | oTranslate }}</button>\n <button type=\"button\" #configurationMenuButton *ngIf=\"showConfigurationMenu\" mat-menu-item [matMenuTriggerFor]=\"configurationMenu\">{{\n 'TABLE.BUTTONS.CONFIGURATION' | oTranslate }}</button>\n <ng-content></ng-content>\n</mat-menu>\n\n<mat-menu #filterMenu=\"matMenu\" [class]=\"(rowHeightObservable| async) +' o-table-menu'\">\n <o-table-option #columnFilterOption show-checkbox-option=\"true\" [active]=\"isColumnFilterOptionActive\" (onClick)=\"onFilterByColumnClicked()\"\n label=\"TABLE.BUTTONS.FILTER_BY_COLUMN\">\n </o-table-option>\n <button type=\"button\" mat-menu-item (click)=\"onStoreFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_SAVE' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onLoadFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_LOAD' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onClearFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate\n }}</button>\n</mat-menu>\n\n<mat-menu #configurationMenu=\"matMenu\" [class]=\"(rowHeightObservable | async) +' o-table-menu'\">\n <button type=\"button\" mat-menu-item (click)=\"onStoreConfigurationClicked()\">{{ 'TABLE.BUTTONS.SAVE_CONFIGURATION' |\n oTranslate }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onApplyConfigurationClicked()\">{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' |\n oTranslate }}</button>\n</mat-menu>\n", styles: [".o-table-menu .mat-divider{margin:0 8px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.OTableOptionComponent, selector: "o-table-option", inputs: ["attr", "enabled", "icon", "show-checkbox-option", "label", "active"], outputs: ["onClick"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
396
+ OTableMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTableMenuComponent, selector: "o-table-menu", inputs: { selectAllCheckbox: ["select-all-checkbox", "selectAllCheckbox"], exportButton: ["export-button", "exportButton"], columnsVisibilityButton: ["columns-visibility-button", "columnsVisibilityButton"], showConfigurationOption: ["show-configuration-option", "showConfigurationOption"], showFilterOption: ["show-filter-option", "showFilterOption"], showGroupByOption: ["show-group-by-option", "showGroupByOption"], showResetWidthOption: ["show-reset-width-option", "showResetWidthOption"], showReportOnDemandOption: ["show-report-on-demand-option", "showReportOnDemandOption"], showChartsOnDemandOption: ["show-charts-on-demand-option", "showChartsOnDemandOption"] }, host: { properties: { "class.o-table-menu": "true" } }, viewQueries: [{ propertyName: "matMenu", first: true, predicate: ["menu"], descendants: true, static: true }, { propertyName: "selectAllCheckboxOption", first: true, predicate: ["selectAllCheckboxOption"], descendants: true }, { propertyName: "exportButtonOption", first: true, predicate: ["exportButtonOption"], descendants: true }, { propertyName: "columnsVisibilityButtonOption", first: true, predicate: ["columnsVisibilityButtonOption"], descendants: true }, { propertyName: "filterMenuButton", first: true, predicate: ["filterMenuButton"], descendants: true, read: ElementRef }, { propertyName: "configurationMenuButton", first: true, predicate: ["configurationMenuButton"], descendants: true, read: ElementRef }, { propertyName: "filterMenu", first: true, predicate: ["filterMenu"], descendants: true }, { propertyName: "configurationMenu", first: true, predicate: ["configurationMenu"], descendants: true }, { propertyName: "columnFilterOption", first: true, predicate: ["columnFilterOption"], descendants: true }, { propertyName: "chartMenu", first: true, predicate: ["chartMenu"], descendants: true, static: true }], ngImport: i0, template: "<mat-menu #menu=\"matMenu\" x-position=\"before\" [class]=\"(rowHeightObservable | async) +' o-table-menu o-mat-menu'\">\n <!-- DEFAULT OPTIONS -->\n <o-table-option #selectAllCheckboxOption *ngIf=\"showSelectAllCheckbox\" [active]=\"isSelectAllOptionActive\" (onClick)=\"onShowsSelects()\"\n label=\"TABLE.BUTTONS.SELECT\" show-checkbox-option=\"true\"></o-table-option>\n <o-table-option #columnsVisibilityButtonOption *ngIf=\"showColumnsVisibilityButton\" (onClick)=\"onChangeColumnsVisibilityClicked()\"\n label=\"TABLE.BUTTONS.COLVIS\"></o-table-option>\n <o-table-option *ngIf=\"showResetWidthOption\" (onClick)=\"onResetWidthClicked()\" label=\"TABLE.BUTTONS.RESETWIDTH\"></o-table-option>\n\n <mat-divider *ngIf=\"showSelectAllCheckbox || showColumnsVisibilityButton || showResetWidthOption\"></mat-divider>\n\n <o-table-option #exportButtonOption *ngIf=\"showExportButton\" (onClick)=\"onExportButtonClicked()\" label=\"TABLE.BUTTONS.EXPORT\"></o-table-option>\n <o-table-option (onClick)=\"onReportOnDemandClicked()\" label=\"TABLE.BUTTONS.REPORT_ON_DEMAND\" *ngIf=\"showReportOnDemandButton\"></o-table-option>\n <o-table-option *ngIf=\"showChartsOnDemandButton\" (onClick)=\"onChartsOnDemandClicked()\" label=\"TABLE.BUTTONS.CHART_ON_DEMAND\"></o-table-option>\n <mat-divider *ngIf=\" showExportButton || showReportOnDemandButton || showChartsOnDemandButton\"></mat-divider>\n\n <o-table-option #columnsGroupByOption *ngIf=\"showGroupByButton\" (onClick)=\"onGroupByClicked()\" label=\"TABLE.BUTTONS.GROUPBY\"></o-table-option>\n\n <button type=\"button\" #filterMenuButton *ngIf=\"showFilterMenu\" mat-menu-item [matMenuTriggerFor]=\"filterMenu\">{{\n 'TABLE.BUTTONS.FILTER' | oTranslate }}</button>\n <button type=\"button\" #configurationMenuButton *ngIf=\"showConfigurationMenu\" mat-menu-item [matMenuTriggerFor]=\"configurationMenu\">{{\n 'TABLE.BUTTONS.CONFIGURATION' | oTranslate }}</button>\n <ng-content></ng-content>\n</mat-menu>\n\n<mat-menu #filterMenu=\"matMenu\" [class]=\"(rowHeightObservable| async) +' o-table-menu'\">\n <o-table-option #columnFilterOption show-checkbox-option=\"true\" [active]=\"isColumnFilterOptionActive\" (onClick)=\"onFilterByColumnClicked()\"\n label=\"TABLE.BUTTONS.FILTER_BY_COLUMN\">\n </o-table-option>\n <button type=\"button\" mat-menu-item (click)=\"onStoreFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_SAVE' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onLoadFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_LOAD' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onClearFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate\n }}</button>\n</mat-menu>\n\n<mat-menu #configurationMenu=\"matMenu\" [class]=\"(rowHeightObservable | async) +' o-table-menu'\">\n <button type=\"button\" mat-menu-item (click)=\"onStoreConfigurationClicked()\">{{ 'TABLE.BUTTONS.SAVE_CONFIGURATION' |\n oTranslate }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onApplyConfigurationClicked()\">{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' |\n oTranslate }}</button>\n</mat-menu>\n", styles: [".o-table-menu .mat-divider{margin:0 8px}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i5.OTableOptionComponent, selector: "o-table-option", inputs: ["attr", "enabled", "icon", "show-checkbox-option", "label", "active"], outputs: ["onClick"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
397
397
  __decorate([
398
398
  BooleanInputConverter(),
399
399
  __metadata("design:type", Boolean)
@@ -434,7 +434,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
434
434
  type: Component,
435
435
  args: [{ selector: 'o-table-menu', inputs: DEFAULT_INPUTS_O_TABLE_MENU, outputs: DEFAULT_OUTPUTS_O_TABLE_MENU, encapsulation: ViewEncapsulation.None, host: {
436
436
  '[class.o-table-menu]': 'true'
437
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-menu #menu=\"matMenu\" x-position=\"before\" [class]=\"(rowHeightObservable | async) +' o-table-menu'\">\n <!-- DEFAULT OPTIONS -->\n <o-table-option #selectAllCheckboxOption *ngIf=\"showSelectAllCheckbox\" [active]=\"isSelectAllOptionActive\" (onClick)=\"onShowsSelects()\"\n label=\"TABLE.BUTTONS.SELECT\" show-checkbox-option=\"true\"></o-table-option>\n <o-table-option #columnsVisibilityButtonOption *ngIf=\"showColumnsVisibilityButton\" (onClick)=\"onChangeColumnsVisibilityClicked()\"\n label=\"TABLE.BUTTONS.COLVIS\"></o-table-option>\n <o-table-option *ngIf=\"showResetWidthOption\" (onClick)=\"onResetWidthClicked()\" label=\"TABLE.BUTTONS.RESETWIDTH\"></o-table-option>\n\n <mat-divider *ngIf=\"showSelectAllCheckbox || showColumnsVisibilityButton || showResetWidthOption\"></mat-divider>\n\n <o-table-option #exportButtonOption *ngIf=\"showExportButton\" (onClick)=\"onExportButtonClicked()\" label=\"TABLE.BUTTONS.EXPORT\"></o-table-option>\n <o-table-option (onClick)=\"onReportOnDemandClicked()\" label=\"TABLE.BUTTONS.REPORT_ON_DEMAND\" *ngIf=\"showReportOnDemandButton\"></o-table-option>\n <o-table-option *ngIf=\"showChartsOnDemandButton\" (onClick)=\"onChartsOnDemandClicked()\" label=\"TABLE.BUTTONS.CHART_ON_DEMAND\"></o-table-option>\n <mat-divider *ngIf=\" showExportButton || showReportOnDemandButton || showChartsOnDemandButton\"></mat-divider>\n\n <o-table-option #columnsGroupByOption *ngIf=\"showGroupByButton\" (onClick)=\"onGroupByClicked()\" label=\"TABLE.BUTTONS.GROUPBY\"></o-table-option>\n\n <button type=\"button\" #filterMenuButton *ngIf=\"showFilterMenu\" mat-menu-item [matMenuTriggerFor]=\"filterMenu\">{{\n 'TABLE.BUTTONS.FILTER' | oTranslate }}</button>\n <button type=\"button\" #configurationMenuButton *ngIf=\"showConfigurationMenu\" mat-menu-item [matMenuTriggerFor]=\"configurationMenu\">{{\n 'TABLE.BUTTONS.CONFIGURATION' | oTranslate }}</button>\n <ng-content></ng-content>\n</mat-menu>\n\n<mat-menu #filterMenu=\"matMenu\" [class]=\"(rowHeightObservable| async) +' o-table-menu'\">\n <o-table-option #columnFilterOption show-checkbox-option=\"true\" [active]=\"isColumnFilterOptionActive\" (onClick)=\"onFilterByColumnClicked()\"\n label=\"TABLE.BUTTONS.FILTER_BY_COLUMN\">\n </o-table-option>\n <button type=\"button\" mat-menu-item (click)=\"onStoreFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_SAVE' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onLoadFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_LOAD' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onClearFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate\n }}</button>\n</mat-menu>\n\n<mat-menu #configurationMenu=\"matMenu\" [class]=\"(rowHeightObservable | async) +' o-table-menu'\">\n <button type=\"button\" mat-menu-item (click)=\"onStoreConfigurationClicked()\">{{ 'TABLE.BUTTONS.SAVE_CONFIGURATION' |\n oTranslate }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onApplyConfigurationClicked()\">{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' |\n oTranslate }}</button>\n</mat-menu>\n", styles: [".o-table-menu .mat-divider{margin:0 8px}\n"] }]
437
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-menu #menu=\"matMenu\" x-position=\"before\" [class]=\"(rowHeightObservable | async) +' o-table-menu o-mat-menu'\">\n <!-- DEFAULT OPTIONS -->\n <o-table-option #selectAllCheckboxOption *ngIf=\"showSelectAllCheckbox\" [active]=\"isSelectAllOptionActive\" (onClick)=\"onShowsSelects()\"\n label=\"TABLE.BUTTONS.SELECT\" show-checkbox-option=\"true\"></o-table-option>\n <o-table-option #columnsVisibilityButtonOption *ngIf=\"showColumnsVisibilityButton\" (onClick)=\"onChangeColumnsVisibilityClicked()\"\n label=\"TABLE.BUTTONS.COLVIS\"></o-table-option>\n <o-table-option *ngIf=\"showResetWidthOption\" (onClick)=\"onResetWidthClicked()\" label=\"TABLE.BUTTONS.RESETWIDTH\"></o-table-option>\n\n <mat-divider *ngIf=\"showSelectAllCheckbox || showColumnsVisibilityButton || showResetWidthOption\"></mat-divider>\n\n <o-table-option #exportButtonOption *ngIf=\"showExportButton\" (onClick)=\"onExportButtonClicked()\" label=\"TABLE.BUTTONS.EXPORT\"></o-table-option>\n <o-table-option (onClick)=\"onReportOnDemandClicked()\" label=\"TABLE.BUTTONS.REPORT_ON_DEMAND\" *ngIf=\"showReportOnDemandButton\"></o-table-option>\n <o-table-option *ngIf=\"showChartsOnDemandButton\" (onClick)=\"onChartsOnDemandClicked()\" label=\"TABLE.BUTTONS.CHART_ON_DEMAND\"></o-table-option>\n <mat-divider *ngIf=\" showExportButton || showReportOnDemandButton || showChartsOnDemandButton\"></mat-divider>\n\n <o-table-option #columnsGroupByOption *ngIf=\"showGroupByButton\" (onClick)=\"onGroupByClicked()\" label=\"TABLE.BUTTONS.GROUPBY\"></o-table-option>\n\n <button type=\"button\" #filterMenuButton *ngIf=\"showFilterMenu\" mat-menu-item [matMenuTriggerFor]=\"filterMenu\">{{\n 'TABLE.BUTTONS.FILTER' | oTranslate }}</button>\n <button type=\"button\" #configurationMenuButton *ngIf=\"showConfigurationMenu\" mat-menu-item [matMenuTriggerFor]=\"configurationMenu\">{{\n 'TABLE.BUTTONS.CONFIGURATION' | oTranslate }}</button>\n <ng-content></ng-content>\n</mat-menu>\n\n<mat-menu #filterMenu=\"matMenu\" [class]=\"(rowHeightObservable| async) +' o-table-menu'\">\n <o-table-option #columnFilterOption show-checkbox-option=\"true\" [active]=\"isColumnFilterOptionActive\" (onClick)=\"onFilterByColumnClicked()\"\n label=\"TABLE.BUTTONS.FILTER_BY_COLUMN\">\n </o-table-option>\n <button type=\"button\" mat-menu-item (click)=\"onStoreFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_SAVE' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onLoadFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_LOAD' | oTranslate\n }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onClearFilterClicked()\">{{ 'TABLE.BUTTONS.FILTER_CLEAR' | oTranslate\n }}</button>\n</mat-menu>\n\n<mat-menu #configurationMenu=\"matMenu\" [class]=\"(rowHeightObservable | async) +' o-table-menu'\">\n <button type=\"button\" mat-menu-item (click)=\"onStoreConfigurationClicked()\">{{ 'TABLE.BUTTONS.SAVE_CONFIGURATION' |\n oTranslate }}</button>\n <button type=\"button\" mat-menu-item (click)=\"onApplyConfigurationClicked()\">{{ 'TABLE.BUTTONS.APPLY_CONFIGURATION' |\n oTranslate }}</button>\n</mat-menu>\n", styles: [".o-table-menu .mat-divider{margin:0 8px}\n"] }]
438
438
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.MatDialog }, { type: i0.ChangeDetectorRef }, { type: i7.OTableBase, decorators: [{
439
439
  type: Inject,
440
440
  args: [forwardRef(() => OTableBase)]
@@ -479,4 +479,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
479
479
  type: ViewChild,
480
480
  args: ['chartMenu', { static: true }]
481
481
  }] } });
482
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLW1lbnUvby10YWJsZS1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLW1lbnUvby10YWJsZS1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFHUixRQUFRLEVBQ1IsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBSWxGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDMUYsT0FBTyxFQUFFLDBCQUEw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QixrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUcvQixTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRNZW51IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBJQ2hhcnRPbkRlbWFuZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2NoYXJ0LW9uLWRlbWFuZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVNZW51IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtb24tZGVtYW5kLXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBPX0NIQVJUX09OX0RFTUFORF9TRVJWSUNFLCBPX1JFUE9SVF9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IE9udGltaXplRXhwb3J0RGF0YVByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL29udGltaXplLWV4cG9ydC1kYXRhLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvc25hY2tiYXIuc2VydmljZSc7XG5pbXBvcnQgeyBPVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS9vLXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9Mb2FkRmlsdGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvZmlsdGVyL2xvYWQtZmlsdGVyL28tbG9hZC1maWx0ZXItZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPU3RvcmVGaWx0ZXJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9maWx0ZXIvc3RvcmUtZmlsdGVyL28tc3RvcmUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUgeyBPUGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy9vLXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVNZW51UGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLW1lbnUtcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB0eXBlIHsgT0NvbHVtbiB9IGZyb20gJy4uLy4uLy4uL2NvbHVtbi9vLWNvbHVtbi5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVCYXNlIH0gZnJvbSAnLi4vLi4vLi4vby10YWJsZS1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUdyb3VwQnlDb2x1bW5zRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGlhbG9nJztcbmltcG9ydCB7IE9UYWJsZUFwcGx5Q29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RpYWxvZy9hcHBseS1jb25maWd1cmF0aW9uL28tdGFibGUtYXBwbHktY29uZmlndXJhdGlvbi1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUV4cG9ydERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RpYWxvZy9leHBvcnQvby10YWJsZS1leHBvcnQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVTdG9yZUNvbmZpZ3VyYXRpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kaWFsb2cvc3RvcmUtY29uZmlndXJhdGlvbi9vLXRhYmxlLXN0b3JlLWNvbmZpZ3VyYXRpb24tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVWaXNpYmxlQ29sdW1uc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RpYWxvZy92aXNpYmxlLWNvbHVtbnMvby10YWJsZS12aXNpYmxlLWNvbHVtbnMtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi90YWJsZS1vcHRpb24vby10YWJsZS1vcHRpb24uY29tcG9uZW50JztcblxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UQUJMRV9NRU5VID0gW1xuICAvLyBzZWxlY3QtYWxsLWNoZWNrYm94IFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgc2VsZWN0aW9uIGNoZWNrIGJveGVzLiBEZWZhdWx0OiBuby5cbiAgJ3NlbGVjdEFsbENoZWNrYm94OiBzZWxlY3QtYWxsLWNoZWNrYm94JyxcblxuICAvLyBleHBvcnQtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGV4cG9ydCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2V4cG9ydEJ1dHRvbjogZXhwb3J0LWJ1dHRvbicsXG5cbiAgLy8gY29sdW1ucy12aXNpYmlsaXR5LWJ1dHRvbiBbbm98eWVzXTogc2hvdyBjb2x1bW5zIHZpc2liaWxpdHkgYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gICdjb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbjogY29sdW1ucy12aXNpYmlsaXR5LWJ1dHRvbicsXG5cbiAgLy8gc2hvdy1jb25maWd1cmF0aW9uLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IGNvbmZpZ3VyYXRpb24gYnV0dG9uIGluIGhlYWRlci4gRGVmYXVsdDogeWVzLlxuICAnc2hvd0NvbmZpZ3VyYXRpb25PcHRpb246IHNob3ctY29uZmlndXJhdGlvbi1vcHRpb24nLFxuXG4gIC8vIHNob3ctZmlsdGVyLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IGZpbHRlciBtZW51IG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dGaWx0ZXJPcHRpb246IHNob3ctZmlsdGVyLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1ncm91cC1ieS1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBncm91cCBieSBtZW51IG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dHcm91cEJ5T3B0aW9uOiBzaG93LWdyb3VwLWJ5LW9wdGlvbicsXG5cbiAgLy8gc2hvdy1yZXNldC13aWR0aC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyByZXNldCB3aWR0aCBtZW51IG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dSZXNldFdpZHRoT3B0aW9uOiBzaG93LXJlc2V0LXdpZHRoLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1yZXBvcnQtb24tZGVtYW5kLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHJlcG9ydCBvbiBkZW1hbmQgb3B0aW9uIGluIHRoZSBoZWFkZXIgbWVudVxuICAnc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uOiBzaG93LXJlcG9ydC1vbi1kZW1hbmQtb3B0aW9uJyxcblxuICAvLyBzaG93LWNoYXJ0cy1vbi1kZW1hbmQtb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgY2hhcnRzIG9uIGRlbWFuZCBvcHRpb24gaW4gdGhlIGhlYWRlciBtZW51XG4gICdzaG93Q2hhcnRzT25EZW1hbmRPcHRpb246IHNob3ctY2hhcnRzLW9uLWRlbWFuZC1vcHRpb24nXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fVEFCTEVfTUVOVSA9IFtdO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vby10YWJsZS1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby10YWJsZS1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UQUJMRV9NRU5VLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19UQUJMRV9NRU5VLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLXRhYmxlLW1lbnVdJzogJ3RydWUnXG4gIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZU1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPVGFibGVNZW51LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgLyogSW5wdXRzICovXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzZWxlY3RBbGxDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDb25maWd1cmF0aW9uT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dGaWx0ZXJPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgY29sdW1uc1Zpc2liaWxpdHlCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd0dyb3VwQnlPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1Jlc2V0V2lkdGhPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDaGFydHNPbkRlbWFuZE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblxuICBwdWJsaWMgb25WaXNpYmxlRmlsdGVyT3B0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyogRW5kIG9mIGlucHV0cyAqL1xuXG4gIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogT1RyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZTtcblxuICBAVmlld0NoaWxkKCdtZW51JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgbWF0TWVudTogTWF0TWVudTtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0QWxsQ2hlY2tib3hPcHRpb24nKVxuICBzZWxlY3RBbGxDaGVja2JveE9wdGlvbjogT1RhYmxlT3B0aW9uQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdleHBvcnRCdXR0b25PcHRpb24nKVxuICBleHBvcnRCdXR0b25PcHRpb246IE9UYWJsZU9wdGlvbkNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY29sdW1uc1Zpc2liaWxpdHlCdXR0b25PcHRpb24nKVxuICBjb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbk9wdGlvbjogT1RhYmxlT3B0aW9uQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdmaWx0ZXJNZW51QnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGZpbHRlck1lbnVCdXR0b246IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvbmZpZ3VyYXRpb25NZW51QnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGNvbmZpZ3VyYXRpb25NZW51QnV0dG9uOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlck1lbnUnKVxuICBmaWx0ZXJNZW51OiBNYXRNZW51O1xuICBAVmlld0NoaWxkKCdjb25maWd1cmF0aW9uTWVudScpXG4gIGNvbmZpZ3VyYXRpb25NZW51OiBNYXRNZW51O1xuICBAVmlld0NoaWxkKCdjb2x1bW5GaWx0ZXJPcHRpb24nKVxuICBjb2x1bW5GaWx0ZXJPcHRpb246IE9UYWJsZU9wdGlvbkNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY2hhcnRNZW51JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgY2hhcnRNZW51OiBNYXRNZW51O1xuXG4gIHByb3RlY3RlZCBwZXJtaXNzaW9uczogT1RhYmxlTWVudVBlcm1pc3Npb25zO1xuICBwcm90ZWN0ZWQgbXV0YXRpb25PYnNlcnZlcnM6IE11dGF0aW9uT2JzZXJ2ZXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgZXhwb3J0RGF0YVByb3ZpZGVyOiBPbnRpbWl6ZUV4cG9ydERhdGFQcm92aWRlclNlcnZpY2U7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBPVGFibGVCYXNlKSkgcHJvdGVjdGVkIHRhYmxlOiBPVGFibGVCYXNlLFxuXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChPX0NIQVJUX09OX0RFTUFORF9TRVJWSUNFKSBwdWJsaWMgY2hhcnRPbkRlbWFuZFNlcnZpY2U6IElDaGFydE9uRGVtYW5kU2VydmljZSxcblxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoT19SRVBPUlRfU0VSVklDRSkgcHVibGljIHJlcG9ydFNlcnZpY2U6IElSZXBvcnRTZXJ2aWNlXG5cbiAgKSB7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoRGlhbG9nU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT1RyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoU25hY2tCYXJTZXJ2aWNlKTtcbiAgICB0aGlzLmV4cG9ydERhdGFQcm92aWRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9udGltaXplRXhwb3J0RGF0YVByb3ZpZGVyU2VydmljZSlcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnRhYmxlLmdldE1lbnVQZXJtaXNzaW9ucygpO1xuICB9XG5cbiAgZ2V0IGlzQ29sdW1uRmlsdGVyT3B0aW9uQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuXG4gICAgaWYgKCF0aGlzLnBlcm1pc3Npb25zLml0ZW1zIHx8IHRoaXMucGVybWlzc2lvbnMuaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdEFsbENoZWNrYm94T3B0aW9uICYmICF0aGlzLmVuYWJsZWRTZWxlY3RBbGxDaGVja2JveCkge1xuICAgICAgdGhpcy5kaXNhYmxlT1RhYmxlT3B0aW9uQ29tcG9uZW50KHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hPcHRpb24pO1xuICAgIH1cbiAgICBpZiAodGhpcy5leHBvcnRCdXR0b25PcHRpb24gJiYgIXRoaXMuZW5hYmxlZEV4cG9ydEJ1dHRvbikge1xuICAgICAgdGhpcy5kaXNhYmxlT1RhYmxlT3B0aW9uQ29tcG9uZW50KHRoaXMuZXhwb3J0QnV0dG9uT3B0aW9uKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sdW1uc1Zpc2liaWxpdHlCdXR0b25PcHRpb24gJiYgIXRoaXMuZW5hYmxlZENvbHVtbnNWaXNpYmlsaXR5QnV0dG9uKSB7XG4gICAgICB0aGlzLmRpc2FibGVPVGFibGVPcHRpb25Db21wb25lbnQodGhpcy5jb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbk9wdGlvbik7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlck1lbnVCdXR0b24gJiYgIXRoaXMuZW5hYmxlZEZpbHRlck1lbnUpIHtcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbih0aGlzLmZpbHRlck1lbnVCdXR0b24pO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uTWVudUJ1dHRvbiAmJiAhdGhpcy5lbmFibGVkQ29uZmlndXJhdGlvbk1lbnUpIHtcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbih0aGlzLmNvbmZpZ3VyYXRpb25NZW51QnV0dG9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkaXNhYmxlT1RhYmxlT3B0aW9uQ29tcG9uZW50KGNvbXA6IE9UYWJsZU9wdGlvbkNvbXBvbmVudCkge1xuICAgIGNvbXAuZW5hYmxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGJ1dHRvbkVMID0gY29tcC5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuICAgIGNvbnN0IG9icyA9IFBlcm1pc3Npb25zVXRpbHMucmVnaXN0ZXJEaXNhYmxlZENoYW5nZXNJbkRvbShidXR0b25FTCk7XG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVycy5wdXNoKG9icyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGlzYWJsZUJ1dHRvbihidXR0b25FTDogRWxlbWVudFJlZikge1xuICAgIGJ1dHRvbkVMLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgIGNvbnN0IG9icyA9IFBlcm1pc3Npb25zVXRpbHMucmVnaXN0ZXJEaXNhYmxlZENoYW5nZXNJbkRvbShidXR0b25FTC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJzLnB1c2gob2JzKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLm11dGF0aW9uT2JzZXJ2ZXJzKSB7XG4gICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJzLmZvckVhY2goKG06IE11dGF0aW9uT2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgbS5kaXNjb25uZWN0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9wdGlvbnMob1RhYmxlT3B0aW9uczogT1RhYmxlT3B0aW9uQ29tcG9uZW50W10pIHtcbiAgICBjb25zdCBpdGVtczogT1Blcm1pc3Npb25zW10gPSB0aGlzLnBlcm1pc3Npb25zLml0ZW1zIHx8IFtdO1xuICAgIGNvbnN0IGZpeGVkT3B0aW9ucyA9IFsnc2VsZWN0LWFsbC1jaGVja2JveCcsICdleHBvcnQnLCAnc2hvdy1oaWRlLWNvbHVtbnMnLCAnZmlsdGVyJywgJ2NvbmZpZ3VyYXRpb24nXTtcbiAgICBjb25zdCB1c2VySXRlbXM6IE9QZXJtaXNzaW9uc1tdID0gaXRlbXMuZmlsdGVyKChwZXJtOiBPUGVybWlzc2lvbnMpID0+IGZpeGVkT3B0aW9ucy5pbmRleE9mKHBlcm0uYXR0cikgPT09IC0xKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB1c2VySXRlbXMuZm9yRWFjaCgocGVybTogT1Blcm1pc3Npb25zKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb24gPSBvVGFibGVPcHRpb25zLmZpbmQoKG9UYWJsZU9wdGlvbjogT1RhYmxlT3B0aW9uQ29tcG9uZW50KSA9PiBvVGFibGVPcHRpb24ub2F0dHIgPT09IHBlcm0uYXR0cik7XG4gICAgICBzZWxmLnNldFBlcm1pc3Npb25zVG9PVGFibGVPcHRpb24ocGVybSwgb3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRQZXJtaXNzaW9uc1RvT1RhYmxlT3B0aW9uKHBlcm06IE9QZXJtaXNzaW9ucywgb3B0aW9uOiBPVGFibGVPcHRpb25Db21wb25lbnQpIHtcbiAgICBpZiAocGVybS52aXNpYmxlID09PSBmYWxzZSAmJiBvcHRpb24pIHtcbiAgICAgIG9wdGlvbi5lbFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZSgpO1xuICAgIH0gZWxzZSBpZiAocGVybS5lbmFibGVkID09PSBmYWxzZSAmJiBvcHRpb24pIHtcbiAgICAgIG9wdGlvbi5lbmFibGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBidXR0b25FTCA9IG9wdGlvbi5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuICAgICAgY29uc3Qgb2JzID0gUGVybWlzc2lvbnNVdGlscy5yZWdpc3RlckRpc2FibGVkQ2hhbmdlc0luRG9tKGJ1dHRvbkVMKTtcbiAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcnMucHVzaChvYnMpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBlcm1pc3Npb25CeUF0dHIoYXR0cjogc3RyaW5nKSB7XG4gICAgY29uc3QgaXRlbXM6IE9QZXJtaXNzaW9uc1tdID0gdGhpcy5wZXJtaXNzaW9ucy5pdGVtcyB8fCBbXTtcbiAgICByZXR1cm4gaXRlbXMuZmluZCgocGVybTogT1Blcm1pc3Npb25zKSA9PiBwZXJtLmF0dHIgPT09IGF0dHIpO1xuICB9XG5cbiAgZ2V0IGlzU2VsZWN0QWxsT3B0aW9uQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGU7XG4gIH1cblxuICBnZXQgc2hvd1NlbGVjdEFsbENoZWNrYm94KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zZWxlY3RBbGxDaGVja2JveCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwZXJtOiBPUGVybWlzc2lvbnMgPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoJ3NlbGVjdC1hbGwtY2hlY2tib3gnKTtcbiAgICByZXR1cm4gdGhpcy5zaG93RmlsdGVyT3B0aW9uICYmICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCByb3dIZWlnaHRPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUucm93SGVpZ2h0T2JzZXJ2YWJsZTtcbiAgfVxuICBnZXQgZW5hYmxlZFNlbGVjdEFsbENoZWNrYm94KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignc2VsZWN0LWFsbC1jaGVja2JveCcpO1xuICAgIHJldHVybiAhKHBlcm0gJiYgcGVybS5lbmFibGVkID09PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgc2hvd0V4cG9ydEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZXhwb3J0QnV0dG9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignZXhwb3J0Jyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkRXhwb3J0QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignZXhwb3J0Jyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLmVuYWJsZWQgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBzaG93Q29sdW1uc1Zpc2liaWxpdHlCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbnNWaXNpYmlsaXR5QnV0dG9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignc2hvdy1oaWRlLWNvbHVtbnMnKTtcbiAgICByZXR1cm4gIShwZXJtICYmIHBlcm0udmlzaWJsZSA9PT0gZmFsc2UpO1xuICB9XG5cbiAgZ2V0IHNob3dSZXBvcnRPbkRlbWFuZEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignc2hvdy1yZXBvcnQtb24tZGVtYW5kJyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkQ29sdW1uc1Zpc2liaWxpdHlCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKCdzaG93LWhpZGUtY29sdW1ucycpO1xuICAgIHJldHVybiAhKHBlcm0gJiYgcGVybS5lbmFibGVkID09PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgc2hvd0ZpbHRlck1lbnUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKCdmaWx0ZXInKTtcbiAgICByZXR1cm4gdGhpcy5zaG93RmlsdGVyT3B0aW9uICYmICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkRmlsdGVyTWVudSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwZXJtOiBPUGVybWlzc2lvbnMgPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoJ2ZpbHRlcicpO1xuICAgIHJldHVybiAhKHBlcm0gJiYgcGVybS5lbmFibGVkID09PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgc2hvd0NvbmZpZ3VyYXRpb25NZW51KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignY29uZmlndXJhdGlvbicpO1xuICAgIHJldHVybiB0aGlzLnNob3dDb25maWd1cmF0aW9uT3B0aW9uICYmICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkQ29uZmlndXJhdGlvbk1lbnUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKCdjb25maWd1cmF0aW9uJyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLmVuYWJsZWQgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBzaG93R3JvdXBCeUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93R3JvdXBCeU9wdGlvbjtcbiAgfVxuXG4gIGdldCBzaG93Q2hhcnRzT25EZW1hbmRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNob3dDaGFydHNPbkRlbWFuZE9wdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwZXJtOiBPUGVybWlzc2lvbnMgPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoJ3Nob3ctY2hhcnQtb24tZGVtYW5kJyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcblxuICB9XG5cbiAgb25TaG93c1NlbGVjdHMoKSB7XG4gICAgY29uc3QgdGFibGVPcHRpb25zID0gdGhpcy50YWJsZS5vVGFibGVPcHRpb25zO1xuICAgIHRhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSA9ICF0YWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGU7XG4gICAgdGhpcy50YWJsZS5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgfVxuXG4gIG9uRXhwb3J0QnV0dG9uQ2xpY2tlZCgpIHtcbiAgICB0aGlzLmV4cG9ydERhdGFQcm92aWRlci5pbml0aWFsaXplUHJvdmlkZXIodGhpcy50YWJsZSk7XG5cbiAgICB0aGlzLmRpYWxvZy5vcGVuKE9UYWJsZUV4cG9ydERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICB2aXNpYmxlQnV0dG9uczogdGhpcy50YWJsZS52aXNpYmxlRXhwb3J0RGlhbG9nQnV0dG9ucyxcbiAgICAgICAgc2VydmljZTogdGhpcy50YWJsZS5zZXJ2aWNlLFxuICAgICAgICBzZXJ2aWNlVHlwZTogdGhpcy50YWJsZS5leHBvcnRTZXJ2aWNlVHlwZSxcbiAgICAgICAgb3B0aW9uczogdGhpcy50YWJsZS5leHBvcnRPcHRzVGVtcGxhdGVcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ28tZGlhbG9nLWNsYXNzJywgJ28tdGFibGUtZGlhbG9nJ11cbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2hhbmdlQ29sdW1uc1Zpc2liaWxpdHlDbGlja2VkKCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oT1RhYmxlVmlzaWJsZUNvbHVtbnNEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGFibGU6IHRoaXMudGFibGVcbiAgICAgIH0sXG4gICAgICBtYXhXaWR0aDogJzM1dncnLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgcGFuZWxDbGFzczogWydvLWRpYWxvZy1jbGFzcycsICdvLXRhYmxlLWRpYWxvZyddXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChyZXN1bHQpKSB7XG4gICAgICAgIHRoaXMudGFibGUudmlzaWJsZUNvbEFycmF5ID0gcmVzdWx0LnZpc2libGVDb2xBcnJheTtcbiAgICAgICAgY29uc3QgY29sdW1uc09yZGVyID0gcmVzdWx0LmNvbHVtbnNPcmRlcjtcbiAgICAgICAgdGhpcy50YWJsZS5vVGFibGVPcHRpb25zLmNvbHVtbnMuc29ydCgoYTogT0NvbHVtbiwgYjogT0NvbHVtbikgPT4gY29sdW1uc09yZGVyLmluZGV4T2YoYS5hdHRyKSAtIGNvbHVtbnNPcmRlci5pbmRleE9mKGIuYXR0cikpO1xuXG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChyZXN1bHQuc29ydENvbHVtbnMpKSB7XG4gICAgICAgICAgdGhpcy50YWJsZS5yZWluaXRpYWxpemVTb3J0Q29sdW1ucyhyZXN1bHQuc29ydENvbHVtbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHJlc3VsdC5ncm91cENvbHVtbnMpKSB7XG4gICAgICAgICAgdGhpcy50YWJsZS5zZXRHcm91cENvbHVtbnMocmVzdWx0Lmdyb3VwQ29sdW1ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0LmNvbHVtblZhbHVlRmlsdGVyc1RvUmVtb3ZlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnRhYmxlLmNsZWFyQ29sdW1uRmlsdGVycyhmYWxzZSwgcmVzdWx0LmNvbHVtblZhbHVlRmlsdGVyc1RvUmVtb3ZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFibGUuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnRhYmxlLnJlZnJlc2hDb2x1bW5zV2lkdGhGcm9tTG9jYWxTdG9yYWdlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkdyb3VwQnlDbGlja2VkKCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oT1RhYmxlR3JvdXBCeUNvbHVtbnNEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZ3JvdXBlZENvbHVtbnM6IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheSxcbiAgICAgICAgY29sdW1uc0RhdGE6IHRoaXMudGFibGUub1RhYmxlT3B0aW9ucy5jb2x1bW5zLFxuICAgICAgICByb3dIZWlnaHQ6IHRoaXMudGFibGUucm93SGVpZ2h0LFxuICAgICAgICBncm91cGVkQ29sdW1uVHlwZXM6IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtblR5cGVzXG4gICAgICB9LFxuICAgICAgaGVpZ2h0OiAnNzV2aCcsXG4gICAgICB3aWR0aDogJzUwdncnLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgcGFuZWxDbGFzczogWydvLWRpYWxvZy1jbGFzcycsICdvLXRhYmxlLWRpYWxvZycsICdvLXRhYmxlLWdyb3VwLWJ5LWNvbHVtbi1kaWFsb2cnXVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMudGFibGUuc2V0R3JvdXBlZENvbHVtblR5cGVzKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRHcm91cGVkQ29sdW1uVHlwZXMoKSk7XG4gICAgICAgIHRoaXMudGFibGUuc2V0R3JvdXBDb2x1bW5zKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRHcm91cGVkQ29sdW1ucygpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRmlsdGVyQnlDb2x1bW5DbGlja2VkKCkge1xuICAgIGlmICh0aGlzLnRhYmxlLmlzQ29sdW1uRmlsdGVyc0FjdGl2ZSAmJiB0aGlzLnRhYmxlLmRhdGFTb3VyY2UuaXNDb2x1bW5WYWx1ZUZpbHRlckFjdGl2ZSgpKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybSgnQ09ORklSTScsICdNRVNTQUdFUy5DT05GSVJNX0RJU0NBUkRfRklMVEVSX0JZX0NPTFVNTicpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMudGFibGUuY2xlYXJDb2x1bW5GaWx0ZXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZS5pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSAhcmVzO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFibGUuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gIXRoaXMudGFibGUuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblN0b3JlRmlsdGVyQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE9TdG9yZUZpbHRlckRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogdGhpcy50YWJsZS5zdGF0ZS5zdG9yZWRGaWx0ZXJzLm1hcChmaWx0ZXIgPT4gZmlsdGVyLm5hbWUpLFxuICAgICAgd2lkdGg6ICdjYWxjKCg3NWVtIC0gMTAwJSkgKiAxMDAwKScsXG4gICAgICBtYXhXaWR0aDogJzY1dncnLFxuICAgICAgbWluV2lkdGg6ICczMHZ3JyxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIHBhbmVsQ2xhc3M6IFsnby1kaWFsb2ctY2xhc3MnLCAnby10YWJsZS1kaWFsb2cnXVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMudGFibGUuc3RvcmVGaWx0ZXJJblN0YXRlKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRGaWx0ZXJBdHRyaWJ1dGVzKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uTG9hZEZpbHRlckNsaWNrZWQoKTogdm9pZCB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihPTG9hZEZpbHRlckRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogdGhpcy50YWJsZS5zdGF0ZS5zdG9yZWRGaWx0ZXJzLFxuICAgICAgd2lkdGg6ICdjYWxjKCg3NWVtIC0gMTAwJSkgKiAxMDAwKScsXG4gICAgICBtYXhXaWR0aDogJzY1dncnLFxuICAgICAgbWluV2lkdGg6ICczMHZ3JyxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIHBhbmVsQ2xhc3M6IFsnby1kaWFsb2ctY2xhc3MnLCAnby10YWJsZS1kaWFsb2cnXVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uRGVsZXRlLnN1YnNjcmliZShmaWx0ZXJOYW1lID0+IHRoaXMudGFibGUuc3RhdGUuZGVsZXRlU3RvcmVkRmlsdGVyKGZpbHRlck5hbWUpKTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJOYW1lOiBzdHJpbmcgPSBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZ2V0U2VsZWN0ZWRGaWx0ZXJOYW1lKCk7XG4gICAgICAgIGlmIChzZWxlY3RlZEZpbHRlck5hbWUpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlLnN0YXRlLmFwcGx5RmlsdGVyKHNlbGVjdGVkRmlsdGVyTmFtZSk7XG4gICAgICAgICAgdGhpcy50YWJsZS5zZXRGaWx0ZXJzQ29uZmlndXJhdGlvbigpO1xuICAgICAgICAgIHRoaXMudGFibGUucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2xlYXJGaWx0ZXJDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKCdDT05GSVJNJywgJ1RBQkxFLkRJQUxPRy5DT05GSVJNX0NMRUFSX0ZJTFRFUicpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy50YWJsZS5jbGVhckZpbHRlcnMoKTtcbiAgICAgICAgdGhpcy50YWJsZS5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgb25DaGFydHNPbkRlbWFuZENsaWNrZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hhcnRPbkRlbWFuZFNlcnZpY2UpIHtcbiAgICAgIHRoaXMuY2hhcnRPbkRlbWFuZFNlcnZpY2Uub3BlbkNoYXJ0T25EZW1hbmQodGhpcy50YWJsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcIllvdSBtdXN0IGhhdmUgb250aW1pemUtd2ViLW5neC1jaGFydHMgaW5zdGFsbGVkIGluIHlvdXIgYXBwIHRvIHVzZSBjaGFydHMgb24gZGVtYW5kLlwiKVxuICAgIH1cbiAgfVxuICBvblJlc2V0V2lkdGhDbGlja2VkKCkge1xuICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKCdDT05GSVJNJywgJ1RBQkxFLkRJQUxPRy5DT05GSVJNX1JFU0VUX1dJRFRIJykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnRhYmxlLnJlc2V0Q29sdW1uc1dpZHRoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblJlcG9ydE9uRGVtYW5kQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXBvcnRTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnJlcG9ydFNlcnZpY2Uub3BlblJlcG9ydE9uRGVtYW5kKHRoaXMudGFibGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJZb3UgbXVzdCBoYXZlIG9udGltaXplLXdlYi1uZ3gtcmVwb3J0LW9uLWRlbWFuZCBpbnN0YWxsZWQgaW4geW91ciBhcHAgdG8gdXNlIHJlcG9ydCBvbiBkZW1hbmQuXCIpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uU3RvcmVDb25maWd1cmF0aW9uQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE9UYWJsZVN0b3JlQ29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICdjYWxjKCg3NWVtIC0gMTAwJSkgKiAxMDAwKScsXG4gICAgICBtYXhXaWR0aDogJzY1dncnLFxuICAgICAgbWluV2lkdGg6ICczMHZ3JyxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIHBhbmVsQ2xhc3M6IFsnby1kaWFsb2ctY2xhc3MnLCAnby10YWJsZS1kaWFsb2cnXVxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uRGF0YSA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRDb25maWd1cmF0aW9uQXR0cmlidXRlcygpO1xuICAgICAgICBjb25zdCB0YWJsZVByb3BlcnRpZXMgPSBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZ2V0U2VsZWN0ZWRUYWJsZVByb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy50YWJsZS5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RvcmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb25EYXRhLCB0YWJsZVByb3BlcnRpZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQXBwbHlDb25maWd1cmF0aW9uQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE9UYWJsZUFwcGx5Q29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogdGhpcy50YWJsZS5zdGF0ZS5zdG9yZWRDb25maWd1cmF0aW9ucyxcbiAgICAgIHdpZHRoOiAnY2FsYygoNzVlbSAtIDEwMCUpICogMTAwMCknLFxuICAgICAgbWF4V2lkdGg6ICc2NXZ3JyxcbiAgICAgIG1pbldpZHRoOiAnMzB2dycsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ28tZGlhbG9nLWNsYXNzJywgJ28tdGFibGUtZGlhbG9nJ11cbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25EZWxldGUuc3Vic2NyaWJlKGNvbmZpZ3VyYXRpb25OYW1lID0+IHRoaXMudGFibGUuc3RhdGUuZGVsZXRlU3RvcmVkQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uTmFtZSkpO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCAmJiBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuaXNEZWZhdWx0Q29uZmlndXJhdGlvblNlbGVjdGVkKCkpIHtcbiAgICAgICAgdGhpcy50YWJsZS5zdGF0ZS5yZXNldCh0aGlzLnRhYmxlLnBhZ2VhYmxlKTtcbiAgICAgICAgdGhpcy50YWJsZS5hcHBseURlZmF1bHRDb25maWd1cmF0aW9uKCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmcgPSBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZ2V0U2VsZWN0ZWRDb25maWd1cmF0aW9uTmFtZSgpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRDb25maWd1cmF0aW9uTmFtZSkge1xuICAgICAgICAgIHRoaXMudGFibGUuc3RhdGUuYXBwbHlDb25maWd1cmF0aW9uKHNlbGVjdGVkQ29uZmlndXJhdGlvbk5hbWUpO1xuICAgICAgICAgIHRoaXMudGFibGUuYXBwbHlDb25maWd1cmF0aW9uKHNlbGVjdGVkQ29uZmlndXJhdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIHgtcG9zaXRpb249XCJiZWZvcmVcIiBbY2xhc3NdPVwiKHJvd0hlaWdodE9ic2VydmFibGUgfCBhc3luYykgKycgby10YWJsZS1tZW51J1wiPlxuICA8IS0tIERFRkFVTFQgT1BUSU9OUyAtLT5cbiAgPG8tdGFibGUtb3B0aW9uICNzZWxlY3RBbGxDaGVja2JveE9wdGlvbiAqbmdJZj1cInNob3dTZWxlY3RBbGxDaGVja2JveFwiIFthY3RpdmVdPVwiaXNTZWxlY3RBbGxPcHRpb25BY3RpdmVcIiAob25DbGljayk9XCJvblNob3dzU2VsZWN0cygpXCJcbiAgICBsYWJlbD1cIlRBQkxFLkJVVFRPTlMuU0VMRUNUXCIgc2hvdy1jaGVja2JveC1vcHRpb249XCJ0cnVlXCI+PC9vLXRhYmxlLW9wdGlvbj5cbiAgPG8tdGFibGUtb3B0aW9uICNjb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbk9wdGlvbiAqbmdJZj1cInNob3dDb2x1bW5zVmlzaWJpbGl0eUJ1dHRvblwiIChvbkNsaWNrKT1cIm9uQ2hhbmdlQ29sdW1uc1Zpc2liaWxpdHlDbGlja2VkKClcIlxuICAgIGxhYmVsPVwiVEFCTEUuQlVUVE9OUy5DT0xWSVNcIj48L28tdGFibGUtb3B0aW9uPlxuICA8by10YWJsZS1vcHRpb24gKm5nSWY9XCJzaG93UmVzZXRXaWR0aE9wdGlvblwiIChvbkNsaWNrKT1cIm9uUmVzZXRXaWR0aENsaWNrZWQoKVwiIGxhYmVsPVwiVEFCTEUuQlVUVE9OUy5SRVNFVFdJRFRIXCI+PC9vLXRhYmxlLW9wdGlvbj5cblxuICA8bWF0LWRpdmlkZXIgKm5nSWY9XCJzaG93U2VsZWN0QWxsQ2hlY2tib3ggfHwgc2hvd0NvbHVtbnNWaXNpYmlsaXR5QnV0dG9uIHx8IHNob3dSZXNldFdpZHRoT3B0aW9uXCI+PC9tYXQtZGl2aWRlcj5cblxuICA8by10YWJsZS1vcHRpb24gI2V4cG9ydEJ1dHRvbk9wdGlvbiAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIiAob25DbGljayk9XCJvbkV4cG9ydEJ1dHRvbkNsaWNrZWQoKVwiIGxhYmVsPVwiVEFCTEUuQlVUVE9OUy5FWFBPUlRcIj48L28tdGFibGUtb3B0aW9uPlxuICA8by10YWJsZS1vcHRpb24gKG9uQ2xpY2spPVwib25SZXBvcnRPbkRlbWFuZENsaWNrZWQoKVwiIGxhYmVsPVwiVEFCTEUuQlVUVE9OUy5SRVBPUlRfT05fREVNQU5EXCIgKm5nSWY9XCJzaG93UmVwb3J0T25EZW1hbmRCdXR0b25cIj48L28tdGFibGUtb3B0aW9uPlxuICA8by10YWJsZS1vcHRpb24gKm5nSWY9XCJzaG93Q2hhcnRzT25EZW1hbmRCdXR0b25cIiAob25DbGljayk9XCJvbkNoYXJ0c09uRGVtYW5kQ2xpY2tlZCgpXCIgbGFiZWw9XCJUQUJMRS5CVVRUT05TLkNIQVJUX09OX0RFTUFORFwiPjwvby10YWJsZS1vcHRpb24+XG4gIDxtYXQtZGl2aWRlciAqbmdJZj1cIiBzaG93RXhwb3J0QnV0dG9uIHx8IHNob3dSZXBvcnRPbkRlbWFuZEJ1dHRvbiB8fCBzaG93Q2hhcnRzT25EZW1hbmRCdXR0b25cIj48L21hdC1kaXZpZGVyPlxuXG4gIDxvLXRhYmxlLW9wdGlvbiAjY29sdW1uc0dyb3VwQnlPcHRpb24gKm5nSWY9XCJzaG93R3JvdXBCeUJ1dHRvblwiIChvbkNsaWNrKT1cIm9uR3JvdXBCeUNsaWNrZWQoKVwiIGxhYmVsPVwiVEFCTEUuQlVUVE9OUy5HUk9VUEJZXCI+PC9vLXRhYmxlLW9wdGlvbj5cblxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjZmlsdGVyTWVudUJ1dHRvbiAqbmdJZj1cInNob3dGaWx0ZXJNZW51XCIgbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZmlsdGVyTWVudVwiPnt7XG4gICAgJ1RBQkxFLkJVVFRPTlMuRklMVEVSJyB8IG9UcmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgI2NvbmZpZ3VyYXRpb25NZW51QnV0dG9uICpuZ0lmPVwic2hvd0NvbmZpZ3VyYXRpb25NZW51XCIgbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY29uZmlndXJhdGlvbk1lbnVcIj57e1xuICAgICdUQUJMRS5CVVRUT05TLkNPTkZJR1VSQVRJT04nIHwgb1RyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L21hdC1tZW51PlxuXG48bWF0LW1lbnUgI2ZpbHRlck1lbnU9XCJtYXRNZW51XCIgW2NsYXNzXT1cIihyb3dIZWlnaHRPYnNlcnZhYmxlfCBhc3luYykgKycgby10YWJsZS1tZW51J1wiPlxuICA8by10YWJsZS1vcHRpb24gI2NvbHVtbkZpbHRlck9wdGlvbiBzaG93LWNoZWNrYm94LW9wdGlvbj1cInRydWVcIiBbYWN0aXZlXT1cImlzQ29sdW1uRmlsdGVyT3B0aW9uQWN0aXZlXCIgKG9uQ2xpY2spPVwib25GaWx0ZXJCeUNvbHVtbkNsaWNrZWQoKVwiXG4gICAgbGFiZWw9XCJUQUJMRS5CVVRUT05TLkZJTFRFUl9CWV9DT0xVTU5cIj5cbiAgPC9vLXRhYmxlLW9wdGlvbj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25TdG9yZUZpbHRlckNsaWNrZWQoKVwiPnt7ICdUQUJMRS5CVVRUT05TLkZJTFRFUl9TQVZFJyB8IG9UcmFuc2xhdGVcbiAgICB9fTwvYnV0dG9uPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvbkxvYWRGaWx0ZXJDbGlja2VkKClcIj57eyAnVEFCTEUuQlVUVE9OUy5GSUxURVJfTE9BRCcgfCBvVHJhbnNsYXRlXG4gICAgfX08L2J1dHRvbj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25DbGVhckZpbHRlckNsaWNrZWQoKVwiPnt7ICdUQUJMRS5CVVRUT05TLkZJTFRFUl9DTEVBUicgfCBvVHJhbnNsYXRlXG4gICAgfX08L2J1dHRvbj5cbjwvbWF0LW1lbnU+XG5cbjxtYXQtbWVudSAjY29uZmlndXJhdGlvbk1lbnU9XCJtYXRNZW51XCIgW2NsYXNzXT1cIihyb3dIZWlnaHRPYnNlcnZhYmxlIHwgYXN5bmMpICsnIG8tdGFibGUtbWVudSdcIj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25TdG9yZUNvbmZpZ3VyYXRpb25DbGlja2VkKClcIj57eyAnVEFCTEUuQlVUVE9OUy5TQVZFX0NPTkZJR1VSQVRJT04nIHxcbiAgICBvVHJhbnNsYXRlIH19PC9idXR0b24+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uQXBwbHlDb25maWd1cmF0aW9uQ2xpY2tlZCgpXCI+e3sgJ1RBQkxFLkJVVFRPTlMuQVBQTFlfQ09ORklHVVJBVElPTicgfFxuICAgIG9UcmFuc2xhdGUgfX08L2J1dHRvbj5cbjwvbWF0LW1lbnU+XG4iXX0=
482
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLW1lbnUvby10YWJsZS1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLW1lbnUvby10YWJsZS1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFHUixRQUFRLEVBQ1IsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRWpELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBSWxGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUNsSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDMUYsT0FBTyxFQUFFLDBCQUEw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QixrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsb0JBQW9CO2dCQUcvQixTQUFTO3NCQURSLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRNZW51IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBJQ2hhcnRPbkRlbWFuZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2NoYXJ0LW9uLWRlbWFuZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVNZW51IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtb24tZGVtYW5kLXNlcnZpY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBPX0NIQVJUX09OX0RFTUFORF9TRVJWSUNFLCBPX1JFUE9SVF9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IE9udGltaXplRXhwb3J0RGF0YVByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL29udGltaXplLWV4cG9ydC1kYXRhLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU25hY2tCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvc25hY2tiYXIuc2VydmljZSc7XG5pbXBvcnQgeyBPVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS9vLXRyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9Mb2FkRmlsdGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvZmlsdGVyL2xvYWQtZmlsdGVyL28tbG9hZC1maWx0ZXItZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPU3RvcmVGaWx0ZXJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9maWx0ZXIvc3RvcmUtZmlsdGVyL28tc3RvcmUtZmlsdGVyLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUgeyBPUGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy9vLXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVNZW51UGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLW1lbnUtcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB0eXBlIHsgT0NvbHVtbiB9IGZyb20gJy4uLy4uLy4uL2NvbHVtbi9vLWNvbHVtbi5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVCYXNlIH0gZnJvbSAnLi4vLi4vLi4vby10YWJsZS1iYXNlLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUdyb3VwQnlDb2x1bW5zRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGlhbG9nJztcbmltcG9ydCB7IE9UYWJsZUFwcGx5Q29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RpYWxvZy9hcHBseS1jb25maWd1cmF0aW9uL28tdGFibGUtYXBwbHktY29uZmlndXJhdGlvbi1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUV4cG9ydERpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RpYWxvZy9leHBvcnQvby10YWJsZS1leHBvcnQtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVTdG9yZUNvbmZpZ3VyYXRpb25EaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kaWFsb2cvc3RvcmUtY29uZmlndXJhdGlvbi9vLXRhYmxlLXN0b3JlLWNvbmZpZ3VyYXRpb24tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVWaXNpYmxlQ29sdW1uc0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RpYWxvZy92aXNpYmxlLWNvbHVtbnMvby10YWJsZS12aXNpYmxlLWNvbHVtbnMtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi90YWJsZS1vcHRpb24vby10YWJsZS1vcHRpb24uY29tcG9uZW50JztcblxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UQUJMRV9NRU5VID0gW1xuICAvLyBzZWxlY3QtYWxsLWNoZWNrYm94IFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgc2VsZWN0aW9uIGNoZWNrIGJveGVzLiBEZWZhdWx0OiBuby5cbiAgJ3NlbGVjdEFsbENoZWNrYm94OiBzZWxlY3QtYWxsLWNoZWNrYm94JyxcblxuICAvLyBleHBvcnQtYnV0dG9uIFtub3x5ZXNdOiBzaG93IGV4cG9ydCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgJ2V4cG9ydEJ1dHRvbjogZXhwb3J0LWJ1dHRvbicsXG5cbiAgLy8gY29sdW1ucy12aXNpYmlsaXR5LWJ1dHRvbiBbbm98eWVzXTogc2hvdyBjb2x1bW5zIHZpc2liaWxpdHkgYnV0dG9uLiBEZWZhdWx0OiB5ZXMuXG4gICdjb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbjogY29sdW1ucy12aXNpYmlsaXR5LWJ1dHRvbicsXG5cbiAgLy8gc2hvdy1jb25maWd1cmF0aW9uLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IGNvbmZpZ3VyYXRpb24gYnV0dG9uIGluIGhlYWRlci4gRGVmYXVsdDogeWVzLlxuICAnc2hvd0NvbmZpZ3VyYXRpb25PcHRpb246IHNob3ctY29uZmlndXJhdGlvbi1vcHRpb24nLFxuXG4gIC8vIHNob3ctZmlsdGVyLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IGZpbHRlciBtZW51IG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dGaWx0ZXJPcHRpb246IHNob3ctZmlsdGVyLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1ncm91cC1ieS1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBncm91cCBieSBtZW51IG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dHcm91cEJ5T3B0aW9uOiBzaG93LWdyb3VwLWJ5LW9wdGlvbicsXG5cbiAgLy8gc2hvdy1yZXNldC13aWR0aC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyByZXNldCB3aWR0aCBtZW51IG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dSZXNldFdpZHRoT3B0aW9uOiBzaG93LXJlc2V0LXdpZHRoLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1yZXBvcnQtb24tZGVtYW5kLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHJlcG9ydCBvbiBkZW1hbmQgb3B0aW9uIGluIHRoZSBoZWFkZXIgbWVudVxuICAnc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uOiBzaG93LXJlcG9ydC1vbi1kZW1hbmQtb3B0aW9uJyxcblxuICAvLyBzaG93LWNoYXJ0cy1vbi1kZW1hbmQtb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgY2hhcnRzIG9uIGRlbWFuZCBvcHRpb24gaW4gdGhlIGhlYWRlciBtZW51XG4gICdzaG93Q2hhcnRzT25EZW1hbmRPcHRpb246IHNob3ctY2hhcnRzLW9uLWRlbWFuZC1vcHRpb24nXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fVEFCTEVfTUVOVSA9IFtdO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vby10YWJsZS1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vby10YWJsZS1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UQUJMRV9NRU5VLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19UQUJMRV9NRU5VLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLXRhYmxlLW1lbnVdJzogJ3RydWUnXG4gIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE9UYWJsZU1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPVGFibGVNZW51LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgLyogSW5wdXRzICovXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzZWxlY3RBbGxDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDb25maWd1cmF0aW9uT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dGaWx0ZXJPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgY29sdW1uc1Zpc2liaWxpdHlCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd0dyb3VwQnlPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1Jlc2V0V2lkdGhPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDaGFydHNPbkRlbWFuZE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cblxuICBwdWJsaWMgb25WaXNpYmxlRmlsdGVyT3B0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLyogRW5kIG9mIGlucHV0cyAqL1xuXG4gIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgdHJhbnNsYXRlU2VydmljZTogT1RyYW5zbGF0ZVNlcnZpY2U7XG4gIHByb3RlY3RlZCBzbmFja0JhclNlcnZpY2U6IFNuYWNrQmFyU2VydmljZTtcblxuICBAVmlld0NoaWxkKCdtZW51JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgbWF0TWVudTogTWF0TWVudTtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0QWxsQ2hlY2tib3hPcHRpb24nKVxuICBzZWxlY3RBbGxDaGVja2JveE9wdGlvbjogT1RhYmxlT3B0aW9uQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdleHBvcnRCdXR0b25PcHRpb24nKVxuICBleHBvcnRCdXR0b25PcHRpb246IE9UYWJsZU9wdGlvbkNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY29sdW1uc1Zpc2liaWxpdHlCdXR0b25PcHRpb24nKVxuICBjb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbk9wdGlvbjogT1RhYmxlT3B0aW9uQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdmaWx0ZXJNZW51QnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGZpbHRlck1lbnVCdXR0b246IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvbmZpZ3VyYXRpb25NZW51QnV0dG9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIGNvbmZpZ3VyYXRpb25NZW51QnV0dG9uOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlck1lbnUnKVxuICBmaWx0ZXJNZW51OiBNYXRNZW51O1xuICBAVmlld0NoaWxkKCdjb25maWd1cmF0aW9uTWVudScpXG4gIGNvbmZpZ3VyYXRpb25NZW51OiBNYXRNZW51O1xuICBAVmlld0NoaWxkKCdjb2x1bW5GaWx0ZXJPcHRpb24nKVxuICBjb2x1bW5GaWx0ZXJPcHRpb246IE9UYWJsZU9wdGlvbkNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnY2hhcnRNZW51JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgY2hhcnRNZW51OiBNYXRNZW51O1xuXG4gIHByb3RlY3RlZCBwZXJtaXNzaW9uczogT1RhYmxlTWVudVBlcm1pc3Npb25zO1xuICBwcm90ZWN0ZWQgbXV0YXRpb25PYnNlcnZlcnM6IE11dGF0aW9uT2JzZXJ2ZXJbXSA9IFtdO1xuICBwcm90ZWN0ZWQgZXhwb3J0RGF0YVByb3ZpZGVyOiBPbnRpbWl6ZUV4cG9ydERhdGFQcm92aWRlclNlcnZpY2U7XG5cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBPVGFibGVCYXNlKSkgcHJvdGVjdGVkIHRhYmxlOiBPVGFibGVCYXNlLFxuXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChPX0NIQVJUX09OX0RFTUFORF9TRVJWSUNFKSBwdWJsaWMgY2hhcnRPbkRlbWFuZFNlcnZpY2U6IElDaGFydE9uRGVtYW5kU2VydmljZSxcblxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoT19SRVBPUlRfU0VSVklDRSkgcHVibGljIHJlcG9ydFNlcnZpY2U6IElSZXBvcnRTZXJ2aWNlXG5cbiAgKSB7XG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoRGlhbG9nU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoT1RyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoU25hY2tCYXJTZXJ2aWNlKTtcbiAgICB0aGlzLmV4cG9ydERhdGFQcm92aWRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9udGltaXplRXhwb3J0RGF0YVByb3ZpZGVyU2VydmljZSlcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGVybWlzc2lvbnMgPSB0aGlzLnRhYmxlLmdldE1lbnVQZXJtaXNzaW9ucygpO1xuICB9XG5cbiAgZ2V0IGlzQ29sdW1uRmlsdGVyT3B0aW9uQWN0aXZlKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuXG4gICAgaWYgKCF0aGlzLnBlcm1pc3Npb25zLml0ZW1zIHx8IHRoaXMucGVybWlzc2lvbnMuaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdEFsbENoZWNrYm94T3B0aW9uICYmICF0aGlzLmVuYWJsZWRTZWxlY3RBbGxDaGVja2JveCkge1xuICAgICAgdGhpcy5kaXNhYmxlT1RhYmxlT3B0aW9uQ29tcG9uZW50KHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hPcHRpb24pO1xuICAgIH1cbiAgICBpZiAodGhpcy5leHBvcnRCdXR0b25PcHRpb24gJiYgIXRoaXMuZW5hYmxlZEV4cG9ydEJ1dHRvbikge1xuICAgICAgdGhpcy5kaXNhYmxlT1RhYmxlT3B0aW9uQ29tcG9uZW50KHRoaXMuZXhwb3J0QnV0dG9uT3B0aW9uKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29sdW1uc1Zpc2liaWxpdHlCdXR0b25PcHRpb24gJiYgIXRoaXMuZW5hYmxlZENvbHVtbnNWaXNpYmlsaXR5QnV0dG9uKSB7XG4gICAgICB0aGlzLmRpc2FibGVPVGFibGVPcHRpb25Db21wb25lbnQodGhpcy5jb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbk9wdGlvbik7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpbHRlck1lbnVCdXR0b24gJiYgIXRoaXMuZW5hYmxlZEZpbHRlck1lbnUpIHtcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbih0aGlzLmZpbHRlck1lbnVCdXR0b24pO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uTWVudUJ1dHRvbiAmJiAhdGhpcy5lbmFibGVkQ29uZmlndXJhdGlvbk1lbnUpIHtcbiAgICAgIHRoaXMuZGlzYWJsZUJ1dHRvbih0aGlzLmNvbmZpZ3VyYXRpb25NZW51QnV0dG9uKTtcbiAgICB9XG5cbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkaXNhYmxlT1RhYmxlT3B0aW9uQ29tcG9uZW50KGNvbXA6IE9UYWJsZU9wdGlvbkNvbXBvbmVudCkge1xuICAgIGNvbXAuZW5hYmxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGJ1dHRvbkVMID0gY29tcC5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuICAgIGNvbnN0IG9icyA9IFBlcm1pc3Npb25zVXRpbHMucmVnaXN0ZXJEaXNhYmxlZENoYW5nZXNJbkRvbShidXR0b25FTCk7XG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVycy5wdXNoKG9icyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGlzYWJsZUJ1dHRvbihidXR0b25FTDogRWxlbWVudFJlZikge1xuICAgIGJ1dHRvbkVMLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgIGNvbnN0IG9icyA9IFBlcm1pc3Npb25zVXRpbHMucmVnaXN0ZXJEaXNhYmxlZENoYW5nZXNJbkRvbShidXR0b25FTC5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJzLnB1c2gob2JzKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLm11dGF0aW9uT2JzZXJ2ZXJzKSB7XG4gICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJzLmZvckVhY2goKG06IE11dGF0aW9uT2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgbS5kaXNjb25uZWN0KCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9wdGlvbnMob1RhYmxlT3B0aW9uczogT1RhYmxlT3B0aW9uQ29tcG9uZW50W10pIHtcbiAgICBjb25zdCBpdGVtczogT1Blcm1pc3Npb25zW10gPSB0aGlzLnBlcm1pc3Npb25zLml0ZW1zIHx8IFtdO1xuICAgIGNvbnN0IGZpeGVkT3B0aW9ucyA9IFsnc2VsZWN0LWFsbC1jaGVja2JveCcsICdleHBvcnQnLCAnc2hvdy1oaWRlLWNvbHVtbnMnLCAnZmlsdGVyJywgJ2NvbmZpZ3VyYXRpb24nXTtcbiAgICBjb25zdCB1c2VySXRlbXM6IE9QZXJtaXNzaW9uc1tdID0gaXRlbXMuZmlsdGVyKChwZXJtOiBPUGVybWlzc2lvbnMpID0+IGZpeGVkT3B0aW9ucy5pbmRleE9mKHBlcm0uYXR0cikgPT09IC0xKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICB1c2VySXRlbXMuZm9yRWFjaCgocGVybTogT1Blcm1pc3Npb25zKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb24gPSBvVGFibGVPcHRpb25zLmZpbmQoKG9UYWJsZU9wdGlvbjogT1RhYmxlT3B0aW9uQ29tcG9uZW50KSA9PiBvVGFibGVPcHRpb24ub2F0dHIgPT09IHBlcm0uYXR0cik7XG4gICAgICBzZWxmLnNldFBlcm1pc3Npb25zVG9PVGFibGVPcHRpb24ocGVybSwgb3B0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRQZXJtaXNzaW9uc1RvT1RhYmxlT3B0aW9uKHBlcm06IE9QZXJtaXNzaW9ucywgb3B0aW9uOiBPVGFibGVPcHRpb25Db21wb25lbnQpIHtcbiAgICBpZiAocGVybS52aXNpYmxlID09PSBmYWxzZSAmJiBvcHRpb24pIHtcbiAgICAgIG9wdGlvbi5lbFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZSgpO1xuICAgIH0gZWxzZSBpZiAocGVybS5lbmFibGVkID09PSBmYWxzZSAmJiBvcHRpb24pIHtcbiAgICAgIG9wdGlvbi5lbmFibGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBidXR0b25FTCA9IG9wdGlvbi5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbicpO1xuICAgICAgY29uc3Qgb2JzID0gUGVybWlzc2lvbnNVdGlscy5yZWdpc3RlckRpc2FibGVkQ2hhbmdlc0luRG9tKGJ1dHRvbkVMKTtcbiAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlcnMucHVzaChvYnMpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBlcm1pc3Npb25CeUF0dHIoYXR0cjogc3RyaW5nKSB7XG4gICAgY29uc3QgaXRlbXM6IE9QZXJtaXNzaW9uc1tdID0gdGhpcy5wZXJtaXNzaW9ucy5pdGVtcyB8fCBbXTtcbiAgICByZXR1cm4gaXRlbXMuZmluZCgocGVybTogT1Blcm1pc3Npb25zKSA9PiBwZXJtLmF0dHIgPT09IGF0dHIpO1xuICB9XG5cbiAgZ2V0IGlzU2VsZWN0QWxsT3B0aW9uQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGU7XG4gIH1cblxuICBnZXQgc2hvd1NlbGVjdEFsbENoZWNrYm94KCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5zZWxlY3RBbGxDaGVja2JveCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwZXJtOiBPUGVybWlzc2lvbnMgPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoJ3NlbGVjdC1hbGwtY2hlY2tib3gnKTtcbiAgICByZXR1cm4gdGhpcy5zaG93RmlsdGVyT3B0aW9uICYmICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCByb3dIZWlnaHRPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUucm93SGVpZ2h0T2JzZXJ2YWJsZTtcbiAgfVxuICBnZXQgZW5hYmxlZFNlbGVjdEFsbENoZWNrYm94KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignc2VsZWN0LWFsbC1jaGVja2JveCcpO1xuICAgIHJldHVybiAhKHBlcm0gJiYgcGVybS5lbmFibGVkID09PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgc2hvd0V4cG9ydEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZXhwb3J0QnV0dG9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignZXhwb3J0Jyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkRXhwb3J0QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignZXhwb3J0Jyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLmVuYWJsZWQgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBzaG93Q29sdW1uc1Zpc2liaWxpdHlCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbnNWaXNpYmlsaXR5QnV0dG9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignc2hvdy1oaWRlLWNvbHVtbnMnKTtcbiAgICByZXR1cm4gIShwZXJtICYmIHBlcm0udmlzaWJsZSA9PT0gZmFsc2UpO1xuICB9XG5cbiAgZ2V0IHNob3dSZXBvcnRPbkRlbWFuZEJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignc2hvdy1yZXBvcnQtb24tZGVtYW5kJyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkQ29sdW1uc1Zpc2liaWxpdHlCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKCdzaG93LWhpZGUtY29sdW1ucycpO1xuICAgIHJldHVybiAhKHBlcm0gJiYgcGVybS5lbmFibGVkID09PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgc2hvd0ZpbHRlck1lbnUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKCdmaWx0ZXInKTtcbiAgICByZXR1cm4gdGhpcy5zaG93RmlsdGVyT3B0aW9uICYmICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkRmlsdGVyTWVudSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwZXJtOiBPUGVybWlzc2lvbnMgPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoJ2ZpbHRlcicpO1xuICAgIHJldHVybiAhKHBlcm0gJiYgcGVybS5lbmFibGVkID09PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgc2hvd0NvbmZpZ3VyYXRpb25NZW51KCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0UGVybWlzc2lvbkJ5QXR0cignY29uZmlndXJhdGlvbicpO1xuICAgIHJldHVybiB0aGlzLnNob3dDb25maWd1cmF0aW9uT3B0aW9uICYmICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBlbmFibGVkQ29uZmlndXJhdGlvbk1lbnUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGVybTogT1Blcm1pc3Npb25zID0gdGhpcy5nZXRQZXJtaXNzaW9uQnlBdHRyKCdjb25maWd1cmF0aW9uJyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLmVuYWJsZWQgPT09IGZhbHNlKTtcbiAgfVxuXG4gIGdldCBzaG93R3JvdXBCeUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93R3JvdXBCeU9wdGlvbjtcbiAgfVxuXG4gIGdldCBzaG93Q2hhcnRzT25EZW1hbmRCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnNob3dDaGFydHNPbkRlbWFuZE9wdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBwZXJtOiBPUGVybWlzc2lvbnMgPSB0aGlzLmdldFBlcm1pc3Npb25CeUF0dHIoJ3Nob3ctY2hhcnQtb24tZGVtYW5kJyk7XG4gICAgcmV0dXJuICEocGVybSAmJiBwZXJtLnZpc2libGUgPT09IGZhbHNlKTtcblxuICB9XG5cbiAgb25TaG93c1NlbGVjdHMoKSB7XG4gICAgY29uc3QgdGFibGVPcHRpb25zID0gdGhpcy50YWJsZS5vVGFibGVPcHRpb25zO1xuICAgIHRhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSA9ICF0YWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGU7XG4gICAgdGhpcy50YWJsZS5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgfVxuXG4gIG9uRXhwb3J0QnV0dG9uQ2xpY2tlZCgpIHtcbiAgICB0aGlzLmV4cG9ydERhdGFQcm92aWRlci5pbml0aWFsaXplUHJvdmlkZXIodGhpcy50YWJsZSk7XG5cbiAgICB0aGlzLmRpYWxvZy5vcGVuKE9UYWJsZUV4cG9ydERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YToge1xuICAgICAgICB2aXNpYmxlQnV0dG9uczogdGhpcy50YWJsZS52aXNpYmxlRXhwb3J0RGlhbG9nQnV0dG9ucyxcbiAgICAgICAgc2VydmljZTogdGhpcy50YWJsZS5zZXJ2aWNlLFxuICAgICAgICBzZXJ2aWNlVHlwZTogdGhpcy50YWJsZS5leHBvcnRTZXJ2aWNlVHlwZSxcbiAgICAgICAgb3B0aW9uczogdGhpcy50YWJsZS5leHBvcnRPcHRzVGVtcGxhdGVcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ28tZGlhbG9nLWNsYXNzJywgJ28tdGFibGUtZGlhbG9nJ11cbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2hhbmdlQ29sdW1uc1Zpc2liaWxpdHlDbGlja2VkKCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oT1RhYmxlVmlzaWJsZUNvbHVtbnNEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgdGFibGU6IHRoaXMudGFibGVcbiAgICAgIH0sXG4gICAgICBtYXhXaWR0aDogJzM1dncnLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgcGFuZWxDbGFzczogWydvLWRpYWxvZy1jbGFzcycsICdvLXRhYmxlLWRpYWxvZyddXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChyZXN1bHQpKSB7XG4gICAgICAgIHRoaXMudGFibGUudmlzaWJsZUNvbEFycmF5ID0gcmVzdWx0LnZpc2libGVDb2xBcnJheTtcbiAgICAgICAgY29uc3QgY29sdW1uc09yZGVyID0gcmVzdWx0LmNvbHVtbnNPcmRlcjtcbiAgICAgICAgdGhpcy50YWJsZS5vVGFibGVPcHRpb25zLmNvbHVtbnMuc29ydCgoYTogT0NvbHVtbiwgYjogT0NvbHVtbikgPT4gY29sdW1uc09yZGVyLmluZGV4T2YoYS5hdHRyKSAtIGNvbHVtbnNPcmRlci5pbmRleE9mKGIuYXR0cikpO1xuXG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChyZXN1bHQuc29ydENvbHVtbnMpKSB7XG4gICAgICAgICAgdGhpcy50YWJsZS5yZWluaXRpYWxpemVTb3J0Q29sdW1ucyhyZXN1bHQuc29ydENvbHVtbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHJlc3VsdC5ncm91cENvbHVtbnMpKSB7XG4gICAgICAgICAgdGhpcy50YWJsZS5zZXRHcm91cENvbHVtbnMocmVzdWx0Lmdyb3VwQ29sdW1ucyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzdWx0LmNvbHVtblZhbHVlRmlsdGVyc1RvUmVtb3ZlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnRhYmxlLmNsZWFyQ29sdW1uRmlsdGVycyhmYWxzZSwgcmVzdWx0LmNvbHVtblZhbHVlRmlsdGVyc1RvUmVtb3ZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFibGUuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnRhYmxlLnJlZnJlc2hDb2x1bW5zV2lkdGhGcm9tTG9jYWxTdG9yYWdlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkdyb3VwQnlDbGlja2VkKCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oT1RhYmxlR3JvdXBCeUNvbHVtbnNEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZ3JvdXBlZENvbHVtbnM6IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtbnNBcnJheSxcbiAgICAgICAgY29sdW1uc0RhdGE6IHRoaXMudGFibGUub1RhYmxlT3B0aW9ucy5jb2x1bW5zLFxuICAgICAgICByb3dIZWlnaHQ6IHRoaXMudGFibGUucm93SGVpZ2h0LFxuICAgICAgICBncm91cGVkQ29sdW1uVHlwZXM6IHRoaXMudGFibGUuZ3JvdXBlZENvbHVtblR5cGVzXG4gICAgICB9LFxuICAgICAgaGVpZ2h0OiAnNzV2aCcsXG4gICAgICB3aWR0aDogJzUwdncnLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgcGFuZWxDbGFzczogWydvLWRpYWxvZy1jbGFzcycsICdvLXRhYmxlLWRpYWxvZycsICdvLXRhYmxlLWdyb3VwLWJ5LWNvbHVtbi1kaWFsb2cnXVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMudGFibGUuc2V0R3JvdXBlZENvbHVtblR5cGVzKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRHcm91cGVkQ29sdW1uVHlwZXMoKSk7XG4gICAgICAgIHRoaXMudGFibGUuc2V0R3JvdXBDb2x1bW5zKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRHcm91cGVkQ29sdW1ucygpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRmlsdGVyQnlDb2x1bW5DbGlja2VkKCkge1xuICAgIGlmICh0aGlzLnRhYmxlLmlzQ29sdW1uRmlsdGVyc0FjdGl2ZSAmJiB0aGlzLnRhYmxlLmRhdGFTb3VyY2UuaXNDb2x1bW5WYWx1ZUZpbHRlckFjdGl2ZSgpKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybSgnQ09ORklSTScsICdNRVNTQUdFUy5DT05GSVJNX0RJU0NBUkRfRklMVEVSX0JZX0NPTFVNTicpLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIHRoaXMudGFibGUuY2xlYXJDb2x1bW5GaWx0ZXJzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZS5pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSAhcmVzO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGFibGUuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gIXRoaXMudGFibGUuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblN0b3JlRmlsdGVyQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE9TdG9yZUZpbHRlckRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogdGhpcy50YWJsZS5zdGF0ZS5zdG9yZWRGaWx0ZXJzLm1hcChmaWx0ZXIgPT4gZmlsdGVyLm5hbWUpLFxuICAgICAgd2lkdGg6ICdjYWxjKCg3NWVtIC0gMTAwJSkgKiAxMDAwKScsXG4gICAgICBtYXhXaWR0aDogJzY1dncnLFxuICAgICAgbWluV2lkdGg6ICczMHZ3JyxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIHBhbmVsQ2xhc3M6IFsnby1kaWFsb2ctY2xhc3MnLCAnby10YWJsZS1kaWFsb2cnXVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMudGFibGUuc3RvcmVGaWx0ZXJJblN0YXRlKGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRGaWx0ZXJBdHRyaWJ1dGVzKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uTG9hZEZpbHRlckNsaWNrZWQoKTogdm9pZCB7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihPTG9hZEZpbHRlckRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogdGhpcy50YWJsZS5zdGF0ZS5zdG9yZWRGaWx0ZXJzLFxuICAgICAgd2lkdGg6ICdjYWxjKCg3NWVtIC0gMTAwJSkgKiAxMDAwKScsXG4gICAgICBtYXhXaWR0aDogJzY1dncnLFxuICAgICAgbWluV2lkdGg6ICczMHZ3JyxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIHBhbmVsQ2xhc3M6IFsnby1kaWFsb2ctY2xhc3MnLCAnby10YWJsZS1kaWFsb2cnXVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uRGVsZXRlLnN1YnNjcmliZShmaWx0ZXJOYW1lID0+IHRoaXMudGFibGUuc3RhdGUuZGVsZXRlU3RvcmVkRmlsdGVyKGZpbHRlck5hbWUpKTtcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXJOYW1lOiBzdHJpbmcgPSBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZ2V0U2VsZWN0ZWRGaWx0ZXJOYW1lKCk7XG4gICAgICAgIGlmIChzZWxlY3RlZEZpbHRlck5hbWUpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlLnN0YXRlLmFwcGx5RmlsdGVyKHNlbGVjdGVkRmlsdGVyTmFtZSk7XG4gICAgICAgICAgdGhpcy50YWJsZS5zZXRGaWx0ZXJzQ29uZmlndXJhdGlvbigpO1xuICAgICAgICAgIHRoaXMudGFibGUucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uQ2xlYXJGaWx0ZXJDbGlja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKCdDT05GSVJNJywgJ1RBQkxFLkRJQUxPRy5DT05GSVJNX0NMRUFSX0ZJTFRFUicpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy50YWJsZS5jbGVhckZpbHRlcnMoKTtcbiAgICAgICAgdGhpcy50YWJsZS5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cbiAgb25DaGFydHNPbkRlbWFuZENsaWNrZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hhcnRPbkRlbWFuZFNlcnZpY2UpIHtcbiAgICAgIHRoaXMuY2hhcnRPbkRlbWFuZFNlcnZpY2Uub3BlbkNoYXJ0T25EZW1hbmQodGhpcy50YWJsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybihcIllvdSBtdXN0IGhhdmUgb250aW1pemUtd2ViLW5neC1jaGFydHMgaW5zdGFsbGVkIGluIHlvdXIgYXBwIHRvIHVzZSBjaGFydHMgb24gZGVtYW5kLlwiKVxuICAgIH1cbiAgfVxuICBvblJlc2V0V2lkdGhDbGlja2VkKCkge1xuICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKCdDT05GSVJNJywgJ1RBQkxFLkRJQUxPRy5DT05GSVJNX1JFU0VUX1dJRFRIJykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnRhYmxlLnJlc2V0Q29sdW1uc1dpZHRoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvblJlcG9ydE9uRGVtYW5kQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXBvcnRTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnJlcG9ydFNlcnZpY2Uub3BlblJlcG9ydE9uRGVtYW5kKHRoaXMudGFibGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJZb3UgbXVzdCBoYXZlIG9udGltaXplLXdlYi1uZ3gtcmVwb3J0LW9uLWRlbWFuZCBpbnN0YWxsZWQgaW4geW91ciBhcHAgdG8gdXNlIHJlcG9ydCBvbiBkZW1hbmQuXCIpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uU3RvcmVDb25maWd1cmF0aW9uQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE9UYWJsZVN0b3JlQ29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICdjYWxjKCg3NWVtIC0gMTAwJSkgKiAxMDAwKScsXG4gICAgICBtYXhXaWR0aDogJzY1dncnLFxuICAgICAgbWluV2lkdGg6ICczMHZ3JyxcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgIHBhbmVsQ2xhc3M6IFsnby1kaWFsb2ctY2xhc3MnLCAnby10YWJsZS1kaWFsb2cnXVxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uRGF0YSA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRDb25maWd1cmF0aW9uQXR0cmlidXRlcygpO1xuICAgICAgICBjb25zdCB0YWJsZVByb3BlcnRpZXMgPSBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZ2V0U2VsZWN0ZWRUYWJsZVByb3BlcnRpZXMoKTtcbiAgICAgICAgdGhpcy50YWJsZS5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RvcmVDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb25EYXRhLCB0YWJsZVByb3BlcnRpZXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uQXBwbHlDb25maWd1cmF0aW9uQ2xpY2tlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE9UYWJsZUFwcGx5Q29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgZGF0YTogdGhpcy50YWJsZS5zdGF0ZS5zdG9yZWRDb25maWd1cmF0aW9ucyxcbiAgICAgIHdpZHRoOiAnY2FsYygoNzVlbSAtIDEwMCUpICogMTAwMCknLFxuICAgICAgbWF4V2lkdGg6ICc2NXZ3JyxcbiAgICAgIG1pbldpZHRoOiAnMzB2dycsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ28tZGlhbG9nLWNsYXNzJywgJ28tdGFibGUtZGlhbG9nJ11cbiAgICB9KTtcbiAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25EZWxldGUuc3Vic2NyaWJlKGNvbmZpZ3VyYXRpb25OYW1lID0+IHRoaXMudGFibGUuc3RhdGUuZGVsZXRlU3RvcmVkQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uTmFtZSkpO1xuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCAmJiBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuaXNEZWZhdWx0Q29uZmlndXJhdGlvblNlbGVjdGVkKCkpIHtcbiAgICAgICAgdGhpcy50YWJsZS5zdGF0ZS5yZXNldCh0aGlzLnRhYmxlLnBhZ2VhYmxlKTtcbiAgICAgICAgdGhpcy50YWJsZS5hcHBseURlZmF1bHRDb25maWd1cmF0aW9uKCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmcgPSBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZ2V0U2VsZWN0ZWRDb25maWd1cmF0aW9uTmFtZSgpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRDb25maWd1cmF0aW9uTmFtZSkge1xuICAgICAgICAgIHRoaXMudGFibGUuc3RhdGUuYXBwbHlDb25maWd1cmF0aW9uKHNlbGVjdGVkQ29uZmlndXJhdGlvbk5hbWUpO1xuICAgICAgICAgIHRoaXMudGFibGUuYXBwbHlDb25maWd1cmF0aW9uKHNlbGVjdGVkQ29uZmlndXJhdGlvbk5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIHgtcG9zaXRpb249XCJiZWZvcmVcIiBbY2xhc3NdPVwiKHJvd0hlaWdodE9ic2VydmFibGUgfCBhc3luYykgKycgby10YWJsZS1tZW51IG8tbWF0LW1lbnUnXCI+XG4gIDwhLS0gREVGQVVMVCBPUFRJT05TIC0tPlxuICA8by10YWJsZS1vcHRpb24gI3NlbGVjdEFsbENoZWNrYm94T3B0aW9uICpuZ0lmPVwic2hvd1NlbGVjdEFsbENoZWNrYm94XCIgW2FjdGl2ZV09XCJpc1NlbGVjdEFsbE9wdGlvbkFjdGl2ZVwiIChvbkNsaWNrKT1cIm9uU2hvd3NTZWxlY3RzKClcIlxuICAgIGxhYmVsPVwiVEFCTEUuQlVUVE9OUy5TRUxFQ1RcIiBzaG93LWNoZWNrYm94LW9wdGlvbj1cInRydWVcIj48L28tdGFibGUtb3B0aW9uPlxuICA8by10YWJsZS1vcHRpb24gI2NvbHVtbnNWaXNpYmlsaXR5QnV0dG9uT3B0aW9uICpuZ0lmPVwic2hvd0NvbHVtbnNWaXNpYmlsaXR5QnV0dG9uXCIgKG9uQ2xpY2spPVwib25DaGFuZ2VDb2x1bW5zVmlzaWJpbGl0eUNsaWNrZWQoKVwiXG4gICAgbGFiZWw9XCJUQUJMRS5CVVRUT05TLkNPTFZJU1wiPjwvby10YWJsZS1vcHRpb24+XG4gIDxvLXRhYmxlLW9wdGlvbiAqbmdJZj1cInNob3dSZXNldFdpZHRoT3B0aW9uXCIgKG9uQ2xpY2spPVwib25SZXNldFdpZHRoQ2xpY2tlZCgpXCIgbGFiZWw9XCJUQUJMRS5CVVRUT05TLlJFU0VUV0lEVEhcIj48L28tdGFibGUtb3B0aW9uPlxuXG4gIDxtYXQtZGl2aWRlciAqbmdJZj1cInNob3dTZWxlY3RBbGxDaGVja2JveCB8fCBzaG93Q29sdW1uc1Zpc2liaWxpdHlCdXR0b24gfHwgc2hvd1Jlc2V0V2lkdGhPcHRpb25cIj48L21hdC1kaXZpZGVyPlxuXG4gIDxvLXRhYmxlLW9wdGlvbiAjZXhwb3J0QnV0dG9uT3B0aW9uICpuZ0lmPVwic2hvd0V4cG9ydEJ1dHRvblwiIChvbkNsaWNrKT1cIm9uRXhwb3J0QnV0dG9uQ2xpY2tlZCgpXCIgbGFiZWw9XCJUQUJMRS5CVVRUT05TLkVYUE9SVFwiPjwvby10YWJsZS1vcHRpb24+XG4gIDxvLXRhYmxlLW9wdGlvbiAob25DbGljayk9XCJvblJlcG9ydE9uRGVtYW5kQ2xpY2tlZCgpXCIgbGFiZWw9XCJUQUJMRS5CVVRUT05TLlJFUE9SVF9PTl9ERU1BTkRcIiAqbmdJZj1cInNob3dSZXBvcnRPbkRlbWFuZEJ1dHRvblwiPjwvby10YWJsZS1vcHRpb24+XG4gIDxvLXRhYmxlLW9wdGlvbiAqbmdJZj1cInNob3dDaGFydHNPbkRlbWFuZEJ1dHRvblwiIChvbkNsaWNrKT1cIm9uQ2hhcnRzT25EZW1hbmRDbGlja2VkKClcIiBsYWJlbD1cIlRBQkxFLkJVVFRPTlMuQ0hBUlRfT05fREVNQU5EXCI+PC9vLXRhYmxlLW9wdGlvbj5cbiAgPG1hdC1kaXZpZGVyICpuZ0lmPVwiIHNob3dFeHBvcnRCdXR0b24gfHwgc2hvd1JlcG9ydE9uRGVtYW5kQnV0dG9uIHx8IHNob3dDaGFydHNPbkRlbWFuZEJ1dHRvblwiPjwvbWF0LWRpdmlkZXI+XG5cbiAgPG8tdGFibGUtb3B0aW9uICNjb2x1bW5zR3JvdXBCeU9wdGlvbiAqbmdJZj1cInNob3dHcm91cEJ5QnV0dG9uXCIgKG9uQ2xpY2spPVwib25Hcm91cEJ5Q2xpY2tlZCgpXCIgbGFiZWw9XCJUQUJMRS5CVVRUT05TLkdST1VQQllcIj48L28tdGFibGUtb3B0aW9uPlxuXG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICNmaWx0ZXJNZW51QnV0dG9uICpuZ0lmPVwic2hvd0ZpbHRlck1lbnVcIiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJmaWx0ZXJNZW51XCI+e3tcbiAgICAnVEFCTEUuQlVUVE9OUy5GSUxURVInIHwgb1RyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAjY29uZmlndXJhdGlvbk1lbnVCdXR0b24gKm5nSWY9XCJzaG93Q29uZmlndXJhdGlvbk1lbnVcIiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb25maWd1cmF0aW9uTWVudVwiPnt7XG4gICAgJ1RBQkxFLkJVVFRPTlMuQ09ORklHVVJBVElPTicgfCBvVHJhbnNsYXRlIH19PC9idXR0b24+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbWF0LW1lbnU+XG5cbjxtYXQtbWVudSAjZmlsdGVyTWVudT1cIm1hdE1lbnVcIiBbY2xhc3NdPVwiKHJvd0hlaWdodE9ic2VydmFibGV8IGFzeW5jKSArJyBvLXRhYmxlLW1lbnUnXCI+XG4gIDxvLXRhYmxlLW9wdGlvbiAjY29sdW1uRmlsdGVyT3B0aW9uIHNob3ctY2hlY2tib3gtb3B0aW9uPVwidHJ1ZVwiIFthY3RpdmVdPVwiaXNDb2x1bW5GaWx0ZXJPcHRpb25BY3RpdmVcIiAob25DbGljayk9XCJvbkZpbHRlckJ5Q29sdW1uQ2xpY2tlZCgpXCJcbiAgICBsYWJlbD1cIlRBQkxFLkJVVFRPTlMuRklMVEVSX0JZX0NPTFVNTlwiPlxuICA8L28tdGFibGUtb3B0aW9uPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvblN0b3JlRmlsdGVyQ2xpY2tlZCgpXCI+e3sgJ1RBQkxFLkJVVFRPTlMuRklMVEVSX1NBVkUnIHwgb1RyYW5zbGF0ZVxuICAgIH19PC9idXR0b24+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uTG9hZEZpbHRlckNsaWNrZWQoKVwiPnt7ICdUQUJMRS5CVVRUT05TLkZJTFRFUl9MT0FEJyB8IG9UcmFuc2xhdGVcbiAgICB9fTwvYnV0dG9uPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvbkNsZWFyRmlsdGVyQ2xpY2tlZCgpXCI+e3sgJ1RBQkxFLkJVVFRPTlMuRklMVEVSX0NMRUFSJyB8IG9UcmFuc2xhdGVcbiAgICB9fTwvYnV0dG9uPlxuPC9tYXQtbWVudT5cblxuPG1hdC1tZW51ICNjb25maWd1cmF0aW9uTWVudT1cIm1hdE1lbnVcIiBbY2xhc3NdPVwiKHJvd0hlaWdodE9ic2VydmFibGUgfCBhc3luYykgKycgby10YWJsZS1tZW51J1wiPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJvblN0b3JlQ29uZmlndXJhdGlvbkNsaWNrZWQoKVwiPnt7ICdUQUJMRS5CVVRUT05TLlNBVkVfQ09ORklHVVJBVElPTicgfFxuICAgIG9UcmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwib25BcHBseUNvbmZpZ3VyYXRpb25DbGlja2VkKClcIj57eyAnVEFCTEUuQlVUVE9OUy5BUFBMWV9DT05GSUdVUkFUSU9OJyB8XG4gICAgb1RyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuPC9tYXQtbWVudT5cbiJdfQ==
@@ -187,12 +187,12 @@ export class OTableQuickfilterComponent {
187
187
  }
188
188
  }
189
189
  OTableQuickfilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableQuickfilterComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: forwardRef(() => OTableBase) }], target: i0.ɵɵFactoryTarget.Component });
190
- OTableQuickfilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTableQuickfilterComponent, selector: "o-table-quickfilter", inputs: { placeholder: "placeholder" }, outputs: { onChange: "onChange" }, host: { properties: { "class.o-table-quickfilter": "true" } }, viewQueries: [{ propertyName: "filter", first: true, predicate: ["filter"], descendants: true }, { propertyName: "matMenu", first: true, predicate: ["menu"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"quickFilter\" fxLayout=\"row\">\n\n <mat-form-field appearance=\"outline\">\n <input matInput #filter [formControl]=\"formControl\" (click)=\"$event.stopPropagation()\" placeholder=\"{{ placeholder | oTranslate }}\">\n <div matPrefix>\n <mat-icon svgIcon=\"ontimize:search\" [matBadge]=\"areAllColumnsChecked()?'':getCountColumnsChecked()\" matBadgeSize=\"small\"></mat-icon>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" (menuClosed)=\"onMenuClosed()\" (click)=\"$event.stopPropagation()\">\n <mat-icon class=\"search-icon\">expand_more</mat-icon>\n </button>\n </div>\n\n <mat-menu #menu=\"matMenu\" class=\"o-table-quickfilter-menu\">\n <div fxLayout=\"column\" class=\"checkbox-container\">\n\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"areAllColumnsChecked()\" (change)=\"onSelectAllChange($event)\">\n {{ 'SELECT_ALL' | oTranslate}}\n </mat-checkbox>\n <mat-divider></mat-divider>\n\n <ng-container *ngFor=\"let column of quickFilterColumns\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"isChecked(column)\" (change)=\"onCheckboxChange(column, $event)\">\n {{ column.title | oTranslate }}\n </mat-checkbox>\n </ng-container>\n\n <ng-container *ngIf=\"showCaseSensitiveCheckbox()\">\n <mat-divider></mat-divider>\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"oTableOptions.filterCaseSensitive\"\n (change)=\"oTableOptions.filterCaseSensitive = $event.checked\">\n {{ 'TABLE.FILTER.CASE_SENSITIVE' | oTranslate}}\n </mat-checkbox>\n </ng-container>\n </div>\n </mat-menu>\n </mat-form-field>\n</div>\n", styles: [".o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix{align-self:center;padding:0;min-height:30px;display:flex}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix{padding-left:10px;padding-right:10px}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div{align-items:center;display:flex}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div .mat-icon,.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div button{margin-right:6px}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div .mat-badge-content{background-color:#3c8500;width:14px;height:14px;line-height:14px;top:-4px;right:-4px}.o-table-quickfilter-menu .checkbox-container{padding:6px 12px}.o-table-quickfilter-menu .checkbox-container .mat-divider{margin:8px 0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i11.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "pipe", type: i12.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
190
+ OTableQuickfilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTableQuickfilterComponent, selector: "o-table-quickfilter", inputs: { placeholder: "placeholder" }, outputs: { onChange: "onChange" }, host: { properties: { "class.o-table-quickfilter": "true" } }, viewQueries: [{ propertyName: "filter", first: true, predicate: ["filter"], descendants: true }, { propertyName: "matMenu", first: true, predicate: ["menu"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"quickFilter\" fxLayout=\"row\">\n\n <mat-form-field appearance=\"outline\">\n <input matInput #filter [formControl]=\"formControl\" (click)=\"$event.stopPropagation()\" placeholder=\"{{ placeholder | oTranslate }}\">\n <div matPrefix>\n <mat-icon svgIcon=\"ontimize:search\" [matBadge]=\"areAllColumnsChecked()?'':getCountColumnsChecked()\" matBadgeSize=\"small\"></mat-icon>\n <button type=\"button\" mat-icon-button [matMenuTriggerFor]=\"menu\" (menuClosed)=\"onMenuClosed()\" (click)=\"$event.stopPropagation()\">\n <mat-icon class=\"search-icon\">expand_more</mat-icon>\n </button>\n </div>\n\n <mat-menu #menu=\"matMenu\" class=\"o-table-quickfilter-menu\">\n <div fxLayout=\"column\" class=\"checkbox-container\">\n\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"areAllColumnsChecked()\" (change)=\"onSelectAllChange($event)\">\n {{ 'SELECT_ALL' | oTranslate}}\n </mat-checkbox>\n <mat-divider></mat-divider>\n\n <ng-container *ngFor=\"let column of quickFilterColumns\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"isChecked(column)\" (change)=\"onCheckboxChange(column, $event)\">\n {{ column.title | oTranslate }}\n </mat-checkbox>\n </ng-container>\n\n <ng-container *ngIf=\"showCaseSensitiveCheckbox()\">\n <mat-divider></mat-divider>\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"oTableOptions.filterCaseSensitive\"\n (change)=\"oTableOptions.filterCaseSensitive = $event.checked\">\n {{ 'TABLE.FILTER.CASE_SENSITIVE' | oTranslate}}\n </mat-checkbox>\n </ng-container>\n </div>\n </mat-menu>\n </mat-form-field>\n</div>\n", styles: [".o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix{align-self:center;padding:0;min-height:30px;display:flex}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix{padding-left:10px;padding-right:10px}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div{align-items:center;display:flex}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div .mat-icon,.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div button{margin-right:6px}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div .mat-badge-content{background-color:#3c8500;width:14px;height:14px;line-height:14px;top:-4px;right:-4px}.o-table-quickfilter-menu .checkbox-container{padding:6px 12px}.o-table-quickfilter-menu .checkbox-container .mat-divider{margin:8px 0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i10.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "directive", type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i11.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "pipe", type: i12.OTranslatePipe, name: "oTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
191
191
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableQuickfilterComponent, decorators: [{
192
192
  type: Component,
193
193
  args: [{ selector: 'o-table-quickfilter', inputs: DEFAULT_INPUTS_O_TABLE_QUICKFILTER, outputs: DEFAULT_OUTPUTS_O_TABLE_QUICKFILTER, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
194
194
  '[class.o-table-quickfilter]': 'true',
195
- }, template: "<div class=\"quickFilter\" fxLayout=\"row\">\n\n <mat-form-field appearance=\"outline\">\n <input matInput #filter [formControl]=\"formControl\" (click)=\"$event.stopPropagation()\" placeholder=\"{{ placeholder | oTranslate }}\">\n <div matPrefix>\n <mat-icon svgIcon=\"ontimize:search\" [matBadge]=\"areAllColumnsChecked()?'':getCountColumnsChecked()\" matBadgeSize=\"small\"></mat-icon>\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" (menuClosed)=\"onMenuClosed()\" (click)=\"$event.stopPropagation()\">\n <mat-icon class=\"search-icon\">expand_more</mat-icon>\n </button>\n </div>\n\n <mat-menu #menu=\"matMenu\" class=\"o-table-quickfilter-menu\">\n <div fxLayout=\"column\" class=\"checkbox-container\">\n\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"areAllColumnsChecked()\" (change)=\"onSelectAllChange($event)\">\n {{ 'SELECT_ALL' | oTranslate}}\n </mat-checkbox>\n <mat-divider></mat-divider>\n\n <ng-container *ngFor=\"let column of quickFilterColumns\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"isChecked(column)\" (change)=\"onCheckboxChange(column, $event)\">\n {{ column.title | oTranslate }}\n </mat-checkbox>\n </ng-container>\n\n <ng-container *ngIf=\"showCaseSensitiveCheckbox()\">\n <mat-divider></mat-divider>\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"oTableOptions.filterCaseSensitive\"\n (change)=\"oTableOptions.filterCaseSensitive = $event.checked\">\n {{ 'TABLE.FILTER.CASE_SENSITIVE' | oTranslate}}\n </mat-checkbox>\n </ng-container>\n </div>\n </mat-menu>\n </mat-form-field>\n</div>\n", styles: [".o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix{align-self:center;padding:0;min-height:30px;display:flex}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix{padding-left:10px;padding-right:10px}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div{align-items:center;display:flex}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div .mat-icon,.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div button{margin-right:6px}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div .mat-badge-content{background-color:#3c8500;width:14px;height:14px;line-height:14px;top:-4px;right:-4px}.o-table-quickfilter-menu .checkbox-container{padding:6px 12px}.o-table-quickfilter-menu .checkbox-container .mat-divider{margin:8px 0}\n"] }]
195
+ }, template: "<div class=\"quickFilter\" fxLayout=\"row\">\n\n <mat-form-field appearance=\"outline\">\n <input matInput #filter [formControl]=\"formControl\" (click)=\"$event.stopPropagation()\" placeholder=\"{{ placeholder | oTranslate }}\">\n <div matPrefix>\n <mat-icon svgIcon=\"ontimize:search\" [matBadge]=\"areAllColumnsChecked()?'':getCountColumnsChecked()\" matBadgeSize=\"small\"></mat-icon>\n <button type=\"button\" mat-icon-button [matMenuTriggerFor]=\"menu\" (menuClosed)=\"onMenuClosed()\" (click)=\"$event.stopPropagation()\">\n <mat-icon class=\"search-icon\">expand_more</mat-icon>\n </button>\n </div>\n\n <mat-menu #menu=\"matMenu\" class=\"o-table-quickfilter-menu\">\n <div fxLayout=\"column\" class=\"checkbox-container\">\n\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"areAllColumnsChecked()\" (change)=\"onSelectAllChange($event)\">\n {{ 'SELECT_ALL' | oTranslate}}\n </mat-checkbox>\n <mat-divider></mat-divider>\n\n <ng-container *ngFor=\"let column of quickFilterColumns\">\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"isChecked(column)\" (change)=\"onCheckboxChange(column, $event)\">\n {{ column.title | oTranslate }}\n </mat-checkbox>\n </ng-container>\n\n <ng-container *ngIf=\"showCaseSensitiveCheckbox()\">\n <mat-divider></mat-divider>\n <mat-checkbox (click)=\"$event.stopPropagation()\" [checked]=\"oTableOptions.filterCaseSensitive\"\n (change)=\"oTableOptions.filterCaseSensitive = $event.checked\">\n {{ 'TABLE.FILTER.CASE_SENSITIVE' | oTranslate}}\n </mat-checkbox>\n </ng-container>\n </div>\n </mat-menu>\n </mat-form-field>\n</div>\n", styles: [".o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-infix{align-self:center;padding:0;min-height:30px;display:flex}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix{padding-left:10px;padding-right:10px}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div{align-items:center;display:flex}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div .mat-icon,.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div button{margin-right:6px}.o-table-quickfilter .quickFilter .mat-mdc-form-field .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix div .mat-badge-content{background-color:#3c8500;width:14px;height:14px;line-height:14px;top:-4px;right:-4px}.o-table-quickfilter-menu .checkbox-container{padding:6px 12px}.o-table-quickfilter-menu .checkbox-container .mat-divider{margin:8px 0}\n"] }]
196
196
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i13.OTableBase, decorators: [{
197
197
  type: Inject,
198
198
  args: [forwardRef(() => OTableBase)]
@@ -203,4 +203,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
203
203
  type: ViewChild,
204
204
  args: ['menu', { static: true }]
205
205
  }] } });
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1xdWlja2ZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2hlYWRlci90YWJsZS1xdWlja2ZpbHRlci9vLXRhYmxlLXF1aWNrZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLXF1aWNrZmlsdGVyL28tdGFibGUtcXVpY2tmaWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFHUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFLcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7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QUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2FBQy9GLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7Z0JBQ3JELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEQ7WUFFRCxPQUFPLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7dUhBaE5VLDBCQUEwQixvRUE4QjNCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7MkdBOUIzQiwwQkFBMEIsdVlDbER2QywrdURBb0NBOzJGRGNhLDBCQUEwQjtrQkFadEMsU0FBUzsrQkFDRSxxQkFBcUIsVUFHdkIsa0NBQWtDLFdBQ2pDLG1DQUFtQyxpQkFDN0IsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSiw2QkFBNkIsRUFBRSxNQUFNO3FCQUN0Qzs7MEJBZ0NFLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQzs0Q0FmL0IsTUFBTTtzQkFEWixTQUFTO3VCQUFDLFFBQVE7Z0JBSVosT0FBTztzQkFEYixTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRNZW51IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgT19JTlBVVFNfT1BUSU9OUyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbmZpZy9hcHAtY29uZmlnJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZVF1aWNrZmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLXF1aWNrZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IEV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy9leHByZXNzaW9uLnR5cGUnO1xuaW1wb3J0IHR5cGUgeyBPSW5wdXRzT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3R5cGVzL28taW5wdXRzLW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsL2ZpbHRlci1leHByZXNzaW9uLnV0aWxzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBPQ29sdW1uIH0gZnJvbSAnLi4vLi4vLi4vY29sdW1uL28tY29sdW1uLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUJhc2UgfSBmcm9tICcuLi8uLi8uLi9vLXRhYmxlLWJhc2UuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UQUJMRV9RVUlDS0ZJTFRFUiA9IFtcbiAgJ3BsYWNlaG9sZGVyJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX1RBQkxFX1FVSUNLRklMVEVSID0gW1xuICAnb25DaGFuZ2UnXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlLXF1aWNrZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUtcXVpY2tmaWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLXRhYmxlLXF1aWNrZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UQUJMRV9RVUlDS0ZJTFRFUixcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fVEFCTEVfUVVJQ0tGSUxURVIsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLXRhYmxlLXF1aWNrZmlsdGVyXSc6ICd0cnVlJyxcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPVGFibGVRdWlja2ZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9UYWJsZVF1aWNrZmlsdGVyLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJvdGVjdGVkIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKCdmaWx0ZXInKVxuICBwdWJsaWMgZmlsdGVyOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ21lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgbWF0TWVudTogTWF0TWVudTtcblxuICBwdWJsaWMgdmFsdWU6IHN0cmluZztcbiAgcHVibGljIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyBmb3JtQ29udHJvbDtcblxuICBwcm90ZWN0ZWQgb0lucHV0c09wdGlvbnM6IE9JbnB1dHNPcHRpb25zO1xuICBwcm90ZWN0ZWQgcXVpY2tGaWx0ZXJPYnNlcnZhYmxlOiBTdWJzY3JpcHRpb247XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBPVGFibGVCYXNlKSkgcHJvdGVjdGVkIHRhYmxlOiBPVGFibGVCYXNlXG4gICkge1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZS5yZWdpc3RlclF1aWNrRmlsdGVyKHRoaXMpO1xuICAgIC8vIHdvcmthcm91bmQgYmVjYXVzZSAneC1wb3NpdGlvbj1cImJlZm9yZVwiJyB3YXMgbm90IHdvcmtpbmcgaW4gdGhlIHRlbXBsYXRlXG4gICAgdGhpcy5tYXRNZW51LnhQb3NpdGlvbiA9ICdiZWZvcmUnO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVFdmVudEZpbHRlcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub0lucHV0c09wdGlvbnMgPSB0aGlzLmluamVjdG9yLmdldChPX0lOUFVUU19PUFRJT05TKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLm9JbnB1dHNPcHRpb25zID0ge307XG4gICAgfVxuICAgIFV0aWwucGFyc2VPSW5wdXRzT3B0aW9ucyh0aGlzLmVsUmVmLCB0aGlzLm9JbnB1dHNPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5xdWlja0ZpbHRlck9ic2VydmFibGUpIHtcbiAgICAgIHRoaXMucXVpY2tGaWx0ZXJPYnNlcnZhYmxlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9UYWJsZU9wdGlvbnMoKTogT1RhYmxlT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUub1RhYmxlT3B0aW9ucztcbiAgfVxuXG4gIGdldCBxdWlja0ZpbHRlckNvbHVtbnMoKTogT0NvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4ge1xuICAgICAgLy8gQ0hFQ0s6IFdoeSBjb2x1bW5zIHdpdGggcmVuZGVyZXJzIGFyZSBub3QgZmlsdGVyZWQ/XG4gICAgICAvLyByZXR1cm4gb0NvbC5zZWFyY2hhYmxlICYmIG9Db2wudmlzaWJsZSAmJiAhVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlcik7XG4gICAgICByZXR1cm4gb0NvbC5zZWFyY2hhYmxlICYmIG9Db2wudmlzaWJsZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJFeHByZXNzaW9uKCk6IEV4cHJlc3Npb24ge1xuICAgIGxldCByZXN1bHQ6IEV4cHJlc3Npb24gPSB0aGlzLmdldFVzZXJGaWx0ZXIoKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHJlc3VsdCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleHByZXNzaW9uczogRXhwcmVzc2lvbltdID0gW107XG5cbiAgICAgIGNvbnN0IHNlYXJjaGluZ0NvbHMgPSB0aGlzLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIob0NvbCA9PiBvQ29sLnNlYXJjaGluZyAmJiBvQ29sLnZpc2libGUgJiYgb0NvbC5zZWFyY2hhYmxlICYmIHRoaXMuaXNGaWx0ZXJhYmxlQ29sdW1uKG9Db2wpKTtcbiAgICAgIGV4cHJlc3Npb25zLnB1c2goLi4udGhpcy5nZXRDb2x1bW5zV2l0aG91dFJlbmRlcmVyRXhwcmVzc2lvbnMoc2VhcmNoaW5nQ29scykpO1xuXG4gICAgICBjb25zdCByZW5kZXJlcnNFeHByID0gdGhpcy5nZXRDb2x1bW5zUmVuZGVyZXJFeHByZXNzaW9ucyhzZWFyY2hpbmdDb2xzKTtcblxuICAgICAgY29uc3Qgbm90TnVsbEV4cHJlc3Npb25zID0gcmVuZGVyZXJzRXhwci5maWx0ZXIoZXhwciA9PiBVdGlsLmlzRGVmaW5lZChleHByKSk7XG4gICAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmIG5vdE51bGxFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gQWxsIGZpbHRlcnMgaW4gdGhlIHJlbmRlcmVyIGFyZSBlbXB0eSBhbmQgdGhlcmUgYXJlIG5vIG90aGVyIGZpbHRlcnMgY29uZmlndXJlZCxcbiAgICAgICAgLy8gc28gd2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIHRhYmxlIHNob3VsZCBub3QgaGF2ZSBhbnkgaW5mb3JtYXRpb24gYnV0XG4gICAgICAgIC8vIGl0IHdvdWxkIG1ha2UgYSBxdWVyeSB3aXRoIGVtcHR5IGZpbHRlcnMgYW5kIHJldHJpZXZlIGluZm9ybWF0aW9uIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIGNvbmZpZ3VyZWQgcXVpY2tmaWx0ZXIgdmFsdWUsXG4gICAgICAgIC8vIHNvIHdlIGZvcmNlIHRvIHN0b3AgdGhlIHF1ZXJ5IGFuZCBzZXQgYW4gZW1wdHkgYXJyYXkgb24gdGhlIHRhYmxlXG4gICAgICAgIHRoaXMudGFibGUuYWJvcnRRdWVyeS5uZXh0KHRydWUpO1xuICAgICAgfVxuICAgICAgZXhwcmVzc2lvbnMucHVzaCguLi5ub3ROdWxsRXhwcmVzc2lvbnMpO1xuXG4gICAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQgPSBleHByZXNzaW9ucy5yZWR1Y2UoKGEsIGIpID0+IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGEsIGIsIEZpbHRlckV4cHJlc3Npb25VdGlscy5PUF9PUikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldFVzZXJGaWx0ZXIoKTogRXhwcmVzc2lvbiB7XG4gICAgbGV0IHJlc3VsdDogRXhwcmVzc2lvbjtcbiAgICBpZiAodGhpcy50YWJsZS5xdWlja0ZpbHRlckNhbGxiYWNrIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIGNvbnN0IHVzZXJGaWx0ZXIgPSB0aGlzLnRhYmxlLnF1aWNrRmlsdGVyQ2FsbGJhY2sodGhpcy52YWx1ZSk7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQodXNlckZpbHRlcikgJiYgRmlsdGVyRXhwcmVzc2lvblV0aWxzLmluc3RhbmNlb2ZFeHByZXNzaW9uKHVzZXJGaWx0ZXIpKSB7XG4gICAgICAgIHJlc3VsdCA9ICh1c2VyRmlsdGVyIGFzIEV4cHJlc3Npb24pO1xuICAgICAgfSBlbHNlIGlmIChVdGlsLmlzRGVmaW5lZCh1c2VyRmlsdGVyKSkge1xuICAgICAgICByZXN1bHQgPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uRnJvbU9iamVjdCh1c2VyRmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplRXZlbnRGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVyICYmICF0aGlzLnF1aWNrRmlsdGVyT2JzZXJ2YWJsZSkge1xuICAgICAgdGhpcy5xdWlja0ZpbHRlck9ic2VydmFibGUgPSBmcm9tRXZlbnQodGhpcy5maWx0ZXIubmF0aXZlRWxlbWVudCwgJ2tleXVwJylcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDE1MCkpXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbHRlclZhbCA9IHRoaXMuZmlsdGVyLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgICAgaWYgKCF0aGlzLnRhYmxlLmRhdGFTb3VyY2UgfHwgdGhpcy52YWx1ZSA9PT0gZmlsdGVyVmFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoZmlsdGVyVmFsKTtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBpZiBleGlzdHMgZmlsdGVyIHZhbHVlIGluIHN0b3JhZ2UgdGhlbiBmaWx0ZXIgcmVzdWx0IHRhYmxlXG4gICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMudmFsdWUgfHwgdGhpcy5maWx0ZXIubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZmlsdGVyVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogYW55LCB0cmlnZ2VyOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIGlmICh0cmlnZ2VyICYmIHRoaXMudGFibGUgJiYgIXRoaXMudGFibGUucGFnZWFibGUgJiYgdGhpcy50YWJsZS5kYXRhU291cmNlKSB7XG4gICAgICB0aGlzLnRhYmxlLmRhdGFTb3VyY2UucXVpY2tGaWx0ZXIgPSB0aGlzLnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbk1lbnVDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgaXNDaGVja2VkKGNvbHVtbjogT0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2x1bW4uc2VhcmNoaW5nO1xuICB9XG5cbiAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2UoY29sdW1uOiBPQ29sdW1uLCBldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpOiB2b2lkIHtcbiAgICBjb2x1bW4uc2VhcmNoaW5nID0gZXZlbnQuY2hlY2tlZDtcbiAgfVxuXG4gIHB1YmxpYyBzaG93Q2FzZVNlbnNpdGl2ZUNoZWNrYm94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLnNob3dDYXNlU2Vuc2l0aXZlQ2hlY2tib3goKTtcbiAgfVxuXG4gIHB1YmxpYyBhcmVBbGxDb2x1bW5zQ2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWlja0ZpbHRlckNvbHVtbnMuZXZlcnkoKGNvbDogT0NvbHVtbikgPT4gY29sLnNlYXJjaGluZyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q291bnRDb2x1bW5zQ2hlY2tlZCgpOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbHVtbnMuZm9yRWFjaCgoY29sOiBPQ29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sLnNlYXJjaGluZykge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdEFsbENoYW5nZShldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLnF1aWNrRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChjb2w6IE9Db2x1bW4pID0+IGNvbC5zZWFyY2hpbmcgPSBldmVudC5jaGVja2VkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0ZpbHRlcmFibGVDb2x1bW4oY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFjb2x1bW4ucmVuZGVyZXIgfHwgKFxuICAgICAgY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnIHx8XG4gICAgICBjb2x1bW4udHlwZSA9PT0gJ3RyYW5zbGF0ZScgfHxcbiAgICAgIGNvbHVtbi50eXBlID09PSAnaW50ZWdlcicgfHxcbiAgICAgIGNvbHVtbi50eXBlID09PSAncmVhbCcgfHxcbiAgICAgIGNvbHVtbi50eXBlID09PSAncGVyY2VudGFnZScgfHxcbiAgICAgIGNvbHVtbi50eXBlID09PSAnY3VycmVuY3knIHx8XG4gICAgICBjb2x1bW4udHlwZSA9PT0gJ3NlcnZpY2UnXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb2x1bW5zV2l0aG91dFJlbmRlcmVyRXhwcmVzc2lvbnMoY29sdW1uczogT0NvbHVtbltdKTogRXhwcmVzc2lvbltdIHtcbiAgICByZXR1cm4gY29sdW1uc1xuICAgICAgLmZpbHRlcihvQ29sID0+ICFVdGlsLmlzRGVmaW5lZChvQ29sLnJlbmRlcmVyKSlcbiAgICAgIC5tYXAob0NvbCA9PiB7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvQ29sLmZpbHRlckV4cHJlc3Npb25GdW5jdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gb0NvbC5maWx0ZXJFeHByZXNzaW9uRnVuY3Rpb24ob0NvbC5hdHRyLCB0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZWZhdWx0IGJlaGF2aW91clxuICAgICAgICAgIHJldHVybiBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uTGlrZShvQ29sLmF0dHIsIHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb2x1bW5zUmVuZGVyZXJFeHByZXNzaW9ucyhjb2x1bW5zOiBPQ29sdW1uW10pIHtcbiAgICByZXR1cm4gY29sdW1uc1xuICAgICAgLmZpbHRlcihvQ29sID0+IFV0aWwuaXNEZWZpbmVkKG9Db2wucmVuZGVyZXIpICYmICFVdGlsLmlzRGVmaW5lZChvQ29sLmZpbHRlckV4cHJlc3Npb25GdW5jdGlvbikpXG4gICAgICAubWFwKG9Db2wgPT4ge1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlci5nZXRGaWx0ZXJFeHByZXNzaW9uKSkge1xuICAgICAgICAgIHJldHVybiBvQ29sLnJlbmRlcmVyLmdldEZpbHRlckV4cHJlc3Npb24odGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVmYXVsdCBiZWhhdmlvdXJcbiAgICAgICAgcmV0dXJuIEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25MaWtlKG9Db2wuYXR0ciwgdGhpcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicXVpY2tGaWx0ZXJcIiBmeExheW91dD1cInJvd1wiPlxuXG4gIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgIDxpbnB1dCBtYXRJbnB1dCAjZmlsdGVyIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTpzZWFyY2hcIiBbbWF0QmFkZ2VdPVwiYXJlQWxsQ29sdW1uc0NoZWNrZWQoKT8nJzpnZXRDb3VudENvbHVtbnNDaGVja2VkKClcIiBtYXRCYWRnZVNpemU9XCJzbWFsbFwiPjwvbWF0LWljb24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIChtZW51Q2xvc2VkKT1cIm9uTWVudUNsb3NlZCgpXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzZWFyY2gtaWNvblwiPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPG1hdC1tZW51ICNtZW51PVwibWF0TWVudVwiIGNsYXNzPVwiby10YWJsZS1xdWlja2ZpbHRlci1tZW51XCI+XG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJjaGVja2JveC1jb250YWluZXJcIj5cblxuICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbY2hlY2tlZF09XCJhcmVBbGxDb2x1bW5zQ2hlY2tlZCgpXCIgKGNoYW5nZSk9XCJvblNlbGVjdEFsbENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAge3sgJ1NFTEVDVF9BTEwnIHwgb1RyYW5zbGF0ZX19XG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgcXVpY2tGaWx0ZXJDb2x1bW5zXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2NoZWNrZWRdPVwiaXNDaGVja2VkKGNvbHVtbilcIiAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2UoY29sdW1uLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICB7eyBjb2x1bW4udGl0bGUgfCBvVHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Q2FzZVNlbnNpdGl2ZUNoZWNrYm94KClcIj5cbiAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbY2hlY2tlZF09XCJvVGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmVcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvVGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUgPSAkZXZlbnQuY2hlY2tlZFwiPlxuICAgICAgICAgICAge3sgJ1RBQkxFLkZJTFRFUi5DQVNFX1NFTlNJVElWRScgfCBvVHJhbnNsYXRlfX1cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1tZW51PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG4iXX0=
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS1xdWlja2ZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9leHRlbnNpb25zL2hlYWRlci90YWJsZS1xdWlja2ZpbHRlci9vLXRhYmxlLXF1aWNrZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLXF1aWNrZmlsdGVyL28tdGFibGUtcXVpY2tmaWx0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFHUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFLcEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDcEYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7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QUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2FBQy9GLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7Z0JBQ3JELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEQ7WUFFRCxPQUFPLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7dUhBaE5VLDBCQUEwQixvRUE4QjNCLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7MkdBOUIzQiwwQkFBMEIsdVlDbER2QywrdkRBb0NBOzJGRGNhLDBCQUEwQjtrQkFadEMsU0FBUzsrQkFDRSxxQkFBcUIsVUFHdkIsa0NBQWtDLFdBQ2pDLG1DQUFtQyxpQkFDN0IsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSiw2QkFBNkIsRUFBRSxNQUFNO3FCQUN0Qzs7MEJBZ0NFLE1BQU07MkJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQzs0Q0FmL0IsTUFBTTtzQkFEWixTQUFTO3VCQUFDLFFBQVE7Z0JBSVosT0FBTztzQkFEYixTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRNZW51IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgT19JTlBVVFNfT1BUSU9OUyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbmZpZy9hcHAtY29uZmlnJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1vcHRpb25zLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZVF1aWNrZmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLXF1aWNrZmlsdGVyLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IEV4cHJlc3Npb24gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy9leHByZXNzaW9uLnR5cGUnO1xuaW1wb3J0IHR5cGUgeyBPSW5wdXRzT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3R5cGVzL28taW5wdXRzLW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsL2ZpbHRlci1leHByZXNzaW9uLnV0aWxzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBPQ29sdW1uIH0gZnJvbSAnLi4vLi4vLi4vY29sdW1uL28tY29sdW1uLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUJhc2UgfSBmcm9tICcuLi8uLi8uLi9vLXRhYmxlLWJhc2UuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19UQUJMRV9RVUlDS0ZJTFRFUiA9IFtcbiAgJ3BsYWNlaG9sZGVyJ1xuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX1RBQkxFX1FVSUNLRklMVEVSID0gW1xuICAnb25DaGFuZ2UnXG5dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvLXRhYmxlLXF1aWNrZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL28tdGFibGUtcXVpY2tmaWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9vLXRhYmxlLXF1aWNrZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19UQUJMRV9RVUlDS0ZJTFRFUixcbiAgb3V0cHV0czogREVGQVVMVF9PVVRQVVRTX09fVEFCTEVfUVVJQ0tGSUxURVIsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5vLXRhYmxlLXF1aWNrZmlsdGVyXSc6ICd0cnVlJyxcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBPVGFibGVRdWlja2ZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9UYWJsZVF1aWNrZmlsdGVyLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJvdGVjdGVkIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKCdmaWx0ZXInKVxuICBwdWJsaWMgZmlsdGVyOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ21lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgbWF0TWVudTogTWF0TWVudTtcblxuICBwdWJsaWMgdmFsdWU6IHN0cmluZztcbiAgcHVibGljIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHB1YmxpYyBmb3JtQ29udHJvbDtcblxuICBwcm90ZWN0ZWQgb0lucHV0c09wdGlvbnM6IE9JbnB1dHNPcHRpb25zO1xuICBwcm90ZWN0ZWQgcXVpY2tGaWx0ZXJPYnNlcnZhYmxlOiBTdWJzY3JpcHRpb247XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBPVGFibGVCYXNlKSkgcHJvdGVjdGVkIHRhYmxlOiBPVGFibGVCYXNlXG4gICkge1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy50YWJsZS5yZWdpc3RlclF1aWNrRmlsdGVyKHRoaXMpO1xuICAgIC8vIHdvcmthcm91bmQgYmVjYXVzZSAneC1wb3NpdGlvbj1cImJlZm9yZVwiJyB3YXMgbm90IHdvcmtpbmcgaW4gdGhlIHRlbXBsYXRlXG4gICAgdGhpcy5tYXRNZW51LnhQb3NpdGlvbiA9ICdiZWZvcmUnO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVFdmVudEZpbHRlcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub0lucHV0c09wdGlvbnMgPSB0aGlzLmluamVjdG9yLmdldChPX0lOUFVUU19PUFRJT05TKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLm9JbnB1dHNPcHRpb25zID0ge307XG4gICAgfVxuICAgIFV0aWwucGFyc2VPSW5wdXRzT3B0aW9ucyh0aGlzLmVsUmVmLCB0aGlzLm9JbnB1dHNPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5xdWlja0ZpbHRlck9ic2VydmFibGUpIHtcbiAgICAgIHRoaXMucXVpY2tGaWx0ZXJPYnNlcnZhYmxlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG9UYWJsZU9wdGlvbnMoKTogT1RhYmxlT3B0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUub1RhYmxlT3B0aW9ucztcbiAgfVxuXG4gIGdldCBxdWlja0ZpbHRlckNvbHVtbnMoKTogT0NvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKG9Db2wgPT4ge1xuICAgICAgLy8gQ0hFQ0s6IFdoeSBjb2x1bW5zIHdpdGggcmVuZGVyZXJzIGFyZSBub3QgZmlsdGVyZWQ/XG4gICAgICAvLyByZXR1cm4gb0NvbC5zZWFyY2hhYmxlICYmIG9Db2wudmlzaWJsZSAmJiAhVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlcik7XG4gICAgICByZXR1cm4gb0NvbC5zZWFyY2hhYmxlICYmIG9Db2wudmlzaWJsZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJFeHByZXNzaW9uKCk6IEV4cHJlc3Npb24ge1xuICAgIGxldCByZXN1bHQ6IEV4cHJlc3Npb24gPSB0aGlzLmdldFVzZXJGaWx0ZXIoKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHJlc3VsdCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy52YWx1ZSkgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleHByZXNzaW9uczogRXhwcmVzc2lvbltdID0gW107XG5cbiAgICAgIGNvbnN0IHNlYXJjaGluZ0NvbHMgPSB0aGlzLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIob0NvbCA9PiBvQ29sLnNlYXJjaGluZyAmJiBvQ29sLnZpc2libGUgJiYgb0NvbC5zZWFyY2hhYmxlICYmIHRoaXMuaXNGaWx0ZXJhYmxlQ29sdW1uKG9Db2wpKTtcbiAgICAgIGV4cHJlc3Npb25zLnB1c2goLi4udGhpcy5nZXRDb2x1bW5zV2l0aG91dFJlbmRlcmVyRXhwcmVzc2lvbnMoc2VhcmNoaW5nQ29scykpO1xuXG4gICAgICBjb25zdCByZW5kZXJlcnNFeHByID0gdGhpcy5nZXRDb2x1bW5zUmVuZGVyZXJFeHByZXNzaW9ucyhzZWFyY2hpbmdDb2xzKTtcblxuICAgICAgY29uc3Qgbm90TnVsbEV4cHJlc3Npb25zID0gcmVuZGVyZXJzRXhwci5maWx0ZXIoZXhwciA9PiBVdGlsLmlzRGVmaW5lZChleHByKSk7XG4gICAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID09PSAwICYmIG5vdE51bGxFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gQWxsIGZpbHRlcnMgaW4gdGhlIHJlbmRlcmVyIGFyZSBlbXB0eSBhbmQgdGhlcmUgYXJlIG5vIG90aGVyIGZpbHRlcnMgY29uZmlndXJlZCxcbiAgICAgICAgLy8gc28gd2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIHRhYmxlIHNob3VsZCBub3QgaGF2ZSBhbnkgaW5mb3JtYXRpb24gYnV0XG4gICAgICAgIC8vIGl0IHdvdWxkIG1ha2UgYSBxdWVyeSB3aXRoIGVtcHR5IGZpbHRlcnMgYW5kIHJldHJpZXZlIGluZm9ybWF0aW9uIG5vdCBjb25zaXN0ZW50IHdpdGggdGhlIGNvbmZpZ3VyZWQgcXVpY2tmaWx0ZXIgdmFsdWUsXG4gICAgICAgIC8vIHNvIHdlIGZvcmNlIHRvIHN0b3AgdGhlIHF1ZXJ5IGFuZCBzZXQgYW4gZW1wdHkgYXJyYXkgb24gdGhlIHRhYmxlXG4gICAgICAgIHRoaXMudGFibGUuYWJvcnRRdWVyeS5uZXh0KHRydWUpO1xuICAgICAgfVxuICAgICAgZXhwcmVzc2lvbnMucHVzaCguLi5ub3ROdWxsRXhwcmVzc2lvbnMpO1xuXG4gICAgICBpZiAoZXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQgPSBleHByZXNzaW9ucy5yZWR1Y2UoKGEsIGIpID0+IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGEsIGIsIEZpbHRlckV4cHJlc3Npb25VdGlscy5PUF9PUikpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldFVzZXJGaWx0ZXIoKTogRXhwcmVzc2lvbiB7XG4gICAgbGV0IHJlc3VsdDogRXhwcmVzc2lvbjtcbiAgICBpZiAodGhpcy50YWJsZS5xdWlja0ZpbHRlckNhbGxiYWNrIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIGNvbnN0IHVzZXJGaWx0ZXIgPSB0aGlzLnRhYmxlLnF1aWNrRmlsdGVyQ2FsbGJhY2sodGhpcy52YWx1ZSk7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQodXNlckZpbHRlcikgJiYgRmlsdGVyRXhwcmVzc2lvblV0aWxzLmluc3RhbmNlb2ZFeHByZXNzaW9uKHVzZXJGaWx0ZXIpKSB7XG4gICAgICAgIHJlc3VsdCA9ICh1c2VyRmlsdGVyIGFzIEV4cHJlc3Npb24pO1xuICAgICAgfSBlbHNlIGlmIChVdGlsLmlzRGVmaW5lZCh1c2VyRmlsdGVyKSkge1xuICAgICAgICByZXN1bHQgPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uRnJvbU9iamVjdCh1c2VyRmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplRXZlbnRGaWx0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVyICYmICF0aGlzLnF1aWNrRmlsdGVyT2JzZXJ2YWJsZSkge1xuICAgICAgdGhpcy5xdWlja0ZpbHRlck9ic2VydmFibGUgPSBmcm9tRXZlbnQodGhpcy5maWx0ZXIubmF0aXZlRWxlbWVudCwgJ2tleXVwJylcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDE1MCkpXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbHRlclZhbCA9IHRoaXMuZmlsdGVyLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgICAgaWYgKCF0aGlzLnRhYmxlLmRhdGFTb3VyY2UgfHwgdGhpcy52YWx1ZSA9PT0gZmlsdGVyVmFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0VmFsdWUoZmlsdGVyVmFsKTtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAvLyBpZiBleGlzdHMgZmlsdGVyIHZhbHVlIGluIHN0b3JhZ2UgdGhlbiBmaWx0ZXIgcmVzdWx0IHRhYmxlXG4gICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMudmFsdWUgfHwgdGhpcy5maWx0ZXIubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoZmlsdGVyVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogYW55LCB0cmlnZ2VyOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIGlmICh0cmlnZ2VyICYmIHRoaXMudGFibGUgJiYgIXRoaXMudGFibGUucGFnZWFibGUgJiYgdGhpcy50YWJsZS5kYXRhU291cmNlKSB7XG4gICAgICB0aGlzLnRhYmxlLmRhdGFTb3VyY2UucXVpY2tGaWx0ZXIgPSB0aGlzLnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbk1lbnVDbG9zZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgaXNDaGVja2VkKGNvbHVtbjogT0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2x1bW4uc2VhcmNoaW5nO1xuICB9XG5cbiAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2UoY29sdW1uOiBPQ29sdW1uLCBldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpOiB2b2lkIHtcbiAgICBjb2x1bW4uc2VhcmNoaW5nID0gZXZlbnQuY2hlY2tlZDtcbiAgfVxuXG4gIHB1YmxpYyBzaG93Q2FzZVNlbnNpdGl2ZUNoZWNrYm94KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLnNob3dDYXNlU2Vuc2l0aXZlQ2hlY2tib3goKTtcbiAgfVxuXG4gIHB1YmxpYyBhcmVBbGxDb2x1bW5zQ2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5xdWlja0ZpbHRlckNvbHVtbnMuZXZlcnkoKGNvbDogT0NvbHVtbikgPT4gY29sLnNlYXJjaGluZyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q291bnRDb2x1bW5zQ2hlY2tlZCgpOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgdGhpcy5xdWlja0ZpbHRlckNvbHVtbnMuZm9yRWFjaCgoY29sOiBPQ29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sLnNlYXJjaGluZykge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdEFsbENoYW5nZShldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpOiB2b2lkIHtcbiAgICB0aGlzLnF1aWNrRmlsdGVyQ29sdW1ucy5mb3JFYWNoKChjb2w6IE9Db2x1bW4pID0+IGNvbC5zZWFyY2hpbmcgPSBldmVudC5jaGVja2VkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0ZpbHRlcmFibGVDb2x1bW4oY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFjb2x1bW4ucmVuZGVyZXIgfHwgKFxuICAgICAgY29sdW1uLnR5cGUgPT09ICdzdHJpbmcnIHx8XG4gICAgICBjb2x1bW4udHlwZSA9PT0gJ3RyYW5zbGF0ZScgfHxcbiAgICAgIGNvbHVtbi50eXBlID09PSAnaW50ZWdlcicgfHxcbiAgICAgIGNvbHVtbi50eXBlID09PSAncmVhbCcgfHxcbiAgICAgIGNvbHVtbi50eXBlID09PSAncGVyY2VudGFnZScgfHxcbiAgICAgIGNvbHVtbi50eXBlID09PSAnY3VycmVuY3knIHx8XG4gICAgICBjb2x1bW4udHlwZSA9PT0gJ3NlcnZpY2UnXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb2x1bW5zV2l0aG91dFJlbmRlcmVyRXhwcmVzc2lvbnMoY29sdW1uczogT0NvbHVtbltdKTogRXhwcmVzc2lvbltdIHtcbiAgICByZXR1cm4gY29sdW1uc1xuICAgICAgLmZpbHRlcihvQ29sID0+ICFVdGlsLmlzRGVmaW5lZChvQ29sLnJlbmRlcmVyKSlcbiAgICAgIC5tYXAob0NvbCA9PiB7XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvQ29sLmZpbHRlckV4cHJlc3Npb25GdW5jdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gb0NvbC5maWx0ZXJFeHByZXNzaW9uRnVuY3Rpb24ob0NvbC5hdHRyLCB0aGlzLnZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZWZhdWx0IGJlaGF2aW91clxuICAgICAgICAgIHJldHVybiBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uTGlrZShvQ29sLmF0dHIsIHRoaXMudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb2x1bW5zUmVuZGVyZXJFeHByZXNzaW9ucyhjb2x1bW5zOiBPQ29sdW1uW10pIHtcbiAgICByZXR1cm4gY29sdW1uc1xuICAgICAgLmZpbHRlcihvQ29sID0+IFV0aWwuaXNEZWZpbmVkKG9Db2wucmVuZGVyZXIpICYmICFVdGlsLmlzRGVmaW5lZChvQ29sLmZpbHRlckV4cHJlc3Npb25GdW5jdGlvbikpXG4gICAgICAubWFwKG9Db2wgPT4ge1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlci5nZXRGaWx0ZXJFeHByZXNzaW9uKSkge1xuICAgICAgICAgIHJldHVybiBvQ29sLnJlbmRlcmVyLmdldEZpbHRlckV4cHJlc3Npb24odGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGVmYXVsdCBiZWhhdmlvdXJcbiAgICAgICAgcmV0dXJuIEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25MaWtlKG9Db2wuYXR0ciwgdGhpcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicXVpY2tGaWx0ZXJcIiBmeExheW91dD1cInJvd1wiPlxuXG4gIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgIDxpbnB1dCBtYXRJbnB1dCAjZmlsdGVyIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIHwgb1RyYW5zbGF0ZSB9fVwiPlxuICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTpzZWFyY2hcIiBbbWF0QmFkZ2VdPVwiYXJlQWxsQ29sdW1uc0NoZWNrZWQoKT8nJzpnZXRDb3VudENvbHVtbnNDaGVja2VkKClcIiBtYXRCYWRnZVNpemU9XCJzbWFsbFwiPjwvbWF0LWljb24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiAobWVudUNsb3NlZCk9XCJvbk1lbnVDbG9zZWQoKVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2VhcmNoLWljb25cIj5leHBhbmRfbW9yZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cIm8tdGFibGUtcXVpY2tmaWx0ZXItbWVudVwiPlxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGNsYXNzPVwiY2hlY2tib3gtY29udGFpbmVyXCI+XG5cbiAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2NoZWNrZWRdPVwiYXJlQWxsQ29sdW1uc0NoZWNrZWQoKVwiIChjaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgIHt7ICdTRUxFQ1RfQUxMJyB8IG9UcmFuc2xhdGV9fVxuICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHF1aWNrRmlsdGVyQ29sdW1uc1wiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIFtjaGVja2VkXT1cImlzQ2hlY2tlZChjb2x1bW4pXCIgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKGNvbHVtbiwgJGV2ZW50KVwiPlxuICAgICAgICAgICAge3sgY29sdW1uLnRpdGxlIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0Nhc2VTZW5zaXRpdmVDaGVja2JveCgpXCI+XG4gICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2NoZWNrZWRdPVwib1RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib1RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlID0gJGV2ZW50LmNoZWNrZWRcIj5cbiAgICAgICAgICAgIHt7ICdUQUJMRS5GSUxURVIuQ0FTRV9TRU5TSVRJVkUnIHwgb1RyYW5zbGF0ZX19XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtbWVudT5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuIl19