@firestitch/filter 18.0.40 → 18.0.41

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.
@@ -28,7 +28,6 @@ export declare class FilterComponent implements OnInit, OnDestroy {
28
28
  set setConfig(config: any);
29
29
  set setFilter(config: any);
30
30
  showSortBy: any;
31
- showFilterInput: boolean;
32
31
  closed: EventEmitter<any>;
33
32
  opened: EventEmitter<any>;
34
33
  ready: EventEmitter<void>;
@@ -199,10 +198,11 @@ export declare class FilterComponent implements OnInit, OnDestroy {
199
198
  private _initAutoReload;
200
199
  private _listenInputChanges;
201
200
  private _syncSearchInputWithKeyword;
201
+ private _initKeywordVisibility;
202
202
  private _listenInternalItemsChange;
203
203
  private _initOverlay;
204
204
  private _listenWhenFilterReady;
205
205
  private _updateChipsVisibility;
206
206
  static ɵfac: i0.ɵɵFactoryDeclaration<FilterComponent, [{ optional: true; }, null, null, null, null, null, null, null]>;
207
- static ɵcmp: i0.ɵɵComponentDeclaration<FilterComponent, "fs-filter", never, { "setConfig": { "alias": "config"; "required": false; }; "setFilter": { "alias": "filter"; "required": false; }; "showSortBy": { "alias": "showSortBy"; "required": false; }; "showFilterInput": { "alias": "showFilterInput"; "required": false; }; }, { "closed": "closed"; "opened": "opened"; "ready": "ready"; }, ["statusBar"], never, false, never>;
207
+ static ɵcmp: i0.ɵɵComponentDeclaration<FilterComponent, "fs-filter", never, { "setConfig": { "alias": "config"; "required": false; }; "setFilter": { "alias": "filter"; "required": false; }; "showSortBy": { "alias": "showSortBy"; "required": false; }; }, { "closed": "closed"; "opened": "opened"; "ready": "ready"; }, ["statusBar"], never, false, never>;
208
208
  }
@@ -11,4 +11,4 @@ import { DateTimeRangeItem } from '../models/items/date-time-range-item';
11
11
  import { RangeItem } from '../models/items/range-item';
12
12
  import { TextItem } from '../models/items/text-item';
13
13
  import { WeekItem } from '../models/items/week-item';
14
- export declare function createFilterItem(item: IFilterConfigItem, config: any, filter: FilterComponent): ChipsItem | TextItem | WeekItem | RangeItem | AutocompleteItem | AutocompleteChipsItem | DateItem | DateTimeItem | DateRangeItem | DateTimeRangeItem | CheckboxItem | import("../models/items/select/simple-select-item").SimpleSelectItem | import("../models/items/select/multiple-select-item").MultipleSelectItem;
14
+ export declare function createFilterItem(item: IFilterConfigItem, config: any, filter: FilterComponent): TextItem | ChipsItem | WeekItem | RangeItem | AutocompleteItem | AutocompleteChipsItem | DateItem | DateTimeItem | DateRangeItem | DateTimeRangeItem | CheckboxItem | import("../models/items/select/simple-select-item").SimpleSelectItem | import("../models/items/select/multiple-select-item").MultipleSelectItem;
@@ -53,7 +53,6 @@ export class FilterComponent {
53
53
  this._initFilterWithConfig(config);
54
54
  }
55
55
  showSortBy = true;
56
- showFilterInput = true;
57
56
  closed = new EventEmitter();
58
57
  opened = new EventEmitter();
59
58
  ready = new EventEmitter();
@@ -173,6 +172,7 @@ export class FilterComponent {
173
172
  this._initAutoReload();
174
173
  this._listenInputChanges();
175
174
  this._listenInternalItemsChange();
175
+ this._initKeywordVisibility();
176
176
  this._initOverlay();
177
177
  }
178
178
  ngOnDestroy() {
@@ -542,6 +542,9 @@ export class FilterComponent {
542
542
  this.searchPlaceholder = keywordItem.label || 'Search';
543
543
  }
544
544
  }
545
+ _initKeywordVisibility() {
546
+ this._keywordVisible$.next(!this.keywordItem?.hide);
547
+ }
545
548
  _listenInternalItemsChange() {
546
549
  this._filterItems
547
550
  .itemsChange$
@@ -575,7 +578,7 @@ export class FilterComponent {
575
578
  this._hasFilterChips$.next(hasFilterChips);
576
579
  }
577
580
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, deps: [{ token: FS_FILTER_CONFIG, optional: true }, { token: i1.FsFilterOverlayService }, { token: i0.NgZone }, { token: i2.ExternalParamsController }, { token: i3.QueryPersistanceController }, { token: i4.FsFilterItemsStore }, { token: i5.ActionsController }, { token: i6.SavedFiltersController }], target: i0.ɵɵFactoryTarget.Component });
578
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, selector: "fs-filter", inputs: { setConfig: ["config", "setConfig"], setFilter: ["filter", "setFilter"], showSortBy: "showSortBy", showFilterInput: "showFilterInput" }, outputs: { closed: "closed", opened: "opened", ready: "ready" }, host: { properties: { "class.filters-open": "this.showFilterMenu", "class.window-desktop": "this.windowDesktop", "class.fs-filter": "this.fsFilterClass", "class.has-keyword": "this.hasKeyword" } }, providers: [
581
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, selector: "fs-filter", inputs: { setConfig: ["config", "setConfig"], setFilter: ["filter", "setFilter"], showSortBy: "showSortBy" }, outputs: { closed: "closed", opened: "opened", ready: "ready" }, host: { properties: { "class.filters-open": "this.showFilterMenu", "class.window-desktop": "this.windowDesktop", "class.fs-filter": "this.fsFilterClass", "class.has-keyword": "this.hasKeyword" } }, providers: [
579
582
  FsFilterOverlayService,
580
583
  ExternalParamsController,
581
584
  QueryPersistanceController,
@@ -584,7 +587,7 @@ export class FilterComponent {
584
587
  FsFilterItemsStore,
585
588
  SavedFiltersController,
586
589
  ActionsController,
587
- ], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: "keywordMatInput", first: true, predicate: ["keywordMatInput"], descendants: true, read: MatInput }, { propertyName: "reloadEl", first: true, predicate: ["reloadEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"(keywordVisible$ | async) && !keywordItem?.hide \">\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n<ng-template #filterToolbar>\n <div class=\"filter-toolbar\">\n @if (filtersBtnVisible$ | async) {\n @if (hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n }\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 <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toolbar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;margin-right:3px}.filter-inner-container .filter-keyword mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-keyword mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-keyword mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center}.filter-toolbar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@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: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i12.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i13.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i14.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "component", type: i15.FsClearComponent, selector: "[fsClear]", inputs: ["ngModel", "visible", "fsClear"], outputs: ["ngModelChange", "cleared"] }, { kind: "component", type: i16.FsFilterChipsComponent, selector: "fs-filter-chips", inputs: ["filters"] }, { kind: "component", type: i17.FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
590
+ ], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: "keywordMatInput", first: true, predicate: ["keywordMatInput"], descendants: true, read: MatInput }, { propertyName: "reloadEl", first: true, predicate: ["reloadEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"(keywordVisible$ | async)\">\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n<ng-template #filterToolbar>\n <div class=\"filter-toolbar\">\n @if (filtersBtnVisible$ | async) {\n @if (hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n }\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 <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toolbar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;margin-right:3px}.filter-inner-container .filter-keyword mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-keyword mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-keyword mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center}.filter-toolbar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@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: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i11.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i11.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i12.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i13.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i14.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "component", type: i15.FsClearComponent, selector: "[fsClear]", inputs: ["ngModel", "visible", "fsClear"], outputs: ["ngModelChange", "cleared"] }, { kind: "component", type: i16.FsFilterChipsComponent, selector: "fs-filter-chips", inputs: ["filters"] }, { kind: "component", type: i17.FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
588
591
  }
589
592
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, decorators: [{
590
593
  type: Component,
@@ -597,7 +600,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
597
600
  FsFilterItemsStore,
598
601
  SavedFiltersController,
599
602
  ActionsController,
600
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"(keywordVisible$ | async) && !keywordItem?.hide \">\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n<ng-template #filterToolbar>\n <div class=\"filter-toolbar\">\n @if (filtersBtnVisible$ | async) {\n @if (hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n }\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 <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toolbar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;margin-right:3px}.filter-inner-container .filter-keyword mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-keyword mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-keyword mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center}.filter-toolbar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@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"] }]
603
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"(keywordVisible$ | async)\">\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n<ng-template #filterToolbar>\n <div class=\"filter-toolbar\">\n @if (filtersBtnVisible$ | async) {\n @if (hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n }\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 <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toolbar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;margin-right:3px}.filter-inner-container .filter-keyword mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-keyword mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-keyword mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center}.filter-toolbar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@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"] }]
601
604
  }], ctorParameters: () => [{ type: i18.FsFilterConfig, decorators: [{
602
605
  type: Optional
603
606
  }, {
@@ -611,8 +614,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
611
614
  args: ['filter']
612
615
  }], showSortBy: [{
613
616
  type: Input
614
- }], showFilterInput: [{
615
- type: Input
616
617
  }], closed: [{
617
618
  type: Output
618
619
  }], opened: [{
@@ -641,4 +642,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
641
642
  type: HostBinding,
642
643
  args: ['class.has-keyword']
643
644
  }] } });
644
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFPekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FB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XG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBpbmplY3QsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5cbmltcG9ydCB7IERyYXdlclJlZiB9IGZyb20gJ0BmaXJlc3RpdGNoL2RyYXdlcic7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbUV2ZW50LCBpbnRlcnZhbCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQWN0aW9uc0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2FjdGlvbnMtY29udHJvbGxlcic7XG5pbXBvcnQgeyBvYmplY3RzQXJlRXF1YWxzIH0gZnJvbSAnLi4vLi4vaGVscGVycy9jb21wYXJlJztcbmltcG9ydCB7IElGaWx0ZXJTYXZlZEZpbHRlciwgSVNvcnRpbmdDaGFuZ2VFdmVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRnNGaWx0ZXJBY3Rpb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2FjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgRmlsdGVyQ29uZmlnLCBGaWx0ZXJTb3J0LCBJRmlsdGVyQ29uZmlnSXRlbSwgU29ydEl0ZW0sXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJVXBkYXRlRmlsdGVySXRlbUNvbmZpZyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdXBkYXRlLWZpbHRlci1pdGVtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBGc0ZpbHRlckNvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscy9maWx0ZXItY29uZmlnJztcbmltcG9ydCB7IEJhc2VJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2l0ZW1zL2Jhc2UtaXRlbSc7XG5pbXBvcnQgeyBUZXh0SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9pdGVtcy90ZXh0LWl0ZW0nO1xuaW1wb3J0IHsgRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXh0ZXJuYWwtcGFyYW1zLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBRdWVyeVBhcmFtc0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHRlcm5hbC1wYXJhbXMvcXVlcnktcGFyYW1zLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBRdWVyeVBlcnNpc3RhbmNlQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4dGVybmFsLXBhcmFtcy9xdWVyeS1wZXJzaXN0YW5jZS1jb250cm9sbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2F2ZWRGaWx0ZXJzQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4dGVybmFsLXBhcmFtcy9zYXZlZC1maWx0ZXJzLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGc0ZpbHRlck92ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmlsdGVyLW92ZXJsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBGb2N1c0NvbnRyb2xsZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9jdXMtY29udHJvbGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZzRmlsdGVySXRlbXNTdG9yZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2l0ZW1zLXN0b3JlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBGaWx0ZXJTdGF0dXNCYXJEaXJlY3RpdmUgfSBmcm9tICcuLy4uLy4uL2RpcmVjdGl2ZXMvc3RhdHVzLWJhci9zdGF0dXMtYmFyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGU19GSUxURVJfQ09ORklHIH0gZnJvbSAnLi8uLi8uLi9pbmplY3RvcnMvZmlsdGVyLWNvbmZpZyc7XG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZnMtZmlsdGVyJyxcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICBGc0ZpbHRlck92ZXJsYXlTZXJ2aWNlLFxuICAgIEV4dGVybmFsUGFyYW1zQ29udHJvbGxlcixcbiAgICBRdWVyeVBlcnNpc3RhbmNlQ29udHJvbGxlcixcbiAgICBRdWVyeVBhcmFtc0NvbnRyb2xsZXIsXG4gICAgRm9jdXNDb250cm9sbGVyU2VydmljZSxcbiAgICBGc0ZpbHRlckl0ZW1zU3RvcmUsXG4gICAgU2F2ZWRGaWx0ZXJzQ29udHJvbGxlcixcbiAgICBBY3Rpb25zQ29udHJvbGxlcixcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoJ2NvbmZpZycpXG4gIHB1YmxpYyBzZXQgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgIHRoaXMuX2luaXRGaWx0ZXJXaXRoQ29uZmlnKGNvbmZpZyk7XG4gIH1cblxuICBASW5wdXQoJ2ZpbHRlcicpXG4gIHB1YmxpYyBzZXQgc2V0RmlsdGVyKGNvbmZpZykge1xuICAgIHRoaXMuX2luaXRGaWx0ZXJXaXRoQ29uZmlnKGNvbmZpZyk7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgc2hvd1NvcnRCeTogYW55ID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHNob3dGaWx0ZXJJbnB1dCA9IHRydWU7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChGaWx0ZXJTdGF0dXNCYXJEaXJlY3RpdmUpXG4gIHB1YmxpYyBzdGF0dXNCYXI6IEZpbHRlclN0YXR1c0JhckRpcmVjdGl2ZTtcblxuICBAVmlld0NoaWxkKCdrZXl3b3JkTWF0SW5wdXQnLCB7IHJlYWQ6IE1hdElucHV0IH0pXG4gIHB1YmxpYyBrZXl3b3JkTWF0SW5wdXQ6IE1hdElucHV0O1xuXG4gIEBWaWV3Q2hpbGQoJ3JlbG9hZEVsJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyByZWxvYWRFbDogRWxlbWVudFJlZjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZpbHRlcnMtb3BlbicpXG4gIHB1YmxpYyBzaG93RmlsdGVyTWVudSA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2luZG93LWRlc2t0b3AnKVxuICBwdWJsaWMgd2luZG93RGVza3RvcCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZnMtZmlsdGVyJylcbiAgcHVibGljIGZzRmlsdGVyQ2xhc3MgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaGFzLWtleXdvcmQnKVxuICBwdWJsaWMgZ2V0IGhhc0tleXdvcmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckl0ZW1zLmhhc0tleXdvcmQ7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoUGxhY2Vob2xkZXIgPSAnU2VhcmNoJztcbiAgcHVibGljIGtleXdvcmQgPSAnJztcbiAgcHVibGljIGF1dG9SZWxvYWQgPSB0cnVlO1xuXG4gIHByb3RlY3RlZCBfY29uZmlnOiBGc0ZpbHRlckNvbmZpZyA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfc29ydDogRmlsdGVyU29ydDtcbiAgcHJpdmF0ZSBfZmlsdGVyc0J0blZpc2libGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHJpdmF0ZSBfa2V5d29yZFZpc2libGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHJpdmF0ZSBfaGFzRmlsdGVyQ2hpcHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX2tleXdvcmQkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9kaWFsb2dSZWYgPSBpbmplY3QoTWF0RGlhbG9nUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIF9kcmF3ZXJSZWYgPSBpbmplY3QoRHJhd2VyUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pOyAgXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGU19GSUxURVJfQ09ORklHKSBwcml2YXRlIF9kZWZhdWx0Q29uZmlnOiBGc0ZpbHRlckNvbmZpZyxcbiAgICBwcml2YXRlIF9maWx0ZXJPdmVybGF5OiBGc0ZpbHRlck92ZXJsYXlTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF9leHRlcm5hbFBhcmFtczogRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyLFxuICAgIHByaXZhdGUgX3BlcnNpc3RhbmNlUGFyYW1zOiBRdWVyeVBlcnNpc3RhbmNlQ29udHJvbGxlcixcbiAgICBwcml2YXRlIF9maWx0ZXJJdGVtczogRnNGaWx0ZXJJdGVtc1N0b3JlLFxuICAgIHByaXZhdGUgX2FjdGlvbnM6IEFjdGlvbnNDb250cm9sbGVyLFxuICAgIHByaXZhdGUgX3NhdmVkRmlsdGVyc0NvbnRyb2xsZXI6IFNhdmVkRmlsdGVyc0NvbnRyb2xsZXIsXG4gICkge1xuICAgIHRoaXMuX2ZpbHRlckl0ZW1zLmZpbHRlciA9IHRoaXM7XG4gICAgdGhpcy5fbGlzdGVuV2hlbkZpbHRlclJlYWR5KCk7XG4gICAgdGhpcy5fdXBkYXRlV2luZG93V2lkdGgoKTtcblxuICAgIGNvbnN0IGljb25SZWdpc3RyeSA9IGluamVjdChNYXRJY29uUmVnaXN0cnkpO1xuICAgIGNvbnN0IHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICAgIGNvbnN0IGZpbHRlckFsdCA9ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNHB4XCI+PHBhdGggZD1cIk00NDAtMTYwcS0xNyAwLTI4LjUtMTEuNVQ0MDAtMjAwdi0yNDBMMTYxLTc0NXEtMTQtMTctNC0zNnQzMS0xOWg1ODRxMjEgMCAzMSAxOXQtNCAzNkw1NjAtNDQwdjI0MHEwIDE3LTExLjUgMjguNVQ1MjAtMTYwaC04MFptNDAtMjc2IDI0MC0zMDRIMjQwbDI0MCAzMDRabTAgMFpcIi8+PC9zdmc+JztcblxuICAgIGljb25SZWdpc3RyeS5hZGRTdmdJY29uTGl0ZXJhbCgnZmlsdGVyT3V0bGluZScsIHNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChmaWx0ZXJBbHQpKTtcblxuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuYXR0YWNoJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93RmlsdGVyTWVudSA9IHRydWU7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuZGV0YWNoJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93RmlsdGVyTWVudSA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9saXN0ZW5XaW5kb3dSZXNpemUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCk6IEZzRmlsdGVyQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckl0ZW1zLnZhbHVlcygpO1xuICB9XG5cbiAgcHVibGljIGdldCBpbkRpYWxvZygpIHtcbiAgICByZXR1cm4gISF0aGlzLl9kaWFsb2dSZWYgfHwgISF0aGlzLl9kcmF3ZXJSZWY7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlclBhcmFtc1F1ZXJ5KCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMudmFsdWVzQXNRdWVyeSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMuaXRlbXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZpc2libGVJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMudmlzaWJsZUl0ZW1zO1xuICB9XG5cbiAgcHVibGljIGdldCBrZXl3b3JkSXRlbSgpOiBUZXh0SXRlbSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJJdGVtcy5rZXl3b3JkSXRlbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXRlbXNSZWFkeSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckl0ZW1zLnJlYWR5JDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzRmlsdGVyQ2hpcHMkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9oYXNGaWx0ZXJDaGlwcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc1Zpc2libGVJdGVtT3JTb3J0aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVJdGVtcy5sZW5ndGggPiAwIHx8ICEhdGhpcy5fZmlsdGVySXRlbXMuc29ydEJ5SXRlbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyc0J0blZpc2libGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJzQnRuVmlzaWJsZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGtleXdvcmRWaXNpYmxlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fa2V5d29yZFZpc2libGUkLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh2aXNpYmxlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHZpc2libGUgJiYgdGhpcy5oYXNLZXl3b3JkO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGlvbnNWaXNpYmxlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucy52aXNpYmxlJDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aW9ucyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnMuYWN0aW9ucyQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lbnVBY3Rpb25zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucy5tZW51QWN0aW9ucyQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGFjdGl2ZVNhdmVkRmlsdGVyKHNhdmVkRmlsdGVyOiBJRmlsdGVyU2F2ZWRGaWx0ZXIpIHtcbiAgICB0aGlzLl9leHRlcm5hbFBhcmFtcy5zZXRBY3RpdmVTYXZlZEZpbHRlcihzYXZlZEZpbHRlcik7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZVNhdmVkRmlsdGVyKCk6IElGaWx0ZXJTYXZlZEZpbHRlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NhdmVkRmlsdGVyc0NvbnRyb2xsZXIuYWN0aXZlRmlsdGVyO1xuICB9XG5cbiAgcHVibGljIGdldCBzYXZlZEZpbHRlcnMoKTogSUZpbHRlclNhdmVkRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9zYXZlZEZpbHRlcnNDb250cm9sbGVyLnNhdmVkRmlsdGVycztcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAvLyBBdm9pZCBuZ0NoYW5nZXMgZXJyb3JcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvZm9jdXMpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5faW5pdEF1dG9SZWxvYWQoKTtcbiAgICB0aGlzLl9saXN0ZW5JbnB1dENoYW5nZXMoKTtcbiAgICB0aGlzLl9saXN0ZW5JbnRlcm5hbEl0ZW1zQ2hhbmdlKCk7XG4gICAgdGhpcy5faW5pdE92ZXJsYXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95RmlsdGVyRHJhd2VyKCk7XG5cbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZm9jdXMoKSB7XG4gICAgdGhpcy5rZXl3b3JkTWF0SW5wdXQ/LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU29ydChzb3J0OiBJU29ydGluZ0NoYW5nZUV2ZW50KSB7XG4gICAgdGhpcy5fZmlsdGVySXRlbXMudXBkYXRlU29ydChzb3J0KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBEbyB1cGRhdGUgdmFsdWUgb2Ygc29tZSBmaWVsZFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gdmFsdWVzIGZvciB1cGRhdGVcbiAgICpcbiAgICogVG8gdXBkYXRlIHRleHQgdmFsdWUganVzdCBwYXNzIG5ldyB0ZXh0IHZhbHVlXG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVTZWxlY3RWYWx1ZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IGtleXdvcmQ6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKiBUbyB1cGRhdGUgc2VsZWN0IG9yIG9ic2VydmFibGUgc2VsZWN0IHlvdSBjb3VsZCBwYXNzIHN1aXRhYmxlIHZhbHVlXG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVTZWxlY3RWYWx1ZSh2YWw6IG51bWJlcikge1xuICAgKiAgIHRoaXMuZmlsdGVyRWwudXBkYXRlVmFsdWVzKHsgc2ltcGxlX3NlbGVjdDogdmFsIH0sIHsgb2JzZXJ2YWJsZV9zZWxlY3Q6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKiBUbyB1cGRhdGUgY2hlY2tib3ggdmFsdWUganVzdCBwYXNzIHRydWUvZmFsc2UgYXMgdmFsdWVcbiAgICpcbiAgICogcHVibGljIHVwZGF0ZUNoZWNrb3godmFsOiBib29sZWFuKSB7XG4gICAqICAgdGhpcy5maWx0ZXJFbC51cGRhdGVWYWx1ZXMoeyBjaGVja2JveDogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqIFRvIHVwZGF0ZSByYW5nZSB2YWx1ZSBqdXN0IHBhc3Mgb2JqZWN0IHdpdGggbWluJm1heCBvYmplY3Qgb3IganVzdCB3aXRoIG9uZSBvZiB0YXJnZXRzXG4gICAqXG4gICAqIEV4LjogeyBtaW46IDEwLCBtYXggMTUgfSwgeyBtaW46IDUgfSwgeyBtYXggNSB9XG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVSYW5nZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IHJhbmdlOiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIGF1dG9jb21wbGV0ZSBqdXN0IHBhc3Mgb2JqZWN0IHdpdGggbmFtZS92YWx1ZSBmaWVsZHNcbiAgICpcbiAgICogRXguOiB7IG5hbWU6ICdKb2huIERvZScsIHZhbHVlOiAxIH1cbiAgICpcbiAgICogcHVibGljIHVwZGF0ZUF1dG9jb21wbGV0ZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IGF1dG9jb21wbGV0ZV91c2VyX2lkOiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIGF1dG9jb21wbGV0ZWNoaXBzIGp1c3QgcGFzczpcbiAgICpcbiAgICogMSkgb2JqZWN0IHdpdGggbmFtZS92YWx1ZSBmaWVsZHMgLSB3aWxsIGJlIGFwcGVuZGVkIHRvIGV4aXN0aW5nIHNldCBvZiB2YWx1ZXNcbiAgICpcbiAgICogeyBuYW1lOiAnSm9obiBEb2UnLCB2YWx1ZTogMSB9XG4gICAqXG4gICAqIDIpIGFycmF5IG9mIG9iamVjdHMgLSB3aWxsIGJlIGFwcGVuZGVkIHRvIGV4aXN0aW5nIHNldCBvZiB2YWx1ZXNcbiAgICpcbiAgICogW3sgbmFtZTogJ0pvaG4gRG9lJywgdmFsdWU6IDEgfSwgeyBuYW1lOiAnRGFyeWEgRmlsaXBvdmEnLCB2YWx1ZTogMiB9XVxuICAgKlxuICAgKiAzKSBudWxsIC0gY2xlYXIgZXhpc3Rpbmcgc2V0IG9mIHZhbHVlc1xuICAgKlxuICAgKiBwdWJsaWMgdXBkYXRlQXV0b2NvbXBsZXRlKHZhbCkge1xuICAgKiAgIHRoaXMuZmlsdGVyRWwudXBkYXRlVmFsdWVzKHsgYXV0b2NvbXBsZXRlY2hpcHNfdXNlcl9pZDogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlVmFsdWVzKHZhbHVlcykge1xuICAgIE9iamVjdC5rZXlzKHZhbHVlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJJdGVtID0gdGhpcy5pdGVtc1xuICAgICAgICAuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBrZXkpO1xuXG4gICAgICBpZiAoIWZpbHRlckl0ZW0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaWx0ZXJJdGVtLm1vZGVsID0gdmFsdWVzW2tleV07XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaGlkZSgpIHtcbiAgICB0aGlzLmNoYW5nZVZpc2liaWxpdHkoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHNob3coKSB7XG4gICAgdGhpcy5jaGFuZ2VWaXNpYmlsaXR5KHRydWUpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVZpc2liaWxpdHlDbGljayh2YWx1ZSwgZXZlbnQgPSBudWxsKSB7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlVmlzaWJpbGl0eSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGl0ZW1WYWx1ZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbm9uRW1wdHlJdGVtVmFsdWVzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0l0ZW1WYWx1ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNcbiAgICAgIC5zb21lKChpdGVtKSA9PiBpdGVtLnZhbHVlICE9PSB1bmRlZmluZWQpO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1WYWx1ZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc1xuICAgICAgLmZpbmQoKF9pdGVtKSA9PiBfaXRlbS5uYW1lID09PSBuYW1lKTtcblxuICAgIHJldHVybiBpdGVtPy52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93SXRlbShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKG5hbWUpO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGl0ZW0uaGlkZSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLl9maWx0ZXJJdGVtcy51cGRhdGVJdGVtc1Zpc2libGl0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoaWRlSXRlbShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKG5hbWUpO1xuXG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaXRlbS5oaWRlID0gdHJ1ZTtcblxuICAgIHRoaXMuX2ZpbHRlckl0ZW1zLnVwZGF0ZUl0ZW1zVmlzaWJsaXR5KCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJJdGVtKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0obmFtZSk7XG5cbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpdGVtLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlSXRlbUNvbmZpZyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBJVXBkYXRlRmlsdGVySXRlbUNvbmZpZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbShuYW1lKTtcblxuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGl0ZW0ubGFiZWwgPSBwYXJhbXMubGFiZWwgPz8gaXRlbS5sYWJlbDtcbiAgICBpdGVtLmNoaXBMYWJlbCA9IHBhcmFtcy5jaGlwTGFiZWwgPz8gaXRlbS5jaGlwTGFiZWw7XG5cbiAgICB0aGlzLl9maWx0ZXJJdGVtcy51cGRhdGVJdGVtc1Zpc2libGl0eSgpO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1WYWx1ZUNoYW5nZSQobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHwgbnVsbCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXMuZmluZCgoaSkgPT4gaS5uYW1lID09PSBuYW1lKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS52YWx1ZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLm1vZGVsO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuXG4gIH1cblxuICBwdWJsaWMgY2hhbmdlVmlzaWJpbGl0eShzdGF0ZTogYm9vbGVhbikge1xuICAgIGlmIChzdGF0ZSA9PT0gdGhpcy5zaG93RmlsdGVyTWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX2Rlc3Ryb3lGaWx0ZXJEcmF3ZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGFzVmlzaWJsZUl0ZW1PclNvcnRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9saXN0ZW5Fc2NCdXR0b24oKTtcblxuICAgIHRoaXMub3BlbmVkLmVtaXQoKTtcblxuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkub3BlbigpO1xuICB9XG5cbiAgcHVibGljIGluaXQoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2ZpbHRlckl0ZW1zLnZhbHVlc0FzUXVlcnkoKTtcbiAgICB0aGlzLl9zb3J0ID0gdGhpcy5fZmlsdGVySXRlbXMuZ2V0U29ydCgpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmluaXQpIHtcbiAgICAgIHRoaXMuY29uZmlnLmluaXQoZGF0YSwgdGhpcy5fc29ydCwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQ2hpcHNWaXNpYmlsaXR5KCk7XG5cbiAgICB0aGlzLml0ZW1zXG4gICAgICAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpdGVtLmluaXQoaXRlbSwgdGhpcyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcihldmVudCA9IG51bGwpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpbHRlckl0ZW1zLmZpbHRlcnNDbGVhcigpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmNsZWFyKSB7XG4gICAgICB0aGlzLmNvbmZpZy5jbGVhcigpO1xuICAgIH1cblxuICAgIHRoaXMua2V5d29yZCA9ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGZpbHRlciB3aW5kb3cgYW5kIGRvIGNoYW5nZSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIHNlYXJjaChldmVudCkge1xuICAgIHRoaXMuY2hhbmdlVmlzaWJpbGl0eUNsaWNrKGZhbHNlLCBldmVudCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKGV2ZW50ID0gbnVsbCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9maWx0ZXJJdGVtcy52YWx1ZXNBc1F1ZXJ5KCk7XG4gICAgY29uc3QgZWwgPSB0aGlzLnJlbG9hZEVsPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYoZWwpIHtcbiAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnYWxsIDAuNzVzIDAuMHMnO1xuICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZSgzNjBkZWcpJztcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSBudWxsO1xuICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBudWxsO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnJlbG9hZCkge1xuICAgICAgdGhpcy5jb25maWcucmVsb2FkKGRhdGEsIHRoaXMuX2ZpbHRlckl0ZW1zLmdldFNvcnQoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEl0ZW0obmFtZSk6IEJhc2VJdGVtPGFueT4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaFF1ZXJ5UGFyYW1zKCk6IHZvaWQge1xuICAgIHRoaXMuX2V4dGVybmFsUGFyYW1zLmZldGNoUXVlcnlQYXJhbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIGNoYW5nZSBjYWxsYmFjayBhbmQgYXBwbHkgbmV3IGZpbHRlciB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyBjaGFuZ2UoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2ZpbHRlckl0ZW1zLnZhbHVlc0FzUXVlcnkoKTtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5fZmlsdGVySXRlbXMuZ2V0U29ydCgpO1xuXG4gICAgY29uc3Qgc29ydGluZ0NoYW5nZWQgPSAoKCFzb3J0IHx8ICF0aGlzLl9zb3J0KSAmJiBzb3J0ICE9PSB0aGlzLl9zb3J0KVxuICAgICAgfHwgKHNvcnQgJiYgdGhpcy5fc29ydCAmJiAhb2JqZWN0c0FyZUVxdWFscyh0aGlzLl9zb3J0LCBzb3J0KSk7XG5cbiAgICBpZiAoc29ydGluZ0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3NvcnQgPSBzb3J0O1xuXG4gICAgICBpZiAodGhpcy5jb25maWcuc29ydENoYW5nZSkge1xuICAgICAgICB0aGlzLmNvbmZpZy5zb3J0Q2hhbmdlKGRhdGEsIHNvcnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5jaGFuZ2UpIHtcbiAgICAgIHRoaXMuY29uZmlnLmNoYW5nZShkYXRhLCBzb3J0KTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVDaGlwc1Zpc2liaWxpdHkoKTtcblxuICAgIC8vIHZpc2liaWxpdHkgZm9yIGFjdGlvbnMgY2FuIGRlcGVuZCBvbiBmaWx0ZXJzIHN0YXRlXG4gICAgdGhpcy5fYWN0aW9ucy51cGRhdGVBY3Rpb25zVmlzaWJpbGl0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBmaWx0ZXIgYWN0aW9ucyBjb25maWdcbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVBY3Rpb25zKGFjdGlvbnM6IEZzRmlsdGVyQWN0aW9uW10pOiB2b2lkIHtcbiAgICB0aGlzLl9hY3Rpb25zLmluaXRBY3Rpb25zKGFjdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgXCJGaWx0ZXJzXCIgYnV0dG9uXG4gICAqL1xuICBwdWJsaWMgc2hvd0ZpbHRlcnNCdG4oKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsdGVyc0J0blZpc2libGUkLm5leHQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBcIkZpbHRlcnNcIiBidXR0b25cbiAgICovXG4gIHB1YmxpYyBoaWRlRmlsdGVyc0J0bigpOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJzQnRuVmlzaWJsZSQubmV4dChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBcIktleXdvcmRcIiBmaWVsZCBpZiBpdCBwcmVzZW50XG4gICAqL1xuICBwdWJsaWMgc2hvd0tleXdvcmRGaWVsZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9rZXl3b3JkVmlzaWJsZSQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIFwiS2V5d29yZFwiIGZpZWxkIGlmIGl0IHByZXNlbnRcbiAgICovXG4gIHB1YmxpYyBoaWRlS2V5d29yZEZpZWxkKCk6IHZvaWQge1xuICAgIHRoaXMuX2tleXdvcmRWaXNpYmxlJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyB0aHJvdWdoIGFjdGlvbnMgYW5kIGNoZWNrIHNob3coKSBjYWxsYmFjayBhbmQgdXBkYXRlIHZpc2libGUgYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUFjdGlvbnNWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgIHRoaXMuX2FjdGlvbnMudXBkYXRlQWN0aW9uc1Zpc2liaWxpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyB0aHJvdWdoIGFjdGlvbnMgYW5kIGNoZWNrIGRpc2FibGVkKCkgY2FsbGJhY2sgYW5kIHVwZGF0ZSBkaXNhYmxlZCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZURpc2FibGVkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aW9ucy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXRlbXMoaXRlbXM6IElGaWx0ZXJDb25maWdJdGVtW10pIHtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy5kZXN0cm95SXRlbXMoKTtcblxuICAgIHRoaXMuY29uZmlnLml0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5fZmlsdGVySXRlbXMuc2V0Q29uZmlnKHRoaXMuX2NvbmZpZyk7XG4gICAgdGhpcy5fZXh0ZXJuYWxQYXJhbXMuaW5pdEl0ZW1zKCk7XG5cbiAgICB0aGlzLl9zeW5jU2VhcmNoSW5wdXRXaXRoS2V5d29yZCgpO1xuICB9XG5cbiAgcHVibGljIGtleXdvcmRDaGFuZ2Uoa2V5d29yZCkge1xuICAgIHRoaXMuX2tleXdvcmQkLm5leHQoa2V5d29yZCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU29ydGluZ3MoaXRlbXM6IFNvcnRJdGVtW10pOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy51cGRhdGVTb3J0aW5nSXRlbXNWYWx1ZXMoaXRlbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdEZpbHRlcldpdGhDb25maWcoY29uZmlnOiBGaWx0ZXJDb25maWcpIHtcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuX2ZpbHRlckl0ZW1zLmRlc3Ryb3lJdGVtcygpO1xuICAgIH1cblxuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLih0aGlzLl9kZWZhdWx0Q29uZmlnIHx8IHt9KSxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICB9O1xuXG4gICAgdGhpcy5fY29uZmlnID0gbmV3IEZzRmlsdGVyQ29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5fYWN0aW9ucy5zZXRDb25maWcodGhpcy5fY29uZmlnKTtcbiAgICB0aGlzLl9wZXJzaXN0YW5jZVBhcmFtcy5zZXRDb25maWcodGhpcy5fY29uZmlnLCB0aGlzLmluRGlhbG9nKTtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy5zZXRDb25maWcodGhpcy5fY29uZmlnKTtcbiAgICB0aGlzLl9leHRlcm5hbFBhcmFtcy5zZXRDb25maWcodGhpcy5fY29uZmlnKTtcblxuICAgIHRoaXMuX3N5bmNTZWFyY2hJbnB1dFdpdGhLZXl3b3JkKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcucmVsb2FkV2hlbkNvbmZpZ0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVzdHJveUZpbHRlckRyYXdlcigpIHtcbiAgICB0aGlzLl9maWx0ZXJPdmVybGF5LmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVXaW5kb3dXaWR0aCgpIHtcbiAgICB0aGlzLndpbmRvd0Rlc2t0b3AgPSB3aW5kb3cuaW5uZXJXaWR0aCA+IDEyMDA7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Fc2NCdXR0b24oKSB7XG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQod2luZG93LCAna2V5dXAnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBldmVudC5jb2RlID09PSAnRXNjYXBlJyksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuY2xvc2VkKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuV2luZG93UmVzaXplKCkge1xuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlV2luZG93V2lkdGgoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0QXV0b1JlbG9hZCgpIHtcbiAgICBpZih0aGlzLmNvbmZpZy5hdXRvUmVsb2FkKSB7XG4gICAgICBpbnRlcnZhbCh0aGlzLmNvbmZpZy5hdXRvUmVsb2FkLnNlY29uZHMgKiAxMDAwKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5hdXRvUmVsb2FkKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVsb2FkKG51bGwpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5JbnB1dENoYW5nZXMoKSB7XG4gICAgdGhpcy5fa2V5d29yZCRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXdvcmRJdGVtID0gdGhpcy5fZmlsdGVySXRlbXMua2V5d29yZEl0ZW07XG4gICAgICAgIGtleXdvcmRJdGVtLm1vZGVsID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNTZWFyY2hJbnB1dFdpdGhLZXl3b3JkKCk6IHZvaWQge1xuICAgIGNvbnN0IGtleXdvcmRJdGVtID0gdGhpcy5fZmlsdGVySXRlbXMua2V5d29yZEl0ZW07XG4gICAgaWYgKGtleXdvcmRJdGVtKSB7XG4gICAgICB0aGlzLmtleXdvcmQgPSBrZXl3b3JkSXRlbS5tb2RlbDtcbiAgICAgIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXIgPSBrZXl3b3JkSXRlbS5sYWJlbCBhcyBzdHJpbmcgfHwgJ1NlYXJjaCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuSW50ZXJuYWxJdGVtc0NoYW5nZSgpIHtcbiAgICB0aGlzLl9maWx0ZXJJdGVtc1xuICAgICAgLml0ZW1zQ2hhbmdlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdE92ZXJsYXkoKSB7XG4gICAgdGhpcy5fZmlsdGVyT3ZlcmxheS5zZXRDbGVhckZuKHRoaXMuY2xlYXIuYmluZCh0aGlzKSk7XG4gICAgdGhpcy5fZmlsdGVyT3ZlcmxheS5zZXREb25lRm4odGhpcy5oaWRlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLy8gV2UgbWF5IG5lZWQgc29tZSB0aW1lIHRvIHJlY2lldmUgZXh0ZXJuYWwgcGFyYW1zIGFuZCBhZnRlciB0aGF0IHJlYWR5IGNhbiBiZSBlbWl0dGVkXG4gIHByaXZhdGUgX2xpc3RlbldoZW5GaWx0ZXJSZWFkeSgpIHtcbiAgICBjb21iaW5lTGF0ZXN0KFxuICAgICAgW1xuICAgICAgICB0aGlzLl9leHRlcm5hbFBhcmFtcy5wZW5kaW5nJCxcbiAgICAgICAgdGhpcy5pdGVtc1JlYWR5JCxcbiAgICAgIF0pXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChbcGVuZGluZ1BhcmFtcywgaXRlbXNSZWFkeV0pID0+ICFwZW5kaW5nUGFyYW1zICYmIGl0ZW1zUmVhZHkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB0aGlzLl9zeW5jU2VhcmNoSW5wdXRXaXRoS2V5d29yZCgpO1xuXG4gICAgICAgIHRoaXMucmVhZHkuZW1pdCgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVDaGlwc1Zpc2liaWxpdHkoKSB7XG4gICAgY29uc3QgaGFzRmlsdGVyQ2hpcHMgPSB0aGlzLl9maWx0ZXJJdGVtcy5pdGVtc1xuICAgICAgLnNvbWUoKGl0ZW06IEJhc2VJdGVtPGFueT4pID0+IHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaXNDaGlwVmlzaWJsZTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5faGFzRmlsdGVyQ2hpcHMkLm5leHQoaGFzRmlsdGVyQ2hpcHMpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWlubmVyLWNvbnRhaW5lclwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGFzS2V5d29yZDsgZWxzZSBmaWx0ZXJLZXl3b3JkXCI+XG4gICAgICA8ZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyU3RhdHVzQmFyQ2hpcHNcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVG9vbGJhclwiPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyQWN0aW9uc1wiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0tleXdvcmRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZmlsdGVyU3RhdHVzQmFyQ2hpcHNcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyU3RhdHVzQmFyQ2hpcHM+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0dXNCYXJcIj5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmlsdGVyLXN0YXR1cy1jb250YWluZXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdoYXMtc3RhdHVzJzogISFmaWx0ZXJTdGF0dXMudGV4dENvbnRlbnQgfVwiPlxuICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmlsdGVyLXN0YXR1c1wiXG4gICAgICAgICAgI2ZpbHRlclN0YXR1cz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0Jhci50ZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLmNoaXBzICYmIGhhc0ZpbHRlckNoaXBzJCB8IGFzeW5jXCI+XG4gICAgPGZzLWZpbHRlci1jaGlwc1xuICAgICAgY2xhc3M9XCJmaWx0ZXItY2hpcHNcIlxuICAgICAgW2ZpbHRlcnNdPVwiaXRlbXNcIj5cbiAgICA8L2ZzLWZpbHRlci1jaGlwcz5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNmaWx0ZXJLZXl3b3JkPlxuICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWtleXdvcmRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGtleXdvcmRWaXNpYmxlJCB8IGFzeW5jKSAmJiAha2V5d29yZEl0ZW0/LmhpZGUgXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICBjbGFzcz1cInNlYXJjaC1mb3JtLWZpZWxkIGZvcm0tZmllbGQtcGFkbGVzc1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2hhcy1rZXl3b3JkJzogISFrZXl3b3JkXG4gICAgICAgICAgfVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgbWF0UHJlZml4XG4gICAgICAgICAgICBjbGFzcz1cImljb25cIj5cbiAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PlxuICAgICAgICAgICAgc2VhcmNoXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAja2V5d29yZE1hdElucHV0XG4gICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImtleXdvcmRcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImtleXdvcmRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgbmFtZT1cImZpbHRlci1pbnB1dFwiXG4gICAgICAgICAgW2ZzQ2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCI+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2ZpbHRlckFjdGlvbnM+XG4gIDxkaXYgY2xhc3M9XCJmaWx0ZXItYWN0aW9uc1wiPlxuICAgIDxmcy1maWx0ZXItYWN0aW9uc1xuICAgICAgKm5nSWY9XCJhY3Rpb25zVmlzaWJsZSQgfCBhc3luY1wiXG4gICAgICBbYWN0aW9uc109XCJhY3Rpb25zJCB8IGFzeW5jXCJcbiAgICAgIFtrZWJhYkFjdGlvbnNdPVwibWVudUFjdGlvbnMkIHwgYXN5bmNcIj5cbiAgICA8L2ZzLWZpbHRlci1hY3Rpb25zPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2ZpbHRlclRvb2xiYXI+XG4gIDxkaXYgY2xhc3M9XCJmaWx0ZXItdG9vbGJhclwiPlxuICAgIEBpZiAoZmlsdGVyc0J0blZpc2libGUkIHwgYXN5bmMpIHtcbiAgICAgIEBpZiAoaGFzVmlzaWJsZUl0ZW1PclNvcnRpbmcpIHtcbiAgICAgICAgPGFcbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidXR0b24tZmlsdGVyc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlVmlzaWJpbGl0eUNsaWNrKCFzaG93RmlsdGVyTWVudSwgJGV2ZW50KVwiXG4gICAgICAgICAgICBbY29sb3JdPVwiY29uZmlnLmJ1dHRvbi5jb2xvclwiPlxuICAgICAgICAgIEBpZiAoY29uZmlnLmJ1dHRvbi5pY29uKSB7XG4gICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImZpbHRlck91dGxpbmVcIj48L21hdC1pY29uPlxuICAgICAgICAgIH1cbiAgICAgICAgICB7eyBjb25maWcuYnV0dG9uLmxhYmVsIH19XG4gICAgICAgIDwvYT5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmIChjb25maWcucmVsb2FkKSB7XG4gICAgICA8YVxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9XCJyZWxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJidXR0b24tcmVsb2FkXCI+XG4gICAgICAgIDxtYXQtaWNvbiAjcmVsb2FkRWw+XG4gICAgICAgICAgcmVmcmVzaFxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9hPlxuICAgIH1cbiAgICBAaWYgKGNvbmZpZy5hdXRvUmVsb2FkKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXJlbG9hZFwiPlxuICAgICAgICBAaWYgKGNvbmZpZy5hdXRvUmVsb2FkKSB7XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgbmFtZT1cImF1dG9SZWxvYWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImF1dG8tcmVsb2FkXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhdXRvUmVsb2FkXCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgQXV0byByZWZyZXNoXG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
645
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29tcG9uZW50cy9maWx0ZXIvZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUUvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFPekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FB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QUFVO3NCQURwQixXQUFXO3VCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmltcG9ydCB7IE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRJY29uUmVnaXN0cnkgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuXG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICdAZmlyZXN0aXRjaC9kcmF3ZXInO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb21FdmVudCwgaW50ZXJ2YWwsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFjdGlvbnNDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9hY3Rpb25zLWNvbnRyb2xsZXInO1xuaW1wb3J0IHsgb2JqZWN0c0FyZUVxdWFscyB9IGZyb20gJy4uLy4uL2hlbHBlcnMvY29tcGFyZSc7XG5pbXBvcnQgeyBJRmlsdGVyU2F2ZWRGaWx0ZXIsIElTb3J0aW5nQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZzRmlsdGVyQWN0aW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEZpbHRlckNvbmZpZywgRmlsdGVyU29ydCwgSUZpbHRlckNvbmZpZ0l0ZW0sIFNvcnRJdGVtLFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVVwZGF0ZUZpbHRlckl0ZW1Db25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3VwZGF0ZS1maWx0ZXItaXRlbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRnNGaWx0ZXJDb25maWcgfSBmcm9tICcuLi8uLi9tb2RlbHMvZmlsdGVyLWNvbmZpZyc7XG5pbXBvcnQgeyBCYXNlSXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9pdGVtcy9iYXNlLWl0ZW0nO1xuaW1wb3J0IHsgVGV4dEl0ZW0gfSBmcm9tICcuLi8uLi9tb2RlbHMvaXRlbXMvdGV4dC1pdGVtJztcbmltcG9ydCB7IEV4dGVybmFsUGFyYW1zQ29udHJvbGxlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4dGVybmFsLXBhcmFtcy1jb250cm9sbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXVlcnlQYXJhbXNDb250cm9sbGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXh0ZXJuYWwtcGFyYW1zL3F1ZXJ5LXBhcmFtcy1jb250cm9sbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXVlcnlQZXJzaXN0YW5jZUNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHRlcm5hbC1wYXJhbXMvcXVlcnktcGVyc2lzdGFuY2UtY29udHJvbGxlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNhdmVkRmlsdGVyc0NvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHRlcm5hbC1wYXJhbXMvc2F2ZWQtZmlsdGVycy1jb250cm9sbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnNGaWx0ZXJPdmVybGF5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbHRlci1vdmVybGF5LnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9jdXNDb250cm9sbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZvY3VzLWNvbnRyb2xsZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGc0ZpbHRlckl0ZW1zU3RvcmUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pdGVtcy1zdG9yZS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgRmlsdGVyU3RhdHVzQmFyRGlyZWN0aXZlIH0gZnJvbSAnLi8uLi8uLi9kaXJlY3RpdmVzL3N0YXR1cy1iYXIvc3RhdHVzLWJhci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRlNfRklMVEVSX0NPTkZJRyB9IGZyb20gJy4vLi4vLi4vaW5qZWN0b3JzL2ZpbHRlci1jb25maWcnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLWZpbHRlcicsXG4gIHN0eWxlVXJsczogWycuL2ZpbHRlci5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLmNvbXBvbmVudC5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRnNGaWx0ZXJPdmVybGF5U2VydmljZSxcbiAgICBFeHRlcm5hbFBhcmFtc0NvbnRyb2xsZXIsXG4gICAgUXVlcnlQZXJzaXN0YW5jZUNvbnRyb2xsZXIsXG4gICAgUXVlcnlQYXJhbXNDb250cm9sbGVyLFxuICAgIEZvY3VzQ29udHJvbGxlclNlcnZpY2UsXG4gICAgRnNGaWx0ZXJJdGVtc1N0b3JlLFxuICAgIFNhdmVkRmlsdGVyc0NvbnRyb2xsZXIsXG4gICAgQWN0aW9uc0NvbnRyb2xsZXIsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IHNldENvbmZpZyhjb25maWcpIHtcbiAgICB0aGlzLl9pbml0RmlsdGVyV2l0aENvbmZpZyhjb25maWcpO1xuICB9XG5cbiAgQElucHV0KCdmaWx0ZXInKVxuICBwdWJsaWMgc2V0IHNldEZpbHRlcihjb25maWcpIHtcbiAgICB0aGlzLl9pbml0RmlsdGVyV2l0aENvbmZpZyhjb25maWcpO1xuICB9XG5cbiAgQElucHV0KCkgcHVibGljIHNob3dTb3J0Qnk6IGFueSA9IHRydWU7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChGaWx0ZXJTdGF0dXNCYXJEaXJlY3RpdmUpXG4gIHB1YmxpYyBzdGF0dXNCYXI6IEZpbHRlclN0YXR1c0JhckRpcmVjdGl2ZTtcblxuICBAVmlld0NoaWxkKCdrZXl3b3JkTWF0SW5wdXQnLCB7IHJlYWQ6IE1hdElucHV0IH0pXG4gIHB1YmxpYyBrZXl3b3JkTWF0SW5wdXQ6IE1hdElucHV0O1xuXG4gIEBWaWV3Q2hpbGQoJ3JlbG9hZEVsJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHB1YmxpYyByZWxvYWRFbDogRWxlbWVudFJlZjtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZpbHRlcnMtb3BlbicpXG4gIHB1YmxpYyBzaG93RmlsdGVyTWVudSA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3Mud2luZG93LWRlc2t0b3AnKVxuICBwdWJsaWMgd2luZG93RGVza3RvcCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZnMtZmlsdGVyJylcbiAgcHVibGljIGZzRmlsdGVyQ2xhc3MgPSB0cnVlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaGFzLWtleXdvcmQnKVxuICBwdWJsaWMgZ2V0IGhhc0tleXdvcmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckl0ZW1zLmhhc0tleXdvcmQ7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoUGxhY2Vob2xkZXIgPSAnU2VhcmNoJztcbiAgcHVibGljIGtleXdvcmQgPSAnJztcbiAgcHVibGljIGF1dG9SZWxvYWQgPSB0cnVlO1xuXG4gIHByb3RlY3RlZCBfY29uZmlnOiBGc0ZpbHRlckNvbmZpZyA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfc29ydDogRmlsdGVyU29ydDtcbiAgcHJpdmF0ZSBfZmlsdGVyc0J0blZpc2libGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHJpdmF0ZSBfa2V5d29yZFZpc2libGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0cnVlKTtcbiAgcHJpdmF0ZSBfaGFzRmlsdGVyQ2hpcHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHByaXZhdGUgX2tleXdvcmQkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9kaWFsb2dSZWYgPSBpbmplY3QoTWF0RGlhbG9nUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIF9kcmF3ZXJSZWYgPSBpbmplY3QoRHJhd2VyUmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pOyAgXG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChGU19GSUxURVJfQ09ORklHKSBwcml2YXRlIF9kZWZhdWx0Q29uZmlnOiBGc0ZpbHRlckNvbmZpZyxcbiAgICBwcml2YXRlIF9maWx0ZXJPdmVybGF5OiBGc0ZpbHRlck92ZXJsYXlTZXJ2aWNlLFxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF9leHRlcm5hbFBhcmFtczogRXh0ZXJuYWxQYXJhbXNDb250cm9sbGVyLFxuICAgIHByaXZhdGUgX3BlcnNpc3RhbmNlUGFyYW1zOiBRdWVyeVBlcnNpc3RhbmNlQ29udHJvbGxlcixcbiAgICBwcml2YXRlIF9maWx0ZXJJdGVtczogRnNGaWx0ZXJJdGVtc1N0b3JlLFxuICAgIHByaXZhdGUgX2FjdGlvbnM6IEFjdGlvbnNDb250cm9sbGVyLFxuICAgIHByaXZhdGUgX3NhdmVkRmlsdGVyc0NvbnRyb2xsZXI6IFNhdmVkRmlsdGVyc0NvbnRyb2xsZXIsXG4gICkge1xuICAgIHRoaXMuX2ZpbHRlckl0ZW1zLmZpbHRlciA9IHRoaXM7XG4gICAgdGhpcy5fbGlzdGVuV2hlbkZpbHRlclJlYWR5KCk7XG4gICAgdGhpcy5fdXBkYXRlV2luZG93V2lkdGgoKTtcblxuICAgIGNvbnN0IGljb25SZWdpc3RyeSA9IGluamVjdChNYXRJY29uUmVnaXN0cnkpO1xuICAgIGNvbnN0IHNhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICAgIGNvbnN0IGZpbHRlckFsdCA9ICc8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBoZWlnaHQ9XCIyNHB4XCIgdmlld0JveD1cIjAgLTk2MCA5NjAgOTYwXCIgd2lkdGg9XCIyNHB4XCI+PHBhdGggZD1cIk00NDAtMTYwcS0xNyAwLTI4LjUtMTEuNVQ0MDAtMjAwdi0yNDBMMTYxLTc0NXEtMTQtMTctNC0zNnQzMS0xOWg1ODRxMjEgMCAzMSAxOXQtNCAzNkw1NjAtNDQwdjI0MHEwIDE3LTExLjUgMjguNVQ1MjAtMTYwaC04MFptNDAtMjc2IDI0MC0zMDRIMjQwbDI0MCAzMDRabTAgMFpcIi8+PC9zdmc+JztcblxuICAgIGljb25SZWdpc3RyeS5hZGRTdmdJY29uTGl0ZXJhbCgnZmlsdGVyT3V0bGluZScsIHNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChmaWx0ZXJBbHQpKTtcblxuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuYXR0YWNoJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93RmlsdGVyTWVudSA9IHRydWU7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuZGV0YWNoJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zaG93RmlsdGVyTWVudSA9IGZhbHNlO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9saXN0ZW5XaW5kb3dSZXNpemUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCk6IEZzRmlsdGVyQ29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckl0ZW1zLnZhbHVlcygpO1xuICB9XG5cbiAgcHVibGljIGdldCBpbkRpYWxvZygpIHtcbiAgICByZXR1cm4gISF0aGlzLl9kaWFsb2dSZWYgfHwgISF0aGlzLl9kcmF3ZXJSZWY7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZpbHRlclBhcmFtc1F1ZXJ5KCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMudmFsdWVzQXNRdWVyeSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMuaXRlbXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZpc2libGVJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVySXRlbXMudmlzaWJsZUl0ZW1zO1xuICB9XG5cbiAgcHVibGljIGdldCBrZXl3b3JkSXRlbSgpOiBUZXh0SXRlbSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJJdGVtcy5rZXl3b3JkSXRlbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXRlbXNSZWFkeSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlckl0ZW1zLnJlYWR5JDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaGFzRmlsdGVyQ2hpcHMkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9oYXNGaWx0ZXJDaGlwcyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc1Zpc2libGVJdGVtT3JTb3J0aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpc2libGVJdGVtcy5sZW5ndGggPiAwIHx8ICEhdGhpcy5fZmlsdGVySXRlbXMuc29ydEJ5SXRlbTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyc0J0blZpc2libGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJzQnRuVmlzaWJsZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGtleXdvcmRWaXNpYmxlJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fa2V5d29yZFZpc2libGUkLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKCh2aXNpYmxlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHZpc2libGUgJiYgdGhpcy5oYXNLZXl3b3JkO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGlvbnNWaXNpYmxlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucy52aXNpYmxlJDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWN0aW9ucyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbnMuYWN0aW9ucyQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lbnVBY3Rpb25zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9ucy5tZW51QWN0aW9ucyQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGFjdGl2ZVNhdmVkRmlsdGVyKHNhdmVkRmlsdGVyOiBJRmlsdGVyU2F2ZWRGaWx0ZXIpIHtcbiAgICB0aGlzLl9leHRlcm5hbFBhcmFtcy5zZXRBY3RpdmVTYXZlZEZpbHRlcihzYXZlZEZpbHRlcik7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFjdGl2ZVNhdmVkRmlsdGVyKCk6IElGaWx0ZXJTYXZlZEZpbHRlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NhdmVkRmlsdGVyc0NvbnRyb2xsZXIuYWN0aXZlRmlsdGVyO1xuICB9XG5cbiAgcHVibGljIGdldCBzYXZlZEZpbHRlcnMoKTogSUZpbHRlclNhdmVkRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9zYXZlZEZpbHRlcnNDb250cm9sbGVyLnNhdmVkRmlsdGVycztcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAvLyBBdm9pZCBuZ0NoYW5nZXMgZXJyb3JcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5hdXRvZm9jdXMpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5faW5pdEF1dG9SZWxvYWQoKTtcbiAgICB0aGlzLl9saXN0ZW5JbnB1dENoYW5nZXMoKTtcbiAgICB0aGlzLl9saXN0ZW5JbnRlcm5hbEl0ZW1zQ2hhbmdlKCk7XG4gICAgdGhpcy5faW5pdEtleXdvcmRWaXNpYmlsaXR5KCk7XG4gICAgdGhpcy5faW5pdE92ZXJsYXkoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95RmlsdGVyRHJhd2VyKCk7XG5cbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgZm9jdXMoKSB7XG4gICAgdGhpcy5rZXl3b3JkTWF0SW5wdXQ/LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU29ydChzb3J0OiBJU29ydGluZ0NoYW5nZUV2ZW50KSB7XG4gICAgdGhpcy5fZmlsdGVySXRlbXMudXBkYXRlU29ydChzb3J0KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBEbyB1cGRhdGUgdmFsdWUgb2Ygc29tZSBmaWVsZFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gdmFsdWVzIGZvciB1cGRhdGVcbiAgICpcbiAgICogVG8gdXBkYXRlIHRleHQgdmFsdWUganVzdCBwYXNzIG5ldyB0ZXh0IHZhbHVlXG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVTZWxlY3RWYWx1ZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IGtleXdvcmQ6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKiBUbyB1cGRhdGUgc2VsZWN0IG9yIG9ic2VydmFibGUgc2VsZWN0IHlvdSBjb3VsZCBwYXNzIHN1aXRhYmxlIHZhbHVlXG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVTZWxlY3RWYWx1ZSh2YWw6IG51bWJlcikge1xuICAgKiAgIHRoaXMuZmlsdGVyRWwudXBkYXRlVmFsdWVzKHsgc2ltcGxlX3NlbGVjdDogdmFsIH0sIHsgb2JzZXJ2YWJsZV9zZWxlY3Q6IHZhbCB9KTtcbiAgICogfVxuICAgKlxuICAgKiBUbyB1cGRhdGUgY2hlY2tib3ggdmFsdWUganVzdCBwYXNzIHRydWUvZmFsc2UgYXMgdmFsdWVcbiAgICpcbiAgICogcHVibGljIHVwZGF0ZUNoZWNrb3godmFsOiBib29sZWFuKSB7XG4gICAqICAgdGhpcy5maWx0ZXJFbC51cGRhdGVWYWx1ZXMoeyBjaGVja2JveDogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqIFRvIHVwZGF0ZSByYW5nZSB2YWx1ZSBqdXN0IHBhc3Mgb2JqZWN0IHdpdGggbWluJm1heCBvYmplY3Qgb3IganVzdCB3aXRoIG9uZSBvZiB0YXJnZXRzXG4gICAqXG4gICAqIEV4LjogeyBtaW46IDEwLCBtYXggMTUgfSwgeyBtaW46IDUgfSwgeyBtYXggNSB9XG4gICAqXG4gICAqIHB1YmxpYyB1cGRhdGVSYW5nZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IHJhbmdlOiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIGF1dG9jb21wbGV0ZSBqdXN0IHBhc3Mgb2JqZWN0IHdpdGggbmFtZS92YWx1ZSBmaWVsZHNcbiAgICpcbiAgICogRXguOiB7IG5hbWU6ICdKb2huIERvZScsIHZhbHVlOiAxIH1cbiAgICpcbiAgICogcHVibGljIHVwZGF0ZUF1dG9jb21wbGV0ZSh2YWwpIHtcbiAgICogICB0aGlzLmZpbHRlckVsLnVwZGF0ZVZhbHVlcyh7IGF1dG9jb21wbGV0ZV91c2VyX2lkOiB2YWwgfSk7XG4gICAqIH1cbiAgICpcbiAgICogVG8gdXBkYXRlIGF1dG9jb21wbGV0ZWNoaXBzIGp1c3QgcGFzczpcbiAgICpcbiAgICogMSkgb2JqZWN0IHdpdGggbmFtZS92YWx1ZSBmaWVsZHMgLSB3aWxsIGJlIGFwcGVuZGVkIHRvIGV4aXN0aW5nIHNldCBvZiB2YWx1ZXNcbiAgICpcbiAgICogeyBuYW1lOiAnSm9obiBEb2UnLCB2YWx1ZTogMSB9XG4gICAqXG4gICAqIDIpIGFycmF5IG9mIG9iamVjdHMgLSB3aWxsIGJlIGFwcGVuZGVkIHRvIGV4aXN0aW5nIHNldCBvZiB2YWx1ZXNcbiAgICpcbiAgICogW3sgbmFtZTogJ0pvaG4gRG9lJywgdmFsdWU6IDEgfSwgeyBuYW1lOiAnRGFyeWEgRmlsaXBvdmEnLCB2YWx1ZTogMiB9XVxuICAgKlxuICAgKiAzKSBudWxsIC0gY2xlYXIgZXhpc3Rpbmcgc2V0IG9mIHZhbHVlc1xuICAgKlxuICAgKiBwdWJsaWMgdXBkYXRlQXV0b2NvbXBsZXRlKHZhbCkge1xuICAgKiAgIHRoaXMuZmlsdGVyRWwudXBkYXRlVmFsdWVzKHsgYXV0b2NvbXBsZXRlY2hpcHNfdXNlcl9pZDogdmFsIH0pO1xuICAgKiB9XG4gICAqXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlVmFsdWVzKHZhbHVlcykge1xuICAgIE9iamVjdC5rZXlzKHZhbHVlcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBmaWx0ZXJJdGVtID0gdGhpcy5pdGVtc1xuICAgICAgICAuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBrZXkpO1xuXG4gICAgICBpZiAoIWZpbHRlckl0ZW0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaWx0ZXJJdGVtLm1vZGVsID0gdmFsdWVzW2tleV07XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaGlkZSgpIHtcbiAgICB0aGlzLmNoYW5nZVZpc2liaWxpdHkoZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIHNob3coKSB7XG4gICAgdGhpcy5jaGFuZ2VWaXNpYmlsaXR5KHRydWUpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVZpc2liaWxpdHlDbGljayh2YWx1ZSwgZXZlbnQgPSBudWxsKSB7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlVmlzaWJpbGl0eSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGl0ZW1WYWx1ZXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbm9uRW1wdHlJdGVtVmFsdWVzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGhhc0l0ZW1WYWx1ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNcbiAgICAgIC5zb21lKChpdGVtKSA9PiBpdGVtLnZhbHVlICE9PSB1bmRlZmluZWQpO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1WYWx1ZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc1xuICAgICAgLmZpbmQoKF9pdGVtKSA9PiBfaXRlbS5uYW1lID09PSBuYW1lKTtcblxuICAgIHJldHVybiBpdGVtPy52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93SXRlbShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKG5hbWUpO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGl0ZW0uaGlkZSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLl9maWx0ZXJJdGVtcy51cGRhdGVJdGVtc1Zpc2libGl0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoaWRlSXRlbShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpdGVtID0gdGhpcy5nZXRJdGVtKG5hbWUpO1xuXG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaXRlbS5oaWRlID0gdHJ1ZTtcblxuICAgIHRoaXMuX2ZpbHRlckl0ZW1zLnVwZGF0ZUl0ZW1zVmlzaWJsaXR5KCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJJdGVtKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmdldEl0ZW0obmFtZSk7XG5cbiAgICBpZiAoIWl0ZW0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpdGVtLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlSXRlbUNvbmZpZyhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyYW1zOiBJVXBkYXRlRmlsdGVySXRlbUNvbmZpZyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0SXRlbShuYW1lKTtcblxuICAgIGlmICghaXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGl0ZW0ubGFiZWwgPSBwYXJhbXMubGFiZWwgPz8gaXRlbS5sYWJlbDtcbiAgICBpdGVtLmNoaXBMYWJlbCA9IHBhcmFtcy5jaGlwTGFiZWwgPz8gaXRlbS5jaGlwTGFiZWw7XG5cbiAgICB0aGlzLl9maWx0ZXJJdGVtcy51cGRhdGVJdGVtc1Zpc2libGl0eSgpO1xuICB9XG5cbiAgcHVibGljIGdldEl0ZW1WYWx1ZUNoYW5nZSQobmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHwgbnVsbCB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXMuZmluZCgoaSkgPT4gaS5uYW1lID09PSBuYW1lKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICByZXR1cm4gaXRlbS52YWx1ZSRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLm1vZGVsO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuXG4gIH1cblxuICBwdWJsaWMgY2hhbmdlVmlzaWJpbGl0eShzdGF0ZTogYm9vbGVhbikge1xuICAgIGlmIChzdGF0ZSA9PT0gdGhpcy5zaG93RmlsdGVyTWVudSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcblxuICAgICAgcmV0dXJuIHRoaXMuX2Rlc3Ryb3lGaWx0ZXJEcmF3ZXIoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaGFzVmlzaWJsZUl0ZW1PclNvcnRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9saXN0ZW5Fc2NCdXR0b24oKTtcblxuICAgIHRoaXMub3BlbmVkLmVtaXQoKTtcblxuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkub3BlbigpO1xuICB9XG5cbiAgcHVibGljIGluaXQoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2ZpbHRlckl0ZW1zLnZhbHVlc0FzUXVlcnkoKTtcbiAgICB0aGlzLl9zb3J0ID0gdGhpcy5fZmlsdGVySXRlbXMuZ2V0U29ydCgpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmluaXQpIHtcbiAgICAgIHRoaXMuY29uZmlnLmluaXQoZGF0YSwgdGhpcy5fc29ydCwgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQ2hpcHNWaXNpYmlsaXR5KCk7XG5cbiAgICB0aGlzLml0ZW1zXG4gICAgICAuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBpdGVtLmluaXQoaXRlbSwgdGhpcyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcihldmVudCA9IG51bGwpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpbHRlckl0ZW1zLmZpbHRlcnNDbGVhcigpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmNsZWFyKSB7XG4gICAgICB0aGlzLmNvbmZpZy5jbGVhcigpO1xuICAgIH1cblxuICAgIHRoaXMua2V5d29yZCA9ICcnO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIGZpbHRlciB3aW5kb3cgYW5kIGRvIGNoYW5nZSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIHNlYXJjaChldmVudCkge1xuICAgIHRoaXMuY2hhbmdlVmlzaWJpbGl0eUNsaWNrKGZhbHNlLCBldmVudCk7XG4gIH1cblxuICBwdWJsaWMgcmVsb2FkKGV2ZW50ID0gbnVsbCkge1xuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9maWx0ZXJJdGVtcy52YWx1ZXNBc1F1ZXJ5KCk7XG4gICAgY29uc3QgZWwgPSB0aGlzLnJlbG9hZEVsPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgaWYoZWwpIHtcbiAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSAnYWxsIDAuNzVzIDAuMHMnO1xuICAgICAgZWwuc3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZSgzNjBkZWcpJztcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsLnN0eWxlLnRyYW5zaXRpb24gPSBudWxsO1xuICAgICAgICBlbC5zdHlsZS50cmFuc2Zvcm0gPSBudWxsO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnJlbG9hZCkge1xuICAgICAgdGhpcy5jb25maWcucmVsb2FkKGRhdGEsIHRoaXMuX2ZpbHRlckl0ZW1zLmdldFNvcnQoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEl0ZW0obmFtZSk6IEJhc2VJdGVtPGFueT4ge1xuICAgIHJldHVybiB0aGlzLml0ZW1zXG4gICAgICAuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBuYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaFF1ZXJ5UGFyYW1zKCk6IHZvaWQge1xuICAgIHRoaXMuX2V4dGVybmFsUGFyYW1zLmZldGNoUXVlcnlQYXJhbXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIGNoYW5nZSBjYWxsYmFjayBhbmQgYXBwbHkgbmV3IGZpbHRlciB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyBjaGFuZ2UoKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2ZpbHRlckl0ZW1zLnZhbHVlc0FzUXVlcnkoKTtcbiAgICBjb25zdCBzb3J0ID0gdGhpcy5fZmlsdGVySXRlbXMuZ2V0U29ydCgpO1xuXG4gICAgY29uc3Qgc29ydGluZ0NoYW5nZWQgPSAoKCFzb3J0IHx8ICF0aGlzLl9zb3J0KSAmJiBzb3J0ICE9PSB0aGlzLl9zb3J0KVxuICAgICAgfHwgKHNvcnQgJiYgdGhpcy5fc29ydCAmJiAhb2JqZWN0c0FyZUVxdWFscyh0aGlzLl9zb3J0LCBzb3J0KSk7XG5cbiAgICBpZiAoc29ydGluZ0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3NvcnQgPSBzb3J0O1xuXG4gICAgICBpZiAodGhpcy5jb25maWcuc29ydENoYW5nZSkge1xuICAgICAgICB0aGlzLmNvbmZpZy5zb3J0Q2hhbmdlKGRhdGEsIHNvcnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5jaGFuZ2UpIHtcbiAgICAgIHRoaXMuY29uZmlnLmNoYW5nZShkYXRhLCBzb3J0KTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVDaGlwc1Zpc2liaWxpdHkoKTtcblxuICAgIC8vIHZpc2liaWxpdHkgZm9yIGFjdGlvbnMgY2FuIGRlcGVuZCBvbiBmaWx0ZXJzIHN0YXRlXG4gICAgdGhpcy5fYWN0aW9ucy51cGRhdGVBY3Rpb25zVmlzaWJpbGl0eSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBmaWx0ZXIgYWN0aW9ucyBjb25maWdcbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyB1cGRhdGVBY3Rpb25zKGFjdGlvbnM6IEZzRmlsdGVyQWN0aW9uW10pOiB2b2lkIHtcbiAgICB0aGlzLl9hY3Rpb25zLmluaXRBY3Rpb25zKGFjdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgXCJGaWx0ZXJzXCIgYnV0dG9uXG4gICAqL1xuICBwdWJsaWMgc2hvd0ZpbHRlcnNCdG4oKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsdGVyc0J0blZpc2libGUkLm5leHQodHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBcIkZpbHRlcnNcIiBidXR0b25cbiAgICovXG4gIHB1YmxpYyBoaWRlRmlsdGVyc0J0bigpOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJzQnRuVmlzaWJsZSQubmV4dChmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBcIktleXdvcmRcIiBmaWVsZCBpZiBpdCBwcmVzZW50XG4gICAqL1xuICBwdWJsaWMgc2hvd0tleXdvcmRGaWVsZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9rZXl3b3JkVmlzaWJsZSQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIFwiS2V5d29yZFwiIGZpZWxkIGlmIGl0IHByZXNlbnRcbiAgICovXG4gIHB1YmxpYyBoaWRlS2V5d29yZEZpZWxkKCk6IHZvaWQge1xuICAgIHRoaXMuX2tleXdvcmRWaXNpYmxlJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyB0aHJvdWdoIGFjdGlvbnMgYW5kIGNoZWNrIHNob3coKSBjYWxsYmFjayBhbmQgdXBkYXRlIHZpc2libGUgYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUFjdGlvbnNWaXNpYmlsaXR5KCk6IHZvaWQge1xuICAgIHRoaXMuX2FjdGlvbnMudXBkYXRlQWN0aW9uc1Zpc2liaWxpdHkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHbyB0aHJvdWdoIGFjdGlvbnMgYW5kIGNoZWNrIGRpc2FibGVkKCkgY2FsbGJhY2sgYW5kIHVwZGF0ZSBkaXNhYmxlZCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZURpc2FibGVkU3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aW9ucy51cGRhdGVEaXNhYmxlZFN0YXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0SXRlbXMoaXRlbXM6IElGaWx0ZXJDb25maWdJdGVtW10pIHtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy5kZXN0cm95SXRlbXMoKTtcblxuICAgIHRoaXMuY29uZmlnLml0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5fZmlsdGVySXRlbXMuc2V0Q29uZmlnKHRoaXMuX2NvbmZpZyk7XG4gICAgdGhpcy5fZXh0ZXJuYWxQYXJhbXMuaW5pdEl0ZW1zKCk7XG5cbiAgICB0aGlzLl9zeW5jU2VhcmNoSW5wdXRXaXRoS2V5d29yZCgpO1xuICB9XG5cbiAgcHVibGljIGtleXdvcmRDaGFuZ2Uoa2V5d29yZCkge1xuICAgIHRoaXMuX2tleXdvcmQkLm5leHQoa2V5d29yZCk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU29ydGluZ3MoaXRlbXM6IFNvcnRJdGVtW10pOiB2b2lkIHtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy51cGRhdGVTb3J0aW5nSXRlbXNWYWx1ZXMoaXRlbXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdEZpbHRlcldpdGhDb25maWcoY29uZmlnOiBGaWx0ZXJDb25maWcpIHtcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuX2ZpbHRlckl0ZW1zLmRlc3Ryb3lJdGVtcygpO1xuICAgIH1cblxuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLih0aGlzLl9kZWZhdWx0Q29uZmlnIHx8IHt9KSxcbiAgICAgIC4uLmNvbmZpZyxcbiAgICB9O1xuXG4gICAgdGhpcy5fY29uZmlnID0gbmV3IEZzRmlsdGVyQ29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5fYWN0aW9ucy5zZXRDb25maWcodGhpcy5fY29uZmlnKTtcbiAgICB0aGlzLl9wZXJzaXN0YW5jZVBhcmFtcy5zZXRDb25maWcodGhpcy5fY29uZmlnLCB0aGlzLmluRGlhbG9nKTtcbiAgICB0aGlzLl9maWx0ZXJJdGVtcy5zZXRDb25maWcodGhpcy5fY29uZmlnKTtcbiAgICB0aGlzLl9leHRlcm5hbFBhcmFtcy5zZXRDb25maWcodGhpcy5fY29uZmlnKTtcblxuICAgIHRoaXMuX3N5bmNTZWFyY2hJbnB1dFdpdGhLZXl3b3JkKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcucmVsb2FkV2hlbkNvbmZpZ0NoYW5nZWQpIHtcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVzdHJveUZpbHRlckRyYXdlcigpIHtcbiAgICB0aGlzLl9maWx0ZXJPdmVybGF5LmNsb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVXaW5kb3dXaWR0aCgpIHtcbiAgICB0aGlzLndpbmRvd0Rlc2t0b3AgPSB3aW5kb3cuaW5uZXJXaWR0aCA+IDEyMDA7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Fc2NCdXR0b24oKSB7XG4gICAgdGhpcy5fem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQod2luZG93LCAna2V5dXAnKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiBldmVudC5jb2RlID09PSAnRXNjYXBlJyksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuY2xvc2VkKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuV2luZG93UmVzaXplKCkge1xuICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlV2luZG93V2lkdGgoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0QXV0b1JlbG9hZCgpIHtcbiAgICBpZih0aGlzLmNvbmZpZy5hdXRvUmVsb2FkKSB7XG4gICAgICBpbnRlcnZhbCh0aGlzLmNvbmZpZy5hdXRvUmVsb2FkLnNlY29uZHMgKiAxMDAwKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5hdXRvUmVsb2FkKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVsb2FkKG51bGwpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5JbnB1dENoYW5nZXMoKSB7XG4gICAgdGhpcy5fa2V5d29yZCRcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleXdvcmRJdGVtID0gdGhpcy5fZmlsdGVySXRlbXMua2V5d29yZEl0ZW07XG4gICAgICAgIGtleXdvcmRJdGVtLm1vZGVsID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3N5bmNTZWFyY2hJbnB1dFdpdGhLZXl3b3JkKCk6IHZvaWQge1xuICAgIGNvbnN0IGtleXdvcmRJdGVtID0gdGhpcy5fZmlsdGVySXRlbXMua2V5d29yZEl0ZW07XG4gICAgaWYgKGtleXdvcmRJdGVtKSB7XG4gICAgICB0aGlzLmtleXdvcmQgPSBrZXl3b3JkSXRlbS5tb2RlbDtcbiAgICAgIHRoaXMuc2VhcmNoUGxhY2Vob2xkZXIgPSBrZXl3b3JkSXRlbS5sYWJlbCBhcyBzdHJpbmcgfHwgJ1NlYXJjaCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdEtleXdvcmRWaXNpYmlsaXR5KCkge1xuICAgIHRoaXMuX2tleXdvcmRWaXNpYmxlJC5uZXh0KCF0aGlzLmtleXdvcmRJdGVtPy5oaWRlKTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlbkludGVybmFsSXRlbXNDaGFuZ2UoKSB7XG4gICAgdGhpcy5fZmlsdGVySXRlbXNcbiAgICAgIC5pdGVtc0NoYW5nZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRPdmVybGF5KCkge1xuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuc2V0Q2xlYXJGbih0aGlzLmNsZWFyLmJpbmQodGhpcykpO1xuICAgIHRoaXMuX2ZpbHRlck92ZXJsYXkuc2V0RG9uZUZuKHRoaXMuaGlkZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIC8vIFdlIG1heSBuZWVkIHNvbWUgdGltZSB0byByZWNpZXZlIGV4dGVybmFsIHBhcmFtcyBhbmQgYWZ0ZXIgdGhhdCByZWFkeSBjYW4gYmUgZW1pdHRlZFxuICBwcml2YXRlIF9saXN0ZW5XaGVuRmlsdGVyUmVhZHkoKSB7XG4gICAgY29tYmluZUxhdGVzdChcbiAgICAgIFtcbiAgICAgICAgdGhpcy5fZXh0ZXJuYWxQYXJhbXMucGVuZGluZyQsXG4gICAgICAgIHRoaXMuaXRlbXNSZWFkeSQsXG4gICAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoW3BlbmRpbmdQYXJhbXMsIGl0ZW1zUmVhZHldKSA9PiAhcGVuZGluZ1BhcmFtcyAmJiBpdGVtc1JlYWR5KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgdGhpcy5fc3luY1NlYXJjaElucHV0V2l0aEtleXdvcmQoKTtcblxuICAgICAgICB0aGlzLnJlYWR5LmVtaXQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQ2hpcHNWaXNpYmlsaXR5KCkge1xuICAgIGNvbnN0IGhhc0ZpbHRlckNoaXBzID0gdGhpcy5fZmlsdGVySXRlbXMuaXRlbXNcbiAgICAgIC5zb21lKChpdGVtOiBCYXNlSXRlbTxhbnk+KSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtLmlzQ2hpcFZpc2libGU7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2hhc0ZpbHRlckNoaXBzJC5uZXh0KGhhc0ZpbHRlckNoaXBzKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZpbHRlci1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cImZpbHRlci1pbm5lci1jb250YWluZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0tleXdvcmQ7IGVsc2UgZmlsdGVyS2V5d29yZFwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlclN0YXR1c0JhckNoaXBzXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRvb2xiYXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlckFjdGlvbnNcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNLZXl3b3JkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZpbHRlclN0YXR1c0JhckNoaXBzXCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2ZpbHRlclN0YXR1c0JhckNoaXBzPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdHVzQmFyXCI+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZpbHRlci1zdGF0dXMtY29udGFpbmVyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyAnaGFzLXN0YXR1cyc6ICEhZmlsdGVyU3RhdHVzLnRleHRDb250ZW50IH1cIj5cbiAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZpbHRlci1zdGF0dXNcIlxuICAgICAgICAgICNmaWx0ZXJTdGF0dXM+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNCYXIudGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZy5jaGlwcyAmJiBoYXNGaWx0ZXJDaGlwcyQgfCBhc3luY1wiPlxuICAgIDxmcy1maWx0ZXItY2hpcHNcbiAgICAgIGNsYXNzPVwiZmlsdGVyLWNoaXBzXCJcbiAgICAgIFtmaWx0ZXJzXT1cIml0ZW1zXCI+XG4gICAgPC9mcy1maWx0ZXItY2hpcHM+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyS2V5d29yZD5cbiAgPGRpdiBjbGFzcz1cImZpbHRlci1rZXl3b3JkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihrZXl3b3JkVmlzaWJsZSQgfCBhc3luYylcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWZvcm0tZmllbGQgZm9ybS1maWVsZC1wYWRsZXNzXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnaGFzLWtleXdvcmQnOiAhIWtleXdvcmRcbiAgICAgICAgICB9XCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBtYXRQcmVmaXhcbiAgICAgICAgICAgIGNsYXNzPVwiaWNvblwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+XG4gICAgICAgICAgICBzZWFyY2hcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNrZXl3b3JkTWF0SW5wdXRcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIFsobmdNb2RlbCldPVwia2V5d29yZFwiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwia2V5d29yZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBuYW1lPVwiZmlsdGVyLWlucHV0XCJcbiAgICAgICAgICBbZnNDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXJcIj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyQWN0aW9ucz5cbiAgPGRpdiBjbGFzcz1cImZpbHRlci1hY3Rpb25zXCI+XG4gICAgPGZzLWZpbHRlci1hY3Rpb25zXG4gICAgICAqbmdJZj1cImFjdGlvbnNWaXNpYmxlJCB8IGFzeW5jXCJcbiAgICAgIFthY3Rpb25zXT1cImFjdGlvbnMkIHwgYXN5bmNcIlxuICAgICAgW2tlYmFiQWN0aW9uc109XCJtZW51QWN0aW9ucyQgfCBhc3luY1wiPlxuICAgIDwvZnMtZmlsdGVyLWFjdGlvbnM+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVyVG9vbGJhcj5cbiAgPGRpdiBjbGFzcz1cImZpbHRlci10b29sYmFyXCI+XG4gICAgQGlmIChmaWx0ZXJzQnRuVmlzaWJsZSQgfCBhc3luYykge1xuICAgICAgQGlmIChoYXNWaXNpYmxlSXRlbU9yU29ydGluZykge1xuICAgICAgICA8YVxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1maWx0ZXJzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VWaXNpYmlsaXR5Q2xpY2soIXNob3dGaWx0ZXJNZW51LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjb2xvcl09XCJjb25maWcuYnV0dG9uLmNvbG9yXCI+XG4gICAgICAgICAgQGlmIChjb25maWcuYnV0dG9uLmljb24pIHtcbiAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiZmlsdGVyT3V0bGluZVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgfVxuICAgICAgICAgIHt7IGNvbmZpZy5idXR0b24ubGFiZWwgfX1cbiAgICAgICAgPC9hPlxuICAgICAgfVxuICAgIH1cbiAgICBAaWYgKGNvbmZpZy5yZWxvYWQpIHtcbiAgICAgIDxhXG4gICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cInJlbG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1yZWxvYWRcIj5cbiAgICAgICAgPG1hdC1pY29uICNyZWxvYWRFbD5cbiAgICAgICAgICByZWZyZXNoXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L2E+XG4gICAgfVxuICAgIEBpZiAoY29uZmlnLmF1dG9SZWxvYWQpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItcmVsb2FkXCI+XG4gICAgICAgIEBpZiAoY29uZmlnLmF1dG9SZWxvYWQpIHtcbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxuICAgICAgICAgICAgICBuYW1lPVwiYXV0b1JlbG9hZFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1yZWxvYWRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF1dG9SZWxvYWRcIj5cbiAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICBBdXRvIHJlZnJlc2hcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -3941,7 +3941,6 @@ class FilterComponent {
3941
3941
  this._initFilterWithConfig(config);
3942
3942
  }
3943
3943
  showSortBy = true;
3944
- showFilterInput = true;
3945
3944
  closed = new EventEmitter();
3946
3945
  opened = new EventEmitter();
3947
3946
  ready = new EventEmitter();
@@ -4061,6 +4060,7 @@ class FilterComponent {
4061
4060
  this._initAutoReload();
4062
4061
  this._listenInputChanges();
4063
4062
  this._listenInternalItemsChange();
4063
+ this._initKeywordVisibility();
4064
4064
  this._initOverlay();
4065
4065
  }
4066
4066
  ngOnDestroy() {
@@ -4430,6 +4430,9 @@ class FilterComponent {
4430
4430
  this.searchPlaceholder = keywordItem.label || 'Search';
4431
4431
  }
4432
4432
  }
4433
+ _initKeywordVisibility() {
4434
+ this._keywordVisible$.next(!this.keywordItem?.hide);
4435
+ }
4433
4436
  _listenInternalItemsChange() {
4434
4437
  this._filterItems
4435
4438
  .itemsChange$
@@ -4463,7 +4466,7 @@ class FilterComponent {
4463
4466
  this._hasFilterChips$.next(hasFilterChips);
4464
4467
  }
4465
4468
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, deps: [{ token: FS_FILTER_CONFIG, optional: true }, { token: FsFilterOverlayService }, { token: i0.NgZone }, { token: ExternalParamsController }, { token: QueryPersistanceController }, { token: FsFilterItemsStore }, { token: ActionsController }, { token: SavedFiltersController }], target: i0.ɵɵFactoryTarget.Component });
4466
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, selector: "fs-filter", inputs: { setConfig: ["config", "setConfig"], setFilter: ["filter", "setFilter"], showSortBy: "showSortBy", showFilterInput: "showFilterInput" }, outputs: { closed: "closed", opened: "opened", ready: "ready" }, host: { properties: { "class.filters-open": "this.showFilterMenu", "class.window-desktop": "this.windowDesktop", "class.fs-filter": "this.fsFilterClass", "class.has-keyword": "this.hasKeyword" } }, providers: [
4469
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: FilterComponent, selector: "fs-filter", inputs: { setConfig: ["config", "setConfig"], setFilter: ["filter", "setFilter"], showSortBy: "showSortBy" }, outputs: { closed: "closed", opened: "opened", ready: "ready" }, host: { properties: { "class.filters-open": "this.showFilterMenu", "class.window-desktop": "this.windowDesktop", "class.fs-filter": "this.fsFilterClass", "class.has-keyword": "this.hasKeyword" } }, providers: [
4467
4470
  FsFilterOverlayService,
4468
4471
  ExternalParamsController,
4469
4472
  QueryPersistanceController,
@@ -4472,7 +4475,7 @@ class FilterComponent {
4472
4475
  FsFilterItemsStore,
4473
4476
  SavedFiltersController,
4474
4477
  ActionsController,
4475
- ], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: "keywordMatInput", first: true, predicate: ["keywordMatInput"], descendants: true, read: MatInput }, { propertyName: "reloadEl", first: true, predicate: ["reloadEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"(keywordVisible$ | async) && !keywordItem?.hide \">\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n<ng-template #filterToolbar>\n <div class=\"filter-toolbar\">\n @if (filtersBtnVisible$ | async) {\n @if (hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n }\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 <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toolbar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;margin-right:3px}.filter-inner-container .filter-keyword mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-keyword mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-keyword mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center}.filter-toolbar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@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: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i3$1.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i13.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i5$1.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "component", type: i15.FsClearComponent, selector: "[fsClear]", inputs: ["ngModel", "visible", "fsClear"], outputs: ["ngModelChange", "cleared"] }, { kind: "component", type: FsFilterChipsComponent, selector: "fs-filter-chips", inputs: ["filters"] }, { kind: "component", type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4478
+ ], queries: [{ propertyName: "statusBar", first: true, predicate: FilterStatusBarDirective, descendants: true }], viewQueries: [{ propertyName: "keywordMatInput", first: true, predicate: ["keywordMatInput"], descendants: true, read: MatInput }, { propertyName: "reloadEl", first: true, predicate: ["reloadEl"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"(keywordVisible$ | async)\">\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n<ng-template #filterToolbar>\n <div class=\"filter-toolbar\">\n @if (filtersBtnVisible$ | async) {\n @if (hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n }\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 <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toolbar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;margin-right:3px}.filter-inner-container .filter-keyword mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-keyword mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-keyword mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center}.filter-toolbar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@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: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i3$1.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i13.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: i5$1.FsFormNoFsValidatorsDirective, selector: "[ngModel]:not([required]):not([fsFormRequired]):not([fsFormCompare]):not([fsFormDateRange]):not([fsFormEmail]):not([fsFormEmails]):not([fsFormFunction]):not([fsFormGreater]):not([fsFormGreaterEqual]):not([fsFormInteger]):not([fsFormLesser]):not([fsFormMax]):not([fsFormMaxLength]):not([fsFormMin]):not([fsFormMinLength]):not([fsFormNumeric]):not([fsFormPattern]):not([fsFormPhone]):not([fsFormUrl]):not([validate])" }, { kind: "component", type: i15.FsClearComponent, selector: "[fsClear]", inputs: ["ngModel", "visible", "fsClear"], outputs: ["ngModelChange", "cleared"] }, { kind: "component", type: FsFilterChipsComponent, selector: "fs-filter-chips", inputs: ["filters"] }, { kind: "component", type: FsFilterActionsComponent, selector: "fs-filter-actions", inputs: ["kebabActions", "actions"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
4476
4479
  }
4477
4480
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FilterComponent, decorators: [{
4478
4481
  type: Component,
@@ -4485,7 +4488,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4485
4488
  FsFilterItemsStore,
4486
4489
  SavedFiltersController,
4487
4490
  ActionsController,
4488
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"(keywordVisible$ | async) && !keywordItem?.hide \">\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n<ng-template #filterToolbar>\n <div class=\"filter-toolbar\">\n @if (filtersBtnVisible$ | async) {\n @if (hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n }\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 <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toolbar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;margin-right:3px}.filter-inner-container .filter-keyword mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-keyword mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-keyword mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center}.filter-toolbar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@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"] }]
4491
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"filter-container\">\n <div class=\"filter-inner-container\">\n <ng-container *ngIf=\"!hasKeyword; else filterKeyword\">\n <div>\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </div>\n </ng-container>\n <ng-container [ngTemplateOutlet]=\"filterToolbar\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"filterActions\"></ng-container>\n </div>\n <ng-container *ngIf=\"hasKeyword\">\n <ng-container *ngTemplateOutlet=\"filterStatusBarChips\"></ng-container>\n </ng-container>\n</div>\n<ng-template #filterStatusBarChips>\n <ng-container *ngIf=\"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 </ng-container>\n <ng-container *ngIf=\"config.chips && hasFilterChips$ | async\">\n <fs-filter-chips\n class=\"filter-chips\"\n [filters]=\"items\">\n </fs-filter-chips>\n </ng-container>\n</ng-template>\n<ng-template #filterKeyword>\n <div class=\"filter-keyword\">\n <ng-container *ngIf=\"(keywordVisible$ | async)\">\n <mat-form-field\n class=\"search-form-field form-field-padless\"\n [ngClass]=\"{\n 'has-keyword': !!keyword\n }\">\n <span\n matPrefix\n class=\"icon\">\n <mat-icon matPrefix>\n search\n </mat-icon>\n </span>\n <input\n #keywordMatInput\n matInput\n [(ngModel)]=\"keyword\"\n (ngModelChange)=\"keywordChange($event)\"\n name=\"filter-input\"\n [fsClear]=\"true\"\n [placeholder]=\"searchPlaceholder\">\n </mat-form-field>\n </ng-container>\n </div>\n</ng-template>\n<ng-template #filterActions>\n <div class=\"filter-actions\">\n <fs-filter-actions\n *ngIf=\"actionsVisible$ | async\"\n [actions]=\"actions$ | async\"\n [kebabActions]=\"menuActions$ | async\">\n </fs-filter-actions>\n </div>\n</ng-template>\n<ng-template #filterToolbar>\n <div class=\"filter-toolbar\">\n @if (filtersBtnVisible$ | async) {\n @if (hasVisibleItemOrSorting) {\n <a\n mat-icon-button\n class=\"button-filters\"\n (click)=\"changeVisibilityClick(!showFilterMenu, $event)\"\n [color]=\"config.button.color\">\n @if (config.button.icon) {\n <mat-icon svgIcon=\"filterOutline\"></mat-icon>\n }\n {{ config.button.label }}\n </a>\n }\n }\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 <div class=\"filter-reload\">\n @if (config.autoReload) {\n <mat-slide-toggle\n name=\"autoReload\"\n class=\"auto-reload\"\n [(ngModel)]=\"autoReload\">\n <span>\n Auto refresh\n </span>\n </mat-slide-toggle>\n }\n </div>\n }\n </div>\n</ng-template>", styles: [":host{margin-bottom:20px;display:block}:host.has-keyword .filter-status-container.has-status{margin-top:4px}:host:not(.has-keyword) .filter-status-container:not(.has-status)+fs-filter-chips{margin-top:0}:host:not(.has-keyword) .filter-inner-container{display:flex}:host:not(.has-keyword) .filter-toolbar{justify-content:flex-end}.filter-status-container{flex-grow:1;display:flex;justify-content:center;flex-direction:column;align-self:flex-end}.filter-status-container .filter-status{overflow:hidden;text-overflow:ellipsis;line-height:18px}.filter-container{width:100%}.filter-inner-container{flex-direction:row;box-sizing:border-box;display:flex;position:relative;align-items:center}.filter-inner-container .filter-keyword{flex-direction:row;box-sizing:border-box;display:flex;align-items:center;min-width:0;margin-right:3px}.filter-inner-container .filter-keyword mat-form-field.search-form-field{max-width:100%;width:250px;margin-top:0}.filter-inner-container .filter-keyword mat-form-field.search-form-field .icon{margin-left:10px;color:#626262}.filter-inner-container .filter-keyword mat-form-field.search-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.filter-actions{display:flex;align-items:center}.filter-toolbar{flex:1;white-space:nowrap;display:flex;align-items:center}.filter-toolbar .button-filters,.filter-toolbar .button-reload{display:flex;width:40px;padding:8px;height:40px;overflow:hidden}.filter-toolbar .button-filters ::ng-deep svg,.filter-toolbar .button-reload ::ng-deep svg{display:flex}.filter-toolbar .filter-reload{margin-left:10px;display:flex;align-items:center}.filter-toolbar .filter-reload .auto-reload{margin-right:5px}.filter-toolbar .filter-reload .auto-reload span{font-size:80%}.results{min-height:90px;position:relative;overflow-x:auto;overflow-y:hidden}fs-filter-chips{margin:4px 0;display:flex;flex-wrap:wrap;gap:5px}@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"] }]
4489
4492
  }], ctorParameters: () => [{ type: FsFilterConfig, decorators: [{
4490
4493
  type: Optional
4491
4494
  }, {
@@ -4499,8 +4502,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
4499
4502
  args: ['filter']
4500
4503
  }], showSortBy: [{
4501
4504
  type: Input
4502
- }], showFilterInput: [{
4503
- type: Input
4504
4505
  }], closed: [{
4505
4506
  type: Output
4506
4507
  }], opened: [{