@tilde-nlp/ngx-common 4.1.4 → 4.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/esm2022/lib/filter-bar/filter-bar.component.mjs +11 -13
  2. package/esm2022/lib/services/alert/alert.service.mjs +8 -7
  3. package/esm2022/lib/services/index.mjs +2 -1
  4. package/esm2022/lib/services/quota/index.mjs +4 -0
  5. package/esm2022/lib/services/quota/injection-tokens/index.mjs +2 -0
  6. package/esm2022/lib/services/quota/injection-tokens/quota-service-configuration.token.mjs +2 -0
  7. package/esm2022/lib/services/quota/models/index.mjs +4 -0
  8. package/esm2022/lib/services/quota/models/quota-service-configuration.model.mjs +2 -0
  9. package/esm2022/lib/services/quota/models/quota-type.enum.mjs +5 -0
  10. package/esm2022/lib/services/quota/models/quota-usage.model.mjs +2 -0
  11. package/esm2022/lib/services/quota/quota.service.mjs +25 -0
  12. package/esm2022/lib/terminology/components/terminology-panel/terminology-collection-list/terminology-collection-list.component.mjs +2 -2
  13. package/fesm2022/tilde-nlp-ngx-common.mjs +47 -20
  14. package/fesm2022/tilde-nlp-ngx-common.mjs.map +1 -1
  15. package/lib/filter-bar/filter-bar.component.d.ts +2 -2
  16. package/lib/services/alert/alert.service.d.ts +2 -2
  17. package/lib/services/index.d.ts +1 -0
  18. package/lib/services/quota/index.d.ts +3 -0
  19. package/lib/services/quota/injection-tokens/index.d.ts +1 -0
  20. package/lib/services/quota/injection-tokens/quota-service-configuration.token.d.ts +1 -0
  21. package/lib/services/quota/models/index.d.ts +3 -0
  22. package/lib/services/quota/models/quota-service-configuration.model.d.ts +3 -0
  23. package/lib/services/quota/models/quota-type.enum.d.ts +3 -0
  24. package/lib/services/quota/models/quota-usage.model.d.ts +13 -0
  25. package/lib/services/quota/quota.service.d.ts +15 -0
  26. package/package.json +1 -1
@@ -85,7 +85,7 @@ export class FilterBarComponent {
85
85
  ngOnDestroy() {
86
86
  this.formChangesSubscription.unsubscribe();
87
87
  }
88
- focusOptionSearchInput(filter, select, index) {
88
+ focusOptionSearchInput(filter, index) {
89
89
  if (!filter.search?.placeholder) {
90
90
  return;
91
91
  }
@@ -93,7 +93,7 @@ export class FilterBarComponent {
93
93
  this.optionSearchInputs.find((_item, i) => i === index)?.nativeElement.focus();
94
94
  }, 300);
95
95
  if (filter.maxPanelWidth === '' && filter.search.placeholder) {
96
- this.setMaxPanelWidth(filter, select);
96
+ this.setPanelWidth(filter);
97
97
  }
98
98
  }
99
99
  filterOptions(event, filter) {
@@ -104,15 +104,13 @@ export class FilterBarComponent {
104
104
  }
105
105
  });
106
106
  }
107
- setMaxPanelWidth(filter, select) {
108
- const openedMenuOptionWidth = document.querySelector('.filter-option')?.clientWidth;
107
+ setPanelWidth(filter) {
108
+ // We must save panel width, so filtering does not affect it`s size.
109
+ const selectPanel = document.querySelector('.cdk-overlay-pane');
110
+ const selectPanelWidth = selectPanel.clientWidth;
109
111
  const filterObj = this.settings.filters?.find((item) => item.fieldName === filter.fieldName);
110
- filterObj.maxPanelWidth = openedMenuOptionWidth;
111
- // select should be rerendered to get maxPanelWith applied
112
- select.toggle();
113
- setTimeout(() => {
114
- select.toggle();
115
- });
112
+ filterObj.maxPanelWidth = selectPanelWidth;
113
+ selectPanel.style.minWidth = `${selectPanelWidth}px`;
116
114
  }
117
115
  emitFilters() {
118
116
  this.filterBarChange.next(this.filters);
@@ -158,11 +156,11 @@ export class FilterBarComponent {
158
156
  });
159
157
  }
160
158
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterBarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
161
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterBarComponent, selector: "tld-filter-bar", inputs: { settings: "settings", filterRowVisible: "filterRowVisible" }, outputs: { filterBarChange: "filterBarChange" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "filterWrapper", first: true, predicate: ["filterWrapper"], descendants: true }, { propertyName: "optionSearchInputs", predicate: ["optionSearchInput"], descendants: true }], ngImport: i0, template: "<div class=\"filter-row\" *ngIf=\"filterRowVisible\">\r\n <div fxLayout=\"row\" class=\"filter-wrapper\" #filterWrapper [formGroup]=\"form\">\r\n <mat-form-field fxFlex *ngIf=\"showSearch && !filterOverflow || activeFilterIndex === searchIndex\" class=\"filter-bar-search-input\">\r\n <span matPrefix class=\"material-icons-outlined\">\r\n {{prefixIcon}}\r\n </span>\r\n <span matSuffix class=\"material-icons-outlined\" *ngIf=\"showSuffixIcon\" [matTooltip]=\"searchTooltip | translate\">\r\n {{suffixIcon}}\r\n </span>\r\n <input class=\"search-input\" matInput [placeholder]=\"searchTitle | translate\"\r\n [formControlName]=\"inputFormControlName\">\r\n </mat-form-field>\r\n <ng-container [formGroup]=\"filterFormGroup\">\r\n\r\n <mat-form-field [ngClass]=\"{'hidden': filterOverflow && activeFilterIndex !== i, 'engine-filter': !filterOverflow}\" *ngFor=\"let filter of settings?.filters; let i = index\">\r\n <mat-label>{{filter.title | translate}}</mat-label>\r\n <mat-select #select multiple [panelWidth]=\"filter?.maxPanelWidth ?? 'auto'\" [formControlName]=\"filter.fieldName\" (openedChange)=\"$event === true ? focusOptionSearchInput(filter, select, i) : null\">\r\n <ng-container *ngIf=\"filter?.search?.placeholder\">\r\n <input #optionSearchInput class=\"option-search-input\" type=\"text\" [placeholder]=\"filter.search?.placeholder ?? '' | translate\" (keyup)=\"filterOptions($event, filter)\" (keydown)=\"$event.stopPropagation()\">\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"filter.values.length\">\r\n <ng-container *ngIf=\"filter.translated; else sortedValuesByProperty\">\r\n <mat-option class=\"filter-option\" *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortAlphabetically:'key'\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n {{ filter.disableTitleCase ? value.key : (value.key | titlecase) }}\r\n </mat-option>\r\n </ng-container>\r\n \r\n <ng-template #sortedValuesByProperty>\r\n <mat-option class=\"filter-option\" *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortTranslationsByProperty:'key':'value'\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n <ng-container *ngIf=\"!filter.disableTitleCase; else defaultCase\">\r\n {{ value.key | translate : { default: value.value | titlecase } }}\r\n </ng-container>\r\n\r\n <ng-template #defaultCase>\r\n {{ value.key | translate : { default: value.value } }} \r\n </ng-template>\r\n </mat-option>\r\n </ng-template>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n <button mat-icon-button (click)=\"switchLeft()\" *ngIf=\"filterOverflow\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_back_ios\r\n </span>\r\n </button>\r\n <button mat-icon-button *ngIf=\"filterOverflow\" (click)=\"switchRight()\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_forward_ios\r\n </span>\r\n </button>\r\n</div>\r\n<mat-chip-listbox>\r\n <div *ngFor=\"let filter of settings?.filters\">\r\n <mat-chip-option *ngFor=\"let filterValue of filterFormGroupValue[filter.fieldName]; let ix=index\"\r\n (removed)=\"removeFilter(filter.fieldName, ix)\" class=\"text-s\">\r\n <button matChipRemove>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <span class=\"chip-filter-title\">{{filter.title | translate}}:</span>\r\n <span class=\"chip-value semi-bold\"> {{(filter.translated ? filterValue.key : filterValue.key | translate : {default: filterValue.value}) | titlecase\r\n }}</span>\r\n </mat-chip-option>\r\n </div>\r\n</mat-chip-listbox>\r\n", styles: [":host{display:inline-block}.filter-row{display:flex;background-color:var(--base-95);min-height:40px;min-width:100%;border-radius:.5rem;padding:1.25rem 1.25rem 0;max-width:100%;align-items:baseline;margin-bottom:.5rem}.option-search-input{padding:1rem;width:100%}.search-input{background-color:unset;border:none}.engine-filter{margin-left:1rem}.filter-bar-search-input{width:100%}.filter-bar-search-input::ng-deep .material-icons-outlined{vertical-align:bottom}.material-icons-outlined{color:var(--base-40)}.filter-wrapper{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;flex:1}.mat-mdc-chip.mat-mdc-standard-chip{background-color:var(--base-95);padding-left:.5em;padding-right:.75em;border:.5px solid var(--base-70)}.mat-mdc-chip.mat-mdc-standard-chip span{display:inline-block}.mat-mdc-chip.mat-mdc-standard-chip .chip-filter-title+.chip-value{margin-left:.25rem}.chip-filter-title{margin-left:.5em}.hidden{display:none}:host ::ng-deep .mat-mdc-form-field-focus-overlay,:host ::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}:host ::ng-deep .mat-mdc-chip-graphic{display:none}:host ::ng-deep .mat-mdc-chip-remove{color:var(--base-40)!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i6.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i12.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i12.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i12.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i14.SortTranslationsByPropertyPipe, name: "sortTranslationsByProperty" }, { kind: "pipe", type: i15.SortAlphabeticallyPipe, name: "sortAlphabetically" }] }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: FilterBarComponent, selector: "tld-filter-bar", inputs: { settings: "settings", filterRowVisible: "filterRowVisible" }, outputs: { filterBarChange: "filterBarChange" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "filterWrapper", first: true, predicate: ["filterWrapper"], descendants: true }, { propertyName: "optionSearchInputs", predicate: ["optionSearchInput"], descendants: true }], ngImport: i0, template: "<div class=\"filter-row\" *ngIf=\"filterRowVisible\">\r\n <div fxLayout=\"row\" class=\"filter-wrapper\" #filterWrapper [formGroup]=\"form\">\r\n <mat-form-field fxFlex *ngIf=\"showSearch && !filterOverflow || activeFilterIndex === searchIndex\" class=\"filter-bar-search-input\">\r\n <span matPrefix class=\"material-icons-outlined\">\r\n {{prefixIcon}}\r\n </span>\r\n <span matSuffix class=\"material-icons-outlined\" *ngIf=\"showSuffixIcon\" [matTooltip]=\"searchTooltip | translate\">\r\n {{suffixIcon}}\r\n </span>\r\n <input class=\"search-input\" matInput [placeholder]=\"searchTitle | translate\"\r\n [formControlName]=\"inputFormControlName\">\r\n </mat-form-field>\r\n <ng-container [formGroup]=\"filterFormGroup\">\r\n\r\n <mat-form-field [ngClass]=\"{'hidden': filterOverflow && activeFilterIndex !== i, 'engine-filter': !filterOverflow}\" *ngFor=\"let filter of settings?.filters; let i = index\">\r\n <mat-label>{{filter.title | translate}}</mat-label>\r\n <mat-select multiple [panelWidth]=\"filter?.maxPanelWidth ?? 'auto'\" [formControlName]=\"filter.fieldName\" (openedChange)=\"$event === true ? focusOptionSearchInput(filter, i) : null\">\r\n <ng-container *ngIf=\"filter?.search?.placeholder\">\r\n <input #optionSearchInput class=\"option-search-input\" type=\"text\" [placeholder]=\"filter.search?.placeholder ?? '' | translate\" (keyup)=\"filterOptions($event, filter)\" (keydown)=\"$event.stopPropagation()\">\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"filter.values.length\">\r\n <ng-container *ngIf=\"filter.translated; else sortedValuesByProperty\">\r\n <mat-option class=\"filter-option\" *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortAlphabetically:'key'\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n {{ filter.disableTitleCase ? value.key : (value.key | titlecase) }}\r\n </mat-option>\r\n </ng-container>\r\n \r\n <ng-template #sortedValuesByProperty>\r\n <mat-option class=\"filter-option\" *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortTranslationsByProperty:'key':'value'\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n <ng-container *ngIf=\"!filter.disableTitleCase; else defaultCase\">\r\n {{ value.key | translate : { default: value.value | titlecase } }}\r\n </ng-container>\r\n\r\n <ng-template #defaultCase>\r\n {{ value.key | translate : { default: value.value } }} \r\n </ng-template>\r\n </mat-option>\r\n </ng-template>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n <button mat-icon-button (click)=\"switchLeft()\" *ngIf=\"filterOverflow\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_back_ios\r\n </span>\r\n </button>\r\n <button mat-icon-button *ngIf=\"filterOverflow\" (click)=\"switchRight()\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_forward_ios\r\n </span>\r\n </button>\r\n</div>\r\n<mat-chip-listbox>\r\n <div *ngFor=\"let filter of settings?.filters\">\r\n <mat-chip-option *ngFor=\"let filterValue of filterFormGroupValue[filter.fieldName]; let ix=index\"\r\n (removed)=\"removeFilter(filter.fieldName, ix)\" class=\"text-s\">\r\n <button matChipRemove>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <span class=\"chip-filter-title\">{{filter.title | translate}}:</span>\r\n <span class=\"chip-value semi-bold\"> {{(filter.translated ? filterValue.key : filterValue.key | translate : {default: filterValue.value}) | titlecase\r\n }}</span>\r\n </mat-chip-option>\r\n </div>\r\n</mat-chip-listbox>\r\n", styles: [":host{display:inline-block}.filter-row{display:flex;background-color:var(--base-95);min-height:40px;min-width:100%;border-radius:.5rem;padding:1.25rem 1.25rem 0;max-width:100%;align-items:baseline;margin-bottom:.5rem}.option-search-input{padding:1rem;width:100%}.search-input{background-color:unset;border:none}.engine-filter{margin-left:1rem}.filter-bar-search-input{width:100%}.filter-bar-search-input::ng-deep .material-icons-outlined{vertical-align:bottom}.material-icons-outlined{color:var(--base-40)}.filter-wrapper{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;flex:1}.mat-mdc-chip.mat-mdc-standard-chip{background-color:var(--base-95);padding-left:.5em;padding-right:.75em;border:.5px solid var(--base-70)}.mat-mdc-chip.mat-mdc-standard-chip span{display:inline-block}.mat-mdc-chip.mat-mdc-standard-chip .chip-filter-title+.chip-value{margin-left:.25rem}.chip-filter-title{margin-left:.5em}.hidden{display:none}:host ::ng-deep .mat-mdc-form-field-focus-overlay,:host ::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}:host ::ng-deep .mat-mdc-chip-graphic{display:none}:host ::ng-deep .mat-mdc-chip-remove{color:var(--base-40)!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i6.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i12.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i12.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i12.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "pipe", type: i14.SortTranslationsByPropertyPipe, name: "sortTranslationsByProperty" }, { kind: "pipe", type: i15.SortAlphabeticallyPipe, name: "sortAlphabetically" }] }); }
162
160
  }
163
161
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: FilterBarComponent, decorators: [{
164
162
  type: Component,
165
- args: [{ selector: 'tld-filter-bar', template: "<div class=\"filter-row\" *ngIf=\"filterRowVisible\">\r\n <div fxLayout=\"row\" class=\"filter-wrapper\" #filterWrapper [formGroup]=\"form\">\r\n <mat-form-field fxFlex *ngIf=\"showSearch && !filterOverflow || activeFilterIndex === searchIndex\" class=\"filter-bar-search-input\">\r\n <span matPrefix class=\"material-icons-outlined\">\r\n {{prefixIcon}}\r\n </span>\r\n <span matSuffix class=\"material-icons-outlined\" *ngIf=\"showSuffixIcon\" [matTooltip]=\"searchTooltip | translate\">\r\n {{suffixIcon}}\r\n </span>\r\n <input class=\"search-input\" matInput [placeholder]=\"searchTitle | translate\"\r\n [formControlName]=\"inputFormControlName\">\r\n </mat-form-field>\r\n <ng-container [formGroup]=\"filterFormGroup\">\r\n\r\n <mat-form-field [ngClass]=\"{'hidden': filterOverflow && activeFilterIndex !== i, 'engine-filter': !filterOverflow}\" *ngFor=\"let filter of settings?.filters; let i = index\">\r\n <mat-label>{{filter.title | translate}}</mat-label>\r\n <mat-select #select multiple [panelWidth]=\"filter?.maxPanelWidth ?? 'auto'\" [formControlName]=\"filter.fieldName\" (openedChange)=\"$event === true ? focusOptionSearchInput(filter, select, i) : null\">\r\n <ng-container *ngIf=\"filter?.search?.placeholder\">\r\n <input #optionSearchInput class=\"option-search-input\" type=\"text\" [placeholder]=\"filter.search?.placeholder ?? '' | translate\" (keyup)=\"filterOptions($event, filter)\" (keydown)=\"$event.stopPropagation()\">\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"filter.values.length\">\r\n <ng-container *ngIf=\"filter.translated; else sortedValuesByProperty\">\r\n <mat-option class=\"filter-option\" *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortAlphabetically:'key'\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n {{ filter.disableTitleCase ? value.key : (value.key | titlecase) }}\r\n </mat-option>\r\n </ng-container>\r\n \r\n <ng-template #sortedValuesByProperty>\r\n <mat-option class=\"filter-option\" *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortTranslationsByProperty:'key':'value'\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n <ng-container *ngIf=\"!filter.disableTitleCase; else defaultCase\">\r\n {{ value.key | translate : { default: value.value | titlecase } }}\r\n </ng-container>\r\n\r\n <ng-template #defaultCase>\r\n {{ value.key | translate : { default: value.value } }} \r\n </ng-template>\r\n </mat-option>\r\n </ng-template>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n <button mat-icon-button (click)=\"switchLeft()\" *ngIf=\"filterOverflow\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_back_ios\r\n </span>\r\n </button>\r\n <button mat-icon-button *ngIf=\"filterOverflow\" (click)=\"switchRight()\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_forward_ios\r\n </span>\r\n </button>\r\n</div>\r\n<mat-chip-listbox>\r\n <div *ngFor=\"let filter of settings?.filters\">\r\n <mat-chip-option *ngFor=\"let filterValue of filterFormGroupValue[filter.fieldName]; let ix=index\"\r\n (removed)=\"removeFilter(filter.fieldName, ix)\" class=\"text-s\">\r\n <button matChipRemove>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <span class=\"chip-filter-title\">{{filter.title | translate}}:</span>\r\n <span class=\"chip-value semi-bold\"> {{(filter.translated ? filterValue.key : filterValue.key | translate : {default: filterValue.value}) | titlecase\r\n }}</span>\r\n </mat-chip-option>\r\n </div>\r\n</mat-chip-listbox>\r\n", styles: [":host{display:inline-block}.filter-row{display:flex;background-color:var(--base-95);min-height:40px;min-width:100%;border-radius:.5rem;padding:1.25rem 1.25rem 0;max-width:100%;align-items:baseline;margin-bottom:.5rem}.option-search-input{padding:1rem;width:100%}.search-input{background-color:unset;border:none}.engine-filter{margin-left:1rem}.filter-bar-search-input{width:100%}.filter-bar-search-input::ng-deep .material-icons-outlined{vertical-align:bottom}.material-icons-outlined{color:var(--base-40)}.filter-wrapper{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;flex:1}.mat-mdc-chip.mat-mdc-standard-chip{background-color:var(--base-95);padding-left:.5em;padding-right:.75em;border:.5px solid var(--base-70)}.mat-mdc-chip.mat-mdc-standard-chip span{display:inline-block}.mat-mdc-chip.mat-mdc-standard-chip .chip-filter-title+.chip-value{margin-left:.25rem}.chip-filter-title{margin-left:.5em}.hidden{display:none}:host ::ng-deep .mat-mdc-form-field-focus-overlay,:host ::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}:host ::ng-deep .mat-mdc-chip-graphic{display:none}:host ::ng-deep .mat-mdc-chip-remove{color:var(--base-40)!important}\n"] }]
163
+ args: [{ selector: 'tld-filter-bar', template: "<div class=\"filter-row\" *ngIf=\"filterRowVisible\">\r\n <div fxLayout=\"row\" class=\"filter-wrapper\" #filterWrapper [formGroup]=\"form\">\r\n <mat-form-field fxFlex *ngIf=\"showSearch && !filterOverflow || activeFilterIndex === searchIndex\" class=\"filter-bar-search-input\">\r\n <span matPrefix class=\"material-icons-outlined\">\r\n {{prefixIcon}}\r\n </span>\r\n <span matSuffix class=\"material-icons-outlined\" *ngIf=\"showSuffixIcon\" [matTooltip]=\"searchTooltip | translate\">\r\n {{suffixIcon}}\r\n </span>\r\n <input class=\"search-input\" matInput [placeholder]=\"searchTitle | translate\"\r\n [formControlName]=\"inputFormControlName\">\r\n </mat-form-field>\r\n <ng-container [formGroup]=\"filterFormGroup\">\r\n\r\n <mat-form-field [ngClass]=\"{'hidden': filterOverflow && activeFilterIndex !== i, 'engine-filter': !filterOverflow}\" *ngFor=\"let filter of settings?.filters; let i = index\">\r\n <mat-label>{{filter.title | translate}}</mat-label>\r\n <mat-select multiple [panelWidth]=\"filter?.maxPanelWidth ?? 'auto'\" [formControlName]=\"filter.fieldName\" (openedChange)=\"$event === true ? focusOptionSearchInput(filter, i) : null\">\r\n <ng-container *ngIf=\"filter?.search?.placeholder\">\r\n <input #optionSearchInput class=\"option-search-input\" type=\"text\" [placeholder]=\"filter.search?.placeholder ?? '' | translate\" (keyup)=\"filterOptions($event, filter)\" (keydown)=\"$event.stopPropagation()\">\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"filter.values.length\">\r\n <ng-container *ngIf=\"filter.translated; else sortedValuesByProperty\">\r\n <mat-option class=\"filter-option\" *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortAlphabetically:'key'\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n {{ filter.disableTitleCase ? value.key : (value.key | titlecase) }}\r\n </mat-option>\r\n </ng-container>\r\n \r\n <ng-template #sortedValuesByProperty>\r\n <mat-option class=\"filter-option\" *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortTranslationsByProperty:'key':'value'\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n <ng-container *ngIf=\"!filter.disableTitleCase; else defaultCase\">\r\n {{ value.key | translate : { default: value.value | titlecase } }}\r\n </ng-container>\r\n\r\n <ng-template #defaultCase>\r\n {{ value.key | translate : { default: value.value } }} \r\n </ng-template>\r\n </mat-option>\r\n </ng-template>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n <button mat-icon-button (click)=\"switchLeft()\" *ngIf=\"filterOverflow\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_back_ios\r\n </span>\r\n </button>\r\n <button mat-icon-button *ngIf=\"filterOverflow\" (click)=\"switchRight()\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_forward_ios\r\n </span>\r\n </button>\r\n</div>\r\n<mat-chip-listbox>\r\n <div *ngFor=\"let filter of settings?.filters\">\r\n <mat-chip-option *ngFor=\"let filterValue of filterFormGroupValue[filter.fieldName]; let ix=index\"\r\n (removed)=\"removeFilter(filter.fieldName, ix)\" class=\"text-s\">\r\n <button matChipRemove>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <span class=\"chip-filter-title\">{{filter.title | translate}}:</span>\r\n <span class=\"chip-value semi-bold\"> {{(filter.translated ? filterValue.key : filterValue.key | translate : {default: filterValue.value}) | titlecase\r\n }}</span>\r\n </mat-chip-option>\r\n </div>\r\n</mat-chip-listbox>\r\n", styles: [":host{display:inline-block}.filter-row{display:flex;background-color:var(--base-95);min-height:40px;min-width:100%;border-radius:.5rem;padding:1.25rem 1.25rem 0;max-width:100%;align-items:baseline;margin-bottom:.5rem}.option-search-input{padding:1rem;width:100%}.search-input{background-color:unset;border:none}.engine-filter{margin-left:1rem}.filter-bar-search-input{width:100%}.filter-bar-search-input::ng-deep .material-icons-outlined{vertical-align:bottom}.material-icons-outlined{color:var(--base-40)}.filter-wrapper{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;flex:1}.mat-mdc-chip.mat-mdc-standard-chip{background-color:var(--base-95);padding-left:.5em;padding-right:.75em;border:.5px solid var(--base-70)}.mat-mdc-chip.mat-mdc-standard-chip span{display:inline-block}.mat-mdc-chip.mat-mdc-standard-chip .chip-filter-title+.chip-value{margin-left:.25rem}.chip-filter-title{margin-left:.5em}.hidden{display:none}:host ::ng-deep .mat-mdc-form-field-focus-overlay,:host ::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}:host ::ng-deep .mat-mdc-chip-graphic{display:none}:host ::ng-deep .mat-mdc-chip-remove{color:var(--base-40)!important}\n"] }]
166
164
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.TranslateService }]; }, propDecorators: { filterWrapper: [{
167
165
  type: ViewChild,
168
166
  args: ["filterWrapper"]
@@ -179,4 +177,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
179
177
  }], filterBarChange: [{
180
178
  type: Output
181
179
  }] } });
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvZmlsdGVyLWJhci9maWx0ZXItYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9maWx0ZXItYmFyL2ZpbHRlci1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9LLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY3hELE1BQU0sT0FBTyxrQkFBa0I7SUFJN0IsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBR0QsSUFBYSxnQkFBZ0IsQ0FBQyxLQUFjO1FBQzFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQWdDRCxtQ0FBbUM7SUFDbkMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBQ0QsMkVBQTJFO0lBQzNFLElBQUksZ0JBQWdCLEtBQUssT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQ3pELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1osT0FBTyxDQUFDLElBQUks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O2dCQUVqQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUU7Z0JBS3hCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ08sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQU1JLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJGaWx0ZXIsIEZpbHRlckJhckZpbHRlckl0ZW0gfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IEZpbHRlckJhckNoYW5nZUV2ZW50IH0gZnJvbSAnLi9tb2RlbHMvZmlsdGVyLWJhci1jaGFuZ2UtZXZlbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJTZXR0aW5ncyB9IGZyb20gJy4vbW9kZWxzL2ZpbHRlci1iYXItc2V0dGluZ3MubW9kZWwnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAndGxkLWZpbHRlci1iYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItYmFyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlckJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFwiZmlsdGVyV3JhcHBlclwiKSBmaWx0ZXJXcmFwcGVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkcmVuKCdvcHRpb25TZWFyY2hJbnB1dCcpIG9wdGlvblNlYXJjaElucHV0cyE6IEVsZW1lbnRSZWY8TWF0U2VsZWN0PltdO1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbXSlcclxuICBvblJlc2l6ZSgpIHtcclxuICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0dGluZ3MhOiBGaWx0ZXJCYXJTZXR0aW5ncztcclxuICBASW5wdXQoKSBzZXQgZmlsdGVyUm93VmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZmlsdGVyUm93VmlzaWJsZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBmaWx0ZXJCYXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWx0ZXJCYXJDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckJhckNoYW5nZUV2ZW50PigpO1xyXG5cclxuICBwcml2YXRlIF9pbnB1dFRleHQgPSBcIlwiO1xyXG4gIHByaXZhdGUgX2ZpbHRlclJvd1Zpc2libGUhOiBib29sZWFuO1xyXG4gIHByaXZhdGUgZm9ybUNoYW5nZXNTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKiBUbyBoaWRlIGZpbHRlcnMsIGJ1dCBsZWF2ZSBjaGlwcyB2aXNpYmxlICovXHJcbiAgcmVhZG9ubHkgaW5wdXRGb3JtQ29udHJvbE5hbWUgPSBcImlucHV0XCI7XHJcbiAgcmVhZG9ubHkgZmlsdGVyRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgW3RoaXMuaW5wdXRGb3JtQ29udHJvbE5hbWVdOiBuZXcgRm9ybUNvbnRyb2woXCJcIiksXHJcbiAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlckZvcm1Hcm91cFxyXG4gIH0pO1xyXG5cclxuICBzZWFyY2hUaXRsZSE6IHN0cmluZztcclxuICBzZWFyY2hUb29sdGlwITogc3RyaW5nO1xyXG4gIHN1ZmZpeEljb24hOiBzdHJpbmc7XHJcbiAgcHJlZml4SWNvbiE6IHN0cmluZztcclxuICBzaG93U3VmZml4SWNvbiE6IGJvb2xlYW47XHJcbiAgZmlsdGVyczogRmlsdGVyQmFyQ2hhbmdlRXZlbnQgPSB7XHJcbiAgICBmaWx0ZXJzOiB7fSxcclxuICAgIGlucHV0OiBcIlwiXHJcbiAgfTtcclxuXHJcbiAgZmlsdGVyT3ZlcmZsb3cgPSBmYWxzZTtcclxuICBhY3RpdmVGaWx0ZXJJbmRleCA9IDA7XHJcblxyXG4gIC8vIHdoZW4gdG8gc2hvdyBmaWx0ZXIgYnkgbmFtZSBvciBpZCBvbiBtb2JpbGVcclxuICBzZWFyY2hJbmRleCA9IC0xO1xyXG5cclxuICAvLyBnZXR0ZXIgZm9yIGNsZWFuZXIgdGVtcGxhdGUgaHRtbFxyXG4gIGdldCBmaWx0ZXJGb3JtR3JvdXBWYWx1ZSgpOiB7IFtrZXk6IHN0cmluZ106IEZpbHRlckJhckZpbHRlckl0ZW1bXSB9IHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm1Hcm91cC52YWx1ZTtcclxuICB9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9hZGphY2VudC1vdmVybG9hZC1zaWduYXR1cmVzXHJcbiAgZ2V0IGZpbHRlclJvd1Zpc2libGUoKSB7IHJldHVybiB0aGlzLl9maWx0ZXJSb3dWaXNpYmxlOyB9XHJcbiAgZ2V0IGlucHV0VGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnB1dFRleHQ7XHJcbiAgfVxyXG4gIGdldCBzaG93U2VhcmNoKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnNldHRpbmdzPy5oaWRlU2VhcmNoO1xyXG4gIH1cclxuICBnZXQgb3V0cHV0RmlsdGVyS2V5QW5kVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncz8ub3V0cHV0RmlsdGVyS2V5QW5kVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2FkamFjZW50LW92ZXJsb2FkLXNpZ25hdHVyZXNcclxuICBzZXQgaW5wdXRUZXh0KHZhbHVlKSB7XHJcbiAgICB0aGlzLl9pbnB1dFRleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMuZmlsdGVycy5pbnB1dCA9IHRoaXMuX2lucHV0VGV4dDtcclxuICAgIHRoaXMuZW1pdEZpbHRlcnMoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXR0aW5ncy5maWx0ZXJzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5hZGRDb250cm9sKGZpZWxkLmZpZWxkTmFtZSwgbmV3IEZvcm1Db250cm9sKFtdKSk7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlVG9Gb3JtVmFsdWVDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRvb2x0aXAgPSB0aGlzLnNldHRpbmdzPy5zZWFyY2hUb29sdGlwID8/ICdGSUxURVJfQkFSLlNFQVJDSF9UT09MVElQJztcclxuICAgIHRoaXMuc2VhcmNoVGl0bGUgPSB0aGlzLnNldHRpbmdzPy5zZWFyY2hUaXRsZSA/PyAnRklMVEVSX0JBUi5TRUFSQ0gnO1xyXG4gICAgdGhpcy5wcmVmaXhJY29uID0gdGhpcy5zZXR0aW5ncz8ucHJlZml4SWNvbiA/PyBcImZpbHRlcl9hbHRcIjtcclxuICAgIHRoaXMuc3VmZml4SWNvbiA9IHRoaXMuc2V0dGluZ3M/LnN1ZmZpeEljb24gPz8gXCJxdWVzdGlvbl9tYXJrXCI7XHJcbiAgICB0aGlzLnNob3dTdWZmaXhJY29uID0gdGhpcy5zZXR0aW5ncz8uc2hvd1N1ZmZpeEljb24gPz8gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpO1xyXG4gICAgdGhpcy5jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGZvY3VzT3B0aW9uU2VhcmNoSW5wdXQoZmlsdGVyOiBGaWx0ZXJCYXJGaWx0ZXIsIHNlbGVjdDogTWF0U2VsZWN0LCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWZpbHRlci5zZWFyY2g/LnBsYWNlaG9sZGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5vcHRpb25TZWFyY2hJbnB1dHMuZmluZCgoX2l0ZW0sIGkpID0+IGkgPT09IGluZGV4KT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfSwgMzAwKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyLm1heFBhbmVsV2lkdGggPT09ICcnICYmIGZpbHRlci5zZWFyY2gucGxhY2Vob2xkZXIpIHtcclxuICAgICAgdGhpcy5zZXRNYXhQYW5lbFdpZHRoKGZpbHRlciwgc2VsZWN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbHRlck9wdGlvbnMoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGZpbHRlcjogRmlsdGVyQmFyRmlsdGVyKSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcclxuICAgIHRoaXMuc2V0dGluZ3MuZmlsdGVycz8ubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChpdGVtLmZpZWxkTmFtZSA9PT0gZmlsdGVyLmZpZWxkTmFtZSAmJiBpdGVtLnNlYXJjaCkge1xyXG4gICAgICAgIGl0ZW0uc2VhcmNoLmZpbHRlcmVkVmFsdWVzID0gZmlsdGVyLnZhbHVlcy5maWx0ZXIoXHJcbiAgICAgICAgICAodmFsdWUpID0+IChpdGVtLnRyYW5zbGF0ZWQgPyB2YWx1ZS5rZXkgOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHZhbHVlLmtleSkpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGFyZ2V0LnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0TWF4UGFuZWxXaWR0aChmaWx0ZXI6IEZpbHRlckJhckZpbHRlciwgc2VsZWN0OiBNYXRTZWxlY3QpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9wZW5lZE1lbnVPcHRpb25XaWR0aCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5maWx0ZXItb3B0aW9uJyk/LmNsaWVudFdpZHRoIGFzIG51bWJlcjtcclxuICAgIGNvbnN0IGZpbHRlck9iaiA9IHRoaXMuc2V0dGluZ3MuZmlsdGVycz8uZmluZCgoaXRlbSkgPT4gaXRlbS5maWVsZE5hbWUgPT09IGZpbHRlci5maWVsZE5hbWUpIGFzIEZpbHRlckJhckZpbHRlcjtcclxuICAgIGZpbHRlck9iai5tYXhQYW5lbFdpZHRoID0gb3BlbmVkTWVudU9wdGlvbldpZHRoO1xyXG5cclxuICAgIC8vIHNlbGVjdCBzaG91bGQgYmUgcmVyZW5kZXJlZCB0byBnZXQgbWF4UGFuZWxXaXRoIGFwcGxpZWRcclxuICAgIHNlbGVjdC50b2dnbGUoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBzZWxlY3QudG9nZ2xlKCk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZW1pdEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlckJhckNoYW5nZS5uZXh0KHRoaXMuZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hSaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnNldHRpbmdzPy5maWx0ZXJzICYmIHRoaXMuc2V0dGluZ3M/LmZpbHRlcnMubGVuZ3RoID09PSB0aGlzLmFjdGl2ZUZpbHRlckluZGV4ICsgMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckluZGV4ICs9IDE7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hMZWZ0KCkge1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlRmlsdGVySW5kZXggPT09IHRoaXMuc2VhcmNoSW5kZXgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJJbmRleCAtPSAxO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRmlsdGVyKGtleTogc3RyaW5nLCBpeDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KGtleSk7XHJcblxyXG4gICAgaWYgKCFjb250cm9sKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdBcnJheSA9IGNvbnRyb2wudmFsdWUgYXMgW107XHJcbiAgICBuZXdBcnJheS5zcGxpY2UoaXgsIDEpO1xyXG4gICAgY29udHJvbC5zZXRWYWx1ZShuZXdBcnJheSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrT3ZlcmZsb3coKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJXcmFwcGVyKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyT3ZlcmZsb3cgPSB0aGlzLmZpbHRlcldyYXBwZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA8IHRoaXMuZmlsdGVyV3JhcHBlci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0Zvcm1WYWx1ZUNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLmZvcm1DaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmZpbHRlcnMgPSB7XHJcbiAgICAgICAgaW5wdXQ6IHRoaXMuZm9ybS52YWx1ZS5pbnB1dCA/PyBcIlwiLFxyXG4gICAgICAgIGZpbHRlcnM6IHt9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGZpbHRlcktleSBpbiB0aGlzLmZvcm0udmFsdWUuZmlsdGVycykge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgY29uc3QgZmlsdGVyOiBGaWx0ZXJCYXJGaWx0ZXJJdGVtW10gPSAodGhpcy5mb3JtLnZhbHVlLmZpbHRlcnMgYXMgYW55KVtmaWx0ZXJLZXldIGFzIEZpbHRlckJhckZpbHRlckl0ZW1bXTtcclxuICAgICAgICB0aGlzLmZpbHRlcnMuZmlsdGVyc1tmaWx0ZXJLZXldID0gZmlsdGVyLm1hcCgoaXRlbSkgPT4gdGhpcy5vdXRwdXRGaWx0ZXJLZXlBbmRWYWx1ZSA/IGl0ZW0gOiBpdGVtLnZhbHVlKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZW1pdEZpbHRlcnMoKTtcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmaWx0ZXItcm93XCIgKm5nSWY9XCJmaWx0ZXJSb3dWaXNpYmxlXCI+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGNsYXNzPVwiZmlsdGVyLXdyYXBwZXJcIiAjZmlsdGVyV3JhcHBlciBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggKm5nSWY9XCJzaG93U2VhcmNoICYmICFmaWx0ZXJPdmVyZmxvdyB8fCBhY3RpdmVGaWx0ZXJJbmRleCA9PT0gc2VhcmNoSW5kZXhcIiBjbGFzcz1cImZpbHRlci1iYXItc2VhcmNoLWlucHV0XCI+XHJcbiAgICAgIDxzcGFuIG1hdFByZWZpeCBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XHJcbiAgICAgICAge3twcmVmaXhJY29ufX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8c3BhbiBtYXRTdWZmaXggY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiICpuZ0lmPVwic2hvd1N1ZmZpeEljb25cIiBbbWF0VG9vbHRpcF09XCJzZWFyY2hUb29sdGlwIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAge3tzdWZmaXhJY29ufX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwic2VhcmNoVGl0bGUgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiaW5wdXRGb3JtQ29udHJvbE5hbWVcIj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybUdyb3VwXCI+XHJcblxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgW25nQ2xhc3NdPVwieydoaWRkZW4nOiBmaWx0ZXJPdmVyZmxvdyAmJiBhY3RpdmVGaWx0ZXJJbmRleCAhPT0gaSwgJ2VuZ2luZS1maWx0ZXInOiAhZmlsdGVyT3ZlcmZsb3d9XCIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBzZXR0aW5ncz8uZmlsdGVyczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+e3tmaWx0ZXIudGl0bGUgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0ICNzZWxlY3QgbXVsdGlwbGUgW3BhbmVsV2lkdGhdPVwiZmlsdGVyPy5tYXhQYW5lbFdpZHRoID8/ICdhdXRvJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmlsdGVyLmZpZWxkTmFtZVwiIChvcGVuZWRDaGFuZ2UpPVwiJGV2ZW50ID09PSB0cnVlID8gZm9jdXNPcHRpb25TZWFyY2hJbnB1dChmaWx0ZXIsIHNlbGVjdCwgaSkgOiBudWxsXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyPy5zZWFyY2g/LnBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCAjb3B0aW9uU2VhcmNoSW5wdXQgY2xhc3M9XCJvcHRpb24tc2VhcmNoLWlucHV0XCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnNlYXJjaD8ucGxhY2Vob2xkZXIgPz8gJycgfCB0cmFuc2xhdGVcIiAoa2V5dXApPVwiZmlsdGVyT3B0aW9ucygkZXZlbnQsIGZpbHRlcilcIiAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICBcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudmFsdWVzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnRyYW5zbGF0ZWQ7IGVsc2Ugc29ydGVkVmFsdWVzQnlQcm9wZXJ0eVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiZmlsdGVyLW9wdGlvblwiICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiAoZmlsdGVyLnNlYXJjaD8uZmlsdGVyZWRWYWx1ZXMgPz8gZmlsdGVyLnZhbHVlcykgfCBzb3J0QWxwaGFiZXRpY2FsbHk6J2tleSdcIiBbZGlzYWJsZWRdPVwiZmlsdGVyLnNpbmdsZVNlbGVjdGlvbj8uc2VsZWN0ZWQgJiYgZmlsdGVyLnNpbmdsZVNlbGVjdGlvbj8udmFsdWUgIT09IHZhbHVlLnZhbHVlXCIgW3ZhbHVlXT1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBmaWx0ZXIuZGlzYWJsZVRpdGxlQ2FzZSA/IHZhbHVlLmtleSA6ICh2YWx1ZS5rZXkgfCB0aXRsZWNhc2UpIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc29ydGVkVmFsdWVzQnlQcm9wZXJ0eT5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImZpbHRlci1vcHRpb25cIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgKGZpbHRlci5zZWFyY2g/LmZpbHRlcmVkVmFsdWVzID8/IGZpbHRlci52YWx1ZXMpIHwgc29ydFRyYW5zbGF0aW9uc0J5UHJvcGVydHk6J2tleSc6J3ZhbHVlJ1wiIFtkaXNhYmxlZF09XCJmaWx0ZXIuc2luZ2xlU2VsZWN0aW9uPy5zZWxlY3RlZCAmJiBmaWx0ZXIuc2luZ2xlU2VsZWN0aW9uPy52YWx1ZSAhPT0gdmFsdWUudmFsdWVcIiBbdmFsdWVdPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlsdGVyLmRpc2FibGVUaXRsZUNhc2U7IGVsc2UgZGVmYXVsdENhc2VcIj5cclxuICAgICAgICAgICAgICAgICB7eyB2YWx1ZS5rZXkgfCB0cmFuc2xhdGUgOiB7IGRlZmF1bHQ6IHZhbHVlLnZhbHVlIHwgdGl0bGVjYXNlIH0gfX1cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENhc2U+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHZhbHVlLmtleSB8IHRyYW5zbGF0ZSA6IHsgZGVmYXVsdDogdmFsdWUudmFsdWUgfSB9fSBcclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInN3aXRjaExlZnQoKVwiICpuZ0lmPVwiZmlsdGVyT3ZlcmZsb3dcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgYXJyb3dfYmFja19pb3NcclxuICAgIDwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cImZpbHRlck92ZXJmbG93XCIgKGNsaWNrKT1cInN3aXRjaFJpZ2h0KClcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgYXJyb3dfZm9yd2FyZF9pb3NcclxuICAgIDwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbjxtYXQtY2hpcC1saXN0Ym94PlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBzZXR0aW5ncz8uZmlsdGVyc1wiPlxyXG4gICAgPG1hdC1jaGlwLW9wdGlvbiAqbmdGb3I9XCJsZXQgZmlsdGVyVmFsdWUgb2YgZmlsdGVyRm9ybUdyb3VwVmFsdWVbZmlsdGVyLmZpZWxkTmFtZV07IGxldCBpeD1pbmRleFwiXHJcbiAgICAgIChyZW1vdmVkKT1cInJlbW92ZUZpbHRlcihmaWx0ZXIuZmllbGROYW1lLCBpeClcIiBjbGFzcz1cInRleHQtc1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmU+XHJcbiAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcC1maWx0ZXItdGl0bGVcIj57e2ZpbHRlci50aXRsZSB8IHRyYW5zbGF0ZX19Ojwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLXZhbHVlIHNlbWktYm9sZFwiPiB7eyhmaWx0ZXIudHJhbnNsYXRlZCA/IGZpbHRlclZhbHVlLmtleSA6IGZpbHRlclZhbHVlLmtleSB8IHRyYW5zbGF0ZSA6IHtkZWZhdWx0OiBmaWx0ZXJWYWx1ZS52YWx1ZX0pIHwgdGl0bGVjYXNlXHJcbiAgICAgICAgfX08L3NwYW4+XHJcbiAgICA8L21hdC1jaGlwLW9wdGlvbj5cclxuICA8L2Rpdj5cclxuPC9tYXQtY2hpcC1saXN0Ym94PlxyXG4iXX0=
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvZmlsdGVyLWJhci9maWx0ZXItYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9maWx0ZXItYmFyL2ZpbHRlci1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9LLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBY3hELE1BQU0sT0FBTyxrQkFBa0I7SUFJN0IsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBR0QsSUFBYSxnQkFBZ0IsQ0FBQyxLQUFjO1FBQzFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQWdDRCxtQ0FBbUM7SUFDbkMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBQ0QsMkVBQTJFO0lBQzNFLElBQUksZ0JBQWdCLEtBQUssT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0lBQ3pELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1osT0FBTyxDQUFDLElBQUks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QUFRO3NCQUFoQixLQUFLO2dCQUNPLGdCQUFnQjtzQkFBNUIsS0FBSztnQkFNSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRmlsdGVyQmFyRmlsdGVyLCBGaWx0ZXJCYXJGaWx0ZXJJdGVtIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJDaGFuZ2VFdmVudCB9IGZyb20gJy4vbW9kZWxzL2ZpbHRlci1iYXItY2hhbmdlLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyQmFyU2V0dGluZ3MgfSBmcm9tICcuL21vZGVscy9maWx0ZXItYmFyLXNldHRpbmdzLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ3RsZC1maWx0ZXItYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLWJhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZChcImZpbHRlcldyYXBwZXJcIikgZmlsdGVyV3JhcHBlciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZHJlbignb3B0aW9uU2VhcmNoSW5wdXQnKSBvcHRpb25TZWFyY2hJbnB1dHMhOiBFbGVtZW50UmVmPE1hdFNlbGVjdD5bXTtcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgW10pXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldHRpbmdzITogRmlsdGVyQmFyU2V0dGluZ3M7XHJcbiAgQElucHV0KCkgc2V0IGZpbHRlclJvd1Zpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2ZpbHRlclJvd1Zpc2libGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2RyZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5jaGVja092ZXJmbG93KCk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgZmlsdGVyQmFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsdGVyQmFyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJCYXJDaGFuZ2VFdmVudD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaW5wdXRUZXh0ID0gXCJcIjtcclxuICBwcml2YXRlIF9maWx0ZXJSb3dWaXNpYmxlITogYm9vbGVhbjtcclxuICBwcml2YXRlIGZvcm1DaGFuZ2VzU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKiogVG8gaGlkZSBmaWx0ZXJzLCBidXQgbGVhdmUgY2hpcHMgdmlzaWJsZSAqL1xyXG4gIHJlYWRvbmx5IGlucHV0Rm9ybUNvbnRyb2xOYW1lID0gXCJpbnB1dFwiO1xyXG4gIHJlYWRvbmx5IGZpbHRlckZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHJlYWRvbmx5IGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgIFt0aGlzLmlucHV0Rm9ybUNvbnRyb2xOYW1lXTogbmV3IEZvcm1Db250cm9sKFwiXCIpLFxyXG4gICAgZmlsdGVyczogdGhpcy5maWx0ZXJGb3JtR3JvdXBcclxuICB9KTtcclxuXHJcbiAgc2VhcmNoVGl0bGUhOiBzdHJpbmc7XHJcbiAgc2VhcmNoVG9vbHRpcCE6IHN0cmluZztcclxuICBzdWZmaXhJY29uITogc3RyaW5nO1xyXG4gIHByZWZpeEljb24hOiBzdHJpbmc7XHJcbiAgc2hvd1N1ZmZpeEljb24hOiBib29sZWFuO1xyXG4gIGZpbHRlcnM6IEZpbHRlckJhckNoYW5nZUV2ZW50ID0ge1xyXG4gICAgZmlsdGVyczoge30sXHJcbiAgICBpbnB1dDogXCJcIlxyXG4gIH07XHJcblxyXG4gIGZpbHRlck92ZXJmbG93ID0gZmFsc2U7XHJcbiAgYWN0aXZlRmlsdGVySW5kZXggPSAwO1xyXG5cclxuICAvLyB3aGVuIHRvIHNob3cgZmlsdGVyIGJ5IG5hbWUgb3IgaWQgb24gbW9iaWxlXHJcbiAgc2VhcmNoSW5kZXggPSAtMTtcclxuXHJcbiAgLy8gZ2V0dGVyIGZvciBjbGVhbmVyIHRlbXBsYXRlIGh0bWxcclxuICBnZXQgZmlsdGVyRm9ybUdyb3VwVmFsdWUoKTogeyBba2V5OiBzdHJpbmddOiBGaWx0ZXJCYXJGaWx0ZXJJdGVtW10gfSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtR3JvdXAudmFsdWU7XHJcbiAgfVxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYWRqYWNlbnQtb3ZlcmxvYWQtc2lnbmF0dXJlc1xyXG4gIGdldCBmaWx0ZXJSb3dWaXNpYmxlKCkgeyByZXR1cm4gdGhpcy5fZmlsdGVyUm93VmlzaWJsZTsgfVxyXG4gIGdldCBpbnB1dFRleHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5wdXRUZXh0O1xyXG4gIH1cclxuICBnZXQgc2hvd1NlYXJjaCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5zZXR0aW5ncz8uaGlkZVNlYXJjaDtcclxuICB9XHJcbiAgZ2V0IG91dHB1dEZpbHRlcktleUFuZFZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3M/Lm91dHB1dEZpbHRlcktleUFuZFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9hZGphY2VudC1vdmVybG9hZC1zaWduYXR1cmVzXHJcbiAgc2V0IGlucHV0VGV4dCh2YWx1ZSkge1xyXG4gICAgdGhpcy5faW5wdXRUZXh0ID0gdmFsdWU7XHJcbiAgICB0aGlzLmZpbHRlcnMuaW5wdXQgPSB0aGlzLl9pbnB1dFRleHQ7XHJcbiAgICB0aGlzLmVtaXRGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0dGluZ3MuZmlsdGVycz8uZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuYWRkQ29udHJvbChmaWVsZC5maWVsZE5hbWUsIG5ldyBGb3JtQ29udHJvbChbXSkpO1xyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZVRvRm9ybVZhbHVlQ2hhbmdlcygpO1xyXG4gICAgdGhpcy5zZWFyY2hUb29sdGlwID0gdGhpcy5zZXR0aW5ncz8uc2VhcmNoVG9vbHRpcCA/PyAnRklMVEVSX0JBUi5TRUFSQ0hfVE9PTFRJUCc7XHJcbiAgICB0aGlzLnNlYXJjaFRpdGxlID0gdGhpcy5zZXR0aW5ncz8uc2VhcmNoVGl0bGUgPz8gJ0ZJTFRFUl9CQVIuU0VBUkNIJztcclxuICAgIHRoaXMucHJlZml4SWNvbiA9IHRoaXMuc2V0dGluZ3M/LnByZWZpeEljb24gPz8gXCJmaWx0ZXJfYWx0XCI7XHJcbiAgICB0aGlzLnN1ZmZpeEljb24gPSB0aGlzLnNldHRpbmdzPy5zdWZmaXhJY29uID8/IFwicXVlc3Rpb25fbWFya1wiO1xyXG4gICAgdGhpcy5zaG93U3VmZml4SWNvbiA9IHRoaXMuc2V0dGluZ3M/LnNob3dTdWZmaXhJY29uID8/IHRydWU7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTtcclxuICAgIHRoaXMuY2RyZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1DaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c09wdGlvblNlYXJjaElucHV0KGZpbHRlcjogRmlsdGVyQmFyRmlsdGVyLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWZpbHRlci5zZWFyY2g/LnBsYWNlaG9sZGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5vcHRpb25TZWFyY2hJbnB1dHMuZmluZCgoX2l0ZW0sIGkpID0+IGkgPT09IGluZGV4KT8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfSwgMzAwKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyLm1heFBhbmVsV2lkdGggPT09ICcnICYmIGZpbHRlci5zZWFyY2gucGxhY2Vob2xkZXIpIHtcclxuICAgICAgdGhpcy5zZXRQYW5lbFdpZHRoKGZpbHRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJPcHRpb25zKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBmaWx0ZXI6IEZpbHRlckJhckZpbHRlcikge1xyXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XHJcbiAgICB0aGlzLnNldHRpbmdzLmZpbHRlcnM/Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS5maWVsZE5hbWUgPT09IGZpbHRlci5maWVsZE5hbWUgJiYgaXRlbS5zZWFyY2gpIHtcclxuICAgICAgICBpdGVtLnNlYXJjaC5maWx0ZXJlZFZhbHVlcyA9IGZpbHRlci52YWx1ZXMuZmlsdGVyKFxyXG4gICAgICAgICAgKHZhbHVlKSA9PiAoaXRlbS50cmFuc2xhdGVkID8gdmFsdWUua2V5IDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCh2YWx1ZS5rZXkpKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRhcmdldC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhbmVsV2lkdGgoZmlsdGVyOiBGaWx0ZXJCYXJGaWx0ZXIpOiB2b2lkIHtcclxuICAgIC8vIFdlIG11c3Qgc2F2ZSBwYW5lbCB3aWR0aCwgc28gZmlsdGVyaW5nIGRvZXMgbm90IGFmZmVjdCBpdGBzIHNpemUuXHJcbiAgICBjb25zdCBzZWxlY3RQYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZGstb3ZlcmxheS1wYW5lJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBzZWxlY3RQYW5lbFdpZHRoID0gc2VsZWN0UGFuZWwuY2xpZW50V2lkdGggYXMgbnVtYmVyO1xyXG4gICAgY29uc3QgZmlsdGVyT2JqID0gdGhpcy5zZXR0aW5ncy5maWx0ZXJzPy5maW5kKChpdGVtKSA9PiBpdGVtLmZpZWxkTmFtZSA9PT0gZmlsdGVyLmZpZWxkTmFtZSkgYXMgRmlsdGVyQmFyRmlsdGVyO1xyXG4gICAgZmlsdGVyT2JqLm1heFBhbmVsV2lkdGggPSBzZWxlY3RQYW5lbFdpZHRoO1xyXG4gICAgc2VsZWN0UGFuZWwuc3R5bGUubWluV2lkdGggPSBgJHtzZWxlY3RQYW5lbFdpZHRofXB4YDtcclxuICB9XHJcblxyXG4gIGVtaXRGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5maWx0ZXJCYXJDaGFuZ2UubmV4dCh0aGlzLmZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoUmlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy5zZXR0aW5ncz8uZmlsdGVycyAmJiB0aGlzLnNldHRpbmdzPy5maWx0ZXJzLmxlbmd0aCA9PT0gdGhpcy5hY3RpdmVGaWx0ZXJJbmRleCArIDEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJJbmRleCArPSAxO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoTGVmdCgpIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZUZpbHRlckluZGV4ID09PSB0aGlzLnNlYXJjaEluZGV4KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlRmlsdGVySW5kZXggLT0gMTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUZpbHRlcihrZXk6IHN0cmluZywgaXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwLmdldChrZXkpO1xyXG5cclxuICAgIGlmICghY29udHJvbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3QXJyYXkgPSBjb250cm9sLnZhbHVlIGFzIFtdO1xyXG4gICAgbmV3QXJyYXkuc3BsaWNlKGl4LCAxKTtcclxuICAgIGNvbnRyb2wuc2V0VmFsdWUobmV3QXJyYXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja092ZXJmbG93KCkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyV3JhcHBlcikge1xyXG4gICAgICB0aGlzLmZpbHRlck92ZXJmbG93ID0gdGhpcy5maWx0ZXJXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggPCB0aGlzLmZpbHRlcldyYXBwZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9Gb3JtVmFsdWVDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5mb3JtQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJzID0ge1xyXG4gICAgICAgIGlucHV0OiB0aGlzLmZvcm0udmFsdWUuaW5wdXQgPz8gXCJcIixcclxuICAgICAgICBmaWx0ZXJzOiB7fVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgZm9yIChjb25zdCBmaWx0ZXJLZXkgaW4gdGhpcy5mb3JtLnZhbHVlLmZpbHRlcnMpIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNvbnN0IGZpbHRlcjogRmlsdGVyQmFyRmlsdGVySXRlbVtdID0gKHRoaXMuZm9ybS52YWx1ZS5maWx0ZXJzIGFzIGFueSlbZmlsdGVyS2V5XSBhcyBGaWx0ZXJCYXJGaWx0ZXJJdGVtW107XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLmZpbHRlcnNbZmlsdGVyS2V5XSA9IGZpbHRlci5tYXAoKGl0ZW0pID0+IHRoaXMub3V0cHV0RmlsdGVyS2V5QW5kVmFsdWUgPyBpdGVtIDogaXRlbS52YWx1ZSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVtaXRGaWx0ZXJzKCk7XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVyLXJvd1wiICpuZ0lmPVwiZmlsdGVyUm93VmlzaWJsZVwiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBjbGFzcz1cImZpbHRlci13cmFwcGVyXCIgI2ZpbHRlcldyYXBwZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4ICpuZ0lmPVwic2hvd1NlYXJjaCAmJiAhZmlsdGVyT3ZlcmZsb3cgfHwgYWN0aXZlRmlsdGVySW5kZXggPT09IHNlYXJjaEluZGV4XCIgY2xhc3M9XCJmaWx0ZXItYmFyLXNlYXJjaC1pbnB1dFwiPlxyXG4gICAgICA8c3BhbiBtYXRQcmVmaXggY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPlxyXG4gICAgICAgIHt7cHJlZml4SWNvbn19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPHNwYW4gbWF0U3VmZml4IGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiAqbmdJZj1cInNob3dTdWZmaXhJY29uXCIgW21hdFRvb2x0aXBdPVwic2VhcmNoVG9vbHRpcCB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIHt7c3VmZml4SWNvbn19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPGlucHV0IGNsYXNzPVwic2VhcmNoLWlucHV0XCIgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFRpdGxlIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImlucHV0Rm9ybUNvbnRyb2xOYW1lXCI+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1Hcm91cFwiPlxyXG5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIFtuZ0NsYXNzXT1cInsnaGlkZGVuJzogZmlsdGVyT3ZlcmZsb3cgJiYgYWN0aXZlRmlsdGVySW5kZXggIT09IGksICdlbmdpbmUtZmlsdGVyJzogIWZpbHRlck92ZXJmbG93fVwiICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2Ygc2V0dGluZ3M/LmZpbHRlcnM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7ZmlsdGVyLnRpdGxlIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBtdWx0aXBsZSBbcGFuZWxXaWR0aF09XCJmaWx0ZXI/Lm1heFBhbmVsV2lkdGggPz8gJ2F1dG8nXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWx0ZXIuZmllbGROYW1lXCIgKG9wZW5lZENoYW5nZSk9XCIkZXZlbnQgPT09IHRydWUgPyBmb2N1c09wdGlvblNlYXJjaElucHV0KGZpbHRlciwgaSkgOiBudWxsXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyPy5zZWFyY2g/LnBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCAjb3B0aW9uU2VhcmNoSW5wdXQgY2xhc3M9XCJvcHRpb24tc2VhcmNoLWlucHV0XCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnNlYXJjaD8ucGxhY2Vob2xkZXIgPz8gJycgfCB0cmFuc2xhdGVcIiAoa2V5dXApPVwiZmlsdGVyT3B0aW9ucygkZXZlbnQsIGZpbHRlcilcIiAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICBcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudmFsdWVzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnRyYW5zbGF0ZWQ7IGVsc2Ugc29ydGVkVmFsdWVzQnlQcm9wZXJ0eVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiZmlsdGVyLW9wdGlvblwiICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiAoZmlsdGVyLnNlYXJjaD8uZmlsdGVyZWRWYWx1ZXMgPz8gZmlsdGVyLnZhbHVlcykgfCBzb3J0QWxwaGFiZXRpY2FsbHk6J2tleSdcIiBbZGlzYWJsZWRdPVwiZmlsdGVyLnNpbmdsZVNlbGVjdGlvbj8uc2VsZWN0ZWQgJiYgZmlsdGVyLnNpbmdsZVNlbGVjdGlvbj8udmFsdWUgIT09IHZhbHVlLnZhbHVlXCIgW3ZhbHVlXT1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBmaWx0ZXIuZGlzYWJsZVRpdGxlQ2FzZSA/IHZhbHVlLmtleSA6ICh2YWx1ZS5rZXkgfCB0aXRsZWNhc2UpIH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc29ydGVkVmFsdWVzQnlQcm9wZXJ0eT5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImZpbHRlci1vcHRpb25cIiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgKGZpbHRlci5zZWFyY2g/LmZpbHRlcmVkVmFsdWVzID8/IGZpbHRlci52YWx1ZXMpIHwgc29ydFRyYW5zbGF0aW9uc0J5UHJvcGVydHk6J2tleSc6J3ZhbHVlJ1wiIFtkaXNhYmxlZF09XCJmaWx0ZXIuc2luZ2xlU2VsZWN0aW9uPy5zZWxlY3RlZCAmJiBmaWx0ZXIuc2luZ2xlU2VsZWN0aW9uPy52YWx1ZSAhPT0gdmFsdWUudmFsdWVcIiBbdmFsdWVdPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlsdGVyLmRpc2FibGVUaXRsZUNhc2U7IGVsc2UgZGVmYXVsdENhc2VcIj5cclxuICAgICAgICAgICAgICAgICB7eyB2YWx1ZS5rZXkgfCB0cmFuc2xhdGUgOiB7IGRlZmF1bHQ6IHZhbHVlLnZhbHVlIHwgdGl0bGVjYXNlIH0gfX1cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENhc2U+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHZhbHVlLmtleSB8IHRyYW5zbGF0ZSA6IHsgZGVmYXVsdDogdmFsdWUudmFsdWUgfSB9fSBcclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInN3aXRjaExlZnQoKVwiICpuZ0lmPVwiZmlsdGVyT3ZlcmZsb3dcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgYXJyb3dfYmFja19pb3NcclxuICAgIDwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAqbmdJZj1cImZpbHRlck92ZXJmbG93XCIgKGNsaWNrKT1cInN3aXRjaFJpZ2h0KClcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgYXJyb3dfZm9yd2FyZF9pb3NcclxuICAgIDwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbjxtYXQtY2hpcC1saXN0Ym94PlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBzZXR0aW5ncz8uZmlsdGVyc1wiPlxyXG4gICAgPG1hdC1jaGlwLW9wdGlvbiAqbmdGb3I9XCJsZXQgZmlsdGVyVmFsdWUgb2YgZmlsdGVyRm9ybUdyb3VwVmFsdWVbZmlsdGVyLmZpZWxkTmFtZV07IGxldCBpeD1pbmRleFwiXHJcbiAgICAgIChyZW1vdmVkKT1cInJlbW92ZUZpbHRlcihmaWx0ZXIuZmllbGROYW1lLCBpeClcIiBjbGFzcz1cInRleHQtc1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmU+XHJcbiAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcC1maWx0ZXItdGl0bGVcIj57e2ZpbHRlci50aXRsZSB8IHRyYW5zbGF0ZX19Ojwvc3Bhbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLXZhbHVlIHNlbWktYm9sZFwiPiB7eyhmaWx0ZXIudHJhbnNsYXRlZCA/IGZpbHRlclZhbHVlLmtleSA6IGZpbHRlclZhbHVlLmtleSB8IHRyYW5zbGF0ZSA6IHtkZWZhdWx0OiBmaWx0ZXJWYWx1ZS52YWx1ZX0pIHwgdGl0bGVjYXNlXHJcbiAgICAgICAgfX08L3NwYW4+XHJcbiAgICA8L21hdC1jaGlwLW9wdGlvbj5cclxuICA8L2Rpdj5cclxuPC9tYXQtY2hpcC1saXN0Ym94PlxyXG4iXX0=
@@ -45,11 +45,11 @@ export class AlertService {
45
45
  console.error(error);
46
46
  this.emit(NotificationMessageType.ERROR, text, error, params);
47
47
  }
48
- warning(text, params) {
49
- this.emit(NotificationMessageType.WARNING, text, null, params);
48
+ warning(text, params, hideClose) {
49
+ this.emit(NotificationMessageType.WARNING, text, null, params, undefined, hideClose);
50
50
  }
51
- deleteMessage(type, text, params) {
52
- this.emit(type, text, null, params, true);
51
+ deleteMessage(type, text, params, hideClose) {
52
+ this.emit(type, text, null, params, true, hideClose);
53
53
  }
54
54
  unhandeledError(error, errorTranslationSubKeys = [], params) {
55
55
  if (error) {
@@ -109,7 +109,7 @@ export class AlertService {
109
109
  }
110
110
  return this.errorKey + (errorKey ?? this.defaultErrorKey);
111
111
  }
112
- emit(type, text, error, params, deleteMsg) {
112
+ emit(type, text, error, params, deleteMsg, hideClose) {
113
113
  // if there is no title for this text, text will be shown as title
114
114
  const title = this.findPostfix(text, this.titlePostFix) ?? text;
115
115
  const message = {
@@ -118,7 +118,8 @@ export class AlertService {
118
118
  type,
119
119
  localizationParams: { ...this.defaultParams, ...params },
120
120
  support: this.getSupportMessage(text),
121
- delete: deleteMsg
121
+ delete: deleteMsg,
122
+ hideClose: hideClose
122
123
  };
123
124
  if (error) {
124
125
  message.error = error;
@@ -164,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
164
165
  type: Inject,
165
166
  args: [ALERT_CONFIGURATION_TOKEN]
166
167
  }] }]; } });
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9hbGVydC9hbGVydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBdUIsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7QUFLekYsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBNEUsTUFBMEI7UUFBMUIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFFOUYsbUJBQWMsR0FBaUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVNwRCxvQkFBZSxHQUFHLGVBQWUsQ0FBQztRQUNsQyxhQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3JCLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUM5Qyx5RUFBeUU7UUFDeEQsaUJBQVksR0FBRyxRQUFRLENBQUM7UUFDekMsZ0hBQWdIO1FBQy9GLG1CQUFjLEdBQUcsVUFBVSxDQUFDO1FBQzVCLHdCQUFtQixHQUFHLGVBQWUsQ0FBQztJQWxCa0QsQ0FBQztJQUkxRyxJQUFJLGFBQWE7UUFDZixPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtZQUMvQixZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBV0QsWUFBWSxDQUFDLEtBQVc7UUFDdEIsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLENBQUMsS0FB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QUM7K0dBdExVLFlBQVksa0JBQ1MseUJBQXlCO21IQUQ5QyxZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUVjLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1lc3NhZ2UsIE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi4vLi4vbm90aWZpY2F0aW9uLW1lc3NhZ2UnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQWxlcnRDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9tb2RlbHMvYWxlcnQtY29uZmlndXJhdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IEFMRVJUX0NPTkZJR1VSQVRJT05fVE9LRU4gfSBmcm9tICcuL2luamVjdGlvbi10b2tlbnMvYWxlcnQtY29uZmlndXJhdGlvbi50b2tlbic7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWxlcnRTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KEFMRVJUX0NPTkZJR1VSQVRJT05fVE9LRU4pIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBBbGVydENvbmZpZ3VyYXRpb24pIHt9XHJcblxyXG4gIHByaXZhdGUgbWVzc2FnZVN1YmplY3Q6IFN1YmplY3Q8Tm90aWZpY2F0aW9uTWVzc2FnZT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBnZXQgZGVmYXVsdFBhcmFtcygpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGVtYWlsOiB0aGlzLmNvbmZpZy5zdXBwb3J0RW1haWwsXHJcbiAgICAgIHJlZ2lzdGVyTGluazogdGhpcy5jb25maWcucmVnaXN0ZXJMaW5rLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEVycm9yS2V5ID0gJ0VSUk9SX0RFRkFVTFQnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JLZXkgPSAnRVJST1JTLic7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBudW1lcmljRXJyb3JLZXlQcmVmaXggPSAnRV8nO1xyXG4gIC8vIGlmIG1lc3NhZ2Uga2V5IGhhcyBrZXkgd2l0aCB0aGlzIHBvc3RmaXgsIG1lc3NhZ2Ugc2hvdWxkIGJlIHdpdGggdGl0bGVcclxuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlUG9zdEZpeCA9ICdfVElUTEUnO1xyXG4gIC8vIGlmIG1lc3NhZ2Uga2V5IGhhcyBrZXkgd2l0aCB0aGlzIHBvc3RmaXgsIG1lc3NhZ2Ugc2hvdWxkIGJlIHdpdGggc3VwcG9ydCBpbmZvLCBpdCBpcyBjb25maWd1cmVkIGFuZCB0dXJuZWQgb25cclxuICBwcml2YXRlIHJlYWRvbmx5IHN1cHBvcnRQb3N0Rml4ID0gJ19TVVBQT1JUJztcclxuICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvblBvc3RGaXggPSAnX1NVQlNDUklQVElPTic7XHJcblxyXG4gIGRlZmF1bHRFcnJvcihlcnJvcj86IGFueSkge1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lcnJvcihcclxuICAgICAgYCR7dGhpcy5lcnJvcktleX0ke3RoaXMuZGVmYXVsdEVycm9yS2V5fWAsXHJcbiAgICAgIGVycm9yLFxyXG4gICAgICB0aGlzLmRlZmF1bHRQYXJhbXNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRNZXNzYWdlcygpIHtcclxuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgYmFzaWModGV4dDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIHRoaXMuZW1pdChOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5CQVNJQywgdGV4dCwgbnVsbCwgcGFyYW1zKTtcclxuICB9XHJcblxyXG4gIGluZm8odGV4dDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIHRoaXMuZW1pdChOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5JTkZPLCB0ZXh0LCBudWxsLCBwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgc3VjY2Vzcyh0ZXh0OiBzdHJpbmcsIHBhcmFtcz86IGFueSkge1xyXG4gICAgdGhpcy5lbWl0KE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLlNVQ0NFU1MsIHRleHQsIG51bGwsIHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBlcnJvcih0ZXh0OiBzdHJpbmcsIGVycm9yOiBhbnksIHBhcmFtcz86IGFueSkge1xyXG4gICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICB0aGlzLmVtaXQoTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuRVJST1IsIHRleHQsIGVycm9yLCBwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgd2FybmluZyh0ZXh0OiBzdHJpbmcsIHBhcmFtcz86IGFueSkge1xyXG4gICAgdGhpcy5lbWl0KE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLldBUk5JTkcsIHRleHQsIG51bGwsIHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVNZXNzYWdlKHR5cGU6IE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLCB0ZXh0OiBzdHJpbmcsIHBhcmFtcz86IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5lbWl0KHR5cGUsIHRleHQsIG51bGwsIHBhcmFtcywgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICB1bmhhbmRlbGVkRXJyb3IoZXJyb3I6IGFueSwgZXJyb3JUcmFuc2xhdGlvblN1YktleXM6IHN0cmluZ1tdID0gW10sIHBhcmFtcz86IGFueSkge1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IGVycm9yS2V5ID0gdGhpcy5maW5kRXJyb3JLZXkoZXJyb3IsIGVycm9yVHJhbnNsYXRpb25TdWJLZXlzKTtcclxuXHJcbiAgICAgIGlmIChlcnJvcktleSkge1xyXG4gICAgICAgIHRoaXMuZXJyb3IoZXJyb3JLZXksIGVycm9yLCBwYXJhbXMgPz8gdGhpcy5kZWZhdWx0UGFyYW1zKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZGVmYXVsdEVycm9yKGVycm9yKTtcclxuICB9XHJcblxyXG4gIGZpbmRFcnJvclRpdGxlQW5kTG9jYWxpemF0aW9uS2V5KGVycm9yOiB1bmtub3duLCBlcnJvclRyYW5zbGF0aW9uU3ViS2V5czogc3RyaW5nW10pOiB7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICB9IHtcclxuICAgIGNvbnN0IGVycm9yRGVzY3JpcHRpb25LZXkgPSB0aGlzLmZpbmRFcnJvcktleShlcnJvciwgZXJyb3JUcmFuc2xhdGlvblN1YktleXMpO1xyXG4gICAgbGV0IGVycm9yVGl0bGVLZXkgPSBudWxsO1xyXG5cclxuICAgIGlmIChlcnJvckRlc2NyaXB0aW9uS2V5KSB7XHJcbiAgICAgIGVycm9yVGl0bGVLZXkgPSB0aGlzLmZpbmRQb3N0Zml4KGVycm9yRGVzY3JpcHRpb25LZXksIHRoaXMudGl0bGVQb3N0Rml4KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkZXNjcmlwdGlvbjogZXJyb3JEZXNjcmlwdGlvbktleSBhcyBzdHJpbmcsXHJcbiAgICAgIHRpdGxlOiBlcnJvclRpdGxlS2V5IGFzIHN0cmluZyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRFcnJvcktleShlcnJvcjogYW55LCBlcnJvclRyYW5zbGF0aW9uU3ViS2V5czogc3RyaW5nW10pIHtcclxuICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGVycm9yS2V5ID0gbnVsbDtcclxuICAgIGNvbnN0IGVycm9yVHJhbnNsYXRpb25zID0gdGhpcy5jb25maWcuYXZhaWxhYmxlTGFuZ3VhZ2VzLmVuLkVSUk9SUztcclxuICAgIGlmIChcclxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSAmJlxyXG4gICAgICBlcnJvclRyYW5zbGF0aW9uc1t0aGlzLm51bWVyaWNFcnJvcktleVByZWZpeCArIGVycm9yLnN0YXR1c11cclxuICAgICkge1xyXG4gICAgICBlcnJvcktleSA9IHRoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3Iuc3RhdHVzO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvclRyYW5zbGF0aW9uc1tlcnJvci5FcnJvckNvZGVdKSB7XHJcbiAgICAgIGVycm9yS2V5ID0gZXJyb3IuRXJyb3JDb2RlO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgZXJyb3JUcmFuc2xhdGlvbnNbdGhpcy5udW1lcmljRXJyb3JLZXlQcmVmaXggKyBlcnJvci5FcnJvckNvZGVdXHJcbiAgICApIHtcclxuICAgICAgZXJyb3JLZXkgPSB0aGlzLm51bWVyaWNFcnJvcktleVByZWZpeCArIGVycm9yLkVycm9yQ29kZTtcclxuICAgIH0gZWxzZSBpZiAoZXJyb3JUcmFuc2xhdGlvbnNbZXJyb3IuZXJyb3I/LkVycm9yQ29kZV0pIHtcclxuICAgICAgZXJyb3JLZXkgPSBlcnJvci5lcnJvcj8uRXJyb3JDb2RlO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvclRyYW5zbGF0aW9uc1tlcnJvci5lcnJvcl0pIHtcclxuICAgICAgZXJyb3JLZXkgPSBlcnJvci5lcnJvcjtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGVycm9yVHJhbnNsYXRpb25zW3RoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3IuZXJyb3I/LkVycm9yQ29kZV1cclxuICAgICkge1xyXG4gICAgICBlcnJvcktleSA9IHRoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3IuZXJyb3I/LkVycm9yQ29kZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWVycm9yS2V5KSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXJyb3JUcmFuc2xhdGlvblN1YktleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBzdWJLZXkgPSBlcnJvclRyYW5zbGF0aW9uU3ViS2V5c1tpXTtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gZXJyb3JUcmFuc2xhdGlvbnNbc3ViS2V5XTtcclxuICAgICAgICBpZiAoZWxlbWVudFtlcnJvci5FcnJvckNvZGVdKSB7XHJcbiAgICAgICAgICBlcnJvcktleSA9IGAke3N1YktleX0uJHtlcnJvci5FcnJvckNvZGV9YDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZXJyb3JLZXkgKyAoZXJyb3JLZXkgPz8gdGhpcy5kZWZhdWx0RXJyb3JLZXkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0KFxyXG4gICAgdHlwZTogTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUsXHJcbiAgICB0ZXh0OiBzdHJpbmcsXHJcbiAgICBlcnJvcjogYW55LFxyXG4gICAgcGFyYW1zPzogYW55LFxyXG4gICAgZGVsZXRlTXNnPzogYm9vbGVhblxyXG4gICkge1xyXG4gICAvLyBpZiB0aGVyZSBpcyBubyB0aXRsZSBmb3IgdGhpcyB0ZXh0LCB0ZXh0IHdpbGwgYmUgc2hvd24gYXMgdGl0bGVcclxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5maW5kUG9zdGZpeCh0ZXh0LCB0aGlzLnRpdGxlUG9zdEZpeCkgPz8gdGV4dDtcclxuICAgIGNvbnN0IG1lc3NhZ2U6IE5vdGlmaWNhdGlvbk1lc3NhZ2UgPSB7XHJcbiAgICAgIGJvZHk6IHRleHQgPT09IHRpdGxlID8gdW5kZWZpbmVkIDogdGV4dCxcclxuICAgICAgdGl0bGUsXHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIGxvY2FsaXphdGlvblBhcmFtczogeyAuLi50aGlzLmRlZmF1bHRQYXJhbXMsIC4uLnBhcmFtcyB9LFxyXG4gICAgICBzdXBwb3J0OiB0aGlzLmdldFN1cHBvcnRNZXNzYWdlKHRleHQpIGFzIHN0cmluZyxcclxuICAgICAgZGVsZXRlOiBkZWxldGVNc2dcclxuICAgIH07XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgbWVzc2FnZS5lcnJvciA9IGVycm9yO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tZXNzYWdlU3ViamVjdC5uZXh0KG1lc3NhZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTdXBwb3J0TWVzc2FnZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IHN1cHBvcnQgPSB0aGlzLmZpbmRQb3N0Zml4KHRleHQsIHRoaXMuc3VwcG9ydFBvc3RGaXgpO1xyXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5maW5kUG9zdGZpeCh0ZXh0LCB0aGlzLnN1YnNjcmlwdGlvblBvc3RGaXgpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5jb250YWN0U3VwcG9ydCAmJiBzdXBwb3J0ICE9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBzdXBwb3J0O1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5jb25maWcuc3Vic2NyaXB0aW9uU3VwcG9ydCAmJiBzdWJzY3JpcHRpb24gIT09IG51bGxcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kUG9zdGZpeCh0ZXh0OiBzdHJpbmcsIHBvc3RmaXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgcGFydHMgPSB0ZXh0LnNwbGl0KCcuJyk7XHJcbiAgICBsZXQgbG9jYWxpemF0aW9uT2JqZWN0ID0gdGhpcy5jb25maWcuYXZhaWxhYmxlTGFuZ3VhZ2VzLmVuO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICBsb2NhbGl6YXRpb25PYmplY3QgPSBsb2NhbGl6YXRpb25PYmplY3RbcGFydHNbaSAtIDFdXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWxvY2FsaXphdGlvbk9iamVjdFtwYXJ0c1tpXV0pIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qga2V5V2l0aFRpdGxlID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gKyBwb3N0Zml4O1xyXG4gICAgcmV0dXJuIGxvY2FsaXphdGlvbk9iamVjdFtrZXlXaXRoVGl0bGVdID8gdGV4dCArIHBvc3RmaXggOiBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9hbGVydC9hbGVydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBdUIsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7QUFLekYsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBNEUsTUFBMEI7UUFBMUIsV0FBTSxHQUFOLE1BQU0sQ0FBb0I7UUFFOUYsbUJBQWMsR0FBaUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVNwRCxvQkFBZSxHQUFHLGVBQWUsQ0FBQztRQUNsQyxhQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3JCLDBCQUFxQixHQUFHLElBQUksQ0FBQztRQUM5Qyx5RUFBeUU7UUFDeEQsaUJBQVksR0FBRyxRQUFRLENBQUM7UUFDekMsZ0hBQWdIO1FBQy9GLG1CQUFjLEdBQUcsVUFBVSxDQUFDO1FBQzVCLHdCQUFtQixHQUFHLGVBQWUsQ0FBQztJQWxCa0QsQ0FBQztJQUkxRyxJQUFJLGFBQWE7UUFDZixPQUFPO1lBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtZQUMvQixZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZO1NBQ3ZDLENBQUM7SUFDSixDQUFDO0lBV0QsWUFBWSxDQUFDLEtBQVc7UUFDdEIsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLENBQUMsS0FB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a0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsRSxDQUFDOytHQXhMVSxZQUFZLGtCQUNTLHlCQUF5QjttSEFEOUMsWUFBWSxjQUZYLE1BQU07OzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFFYyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOb3RpZmljYXRpb25NZXNzYWdlLCBOb3RpZmljYXRpb25NZXNzYWdlVHlwZSB9IGZyb20gJy4uLy4uL25vdGlmaWNhdGlvbi1tZXNzYWdlJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFsZXJ0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vbW9kZWxzL2FsZXJ0LWNvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBBTEVSVF9DT05GSUdVUkFUSU9OX1RPS0VOIH0gZnJvbSAnLi9pbmplY3Rpb24tdG9rZW5zL2FsZXJ0LWNvbmZpZ3VyYXRpb24udG9rZW4nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFsZXJ0U2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgQEluamVjdChBTEVSVF9DT05GSUdVUkFUSU9OX1RPS0VOKSBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogQWxlcnRDb25maWd1cmF0aW9uKSB7fVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VTdWJqZWN0OiBTdWJqZWN0PE5vdGlmaWNhdGlvbk1lc3NhZ2U+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgZ2V0IGRlZmF1bHRQYXJhbXMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBlbWFpbDogdGhpcy5jb25maWcuc3VwcG9ydEVtYWlsLFxyXG4gICAgICByZWdpc3Rlckxpbms6IHRoaXMuY29uZmlnLnJlZ2lzdGVyTGluayxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRFcnJvcktleSA9ICdFUlJPUl9ERUZBVUxUJztcclxuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yS2V5ID0gJ0VSUk9SUy4nO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbnVtZXJpY0Vycm9yS2V5UHJlZml4ID0gJ0VfJztcclxuICAvLyBpZiBtZXNzYWdlIGtleSBoYXMga2V5IHdpdGggdGhpcyBwb3N0Zml4LCBtZXNzYWdlIHNob3VsZCBiZSB3aXRoIHRpdGxlXHJcbiAgcHJpdmF0ZSByZWFkb25seSB0aXRsZVBvc3RGaXggPSAnX1RJVExFJztcclxuICAvLyBpZiBtZXNzYWdlIGtleSBoYXMga2V5IHdpdGggdGhpcyBwb3N0Zml4LCBtZXNzYWdlIHNob3VsZCBiZSB3aXRoIHN1cHBvcnQgaW5mbywgaXQgaXMgY29uZmlndXJlZCBhbmQgdHVybmVkIG9uXHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdXBwb3J0UG9zdEZpeCA9ICdfU1VQUE9SVCc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpcHRpb25Qb3N0Rml4ID0gJ19TVUJTQ1JJUFRJT04nO1xyXG5cclxuICBkZWZhdWx0RXJyb3IoZXJyb3I/OiBhbnkpIHtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXJyb3IoXHJcbiAgICAgIGAke3RoaXMuZXJyb3JLZXl9JHt0aGlzLmRlZmF1bHRFcnJvcktleX1gLFxyXG4gICAgICBlcnJvcixcclxuICAgICAgdGhpcy5kZWZhdWx0UGFyYW1zXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWVzc2FnZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGJhc2ljKHRleHQ6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XHJcbiAgICB0aGlzLmVtaXQoTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuQkFTSUMsIHRleHQsIG51bGwsIHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBpbmZvKHRleHQ6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XHJcbiAgICB0aGlzLmVtaXQoTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuSU5GTywgdGV4dCwgbnVsbCwgcGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHN1Y2Nlc3ModGV4dDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIHRoaXMuZW1pdChOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5TVUNDRVNTLCB0ZXh0LCBudWxsLCBwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgZXJyb3IodGV4dDogc3RyaW5nLCBlcnJvcjogYW55LCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgdGhpcy5lbWl0KE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLkVSUk9SLCB0ZXh0LCBlcnJvciwgcGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHdhcm5pbmcodGV4dDogc3RyaW5nLCBwYXJhbXM/OiBhbnksIGhpZGVDbG9zZT86IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZW1pdChOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5XQVJOSU5HLCB0ZXh0LCBudWxsLCBwYXJhbXMsIHVuZGVmaW5lZCwgaGlkZUNsb3NlKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZU1lc3NhZ2UodHlwZTogTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUsIHRleHQ6IHN0cmluZywgcGFyYW1zPzogYW55LCBoaWRlQ2xvc2U/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmVtaXQodHlwZSwgdGV4dCwgbnVsbCwgcGFyYW1zLCB0cnVlLCBoaWRlQ2xvc2UpO1xyXG4gIH1cclxuXHJcbiAgdW5oYW5kZWxlZEVycm9yKGVycm9yOiBhbnksIGVycm9yVHJhbnNsYXRpb25TdWJLZXlzOiBzdHJpbmdbXSA9IFtdLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICBjb25zdCBlcnJvcktleSA9IHRoaXMuZmluZEVycm9yS2V5KGVycm9yLCBlcnJvclRyYW5zbGF0aW9uU3ViS2V5cyk7XHJcblxyXG4gICAgICBpZiAoZXJyb3JLZXkpIHtcclxuICAgICAgICB0aGlzLmVycm9yKGVycm9yS2V5LCBlcnJvciwgcGFyYW1zID8/IHRoaXMuZGVmYXVsdFBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRlZmF1bHRFcnJvcihlcnJvcik7XHJcbiAgfVxyXG5cclxuICBmaW5kRXJyb3JUaXRsZUFuZExvY2FsaXphdGlvbktleShlcnJvcjogdW5rbm93biwgZXJyb3JUcmFuc2xhdGlvblN1YktleXM6IHN0cmluZ1tdKToge1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XHJcbiAgfSB7XHJcbiAgICBjb25zdCBlcnJvckRlc2NyaXB0aW9uS2V5ID0gdGhpcy5maW5kRXJyb3JLZXkoZXJyb3IsIGVycm9yVHJhbnNsYXRpb25TdWJLZXlzKTtcclxuICAgIGxldCBlcnJvclRpdGxlS2V5ID0gbnVsbDtcclxuXHJcbiAgICBpZiAoZXJyb3JEZXNjcmlwdGlvbktleSkge1xyXG4gICAgICBlcnJvclRpdGxlS2V5ID0gdGhpcy5maW5kUG9zdGZpeChlcnJvckRlc2NyaXB0aW9uS2V5LCB0aGlzLnRpdGxlUG9zdEZpeCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZGVzY3JpcHRpb246IGVycm9yRGVzY3JpcHRpb25LZXkgYXMgc3RyaW5nLFxyXG4gICAgICB0aXRsZTogZXJyb3JUaXRsZUtleSBhcyBzdHJpbmcsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kRXJyb3JLZXkoZXJyb3I6IGFueSwgZXJyb3JUcmFuc2xhdGlvblN1YktleXM6IHN0cmluZ1tdKSB7XHJcbiAgICBpZiAoIWVycm9yKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBlcnJvcktleSA9IG51bGw7XHJcbiAgICBjb25zdCBlcnJvclRyYW5zbGF0aW9ucyA9IHRoaXMuY29uZmlnLmF2YWlsYWJsZUxhbmd1YWdlcy5lbi5FUlJPUlM7XHJcbiAgICBpZiAoXHJcbiAgICAgIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UgJiZcclxuICAgICAgZXJyb3JUcmFuc2xhdGlvbnNbdGhpcy5udW1lcmljRXJyb3JLZXlQcmVmaXggKyBlcnJvci5zdGF0dXNdXHJcbiAgICApIHtcclxuICAgICAgZXJyb3JLZXkgPSB0aGlzLm51bWVyaWNFcnJvcktleVByZWZpeCArIGVycm9yLnN0YXR1cztcclxuICAgIH0gZWxzZSBpZiAoZXJyb3JUcmFuc2xhdGlvbnNbZXJyb3IuRXJyb3JDb2RlXSkge1xyXG4gICAgICBlcnJvcktleSA9IGVycm9yLkVycm9yQ29kZTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgIGVycm9yVHJhbnNsYXRpb25zW3RoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3IuRXJyb3JDb2RlXVxyXG4gICAgKSB7XHJcbiAgICAgIGVycm9yS2V5ID0gdGhpcy5udW1lcmljRXJyb3JLZXlQcmVmaXggKyBlcnJvci5FcnJvckNvZGU7XHJcbiAgICB9IGVsc2UgaWYgKGVycm9yVHJhbnNsYXRpb25zW2Vycm9yLmVycm9yPy5FcnJvckNvZGVdKSB7XHJcbiAgICAgIGVycm9yS2V5ID0gZXJyb3IuZXJyb3I/LkVycm9yQ29kZTtcclxuICAgIH0gZWxzZSBpZiAoZXJyb3JUcmFuc2xhdGlvbnNbZXJyb3IuZXJyb3JdKSB7XHJcbiAgICAgIGVycm9yS2V5ID0gZXJyb3IuZXJyb3I7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBlcnJvclRyYW5zbGF0aW9uc1t0aGlzLm51bWVyaWNFcnJvcktleVByZWZpeCArIGVycm9yLmVycm9yPy5FcnJvckNvZGVdXHJcbiAgICApIHtcclxuICAgICAgZXJyb3JLZXkgPSB0aGlzLm51bWVyaWNFcnJvcktleVByZWZpeCArIGVycm9yLmVycm9yPy5FcnJvckNvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFlcnJvcktleSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVycm9yVHJhbnNsYXRpb25TdWJLZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qgc3ViS2V5ID0gZXJyb3JUcmFuc2xhdGlvblN1YktleXNbaV07XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGVycm9yVHJhbnNsYXRpb25zW3N1YktleV07XHJcbiAgICAgICAgaWYgKGVsZW1lbnRbZXJyb3IuRXJyb3JDb2RlXSkge1xyXG4gICAgICAgICAgZXJyb3JLZXkgPSBgJHtzdWJLZXl9LiR7ZXJyb3IuRXJyb3JDb2RlfWA7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmVycm9yS2V5ICsgKGVycm9yS2V5ID8/IHRoaXMuZGVmYXVsdEVycm9yS2V5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdChcclxuICAgIHR5cGU6IE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgZXJyb3I6IGFueSxcclxuICAgIHBhcmFtcz86IGFueSxcclxuICAgIGRlbGV0ZU1zZz86IGJvb2xlYW4sXHJcbiAgICBoaWRlQ2xvc2U/OiBib29sZWFuXHJcbiAgKSB7XHJcbiAgIC8vIGlmIHRoZXJlIGlzIG5vIHRpdGxlIGZvciB0aGlzIHRleHQsIHRleHQgd2lsbCBiZSBzaG93biBhcyB0aXRsZVxyXG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLmZpbmRQb3N0Zml4KHRleHQsIHRoaXMudGl0bGVQb3N0Rml4KSA/PyB0ZXh0O1xyXG4gICAgY29uc3QgbWVzc2FnZTogTm90aWZpY2F0aW9uTWVzc2FnZSA9IHtcclxuICAgICAgYm9keTogdGV4dCA9PT0gdGl0bGUgPyB1bmRlZmluZWQgOiB0ZXh0LFxyXG4gICAgICB0aXRsZSxcclxuICAgICAgdHlwZSxcclxuICAgICAgbG9jYWxpemF0aW9uUGFyYW1zOiB7IC4uLnRoaXMuZGVmYXVsdFBhcmFtcywgLi4ucGFyYW1zIH0sXHJcbiAgICAgIHN1cHBvcnQ6IHRoaXMuZ2V0U3VwcG9ydE1lc3NhZ2UodGV4dCkgYXMgc3RyaW5nLFxyXG4gICAgICBkZWxldGU6IGRlbGV0ZU1zZyxcclxuICAgICAgaGlkZUNsb3NlOiBoaWRlQ2xvc2VcclxuICAgIH07XHJcbiAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgbWVzc2FnZS5lcnJvciA9IGVycm9yO1xyXG4gICAgfVxyXG4gICAgdGhpcy5tZXNzYWdlU3ViamVjdC5uZXh0KG1lc3NhZ2UpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTdXBwb3J0TWVzc2FnZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IHN1cHBvcnQgPSB0aGlzLmZpbmRQb3N0Zml4KHRleHQsIHRoaXMuc3VwcG9ydFBvc3RGaXgpO1xyXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5maW5kUG9zdGZpeCh0ZXh0LCB0aGlzLnN1YnNjcmlwdGlvblBvc3RGaXgpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5jb250YWN0U3VwcG9ydCAmJiBzdXBwb3J0ICE9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBzdXBwb3J0O1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgdGhpcy5jb25maWcuc3Vic2NyaXB0aW9uU3VwcG9ydCAmJiBzdWJzY3JpcHRpb24gIT09IG51bGxcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kUG9zdGZpeCh0ZXh0OiBzdHJpbmcsIHBvc3RmaXg6IHN0cmluZykge1xyXG4gICAgY29uc3QgcGFydHMgPSB0ZXh0LnNwbGl0KCcuJyk7XHJcbiAgICBsZXQgbG9jYWxpemF0aW9uT2JqZWN0ID0gdGhpcy5jb25maWcuYXZhaWxhYmxlTGFuZ3VhZ2VzLmVuO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICBsb2NhbGl6YXRpb25PYmplY3QgPSBsb2NhbGl6YXRpb25PYmplY3RbcGFydHNbaSAtIDFdXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWxvY2FsaXphdGlvbk9iamVjdFtwYXJ0c1tpXV0pIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qga2V5V2l0aFRpdGxlID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gKyBwb3N0Zml4O1xyXG4gICAgcmV0dXJuIGxvY2FsaXphdGlvbk9iamVjdFtrZXlXaXRoVGl0bGVdID8gdGV4dCArIHBvc3RmaXggOiBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -4,4 +4,5 @@ export * from './alert';
4
4
  export * from './system';
5
5
  export * from './language-translate';
6
6
  export * from './notification';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vaWNvblwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9kb21cIjtcclxuZXhwb3J0ICogZnJvbSAnLi9hbGVydCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3lzdGVtJztcclxuZXhwb3J0ICogZnJvbSAnLi9sYW5ndWFnZS10cmFuc2xhdGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbic7Il19
7
+ export * from './quota';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vaWNvblwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9kb21cIjtcclxuZXhwb3J0ICogZnJvbSAnLi9hbGVydCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3lzdGVtJztcclxuZXhwb3J0ICogZnJvbSAnLi9sYW5ndWFnZS10cmFuc2xhdGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL25vdGlmaWNhdGlvbic7XHJcbmV4cG9ydCAqIGZyb20gJy4vcXVvdGEnOyJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './quota.service';
2
+ export * from './injection-tokens';
3
+ export * from './models';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvc2VydmljZXMvcXVvdGEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9xdW90YS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9pbmplY3Rpb24tdG9rZW5zJztcclxuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnOyJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './quota-service-configuration.token';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvc2VydmljZXMvcXVvdGEvaW5qZWN0aW9uLXRva2Vucy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9xdW90YS1zZXJ2aWNlLWNvbmZpZ3VyYXRpb24udG9rZW4nOyJdfQ==
@@ -0,0 +1,2 @@
1
+ export const QUOTA_SERVICE_CONFIGURATION_TOKEN = 'QUOTA_SERVICE_CONFIGURATION_TOKEN';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtc2VydmljZS1jb25maWd1cmF0aW9uLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3F1b3RhL2luamVjdGlvbi10b2tlbnMvcXVvdGEtc2VydmljZS1jb25maWd1cmF0aW9uLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUFHLG1DQUFtQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFFVT1RBX1NFUlZJQ0VfQ09ORklHVVJBVElPTl9UT0tFTiA9ICdRVU9UQV9TRVJWSUNFX0NPTkZJR1VSQVRJT05fVE9LRU4nOyJdfQ==
@@ -0,0 +1,4 @@
1
+ export * from './quota-type.enum';
2
+ export * from './quota-usage.model';
3
+ export * from './quota-service-configuration.model';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvc2VydmljZXMvcXVvdGEvbW9kZWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFDQUFxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9xdW90YS10eXBlLmVudW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL3F1b3RhLXVzYWdlLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9xdW90YS1zZXJ2aWNlLWNvbmZpZ3VyYXRpb24ubW9kZWwnOyJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtc2VydmljZS1jb25maWd1cmF0aW9uLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3F1b3RhL21vZGVscy9xdW90YS1zZXJ2aWNlLWNvbmZpZ3VyYXRpb24ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUXVvdGFTZXJ2aWNlQ29uZmlndXJhdGlvbiB7XHJcbiAgYXBpVXJsOiBzdHJpbmc7XHJcbn0iXX0=
@@ -0,0 +1,5 @@
1
+ export var QuotaType;
2
+ (function (QuotaType) {
3
+ QuotaType["TRANSLATION_DOCUMENTS"] = "TranslationDocuments";
4
+ })(QuotaType || (QuotaType = {}));
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtdHlwZS5lbnVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3F1b3RhL21vZGVscy9xdW90YS10eXBlLmVudW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFOLElBQVksU0FFWDtBQUZELFdBQVksU0FBUztJQUNwQiwyREFBOEMsQ0FBQTtBQUMvQyxDQUFDLEVBRlcsU0FBUyxLQUFULFNBQVMsUUFFcEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZW51bSBRdW90YVR5cGUge1xyXG5cdFRSQU5TTEFUSU9OX0RPQ1VNRU5UUyA9ICdUcmFuc2xhdGlvbkRvY3VtZW50cydcclxufVxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEtdXNhZ2UubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvc2VydmljZXMvcXVvdGEvbW9kZWxzL3F1b3RhLXVzYWdlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRdW90YVR5cGUgfSBmcm9tIFwiLi9xdW90YS10eXBlLmVudW1cIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUXVvdGFVc2FnZSB7XHJcblx0c3Vic2NyaXB0aW9uSWQ6IHN0cmluZztcclxuXHRzdWJzY3JpcHRpb25QbGFuSWQ6IHN0cmluZztcclxuXHRxdW90YVR5cGU6IFF1b3RhVHlwZTtcclxuXHRxdW90YVJlbWFpbmluZzogbnVtYmVyO1xyXG5cdHF1b3RhVXNlZFRvdGFsOiBudW1iZXI7XHJcblx0cXVvdGFXYW50ZWRUb3RhbDogbnVtYmVyO1xyXG5cdHF1b3RhTGltaXQ6IG51bWJlcjtcclxuXHRxdW90YU5leHRSZWZpbGw6IHN0cmluZztcclxuXHRib251c1F1b3RhOiBudW1iZXI7XHJcblx0Y3VycmVudFBlcmlvZEJvbnVzUXVvdGE6IG51bWJlcjtcclxufVxyXG4iXX0=
@@ -0,0 +1,25 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { QUOTA_SERVICE_CONFIGURATION_TOKEN } from './injection-tokens/quota-service-configuration.token';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common/http";
5
+ export class QuotaService {
6
+ constructor(http, config) {
7
+ this.http = http;
8
+ this.baseUrl = config.apiUrl;
9
+ }
10
+ getQuotaUsage() {
11
+ return this.http.get(this.baseUrl);
12
+ }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QuotaService, deps: [{ token: i1.HttpClient }, { token: QUOTA_SERVICE_CONFIGURATION_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
14
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QuotaService, providedIn: 'root' }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QuotaService, decorators: [{
17
+ type: Injectable,
18
+ args: [{
19
+ providedIn: 'root',
20
+ }]
21
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
22
+ type: Inject,
23
+ args: [QUOTA_SERVICE_CONFIGURATION_TOKEN]
24
+ }] }]; } });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVvdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9xdW90YS9xdW90YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOzs7QUFNekcsTUFBTSxPQUFPLFlBQVk7SUFHdkIsWUFDbUIsSUFBZ0IsRUFDVSxNQUFpQztRQUQzRCxTQUFJLEdBQUosSUFBSSxDQUFZO1FBR2pDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTBCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5RCxDQUFDOytHQVpVLFlBQVksNENBS2IsaUNBQWlDO21IQUxoQyxZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQU1JLE1BQU07MkJBQUMsaUNBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUXVvdGFVc2FnZSB9IGZyb20gJy4vbW9kZWxzL3F1b3RhLXVzYWdlLm1vZGVsJztcclxuaW1wb3J0IHsgUVVPVEFfU0VSVklDRV9DT05GSUdVUkFUSU9OX1RPS0VOIH0gZnJvbSAnLi9pbmplY3Rpb24tdG9rZW5zL3F1b3RhLXNlcnZpY2UtY29uZmlndXJhdGlvbi50b2tlbic7XHJcbmltcG9ydCB7IFF1b3RhU2VydmljZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL21vZGVscy9xdW90YS1zZXJ2aWNlLWNvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFF1b3RhU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBiYXNlVXJsITogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcclxuICAgIEBJbmplY3QoUVVPVEFfU0VSVklDRV9DT05GSUdVUkFUSU9OX1RPS0VOKSBjb25maWc6IFF1b3RhU2VydmljZUNvbmZpZ3VyYXRpb25cclxuICApIHtcclxuICAgIHRoaXMuYmFzZVVybCA9IGNvbmZpZy5hcGlVcmw7XHJcbiAgfVxyXG5cclxuICBnZXRRdW90YVVzYWdlKCk6IE9ic2VydmFibGU8eyB1c2FnZTogUXVvdGFVc2FnZVtdIH0+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHsgdXNhZ2U6IFF1b3RhVXNhZ2VbXSB9Pih0aGlzLmJhc2VVcmwpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -38,7 +38,7 @@ export class TerminologyCollectionListComponent {
38
38
  const srcKey = `"id":"${this.system.sourceLanguageCode}"`;
39
39
  const trgKey = `"id":"${this.system.targetLanguageCode}"`;
40
40
  data[this.system.systemId]?.collections.forEach((collection) => {
41
- if (JSON.stringify(collection.termCollection?.languages ?? []).includes(srcKey && trgKey)) {
41
+ if (JSON.stringify(collection.termCollection?.languages ?? []).includes(srcKey && trgKey) || !collection.isTermPortalCollection) {
42
42
  collections.push(collection);
43
43
  }
44
44
  });
@@ -67,4 +67,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
67
67
  }], glossarySelectEvent: [{
68
68
  type: Output
69
69
  }] } });
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWlub2xvZ3ktY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi90ZXJtaW5vbG9neS9jb21wb25lbnRzL3Rlcm1pbm9sb2d5LXBhbmVsL3Rlcm1pbm9sb2d5LWNvbGxlY3Rpb24tbGlzdC90ZXJtaW5vbG9neS1jb2xsZWN0aW9uLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3Rlcm1pbm9sb2d5L2NvbXBvbmVudHMvdGVybWlub2xvZ3ktcGFuZWwvdGVybWlub2xvZ3ktY29sbGVjdGlvbi1saXN0L3Rlcm1pbm9sb2d5LWNvbGxlY3Rpb24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBUTFDLE1BQU0sT0FBTyxrQ0FBa0M7SUFZN0MsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQVksQ0FBQztJQUNwRixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQTZCLENBQUM7SUFDL0QsQ0FBQztJQUlELFlBQ21CLGtCQUFzQyxFQUN0QyxNQUFnQztRQURoQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBckJ6Qyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztRQUk5RSxnQkFBVyxHQUF5QixFQUFFLENBQUM7UUFFOUIsb0JBQWUsR0FBRyxtQkFBbUIsQ0FBQztRQUN0QywyQkFBc0IsR0FBRyw0QkFBNEIsQ0FBQztRQVU5QyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQXFDakMsNEJBQXVCLEdBQUcsQ0FBQyxDQUFxQixFQUFFLENBQXFCLEVBQUUsRUFBRTtZQUNqRixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMzQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUUzQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQztRQXBDQSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQWlCLENBQUM7SUFDMUQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN4RixNQUFNLFdBQVcsR0FBeUIsRUFBRSxDQUFDO1lBRTdDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFO2dCQUMzQyxNQUFNLE1BQU0sR0FBRyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsQ0FBQztnQkFDMUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixHQUFHLENBQUM7Z0JBRTFELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtvQkFDN0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEVBQUU7d0JBQ3pGLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQzlCO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUNuRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFxQztRQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQWdDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUIsQ0FBQzsrR0F2RFUsa0NBQWtDO21HQUFsQyxrQ0FBa0Msd01DWC9DLG9wRUE4Q0E7OzRGRG5DYSxrQ0FBa0M7a0JBTDlDLFNBQVM7K0JBQ0UsaUNBQWlDO2dKQUtoQixNQUFNO3NCQUFoQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBUZXJtaW5vbG9neVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXNcIjtcclxuaW1wb3J0IHsgQ29tYmluZWRDb2xsZWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBUZXJtaW5vbG9neUNvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3NlcnZpY2VzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItdGVybWlub2xvZ3ktY29sbGVjdGlvbi1saXN0XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi90ZXJtaW5vbG9neS1jb2xsZWN0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vdGVybWlub2xvZ3ktY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVybWlub2xvZ3lDb2xsZWN0aW9uTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgc3lzdGVtITogeyBzeXN0ZW1JZDogc3RyaW5nOyBzb3VyY2VMYW5ndWFnZUNvZGU6IHN0cmluZzsgdGFyZ2V0TGFuZ3VhZ2VDb2RlOiBzdHJpbmcgfTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENvbGxlY3Rpb24hOiBDb21iaW5lZENvbGxlY3Rpb24gfCBudWxsO1xyXG4gIEBPdXRwdXQoKSBnbG9zc2FyeVNlbGVjdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21iaW5lZENvbGxlY3Rpb24gfCBudWxsPigpO1xyXG5cclxuICBhcHBOYW1lITogc3RyaW5nO1xyXG5cclxuICBjb2xsZWN0aW9uczogQ29tYmluZWRDb2xsZWN0aW9uW10gPSBbXTtcclxuXHJcbiAgcmVhZG9ubHkgbG9jYWxpemF0aW9uS2V5ID0gXCJURVJNX0NPTExFQ1RJT05TLlwiO1xyXG4gIHJlYWRvbmx5IHRvb2x0aXBMb2NhbGl6YXRpb25LZXkgPSBcIlRFUk1fQ09MTEVDVElPTlMuVE9PTFRJUFMuXCI7XHJcblxyXG4gIGdldCBoYXNBbnlDb2xsZWN0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLnRlcm1pbm9sb2d5U2VydmljZS5oYXNBbnlDb2xsZWN0aW9ucyh0aGlzLnN5c3RlbS5zeXN0ZW1JZCkgYXMgYm9vbGVhbjtcclxuICB9XHJcblxyXG4gIGdldCBoYXNFZGl0UGVybWlzc2lvbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZXJtaW5vbG9neVNlcnZpY2UuaGFzRWRpdFBlcm1pc3Npb25zIGFzIGJvb2xlYW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVybWlub2xvZ3lTZXJ2aWNlOiBUZXJtaW5vbG9neVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogVGVybWlub2xvZ3lDb25maWdTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmFwcE5hbWUgPSB0aGlzLmNvbmZpZy50ZXJtQ29uZmlnLmFwcE5hbWUgYXMgc3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRlcm1pbm9sb2d5U2VydmljZS5nZXRDb2xsZWN0aW9ucygpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICBjb25zdCBjb2xsZWN0aW9uczogQ29tYmluZWRDb2xsZWN0aW9uW10gPSBbXTtcclxuXHJcbiAgICAgIGlmIChkYXRhW3RoaXMuc3lzdGVtLnN5c3RlbUlkXT8uY29sbGVjdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBzcmNLZXkgPSBgXCJpZFwiOlwiJHt0aGlzLnN5c3RlbS5zb3VyY2VMYW5ndWFnZUNvZGV9XCJgO1xyXG4gICAgICAgIGNvbnN0IHRyZ0tleSA9IGBcImlkXCI6XCIke3RoaXMuc3lzdGVtLnRhcmdldExhbmd1YWdlQ29kZX1cImA7XHJcblxyXG4gICAgICAgIGRhdGFbdGhpcy5zeXN0ZW0uc3lzdGVtSWRdPy5jb2xsZWN0aW9ucy5mb3JFYWNoKChjb2xsZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoY29sbGVjdGlvbi50ZXJtQ29sbGVjdGlvbj8ubGFuZ3VhZ2VzID8/IFtdKS5pbmNsdWRlcyhzcmNLZXkgJiYgdHJnS2V5KSkge1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9ucy5wdXNoKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbnMgPSBjb2xsZWN0aW9ucy5zb3J0KHRoaXMuY29sbGVjdGlvbnNTb3J0RnVuY3Rpb24pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgXHJcbiAgc2VsZWN0R2xvc3NhcnkoY29sbGVjdGlvbjogQ29tYmluZWRDb2xsZWN0aW9uIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgdGhpcy5nbG9zc2FyeVNlbGVjdEV2ZW50LmVtaXQoY29sbGVjdGlvbiBhcyBDb21iaW5lZENvbGxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kubmV4dChudWxsKTtcclxuICAgIHRoaXMuZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb2xsZWN0aW9uc1NvcnRGdW5jdGlvbiA9IChhOiBDb21iaW5lZENvbGxlY3Rpb24sIGI6IENvbWJpbmVkQ29sbGVjdGlvbikgPT4ge1xyXG4gICAgY29uc3QgYU5hbWUgPSBhLm5hbWUgPz8gXCJcIjtcclxuICAgIGNvbnN0IGJOYW1lID0gYi5uYW1lID8/IFwiXCI7XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihhLmRlZmF1bHQpIC0gTnVtYmVyKGIuZGVmYXVsdCkgfHwgYU5hbWUubG9jYWxlQ29tcGFyZShiTmFtZSk7XHJcbiAgfTtcclxufVxyXG4iLCI8aGVhZGVyIGNsYXNzPVwidGxkLWNvbGxlY3Rpb24tbGlzdC1oZWFkZXJcIj5cclxuICA8aDEgY2xhc3M9XCJ0ZXJtLXdpbmRvdy10aXRsZSB0ZXh0LWwtc2VtaS1ib2xkXCI+XHJcbiAgICA8c3Bhbj57eyBsb2NhbGl6YXRpb25LZXkgKyBcIlRJVExFXCIgfCB0cmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgPC9oMT5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzQW55Q29sbGVjdGlvbnNcIj5cclxuICAgIDxwIGNsYXNzPVwidGVybS13aW5kb3ctZGVzY3JpcHRpb24gdGV4dC1zXCI+XHJcbiAgICAgIDxzcGFuPnt7IGxvY2FsaXphdGlvbktleSArIFwiREVTQ1JJUFRJT05cIiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgIDwvcD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0FueUNvbGxlY3Rpb25zXCI+XHJcbiAgICA8cCBjbGFzcz1cInRlcm0td2luZG93LXVuYXZhaWxhYmxlIHRleHQteGwtc2VtaS1ib2xkXCI+XHJcbiAgICAgIHt7IGxvY2FsaXphdGlvbktleSArIFwiVU5BVkFJTEFCTEVfR0xPU1NBUklFU1wiIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L3A+XHJcblxyXG4gICAgPHAgW2lubmVySHRtbF09XCJsb2NhbGl6YXRpb25LZXkgKyAnREVTQ1JJUFRJT05fRU1QVFknIHwgdHJhbnNsYXRlIDoge1xyXG4gICAgICBzcmNMYW5nOiBzeXN0ZW0uc291cmNlTGFuZ3VhZ2VDb2RlIHwgbGFuZ3VhZ2VUcmFuc2xhdGUsXHJcbiAgICAgIHRyZ0xhbmc6IHN5c3RlbS50YXJnZXRMYW5ndWFnZUNvZGUgfCBsYW5ndWFnZVRyYW5zbGF0ZVxyXG4gICAgfVwiIGNsYXNzPVwidGVybS13aW5kb3ctZGVzY3JpcHRpb24gdGV4dC1tXCI+PC9wPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2hlYWRlcj5cclxuPGRpdiAqbmdJZj1cImhhc0FueUNvbGxlY3Rpb25zXCIgY2xhc3M9XCJ0bGQtY29sbGVjdGlvbi1saXN0LWJvZHlcIj5cclxuICA8bWF0LXJhZGlvLWdyb3VwIFthdHRyLmFyaWEtbGFiZWxdPVwibG9jYWxpemF0aW9uS2V5ICsgJ0FSSUFfTEFCRUxTLlJBRElPX0dST1VQJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBjbGFzcz1cIm5vbmUtb3B0aW9uXCI+XHJcbiAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIFtjbGFzcy5tYXQtbWRjLXJhZGlvLWNoZWNrZWRdPVwiIXNlbGVjdGVkQ29sbGVjdGlvblwiIChjbGljayk9XCJzZWxlY3RHbG9zc2FyeShudWxsKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tLXNlbWktYm9sZFwiPlxyXG4gICAgICAgICAge3sgbG9jYWxpemF0aW9uS2V5ICsgXCJTRUxFQ1RFRF9OT05FXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvbWF0LXJhZGlvLWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbGxlY3Rpb25cIiAqbmdGb3I9XCJsZXQgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9uc1wiPlxyXG4gICAgICA8bGliLXRlcm1pbm9sb2d5LWNvbGxlY3Rpb24tY2FyZFxyXG4gICAgICAgICpuZ0lmPVwiY29sbGVjdGlvbi5zdGF0dXNcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sbGVjdGlvbi1jYXJkXCJcclxuICAgICAgICBbY29sbGVjdGlvbl09XCJjb2xsZWN0aW9uXCJcclxuICAgICAgICBbZW5naW5lSWRdPVwic3lzdGVtLnN5c3RlbUlkXCJcclxuICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRDb2xsZWN0aW9uXCJcclxuICAgICAgICBbbG9jYWxpemF0aW9uS2V5XT1cImxvY2FsaXphdGlvbktleVwiXHJcbiAgICAgICAgW3Rvb2x0aXBMb2NhbGl6YXRpb25LZXldPVwidG9vbHRpcExvY2FsaXphdGlvbktleVwiXHJcbiAgICAgICAgW2hhc0VkaXRQZXJtaXNzaW9uc109XCJoYXNFZGl0UGVybWlzc2lvbnNcIlxyXG4gICAgICAgIFtzb3VyY2VMYW5ndWFnZUNvZGVdPVwic3lzdGVtLnNvdXJjZUxhbmd1YWdlQ29kZVwiXHJcbiAgICAgICAgW3RhcmdldExhbmd1YWdlQ29kZV09XCJzeXN0ZW0udGFyZ2V0TGFuZ3VhZ2VDb2RlXCJcclxuICAgICAgICAoZ2xvc3NhcnlTZWxlY3RFdmVudCk9XCJzZWxlY3RHbG9zc2FyeSgkZXZlbnQpXCJcclxuICAgICAgPjwvbGliLXRlcm1pbm9sb2d5LWNvbGxlY3Rpb24tY2FyZD5cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LXJhZGlvLWdyb3VwPlxyXG48L2Rpdj5cclxuIl19
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWlub2xvZ3ktY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi90ZXJtaW5vbG9neS9jb21wb25lbnRzL3Rlcm1pbm9sb2d5LXBhbmVsL3Rlcm1pbm9sb2d5LWNvbGxlY3Rpb24tbGlzdC90ZXJtaW5vbG9neS1jb2xsZWN0aW9uLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWNvbW1vbi9zcmMvbGliL3Rlcm1pbm9sb2d5L2NvbXBvbmVudHMvdGVybWlub2xvZ3ktcGFuZWwvdGVybWlub2xvZ3ktY29sbGVjdGlvbi1saXN0L3Rlcm1pbm9sb2d5LWNvbGxlY3Rpb24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7O0FBUTFDLE1BQU0sT0FBTyxrQ0FBa0M7SUFZN0MsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQVksQ0FBQztJQUNwRixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQTZCLENBQUM7SUFDL0QsQ0FBQztJQUlELFlBQ21CLGtCQUFzQyxFQUN0QyxNQUFnQztRQURoQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLFdBQU0sR0FBTixNQUFNLENBQTBCO1FBckJ6Qyx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztRQUk5RSxnQkFBVyxHQUF5QixFQUFFLENBQUM7UUFFOUIsb0JBQWUsR0FBRyxtQkFBbUIsQ0FBQztRQUN0QywyQkFBc0IsR0FBRyw0QkFBNEIsQ0FBQztRQVU5QyxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQXFDakMsNEJBQXVCLEdBQUcsQ0FBQyxDQUFxQixFQUFFLENBQXFCLEVBQUUsRUFBRTtZQUNqRixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMzQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUUzQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQztRQXBDQSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQWlCLENBQUM7SUFDMUQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN4RixNQUFNLFdBQVcsR0FBeUIsRUFBRSxDQUFDO1lBRTdDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsV0FBVyxFQUFFO2dCQUMzQyxNQUFNLE1BQU0sR0FBRyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsQ0FBQztnQkFDMUQsTUFBTSxNQUFNLEdBQUcsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixHQUFHLENBQUM7Z0JBRTFELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtvQkFDN0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUU7d0JBQy9ILFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQzlCO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUVGLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUNuRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxVQUFxQztRQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFVBQWdDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUIsQ0FBQzsrR0F2RFUsa0NBQWtDO21HQUFsQyxrQ0FBa0Msd01DWC9DLG9wRUE4Q0E7OzRGRG5DYSxrQ0FBa0M7a0JBTDlDLFNBQVM7K0JBQ0UsaUNBQWlDO2dKQUtoQixNQUFNO3NCQUFoQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBUZXJtaW5vbG9neVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXNcIjtcclxuaW1wb3J0IHsgQ29tYmluZWRDb2xsZWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBUZXJtaW5vbG9neUNvbmZpZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3NlcnZpY2VzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItdGVybWlub2xvZ3ktY29sbGVjdGlvbi1saXN0XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi90ZXJtaW5vbG9neS1jb2xsZWN0aW9uLWxpc3QuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vdGVybWlub2xvZ3ktY29sbGVjdGlvbi1saXN0LmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVybWlub2xvZ3lDb2xsZWN0aW9uTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgc3lzdGVtITogeyBzeXN0ZW1JZDogc3RyaW5nOyBzb3VyY2VMYW5ndWFnZUNvZGU6IHN0cmluZzsgdGFyZ2V0TGFuZ3VhZ2VDb2RlOiBzdHJpbmcgfTtcclxuICBASW5wdXQoKSBzZWxlY3RlZENvbGxlY3Rpb24hOiBDb21iaW5lZENvbGxlY3Rpb24gfCBudWxsO1xyXG4gIEBPdXRwdXQoKSBnbG9zc2FyeVNlbGVjdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxDb21iaW5lZENvbGxlY3Rpb24gfCBudWxsPigpO1xyXG5cclxuICBhcHBOYW1lITogc3RyaW5nO1xyXG5cclxuICBjb2xsZWN0aW9uczogQ29tYmluZWRDb2xsZWN0aW9uW10gPSBbXTtcclxuXHJcbiAgcmVhZG9ubHkgbG9jYWxpemF0aW9uS2V5ID0gXCJURVJNX0NPTExFQ1RJT05TLlwiO1xyXG4gIHJlYWRvbmx5IHRvb2x0aXBMb2NhbGl6YXRpb25LZXkgPSBcIlRFUk1fQ09MTEVDVElPTlMuVE9PTFRJUFMuXCI7XHJcblxyXG4gIGdldCBoYXNBbnlDb2xsZWN0aW9ucygpIHtcclxuICAgIHJldHVybiB0aGlzLnRlcm1pbm9sb2d5U2VydmljZS5oYXNBbnlDb2xsZWN0aW9ucyh0aGlzLnN5c3RlbS5zeXN0ZW1JZCkgYXMgYm9vbGVhbjtcclxuICB9XHJcblxyXG4gIGdldCBoYXNFZGl0UGVybWlzc2lvbnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50ZXJtaW5vbG9neVNlcnZpY2UuaGFzRWRpdFBlcm1pc3Npb25zIGFzIGJvb2xlYW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVybWlub2xvZ3lTZXJ2aWNlOiBUZXJtaW5vbG9neVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogVGVybWlub2xvZ3lDb25maWdTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmFwcE5hbWUgPSB0aGlzLmNvbmZpZy50ZXJtQ29uZmlnLmFwcE5hbWUgYXMgc3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRlcm1pbm9sb2d5U2VydmljZS5nZXRDb2xsZWN0aW9ucygpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSkpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICBjb25zdCBjb2xsZWN0aW9uczogQ29tYmluZWRDb2xsZWN0aW9uW10gPSBbXTtcclxuXHJcbiAgICAgIGlmIChkYXRhW3RoaXMuc3lzdGVtLnN5c3RlbUlkXT8uY29sbGVjdGlvbnMpIHtcclxuICAgICAgICBjb25zdCBzcmNLZXkgPSBgXCJpZFwiOlwiJHt0aGlzLnN5c3RlbS5zb3VyY2VMYW5ndWFnZUNvZGV9XCJgO1xyXG4gICAgICAgIGNvbnN0IHRyZ0tleSA9IGBcImlkXCI6XCIke3RoaXMuc3lzdGVtLnRhcmdldExhbmd1YWdlQ29kZX1cImA7XHJcblxyXG4gICAgICAgIGRhdGFbdGhpcy5zeXN0ZW0uc3lzdGVtSWRdPy5jb2xsZWN0aW9ucy5mb3JFYWNoKChjb2xsZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoY29sbGVjdGlvbi50ZXJtQ29sbGVjdGlvbj8ubGFuZ3VhZ2VzID8/IFtdKS5pbmNsdWRlcyhzcmNLZXkgJiYgdHJnS2V5KSB8fCAhY29sbGVjdGlvbi5pc1Rlcm1Qb3J0YWxDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb25zLnB1c2goY29sbGVjdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9ucyA9IGNvbGxlY3Rpb25zLnNvcnQodGhpcy5jb2xsZWN0aW9uc1NvcnRGdW5jdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICBzZWxlY3RHbG9zc2FyeShjb2xsZWN0aW9uOiBDb21iaW5lZENvbGxlY3Rpb24gfCBudWxsKTogdm9pZCB7XHJcbiAgICB0aGlzLmdsb3NzYXJ5U2VsZWN0RXZlbnQuZW1pdChjb2xsZWN0aW9uIGFzIENvbWJpbmVkQ29sbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveS5uZXh0KG51bGwpO1xyXG4gICAgdGhpcy5kZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbGxlY3Rpb25zU29ydEZ1bmN0aW9uID0gKGE6IENvbWJpbmVkQ29sbGVjdGlvbiwgYjogQ29tYmluZWRDb2xsZWN0aW9uKSA9PiB7XHJcbiAgICBjb25zdCBhTmFtZSA9IGEubmFtZSA/PyBcIlwiO1xyXG4gICAgY29uc3QgYk5hbWUgPSBiLm5hbWUgPz8gXCJcIjtcclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKGEuZGVmYXVsdCkgLSBOdW1iZXIoYi5kZWZhdWx0KSB8fCBhTmFtZS5sb2NhbGVDb21wYXJlKGJOYW1lKTtcclxuICB9O1xyXG59XHJcbiIsIjxoZWFkZXIgY2xhc3M9XCJ0bGQtY29sbGVjdGlvbi1saXN0LWhlYWRlclwiPlxyXG4gIDxoMSBjbGFzcz1cInRlcm0td2luZG93LXRpdGxlIHRleHQtbC1zZW1pLWJvbGRcIj5cclxuICAgIDxzcGFuPnt7IGxvY2FsaXphdGlvbktleSArIFwiVElUTEVcIiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICA8L2gxPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNBbnlDb2xsZWN0aW9uc1wiPlxyXG4gICAgPHAgY2xhc3M9XCJ0ZXJtLXdpbmRvdy1kZXNjcmlwdGlvbiB0ZXh0LXNcIj5cclxuICAgICAgPHNwYW4+e3sgbG9jYWxpemF0aW9uS2V5ICsgXCJERVNDUklQVElPTlwiIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgPC9wPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGFzQW55Q29sbGVjdGlvbnNcIj5cclxuICAgIDxwIGNsYXNzPVwidGVybS13aW5kb3ctdW5hdmFpbGFibGUgdGV4dC14bC1zZW1pLWJvbGRcIj5cclxuICAgICAge3sgbG9jYWxpemF0aW9uS2V5ICsgXCJVTkFWQUlMQUJMRV9HTE9TU0FSSUVTXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvcD5cclxuXHJcbiAgICA8cCBbaW5uZXJIdG1sXT1cImxvY2FsaXphdGlvbktleSArICdERVNDUklQVElPTl9FTVBUWScgfCB0cmFuc2xhdGUgOiB7XHJcbiAgICAgIHNyY0xhbmc6IHN5c3RlbS5zb3VyY2VMYW5ndWFnZUNvZGUgfCBsYW5ndWFnZVRyYW5zbGF0ZSxcclxuICAgICAgdHJnTGFuZzogc3lzdGVtLnRhcmdldExhbmd1YWdlQ29kZSB8IGxhbmd1YWdlVHJhbnNsYXRlXHJcbiAgICB9XCIgY2xhc3M9XCJ0ZXJtLXdpbmRvdy1kZXNjcmlwdGlvbiB0ZXh0LW1cIj48L3A+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvaGVhZGVyPlxyXG48ZGl2ICpuZ0lmPVwiaGFzQW55Q29sbGVjdGlvbnNcIiBjbGFzcz1cInRsZC1jb2xsZWN0aW9uLWxpc3QtYm9keVwiPlxyXG4gIDxtYXQtcmFkaW8tZ3JvdXAgW2F0dHIuYXJpYS1sYWJlbF09XCJsb2NhbGl6YXRpb25LZXkgKyAnQVJJQV9MQUJFTFMuUkFESU9fR1JPVVAnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGNsYXNzPVwibm9uZS1vcHRpb25cIj5cclxuICAgICAgPG1hdC1yYWRpby1idXR0b24gW2NsYXNzLm1hdC1tZGMtcmFkaW8tY2hlY2tlZF09XCIhc2VsZWN0ZWRDb2xsZWN0aW9uXCIgKGNsaWNrKT1cInNlbGVjdEdsb3NzYXJ5KG51bGwpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW0tc2VtaS1ib2xkXCI+XHJcbiAgICAgICAgICB7eyBsb2NhbGl6YXRpb25LZXkgKyBcIlNFTEVDVEVEX05PTkVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sbGVjdGlvblwiICpuZ0Zvcj1cImxldCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zXCI+XHJcbiAgICAgIDxsaWItdGVybWlub2xvZ3ktY29sbGVjdGlvbi1jYXJkXHJcbiAgICAgICAgKm5nSWY9XCJjb2xsZWN0aW9uLnN0YXR1c1wiXHJcbiAgICAgICAgY2xhc3M9XCJjb2xsZWN0aW9uLWNhcmRcIlxyXG4gICAgICAgIFtjb2xsZWN0aW9uXT1cImNvbGxlY3Rpb25cIlxyXG4gICAgICAgIFtlbmdpbmVJZF09XCJzeXN0ZW0uc3lzdGVtSWRcIlxyXG4gICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZENvbGxlY3Rpb25cIlxyXG4gICAgICAgIFtsb2NhbGl6YXRpb25LZXldPVwibG9jYWxpemF0aW9uS2V5XCJcclxuICAgICAgICBbdG9vbHRpcExvY2FsaXphdGlvbktleV09XCJ0b29sdGlwTG9jYWxpemF0aW9uS2V5XCJcclxuICAgICAgICBbaGFzRWRpdFBlcm1pc3Npb25zXT1cImhhc0VkaXRQZXJtaXNzaW9uc1wiXHJcbiAgICAgICAgW3NvdXJjZUxhbmd1YWdlQ29kZV09XCJzeXN0ZW0uc291cmNlTGFuZ3VhZ2VDb2RlXCJcclxuICAgICAgICBbdGFyZ2V0TGFuZ3VhZ2VDb2RlXT1cInN5c3RlbS50YXJnZXRMYW5ndWFnZUNvZGVcIlxyXG4gICAgICAgIChnbG9zc2FyeVNlbGVjdEV2ZW50KT1cInNlbGVjdEdsb3NzYXJ5KCRldmVudClcIlxyXG4gICAgICA+PC9saWItdGVybWlub2xvZ3ktY29sbGVjdGlvbi1jYXJkPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbjwvZGl2PlxyXG4iXX0=