@firestitch/filter 18.2.110 → 18.2.115

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.
@@ -1,4 +1,5 @@
1
1
  import { OnInit } from '@angular/core';
2
+ import { CdkDragDrop } from '@angular/cdk/drag-drop';
2
3
  import { IFilterConfigItem } from '../../../interfaces';
3
4
  import { IFilterSavedFilter } from '../../../interfaces/saved-filters.interface';
4
5
  import { BaseItem } from '../../../models/items';
@@ -12,9 +13,10 @@ export declare class FsFilterSavedFilterManageComponent implements OnInit {
12
13
  ngOnInit(): void;
13
14
  get items(): BaseItem<IFilterConfigItem>[];
14
15
  get pluralLabel(): string;
15
- get sortable(): boolean;
16
+ get orderable(): boolean;
16
17
  selectFilter(savedFilter: IFilterSavedFilter): void;
17
18
  remove(savedFilter: IFilterSavedFilter): void;
19
+ drop(event: CdkDragDrop<IFilterSavedFilter[]>): void;
18
20
  order(savedFilters: IFilterSavedFilter[]): void;
19
21
  static ɵfac: i0.ɵɵFactoryDeclaration<FsFilterSavedFilterManageComponent, never>;
20
22
  static ɵcmp: i0.ɵɵComponentDeclaration<FsFilterSavedFilterManageComponent, "ng-component", never, {}, {}, never, never, true, never>;
@@ -12,4 +12,4 @@ import { RangeItem } from '../models/items/range-item';
12
12
  import { SelectItem } from '../models/items/select-item';
13
13
  import { TextItem } from '../models/items/text-item';
14
14
  import { WeekItem } from '../models/items/week-item';
15
- export declare function createFilterItem(item: IFilterConfigItem, filter: FilterComponent): AutocompleteItem | TextItem | SelectItem | ChipsItem | RangeItem | AutocompleteChipsItem | DateItem | DateTimeItem | DateRangeItem | DateTimeRangeItem | WeekItem | CheckboxItem;
15
+ export declare function createFilterItem(item: IFilterConfigItem, filter: FilterComponent): AutocompleteItem | CheckboxItem | ChipsItem | DateItem | DateRangeItem | DateTimeItem | DateTimeRangeItem | TextItem | RangeItem | SelectItem | WeekItem | AutocompleteChipsItem;
@@ -323,7 +323,7 @@ export class FilterComponent {
323
323
  ActionsController,
324
324
  KeywordController,
325
325
  SortController,
326
- ], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }, { propertyName: "headingTemplate", first: true, predicate: FilterHeadingDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "keywordInput", first: true, predicate: KeywordInputComponent, descendants: true }, { propertyName: "reloadEl", first: true, predicate: ["reloadEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"filter-container\"\n [ngClass]=\"{ 'has-primary-filter': primaryFilterVisible$ | async }\"\n [ngClass]=\"{ 'keyword-full-width': keywordFullWidth$ | async }\">\n @if (primaryFilterVisible$ | async) {\n <ng-container *ngTemplateOutlet=\"headingTmpl\"></ng-container>\n }\n <div class=\"filter-bar-container\">\n @if (primaryFilterVisible$ | async) {\n <div class=\"filter-input-container\">\n @if (keywordVisible$ | async) {\n <fs-keyword-input [autofocus]=\"config.autofocus\"></fs-keyword-input>\n }\n @for (item of primaryItems; track item.name) {\n @if (item.visible$ | async) {\n <filter-item\n [item]=\"item\"\n [triggerChangeOn]=\"'change'\">\n </filter-item>\n }\n }\n </div>\n } @else if (hasHeading) {\n <div class=\"filter-heading-container\">\n <ng-container *ngTemplateOutlet=\"headingTmpl\"></ng-container>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"chipsTmpl\"></ng-container>\n }\n <ng-container [ngTemplateOutlet]=\"filterActionsTmpl\"></ng-container>\n </div>\n @if ((primaryFilterVisible$ | async) === true || hasHeading) {\n <ng-container [ngTemplateOutlet]=\"chipsTmpl\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"statusBarTmpl\"></ng-container>\n</div>\n<ng-template #chipsTmpl>\n <fs-filter-chips class=\"filter-chips\"></fs-filter-chips>\n</ng-template>\n<ng-template #statusBarTmpl>\n @if (statusBar) {\n <div\n class=\"filter-status-container\"\n [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div\n class=\"filter-status\"\n #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n }\n</ng-template>\n<ng-template #filterActionsTmpl>\n @if ((actionsVisible$ | async)) {\n <div class=\"filter-actions\">\n <ng-container [ngTemplateOutlet]=\"filterToolbarTmpl\"></ng-container>\n <fs-filter-actions\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n }\n</ng-template>\n<ng-template #filterToolbarTmpl>\n @if (config.reload || config.autoReload) {\n <div class=\"filter-toolbar\">\n @if (config.reload) {\n <a\n mat-icon-button\n (click)=\"reload($event)\"\n class=\"button-reload\">\n <mat-icon #reloadEl>\n refresh\n </mat-icon>\n </a>\n }\n @if (config.autoReload) {\n <a\n mat-icon-button\n class=\"filter-reload\"\n (click)=\"config.autoReload.enabled = !config.autoReload.enabled\">\n <mat-icon>\n {{ config.autoReload.enabled ? 'sync' : 'sync_disabled' }}\n </mat-icon>\n </a>\n }\n </div>\n }\n</ng-template>\n<ng-template #headingTmpl>\n @if (headingTemplate) {\n <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n } @else if (config.heading) {\n <div class=\"heading\">\n <h2>\n {{ config.heading }}\n </h2>\n <div class=\"subheading\">\n {{ config.subheading }}\n </div>\n </div>\n }\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end;margin-top:4px}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis}.filter-container{width:100%}.filter-container.has-primary-filter .heading{margin-bottom:10px}.filter-container.has-primary-filter .filter-bar-container{margin-bottom:4px}.filter-container.keyword-full-width .filter-input-container{flex:1}.filter-container.keyword-full-width .filter-input-container fs-keyword-input{flex:1}.filter-container.keyword-full-width .filter-input-container fs-keyword-input ::ng-deep mat-form-field{width:100%}.filter-container .filter-bar-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:flex-start}.filter-container .filter-bar-container .filter-input-container{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;column-gap:5px;row-gap:10px;flex-wrap:wrap}.filter-container .filter-bar-container .filter-heading-container{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0}.filter-container .filter-bar-container .filter-heading-container fs-keyword-input+fs-saved-filter-autocomplete-chips{margin-left:5px}.filter-container .filter-bar-container+.filter-chips,.filter-container .filter-bar-container+.filter-status-container{margin-top:6px}.filter-container .filter-chips+.filter-status-container{margin-top:4px}.filter-actions{display:flex;align-items:center;flex:1;justify-content:flex-end;gap:5px}.filter-actions ::ng-deep .mdc-icon-button{display:flex;--mdc-icon-button-state-layer-size: 40px;padding:8px}.filter-actions ::ng-deep .mdc-icon-button ::ng-deep svg{display:flex}.filter-toolbar{white-space:nowrap;display:flex;align-items:center}.heading{margin-right:8px}.heading h2{margin:0}.heading h2+.subheading{margin:0}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FilterItemComponent, selector: "filter-item", inputs: ["autofocus", "floatLabel", "autofocusName", "overlayRef", "item", "name", "triggerChangeOn"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: FsFormModule }, { kind: "ngmodule", type: FsClearModule }, { kind: "component", type: FsFilterChipsComponent, selector: "fs-filter-chips" }, { kind: "component", type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { kind: "component", type: MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: KeywordInputComponent, selector: "fs-keyword-input", inputs: ["autofocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
326
+ ], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }, { propertyName: "headingTemplate", first: true, predicate: FilterHeadingDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "keywordInput", first: true, predicate: KeywordInputComponent, descendants: true }, { propertyName: "reloadEl", first: true, predicate: ["reloadEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"filter-container\"\n [ngClass]=\"{ 'has-primary-filter': primaryFilterVisible$ | async }\"\n [ngClass]=\"{ 'keyword-full-width': keywordFullWidth$ | async }\">\n @if (primaryFilterVisible$ | async) {\n <ng-container *ngTemplateOutlet=\"headingTmpl\"></ng-container>\n }\n <div class=\"filter-bar-container\">\n @if (primaryFilterVisible$ | async) {\n <div class=\"filter-input-container\">\n @if (keywordVisible$ | async) {\n <fs-keyword-input [autofocus]=\"config.autofocus\"></fs-keyword-input>\n }\n @for (item of primaryItems; track item.name) {\n @if (item.visible$ | async) {\n <filter-item\n [item]=\"item\"\n [triggerChangeOn]=\"'change'\">\n </filter-item>\n }\n }\n </div>\n } @else if (hasHeading) {\n <div class=\"filter-heading-container\">\n <ng-container *ngTemplateOutlet=\"headingTmpl\"></ng-container>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"chipsTmpl\"></ng-container>\n }\n <ng-container [ngTemplateOutlet]=\"filterActionsTmpl\"></ng-container>\n </div>\n @if ((primaryFilterVisible$ | async) === true || hasHeading) {\n <ng-container [ngTemplateOutlet]=\"chipsTmpl\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"statusBarTmpl\"></ng-container>\n</div>\n<ng-template #chipsTmpl>\n <fs-filter-chips class=\"filter-chips\"></fs-filter-chips>\n</ng-template>\n<ng-template #statusBarTmpl>\n @if (statusBar) {\n <div\n class=\"filter-status-container\"\n [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div\n class=\"filter-status\"\n #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n }\n</ng-template>\n<ng-template #filterActionsTmpl>\n @if ((actionsVisible$ | async)) {\n <div class=\"filter-actions\">\n <ng-container [ngTemplateOutlet]=\"filterToolbarTmpl\"></ng-container>\n <fs-filter-actions\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n }\n</ng-template>\n<ng-template #filterToolbarTmpl>\n @if (config.reload || config.autoReload) {\n <div class=\"filter-toolbar\">\n @if (config.reload) {\n <a\n mat-icon-button\n (click)=\"reload($event)\"\n class=\"button-reload\">\n <mat-icon #reloadEl>\n refresh\n </mat-icon>\n </a>\n }\n @if (config.autoReload) {\n <a\n mat-icon-button\n class=\"filter-reload\"\n (click)=\"config.autoReload.enabled = !config.autoReload.enabled\">\n <mat-icon>\n {{ config.autoReload.enabled ? 'sync' : 'sync_disabled' }}\n </mat-icon>\n </a>\n }\n </div>\n }\n</ng-template>\n<ng-template #headingTmpl>\n @if (headingTemplate) {\n <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n } @else if (config.heading) {\n <div class=\"heading\">\n <h2>\n {{ config.heading }}\n </h2>\n <div class=\"subheading\">\n {{ config.subheading }}\n </div>\n </div>\n }\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end;margin-top:4px}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis}.filter-container{width:100%}.filter-container.has-primary-filter .heading{margin-bottom:10px}.filter-container.has-primary-filter .filter-bar-container{margin-bottom:4px}.filter-container.keyword-full-width .filter-input-container{flex:1}.filter-container.keyword-full-width .filter-input-container fs-keyword-input{flex:1}.filter-container.keyword-full-width .filter-input-container fs-keyword-input ::ng-deep mat-form-field{width:100%}.filter-container .filter-bar-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:flex-start}.filter-container .filter-bar-container .filter-input-container{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;column-gap:5px;row-gap:10px;flex-wrap:wrap}.filter-container .filter-bar-container .filter-heading-container{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0}.filter-container .filter-bar-container .filter-heading-container fs-keyword-input+fs-saved-filter-autocomplete-chips{margin-left:5px}.filter-container .filter-bar-container+.filter-chips,.filter-container .filter-bar-container+.filter-status-container{margin-top:6px}.filter-container .filter-chips+.filter-status-container{margin-top:4px}.filter-actions{display:flex;align-items:center;flex:1;justify-content:flex-end;gap:5px}.filter-actions ::ng-deep .mdc-icon-button{--mdc-icon-button-state-layer-size: 40px;display:flex;align-items:center;padding:8px}.filter-actions ::ng-deep .mdc-icon-button ::ng-deep svg{display:flex}.filter-toolbar{white-space:nowrap;display:flex;align-items:center}.heading{margin-right:8px}.heading h2{margin:0}.heading h2+.subheading{margin:0}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: FilterItemComponent, selector: "filter-item", inputs: ["autofocus", "floatLabel", "autofocusName", "overlayRef", "item", "name", "triggerChangeOn"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: FsFormModule }, { kind: "ngmodule", type: FsClearModule }, { kind: "component", type: FsFilterChipsComponent, selector: "fs-filter-chips" }, { kind: "component", type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { kind: "component", type: MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: KeywordInputComponent, selector: "fs-keyword-input", inputs: ["autofocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
327
327
  }
328
328
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, decorators: [{
329
329
  type: Component,
@@ -350,7 +350,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
350
350
  MatSlideToggle,
351
351
  AsyncPipe,
352
352
  KeywordInputComponent,
353
- ], template: "<div\n class=\"filter-container\"\n [ngClass]=\"{ 'has-primary-filter': primaryFilterVisible$ | async }\"\n [ngClass]=\"{ 'keyword-full-width': keywordFullWidth$ | async }\">\n @if (primaryFilterVisible$ | async) {\n <ng-container *ngTemplateOutlet=\"headingTmpl\"></ng-container>\n }\n <div class=\"filter-bar-container\">\n @if (primaryFilterVisible$ | async) {\n <div class=\"filter-input-container\">\n @if (keywordVisible$ | async) {\n <fs-keyword-input [autofocus]=\"config.autofocus\"></fs-keyword-input>\n }\n @for (item of primaryItems; track item.name) {\n @if (item.visible$ | async) {\n <filter-item\n [item]=\"item\"\n [triggerChangeOn]=\"'change'\">\n </filter-item>\n }\n }\n </div>\n } @else if (hasHeading) {\n <div class=\"filter-heading-container\">\n <ng-container *ngTemplateOutlet=\"headingTmpl\"></ng-container>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"chipsTmpl\"></ng-container>\n }\n <ng-container [ngTemplateOutlet]=\"filterActionsTmpl\"></ng-container>\n </div>\n @if ((primaryFilterVisible$ | async) === true || hasHeading) {\n <ng-container [ngTemplateOutlet]=\"chipsTmpl\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"statusBarTmpl\"></ng-container>\n</div>\n<ng-template #chipsTmpl>\n <fs-filter-chips class=\"filter-chips\"></fs-filter-chips>\n</ng-template>\n<ng-template #statusBarTmpl>\n @if (statusBar) {\n <div\n class=\"filter-status-container\"\n [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div\n class=\"filter-status\"\n #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n }\n</ng-template>\n<ng-template #filterActionsTmpl>\n @if ((actionsVisible$ | async)) {\n <div class=\"filter-actions\">\n <ng-container [ngTemplateOutlet]=\"filterToolbarTmpl\"></ng-container>\n <fs-filter-actions\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n }\n</ng-template>\n<ng-template #filterToolbarTmpl>\n @if (config.reload || config.autoReload) {\n <div class=\"filter-toolbar\">\n @if (config.reload) {\n <a\n mat-icon-button\n (click)=\"reload($event)\"\n class=\"button-reload\">\n <mat-icon #reloadEl>\n refresh\n </mat-icon>\n </a>\n }\n @if (config.autoReload) {\n <a\n mat-icon-button\n class=\"filter-reload\"\n (click)=\"config.autoReload.enabled = !config.autoReload.enabled\">\n <mat-icon>\n {{ config.autoReload.enabled ? 'sync' : 'sync_disabled' }}\n </mat-icon>\n </a>\n }\n </div>\n }\n</ng-template>\n<ng-template #headingTmpl>\n @if (headingTemplate) {\n <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n } @else if (config.heading) {\n <div class=\"heading\">\n <h2>\n {{ config.heading }}\n </h2>\n <div class=\"subheading\">\n {{ config.subheading }}\n </div>\n </div>\n }\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end;margin-top:4px}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis}.filter-container{width:100%}.filter-container.has-primary-filter .heading{margin-bottom:10px}.filter-container.has-primary-filter .filter-bar-container{margin-bottom:4px}.filter-container.keyword-full-width .filter-input-container{flex:1}.filter-container.keyword-full-width .filter-input-container fs-keyword-input{flex:1}.filter-container.keyword-full-width .filter-input-container fs-keyword-input ::ng-deep mat-form-field{width:100%}.filter-container .filter-bar-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:flex-start}.filter-container .filter-bar-container .filter-input-container{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;column-gap:5px;row-gap:10px;flex-wrap:wrap}.filter-container .filter-bar-container .filter-heading-container{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0}.filter-container .filter-bar-container .filter-heading-container fs-keyword-input+fs-saved-filter-autocomplete-chips{margin-left:5px}.filter-container .filter-bar-container+.filter-chips,.filter-container .filter-bar-container+.filter-status-container{margin-top:6px}.filter-container .filter-chips+.filter-status-container{margin-top:4px}.filter-actions{display:flex;align-items:center;flex:1;justify-content:flex-end;gap:5px}.filter-actions ::ng-deep .mdc-icon-button{display:flex;--mdc-icon-button-state-layer-size: 40px;padding:8px}.filter-actions ::ng-deep .mdc-icon-button ::ng-deep svg{display:flex}.filter-toolbar{white-space:nowrap;display:flex;align-items:center}.heading{margin-right:8px}.heading h2{margin:0}.heading h2+.subheading{margin:0}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\n"] }]
353
+ ], template: "<div\n class=\"filter-container\"\n [ngClass]=\"{ 'has-primary-filter': primaryFilterVisible$ | async }\"\n [ngClass]=\"{ 'keyword-full-width': keywordFullWidth$ | async }\">\n @if (primaryFilterVisible$ | async) {\n <ng-container *ngTemplateOutlet=\"headingTmpl\"></ng-container>\n }\n <div class=\"filter-bar-container\">\n @if (primaryFilterVisible$ | async) {\n <div class=\"filter-input-container\">\n @if (keywordVisible$ | async) {\n <fs-keyword-input [autofocus]=\"config.autofocus\"></fs-keyword-input>\n }\n @for (item of primaryItems; track item.name) {\n @if (item.visible$ | async) {\n <filter-item\n [item]=\"item\"\n [triggerChangeOn]=\"'change'\">\n </filter-item>\n }\n }\n </div>\n } @else if (hasHeading) {\n <div class=\"filter-heading-container\">\n <ng-container *ngTemplateOutlet=\"headingTmpl\"></ng-container>\n </div>\n } @else {\n <ng-container *ngTemplateOutlet=\"chipsTmpl\"></ng-container>\n }\n <ng-container [ngTemplateOutlet]=\"filterActionsTmpl\"></ng-container>\n </div>\n @if ((primaryFilterVisible$ | async) === true || hasHeading) {\n <ng-container [ngTemplateOutlet]=\"chipsTmpl\"></ng-container>\n }\n <ng-container *ngTemplateOutlet=\"statusBarTmpl\"></ng-container>\n</div>\n<ng-template #chipsTmpl>\n <fs-filter-chips class=\"filter-chips\"></fs-filter-chips>\n</ng-template>\n<ng-template #statusBarTmpl>\n @if (statusBar) {\n <div\n class=\"filter-status-container\"\n [ngClass]=\"{ 'has-status': !!filterStatus.textContent }\">\n <div\n class=\"filter-status\"\n #filterStatus>\n <ng-container *ngTemplateOutlet=\"statusBar.templateRef\"></ng-container>\n </div>\n </div>\n }\n</ng-template>\n<ng-template #filterActionsTmpl>\n @if ((actionsVisible$ | async)) {\n <div class=\"filter-actions\">\n <ng-container [ngTemplateOutlet]=\"filterToolbarTmpl\"></ng-container>\n <fs-filter-actions\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n }\n</ng-template>\n<ng-template #filterToolbarTmpl>\n @if (config.reload || config.autoReload) {\n <div class=\"filter-toolbar\">\n @if (config.reload) {\n <a\n mat-icon-button\n (click)=\"reload($event)\"\n class=\"button-reload\">\n <mat-icon #reloadEl>\n refresh\n </mat-icon>\n </a>\n }\n @if (config.autoReload) {\n <a\n mat-icon-button\n class=\"filter-reload\"\n (click)=\"config.autoReload.enabled = !config.autoReload.enabled\">\n <mat-icon>\n {{ config.autoReload.enabled ? 'sync' : 'sync_disabled' }}\n </mat-icon>\n </a>\n }\n </div>\n }\n</ng-template>\n<ng-template #headingTmpl>\n @if (headingTemplate) {\n <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n } @else if (config.heading) {\n <div class=\"heading\">\n <h2>\n {{ config.heading }}\n </h2>\n <div class=\"subheading\">\n {{ config.subheading }}\n </div>\n </div>\n }\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end;margin-top:4px}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis}.filter-container{width:100%}.filter-container.has-primary-filter .heading{margin-bottom:10px}.filter-container.has-primary-filter .filter-bar-container{margin-bottom:4px}.filter-container.keyword-full-width .filter-input-container{flex:1}.filter-container.keyword-full-width .filter-input-container fs-keyword-input{flex:1}.filter-container.keyword-full-width .filter-input-container fs-keyword-input ::ng-deep mat-form-field{width:100%}.filter-container .filter-bar-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:flex-start}.filter-container .filter-bar-container .filter-input-container{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;column-gap:5px;row-gap:10px;flex-wrap:wrap}.filter-container .filter-bar-container .filter-heading-container{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0}.filter-container .filter-bar-container .filter-heading-container fs-keyword-input+fs-saved-filter-autocomplete-chips{margin-left:5px}.filter-container .filter-bar-container+.filter-chips,.filter-container .filter-bar-container+.filter-status-container{margin-top:6px}.filter-container .filter-chips+.filter-status-container{margin-top:4px}.filter-actions{display:flex;align-items:center;flex:1;justify-content:flex-end;gap:5px}.filter-actions ::ng-deep .mdc-icon-button{--mdc-icon-button-state-layer-size: 40px;display:flex;align-items:center;padding:8px}.filter-actions ::ng-deep .mdc-icon-button ::ng-deep svg{display:flex}.filter-toolbar{white-space:nowrap;display:flex;align-items:center}.heading{margin-right:8px}.heading h2{margin:0}.heading h2+.subheading{margin:0}@media screen and (min-width: 1200px){html.fs-filter-open body{margin-right:350px}}html.fs-filter-open{scrollbar-width:none}:host ::ng-deep .auto-reload.mat-checked .mat-slide-toggle-thumb-container{transform:translate3d(12px,0,0)}:host ::ng-deep .auto-reload:not(.mat-checked) .mat-slide-toggle-content{color:#ccc}:host ::ng-deep .auto-reload .mat-slide-toggle-thumb,:host ::ng-deep .auto-reload .mat-slide-toggle-thumb-container{height:15px;width:15px}:host ::ng-deep .auto-reload .mat-slide-toggle-content{font-size:90%}:host ::ng-deep .auto-reload .mat-slide-toggle-bar{width:26px;height:10px;border-radius:10px}\n"] }]
354
354
  }], ctorParameters: () => [], propDecorators: { keywordInput: [{
355
355
  type: ViewChild,
356
356
  args: [KeywordInputComponent]
@@ -382,4 +382,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
382
382
  type: HostBinding,
383
383
  args: ['class.fs-filter']
384
384
  }] } });
385
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNy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QUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTWF0SWNvbkFuY2hvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5cbmltcG9ydCB7IEZzQ2xlYXJNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9jbGVhcic7XG5pbXBvcnQgeyBGc0Zvcm1Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9mb3JtJztcblxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQWN0aW9uc0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2FjdGlvbnMtY29udHJvbGxlcic7XG5pbXBvcnQgeyBGaWx0ZXJIZWFkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJU29ydGluZ0NoYW5nZUV2ZW50LCBLZXlWYWx1ZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRnNGaWx0ZXJBY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgRmlsdGVyQ29uZmlnLFxuICBJRmlsdGVyQ29uZmlnSXRlbSxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZzRmlsdGVyQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpbHRlci1jb25maWcnO1xuaW1wb3J0IHsgQmFzZUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaXRlbXMvYmFzZS1pdGVtJztcbmltcG9ydCB7IFNvcnRDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRmlsdGVyQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbHRlci1jb250cm9sbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9jdXNDb250cm9sbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZvY3VzLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBLZXl3b3JkQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2tleXdvcmQtY29udHJvbGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcnNpc3RhbmNlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BlcnNpc3RhbmNlLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXJ5LXBhcmFtLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTYXZlZEZpbHRlckNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zYXZlZC1maWx0ZXItY29udHJvbGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZzRmlsdGVyQWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRnNGaWx0ZXJDaGlwc0NvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlci1jaGlwcy9maWx0ZXItY2hpcHMuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbHRlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJzLWl0ZW0nO1xuaW1wb3J0IHsgS2V5d29yZElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4va2V5d29yZC1pbnB1dC9rZXl3b3JkLWlucHV0LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEZpbHRlclN0YXR1c0JhckRpcmVjdGl2ZSB9IGZyb20gJy4vLi4vLi4vZGlyZWN0aXZlcy9zdGF0dXMtYmFyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGU19GSUxURVJfQ09ORklHIH0gZnJvbSAnLi8uLi8uLi9pbmplY3RvcnMvZmlsdGVyLWNvbmZpZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtZmlsdGVyJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICBQZXJzaXN0YW5jZUNvbnRyb2xsZXIsXG4gICAgUXVlcnlQYXJhbUNvbnRyb2xsZXIsXG4gICAgRm9jdXNDb250cm9sbGVyU2VydmljZSxcbiAgICBGaWx0ZXJDb250cm9sbGVyLFxuICAgIFNhdmVkRmlsdGVyQ29udHJvbGxlcixcbiAgICBBY3Rpb25zQ29udHJvbGxlcixcbiAgICBLZXl3b3JkQ29udHJvbGxlcixcbiAgICBTb3J0Q29udHJvbGxlcixcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEZpbHRlckl0ZW1Db21wb25lbnQsXG4gICAgTmdDbGFzcyxcbiAgICBNYXRJY29uLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEZzRm9ybU1vZHVsZSxcbiAgICBGc0NsZWFyTW9kdWxlLFxuICAgIEZzRmlsdGVyQ2hpcHNDb21wb25lbnQsXG4gICAgRnNGaWx0ZXJBY3Rpb25zQ29tcG9uZW50LFxuICAgIE1hdEljb25BbmNob3IsXG4gICAgTWF0U2xpZGVUb2dnbGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIEtleXdvcmRJbnB1dENvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoS2V5d29yZElucHV0Q29tcG9uZW50KVxuICBwdWJsaWMga2V5d29yZElucHV0OiBLZXl3b3JkSW5wdXRDb21wb25lbnQ7XG4gIFxuICBASW5wdXQoJ2NvbmZpZycpIHB1YmxpYyBzZXQgc2V0RmlsdGVyQ29uZmlnKHZhbHVlOiBGaWx0ZXJDb25maWcpIHtcbiAgICB0aGlzLl9maWx0ZXJDb25maWcgPSB2YWx1ZTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChGaWx0ZXJTdGF0dXNCYXJEaXJlY3RpdmUpXG4gIHB1YmxpYyBzdGF0dXNCYXI6IEZpbHRlclN0YXR1c0JhckRpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKEZpbHRlckhlYWRpbmdEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHVibGljIGhlYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKCdyZWxvYWRFbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgcmVsb2FkRWw6IEVsZW1lbnRSZWY7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5maWx0ZXJzLW9wZW4nKVxuICBwdWJsaWMgc2hvd0ZpbHRlck1lbnUgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLndpbmRvdy1kZXNrdG9wJylcbiAgcHVibGljIHdpbmRvd0Rlc2t0b3AgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLWZpbHRlcicpXG4gIHB1YmxpYyBmc0ZpbHRlckNsYXNzID0gdHJ1ZTtcblxuICBwcml2YXRlIF9jb25maWc6IEZzRmlsdGVyQ29uZmlnO1xuICBwcml2YXRlIF9maWx0ZXJDb25maWc6IEZpbHRlckNvbmZpZztcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9kZWZhdWx0Q29uZmlnID0gaW5qZWN0KEZTX0ZJTFRFUl9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgX3pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSBfYWN0aW9uc0NvbnRyb2xsZXIgPSBpbmplY3QoQWN0aW9uc0NvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9maWx0ZXJDb250cm9sbGVyID0gaW5qZWN0KEZpbHRlckNvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9zb3J0Q29udHJvbGxlciA9IGluamVjdChTb3J0Q29udHJvbGxlcik7XG4gIHByaXZhdGUgX3NhdmVkRmlsdGVyQ29udHJvbGxlciA9IGluamVjdChTYXZlZEZpbHRlckNvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9rZXl3b3JkQ29udHJvbGxlciA9IGluamVjdChLZXl3b3JkQ29udHJvbGxlcik7XG5cbiAgY29uc3RydWN0b3IoXG4gICkge1xuICAgIHRoaXMuX2ZpbHRlckNvbnRyb2xsZXIuZmlsdGVyID0gdGhpcztcbiAgICB0aGlzLl91cGRhdGVXaW5kb3dXaWR0aCgpO1xuICAgIHRoaXMuX2xpc3RlbldpbmRvd1Jlc2l6ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeVBhcmFtcygpOiBLZXlWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNvbnRyb2xsZXIucXVlcnlQYXJhbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKTogS2V5VmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJDb250cm9sbGVyLnF1ZXJ5O1xuICB9XG5cbiAgcHVibGljIGdldCB2YWx1ZXMoKTogS2V5VmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJDb250cm9sbGVyLnZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBEbyB1cGRhdGUgdmFsdWUgb2Ygc29tZSBmaWVsZFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gdmFsdWVzIGZvciB1cGRhdGVcbiAgICpcbiAgICogVG8gdXBkYXRlIHRleHQgdmFsdWUganVzdCBwYXNzIG5ldyB0ZXh0IHZhbHVlXG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVTZWxlY3RWYWx1ZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IGtleXdvcmQ6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKiBUbyB1cGRhdGUgc2VsZWN0IG9yIG9ic2VydmFibGUgc2VsZWN0IHlvdSBjb3VsZCBwYXNzIHN1aXRhYmxlIHZhbHVlXG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVTZWxlY3RWYWx1ZSh2YWw6IG51bWJlcikge1xuICAgKiAgIHRoaXMuZmlsdGVyRWwudXBkYXRlVmFsdWVzKHsgc2ltcGxlX3NlbGVjdDogdmFsIH0sIHsgb2JzZXJ2YWJsZV9zZWxlY3Q6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKiBUbyB1cGRhdGUgY2hlY2tib3ggdmFsdWUganVzdCBwYXNzIHRydWUvZmFsc2UgYXMgdmFsdWVcbiAgICpcbiAgICogcHVibGljIHVwZGF0ZUNoZWNrb3godmFsOiBib29sZWFuKSB7XG4gICAqICAgdGhpcy5maWx0ZXJFbC51cGRhdGVWYWx1ZXMoeyBjaGVja2JveDogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqIFRvIHVwZGF0ZSByYW5nZSB2YWx1ZSBqdXN0IHBhc3Mgb2JqZWN0IHdpdGggbWluJm1heCBvYmplY3Qgb3IganVzdCB3aXRoIG9uZSBvZiB0YXJnZXRzXG4gICAqXG4gICAqIEV4LjogeyBtaW46IDEwLCBtYXggMTUgfSwgeyBtaW46IDUgfSwgeyBtYXggNSB9XG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVSYW5nZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IHJhbmdlOiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIGF1dG9jb21wbGV0ZSBqdXN0IHBhc3Mgb2JqZWN0IHdpdGggbmFtZS92YWx1ZSBmaWVsZHNcbiAgICpcbiAgICogRXguOiB7IG5hbWU6ICdKb2huIERvZScsIHZhbHVlOiAxIH1cbiAgICpcbiAgICogcHVibGljIHVwZGF0ZUF1dG9jb21wbGV0ZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IGF1dG9jb21wbGV0ZV91c2VyX2lkOiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIGF1dG9jb21wbGV0ZWNoaXBzIGp1c3QgcGFzczpcbiAgICpcbiAgICogMSkgb2JqZWN0IHdpdGggbmFtZS92YWx1ZSBmaWVsZHMgLSB3aWxsIGJlIGFwcGVuZGVkIHRvIGV4aXN0aW5nIHNldCBvZiB2YWx1ZXNcbiAgICpcbiAgICogeyBuYW1lOiAnSm9obiBEb2UnLCB2YWx1ZTogMSB9XG4gICAqXG4gICAqIDIpIGFycmF5IG9mIG9iamVjdHMgLSB3aWxsIGJlIGFwcGVuZGVkIHRvIGV4aXN0aW5nIHNldCBvZiB2YWx1ZXNcbiAgICpcbiAgICogW3sgbmFtZTogJ0pvaG4gRG9lJywgdmFsdWU6IDEgfSwgeyBuYW1lOiAnRGFyeWEgRmlsaXBvdmEnLCB2YWx1ZTogMiB9XVxuICAgKlxuICAgKiAzKSBudWxsIC0gY2xlYXIgZXhpc3Rpbmcgc2V0IG9mIHZhbHVlc1xuICAgKlxuICAgKiBwdWJsaWMgdXBkYXRlQXV0b2NvbXBsZXRlKHZhbCkge1xuICAgKiAgIHRoaXMuZmlsdGVyRWwudXBkYXRlVmFsdWVzKHsgYXV0b2NvbXBsZXRlY2hpcHNfdXNlcl9pZDogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqL1xuICBwdWJsaWMgc2V0IHZhbHVlcyh2YWx1ZXMpIHtcbiAgICB0aGlzLl9maWx0ZXJDb250cm9sbGVyLnZhbHVlcyA9IHZhbHVlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCk6IEZzRmlsdGVyQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNvbnRyb2xsZXIuaXRlbXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByaW1hcnlJdGVtcygpOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnByaW1hcnkpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZSgpIHtcbiAgICB0aGlzLl9maWx0ZXJDb250cm9sbGVyLmNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNIZWFkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaGVhZGluZ1RlbXBsYXRlIHx8ICEhdGhpcy5jb25maWcuaGVhZGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQga2V5d29yZFZpc2libGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9rZXl3b3JkQ29udHJvbGxlci5rZXl3b3JkVmlzaWJsZSQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGtleXdvcmRGdWxsV2lkdGgkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9rZXl3b3JkQ29udHJvbGxlci5rZXl3b3JkRnVsbFdpZHRoJDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJpbWFyeUZpbHRlclZpc2libGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHtcbiAgICAgIGtleXdvcmRWaXNpYmxlOiB0aGlzLmtleXdvcmRWaXNpYmxlJCxcbiAgICAgIHNhdmVkRmlsdGVyVmlzaWJsZTogb2YodGhpcy5pdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLnZpc2libGUgJiYgaXRlbS5wcmltYXJ5KSksXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHsga2V5d29yZFZpc2libGUsIHNhdmVkRmlsdGVyVmlzaWJsZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGtleXdvcmRWaXNpYmxlIHx8IHNhdmVkRmlsdGVyVmlzaWJsZTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3Rpb25zVmlzaWJsZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnNDb250cm9sbGVyLnZpc2libGUkO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3Rpb25zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9uc0NvbnRyb2xsZXIuYWN0aW9ucyQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lbnVBY3Rpb25zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9uc0NvbnRyb2xsZXIubWVudUFjdGlvbnMkO1xuICB9XG5cbiAgcHVibGljIGdldCBzYXZlZEZpbHRlckNvbnRyb2xsZXIoKTogU2F2ZWRGaWx0ZXJDb250cm9sbGVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2F2ZWRGaWx0ZXJDb250cm9sbGVyO1xuICB9XG5cbiAgcHVibGljIGdldCBzb3J0Q29udHJvbGxlcigpOiBTb3J0Q29udHJvbGxlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRDb250cm9sbGVyO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIC4uLih0aGlzLl9kZWZhdWx0Q29uZmlnIHx8IHt9KSxcbiAgICAgIC4uLnRoaXMuX2ZpbHRlckNvbmZpZyxcbiAgICB9O1xuXG4gICAgdGhpcy5fY29uZmlnID0gbmV3IEZzRmlsdGVyQ29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5fYWN0aW9uc0NvbnRyb2xsZXIuc2V0Q29uZmlnKHRoaXMuY29uZmlnKTtcblxuICAgIHRoaXMuX2luaXRJdGVtcygpO1xuICAgIHRoaXMuX2luaXRBdXRvUmVsb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKCkge1xuICAgIHRoaXMua2V5d29yZElucHV0Py5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNvcnQoc29ydDogSVNvcnRpbmdDaGFuZ2VFdmVudCwgZW1pdENoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLl9zb3J0Q29udHJvbGxlci51cGRhdGVTb3J0KHNvcnQsIGVtaXRDaGFuZ2UpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtVmFsdWVzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5vbkVtcHR5SXRlbVZhbHVlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNJdGVtVmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAuc29tZSgoaXRlbSkgPT4gaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtVmFsdWUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXNcbiAgICAgIC5maW5kKChfaXRlbSkgPT4gX2l0ZW0ubmFtZSA9PT0gbmFtZSk7XG5cbiAgICByZXR1cm4gaXRlbT8udmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2hvd0l0ZW0obmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5nZXRJdGVtKG5hbWUpPy5zaG93KCk7XG4gIH1cblxuICBwdWJsaWMgaGlkZUl0ZW0obmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5nZXRJdGVtKG5hbWUpPy5oaWRlKCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJJdGVtKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0obmFtZSk7XG5cbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpdGVtLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoZXZlbnQgPSBudWxsKSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLl9maWx0ZXJDb250cm9sbGVyLmZpbHRlcnNDbGVhcigpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmNsZWFyKSB7XG4gICAgICB0aGlzLmNvbmZpZy5jbGVhcigpO1xuICAgIH1cblxuICAgIHRoaXMua2V5d29yZElucHV0Py5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZChldmVudCA9IG51bGwpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbCA9IHRoaXMucmVsb2FkRWw/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZihlbCkge1xuICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICdhbGwgMC43NXMgMC4wcyc7XG4gICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAncm90YXRlKDM2MGRlZyknO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9IG51bGw7XG4gICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9IG51bGw7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW0obmFtZSk6IEJhc2VJdGVtPGFueT4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgaXRlbShuYW1lKS52YWx1ZSQgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIGdldEl0ZW1WYWx1ZUNoYW5nZSQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShuYW1lKS52YWx1ZSQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGZpbHRlciBhY3Rpb25zIGNvbmZpZ1xuICAgKlxuICAgKiBAcGFyYW0gYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUFjdGlvbnMoYWN0aW9uczogRnNGaWx0ZXJBY3Rpb25bXSk6IHZvaWQge1xuICAgIHRoaXMuX2FjdGlvbnNDb250cm9sbGVyLmluaXRBY3Rpb25zKGFjdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgXCJLZXl3b3JkXCIgZmllbGQgaWYgaXQgcHJlc2VudFxuICAgKi9cbiAgcHVibGljIHNob3dLZXl3b3JkRmllbGQoKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5d29yZENvbnRyb2xsZXIuc2hvdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgXCJLZXl3b3JkXCIgZmllbGQgaWYgaXQgcHJlc2VudFxuICAgKi9cbiAgcHVibGljIGhpZGVLZXl3b3JkRmllbGQoKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5d29yZENvbnRyb2xsZXIuaGlkZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdvIHRocm91Z2ggYWN0aW9ucyBhbmQgY2hlY2sgc2hvdygpIGNhbGxiYWNrIGFuZCB1cGRhdGUgdmlzaWJsZSBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlQWN0aW9uc1Zpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aW9uc0NvbnRyb2xsZXIudXBkYXRlQWN0aW9uc1Zpc2liaWxpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyB0aHJvdWdoIGFjdGlvbnMgYW5kIGNoZWNrIGRpc2FibGVkKCkgY2FsbGJhY2sgYW5kIHVwZGF0ZSBkaXNhYmxlZCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZURpc2FibGVkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aW9uc0NvbnRyb2xsZXIudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlV2luZG93V2lkdGgoKSB7XG4gICAgdGhpcy53aW5kb3dEZXNrdG9wID0gd2luZG93LmlubmVyV2lkdGggPiAxMjAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuV2luZG93UmVzaXplKCkge1xuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlV2luZG93V2lkdGgoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0SXRlbXMoKSB7XG4gICAgdGhpcy5fZmlsdGVyQ29udHJvbGxlci5pbml0KHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRBdXRvUmVsb2FkKCkge1xuICAgIGlmKHRoaXMuY29uZmlnLmF1dG9SZWxvYWQpIHtcbiAgICAgIGludGVydmFsKHRoaXMuY29uZmlnLmF1dG9SZWxvYWQuc2Vjb25kcyAqIDEwMDApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmNvbmZpZy5hdXRvUmVsb2FkLmVuYWJsZWQpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWxvYWQobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiXG4gICAgW25nQ2xhc3NdPVwieyAnaGFzLXByaW1hcnktZmlsdGVyJzogcHJpbWFyeUZpbHRlclZpc2libGUkIHwgYXN5bmMgfVwiXG4gICAgW25nQ2xhc3NdPVwieyAna2V5d29yZC1mdWxsLXdpZHRoJzoga2V5d29yZEZ1bGxXaWR0aCQgfCBhc3luYyB9XCI+XG4gIEBpZiAocHJpbWFyeUZpbHRlclZpc2libGUkIHwgYXN5bmMpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGluZ1RtcGxcIj48L25nLWNvbnRhaW5lcj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWJhci1jb250YWluZXJcIj5cbiAgICBAaWYgKHByaW1hcnlGaWx0ZXJWaXNpYmxlJCB8IGFzeW5jKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICBAaWYgKGtleXdvcmRWaXNpYmxlJCB8IGFzeW5jKSB7XG4gICAgICAgICAgPGZzLWtleXdvcmQtaW5wdXQgW2F1dG9mb2N1c109XCJjb25maWcuYXV0b2ZvY3VzXCI+PC9mcy1rZXl3b3JkLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgcHJpbWFyeUl0ZW1zOyB0cmFjayBpdGVtLm5hbWUpIHtcbiAgICAgICAgICBAaWYgKGl0ZW0udmlzaWJsZSQgfCBhc3luYykge1xuICAgICAgICAgICAgPGZpbHRlci1pdGVtXG4gICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICBbdHJpZ2dlckNoYW5nZU9uXT1cIidjaGFuZ2UnXCI+XG4gICAgICAgICAgICA8L2ZpbHRlci1pdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoaGFzSGVhZGluZykge1xuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1oZWFkaW5nLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGluZ1RtcGxcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoaXBzVG1wbFwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlckFjdGlvbnNUbXBsXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICBAaWYgKChwcmltYXJ5RmlsdGVyVmlzaWJsZSQgfCBhc3luYykgPT09IHRydWUgfHwgaGFzSGVhZGluZykge1xuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hpcHNUbXBsXCI+PC9uZy1jb250YWluZXI+XG4gIH1cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0JhclRtcGxcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjaGlwc1RtcGw+XG4gIDxmcy1maWx0ZXItY2hpcHMgY2xhc3M9XCJmaWx0ZXItY2hpcHNcIj48L2ZzLWZpbHRlci1jaGlwcz5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3N0YXR1c0JhclRtcGw+XG4gIEBpZiAoc3RhdHVzQmFyKSB7XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZpbHRlci1zdGF0dXMtY29udGFpbmVyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnaGFzLXN0YXR1cyc6ICEhZmlsdGVyU3RhdHVzLnRleHRDb250ZW50IH1cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci1zdGF0dXNcIlxuICAgICAgICAgICNmaWx0ZXJTdGF0dXM+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNCYXIudGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNmaWx0ZXJBY3Rpb25zVG1wbD5cbiAgQGlmICgoYWN0aW9uc1Zpc2libGUkIHwgYXN5bmMpKSB7XG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1hY3Rpb25zXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRvb2xiYXJUbXBsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8ZnMtZmlsdGVyLWFjdGlvbnNcbiAgICAgICAgW2FjdGlvbnNdPVwiYWN0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgIFtrZWJhYkFjdGlvbnNdPVwibWVudUFjdGlvbnMkIHwgYXN5bmNcIj5cbiAgICAgIDwvZnMtZmlsdGVyLWFjdGlvbnM+XG4gICAgPC9kaXY+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2ZpbHRlclRvb2xiYXJUbXBsPlxuICBAaWYgKGNvbmZpZy5yZWxvYWQgfHwgY29uZmlnLmF1dG9SZWxvYWQpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXRvb2xiYXJcIj5cbiAgICAgIEBpZiAoY29uZmlnLnJlbG9hZCkge1xuICAgICAgICA8YVxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwicmVsb2FkKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tcmVsb2FkXCI+XG4gICAgICAgICAgPG1hdC1pY29uICNyZWxvYWRFbD5cbiAgICAgICAgICAgIHJlZnJlc2hcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2E+XG4gICAgICB9XG4gICAgICBAaWYgKGNvbmZpZy5hdXRvUmVsb2FkKSB7XG4gICAgICAgIDxhXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXJlbG9hZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29uZmlnLmF1dG9SZWxvYWQuZW5hYmxlZCA9ICFjb25maWcuYXV0b1JlbG9hZC5lbmFibGVkXCI+XG4gICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAge3sgY29uZmlnLmF1dG9SZWxvYWQuZW5hYmxlZCA/ICdzeW5jJyA6ICdzeW5jX2Rpc2FibGVkJyB9fVxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvYT5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGluZ1RtcGw+XG4gIEBpZiAoaGVhZGluZ1RlbXBsYXRlKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRpbmdUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICB9IEBlbHNlIGlmIChjb25maWcuaGVhZGluZykge1xuICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+XG4gICAgICA8aDI+XG4gICAgICAgIHt7IGNvbmZpZy5oZWFkaW5nIH19XG4gICAgICA8L2gyPlxuICAgICAgPGRpdiBjbGFzcz1cInN1YmhlYWRpbmdcIj5cbiAgICAgICAge3sgY29uZmlnLnN1YmhlYWRpbmcgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPiJdfQ==
385
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNy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QUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTWF0SWNvbkFuY2hvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XG5cbmltcG9ydCB7IEZzQ2xlYXJNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9jbGVhcic7XG5pbXBvcnQgeyBGc0Zvcm1Nb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9mb3JtJztcblxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQWN0aW9uc0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2FjdGlvbnMtY29udHJvbGxlcic7XG5pbXBvcnQgeyBGaWx0ZXJIZWFkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJU29ydGluZ0NoYW5nZUV2ZW50LCBLZXlWYWx1ZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRnNGaWx0ZXJBY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgRmlsdGVyQ29uZmlnLFxuICBJRmlsdGVyQ29uZmlnSXRlbSxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEZzRmlsdGVyQ29uZmlnIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZpbHRlci1jb25maWcnO1xuaW1wb3J0IHsgQmFzZUl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaXRlbXMvYmFzZS1pdGVtJztcbmltcG9ydCB7IFNvcnRDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRmlsdGVyQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbHRlci1jb250cm9sbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9jdXNDb250cm9sbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZvY3VzLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBLZXl3b3JkQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2tleXdvcmQtY29udHJvbGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcnNpc3RhbmNlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BlcnNpc3RhbmNlLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXJ5LXBhcmFtLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTYXZlZEZpbHRlckNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zYXZlZC1maWx0ZXItY29udHJvbGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZzRmlsdGVyQWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRnNGaWx0ZXJDaGlwc0NvbXBvbmVudCB9IGZyb20gJy4uL2ZpbHRlci1jaGlwcy9maWx0ZXItY2hpcHMuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbHRlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9maWx0ZXJzLWl0ZW0nO1xuaW1wb3J0IHsgS2V5d29yZElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4va2V5d29yZC1pbnB1dC9rZXl3b3JkLWlucHV0LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IEZpbHRlclN0YXR1c0JhckRpcmVjdGl2ZSB9IGZyb20gJy4vLi4vLi4vZGlyZWN0aXZlcy9zdGF0dXMtYmFyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGU19GSUxURVJfQ09ORklHIH0gZnJvbSAnLi8uLi8uLi9pbmplY3RvcnMvZmlsdGVyLWNvbmZpZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtZmlsdGVyJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICBQZXJzaXN0YW5jZUNvbnRyb2xsZXIsXG4gICAgUXVlcnlQYXJhbUNvbnRyb2xsZXIsXG4gICAgRm9jdXNDb250cm9sbGVyU2VydmljZSxcbiAgICBGaWx0ZXJDb250cm9sbGVyLFxuICAgIFNhdmVkRmlsdGVyQ29udHJvbGxlcixcbiAgICBBY3Rpb25zQ29udHJvbGxlcixcbiAgICBLZXl3b3JkQ29udHJvbGxlcixcbiAgICBTb3J0Q29udHJvbGxlcixcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEZpbHRlckl0ZW1Db21wb25lbnQsXG4gICAgTmdDbGFzcyxcbiAgICBNYXRJY29uLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEZzRm9ybU1vZHVsZSxcbiAgICBGc0NsZWFyTW9kdWxlLFxuICAgIEZzRmlsdGVyQ2hpcHNDb21wb25lbnQsXG4gICAgRnNGaWx0ZXJBY3Rpb25zQ29tcG9uZW50LFxuICAgIE1hdEljb25BbmNob3IsXG4gICAgTWF0U2xpZGVUb2dnbGUsXG4gICAgQXN5bmNQaXBlLFxuICAgIEtleXdvcmRJbnB1dENvbXBvbmVudCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBWaWV3Q2hpbGQoS2V5d29yZElucHV0Q29tcG9uZW50KVxuICBwdWJsaWMga2V5d29yZElucHV0OiBLZXl3b3JkSW5wdXRDb21wb25lbnQ7XG4gIFxuICBASW5wdXQoJ2NvbmZpZycpIHB1YmxpYyBzZXQgc2V0RmlsdGVyQ29uZmlnKHZhbHVlOiBGaWx0ZXJDb25maWcpIHtcbiAgICB0aGlzLl9maWx0ZXJDb25maWcgPSB2YWx1ZTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChGaWx0ZXJTdGF0dXNCYXJEaXJlY3RpdmUpXG4gIHB1YmxpYyBzdGF0dXNCYXI6IEZpbHRlclN0YXR1c0JhckRpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKEZpbHRlckhlYWRpbmdEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgcHVibGljIGhlYWRpbmdUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKCdyZWxvYWRFbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwdWJsaWMgcmVsb2FkRWw6IEVsZW1lbnRSZWY7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5maWx0ZXJzLW9wZW4nKVxuICBwdWJsaWMgc2hvd0ZpbHRlck1lbnUgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLndpbmRvdy1kZXNrdG9wJylcbiAgcHVibGljIHdpbmRvd0Rlc2t0b3AgPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLWZpbHRlcicpXG4gIHB1YmxpYyBmc0ZpbHRlckNsYXNzID0gdHJ1ZTtcblxuICBwcml2YXRlIF9jb25maWc6IEZzRmlsdGVyQ29uZmlnO1xuICBwcml2YXRlIF9maWx0ZXJDb25maWc6IEZpbHRlckNvbmZpZztcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9kZWZhdWx0Q29uZmlnID0gaW5qZWN0KEZTX0ZJTFRFUl9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgX3pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSBfYWN0aW9uc0NvbnRyb2xsZXIgPSBpbmplY3QoQWN0aW9uc0NvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9maWx0ZXJDb250cm9sbGVyID0gaW5qZWN0KEZpbHRlckNvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9zb3J0Q29udHJvbGxlciA9IGluamVjdChTb3J0Q29udHJvbGxlcik7XG4gIHByaXZhdGUgX3NhdmVkRmlsdGVyQ29udHJvbGxlciA9IGluamVjdChTYXZlZEZpbHRlckNvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9rZXl3b3JkQ29udHJvbGxlciA9IGluamVjdChLZXl3b3JkQ29udHJvbGxlcik7XG5cbiAgY29uc3RydWN0b3IoXG4gICkge1xuICAgIHRoaXMuX2ZpbHRlckNvbnRyb2xsZXIuZmlsdGVyID0gdGhpcztcbiAgICB0aGlzLl91cGRhdGVXaW5kb3dXaWR0aCgpO1xuICAgIHRoaXMuX2xpc3RlbldpbmRvd1Jlc2l6ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBxdWVyeVBhcmFtcygpOiBLZXlWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNvbnRyb2xsZXIucXVlcnlQYXJhbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKTogS2V5VmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJDb250cm9sbGVyLnF1ZXJ5O1xuICB9XG5cbiAgcHVibGljIGdldCB2YWx1ZXMoKTogS2V5VmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJDb250cm9sbGVyLnZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBEbyB1cGRhdGUgdmFsdWUgb2Ygc29tZSBmaWVsZFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gdmFsdWVzIGZvciB1cGRhdGVcbiAgICpcbiAgICogVG8gdXBkYXRlIHRleHQgdmFsdWUganVzdCBwYXNzIG5ldyB0ZXh0IHZhbHVlXG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVTZWxlY3RWYWx1ZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IGtleXdvcmQ6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKiBUbyB1cGRhdGUgc2VsZWN0IG9yIG9ic2VydmFibGUgc2VsZWN0IHlvdSBjb3VsZCBwYXNzIHN1aXRhYmxlIHZhbHVlXG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVTZWxlY3RWYWx1ZSh2YWw6IG51bWJlcikge1xuICAgKiAgIHRoaXMuZmlsdGVyRWwudXBkYXRlVmFsdWVzKHsgc2ltcGxlX3NlbGVjdDogdmFsIH0sIHsgb2JzZXJ2YWJsZV9zZWxlY3Q6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKiBUbyB1cGRhdGUgY2hlY2tib3ggdmFsdWUganVzdCBwYXNzIHRydWUvZmFsc2UgYXMgdmFsdWVcbiAgICpcbiAgICogcHVibGljIHVwZGF0ZUNoZWNrb3godmFsOiBib29sZWFuKSB7XG4gICAqICAgdGhpcy5maWx0ZXJFbC51cGRhdGVWYWx1ZXMoeyBjaGVja2JveDogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqIFRvIHVwZGF0ZSByYW5nZSB2YWx1ZSBqdXN0IHBhc3Mgb2JqZWN0IHdpdGggbWluJm1heCBvYmplY3Qgb3IganVzdCB3aXRoIG9uZSBvZiB0YXJnZXRzXG4gICAqXG4gICAqIEV4LjogeyBtaW46IDEwLCBtYXggMTUgfSwgeyBtaW46IDUgfSwgeyBtYXggNSB9XG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVSYW5nZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IHJhbmdlOiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIGF1dG9jb21wbGV0ZSBqdXN0IHBhc3Mgb2JqZWN0IHdpdGggbmFtZS92YWx1ZSBmaWVsZHNcbiAgICpcbiAgICogRXguOiB7IG5hbWU6ICdKb2huIERvZScsIHZhbHVlOiAxIH1cbiAgICpcbiAgICogcHVibGljIHVwZGF0ZUF1dG9jb21wbGV0ZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IGF1dG9jb21wbGV0ZV91c2VyX2lkOiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIGF1dG9jb21wbGV0ZWNoaXBzIGp1c3QgcGFzczpcbiAgICpcbiAgICogMSkgb2JqZWN0IHdpdGggbmFtZS92YWx1ZSBmaWVsZHMgLSB3aWxsIGJlIGFwcGVuZGVkIHRvIGV4aXN0aW5nIHNldCBvZiB2YWx1ZXNcbiAgICpcbiAgICogeyBuYW1lOiAnSm9obiBEb2UnLCB2YWx1ZTogMSB9XG4gICAqXG4gICAqIDIpIGFycmF5IG9mIG9iamVjdHMgLSB3aWxsIGJlIGFwcGVuZGVkIHRvIGV4aXN0aW5nIHNldCBvZiB2YWx1ZXNcbiAgICpcbiAgICogW3sgbmFtZTogJ0pvaG4gRG9lJywgdmFsdWU6IDEgfSwgeyBuYW1lOiAnRGFyeWEgRmlsaXBvdmEnLCB2YWx1ZTogMiB9XVxuICAgKlxuICAgKiAzKSBudWxsIC0gY2xlYXIgZXhpc3Rpbmcgc2V0IG9mIHZhbHVlc1xuICAgKlxuICAgKiBwdWJsaWMgdXBkYXRlQXV0b2NvbXBsZXRlKHZhbCkge1xuICAgKiAgIHRoaXMuZmlsdGVyRWwudXBkYXRlVmFsdWVzKHsgYXV0b2NvbXBsZXRlY2hpcHNfdXNlcl9pZDogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqL1xuICBwdWJsaWMgc2V0IHZhbHVlcyh2YWx1ZXMpIHtcbiAgICB0aGlzLl9maWx0ZXJDb250cm9sbGVyLnZhbHVlcyA9IHZhbHVlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCk6IEZzRmlsdGVyQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckNvbnRyb2xsZXIuaXRlbXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByaW1hcnlJdGVtcygpOiBCYXNlSXRlbTxJRmlsdGVyQ29uZmlnSXRlbT5bXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnByaW1hcnkpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZSgpIHtcbiAgICB0aGlzLl9maWx0ZXJDb250cm9sbGVyLmNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNIZWFkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuaGVhZGluZ1RlbXBsYXRlIHx8ICEhdGhpcy5jb25maWcuaGVhZGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQga2V5d29yZFZpc2libGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9rZXl3b3JkQ29udHJvbGxlci5rZXl3b3JkVmlzaWJsZSQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGtleXdvcmRGdWxsV2lkdGgkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9rZXl3b3JkQ29udHJvbGxlci5rZXl3b3JkRnVsbFdpZHRoJDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcHJpbWFyeUZpbHRlclZpc2libGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KHtcbiAgICAgIGtleXdvcmRWaXNpYmxlOiB0aGlzLmtleXdvcmRWaXNpYmxlJCxcbiAgICAgIHNhdmVkRmlsdGVyVmlzaWJsZTogb2YodGhpcy5pdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLnZpc2libGUgJiYgaXRlbS5wcmltYXJ5KSksXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHsga2V5d29yZFZpc2libGUsIHNhdmVkRmlsdGVyVmlzaWJsZSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGtleXdvcmRWaXNpYmxlIHx8IHNhdmVkRmlsdGVyVmlzaWJsZTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3Rpb25zVmlzaWJsZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnNDb250cm9sbGVyLnZpc2libGUkO1xuICB9XG5cbiAgcHVibGljIGdldCBhY3Rpb25zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9uc0NvbnRyb2xsZXIuYWN0aW9ucyQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lbnVBY3Rpb25zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9uc0NvbnRyb2xsZXIubWVudUFjdGlvbnMkO1xuICB9XG5cbiAgcHVibGljIGdldCBzYXZlZEZpbHRlckNvbnRyb2xsZXIoKTogU2F2ZWRGaWx0ZXJDb250cm9sbGVyIHtcbiAgICByZXR1cm4gdGhpcy5fc2F2ZWRGaWx0ZXJDb250cm9sbGVyO1xuICB9XG5cbiAgcHVibGljIGdldCBzb3J0Q29udHJvbGxlcigpOiBTb3J0Q29udHJvbGxlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRDb250cm9sbGVyO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIC4uLih0aGlzLl9kZWZhdWx0Q29uZmlnIHx8IHt9KSxcbiAgICAgIC4uLnRoaXMuX2ZpbHRlckNvbmZpZyxcbiAgICB9O1xuXG4gICAgdGhpcy5fY29uZmlnID0gbmV3IEZzRmlsdGVyQ29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5fYWN0aW9uc0NvbnRyb2xsZXIuc2V0Q29uZmlnKHRoaXMuY29uZmlnKTtcblxuICAgIHRoaXMuX2luaXRJdGVtcygpO1xuICAgIHRoaXMuX2luaXRBdXRvUmVsb2FkKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveSQubmV4dChudWxsKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzKCkge1xuICAgIHRoaXMua2V5d29yZElucHV0Py5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNvcnQoc29ydDogSVNvcnRpbmdDaGFuZ2VFdmVudCwgZW1pdENoYW5nZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLl9zb3J0Q29udHJvbGxlci51cGRhdGVTb3J0KHNvcnQsIGVtaXRDaGFuZ2UpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtVmFsdWVzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5vbkVtcHR5SXRlbVZhbHVlcygpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGdldCBoYXNJdGVtVmFsdWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAuc29tZSgoaXRlbSkgPT4gaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRJdGVtVmFsdWUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXNcbiAgICAgIC5maW5kKChfaXRlbSkgPT4gX2l0ZW0ubmFtZSA9PT0gbmFtZSk7XG5cbiAgICByZXR1cm4gaXRlbT8udmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2hvd0l0ZW0obmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5nZXRJdGVtKG5hbWUpPy5zaG93KCk7XG4gIH1cblxuICBwdWJsaWMgaGlkZUl0ZW0obmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5nZXRJdGVtKG5hbWUpPy5oaWRlKCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJJdGVtKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0obmFtZSk7XG5cbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpdGVtLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoZXZlbnQgPSBudWxsKSB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICB0aGlzLl9maWx0ZXJDb250cm9sbGVyLmZpbHRlcnNDbGVhcigpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmNsZWFyKSB7XG4gICAgICB0aGlzLmNvbmZpZy5jbGVhcigpO1xuICAgIH1cblxuICAgIHRoaXMua2V5d29yZElucHV0Py5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIHJlbG9hZChldmVudCA9IG51bGwpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbCA9IHRoaXMucmVsb2FkRWw/Lm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZihlbCkge1xuICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9ICdhbGwgMC43NXMgMC4wcyc7XG4gICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSAncm90YXRlKDM2MGRlZyknO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZWwuc3R5bGUudHJhbnNpdGlvbiA9IG51bGw7XG4gICAgICAgIGVsLnN0eWxlLnRyYW5zZm9ybSA9IG51bGw7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZSgpO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW0obmFtZSk6IEJhc2VJdGVtPGFueT4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgaXRlbShuYW1lKS52YWx1ZSQgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIGdldEl0ZW1WYWx1ZUNoYW5nZSQobmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShuYW1lKS52YWx1ZSQ7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGZpbHRlciBhY3Rpb25zIGNvbmZpZ1xuICAgKlxuICAgKiBAcGFyYW0gYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUFjdGlvbnMoYWN0aW9uczogRnNGaWx0ZXJBY3Rpb25bXSk6IHZvaWQge1xuICAgIHRoaXMuX2FjdGlvbnNDb250cm9sbGVyLmluaXRBY3Rpb25zKGFjdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgXCJLZXl3b3JkXCIgZmllbGQgaWYgaXQgcHJlc2VudFxuICAgKi9cbiAgcHVibGljIHNob3dLZXl3b3JkRmllbGQoKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5d29yZENvbnRyb2xsZXIuc2hvdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgXCJLZXl3b3JkXCIgZmllbGQgaWYgaXQgcHJlc2VudFxuICAgKi9cbiAgcHVibGljIGhpZGVLZXl3b3JkRmllbGQoKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5d29yZENvbnRyb2xsZXIuaGlkZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdvIHRocm91Z2ggYWN0aW9ucyBhbmQgY2hlY2sgc2hvdygpIGNhbGxiYWNrIGFuZCB1cGRhdGUgdmlzaWJsZSBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlQWN0aW9uc1Zpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aW9uc0NvbnRyb2xsZXIudXBkYXRlQWN0aW9uc1Zpc2liaWxpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyB0aHJvdWdoIGFjdGlvbnMgYW5kIGNoZWNrIGRpc2FibGVkKCkgY2FsbGJhY2sgYW5kIHVwZGF0ZSBkaXNhYmxlZCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZURpc2FibGVkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aW9uc0NvbnRyb2xsZXIudXBkYXRlRGlzYWJsZWRTdGF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlV2luZG93V2lkdGgoKSB7XG4gICAgdGhpcy53aW5kb3dEZXNrdG9wID0gd2luZG93LmlubmVyV2lkdGggPiAxMjAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuV2luZG93UmVzaXplKCkge1xuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlV2luZG93V2lkdGgoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0SXRlbXMoKSB7XG4gICAgdGhpcy5fZmlsdGVyQ29udHJvbGxlci5pbml0KHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRBdXRvUmVsb2FkKCkge1xuICAgIGlmKHRoaXMuY29uZmlnLmF1dG9SZWxvYWQpIHtcbiAgICAgIGludGVydmFsKHRoaXMuY29uZmlnLmF1dG9SZWxvYWQuc2Vjb25kcyAqIDEwMDApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmNvbmZpZy5hdXRvUmVsb2FkLmVuYWJsZWQpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWxvYWQobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiXG4gICAgW25nQ2xhc3NdPVwieyAnaGFzLXByaW1hcnktZmlsdGVyJzogcHJpbWFyeUZpbHRlclZpc2libGUkIHwgYXN5bmMgfVwiXG4gICAgW25nQ2xhc3NdPVwieyAna2V5d29yZC1mdWxsLXdpZHRoJzoga2V5d29yZEZ1bGxXaWR0aCQgfCBhc3luYyB9XCI+XG4gIEBpZiAocHJpbWFyeUZpbHRlclZpc2libGUkIHwgYXN5bmMpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGluZ1RtcGxcIj48L25nLWNvbnRhaW5lcj5cbiAgfVxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWJhci1jb250YWluZXJcIj5cbiAgICBAaWYgKHByaW1hcnlGaWx0ZXJWaXNpYmxlJCB8IGFzeW5jKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWlucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICBAaWYgKGtleXdvcmRWaXNpYmxlJCB8IGFzeW5jKSB7XG4gICAgICAgICAgPGZzLWtleXdvcmQtaW5wdXQgW2F1dG9mb2N1c109XCJjb25maWcuYXV0b2ZvY3VzXCI+PC9mcy1rZXl3b3JkLWlucHV0PlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgcHJpbWFyeUl0ZW1zOyB0cmFjayBpdGVtLm5hbWUpIHtcbiAgICAgICAgICBAaWYgKGl0ZW0udmlzaWJsZSQgfCBhc3luYykge1xuICAgICAgICAgICAgPGZpbHRlci1pdGVtXG4gICAgICAgICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICBbdHJpZ2dlckNoYW5nZU9uXT1cIidjaGFuZ2UnXCI+XG4gICAgICAgICAgICA8L2ZpbHRlci1pdGVtPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoaGFzSGVhZGluZykge1xuICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1oZWFkaW5nLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGluZ1RtcGxcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoaXBzVG1wbFwiPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlckFjdGlvbnNUbXBsXCI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuICBAaWYgKChwcmltYXJ5RmlsdGVyVmlzaWJsZSQgfCBhc3luYykgPT09IHRydWUgfHwgaGFzSGVhZGluZykge1xuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2hpcHNUbXBsXCI+PC9uZy1jb250YWluZXI+XG4gIH1cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0JhclRtcGxcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjaGlwc1RtcGw+XG4gIDxmcy1maWx0ZXItY2hpcHMgY2xhc3M9XCJmaWx0ZXItY2hpcHNcIj48L2ZzLWZpbHRlci1jaGlwcz5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3N0YXR1c0JhclRtcGw+XG4gIEBpZiAoc3RhdHVzQmFyKSB7XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZpbHRlci1zdGF0dXMtY29udGFpbmVyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnaGFzLXN0YXR1cyc6ICEhZmlsdGVyU3RhdHVzLnRleHRDb250ZW50IH1cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci1zdGF0dXNcIlxuICAgICAgICAgICNmaWx0ZXJTdGF0dXM+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNCYXIudGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNmaWx0ZXJBY3Rpb25zVG1wbD5cbiAgQGlmICgoYWN0aW9uc1Zpc2libGUkIHwgYXN5bmMpKSB7XG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1hY3Rpb25zXCI+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRvb2xiYXJUbXBsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8ZnMtZmlsdGVyLWFjdGlvbnNcbiAgICAgICAgW2FjdGlvbnNdPVwiYWN0aW9ucyQgfCBhc3luY1wiXG4gICAgICAgIFtrZWJhYkFjdGlvbnNdPVwibWVudUFjdGlvbnMkIHwgYXN5bmNcIj5cbiAgICAgIDwvZnMtZmlsdGVyLWFjdGlvbnM+XG4gICAgPC9kaXY+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2ZpbHRlclRvb2xiYXJUbXBsPlxuICBAaWYgKGNvbmZpZy5yZWxvYWQgfHwgY29uZmlnLmF1dG9SZWxvYWQpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXRvb2xiYXJcIj5cbiAgICAgIEBpZiAoY29uZmlnLnJlbG9hZCkge1xuICAgICAgICA8YVxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwicmVsb2FkKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tcmVsb2FkXCI+XG4gICAgICAgICAgPG1hdC1pY29uICNyZWxvYWRFbD5cbiAgICAgICAgICAgIHJlZnJlc2hcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2E+XG4gICAgICB9XG4gICAgICBAaWYgKGNvbmZpZy5hdXRvUmVsb2FkKSB7XG4gICAgICAgIDxhXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXJlbG9hZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29uZmlnLmF1dG9SZWxvYWQuZW5hYmxlZCA9ICFjb25maWcuYXV0b1JlbG9hZC5lbmFibGVkXCI+XG4gICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAge3sgY29uZmlnLmF1dG9SZWxvYWQuZW5hYmxlZCA/ICdzeW5jJyA6ICdzeW5jX2Rpc2FibGVkJyB9fVxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvYT5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGluZ1RtcGw+XG4gIEBpZiAoaGVhZGluZ1RlbXBsYXRlKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRpbmdUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICB9IEBlbHNlIGlmIChjb25maWcuaGVhZGluZykge1xuICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+XG4gICAgICA8aDI+XG4gICAgICAgIHt7IGNvbmZpZy5oZWFkaW5nIH19XG4gICAgICA8L2gyPlxuICAgICAgPGRpdiBjbGFzcz1cInN1YmhlYWRpbmdcIj5cbiAgICAgICAge3sgY29uZmlnLnN1YmhlYWRpbmcgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICB9XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -1,6 +1,8 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, } from '@angular/core';
2
+ import { CdkDrag, CdkDragHandle, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';
2
3
  import { MatButton } from '@angular/material/button';
3
4
  import { MatDialogModule, MatDialogRef } from '@angular/material/dialog';
5
+ import { MatIcon } from '@angular/material/icon';
4
6
  import { FsMenuModule } from '@firestitch/menu';
5
7
  import { FilterController } from '../../../services/filter-controller.service';
6
8
  import { SavedFilterController } from '../../../services/saved-filter-controller.service';
@@ -23,7 +25,7 @@ export class FsFilterSavedFilterManageComponent {
23
25
  get pluralLabel() {
24
26
  return this._savedFilterController.pluralLabel;
25
27
  }
26
- get sortable() {
28
+ get orderable() {
27
29
  return this._savedFilterController.orderable;
28
30
  }
29
31
  selectFilter(savedFilter) {
@@ -37,20 +39,28 @@ export class FsFilterSavedFilterManageComponent {
37
39
  this._cdRef.markForCheck();
38
40
  });
39
41
  }
42
+ drop(event) {
43
+ moveItemInArray(this.savedFilters, event.previousIndex, event.currentIndex);
44
+ this.order(this.savedFilters);
45
+ }
40
46
  order(savedFilters) {
41
47
  this._savedFilterController.order(savedFilters)
42
48
  .subscribe();
43
49
  }
44
50
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FsFilterSavedFilterManageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FsFilterSavedFilterManageComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<h1 mat-dialog-title>\n {{ pluralLabel }}\n</h1>\n<div mat-dialog-content>\n <table class=\"fs-list-table\">\n <thead>\n <tr>\n <th>\n Name\n </th>\n <th>\n Filters\n </th>\n <th class=\"actions-column\"></th>\n </tr>\n </thead>\n <tbody>\n @for (savedFilter of savedFilters; track savedFilter.id) {\n <tr>\n <td>\n <a (click)=\"selectFilter(savedFilter)\">\n {{ savedFilter.name }}\n </a>\n </td>\n <td>\n <fs-saved-filter-chips [savedFilter]=\"savedFilter\"></fs-saved-filter-chips>\n </td>\n <td>\n <fs-menu>\n <ng-template\n fs-menu-item\n (click)=\"remove(savedFilter)\">\n Delete\n </ng-template>\n </fs-menu>\n </td>\n </tr>\n }\n </tbody>\n </table>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n</div>", styles: ["::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table thead{display:table-header-group}::ng-deep .fs-list-table thead th{color:#999;padding:8px;font-weight:400;color:#8f8f8f;font-size:85%;text-align:left}::ng-deep .fs-list-table tbody{display:table-row-group;position:relative}::ng-deep .fs-list-table tbody tr,::ng-deep .fs-list-table thead tr,::ng-deep .fs-list-table tfoot tr{display:table-row}::ng-deep .fs-list-table tbody tr td,::ng-deep .fs-list-table thead tr td,::ng-deep .fs-list-table tfoot tr td{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table.style-card tbody tr:not(.fs-list-row-group-footer):not(.fs-list-row-group){clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}::ng-deep .fs-list-table.style-card tbody tr td{border:none!important;background-color:#fafafa;padding:8px 16px}::ng-deep .fs-list-table.style-line tbody td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody td{box-sizing:border-box;border-top:1px solid #e7e7e7}::ng-deep .fs-list-table.style-line tbody tr:first-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:first-child td{border-color:#c4c4c4}::ng-deep .fs-list-table.style-line tbody tr:last-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:last-child td{border-bottom:1px solid #c4c4c4}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging thead th,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging thead th{border-color:#e7e7e7}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging tbody tr:nth-child(2) td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}:host ::ng-deep .mat-mdc-dialog-content{width:800px;max-width:100%}.actions-column{width:1%}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: FsFilterSavedFilterChipsComponent, selector: "fs-saved-filter-chips", inputs: ["savedFilter"] }, { kind: "ngmodule", type: FsMenuModule }, { kind: "component", type: i2.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }, { kind: "directive", type: i2.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
51
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FsFilterSavedFilterManageComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "<h1 mat-dialog-title>\n {{ pluralLabel }}\n</h1>\n<div mat-dialog-content>\n @if (savedFilters?.length) {\n <table class=\"fs-list-table\">\n <thead>\n <tr>\n @if (orderable) {\n <th class=\"drag-col\"></th>\n }\n <th>\n Name\n </th>\n <th>\n Filters\n </th>\n <th class=\"actions-column\"></th>\n </tr>\n </thead>\n <tbody\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\">\n @for (savedFilter of savedFilters; track savedFilter.id) {\n <tr cdkDrag [cdkDragDisabled]=\"!orderable\" cdkDragLockAxis=\"y\" [cdkDragPreviewClass]=\"'saved-filter-drag-preview'\">\n @if (orderable) {\n <td class=\"drag-col\" cdkDragHandle>\n <mat-icon>drag_handle</mat-icon>\n </td>\n }\n <td>\n <a (click)=\"selectFilter(savedFilter)\">\n {{ savedFilter.name }}\n </a>\n </td>\n <td>\n <fs-saved-filter-chips [savedFilter]=\"savedFilter\"></fs-saved-filter-chips>\n </td>\n <td>\n <fs-menu>\n <ng-template\n fs-menu-item\n (click)=\"remove(savedFilter)\">\n Delete\n </ng-template>\n </fs-menu>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n</div>", styles: ["::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table thead{display:table-header-group}::ng-deep .fs-list-table thead th{color:#999;padding:8px;font-weight:400;color:#8f8f8f;font-size:85%;text-align:left}::ng-deep .fs-list-table tbody{display:table-row-group;position:relative}::ng-deep .fs-list-table tbody tr,::ng-deep .fs-list-table thead tr,::ng-deep .fs-list-table tfoot tr{display:table-row}::ng-deep .fs-list-table tbody tr td,::ng-deep .fs-list-table thead tr td,::ng-deep .fs-list-table tfoot tr td{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table.style-card tbody tr:not(.fs-list-row-group-footer):not(.fs-list-row-group){clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}::ng-deep .fs-list-table.style-card tbody tr td{border:none!important;background-color:#fafafa;padding:8px 16px}::ng-deep .fs-list-table.style-line tbody td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody td{box-sizing:border-box;border-top:1px solid #e7e7e7}::ng-deep .fs-list-table.style-line tbody tr:first-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:first-child td{border-color:#c4c4c4}::ng-deep .fs-list-table.style-line tbody tr:last-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:last-child td{border-bottom:1px solid #c4c4c4}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging thead th,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging thead th{border-color:#e7e7e7}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging tbody tr:nth-child(2) td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}::ng-deep .saved-filter-drag-preview{display:table;background-color:#00000008;border-radius:5px}::ng-deep .saved-filter-drag-preview td{border:none;padding:8px;vertical-align:middle}::ng-deep .saved-filter-drag-preview fs-menu{display:none}:host ::ng-deep .mat-mdc-dialog-content{min-width:400px}:host ::ng-deep .cdk-drag-placeholder{opacity:.5;background-color:#0000000d;border-radius:5px}:host ::ng-deep .cdk-drag-placeholder td{border:none}:host ::ng-deep .cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}:host ::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}.actions-column{width:1%}td.drag-col,th.drag-col{width:1%;white-space:nowrap;text-align:center;cursor:grab}td.drag-col mat-icon,th.drag-col mat-icon{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: FsFilterSavedFilterChipsComponent, selector: "fs-saved-filter-chips", inputs: ["savedFilter"] }, { kind: "ngmodule", type: FsMenuModule }, { kind: "component", type: i2.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass", "buttonType", "buttonColor"], outputs: ["opened", "closed"] }, { kind: "directive", type: i2.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
46
52
  }
47
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FsFilterSavedFilterManageComponent, decorators: [{
48
54
  type: Component,
49
55
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
50
56
  MatDialogModule,
51
57
  MatButton,
58
+ MatIcon,
59
+ CdkDropList,
60
+ CdkDrag,
61
+ CdkDragHandle,
52
62
  FsFilterSavedFilterChipsComponent,
53
63
  FsMenuModule,
54
- ], template: "<h1 mat-dialog-title>\n {{ pluralLabel }}\n</h1>\n<div mat-dialog-content>\n <table class=\"fs-list-table\">\n <thead>\n <tr>\n <th>\n Name\n </th>\n <th>\n Filters\n </th>\n <th class=\"actions-column\"></th>\n </tr>\n </thead>\n <tbody>\n @for (savedFilter of savedFilters; track savedFilter.id) {\n <tr>\n <td>\n <a (click)=\"selectFilter(savedFilter)\">\n {{ savedFilter.name }}\n </a>\n </td>\n <td>\n <fs-saved-filter-chips [savedFilter]=\"savedFilter\"></fs-saved-filter-chips>\n </td>\n <td>\n <fs-menu>\n <ng-template\n fs-menu-item\n (click)=\"remove(savedFilter)\">\n Delete\n </ng-template>\n </fs-menu>\n </td>\n </tr>\n }\n </tbody>\n </table>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n</div>", styles: ["::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table thead{display:table-header-group}::ng-deep .fs-list-table thead th{color:#999;padding:8px;font-weight:400;color:#8f8f8f;font-size:85%;text-align:left}::ng-deep .fs-list-table tbody{display:table-row-group;position:relative}::ng-deep .fs-list-table tbody tr,::ng-deep .fs-list-table thead tr,::ng-deep .fs-list-table tfoot tr{display:table-row}::ng-deep .fs-list-table tbody tr td,::ng-deep .fs-list-table thead tr td,::ng-deep .fs-list-table tfoot tr td{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table.style-card tbody tr:not(.fs-list-row-group-footer):not(.fs-list-row-group){clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}::ng-deep .fs-list-table.style-card tbody tr td{border:none!important;background-color:#fafafa;padding:8px 16px}::ng-deep .fs-list-table.style-line tbody td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody td{box-sizing:border-box;border-top:1px solid #e7e7e7}::ng-deep .fs-list-table.style-line tbody tr:first-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:first-child td{border-color:#c4c4c4}::ng-deep .fs-list-table.style-line tbody tr:last-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:last-child td{border-bottom:1px solid #c4c4c4}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging thead th,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging thead th{border-color:#e7e7e7}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging tbody tr:nth-child(2) td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}:host ::ng-deep .mat-mdc-dialog-content{width:800px;max-width:100%}.actions-column{width:1%}\n"] }]
64
+ ], template: "<h1 mat-dialog-title>\n {{ pluralLabel }}\n</h1>\n<div mat-dialog-content>\n @if (savedFilters?.length) {\n <table class=\"fs-list-table\">\n <thead>\n <tr>\n @if (orderable) {\n <th class=\"drag-col\"></th>\n }\n <th>\n Name\n </th>\n <th>\n Filters\n </th>\n <th class=\"actions-column\"></th>\n </tr>\n </thead>\n <tbody\n cdkDropList\n (cdkDropListDropped)=\"drop($event)\">\n @for (savedFilter of savedFilters; track savedFilter.id) {\n <tr cdkDrag [cdkDragDisabled]=\"!orderable\" cdkDragLockAxis=\"y\" [cdkDragPreviewClass]=\"'saved-filter-drag-preview'\">\n @if (orderable) {\n <td class=\"drag-col\" cdkDragHandle>\n <mat-icon>drag_handle</mat-icon>\n </td>\n }\n <td>\n <a (click)=\"selectFilter(savedFilter)\">\n {{ savedFilter.name }}\n </a>\n </td>\n <td>\n <fs-saved-filter-chips [savedFilter]=\"savedFilter\"></fs-saved-filter-chips>\n </td>\n <td>\n <fs-menu>\n <ng-template\n fs-menu-item\n (click)=\"remove(savedFilter)\">\n Delete\n </ng-template>\n </fs-menu>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n type=\"button\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n</div>", styles: ["::ng-deep .fs-list-table{border-spacing:0;display:table;width:100%;border-collapse:collapse}::ng-deep .fs-list-table thead{display:table-header-group}::ng-deep .fs-list-table thead th{color:#999;padding:8px;font-weight:400;color:#8f8f8f;font-size:85%;text-align:left}::ng-deep .fs-list-table tbody{display:table-row-group;position:relative}::ng-deep .fs-list-table tbody tr,::ng-deep .fs-list-table thead tr,::ng-deep .fs-list-table tfoot tr{display:table-row}::ng-deep .fs-list-table tbody tr td,::ng-deep .fs-list-table thead tr td,::ng-deep .fs-list-table tfoot tr td{display:table-cell;padding:8px;vertical-align:middle;outline:none;text-align:left}::ng-deep .fs-list-table.style-card tbody tr:not(.fs-list-row-group-footer):not(.fs-list-row-group){clip-path:xywh(0 3px 100% calc(100% - 6px) round 10px)}::ng-deep .fs-list-table.style-card tbody tr td{border:none!important;background-color:#fafafa;padding:8px 16px}::ng-deep .fs-list-table.style-line tbody td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody td{box-sizing:border-box;border-top:1px solid #e7e7e7}::ng-deep .fs-list-table.style-line tbody tr:first-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:first-child td{border-color:#c4c4c4}::ng-deep .fs-list-table.style-line tbody tr:last-child td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) tbody tr:last-child td{border-bottom:1px solid #c4c4c4}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging thead th,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging thead th{border-color:#e7e7e7}::ng-deep .fs-list-table.style-line .fs-list-container.has-dragging tbody tr:nth-child(2) td,::ng-deep .fs-list-table:not(.style-card):not(.style-basic) .fs-list-container.has-dragging tbody tr:nth-child(2) td{border-top:none}::ng-deep .saved-filter-drag-preview{display:table;background-color:#00000008;border-radius:5px}::ng-deep .saved-filter-drag-preview td{border:none;padding:8px;vertical-align:middle}::ng-deep .saved-filter-drag-preview fs-menu{display:none}:host ::ng-deep .mat-mdc-dialog-content{min-width:400px}:host ::ng-deep .cdk-drag-placeholder{opacity:.5;background-color:#0000000d;border-radius:5px}:host ::ng-deep .cdk-drag-placeholder td{border:none}:host ::ng-deep .cdk-drop-list-dragging .cdk-drag{transition:transform .25s cubic-bezier(0,0,.2,1)}:host ::ng-deep .cdk-drag-animating{transition:transform .3s cubic-bezier(0,0,.2,1)}.actions-column{width:1%}td.drag-col,th.drag-col{width:1%;white-space:nowrap;text-align:center;cursor:grab}td.drag-col mat-icon,th.drag-col mat-icon{display:flex}\n"] }]
55
65
  }] });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtZmlsdGVyLW1hbmFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvc2F2ZWQtZmlsdGVyL3NhdmVkLWZpbHRlci1tYW5hZ2Uvc2F2ZWQtZmlsdGVyLW1hbmFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvc2F2ZWQtZmlsdGVyL3NhdmVkLWZpbHRlci1tYW5hZ2Uvc2F2ZWQtZmlsdGVyLW1hbmFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUtoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUUxRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7OztBQWVwRixNQUFNLE9BQU8sa0NBQWtDO0lBRXRDLFlBQVksQ0FBdUI7SUFFbEMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDdkQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25DLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdDLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFbkMsUUFBUTtRQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFTSxZQUFZLENBQUMsV0FBK0I7UUFDakQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxNQUFNLENBQUMsV0FBK0I7UUFDM0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7YUFDNUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQztZQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFrQztRQUM3QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQzthQUM1QyxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO3dHQXpDVSxrQ0FBa0M7NEZBQWxDLGtDQUFrQyx3RUNsQy9DLGduQ0FpRE0sZzlERHJCRixlQUFlLGdvQkFDZixTQUFTLGlMQUNULGlDQUFpQywwRkFDakMsWUFBWTs7NEZBR0gsa0NBQWtDO2tCQVo5QyxTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLGVBQWU7d0JBQ2YsU0FBUzt3QkFDVCxpQ0FBaUM7d0JBQ2pDLFlBQVk7cUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgaW5qZWN0LFxuICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBGc01lbnVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZW51JztcblxuaW1wb3J0IHsgSUZpbHRlckNvbmZpZ0l0ZW0gfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IElGaWx0ZXJTYXZlZEZpbHRlciB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMvc2F2ZWQtZmlsdGVycy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmFzZUl0ZW0gfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvaXRlbXMnO1xuaW1wb3J0IHsgRmlsdGVyQ29udHJvbGxlciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpbHRlci1jb250cm9sbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2F2ZWRGaWx0ZXJDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc2F2ZWQtZmlsdGVyLWNvbnRyb2xsZXIuc2VydmljZSc7XG5cbmltcG9ydCB7IEZzRmlsdGVyU2F2ZWRGaWx0ZXJDaGlwc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zYXZlZC1maWx0ZXItY2hpcHMnO1xuXG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vc2F2ZWQtZmlsdGVyLW1hbmFnZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NhdmVkLWZpbHRlci1tYW5hZ2UuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBNYXREaWFsb2dNb2R1bGUsXG4gICAgTWF0QnV0dG9uLFxuICAgIEZzRmlsdGVyU2F2ZWRGaWx0ZXJDaGlwc0NvbXBvbmVudCxcbiAgICBGc01lbnVNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzRmlsdGVyU2F2ZWRGaWx0ZXJNYW5hZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHB1YmxpYyBzYXZlZEZpbHRlcnM6IElGaWx0ZXJTYXZlZEZpbHRlcltdO1xuXG4gIHByaXZhdGUgX3NhdmVkRmlsdGVyQ29udHJvbGxlciA9IGluamVjdChTYXZlZEZpbHRlckNvbnRyb2xsZXIpO1xuICBwcml2YXRlIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgX2ZpbHRlckNvbnRyb2xsZXIgPSBpbmplY3QoRmlsdGVyQ29udHJvbGxlcik7XG4gIHByaXZhdGUgX2RpYWxvZ1JlZiA9IGluamVjdChNYXREaWFsb2dSZWYpO1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNhdmVkRmlsdGVycyA9IHRoaXMuX3NhdmVkRmlsdGVyQ29udHJvbGxlci5zYXZlZEZpbHRlcnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IEJhc2VJdGVtPElGaWx0ZXJDb25maWdJdGVtPltdIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyQ29udHJvbGxlci5pdGVtcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcGx1cmFsTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2F2ZWRGaWx0ZXJDb250cm9sbGVyLnBsdXJhbExhYmVsO1xuICB9XG5cbiAgcHVibGljIGdldCBzb3J0YWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2F2ZWRGaWx0ZXJDb250cm9sbGVyLm9yZGVyYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RGaWx0ZXIoc2F2ZWRGaWx0ZXI6IElGaWx0ZXJTYXZlZEZpbHRlcikge1xuICAgIHRoaXMuX3NhdmVkRmlsdGVyQ29udHJvbGxlci5zZXRBY3RpdmVGaWx0ZXIoc2F2ZWRGaWx0ZXIpO1xuICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZShzYXZlZEZpbHRlcjogSUZpbHRlclNhdmVkRmlsdGVyKSB7XG4gICAgdGhpcy5fc2F2ZWRGaWx0ZXJDb250cm9sbGVyLmRlbGV0ZShzYXZlZEZpbHRlcilcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNhdmVkRmlsdGVycyA9IHRoaXMuX3NhdmVkRmlsdGVyQ29udHJvbGxlci5zYXZlZEZpbHRlcnM7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgb3JkZXIoc2F2ZWRGaWx0ZXJzOiBJRmlsdGVyU2F2ZWRGaWx0ZXJbXSkge1xuICAgIHRoaXMuX3NhdmVkRmlsdGVyQ29udHJvbGxlci5vcmRlcihzYXZlZEZpbHRlcnMpXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxufVxuIiwiPGgxIG1hdC1kaWFsb2ctdGl0bGU+XG4gIHt7IHBsdXJhbExhYmVsIH19XG48L2gxPlxuPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gIDx0YWJsZSBjbGFzcz1cImZzLWxpc3QtdGFibGVcIj5cbiAgICA8dGhlYWQ+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aD5cbiAgICAgICAgICBOYW1lXG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aD5cbiAgICAgICAgICBGaWx0ZXJzXG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImFjdGlvbnMtY29sdW1uXCI+PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICBAZm9yIChzYXZlZEZpbHRlciBvZiBzYXZlZEZpbHRlcnM7IHRyYWNrIHNhdmVkRmlsdGVyLmlkKSB7XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8YSAoY2xpY2spPVwic2VsZWN0RmlsdGVyKHNhdmVkRmlsdGVyKVwiPlxuICAgICAgICAgICAgICB7eyBzYXZlZEZpbHRlci5uYW1lIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8ZnMtc2F2ZWQtZmlsdGVyLWNoaXBzIFtzYXZlZEZpbHRlcl09XCJzYXZlZEZpbHRlclwiPjwvZnMtc2F2ZWQtZmlsdGVyLWNoaXBzPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGZzLW1lbnU+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgZnMtbWVudS1pdGVtXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlKHNhdmVkRmlsdGVyKVwiPlxuICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1tZW51PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgPC90Ym9keT5cbiAgPC90YWJsZT5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnM+XG4gIDxidXR0b25cbiAgICAgIG1hdC1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cIm51bGxcIj5cbiAgICBEb25lXG4gIDwvYnV0dG9uPlxuPC9kaXY+Il19
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtZmlsdGVyLW1hbmFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvc2F2ZWQtZmlsdGVyL3NhdmVkLWZpbHRlci1tYW5hZ2Uvc2F2ZWQtZmlsdGVyLW1hbmFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvc2F2ZWQtZmlsdGVyL3NhdmVkLWZpbHRlci1tYW5hZ2Uvc2F2ZWQtZmlsdGVyLW1hbmFnZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQWUsYUFBYSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBS2hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRTFGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBbUJwRixNQUFNLE9BQU8sa0NBQWtDO0lBRXRDLFlBQVksQ0FBdUI7SUFFbEMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDdkQsTUFBTSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25DLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzdDLFVBQVUsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFbkMsUUFBUTtRQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQztJQUMvRCxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFTSxZQUFZLENBQUMsV0FBK0I7UUFDakQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxNQUFNLENBQUMsV0FBK0I7UUFDM0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7YUFDNUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQztZQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLElBQUksQ0FBQyxLQUF3QztRQUNsRCxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQWtDO1FBQzdDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO2FBQzVDLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7d0dBOUNVLGtDQUFrQzs0RkFBbEMsa0NBQWtDLHdFQ3hDL0Msd3BEQTZETSx3b0ZEL0JGLGVBQWUsZ29CQUNmLFNBQVMsaUxBQ1QsT0FBTywySUFDUCxXQUFXLDhmQUNYLE9BQU8sd2NBQ1AsYUFBYSwrRkFDYixpQ0FBaUMsMEZBQ2pDLFlBQVk7OzRGQUdILGtDQUFrQztrQkFoQjlDLFNBQVM7c0NBR1MsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixTQUFTO3dCQUNULE9BQU87d0JBQ1AsV0FBVzt3QkFDWCxPQUFPO3dCQUNQLGFBQWE7d0JBQ2IsaUNBQWlDO3dCQUNqQyxZQUFZO3FCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIGluamVjdCxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdIYW5kbGUsIENka0Ryb3BMaXN0LCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE1hdEJ1dHRvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUsIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRJY29uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5cbmltcG9ydCB7IEZzTWVudU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lbnUnO1xuXG5pbXBvcnQgeyBJRmlsdGVyQ29uZmlnSXRlbSB9IGZyb20gJy4uLy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSUZpbHRlclNhdmVkRmlsdGVyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy9zYXZlZC1maWx0ZXJzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCYXNlSXRlbSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9pdGVtcyc7XG5pbXBvcnQgeyBGaWx0ZXJDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmlsdGVyLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTYXZlZEZpbHRlckNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zYXZlZC1maWx0ZXItY29udHJvbGxlci5zZXJ2aWNlJztcblxuaW1wb3J0IHsgRnNGaWx0ZXJTYXZlZEZpbHRlckNoaXBzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NhdmVkLWZpbHRlci1jaGlwcyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9zYXZlZC1maWx0ZXItbWFuYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2F2ZWQtZmlsdGVyLW1hbmFnZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICBNYXRCdXR0b24sXG4gICAgTWF0SWNvbixcbiAgICBDZGtEcm9wTGlzdCxcbiAgICBDZGtEcmFnLFxuICAgIENka0RyYWdIYW5kbGUsXG4gICAgRnNGaWx0ZXJTYXZlZEZpbHRlckNoaXBzQ29tcG9uZW50LFxuICAgIEZzTWVudU1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRnNGaWx0ZXJTYXZlZEZpbHRlck1hbmFnZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIHNhdmVkRmlsdGVyczogSUZpbHRlclNhdmVkRmlsdGVyW107XG5cbiAgcHJpdmF0ZSBfc2F2ZWRGaWx0ZXJDb250cm9sbGVyID0gaW5qZWN0KFNhdmVkRmlsdGVyQ29udHJvbGxlcik7XG4gIHByaXZhdGUgX2NkUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBfZmlsdGVyQ29udHJvbGxlciA9IGluamVjdChGaWx0ZXJDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZik7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2F2ZWRGaWx0ZXJzID0gdGhpcy5fc2F2ZWRGaWx0ZXJDb250cm9sbGVyLnNhdmVkRmlsdGVycztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogQmFzZUl0ZW08SUZpbHRlckNvbmZpZ0l0ZW0+W10ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJDb250cm9sbGVyLml0ZW1zO1xuICB9XG5cbiAgcHVibGljIGdldCBwbHVyYWxMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zYXZlZEZpbHRlckNvbnRyb2xsZXIucGx1cmFsTGFiZWw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG9yZGVyYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2F2ZWRGaWx0ZXJDb250cm9sbGVyLm9yZGVyYWJsZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RGaWx0ZXIoc2F2ZWRGaWx0ZXI6IElGaWx0ZXJTYXZlZEZpbHRlcikge1xuICAgIHRoaXMuX3NhdmVkRmlsdGVyQ29udHJvbGxlci5zZXRBY3RpdmVGaWx0ZXIoc2F2ZWRGaWx0ZXIpO1xuICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZShzYXZlZEZpbHRlcjogSUZpbHRlclNhdmVkRmlsdGVyKSB7XG4gICAgdGhpcy5fc2F2ZWRGaWx0ZXJDb250cm9sbGVyLmRlbGV0ZShzYXZlZEZpbHRlcilcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNhdmVkRmlsdGVycyA9IHRoaXMuX3NhdmVkRmlsdGVyQ29udHJvbGxlci5zYXZlZEZpbHRlcnM7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8SUZpbHRlclNhdmVkRmlsdGVyW10+KSB7XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRoaXMuc2F2ZWRGaWx0ZXJzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIHRoaXMub3JkZXIodGhpcy5zYXZlZEZpbHRlcnMpO1xuICB9XG5cbiAgcHVibGljIG9yZGVyKHNhdmVkRmlsdGVyczogSUZpbHRlclNhdmVkRmlsdGVyW10pIHtcbiAgICB0aGlzLl9zYXZlZEZpbHRlckNvbnRyb2xsZXIub3JkZXIoc2F2ZWRGaWx0ZXJzKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbn1cbiIsIjxoMSBtYXQtZGlhbG9nLXRpdGxlPlxuICB7eyBwbHVyYWxMYWJlbCB9fVxuPC9oMT5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICBAaWYgKHNhdmVkRmlsdGVycz8ubGVuZ3RoKSB7XG4gICAgPHRhYmxlIGNsYXNzPVwiZnMtbGlzdC10YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgQGlmIChvcmRlcmFibGUpIHtcbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImRyYWctY29sXCI+PC90aD5cbiAgICAgICAgICB9XG4gICAgICAgICAgPHRoPlxuICAgICAgICAgICAgTmFtZVxuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoPlxuICAgICAgICAgICAgRmlsdGVyc1xuICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgPHRoIGNsYXNzPVwiYWN0aW9ucy1jb2x1bW5cIj48L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keVxuICAgICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wKCRldmVudClcIj5cbiAgICAgICAgQGZvciAoc2F2ZWRGaWx0ZXIgb2Ygc2F2ZWRGaWx0ZXJzOyB0cmFjayBzYXZlZEZpbHRlci5pZCkge1xuICAgICAgICAgIDx0ciBjZGtEcmFnIFtjZGtEcmFnRGlzYWJsZWRdPVwiIW9yZGVyYWJsZVwiIGNka0RyYWdMb2NrQXhpcz1cInlcIiBbY2RrRHJhZ1ByZXZpZXdDbGFzc109XCInc2F2ZWQtZmlsdGVyLWRyYWctcHJldmlldydcIj5cbiAgICAgICAgICAgIEBpZiAob3JkZXJhYmxlKSB7XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImRyYWctY29sXCIgY2RrRHJhZ0hhbmRsZT5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZHJhZ19oYW5kbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICA8YSAoY2xpY2spPVwic2VsZWN0RmlsdGVyKHNhdmVkRmlsdGVyKVwiPlxuICAgICAgICAgICAgICAgIHt7IHNhdmVkRmlsdGVyLm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgPGZzLXNhdmVkLWZpbHRlci1jaGlwcyBbc2F2ZWRGaWx0ZXJdPVwic2F2ZWRGaWx0ZXJcIj48L2ZzLXNhdmVkLWZpbHRlci1jaGlwcz5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgIDxmcy1tZW51PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBmcy1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZShzYXZlZEZpbHRlcilcIj5cbiAgICAgICAgICAgICAgICAgIERlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvZnMtbWVudT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICB9XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxuICA8YnV0dG9uXG4gICAgICBtYXQtYnV0dG9uXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbbWF0LWRpYWxvZy1jbG9zZV09XCJudWxsXCI+XG4gICAgRG9uZVxuICA8L2J1dHRvbj5cbjwvZGl2PiJdfQ==
@@ -6,8 +6,8 @@
6
6
  * resolve to a bare primitive whose `.name` is undefined.
7
7
  */
8
8
  export function encodeQueryParam(value) {
9
- return (value ?? '')
9
+ return String(value ?? '')
10
10
  .replace(/,/g, '\\,')
11
11
  .replace(/:/g, '\\:');
12
12
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RlLXF1ZXJ5LXBhcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2hlbHBlcnMvZW5jb2RlLXF1ZXJ5LXBhcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWdDO0lBQy9ELE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1NBQ2pCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO1NBQ3BCLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXNjYXBlcyBjb21tYXMgYW5kIGNvbG9ucyBpbiBhIHF1ZXJ5LXBhcmFtIHZhbHVlIHNvIHRoZXkgYXJlIG5vdFxuICogbWlzaW50ZXJwcmV0ZWQgYXMgZGVsaW1pdGVycyBkdXJpbmcgZGVzZXJpYWxpemF0aW9uLlxuICpcbiAqIEFjY2VwdHMgbnVsbGlzaCBpbnB1dCBkZWZlbnNpdmVseSDigJQgQXV0b2NvbXBsZXRlSXRlbS52YWx1ZSBjYW5cbiAqIHJlc29sdmUgdG8gYSBiYXJlIHByaW1pdGl2ZSB3aG9zZSBgLm5hbWVgIGlzIHVuZGVmaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVF1ZXJ5UGFyYW0odmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICByZXR1cm4gKHZhbHVlID8/ICcnKVxuICAgIC5yZXBsYWNlKC8sL2csICdcXFxcLCcpXG4gICAgLnJlcGxhY2UoLzovZywgJ1xcXFw6Jyk7XG59XG4iXX0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RlLXF1ZXJ5LXBhcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBwL2hlbHBlcnMvZW5jb2RlLXF1ZXJ5LXBhcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLEtBQWdDO0lBQy9ELE9BQU8sTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7U0FDdkIsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7U0FDcEIsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFc2NhcGVzIGNvbW1hcyBhbmQgY29sb25zIGluIGEgcXVlcnktcGFyYW0gdmFsdWUgc28gdGhleSBhcmUgbm90XG4gKiBtaXNpbnRlcnByZXRlZCBhcyBkZWxpbWl0ZXJzIGR1cmluZyBkZXNlcmlhbGl6YXRpb24uXG4gKlxuICogQWNjZXB0cyBudWxsaXNoIGlucHV0IGRlZmVuc2l2ZWx5IOKAlCBBdXRvY29tcGxldGVJdGVtLnZhbHVlIGNhblxuICogcmVzb2x2ZSB0byBhIGJhcmUgcHJpbWl0aXZlIHdob3NlIGAubmFtZWAgaXMgdW5kZWZpbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlUXVlcnlQYXJhbSh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiBTdHJpbmcodmFsdWUgPz8gJycpXG4gICAgLnJlcGxhY2UoLywvZywgJ1xcXFwsJylcbiAgICAucmVwbGFjZSgvOi9nLCAnXFxcXDonKTtcbn1cbiJdfQ==