@vendure/admin-ui 2.1.0-next.7 → 2.1.1

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 (77) hide show
  1. package/catalog/catalog.module.d.ts +0 -2
  2. package/catalog/components/product-detail/product-detail.component.d.ts +2 -3
  3. package/catalog/components/product-variant-list/product-variant-list.component.d.ts +3 -2
  4. package/core/common/base-list.component.d.ts +1 -0
  5. package/core/common/version.d.ts +1 -1
  6. package/core/components/app-shell/app-shell.component.d.ts +5 -3
  7. package/core/components/notification/notification.component.d.ts +10 -2
  8. package/core/extension/register-route-component.d.ts +2 -2
  9. package/core/providers/alerts/alerts.service.d.ts +6 -1
  10. package/core/providers/data-table/data-table-filter-collection.d.ts +2 -0
  11. package/core/providers/data-table/data-table-sort-collection.d.ts +2 -0
  12. package/core/providers/localization/localization.service.d.ts +21 -0
  13. package/core/public_api.d.ts +1 -0
  14. package/core/shared/components/data-table-2/data-table-custom-component.service.d.ts +1 -1
  15. package/core/shared/components/data-table-filter-presets/data-table-filter-presets.component.d.ts +3 -2
  16. package/core/shared/components/data-table-filters/data-table-filters.component.d.ts +1 -1
  17. package/core/shared/components/dropdown/dropdown-menu.component.d.ts +4 -1
  18. package/core/shared/components/extension-host/extension-host.component.d.ts +1 -1
  19. package/core/shared/components/modal-dialog/modal-dialog.component.d.ts +10 -2
  20. package/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.d.ts +1 -1
  21. package/core/shared/shared.module.d.ts +100 -101
  22. package/esm2022/catalog/catalog.module.mjs +2 -28
  23. package/esm2022/catalog/components/product-detail/product-detail.component.mjs +20 -17
  24. package/esm2022/catalog/components/product-variant-list/product-variant-list.component.mjs +5 -3
  25. package/esm2022/core/common/base-list.component.mjs +13 -4
  26. package/esm2022/core/common/version.mjs +2 -2
  27. package/esm2022/core/components/app-shell/app-shell.component.mjs +21 -21
  28. package/esm2022/core/components/notification/notification.component.mjs +18 -9
  29. package/esm2022/core/components/theme-switcher/theme-switcher.component.mjs +2 -2
  30. package/esm2022/core/core.module.mjs +3 -1
  31. package/esm2022/core/extension/register-route-component.mjs +1 -1
  32. package/esm2022/core/providers/alerts/alerts.service.mjs +22 -8
  33. package/esm2022/core/providers/data-table/data-table-filter-collection.mjs +19 -3
  34. package/esm2022/core/providers/data-table/data-table-sort-collection.mjs +8 -2
  35. package/esm2022/core/providers/localization/localization.service.mjs +31 -0
  36. package/esm2022/core/public_api.mjs +2 -1
  37. package/esm2022/core/shared/components/affixed-input/affixed-input.component.mjs +2 -2
  38. package/esm2022/core/shared/components/data-table-2/data-table-custom-component.service.mjs +1 -1
  39. package/esm2022/core/shared/components/data-table-filter-presets/data-table-filter-presets.component.mjs +7 -5
  40. package/esm2022/core/shared/components/data-table-filters/data-table-filters.component.mjs +5 -4
  41. package/esm2022/core/shared/components/dropdown/dropdown-menu.component.mjs +31 -23
  42. package/esm2022/core/shared/components/extension-host/extension-host.component.mjs +4 -3
  43. package/esm2022/core/shared/components/modal-dialog/modal-dialog.component.mjs +19 -10
  44. package/esm2022/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.mjs +3 -3
  45. package/esm2022/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.mjs +6 -1
  46. package/esm2022/core/shared/dynamic-form-inputs/customer-group-form-input/customer-group-form-input.component.mjs +5 -3
  47. package/esm2022/core/shared/shared.module.mjs +1 -5
  48. package/esm2022/order/components/order-data-table/order-data-table.component.mjs +3 -3
  49. package/esm2022/order/components/order-table/order-table.component.mjs +3 -3
  50. package/fesm2022/vendure-admin-ui-catalog.mjs +16 -37
  51. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  52. package/fesm2022/vendure-admin-ui-core.mjs +403 -307
  53. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  54. package/fesm2022/vendure-admin-ui-order.mjs +4 -4
  55. package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
  56. package/package.json +2 -2
  57. package/static/i18n-messages/ar.json +1 -1
  58. package/static/i18n-messages/cs.json +1 -1
  59. package/static/i18n-messages/de.json +1 -1
  60. package/static/i18n-messages/en.json +1 -1
  61. package/static/i18n-messages/es.json +1 -1
  62. package/static/i18n-messages/fa.json +29 -8
  63. package/static/i18n-messages/fr.json +1 -1
  64. package/static/i18n-messages/he.json +1 -1
  65. package/static/i18n-messages/hr.json +795 -0
  66. package/static/i18n-messages/it.json +31 -31
  67. package/static/i18n-messages/ne.json +795 -0
  68. package/static/i18n-messages/pl.json +1 -1
  69. package/static/i18n-messages/pt_BR.json +1 -1
  70. package/static/i18n-messages/pt_PT.json +1 -1
  71. package/static/i18n-messages/ru.json +1 -1
  72. package/static/i18n-messages/uk.json +1 -1
  73. package/static/i18n-messages/zh_Hans.json +1 -1
  74. package/static/i18n-messages/zh_Hant.json +1 -1
  75. package/static/styles/global/_utilities.scss +6 -6
  76. package/static/theme.min.css +1 -1
  77. package/static/vendure-ui-config.json +3 -1
@@ -122,7 +122,8 @@ export class DataTableFiltersComponent {
122
122
  this.customComponent.instance.formControl = new FormControl(value ?? []);
123
123
  }
124
124
  }
125
- activate() {
125
+ activate(event) {
126
+ event.preventDefault();
126
127
  if (!this.selectedFilter) {
127
128
  return;
128
129
  }
@@ -196,11 +197,11 @@ export class DataTableFiltersComponent {
196
197
  }
197
198
  }
198
199
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: DataTableFiltersComponent, deps: [{ token: i1.I18nService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
199
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: DataTableFiltersComponent, selector: "vdr-data-table-filters", inputs: { filters: "filters", filterWithValue: "filterWithValue" }, host: { listeners: { "window:keydown.f": "onFKeyPress($event)" } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true, static: true }, { propertyName: "customComponentHost", first: true, predicate: ["customComponentHost"], descendants: true, read: CustomFilterComponentDirective }], ngImport: i0, template: "<vdr-dropdown [manualToggle]=\"true\" #dropdown>\r\n <div class=\"filter-button\" [ngClass]=\"state\">\r\n <clr-icon shape=\"plus\" size=\"12\" *ngIf=\"state === 'new'\"></clr-icon>\r\n <button *ngIf=\"state === 'active'\" class=\"remove\" (click)=\"deactivate()\">\r\n <clr-icon shape=\"times\" size=\"12\"></clr-icon>\r\n </button>\r\n <button vdrDropdownTrigger class=\"\">\r\n <span *ngIf=\"state === 'new'\"\r\n >{{ 'common.add-filter' | translate }} <span class=\"filter-hotkey\">f</span></span\r\n >\r\n <span *ngIf=\"state === 'active'\">\r\n <vdr-data-table-filter-label\r\n [filterWithValue]=\"filterWithValue\"\r\n ></vdr-data-table-filter-label>\r\n </span>\r\n <clr-icon shape=\"ellipsis-vertical\" size=\"12\"></clr-icon>\r\n </button>\r\n </div>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <div *ngIf=\"!selectedFilter\">\r\n <div class=\"filter-heading\">Filter by:</div>\r\n <div *ngFor=\"let filter of filters.getFilters()\">\r\n <button vdrDropdownItem (click)=\"selectFilter(filter)\">\r\n <vdr-localized-text [text]=\"filter?.label\" />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"filter-heading\" *ngIf=\"selectedFilter\">\r\n Filter by <vdr-localized-text [text]=\"selectedFilter.label\" />:\r\n </div>\r\n <div class=\"mx-2 mt-1\">\r\n <div vdrCustomFilterComponentHost #customComponentHost></div>\r\n </div>\r\n <form *ngIf=\"selectedFilter\" class=\"\" [cdkTrapFocus]=\"true\" [cdkTrapFocusAutoCapture]=\"true\">\r\n <ng-container *ngIf=\"selectedFilter.type.kind !== 'custom'\">\r\n <div class=\"mx-2 mt-1\" [ngSwitch]=\"selectedFilter.type.kind\">\r\n <div *ngSwitchCase=\"'select'\" [formGroup]=\"formControl\">\r\n <label *ngFor=\"let option of $any(selectedFilter.type).options; index as i\">\r\n <input type=\"checkbox\" [formControlName]=\"i\" />\r\n <span>{{ option.label | translate }}</span>\r\n </label>\r\n </div>\r\n <div *ngSwitchCase=\"'boolean'\">\r\n <label\r\n ><input type=\"checkbox\" [formControl]=\"formControl\" clrToggle />\r\n <span *ngIf=\"formControl.value\">{{ 'common.boolean-true' | translate }}</span>\r\n <span *ngIf=\"!formControl.value\">{{ 'common.boolean-false' | translate }}</span>\r\n </label>\r\n </div>\r\n <div *ngSwitchCase=\"'text'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"contains\">\r\n {{ 'common.operator-contains' | translate }}\r\n </option>\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"notContains\">\r\n {{ 'common.operator-not-contains' | translate }}\r\n </option>\r\n <option value=\"notEq\">{{ 'common.operator-not-eq' | translate }}</option>\r\n <option value=\"regex\">{{ 'common.operator-regex' | translate }}</option>\r\n </select>\r\n </div>\r\n <input type=\"text\" formControlName=\"term\" />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'id'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"notEq\">{{ 'common.operator-not-eq' | translate }}</option>\r\n </select>\r\n </div>\r\n <input type=\"text\" formControlName=\"term\" />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'number'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"gt\">{{ 'common.operator-gt' | translate }}</option>\r\n <option value=\"lt\">{{ 'common.operator-lt' | translate }}</option>\r\n </select>\r\n </div>\r\n <input\r\n *ngIf=\"$any(selectedFilter.type).inputType !== 'currency'\"\r\n type=\"text\"\r\n formControlName=\"amount\"\r\n />\r\n <vdr-currency-input\r\n *ngIf=\"$any(selectedFilter.type).inputType === 'currency'\"\r\n formControlName=\"amount\"\r\n />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'dateRange'\">\r\n <div [formGroup]=\"formControl\">\r\n <vdr-form-field [label]=\"'common.data-table-filter-date-mode' | translate\">\r\n <select name=\"mode\" formControlName=\"mode\" class=\"mb-1\">\r\n <option value=\"relative\">\r\n {{ 'common.data-table-filter-date-relative' | translate }}\r\n </option>\r\n <option value=\"range\">\r\n {{ 'common.data-table-filter-date-range' | translate }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <ng-container *ngIf=\"formControl.get('mode')?.value === 'relative'\">\r\n <div class=\"flex mt-2\">\r\n <vdr-form-field class=\"mr-1\">\r\n <input type=\"number\" min=\"1\" formControlName=\"relativeValue\" />\r\n </vdr-form-field>\r\n <vdr-form-field>\r\n <select name=\"mode\" formControlName=\"relativeUnit\">\r\n <option value=\"day\">{{ 'datetime.day' | translate }}</option>\r\n <option value=\"month\">{{ 'datetime.month' | translate }}</option>\r\n <option value=\"year\">{{ 'datetime.year' | translate }}</option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"formControl.get('mode')?.value === 'range'\">\r\n <label>\r\n <div>{{ 'common.start-date' | translate }}</div>\r\n </label>\r\n <vdr-datetime-picker formControlName=\"start\"></vdr-datetime-picker>\r\n <label>\r\n <div>{{ 'common.end-date' | translate }}</div>\r\n </label>\r\n <vdr-datetime-picker formControlName=\"end\"></vdr-datetime-picker>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"apply-wrapper mt-2\">\r\n <button class=\"button\" (click)=\"activate()\" [disabled]=\"!formControl?.valid\">\r\n <span>{{ 'common.apply' | translate }}</span>\r\n <clr-icon shape=\"check\"></clr-icon>\r\n </button>\r\n </div>\r\n </form>\r\n </vdr-dropdown-menu>\r\n</vdr-dropdown>\r\n", styles: [":host{display:block}.filter-button{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;padding:0 var(--space-unit);height:calc(var(--space-unit) * 3);font-size:var(--font-size-xs);border-radius:var(--border-radius-lg);background-color:var(--color-button-small-bg);color:var(--color-button-small-text)}.filter-button>button{border:none;gap:12px;cursor:pointer;background-color:transparent;display:flex;align-items:center;height:calc(var(--space-unit) * 2);border-radius:var(--border-radius-lg);color:var(--color-button-small-text)}.filter-button.active{background-color:var(--color-primary-700);color:var(--color-primary-100)}.filter-button.active>button{color:var(--color-primary-100)}label{display:flex;align-items:center;gap:var(--space-unit);margin-bottom:calc(var(--space-unit) * .5)}.filter-heading{font-size:var(--font-size-xs);text-transform:uppercase;color:var(--color-weight-600);margin:0 calc(var(--space-unit) * 2)}.apply-wrapper{display:flex;justify-content:flex-end;padding-inline-end:calc(var(--space-unit) * 2)}.filter-hotkey{font-size:var(--font-size-xs);color:var(--color-weight-500);border:1px solid var(--color-weight-200);background-color:var(--color-weight-100);border-radius:var(--border-radius);padding:0 3px;text-transform:uppercase;margin-inline-start:3px}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i2.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i6.CurrencyInputComponent, selector: "vdr-currency-input", inputs: ["disabled", "readonly", "value", "currencyCode"], outputs: ["valueChange"] }, { kind: "component", type: i7.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i8.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i9.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i10.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i11.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "directive", type: i12.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { kind: "component", type: i13.DatetimePickerComponent, selector: "vdr-datetime-picker", inputs: ["yearRange", "weekStartDay", "timeGranularityInterval", "min", "max", "readonly"] }, { kind: "component", type: i14.DataTableFilterLabelComponent, selector: "vdr-data-table-filter-label", inputs: ["filterWithValue"] }, { kind: "directive", type: i15.CustomFilterComponentDirective, selector: "[vdrCustomFilterComponentHost]" }, { kind: "component", type: i16.LocalizedTextComponent, selector: "vdr-localized-text", inputs: ["text"] }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
200
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: DataTableFiltersComponent, selector: "vdr-data-table-filters", inputs: { filters: "filters", filterWithValue: "filterWithValue" }, host: { listeners: { "window:keydown.f": "onFKeyPress($event)" } }, viewQueries: [{ propertyName: "dropdown", first: true, predicate: ["dropdown"], descendants: true, static: true }, { propertyName: "customComponentHost", first: true, predicate: ["customComponentHost"], descendants: true, read: CustomFilterComponentDirective }], ngImport: i0, template: "<vdr-dropdown [manualToggle]=\"true\" #dropdown>\r\n <div class=\"filter-button\" [ngClass]=\"state\">\r\n <clr-icon shape=\"plus\" size=\"12\" *ngIf=\"state === 'new'\"></clr-icon>\r\n <button *ngIf=\"state === 'active'\" class=\"remove\" (click)=\"deactivate()\">\r\n <clr-icon shape=\"times\" size=\"12\"></clr-icon>\r\n </button>\r\n <button vdrDropdownTrigger class=\"\">\r\n <span *ngIf=\"state === 'new'\"\r\n >{{ 'common.add-filter' | translate }} <span class=\"filter-hotkey\">f</span></span\r\n >\r\n <span *ngIf=\"state === 'active'\">\r\n <vdr-data-table-filter-label\r\n [filterWithValue]=\"filterWithValue\"\r\n ></vdr-data-table-filter-label>\r\n </span>\r\n <clr-icon shape=\"ellipsis-vertical\" size=\"12\"></clr-icon>\r\n </button>\r\n </div>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <div *ngIf=\"!selectedFilter\">\r\n <div class=\"filter-heading\">Filter by:</div>\r\n <div *ngFor=\"let filter of filters.getFilters()\">\r\n <button vdrDropdownItem (click)=\"selectFilter(filter)\">\r\n <vdr-localized-text [text]=\"filter?.label\" />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"filter-heading\" *ngIf=\"selectedFilter\">\r\n Filter by <vdr-localized-text [text]=\"selectedFilter.label\" />:\r\n </div>\r\n <div class=\"mx-2 mt-1\">\r\n <div vdrCustomFilterComponentHost #customComponentHost></div>\r\n </div>\r\n <form *ngIf=\"selectedFilter\" class=\"\" [cdkTrapFocus]=\"true\" [cdkTrapFocusAutoCapture]=\"true\">\r\n <ng-container *ngIf=\"selectedFilter.type.kind !== 'custom'\">\r\n <div class=\"mx-2 mt-1\" [ngSwitch]=\"selectedFilter.type.kind\">\r\n <div *ngSwitchCase=\"'select'\" [formGroup]=\"formControl\">\r\n <label *ngFor=\"let option of $any(selectedFilter.type).options; index as i\">\r\n <input type=\"checkbox\" [formControlName]=\"i\" />\r\n <span>{{ option.label | translate }}</span>\r\n </label>\r\n </div>\r\n <div *ngSwitchCase=\"'boolean'\">\r\n <label\r\n ><input type=\"checkbox\" [formControl]=\"formControl\" clrToggle />\r\n <span *ngIf=\"formControl.value\">{{ 'common.boolean-true' | translate }}</span>\r\n <span *ngIf=\"!formControl.value\">{{ 'common.boolean-false' | translate }}</span>\r\n </label>\r\n </div>\r\n <div *ngSwitchCase=\"'text'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"contains\">\r\n {{ 'common.operator-contains' | translate }}\r\n </option>\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"notContains\">\r\n {{ 'common.operator-not-contains' | translate }}\r\n </option>\r\n <option value=\"notEq\">{{ 'common.operator-not-eq' | translate }}</option>\r\n <option value=\"regex\">{{ 'common.operator-regex' | translate }}</option>\r\n </select>\r\n </div>\r\n <input type=\"text\" formControlName=\"term\" />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'id'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"notEq\">{{ 'common.operator-not-eq' | translate }}</option>\r\n </select>\r\n </div>\r\n <input type=\"text\" formControlName=\"term\" />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'number'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"gt\">{{ 'common.operator-gt' | translate }}</option>\r\n <option value=\"lt\">{{ 'common.operator-lt' | translate }}</option>\r\n </select>\r\n </div>\r\n <input\r\n *ngIf=\"$any(selectedFilter.type).inputType !== 'currency'\"\r\n type=\"text\"\r\n formControlName=\"amount\"\r\n />\r\n <vdr-currency-input\r\n *ngIf=\"$any(selectedFilter.type).inputType === 'currency'\"\r\n formControlName=\"amount\"\r\n />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'dateRange'\">\r\n <div [formGroup]=\"formControl\">\r\n <vdr-form-field [label]=\"'common.data-table-filter-date-mode' | translate\">\r\n <select name=\"mode\" formControlName=\"mode\" class=\"mb-1\">\r\n <option value=\"relative\">\r\n {{ 'common.data-table-filter-date-relative' | translate }}\r\n </option>\r\n <option value=\"range\">\r\n {{ 'common.data-table-filter-date-range' | translate }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <ng-container *ngIf=\"formControl.get('mode')?.value === 'relative'\">\r\n <div class=\"flex mt-2\">\r\n <vdr-form-field class=\"mr-1\">\r\n <input type=\"number\" min=\"1\" formControlName=\"relativeValue\" />\r\n </vdr-form-field>\r\n <vdr-form-field>\r\n <select name=\"mode\" formControlName=\"relativeUnit\">\r\n <option value=\"day\">{{ 'datetime.day' | translate }}</option>\r\n <option value=\"month\">{{ 'datetime.month' | translate }}</option>\r\n <option value=\"year\">{{ 'datetime.year' | translate }}</option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"formControl.get('mode')?.value === 'range'\">\r\n <label>\r\n <div>{{ 'common.start-date' | translate }}</div>\r\n </label>\r\n <vdr-datetime-picker formControlName=\"start\"></vdr-datetime-picker>\r\n <label>\r\n <div>{{ 'common.end-date' | translate }}</div>\r\n </label>\r\n <vdr-datetime-picker formControlName=\"end\"></vdr-datetime-picker>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"apply-wrapper mt-2\">\r\n <button class=\"button\" (click)=\"activate($event)\" [disabled]=\"!formControl?.valid\">\r\n <span>{{ 'common.apply' | translate }}</span>\r\n <clr-icon shape=\"check\"></clr-icon>\r\n </button>\r\n </div>\r\n </form>\r\n </vdr-dropdown-menu>\r\n</vdr-dropdown>\r\n", styles: [":host{display:block}.filter-button{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;padding:0 var(--space-unit);height:calc(var(--space-unit) * 3);font-size:var(--font-size-xs);border-radius:var(--border-radius-lg);background-color:var(--color-button-small-bg);color:var(--color-button-small-text)}.filter-button>button{border:none;gap:12px;cursor:pointer;background-color:transparent;display:flex;align-items:center;height:calc(var(--space-unit) * 2);border-radius:var(--border-radius-lg);color:var(--color-button-small-text)}.filter-button.active{background-color:var(--color-primary-700);color:var(--color-primary-100)}.filter-button.active>button{color:var(--color-primary-100)}label{display:flex;align-items:center;gap:var(--space-unit);margin-bottom:calc(var(--space-unit) * .5)}.filter-heading{font-size:var(--font-size-xs);text-transform:uppercase;color:var(--color-weight-600);margin:0 calc(var(--space-unit) * 2)}.apply-wrapper{display:flex;justify-content:flex-end;padding-inline-end:calc(var(--space-unit) * 2)}.filter-hotkey{font-size:var(--font-size-xs);color:var(--color-weight-500);border:1px solid var(--color-weight-200);background-color:var(--color-weight-100);border-radius:var(--border-radius);padding:0 3px;text-transform:uppercase;margin-inline-start:3px}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i2.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i2.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i5.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i6.CurrencyInputComponent, selector: "vdr-currency-input", inputs: ["disabled", "readonly", "value", "currencyCode"], outputs: ["valueChange"] }, { kind: "component", type: i7.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i8.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i9.DropdownComponent, selector: "vdr-dropdown", inputs: ["manualToggle"] }, { kind: "component", type: i10.DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: ["vdrPosition", "customClasses"] }, { kind: "directive", type: i11.DropdownTriggerDirective, selector: "[vdrDropdownTrigger]" }, { kind: "directive", type: i12.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { kind: "component", type: i13.DatetimePickerComponent, selector: "vdr-datetime-picker", inputs: ["yearRange", "weekStartDay", "timeGranularityInterval", "min", "max", "readonly"] }, { kind: "component", type: i14.DataTableFilterLabelComponent, selector: "vdr-data-table-filter-label", inputs: ["filterWithValue"] }, { kind: "directive", type: i15.CustomFilterComponentDirective, selector: "[vdrCustomFilterComponentHost]" }, { kind: "component", type: i16.LocalizedTextComponent, selector: "vdr-localized-text", inputs: ["text"] }, { kind: "pipe", type: i17.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
200
201
  }
201
202
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: DataTableFiltersComponent, decorators: [{
202
203
  type: Component,
203
- args: [{ selector: 'vdr-data-table-filters', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-dropdown [manualToggle]=\"true\" #dropdown>\r\n <div class=\"filter-button\" [ngClass]=\"state\">\r\n <clr-icon shape=\"plus\" size=\"12\" *ngIf=\"state === 'new'\"></clr-icon>\r\n <button *ngIf=\"state === 'active'\" class=\"remove\" (click)=\"deactivate()\">\r\n <clr-icon shape=\"times\" size=\"12\"></clr-icon>\r\n </button>\r\n <button vdrDropdownTrigger class=\"\">\r\n <span *ngIf=\"state === 'new'\"\r\n >{{ 'common.add-filter' | translate }} <span class=\"filter-hotkey\">f</span></span\r\n >\r\n <span *ngIf=\"state === 'active'\">\r\n <vdr-data-table-filter-label\r\n [filterWithValue]=\"filterWithValue\"\r\n ></vdr-data-table-filter-label>\r\n </span>\r\n <clr-icon shape=\"ellipsis-vertical\" size=\"12\"></clr-icon>\r\n </button>\r\n </div>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <div *ngIf=\"!selectedFilter\">\r\n <div class=\"filter-heading\">Filter by:</div>\r\n <div *ngFor=\"let filter of filters.getFilters()\">\r\n <button vdrDropdownItem (click)=\"selectFilter(filter)\">\r\n <vdr-localized-text [text]=\"filter?.label\" />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"filter-heading\" *ngIf=\"selectedFilter\">\r\n Filter by <vdr-localized-text [text]=\"selectedFilter.label\" />:\r\n </div>\r\n <div class=\"mx-2 mt-1\">\r\n <div vdrCustomFilterComponentHost #customComponentHost></div>\r\n </div>\r\n <form *ngIf=\"selectedFilter\" class=\"\" [cdkTrapFocus]=\"true\" [cdkTrapFocusAutoCapture]=\"true\">\r\n <ng-container *ngIf=\"selectedFilter.type.kind !== 'custom'\">\r\n <div class=\"mx-2 mt-1\" [ngSwitch]=\"selectedFilter.type.kind\">\r\n <div *ngSwitchCase=\"'select'\" [formGroup]=\"formControl\">\r\n <label *ngFor=\"let option of $any(selectedFilter.type).options; index as i\">\r\n <input type=\"checkbox\" [formControlName]=\"i\" />\r\n <span>{{ option.label | translate }}</span>\r\n </label>\r\n </div>\r\n <div *ngSwitchCase=\"'boolean'\">\r\n <label\r\n ><input type=\"checkbox\" [formControl]=\"formControl\" clrToggle />\r\n <span *ngIf=\"formControl.value\">{{ 'common.boolean-true' | translate }}</span>\r\n <span *ngIf=\"!formControl.value\">{{ 'common.boolean-false' | translate }}</span>\r\n </label>\r\n </div>\r\n <div *ngSwitchCase=\"'text'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"contains\">\r\n {{ 'common.operator-contains' | translate }}\r\n </option>\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"notContains\">\r\n {{ 'common.operator-not-contains' | translate }}\r\n </option>\r\n <option value=\"notEq\">{{ 'common.operator-not-eq' | translate }}</option>\r\n <option value=\"regex\">{{ 'common.operator-regex' | translate }}</option>\r\n </select>\r\n </div>\r\n <input type=\"text\" formControlName=\"term\" />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'id'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"notEq\">{{ 'common.operator-not-eq' | translate }}</option>\r\n </select>\r\n </div>\r\n <input type=\"text\" formControlName=\"term\" />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'number'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"gt\">{{ 'common.operator-gt' | translate }}</option>\r\n <option value=\"lt\">{{ 'common.operator-lt' | translate }}</option>\r\n </select>\r\n </div>\r\n <input\r\n *ngIf=\"$any(selectedFilter.type).inputType !== 'currency'\"\r\n type=\"text\"\r\n formControlName=\"amount\"\r\n />\r\n <vdr-currency-input\r\n *ngIf=\"$any(selectedFilter.type).inputType === 'currency'\"\r\n formControlName=\"amount\"\r\n />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'dateRange'\">\r\n <div [formGroup]=\"formControl\">\r\n <vdr-form-field [label]=\"'common.data-table-filter-date-mode' | translate\">\r\n <select name=\"mode\" formControlName=\"mode\" class=\"mb-1\">\r\n <option value=\"relative\">\r\n {{ 'common.data-table-filter-date-relative' | translate }}\r\n </option>\r\n <option value=\"range\">\r\n {{ 'common.data-table-filter-date-range' | translate }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <ng-container *ngIf=\"formControl.get('mode')?.value === 'relative'\">\r\n <div class=\"flex mt-2\">\r\n <vdr-form-field class=\"mr-1\">\r\n <input type=\"number\" min=\"1\" formControlName=\"relativeValue\" />\r\n </vdr-form-field>\r\n <vdr-form-field>\r\n <select name=\"mode\" formControlName=\"relativeUnit\">\r\n <option value=\"day\">{{ 'datetime.day' | translate }}</option>\r\n <option value=\"month\">{{ 'datetime.month' | translate }}</option>\r\n <option value=\"year\">{{ 'datetime.year' | translate }}</option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"formControl.get('mode')?.value === 'range'\">\r\n <label>\r\n <div>{{ 'common.start-date' | translate }}</div>\r\n </label>\r\n <vdr-datetime-picker formControlName=\"start\"></vdr-datetime-picker>\r\n <label>\r\n <div>{{ 'common.end-date' | translate }}</div>\r\n </label>\r\n <vdr-datetime-picker formControlName=\"end\"></vdr-datetime-picker>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"apply-wrapper mt-2\">\r\n <button class=\"button\" (click)=\"activate()\" [disabled]=\"!formControl?.valid\">\r\n <span>{{ 'common.apply' | translate }}</span>\r\n <clr-icon shape=\"check\"></clr-icon>\r\n </button>\r\n </div>\r\n </form>\r\n </vdr-dropdown-menu>\r\n</vdr-dropdown>\r\n", styles: [":host{display:block}.filter-button{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;padding:0 var(--space-unit);height:calc(var(--space-unit) * 3);font-size:var(--font-size-xs);border-radius:var(--border-radius-lg);background-color:var(--color-button-small-bg);color:var(--color-button-small-text)}.filter-button>button{border:none;gap:12px;cursor:pointer;background-color:transparent;display:flex;align-items:center;height:calc(var(--space-unit) * 2);border-radius:var(--border-radius-lg);color:var(--color-button-small-text)}.filter-button.active{background-color:var(--color-primary-700);color:var(--color-primary-100)}.filter-button.active>button{color:var(--color-primary-100)}label{display:flex;align-items:center;gap:var(--space-unit);margin-bottom:calc(var(--space-unit) * .5)}.filter-heading{font-size:var(--font-size-xs);text-transform:uppercase;color:var(--color-weight-600);margin:0 calc(var(--space-unit) * 2)}.apply-wrapper{display:flex;justify-content:flex-end;padding-inline-end:calc(var(--space-unit) * 2)}.filter-hotkey{font-size:var(--font-size-xs);color:var(--color-weight-500);border:1px solid var(--color-weight-200);background-color:var(--color-weight-100);border-radius:var(--border-radius);padding:0 3px;text-transform:uppercase;margin-inline-start:3px}\n"] }]
204
+ args: [{ selector: 'vdr-data-table-filters', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-dropdown [manualToggle]=\"true\" #dropdown>\r\n <div class=\"filter-button\" [ngClass]=\"state\">\r\n <clr-icon shape=\"plus\" size=\"12\" *ngIf=\"state === 'new'\"></clr-icon>\r\n <button *ngIf=\"state === 'active'\" class=\"remove\" (click)=\"deactivate()\">\r\n <clr-icon shape=\"times\" size=\"12\"></clr-icon>\r\n </button>\r\n <button vdrDropdownTrigger class=\"\">\r\n <span *ngIf=\"state === 'new'\"\r\n >{{ 'common.add-filter' | translate }} <span class=\"filter-hotkey\">f</span></span\r\n >\r\n <span *ngIf=\"state === 'active'\">\r\n <vdr-data-table-filter-label\r\n [filterWithValue]=\"filterWithValue\"\r\n ></vdr-data-table-filter-label>\r\n </span>\r\n <clr-icon shape=\"ellipsis-vertical\" size=\"12\"></clr-icon>\r\n </button>\r\n </div>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-left\">\r\n <div *ngIf=\"!selectedFilter\">\r\n <div class=\"filter-heading\">Filter by:</div>\r\n <div *ngFor=\"let filter of filters.getFilters()\">\r\n <button vdrDropdownItem (click)=\"selectFilter(filter)\">\r\n <vdr-localized-text [text]=\"filter?.label\" />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"filter-heading\" *ngIf=\"selectedFilter\">\r\n Filter by <vdr-localized-text [text]=\"selectedFilter.label\" />:\r\n </div>\r\n <div class=\"mx-2 mt-1\">\r\n <div vdrCustomFilterComponentHost #customComponentHost></div>\r\n </div>\r\n <form *ngIf=\"selectedFilter\" class=\"\" [cdkTrapFocus]=\"true\" [cdkTrapFocusAutoCapture]=\"true\">\r\n <ng-container *ngIf=\"selectedFilter.type.kind !== 'custom'\">\r\n <div class=\"mx-2 mt-1\" [ngSwitch]=\"selectedFilter.type.kind\">\r\n <div *ngSwitchCase=\"'select'\" [formGroup]=\"formControl\">\r\n <label *ngFor=\"let option of $any(selectedFilter.type).options; index as i\">\r\n <input type=\"checkbox\" [formControlName]=\"i\" />\r\n <span>{{ option.label | translate }}</span>\r\n </label>\r\n </div>\r\n <div *ngSwitchCase=\"'boolean'\">\r\n <label\r\n ><input type=\"checkbox\" [formControl]=\"formControl\" clrToggle />\r\n <span *ngIf=\"formControl.value\">{{ 'common.boolean-true' | translate }}</span>\r\n <span *ngIf=\"!formControl.value\">{{ 'common.boolean-false' | translate }}</span>\r\n </label>\r\n </div>\r\n <div *ngSwitchCase=\"'text'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"contains\">\r\n {{ 'common.operator-contains' | translate }}\r\n </option>\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"notContains\">\r\n {{ 'common.operator-not-contains' | translate }}\r\n </option>\r\n <option value=\"notEq\">{{ 'common.operator-not-eq' | translate }}</option>\r\n <option value=\"regex\">{{ 'common.operator-regex' | translate }}</option>\r\n </select>\r\n </div>\r\n <input type=\"text\" formControlName=\"term\" />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'id'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"notEq\">{{ 'common.operator-not-eq' | translate }}</option>\r\n </select>\r\n </div>\r\n <input type=\"text\" formControlName=\"term\" />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'number'\">\r\n <div [formGroup]=\"formControl\">\r\n <div>\r\n <select name=\"options\" formControlName=\"operator\" class=\"mb-1\">\r\n <option value=\"eq\">{{ 'common.operator-eq' | translate }}</option>\r\n <option value=\"gt\">{{ 'common.operator-gt' | translate }}</option>\r\n <option value=\"lt\">{{ 'common.operator-lt' | translate }}</option>\r\n </select>\r\n </div>\r\n <input\r\n *ngIf=\"$any(selectedFilter.type).inputType !== 'currency'\"\r\n type=\"text\"\r\n formControlName=\"amount\"\r\n />\r\n <vdr-currency-input\r\n *ngIf=\"$any(selectedFilter.type).inputType === 'currency'\"\r\n formControlName=\"amount\"\r\n />\r\n </div>\r\n </div>\r\n <div *ngSwitchCase=\"'dateRange'\">\r\n <div [formGroup]=\"formControl\">\r\n <vdr-form-field [label]=\"'common.data-table-filter-date-mode' | translate\">\r\n <select name=\"mode\" formControlName=\"mode\" class=\"mb-1\">\r\n <option value=\"relative\">\r\n {{ 'common.data-table-filter-date-relative' | translate }}\r\n </option>\r\n <option value=\"range\">\r\n {{ 'common.data-table-filter-date-range' | translate }}\r\n </option>\r\n </select>\r\n </vdr-form-field>\r\n <ng-container *ngIf=\"formControl.get('mode')?.value === 'relative'\">\r\n <div class=\"flex mt-2\">\r\n <vdr-form-field class=\"mr-1\">\r\n <input type=\"number\" min=\"1\" formControlName=\"relativeValue\" />\r\n </vdr-form-field>\r\n <vdr-form-field>\r\n <select name=\"mode\" formControlName=\"relativeUnit\">\r\n <option value=\"day\">{{ 'datetime.day' | translate }}</option>\r\n <option value=\"month\">{{ 'datetime.month' | translate }}</option>\r\n <option value=\"year\">{{ 'datetime.year' | translate }}</option>\r\n </select>\r\n </vdr-form-field>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngIf=\"formControl.get('mode')?.value === 'range'\">\r\n <label>\r\n <div>{{ 'common.start-date' | translate }}</div>\r\n </label>\r\n <vdr-datetime-picker formControlName=\"start\"></vdr-datetime-picker>\r\n <label>\r\n <div>{{ 'common.end-date' | translate }}</div>\r\n </label>\r\n <vdr-datetime-picker formControlName=\"end\"></vdr-datetime-picker>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <div class=\"apply-wrapper mt-2\">\r\n <button class=\"button\" (click)=\"activate($event)\" [disabled]=\"!formControl?.valid\">\r\n <span>{{ 'common.apply' | translate }}</span>\r\n <clr-icon shape=\"check\"></clr-icon>\r\n </button>\r\n </div>\r\n </form>\r\n </vdr-dropdown-menu>\r\n</vdr-dropdown>\r\n", styles: [":host{display:block}.filter-button{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;padding:0 var(--space-unit);height:calc(var(--space-unit) * 3);font-size:var(--font-size-xs);border-radius:var(--border-radius-lg);background-color:var(--color-button-small-bg);color:var(--color-button-small-text)}.filter-button>button{border:none;gap:12px;cursor:pointer;background-color:transparent;display:flex;align-items:center;height:calc(var(--space-unit) * 2);border-radius:var(--border-radius-lg);color:var(--color-button-small-text)}.filter-button.active{background-color:var(--color-primary-700);color:var(--color-primary-100)}.filter-button.active>button{color:var(--color-primary-100)}label{display:flex;align-items:center;gap:var(--space-unit);margin-bottom:calc(var(--space-unit) * .5)}.filter-heading{font-size:var(--font-size-xs);text-transform:uppercase;color:var(--color-weight-600);margin:0 calc(var(--space-unit) * 2)}.apply-wrapper{display:flex;justify-content:flex-end;padding-inline-end:calc(var(--space-unit) * 2)}.filter-hotkey{font-size:var(--font-size-xs);color:var(--color-weight-500);border:1px solid var(--color-weight-200);background-color:var(--color-weight-100);border-radius:var(--border-radius);padding:0 3px;text-transform:uppercase;margin-inline-start:3px}\n"] }]
204
205
  }], ctorParameters: function () { return [{ type: i1.I18nService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { filters: [{
205
206
  type: Input
206
207
  }], filterWithValue: [{
@@ -215,4 +216,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
215
216
  type: HostListener,
216
217
  args: ['window:keydown.f', ['$event']]
217
218
  }] } });
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvZGF0YS10YWJsZS1maWx0ZXJzL2RhdGEtdGFibGUtZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2RhdGEtdGFibGUtZmlsdGVycy9kYXRhLXRhYmxlLWZpbHRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQVUvRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFyRixNQUFNLE9BQU8seUJBQXlCO0lBSWxDLElBQ0ksbUJBQW1CLENBQUMsT0FBdUM7UUFDM0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztJQUN4QyxDQUFDO0lBUUQsV0FBVyxDQUFDLEtBQW9CO1FBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sWUFBWSxXQUFXLEVBQUU7WUFDckMsSUFDSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPO2dCQUNoQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxVQUFVO2dCQUNuQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFDcEQ7Z0JBQ0UsT0FBTzth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QUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkM7YUFBTTtZQUNILElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakQ7SUFDTCxDQUFDOzhHQXpNUSx5QkFBeUI7a0dBQXpCLHlCQUF5QixrWkFJdUIsOEJBQThCLDZCQ2pDM0Ysb2dTQW9KQTs7MkZEdkhhLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDSSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU07a0lBR3RDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNtQyxRQUFRO3NCQUFoRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRW5DLG1CQUFtQjtzQkFEdEIsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFO2dCQVd6RixXQUFXO3NCQURWLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb21wb25lbnRSZWYsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xyXG5pbXBvcnQgeyBGb3JtSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29tcG9uZW50LXJlZ2lzdHJ5LXR5cGVzJztcclxuaW1wb3J0IHsgRGF0ZU9wZXJhdG9ycyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9nZW5lcmF0ZWQtdHlwZXMnO1xyXG5pbXBvcnQgeyBEYXRhVGFibGVGaWx0ZXIsIEtpbmRWYWx1ZU1hcCB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyJztcclxuaW1wb3J0IHtcclxuICAgIERhdGFUYWJsZUZpbHRlckNvbGxlY3Rpb24sXHJcbiAgICBGaWx0ZXJXaXRoVmFsdWUsXHJcbn0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXItY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2kxOG4vaTE4bi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21GaWx0ZXJDb21wb25lbnREaXJlY3RpdmUgfSBmcm9tICcuL2N1c3RvbS1maWx0ZXItY29tcG9uZW50LmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWRhdGEtdGFibGUtZmlsdGVycycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS1maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUtZmlsdGVycy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBASW5wdXQoKSBmaWx0ZXJzOiBEYXRhVGFibGVGaWx0ZXJDb2xsZWN0aW9uO1xyXG4gICAgQElucHV0KCkgZmlsdGVyV2l0aFZhbHVlPzogRmlsdGVyV2l0aFZhbHVlO1xyXG4gICAgQFZpZXdDaGlsZCgnZHJvcGRvd24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBkcm9wZG93bjogRHJvcGRvd25Db21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdjdXN0b21Db21wb25lbnRIb3N0JywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBDdXN0b21GaWx0ZXJDb21wb25lbnREaXJlY3RpdmUgfSlcclxuICAgIHNldCBjdXN0b21Db21wb25lbnRIb3N0KGNvbnRlbnQ6IEN1c3RvbUZpbHRlckNvbXBvbmVudERpcmVjdGl2ZSkge1xyXG4gICAgICAgIHRoaXMuX2N1c3RvbUNvbXBvbmVudEhvc3QgPSBjb250ZW50O1xyXG4gICAgfVxyXG4gICAgX2N1c3RvbUNvbXBvbmVudEhvc3Q6IEN1c3RvbUZpbHRlckNvbXBvbmVudERpcmVjdGl2ZTtcclxuICAgIHByb3RlY3RlZCBzdGF0ZTogJ25ldycgfCAnYWN0aXZlJyA9ICduZXcnO1xyXG4gICAgcHJvdGVjdGVkIGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRGaWx0ZXI6IERhdGFUYWJsZUZpbHRlciB8IHVuZGVmaW5lZDtcclxuICAgIHByb3RlY3RlZCBjdXN0b21Db21wb25lbnQ/OiBDb21wb25lbnRSZWY8Rm9ybUlucHV0Q29tcG9uZW50PjtcclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bi5mJywgWyckZXZlbnQnXSlcclxuICAgIG9uRktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnIHx8XHJcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fFxyXG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndmRyLXByb3NlbWlycm9yJylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmRyb3Bkb3duLmlzT3BlbiAmJiB0aGlzLnN0YXRlID09PSAnbmV3Jykge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLnRvZ2dsZU9wZW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpMThuU2VydmljZTogSTE4blNlcnZpY2UsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duLm9uT3BlbkNoYW5nZShpc09wZW4gPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWlzT3BlbiAmJiB0aGlzLnN0YXRlID09PSAnbmV3Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcldpdGhWYWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGZpbHRlciwgdmFsdWUgfSA9IHRoaXMuZmlsdGVyV2l0aFZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZpbHRlcihmaWx0ZXIsIHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdhY3RpdmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdEZpbHRlcihmaWx0ZXI6IERhdGFUYWJsZUZpbHRlciwgdmFsdWU/OiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyID0gZmlsdGVyO1xyXG4gICAgICAgIGlmIChmaWx0ZXIuaXNJZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUdyb3VwKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBuZXcgRm9ybUNvbnRyb2wodmFsdWU/Lm9wZXJhdG9yID8/ICdlcScpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm06IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8udGVybSA/PyAnJyksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlLnRlcm0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbm9TZWxlY3Rpb246IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVyLmlzVGV4dCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUdyb3VwKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBuZXcgRm9ybUNvbnRyb2wodmFsdWU/Lm9wZXJhdG9yID8/ICdjb250YWlucycpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm06IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8udGVybSA/PyAnJyksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlLnRlcm0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbm9TZWxlY3Rpb246IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVyLmlzTnVtYmVyKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IG5ldyBGb3JtR3JvdXAoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8ub3BlcmF0b3IgPz8gJ2d0JyksXHJcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiBuZXcgRm9ybUNvbnRyb2wodmFsdWU/LmFtb3VudCA/PyAnJyksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUuYW1vdW50ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbm9TZWxlY3Rpb246IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLmlzU2VsZWN0KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IG5ldyBGb3JtQXJyYXkoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIudHlwZS5vcHRpb25zLm1hcChvID0+IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8uaW5jbHVkZXMoby52YWx1ZSkgPz8gZmFsc2UpKSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wgPT4gKGNvbnRyb2wudmFsdWUuc29tZShCb29sZWFuKSA/IG51bGwgOiB7IG5vU2VsZWN0aW9uOiB0cnVlIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLmlzQm9vbGVhbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodmFsdWUgPz8gZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLmlzRGF0ZVJhbmdlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IG5ldyBGb3JtR3JvdXAoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogbmV3IEZvcm1Db250cm9sKCdyZWxhdGl2ZScpLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVmFsdWU6IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8ucmVsYXRpdmVWYWx1ZSA/PyAzMCksXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVVbml0OiBuZXcgRm9ybUNvbnRyb2wodmFsdWU/LnJlbGF0aXZlVW5pdCA/PyAnZGF5JyksXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8uc3RhcnQgPz8gbnVsbCksXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBuZXcgRm9ybUNvbnRyb2wodmFsdWU/LmVuZCA/PyBudWxsKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGUgPSB2YWwubW9kZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ3JhbmdlJyAmJiB2YWwuc3RhcnQgJiYgdmFsLmVuZCAmJiB2YWwuc3RhcnQgPiB2YWwuZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGludmFsaWRSYW5nZTogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ3JhbmdlJyAmJiAhdmFsLnN0YXJ0ICYmICF2YWwuZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG5vU2VsZWN0aW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci5pc0N1c3RvbSgpICYmIHRoaXMuX2N1c3RvbUNvbXBvbmVudEhvc3QpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy4jY3VzdG9tQ29tcG9uZW50SG9zdC52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ29tcG9uZW50ID0gdGhpcy5fY3VzdG9tQ29tcG9uZW50SG9zdC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgICAgICAgICAgIGZpbHRlci50eXBlLmNvbXBvbmVudCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxhbnk+KHZhbHVlID8/IFtdKTtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21Db21wb25lbnQuaW5zdGFuY2UuY29uZmlnID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ29tcG9uZW50Lmluc3RhbmNlLmZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sPGFueT4odmFsdWUgPz8gW10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhY3RpdmF0ZSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWx0ZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdmFsdWU6IGFueTtcclxuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5zZWxlY3RlZEZpbHRlcj8udHlwZTtcclxuICAgICAgICBzd2l0Y2ggKHR5cGUua2luZCkge1xyXG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gISF0aGlzLmZvcm1Db250cm9sLnZhbHVlIGFzIEtpbmRWYWx1ZU1hcFt0eXBlb2YgdHlwZS5raW5kXVsncmF3J107XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnZGF0ZVJhbmdlJzoge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUubW9kZSA/PyAncmVsYXRpdmUnO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVWYWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUucmVsYXRpdmVWYWx1ZSA/PyAzMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0aXZlVW5pdCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUucmVsYXRpdmVVbml0ID8/ICdkYXknO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlLnN0YXJ0ID8/IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUuZW5kID8/IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVWYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVVuaXQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kLFxyXG4gICAgICAgICAgICAgICAgfSBhcyBLaW5kVmFsdWVNYXBbdHlwZW9mIHR5cGUua2luZF1bJ3JhdyddO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcclxuICAgICAgICAgICAgICAgIHZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFtb3VudDogTnVtYmVyKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUuYW1vdW50KSxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5vcGVyYXRvcixcclxuICAgICAgICAgICAgICAgIH0gYXMgS2luZFZhbHVlTWFwW3R5cGVvZiB0eXBlLmtpbmRdWydyYXcnXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSAnc2VsZWN0JzpcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgodiwgaSkgPT4gKHYgPyB0eXBlLm9wdGlvbnNbaV0udmFsdWUgOiB1bmRlZmluZWQpKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIodiA9PiAhIXYpO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBvcHRpb25zIGFzIEtpbmRWYWx1ZU1hcFt0eXBlb2YgdHlwZS5raW5kXVsncmF3J107XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndGV4dCc6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5vcGVyYXRvcixcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlLnRlcm0sXHJcbiAgICAgICAgICAgICAgICB9IGFzIEtpbmRWYWx1ZU1hcFt0eXBlb2YgdHlwZS5raW5kXVsncmF3J107XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnaWQnOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUub3BlcmF0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVybTogdGhpcy5mb3JtQ29udHJvbC52YWx1ZS50ZXJtLFxyXG4gICAgICAgICAgICAgICAgfSBhcyBLaW5kVmFsdWVNYXBbdHlwZW9mIHR5cGUua2luZF1bJ3JhdyddO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgJ2N1c3RvbSc6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY3VzdG9tQ29tcG9uZW50Py5pbnN0YW5jZS5mb3JtQ29udHJvbC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT09ICduZXcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VzdG9tQ29tcG9uZW50SG9zdC52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGFzc2VydE5ldmVyKHR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ25ldycpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlci5hY3RpdmF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJXaXRoVmFsdWU/LnVwZGF0ZVZhbHVlKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bi50b2dnbGVPcGVuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVhY3RpdmF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJXaXRoVmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZpbHRlcnMuYWN0aXZlRmlsdGVycy5pbmRleE9mKHRoaXMuZmlsdGVyV2l0aFZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJzLnJlbW92ZUFjdGl2ZUZpbHRlckF0SW5kZXgoaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8dmRyLWRyb3Bkb3duIFttYW51YWxUb2dnbGVdPVwidHJ1ZVwiICNkcm9wZG93bj5cclxuICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItYnV0dG9uXCIgW25nQ2xhc3NdPVwic3RhdGVcIj5cclxuICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJwbHVzXCIgc2l6ZT1cIjEyXCIgKm5nSWY9XCJzdGF0ZSA9PT0gJ25ldydcIj48L2Nsci1pY29uPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzdGF0ZSA9PT0gJ2FjdGl2ZSdcIiBjbGFzcz1cInJlbW92ZVwiIChjbGljayk9XCJkZWFjdGl2YXRlKClcIj5cclxuICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwidGltZXNcIiBzaXplPVwiMTJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gdmRyRHJvcGRvd25UcmlnZ2VyIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic3RhdGUgPT09ICduZXcnXCJcclxuICAgICAgICAgICAgICAgID57eyAnY29tbW9uLmFkZC1maWx0ZXInIHwgdHJhbnNsYXRlIH19IDxzcGFuIGNsYXNzPVwiZmlsdGVyLWhvdGtleVwiPmY8L3NwYW4+PC9zcGFuXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdGF0ZSA9PT0gJ2FjdGl2ZSdcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItZGF0YS10YWJsZS1maWx0ZXItbGFiZWxcclxuICAgICAgICAgICAgICAgICAgICBbZmlsdGVyV2l0aFZhbHVlXT1cImZpbHRlcldpdGhWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItZGF0YS10YWJsZS1maWx0ZXItbGFiZWw+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIiBzaXplPVwiMTJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8dmRyLWRyb3Bkb3duLW1lbnUgdmRyUG9zaXRpb249XCJib3R0b20tbGVmdFwiPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc2VsZWN0ZWRGaWx0ZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1oZWFkaW5nXCI+RmlsdGVyIGJ5OjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZmlsdGVycy5nZXRGaWx0ZXJzKClcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdmRyRHJvcGRvd25JdGVtIChjbGljayk9XCJzZWxlY3RGaWx0ZXIoZmlsdGVyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItbG9jYWxpemVkLXRleHQgW3RleHRdPVwiZmlsdGVyPy5sYWJlbFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItaGVhZGluZ1wiICpuZ0lmPVwic2VsZWN0ZWRGaWx0ZXJcIj5cclxuICAgICAgICAgICAgRmlsdGVyIGJ5IDx2ZHItbG9jYWxpemVkLXRleHQgW3RleHRdPVwic2VsZWN0ZWRGaWx0ZXIubGFiZWxcIiAvPjpcclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiBtdC0xXCI+XHJcbiAgICAgICAgICAgIDxkaXYgdmRyQ3VzdG9tRmlsdGVyQ29tcG9uZW50SG9zdCAjY3VzdG9tQ29tcG9uZW50SG9zdD48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8Zm9ybSAqbmdJZj1cInNlbGVjdGVkRmlsdGVyXCIgY2xhc3M9XCJcIiBbY2RrVHJhcEZvY3VzXT1cInRydWVcIiBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0ZWRGaWx0ZXIudHlwZS5raW5kICE9PSAnY3VzdG9tJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm14LTIgbXQtMVwiIFtuZ1N3aXRjaF09XCJzZWxlY3RlZEZpbHRlci50eXBlLmtpbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiIFtmb3JtR3JvdXBdPVwiZm9ybUNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgJGFueShzZWxlY3RlZEZpbHRlci50eXBlKS5vcHRpb25zOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2Zvcm1Db250cm9sTmFtZV09XCJpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG9wdGlvbi5sYWJlbCB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIGNsclRvZ2dsZSAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmb3JtQ29udHJvbC52YWx1ZVwiPnt7ICdjb21tb24uYm9vbGVhbi10cnVlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWZvcm1Db250cm9sLnZhbHVlXCI+e3sgJ2NvbW1vbi5ib29sZWFuLWZhbHNlJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Db250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm9wdGlvbnNcIiBmb3JtQ29udHJvbE5hbWU9XCJvcGVyYXRvclwiIGNsYXNzPVwibWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY29udGFpbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24ub3BlcmF0b3ItY29udGFpbnMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXFcIj57eyAnY29tbW9uLm9wZXJhdG9yLWVxJyB8IHRyYW5zbGF0ZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90Q29udGFpbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24ub3BlcmF0b3Itbm90LWNvbnRhaW5zJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdEVxXCI+e3sgJ2NvbW1vbi5vcGVyYXRvci1ub3QtZXEnIHwgdHJhbnNsYXRlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWdleFwiPnt7ICdjb21tb24ub3BlcmF0b3ItcmVnZXgnIHwgdHJhbnNsYXRlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInRlcm1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaWQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtQ29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJvcHRpb25zXCIgZm9ybUNvbnRyb2xOYW1lPVwib3BlcmF0b3JcIiBjbGFzcz1cIm1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxXCI+e3sgJ2NvbW1vbi5vcGVyYXRvci1lcScgfCB0cmFuc2xhdGUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm5vdEVxXCI+e3sgJ2NvbW1vbi5vcGVyYXRvci1ub3QtZXEnIHwgdHJhbnNsYXRlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cInRlcm1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwib3B0aW9uc1wiIGZvcm1Db250cm9sTmFtZT1cIm9wZXJhdG9yXCIgY2xhc3M9XCJtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcVwiPnt7ICdjb21tb24ub3BlcmF0b3ItZXEnIHwgdHJhbnNsYXRlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJndFwiPnt7ICdjb21tb24ub3BlcmF0b3ItZ3QnIHwgdHJhbnNsYXRlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJsdFwiPnt7ICdjb21tb24ub3BlcmF0b3ItbHQnIHwgdHJhbnNsYXRlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiJGFueShzZWxlY3RlZEZpbHRlci50eXBlKS5pbnB1dFR5cGUgIT09ICdjdXJyZW5jeSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhbW91bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItY3VycmVuY3ktaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiRhbnkoc2VsZWN0ZWRGaWx0ZXIudHlwZSkuaW5wdXRUeXBlID09PSAnY3VycmVuY3knXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhbW91bnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGVSYW5nZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Db250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24uZGF0YS10YWJsZS1maWx0ZXItZGF0ZS1tb2RlJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm1vZGVcIiBmb3JtQ29udHJvbE5hbWU9XCJtb2RlXCIgY2xhc3M9XCJtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5kYXRhLXRhYmxlLWZpbHRlci1kYXRlLXJlbGF0aXZlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJhbmdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmRhdGEtdGFibGUtZmlsdGVyLWRhdGUtcmFuZ2UnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmb3JtQ29udHJvbC5nZXQoJ21vZGUnKT8udmFsdWUgPT09ICdyZWxhdGl2ZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBjbGFzcz1cIm1yLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMVwiIGZvcm1Db250cm9sTmFtZT1cInJlbGF0aXZlVmFsdWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtb2RlXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVsYXRpdmVVbml0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImRheVwiPnt7ICdkYXRldGltZS5kYXknIHwgdHJhbnNsYXRlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIm1vbnRoXCI+e3sgJ2RhdGV0aW1lLm1vbnRoJyB8IHRyYW5zbGF0ZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ5ZWFyXCI+e3sgJ2RhdGV0aW1lLnllYXInIHwgdHJhbnNsYXRlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1Db250cm9sLmdldCgnbW9kZScpPy52YWx1ZSA9PT0gJ3JhbmdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyAnY29tbW9uLnN0YXJ0LWRhdGUnIHwgdHJhbnNsYXRlIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRhdGV0aW1lLXBpY2tlciBmb3JtQ29udHJvbE5hbWU9XCJzdGFydFwiPjwvdmRyLWRhdGV0aW1lLXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3sgJ2NvbW1vbi5lbmQtZGF0ZScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZGF0ZXRpbWUtcGlja2VyIGZvcm1Db250cm9sTmFtZT1cImVuZFwiPjwvdmRyLWRhdGV0aW1lLXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwcGx5LXdyYXBwZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJhY3RpdmF0ZSgpXCIgW2Rpc2FibGVkXT1cIiFmb3JtQ29udHJvbD8udmFsaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyAnY29tbW9uLmFwcGx5JyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJjaGVja1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuPC92ZHItZHJvcGRvd24+XHJcbiJdfQ==
219
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1maWx0ZXJzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29yZS9zcmMvc2hhcmVkL2NvbXBvbmVudHMvZGF0YS10YWJsZS1maWx0ZXJzL2RhdGEtdGFibGUtZmlsdGVycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2RhdGEtdGFibGUtZmlsdGVycy9kYXRhLXRhYmxlLWZpbHRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFDTCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFtQixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQVUvRCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVFyRixNQUFNLE9BQU8seUJBQXlCO0lBSWxDLElBQ0ksbUJBQW1CLENBQUMsT0FBdUM7UUFDM0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQztJQUN4QyxDQUFDO0lBUUQsV0FBVyxDQUFDLEtBQW9CO1FBQzVCLElBQUksS0FBSyxDQUFDLE1BQU0sWUFBWSxXQUFXLEVBQUU7WUFDckMsSUFDSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxPQUFPO2dCQUNoQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxVQUFVO2dCQUNuQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFDcEQ7Z0JBQ0UsT0FBTzth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QUNJLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QjtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkM7YUFBTTtZQUNILElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsVUFBVTtRQUNOLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakQ7SUFDTCxDQUFDOzhHQTFNUSx5QkFBeUI7a0dBQXpCLHlCQUF5QixrWkFJdUIsOEJBQThCLDZCQ2pDM0YsMGdTQW9KQTs7MkZEdkhhLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDSSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU07a0lBR3RDLE9BQU87c0JBQWYsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNtQyxRQUFRO3NCQUFoRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRW5DLG1CQUFtQjtzQkFEdEIsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLDhCQUE4QixFQUFFO2dCQVd6RixXQUFXO3NCQURWLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBDb21wb25lbnRSZWYsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGFzc2VydE5ldmVyIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xyXG5pbXBvcnQgeyBGb3JtSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29tcG9uZW50LXJlZ2lzdHJ5LXR5cGVzJztcclxuaW1wb3J0IHsgRGF0ZU9wZXJhdG9ycyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9nZW5lcmF0ZWQtdHlwZXMnO1xyXG5pbXBvcnQgeyBEYXRhVGFibGVGaWx0ZXIsIEtpbmRWYWx1ZU1hcCB9IGZyb20gJy4uLy4uLy4uL3Byb3ZpZGVycy9kYXRhLXRhYmxlL2RhdGEtdGFibGUtZmlsdGVyJztcclxuaW1wb3J0IHtcclxuICAgIERhdGFUYWJsZUZpbHRlckNvbGxlY3Rpb24sXHJcbiAgICBGaWx0ZXJXaXRoVmFsdWUsXHJcbn0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXItY29sbGVjdGlvbic7XHJcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vcHJvdmlkZXJzL2kxOG4vaTE4bi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDdXN0b21GaWx0ZXJDb21wb25lbnREaXJlY3RpdmUgfSBmcm9tICcuL2N1c3RvbS1maWx0ZXItY29tcG9uZW50LmRpcmVjdGl2ZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWRhdGEtdGFibGUtZmlsdGVycycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS1maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2RhdGEtdGFibGUtZmlsdGVycy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBASW5wdXQoKSBmaWx0ZXJzOiBEYXRhVGFibGVGaWx0ZXJDb2xsZWN0aW9uO1xyXG4gICAgQElucHV0KCkgZmlsdGVyV2l0aFZhbHVlPzogRmlsdGVyV2l0aFZhbHVlO1xyXG4gICAgQFZpZXdDaGlsZCgnZHJvcGRvd24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBkcm9wZG93bjogRHJvcGRvd25Db21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdjdXN0b21Db21wb25lbnRIb3N0JywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBDdXN0b21GaWx0ZXJDb21wb25lbnREaXJlY3RpdmUgfSlcclxuICAgIHNldCBjdXN0b21Db21wb25lbnRIb3N0KGNvbnRlbnQ6IEN1c3RvbUZpbHRlckNvbXBvbmVudERpcmVjdGl2ZSkge1xyXG4gICAgICAgIHRoaXMuX2N1c3RvbUNvbXBvbmVudEhvc3QgPSBjb250ZW50O1xyXG4gICAgfVxyXG4gICAgX2N1c3RvbUNvbXBvbmVudEhvc3Q6IEN1c3RvbUZpbHRlckNvbXBvbmVudERpcmVjdGl2ZTtcclxuICAgIHByb3RlY3RlZCBzdGF0ZTogJ25ldycgfCAnYWN0aXZlJyA9ICduZXcnO1xyXG4gICAgcHJvdGVjdGVkIGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRGaWx0ZXI6IERhdGFUYWJsZUZpbHRlciB8IHVuZGVmaW5lZDtcclxuICAgIHByb3RlY3RlZCBjdXN0b21Db21wb25lbnQ/OiBDb21wb25lbnRSZWY8Rm9ybUlucHV0Q29tcG9uZW50PjtcclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bi5mJywgWyckZXZlbnQnXSlcclxuICAgIG9uRktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnIHx8XHJcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fFxyXG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndmRyLXByb3NlbWlycm9yJylcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLmRyb3Bkb3duLmlzT3BlbiAmJiB0aGlzLnN0YXRlID09PSAnbmV3Jykge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLnRvZ2dsZU9wZW4oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpMThuU2VydmljZTogSTE4blNlcnZpY2UsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7fVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLmRyb3Bkb3duLm9uT3BlbkNoYW5nZShpc09wZW4gPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWlzT3BlbiAmJiB0aGlzLnN0YXRlID09PSAnbmV3Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbHRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcldpdGhWYWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGZpbHRlciwgdmFsdWUgfSA9IHRoaXMuZmlsdGVyV2l0aFZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEZpbHRlcihmaWx0ZXIsIHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9ICdhY3RpdmUnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdEZpbHRlcihmaWx0ZXI6IERhdGFUYWJsZUZpbHRlciwgdmFsdWU/OiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyID0gZmlsdGVyO1xyXG4gICAgICAgIGlmIChmaWx0ZXIuaXNJZCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUdyb3VwKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBuZXcgRm9ybUNvbnRyb2wodmFsdWU/Lm9wZXJhdG9yID8/ICdlcScpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm06IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8udGVybSA/PyAnJyksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlLnRlcm0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbm9TZWxlY3Rpb246IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVyLmlzVGV4dCgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUdyb3VwKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBuZXcgRm9ybUNvbnRyb2wodmFsdWU/Lm9wZXJhdG9yID8/ICdjb250YWlucycpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm06IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8udGVybSA/PyAnJyksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlLnRlcm0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbm9TZWxlY3Rpb246IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlsdGVyLmlzTnVtYmVyKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IG5ldyBGb3JtR3JvdXAoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8ub3BlcmF0b3IgPz8gJ2d0JyksXHJcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiBuZXcgRm9ybUNvbnRyb2wodmFsdWU/LmFtb3VudCA/PyAnJyksXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUuYW1vdW50ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbm9TZWxlY3Rpb246IHRydWUgfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLmlzU2VsZWN0KCkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IG5ldyBGb3JtQXJyYXkoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIudHlwZS5vcHRpb25zLm1hcChvID0+IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8uaW5jbHVkZXMoby52YWx1ZSkgPz8gZmFsc2UpKSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wgPT4gKGNvbnRyb2wudmFsdWUuc29tZShCb29sZWFuKSA/IG51bGwgOiB7IG5vU2VsZWN0aW9uOiB0cnVlIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLmlzQm9vbGVhbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodmFsdWUgPz8gZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLmlzRGF0ZVJhbmdlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IG5ldyBGb3JtR3JvdXAoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogbmV3IEZvcm1Db250cm9sKCdyZWxhdGl2ZScpLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVmFsdWU6IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8ucmVsYXRpdmVWYWx1ZSA/PyAzMCksXHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVVbml0OiBuZXcgRm9ybUNvbnRyb2wodmFsdWU/LnJlbGF0aXZlVW5pdCA/PyAnZGF5JyksXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG5ldyBGb3JtQ29udHJvbCh2YWx1ZT8uc3RhcnQgPz8gbnVsbCksXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBuZXcgRm9ybUNvbnRyb2wodmFsdWU/LmVuZCA/PyBudWxsKSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBjb250cm9sID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZGUgPSB2YWwubW9kZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ3JhbmdlJyAmJiB2YWwuc3RhcnQgJiYgdmFsLmVuZCAmJiB2YWwuc3RhcnQgPiB2YWwuZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGludmFsaWRSYW5nZTogdHJ1ZSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ3JhbmdlJyAmJiAhdmFsLnN0YXJ0ICYmICF2YWwuZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG5vU2VsZWN0aW9uOiB0cnVlIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlci5pc0N1c3RvbSgpICYmIHRoaXMuX2N1c3RvbUNvbXBvbmVudEhvc3QpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy4jY3VzdG9tQ29tcG9uZW50SG9zdC52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ29tcG9uZW50ID0gdGhpcy5fY3VzdG9tQ29tcG9uZW50SG9zdC52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgICAgICAgICAgIGZpbHRlci50eXBlLmNvbXBvbmVudCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxhbnk+KHZhbHVlID8/IFtdKTtcclxuICAgICAgICAgICAgdGhpcy5jdXN0b21Db21wb25lbnQuaW5zdGFuY2UuY29uZmlnID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tQ29tcG9uZW50Lmluc3RhbmNlLmZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sPGFueT4odmFsdWUgPz8gW10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhY3RpdmF0ZShldmVudDogRXZlbnQpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpbHRlcikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB2YWx1ZTogYW55O1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLnNlbGVjdGVkRmlsdGVyPy50eXBlO1xyXG4gICAgICAgIHN3aXRjaCAodHlwZS5raW5kKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSAhIXRoaXMuZm9ybUNvbnRyb2wudmFsdWUgYXMgS2luZFZhbHVlTWFwW3R5cGVvZiB0eXBlLmtpbmRdWydyYXcnXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdkYXRlUmFuZ2UnOiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5tb2RlID8/ICdyZWxhdGl2ZSc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWxhdGl2ZVZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5yZWxhdGl2ZVZhbHVlID8/IDMwO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVsYXRpdmVVbml0ID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5yZWxhdGl2ZVVuaXQgPz8gJ2RheSc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUuc3RhcnQgPz8gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5lbmQgPz8gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kZSxcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVW5pdCxcclxuICAgICAgICAgICAgICAgICAgICBzdGFydCxcclxuICAgICAgICAgICAgICAgICAgICBlbmQsXHJcbiAgICAgICAgICAgICAgICB9IGFzIEtpbmRWYWx1ZU1hcFt0eXBlb2YgdHlwZS5raW5kXVsncmF3J107XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYW1vdW50OiBOdW1iZXIodGhpcy5mb3JtQ29udHJvbC52YWx1ZS5hbW91bnQpLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICAgICAgfSBhcyBLaW5kVmFsdWVNYXBbdHlwZW9mIHR5cGUua2luZF1bJ3JhdyddO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdzZWxlY3QnOlxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAubWFwKCh2LCBpKSA9PiAodiA/IHR5cGUub3B0aW9uc1tpXS52YWx1ZSA6IHVuZGVmaW5lZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcih2ID0+ICEhdik7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG9wdGlvbnMgYXMgS2luZFZhbHVlTWFwW3R5cGVvZiB0eXBlLmtpbmRdWydyYXcnXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICd0ZXh0JzpcclxuICAgICAgICAgICAgICAgIHZhbHVlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlLm9wZXJhdG9yLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm06IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUudGVybSxcclxuICAgICAgICAgICAgICAgIH0gYXMgS2luZFZhbHVlTWFwW3R5cGVvZiB0eXBlLmtpbmRdWydyYXcnXTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlICdpZCc6XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogdGhpcy5mb3JtQ29udHJvbC52YWx1ZS5vcGVyYXRvcixcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlLnRlcm0sXHJcbiAgICAgICAgICAgICAgICB9IGFzIEtpbmRWYWx1ZU1hcFt0eXBlb2YgdHlwZS5raW5kXVsncmF3J107XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAnY3VzdG9tJzpcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jdXN0b21Db21wb25lbnQ/Lmluc3RhbmNlLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ25ldycpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXN0b21Db21wb25lbnRIb3N0LnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYXNzZXJ0TmV2ZXIodHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAnbmV3Jykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsdGVyLmFjdGl2YXRlKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcldpdGhWYWx1ZT8udXBkYXRlVmFsdWUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRyb3Bkb3duLnRvZ2dsZU9wZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWFjdGl2YXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcldpdGhWYWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZmlsdGVycy5hY3RpdmVGaWx0ZXJzLmluZGV4T2YodGhpcy5maWx0ZXJXaXRoVmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcnMucmVtb3ZlQWN0aXZlRmlsdGVyQXRJbmRleChpbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItZHJvcGRvd24gW21hbnVhbFRvZ2dsZV09XCJ0cnVlXCIgI2Ryb3Bkb3duPlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1idXR0b25cIiBbbmdDbGFzc109XCJzdGF0ZVwiPlxyXG4gICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBsdXNcIiBzaXplPVwiMTJcIiAqbmdJZj1cInN0YXRlID09PSAnbmV3J1wiPjwvY2xyLWljb24+XHJcbiAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInN0YXRlID09PSAnYWN0aXZlJ1wiIGNsYXNzPVwicmVtb3ZlXCIgKGNsaWNrKT1cImRlYWN0aXZhdGUoKVwiPlxyXG4gICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJ0aW1lc1wiIHNpemU9XCIxMlwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiB2ZHJEcm9wZG93blRyaWdnZXIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzdGF0ZSA9PT0gJ25ldydcIlxyXG4gICAgICAgICAgICAgICAgPnt7ICdjb21tb24uYWRkLWZpbHRlcicgfCB0cmFuc2xhdGUgfX0gPHNwYW4gY2xhc3M9XCJmaWx0ZXItaG90a2V5XCI+Zjwvc3Bhbj48L3NwYW5cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInN0YXRlID09PSAnYWN0aXZlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLWZpbHRlci1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJXaXRoVmFsdWVdPVwiZmlsdGVyV2l0aFZhbHVlXCJcclxuICAgICAgICAgICAgICAgID48L3Zkci1kYXRhLXRhYmxlLWZpbHRlci1sYWJlbD5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlbGxpcHNpcy12ZXJ0aWNhbFwiIHNpemU9XCIxMlwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx2ZHItZHJvcGRvd24tbWVudSB2ZHJQb3NpdGlvbj1cImJvdHRvbS1sZWZ0XCI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFzZWxlY3RlZEZpbHRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWhlYWRpbmdcIj5GaWx0ZXIgYnk6PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmaWx0ZXJzLmdldEZpbHRlcnMoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB2ZHJEcm9wZG93bkl0ZW0gKGNsaWNrKT1cInNlbGVjdEZpbHRlcihmaWx0ZXIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1sb2NhbGl6ZWQtdGV4dCBbdGV4dF09XCJmaWx0ZXI/LmxhYmVsXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlci1oZWFkaW5nXCIgKm5nSWY9XCJzZWxlY3RlZEZpbHRlclwiPlxyXG4gICAgICAgICAgICBGaWx0ZXIgYnkgPHZkci1sb2NhbGl6ZWQtdGV4dCBbdGV4dF09XCJzZWxlY3RlZEZpbHRlci5sYWJlbFwiIC8+OlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteC0yIG10LTFcIj5cclxuICAgICAgICAgICAgPGRpdiB2ZHJDdXN0b21GaWx0ZXJDb21wb25lbnRIb3N0ICNjdXN0b21Db21wb25lbnRIb3N0PjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxmb3JtICpuZ0lmPVwic2VsZWN0ZWRGaWx0ZXJcIiBjbGFzcz1cIlwiIFtjZGtUcmFwRm9jdXNdPVwidHJ1ZVwiIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZEZpbHRlci50eXBlLmtpbmQgIT09ICdjdXN0b20nXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMiBtdC0xXCIgW25nU3dpdGNoXT1cInNlbGVjdGVkRmlsdGVyLnR5cGUua2luZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3QnXCIgW2Zvcm1Hcm91cF09XCJmb3JtQ29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiAkYW55KHNlbGVjdGVkRmlsdGVyLnR5cGUpLm9wdGlvbnM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgb3B0aW9uLmxhYmVsIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidib29sZWFuJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgY2xyVG9nZ2xlIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImZvcm1Db250cm9sLnZhbHVlXCI+e3sgJ2NvbW1vbi5ib29sZWFuLXRydWUnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhZm9ybUNvbnRyb2wudmFsdWVcIj57eyAnY29tbW9uLmJvb2xlYW4tZmFsc2UnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIid0ZXh0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwib3B0aW9uc1wiIGZvcm1Db250cm9sTmFtZT1cIm9wZXJhdG9yXCIgY2xhc3M9XCJtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJjb250YWluc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5vcGVyYXRvci1jb250YWlucycgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJlcVwiPnt7ICdjb21tb24ub3BlcmF0b3ItZXEnIHwgdHJhbnNsYXRlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJub3RDb250YWluc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5vcGVyYXRvci1ub3QtY29udGFpbnMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90RXFcIj57eyAnY29tbW9uLm9wZXJhdG9yLW5vdC1lcScgfCB0cmFuc2xhdGUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJlZ2V4XCI+e3sgJ2NvbW1vbi5vcGVyYXRvci1yZWdleCcgfCB0cmFuc2xhdGUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidGVybVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidpZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Db250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm9wdGlvbnNcIiBmb3JtQ29udHJvbE5hbWU9XCJvcGVyYXRvclwiIGNsYXNzPVwibWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZXFcIj57eyAnY29tbW9uLm9wZXJhdG9yLWVxJyB8IHRyYW5zbGF0ZSB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm90RXFcIj57eyAnY29tbW9uLm9wZXJhdG9yLW5vdC1lcScgfCB0cmFuc2xhdGUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwidGVybVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtQ29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJvcHRpb25zXCIgZm9ybUNvbnRyb2xOYW1lPVwib3BlcmF0b3JcIiBjbGFzcz1cIm1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImVxXCI+e3sgJ2NvbW1vbi5vcGVyYXRvci1lcScgfCB0cmFuc2xhdGUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImd0XCI+e3sgJ2NvbW1vbi5vcGVyYXRvci1ndCcgfCB0cmFuc2xhdGUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImx0XCI+e3sgJ2NvbW1vbi5vcGVyYXRvci1sdCcgfCB0cmFuc2xhdGUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIkYW55KHNlbGVjdGVkRmlsdGVyLnR5cGUpLmlucHV0VHlwZSAhPT0gJ2N1cnJlbmN5J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFtb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1jdXJyZW5jeS1pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiJGFueShzZWxlY3RlZEZpbHRlci50eXBlKS5pbnB1dFR5cGUgPT09ICdjdXJyZW5jeSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFtb3VudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInZGF0ZVJhbmdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5kYXRhLXRhYmxlLWZpbHRlci1kYXRlLW1vZGUnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwibW9kZVwiIGZvcm1Db250cm9sTmFtZT1cIm1vZGVcIiBjbGFzcz1cIm1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmRhdGEtdGFibGUtZmlsdGVyLWRhdGUtcmVsYXRpdmUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwicmFuZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24uZGF0YS10YWJsZS1maWx0ZXItZGF0ZS1yYW5nZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1Db250cm9sLmdldCgnbW9kZScpPy52YWx1ZSA9PT0gJ3JlbGF0aXZlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIGNsYXNzPVwibXItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIxXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVsYXRpdmVWYWx1ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm1vZGVcIiBmb3JtQ29udHJvbE5hbWU9XCJyZWxhdGl2ZVVuaXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiZGF5XCI+e3sgJ2RhdGV0aW1lLmRheScgfCB0cmFuc2xhdGUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibW9udGhcIj57eyAnZGF0ZXRpbWUubW9udGgnIHwgdHJhbnNsYXRlIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInllYXJcIj57eyAnZGF0ZXRpbWUueWVhcicgfCB0cmFuc2xhdGUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUNvbnRyb2wuZ2V0KCdtb2RlJyk/LnZhbHVlID09PSAncmFuZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7ICdjb21tb24uc3RhcnQtZGF0ZScgfCB0cmFuc2xhdGUgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZGF0ZXRpbWUtcGlja2VyIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCI+PC92ZHItZGF0ZXRpbWUtcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj57eyAnY29tbW9uLmVuZC1kYXRlJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRldGltZS1waWNrZXIgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCI+PC92ZHItZGF0ZXRpbWUtcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwbHktd3JhcHBlciBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFjdGl2YXRlKCRldmVudClcIiBbZGlzYWJsZWRdPVwiIWZvcm1Db250cm9sPy52YWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdjb21tb24uYXBwbHknIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImNoZWNrXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L3Zkci1kcm9wZG93bi1tZW51PlxyXG48L3Zkci1kcm9wZG93bj5cclxuIl19
@@ -3,8 +3,10 @@ import { ChangeDetectionStrategy, Component, HostListener, Input, ViewChild, } f
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@angular/cdk/overlay";
5
5
  import * as i2 from "./dropdown.component";
6
- import * as i3 from "@angular/common";
7
- import * as i4 from "@angular/cdk/a11y";
6
+ import * as i3 from "../../../providers/localization/localization.service";
7
+ import * as i4 from "@angular/common";
8
+ import * as i5 from "@angular/cdk/bidi";
9
+ import * as i6 from "@angular/cdk/a11y";
8
10
  /**
9
11
  * A dropdown menu modelled on the Clarity Dropdown component (https://v1.clarity.design/dropdowns).
10
12
  *
@@ -41,13 +43,15 @@ export class DropdownMenuComponent {
41
43
  }
42
44
  }
43
45
  }
44
- constructor(overlay, viewContainerRef, dropdown) {
46
+ constructor(overlay, viewContainerRef, dropdown, localizationService) {
45
47
  this.overlay = overlay;
46
48
  this.viewContainerRef = viewContainerRef;
47
49
  this.dropdown = dropdown;
50
+ this.localizationService = localizationService;
48
51
  this.position = 'bottom-left';
49
52
  }
50
53
  ngOnInit() {
54
+ this.direction$ = this.localizationService.direction$;
51
55
  this.dropdown.onOpenChange(isOpen => {
52
56
  if (isOpen) {
53
57
  this.overlayRef.attach(this.menuPortal);
@@ -119,41 +123,45 @@ export class DropdownMenuComponent {
119
123
  inverted.overlayY = pos.overlayY === 'top' ? 'bottom' : 'top';
120
124
  return inverted;
121
125
  }
122
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: DropdownMenuComponent, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i2.DropdownComponent }], target: i0.ɵɵFactoryTarget.Component }); }
126
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: DropdownMenuComponent, deps: [{ token: i1.Overlay }, { token: i0.ViewContainerRef }, { token: i2.DropdownComponent }, { token: i3.LocalizationService }], target: i0.ɵɵFactoryTarget.Component }); }
123
127
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: DropdownMenuComponent, selector: "vdr-dropdown-menu", inputs: { position: ["vdrPosition", "position"], customClasses: "customClasses" }, host: { listeners: { "window:keydown.escape": "onEscapeKeydown($event)", "window:keydown": "onArrowKey($event)" } }, viewQueries: [{ propertyName: "menuTemplate", first: true, predicate: ["menu"], descendants: true, static: true }], ngImport: i0, template: `
124
128
  <ng-template #menu>
125
- <div class="dropdown open">
126
- <div class="dropdown-menu" [ngClass]="customClasses">
127
- <div
128
- class="dropdown-content-wrapper"
129
- [cdkTrapFocus]="true"
130
- [cdkTrapFocusAutoCapture]="true"
131
- >
132
- <ng-content></ng-content>
129
+ <div [dir]="direction$ | async">
130
+ <div class="dropdown open">
131
+ <div class="dropdown-menu" [ngClass]="customClasses">
132
+ <div
133
+ class="dropdown-content-wrapper"
134
+ [cdkTrapFocus]="true"
135
+ [cdkTrapFocusAutoCapture]="true"
136
+ >
137
+ <ng-content></ng-content>
138
+ </div>
133
139
  </div>
134
140
  </div>
135
141
  </div>
136
142
  </ng-template>
137
- `, isInline: true, styles: [".clear-backdrop{background-color:#ff69b4}::ng-deep .dropdown-menu{max-width:initial}::ng-deep .dropdown-menu .dropdown-item{display:flex;align-items:center}::ng-deep .dropdown-menu .dropdown-item clr-icon{margin-inline-end:3px}::ng-deep .dropdown-menu .dropdown-item:focus{outline:var(--color-dropdown-item-focus-outline) solid 1px;outline-offset:1px 0}.dropdown.open>.dropdown-menu{position:relative;top:0;height:100%;overflow-y:auto}:host{opacity:1;transition:opacity .3s}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
143
+ `, isInline: true, styles: [".clear-backdrop{background-color:#ff69b4}::ng-deep .dropdown-menu{max-width:initial}::ng-deep .dropdown-menu .dropdown-item{display:flex;align-items:center}::ng-deep .dropdown-menu .dropdown-item clr-icon{margin-inline-end:3px}::ng-deep .dropdown-menu .dropdown-item:focus{outline:var(--color-dropdown-item-focus-outline) solid 1px;outline-offset:1px 0}.dropdown.open>.dropdown-menu{position:relative;top:0;height:100%;overflow-y:auto}:host{opacity:1;transition:opacity .3s}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "directive", type: i6.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
138
144
  }
139
145
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: DropdownMenuComponent, decorators: [{
140
146
  type: Component,
141
147
  args: [{ selector: 'vdr-dropdown-menu', template: `
142
148
  <ng-template #menu>
143
- <div class="dropdown open">
144
- <div class="dropdown-menu" [ngClass]="customClasses">
145
- <div
146
- class="dropdown-content-wrapper"
147
- [cdkTrapFocus]="true"
148
- [cdkTrapFocusAutoCapture]="true"
149
- >
150
- <ng-content></ng-content>
149
+ <div [dir]="direction$ | async">
150
+ <div class="dropdown open">
151
+ <div class="dropdown-menu" [ngClass]="customClasses">
152
+ <div
153
+ class="dropdown-content-wrapper"
154
+ [cdkTrapFocus]="true"
155
+ [cdkTrapFocusAutoCapture]="true"
156
+ >
157
+ <ng-content></ng-content>
158
+ </div>
151
159
  </div>
152
160
  </div>
153
161
  </div>
154
162
  </ng-template>
155
163
  `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".clear-backdrop{background-color:#ff69b4}::ng-deep .dropdown-menu{max-width:initial}::ng-deep .dropdown-menu .dropdown-item{display:flex;align-items:center}::ng-deep .dropdown-menu .dropdown-item clr-icon{margin-inline-end:3px}::ng-deep .dropdown-menu .dropdown-item:focus{outline:var(--color-dropdown-item-focus-outline) solid 1px;outline-offset:1px 0}.dropdown.open>.dropdown-menu{position:relative;top:0;height:100%;overflow-y:auto}:host{opacity:1;transition:opacity .3s}\n"] }]
156
- }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i2.DropdownComponent }]; }, propDecorators: { position: [{
164
+ }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i2.DropdownComponent }, { type: i3.LocalizationService }]; }, propDecorators: { position: [{
157
165
  type: Input,
158
166
  args: ['vdrPosition']
159
167
  }], customClasses: [{
@@ -168,4 +176,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
168
176
  type: HostListener,
169
177
  args: ['window:keydown', ['$event']]
170
178
  }] } });
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFHVCxZQUFZLEVBQ1osS0FBSyxFQUlMLFNBQVMsR0FFWixNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBUXZCOzs7Ozs7OztHQVFHO0FBcUJILE1BQU0sT0FBTyxxQkFBcUI7SUFTOUIsZUFBZSxDQUFDLEtBQW9CO1FBQ2hDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUNqRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQzlCO1NBQ0o7SUFDTCxDQUFDO0lBR0QsVUFBVSxDQUFDLEtBQW9CO1FBQzNCLElBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQ3BCLFFBQVEsQ0FBQyxhQUFhLFlBQVksV0FBVztZQUM3QyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssV0FBVyxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLEVBQ3hEO1lBQ0UsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQWMsZ0JBQWdCLENBQUMsQ0FDakYsQ0FBQztZQUNGLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFD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Q1gsYUFBYTtzQkFBckIsS0FBSztnQkFDdUMsWUFBWTtzQkFBeEQsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU1uQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsdUJBQXVCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBVWpELFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDb25uZWN0ZWRQb3NpdGlvbixcclxuICAgIEhvcml6b250YWxDb25uZWN0aW9uUG9zLFxyXG4gICAgT3ZlcmxheSxcclxuICAgIE92ZXJsYXlSZWYsXHJcbiAgICBQb3NpdGlvblN0cmF0ZWd5LFxyXG4gICAgVmVydGljYWxDb25uZWN0aW9uUG9zLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIFRlbXBsYXRlUmVmLFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBEcm9wZG93blRyaWdnZXJEaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3Bkb3duLXRyaWdnZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgdHlwZSBEcm9wZG93blBvc2l0aW9uID0gJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEEgZHJvcGRvd24gbWVudSBtb2RlbGxlZCBvbiB0aGUgQ2xhcml0eSBEcm9wZG93biBjb21wb25lbnQgKGh0dHBzOi8vdjEuY2xhcml0eS5kZXNpZ24vZHJvcGRvd25zKS5cclxuICpcclxuICogVGhpcyB3YXMgY3JlYXRlZCBiZWNhdXNlIHRoZSBDbGFyaXR5IGltcGxlbWVudGF0aW9uIChhdCB0aGlzIHRpbWUpIGRvZXMgbm90IGhhbmRsZSBlZGdlIGRldGVjdGlvbi4gSW5zdGVhZFxyXG4gKiB3ZSBtYWtlIHVzZSBvZiB0aGUgQW5ndWxhciBDREsncyBPdmVybGF5IG1vZHVsZSB0byBtYW5hZ2UgdGhlIHBvc2l0aW9uaW5nLlxyXG4gKlxyXG4gKiBUaGUgQVBJIG9mIHRoaXMgY29tcG9uZW50IChhbmQgaXRzIHJlbGF0ZWQgQ29tcG9uZW50cyAmIERpcmVjdGl2ZXMpIGFyZSBiYXNlZCBvbiB0aGUgQ2xhcml0eSB2ZXJzaW9uLFxyXG4gKiBhbGJlaXQgb25seSBhIHN1YnNldCB3aGljaCBpcyBjdXJyZW50bHkgdXNlZCBpbiB0aGlzIGFwcGxpY2F0aW9uLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1kcm9wZG93bi1tZW51JyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNtZW51PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24gb3BlblwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBbbmdDbGFzc109XCJjdXN0b21DbGFzc2VzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWNvbnRlbnQtd3JhcHBlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtUcmFwRm9jdXNdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgYCxcclxuICAgIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25NZW51Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgQElucHV0KCd2ZHJQb3NpdGlvbicpIHByaXZhdGUgcG9zaXRpb246IERyb3Bkb3duUG9zaXRpb24gPSAnYm90dG9tLWxlZnQnO1xyXG4gICAgQElucHV0KCkgY3VzdG9tQ2xhc3Nlczogc3RyaW5nO1xyXG4gICAgQFZpZXdDaGlsZCgnbWVudScsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgbWVudVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgcHJpdmF0ZSBtZW51UG9ydGFsOiBUZW1wbGF0ZVBvcnRhbDtcclxuICAgIHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcclxuICAgIHByaXZhdGUgYmFja2Ryb3BDbGlja1N1YjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duLmVzY2FwZScsIFsnJGV2ZW50J10pXHJcbiAgICBvbkVzY2FwZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi50b2dnbGVPcGVuKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gICAgb25BcnJvd0tleShldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5pc09wZW4gJiZcclxuICAgICAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXHJcbiAgICAgICAgICAgIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkl0ZW1zID0gQXJyYXkuZnJvbShcclxuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5vdmVybGF5RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLmRyb3Bkb3duLWl0ZW0nKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gZHJvcGRvd25JdGVtcy5pbmRleE9mKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0SXRlbSA9IGRyb3Bkb3duSXRlbXNbKGN1cnJlbnRJbmRleCArIDEpICUgZHJvcGRvd25JdGVtcy5sZW5ndGhdO1xyXG4gICAgICAgICAgICAgICAgbmV4dEl0ZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzSXRlbSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25JdGVtc1soY3VycmVudEluZGV4IC0gMSArIGRyb3Bkb3duSXRlbXMubGVuZ3RoKSAlIGRyb3Bkb3duSXRlbXMubGVuZ3RoXTtcclxuICAgICAgICAgICAgICAgIHByZXZpb3VzSXRlbS5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBkcm9wZG93bjogRHJvcGRvd25Db21wb25lbnQsXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kcm9wZG93bi5vbk9wZW5DaGFuZ2UoaXNPcGVuID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzT3Blbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaCh0aGlzLm1lbnVQb3J0YWwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xyXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogJ2NsZWFyLWJhY2tkcm9wJyxcclxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5nZXRQb3NpdGlvblN0cmF0ZWd5KCksXHJcbiAgICAgICAgICAgIG1heEhlaWdodDogJzcwdmgnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubWVudVBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLm1lbnVUZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcclxuICAgICAgICB0aGlzLmJhY2tkcm9wQ2xpY2tTdWIgPSB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24udG9nZ2xlT3BlbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYmFja2Ryb3BDbGlja1N1Yikge1xyXG4gICAgICAgICAgICB0aGlzLmJhY2tkcm9wQ2xpY2tTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQb3NpdGlvblN0cmF0ZWd5KCk6IFBvc2l0aW9uU3RyYXRlZ3kge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uOiB7IFtLIGluIERyb3Bkb3duUG9zaXRpb25dOiBDb25uZWN0ZWRQb3NpdGlvbiB9ID0ge1xyXG4gICAgICAgICAgICBbJ3RvcC1sZWZ0J106IHtcclxuICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbJ3RvcC1yaWdodCddOiB7XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbJ2JvdHRvbS1sZWZ0J106IHtcclxuICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbJ2JvdHRvbS1yaWdodCddOiB7XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHBvcyA9IHBvc2l0aW9uW3RoaXMucG9zaXRpb25dO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5XHJcbiAgICAgICAgICAgIC5wb3NpdGlvbigpXHJcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZHJvcGRvd24udHJpZ2dlcilcclxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMoW3BvcywgdGhpcy5pbnZlcnRQb3NpdGlvbihwb3MpXSlcclxuICAgICAgICAgICAgLndpdGhWaWV3cG9ydE1hcmdpbigxMilcclxuICAgICAgICAgICAgLndpdGhQdXNoKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJbnZlcnRzIGFuIG92ZXJsYXkgcG9zaXRpb24uICovXHJcbiAgICBwcml2YXRlIGludmVydFBvc2l0aW9uKHBvczogQ29ubmVjdGVkUG9zaXRpb24pOiBDb25uZWN0ZWRQb3NpdGlvbiB7XHJcbiAgICAgICAgY29uc3QgaW52ZXJ0ZWQgPSB7IC4uLnBvcyB9O1xyXG4gICAgICAgIGludmVydGVkLm9yaWdpblkgPSBwb3Mub3JpZ2luWSA9PT0gJ3RvcCcgPyAnYm90dG9tJyA6ICd0b3AnO1xyXG4gICAgICAgIGludmVydGVkLm92ZXJsYXlZID0gcG9zLm92ZXJsYXlZID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCc7XHJcblxyXG4gICAgICAgIHJldHVybiBpbnZlcnRlZDtcclxuICAgIH1cclxufVxyXG4iXX0=
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2Ryb3Bkb3duL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLFNBQVMsR0FFWixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFXdkI7Ozs7Ozs7O0dBUUc7QUF1QkgsTUFBTSxPQUFPLHFCQUFxQjtJQVc5QixlQUFlLENBQUMsS0FBb0I7UUFDaEMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQ2pFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDOUI7U0FDSjtJQUNMLENBQUM7SUFHRCxVQUFVLENBQUMsS0FBb0I7UUFDM0IsSUFDSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDcEIsUUFBUSxDQUFDLGFBQWEsWUFBWSxXQUFXO1lBQzdDLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxXQUFXLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsRUFDeEQ7WUFDRSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBYyxnQkFBZ0IsQ0FBQyxDQUNqRixDQUFDO1lBQ0YsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENB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dEJqQyxTQUFTOytCQUNJLG1CQUFtQixZQUNuQjs7Ozs7Ozs7Ozs7Ozs7OztLQWdCVCxtQkFFZ0IsdUJBQXVCLENBQUMsTUFBTTsrTEFLakIsUUFBUTtzQkFBckMsS0FBSzt1QkFBQyxhQUFhO2dCQUNYLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ3VDLFlBQVk7c0JBQXhELFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFNbkMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLHVCQUF1QixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVVqRCxVQUFVO3NCQURULFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgT3ZlcmxheSwgT3ZlcmxheVJlZiwgUG9zaXRpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENvbXBvbmVudCxcclxuICAgIEhvc3RMaXN0ZW5lcixcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBMb2NhbGl6YXRpb25EaXJlY3Rpb25UeXBlLFxyXG4gICAgTG9jYWxpemF0aW9uU2VydmljZSxcclxufSBmcm9tICcuLi8uLi8uLi9wcm92aWRlcnMvbG9jYWxpemF0aW9uL2xvY2FsaXphdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgdHlwZSBEcm9wZG93blBvc2l0aW9uID0gJ3RvcC1sZWZ0JyB8ICd0b3AtcmlnaHQnIHwgJ2JvdHRvbS1sZWZ0JyB8ICdib3R0b20tcmlnaHQnO1xyXG5cclxuLyoqXHJcbiAqIEEgZHJvcGRvd24gbWVudSBtb2RlbGxlZCBvbiB0aGUgQ2xhcml0eSBEcm9wZG93biBjb21wb25lbnQgKGh0dHBzOi8vdjEuY2xhcml0eS5kZXNpZ24vZHJvcGRvd25zKS5cclxuICpcclxuICogVGhpcyB3YXMgY3JlYXRlZCBiZWNhdXNlIHRoZSBDbGFyaXR5IGltcGxlbWVudGF0aW9uIChhdCB0aGlzIHRpbWUpIGRvZXMgbm90IGhhbmRsZSBlZGdlIGRldGVjdGlvbi4gSW5zdGVhZFxyXG4gKiB3ZSBtYWtlIHVzZSBvZiB0aGUgQW5ndWxhciBDREsncyBPdmVybGF5IG1vZHVsZSB0byBtYW5hZ2UgdGhlIHBvc2l0aW9uaW5nLlxyXG4gKlxyXG4gKiBUaGUgQVBJIG9mIHRoaXMgY29tcG9uZW50IChhbmQgaXRzIHJlbGF0ZWQgQ29tcG9uZW50cyAmIERpcmVjdGl2ZXMpIGFyZSBiYXNlZCBvbiB0aGUgQ2xhcml0eSB2ZXJzaW9uLFxyXG4gKiBhbGJlaXQgb25seSBhIHN1YnNldCB3aGljaCBpcyBjdXJyZW50bHkgdXNlZCBpbiB0aGlzIGFwcGxpY2F0aW9uLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1kcm9wZG93bi1tZW51JyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNtZW51PlxyXG4gICAgICAgICAgICA8ZGl2IFtkaXJdPVwiZGlyZWN0aW9uJCB8IGFzeW5jXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24gb3BlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgW25nQ2xhc3NdPVwiY3VzdG9tQ2xhc3Nlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWNvbnRlbnQtd3JhcHBlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2RrVHJhcEZvY3VzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nka1RyYXBGb2N1c0F1dG9DYXB0dXJlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24tbWVudS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93bk1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBkaXJlY3Rpb24kOiBMb2NhbGl6YXRpb25EaXJlY3Rpb25UeXBlO1xyXG5cclxuICAgIEBJbnB1dCgndmRyUG9zaXRpb24nKSBwcml2YXRlIHBvc2l0aW9uOiBEcm9wZG93blBvc2l0aW9uID0gJ2JvdHRvbS1sZWZ0JztcclxuICAgIEBJbnB1dCgpIGN1c3RvbUNsYXNzZXM6IHN0cmluZztcclxuICAgIEBWaWV3Q2hpbGQoJ21lbnUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIG1lbnVUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIHByaXZhdGUgbWVudVBvcnRhbDogVGVtcGxhdGVQb3J0YWw7XHJcbiAgICBwcml2YXRlIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWY7XHJcbiAgICBwcml2YXRlIGJhY2tkcm9wQ2xpY2tTdWI6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6a2V5ZG93bi5lc2NhcGUnLCBbJyRldmVudCddKVxyXG4gICAgb25Fc2NhcGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24udG9nZ2xlT3BlbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICAgIG9uQXJyb3dLZXkoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uaXNPcGVuICYmXHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxyXG4gICAgICAgICAgICAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJylcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25JdGVtcyA9IEFycmF5LmZyb20oXHJcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYub3ZlcmxheUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJy5kcm9wZG93bi1pdGVtJyksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGRyb3Bkb3duSXRlbXMuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEl0ZW0gPSBkcm9wZG93bkl0ZW1zWyhjdXJyZW50SW5kZXggKyAxKSAlIGRyb3Bkb3duSXRlbXMubGVuZ3RoXTtcclxuICAgICAgICAgICAgICAgIG5leHRJdGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0l0ZW0gPVxyXG4gICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duSXRlbXNbKGN1cnJlbnRJbmRleCAtIDEgKyBkcm9wZG93bkl0ZW1zLmxlbmd0aCkgJSBkcm9wZG93bkl0ZW1zLmxlbmd0aF07XHJcbiAgICAgICAgICAgICAgICBwcmV2aW91c0l0ZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgIHByaXZhdGUgZHJvcGRvd246IERyb3Bkb3duQ29tcG9uZW50LFxyXG4gICAgICAgIHByaXZhdGUgbG9jYWxpemF0aW9uU2VydmljZTogTG9jYWxpemF0aW9uU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpcmVjdGlvbiQgPSB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuZGlyZWN0aW9uJDtcclxuXHJcbiAgICAgICAgdGhpcy5kcm9wZG93bi5vbk9wZW5DaGFuZ2UoaXNPcGVuID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzT3Blbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaCh0aGlzLm1lbnVQb3J0YWwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xyXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgICAgICAgYmFja2Ryb3BDbGFzczogJ2NsZWFyLWJhY2tkcm9wJyxcclxuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5nZXRQb3NpdGlvblN0cmF0ZWd5KCksXHJcbiAgICAgICAgICAgIG1heEhlaWdodDogJzcwdmgnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubWVudVBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLm1lbnVUZW1wbGF0ZSwgdGhpcy52aWV3Q29udGFpbmVyUmVmKTtcclxuICAgICAgICB0aGlzLmJhY2tkcm9wQ2xpY2tTdWIgPSB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24udG9nZ2xlT3BlbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuYmFja2Ryb3BDbGlja1N1Yikge1xyXG4gICAgICAgICAgICB0aGlzLmJhY2tkcm9wQ2xpY2tTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQb3NpdGlvblN0cmF0ZWd5KCk6IFBvc2l0aW9uU3RyYXRlZ3kge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uOiB7IFtLIGluIERyb3Bkb3duUG9zaXRpb25dOiBDb25uZWN0ZWRQb3NpdGlvbiB9ID0ge1xyXG4gICAgICAgICAgICBbJ3RvcC1sZWZ0J106IHtcclxuICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbJ3RvcC1yaWdodCddOiB7XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbJ2JvdHRvbS1sZWZ0J106IHtcclxuICAgICAgICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcclxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbJ2JvdHRvbS1yaWdodCddOiB7XHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcclxuICAgICAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHBvcyA9IHBvc2l0aW9uW3RoaXMucG9zaXRpb25dO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5XHJcbiAgICAgICAgICAgIC5wb3NpdGlvbigpXHJcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZHJvcGRvd24udHJpZ2dlcilcclxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMoW3BvcywgdGhpcy5pbnZlcnRQb3NpdGlvbihwb3MpXSlcclxuICAgICAgICAgICAgLndpdGhWaWV3cG9ydE1hcmdpbigxMilcclxuICAgICAgICAgICAgLndpdGhQdXNoKHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJbnZlcnRzIGFuIG92ZXJsYXkgcG9zaXRpb24uICovXHJcbiAgICBwcml2YXRlIGludmVydFBvc2l0aW9uKHBvczogQ29ubmVjdGVkUG9zaXRpb24pOiBDb25uZWN0ZWRQb3NpdGlvbiB7XHJcbiAgICAgICAgY29uc3QgaW52ZXJ0ZWQgPSB7IC4uLnBvcyB9O1xyXG4gICAgICAgIGludmVydGVkLm9yaWdpblkgPSBwb3Mub3JpZ2luWSA9PT0gJ3RvcCcgPyAnYm90dG9tJyA6ICd0b3AnO1xyXG4gICAgICAgIGludmVydGVkLm92ZXJsYXlZID0gcG9zLm92ZXJsYXlZID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCc7XHJcblxyXG4gICAgICAgIHJldHVybiBpbnZlcnRlZDtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -1,4 +1,5 @@
1
1
  import { ChangeDetectionStrategy, Component, ViewChild, } from '@angular/core';
2
+ import { SharedModule } from '../../shared.module';
2
3
  import { ExtensionHostService } from './extension-host.service';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@angular/router";
@@ -68,13 +69,13 @@ export class ExtensionHostComponent {
68
69
  return input.hasOwnProperty('extensionUrl');
69
70
  }
70
71
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ExtensionHostComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.DomSanitizer }, { token: i3.ExtensionHostService }], target: i0.ɵɵFactoryTarget.Component }); }
71
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: ExtensionHostComponent, selector: "vdr-extension-host", providers: [ExtensionHostService], viewQueries: [{ propertyName: "extensionFrame", first: true, predicate: ["extensionFrame"], descendants: true }], ngImport: i0, template: "<ng-template [ngIf]=\"openInIframe\" [ngIfElse]=\"launchExtension\">\r\n <iframe [src]=\"extensionUrl\" #extensionFrame></iframe>\r\n</ng-template>\r\n<ng-template #launchExtension>\r\n <div class=\"launch-button\" [class.launched]=\"extensionWindowIsOpen\">\r\n <div>\r\n <button\r\n class=\"btn btn-lg btn-primary\"\r\n [disabled]=\"extensionWindowIsOpen\"\r\n (click)=\"launchExtensionWindow()\"\r\n >\r\n <clr-icon shape=\"pop-out\"></clr-icon>\r\n {{ 'common.launch-extension' | translate }}\r\n </button>\r\n <h3 class=\"window-hint\" [class.visible]=\"extensionWindowIsOpen\">\r\n {{ 'common.extension-running-in-separate-window' | translate }}\r\n </h3>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["iframe{position:absolute;inset:0;width:100%;height:100%;border:none}.launch-button{position:absolute;inset:0;width:100%;height:100%;border:none;padding:24px;display:flex;align-items:center;justify-content:center;transition:background-color .3s;text-align:center}.launch-button.launched{background-color:var(--color-component-bg-300)}.window-hint{visibility:hidden;opacity:0;transition:visibility .3s 0,opacity .3s}.window-hint.visible{visibility:visible;opacity:1;transition:visibility 0,opacity .3s}\n"], dependencies: [{ kind: "directive", type: i4.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
72
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: ExtensionHostComponent, isStandalone: true, selector: "vdr-extension-host", providers: [ExtensionHostService], viewQueries: [{ propertyName: "extensionFrame", first: true, predicate: ["extensionFrame"], descendants: true }], ngImport: i0, template: "<ng-template [ngIf]=\"openInIframe\" [ngIfElse]=\"launchExtension\">\r\n <iframe [src]=\"extensionUrl\" #extensionFrame></iframe>\r\n</ng-template>\r\n<ng-template #launchExtension>\r\n <div class=\"launch-button\" [class.launched]=\"extensionWindowIsOpen\">\r\n <div>\r\n <button\r\n class=\"btn btn-lg btn-primary\"\r\n [disabled]=\"extensionWindowIsOpen\"\r\n (click)=\"launchExtensionWindow()\"\r\n >\r\n <clr-icon shape=\"pop-out\"></clr-icon>\r\n {{ 'common.launch-extension' | translate }}\r\n </button>\r\n <h3 class=\"window-hint\" [class.visible]=\"extensionWindowIsOpen\">\r\n {{ 'common.extension-running-in-separate-window' | translate }}\r\n </h3>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["iframe{position:absolute;inset:0;width:100%;height:100%;border:none}.launch-button{position:absolute;inset:0;width:100%;height:100%;border:none;padding:24px;display:flex;align-items:center;justify-content:center;transition:background-color .3s;text-align:center}.launch-button.launched{background-color:var(--color-component-bg-300)}.window-hint{visibility:hidden;opacity:0;transition:visibility .3s 0,opacity .3s}.window-hint.visible{visibility:visible;opacity:1;transition:visibility 0,opacity .3s}\n"], dependencies: [{ kind: "ngmodule", type: SharedModule }, { kind: "directive", type: i4.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Default }); }
72
73
  }
73
74
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: ExtensionHostComponent, decorators: [{
74
75
  type: Component,
75
- args: [{ selector: 'vdr-extension-host', changeDetection: ChangeDetectionStrategy.Default, providers: [ExtensionHostService], template: "<ng-template [ngIf]=\"openInIframe\" [ngIfElse]=\"launchExtension\">\r\n <iframe [src]=\"extensionUrl\" #extensionFrame></iframe>\r\n</ng-template>\r\n<ng-template #launchExtension>\r\n <div class=\"launch-button\" [class.launched]=\"extensionWindowIsOpen\">\r\n <div>\r\n <button\r\n class=\"btn btn-lg btn-primary\"\r\n [disabled]=\"extensionWindowIsOpen\"\r\n (click)=\"launchExtensionWindow()\"\r\n >\r\n <clr-icon shape=\"pop-out\"></clr-icon>\r\n {{ 'common.launch-extension' | translate }}\r\n </button>\r\n <h3 class=\"window-hint\" [class.visible]=\"extensionWindowIsOpen\">\r\n {{ 'common.extension-running-in-separate-window' | translate }}\r\n </h3>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["iframe{position:absolute;inset:0;width:100%;height:100%;border:none}.launch-button{position:absolute;inset:0;width:100%;height:100%;border:none;padding:24px;display:flex;align-items:center;justify-content:center;transition:background-color .3s;text-align:center}.launch-button.launched{background-color:var(--color-component-bg-300)}.window-hint{visibility:hidden;opacity:0;transition:visibility .3s 0,opacity .3s}.window-hint.visible{visibility:visible;opacity:1;transition:visibility 0,opacity .3s}\n"] }]
76
+ args: [{ selector: 'vdr-extension-host', changeDetection: ChangeDetectionStrategy.Default, standalone: true, imports: [SharedModule], providers: [ExtensionHostService], template: "<ng-template [ngIf]=\"openInIframe\" [ngIfElse]=\"launchExtension\">\r\n <iframe [src]=\"extensionUrl\" #extensionFrame></iframe>\r\n</ng-template>\r\n<ng-template #launchExtension>\r\n <div class=\"launch-button\" [class.launched]=\"extensionWindowIsOpen\">\r\n <div>\r\n <button\r\n class=\"btn btn-lg btn-primary\"\r\n [disabled]=\"extensionWindowIsOpen\"\r\n (click)=\"launchExtensionWindow()\"\r\n >\r\n <clr-icon shape=\"pop-out\"></clr-icon>\r\n {{ 'common.launch-extension' | translate }}\r\n </button>\r\n <h3 class=\"window-hint\" [class.visible]=\"extensionWindowIsOpen\">\r\n {{ 'common.extension-running-in-separate-window' | translate }}\r\n </h3>\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: ["iframe{position:absolute;inset:0;width:100%;height:100%;border:none}.launch-button{position:absolute;inset:0;width:100%;height:100%;border:none;padding:24px;display:flex;align-items:center;justify-content:center;transition:background-color .3s;text-align:center}.launch-button.launched{background-color:var(--color-component-bg-300)}.window-hint{visibility:hidden;opacity:0;transition:visibility .3s 0,opacity .3s}.window-hint.visible{visibility:visible;opacity:1;transition:visibility 0,opacity .3s}\n"] }]
76
77
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.DomSanitizer }, { type: i3.ExtensionHostService }]; }, propDecorators: { extensionFrame: [{
77
78
  type: ViewChild,
78
79
  args: ['extensionFrame']
79
80
  }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9uLWhvc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9zaGFyZWQvY29tcG9uZW50cy9leHRlbnNpb24taG9zdC9leHRlbnNpb24taG9zdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2V4dGVuc2lvbi1ob3N0L2V4dGVuc2lvbi1ob3N0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUlULFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7QUFFaEU7OztHQUdHO0FBUUgsTUFBTSxPQUFPLHNCQUFzQjtJQVEvQixZQUNZLEtBQXFCLEVBQ3JCLFNBQXVCLEVBQ3ZCLG9CQUEwQztRQUYxQyxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3ZCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFUdEQsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO0lBUzNCLENBQUM7SUFFSixRQUFRO1FBQ0osTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FDWCwrQ0FBK0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUM1RixDQUFDO1NBQ0w7UUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLDhCQUE4QixDQUM3RCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxhQUFhLENBQzVDLENBQUM7SUFDTixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7WUFDeEUsSUFBSSxlQUFlLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDeEU7U0FDSjtJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEM7SUFDTCxDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2xCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztRQUV2QyxJQUFJLEtBQWEsQ0FBQztRQUNsQixTQUFTLGVBQWUsQ0FBQyxTQUFpQixFQUFFLFFBQW9CO1lBQzVELElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtnQkFDbEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0IsUUFBUSxFQUFFLENBQUM7YUFDZDtpQkFBTTtnQkFDSCxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQzlFO1FBQ0wsQ0FBQztRQUVELGVBQWUsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7WUFDbkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQVU7UUFDcEMsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2hELENBQUM7OEdBdEVRLHNCQUFzQjtrR0FBdEIsc0JBQXNCLDZDQUZwQixDQUFDLG9CQUFvQixDQUFDLDRJQ3hCckMsMjJCQW9CQTs7MkZETWEsc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNJLG9CQUFvQixtQkFHYix1QkFBdUIsQ0FBQyxPQUFPLGFBQ3JDLENBQUMsb0JBQW9CLENBQUM7bUtBUUksY0FBYztzQkFBbEQsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlUmVzb3VyY2VVcmwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgRXh0ZW5zaW9uSG9zdENvbmZpZyB9IGZyb20gJy4vZXh0ZW5zaW9uLWhvc3QtY29uZmlnJztcclxuaW1wb3J0IHsgRXh0ZW5zaW9uSG9zdFNlcnZpY2UgfSBmcm9tICcuL2V4dGVuc2lvbi1ob3N0LnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgY29tcG9uZW50IHVzZXMgYW4gaWZyYW1lIHRvIGVtYmVkIGFuIGV4dGVybmFsIHVybCBpbnRvIHRoZSBBZG1pbiBVSSwgYW5kIHVzZXMgdGhlIFBvc3RNZXNzYWdlXHJcbiAqIHByb3RvY29sIHRvIGFsbG93IGNyb3NzLWZyYW1lIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgdHdvIGZyYW1lcy5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItZXh0ZW5zaW9uLWhvc3QnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V4dGVuc2lvbi1ob3N0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2V4dGVuc2lvbi1ob3N0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXHJcbiAgICBwcm92aWRlcnM6IFtFeHRlbnNpb25Ib3N0U2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFeHRlbnNpb25Ib3N0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgZXh0ZW5zaW9uVXJsOiBTYWZlUmVzb3VyY2VVcmw7XHJcbiAgICBvcGVuSW5JZnJhbWUgPSB0cnVlO1xyXG4gICAgZXh0ZW5zaW9uV2luZG93SXNPcGVuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGNvbmZpZzogRXh0ZW5zaW9uSG9zdENvbmZpZztcclxuICAgIHByaXZhdGUgZXh0ZW5zaW9uV2luZG93PzogV2luZG93O1xyXG4gICAgQFZpZXdDaGlsZCgnZXh0ZW5zaW9uRnJhbWUnKSBwcml2YXRlIGV4dGVuc2lvbkZyYW1lOiBFbGVtZW50UmVmPEhUTUxJRnJhbWVFbGVtZW50PjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgIHByaXZhdGUgZXh0ZW5zaW9uSG9zdFNlcnZpY2U6IEV4dGVuc2lvbkhvc3RTZXJ2aWNlLFxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5yb3V0ZS5zbmFwc2hvdDtcclxuICAgICAgICBpZiAoIXRoaXMuaXNFeHRlbnNpb25Ib3N0Q29uZmlnKGRhdGEuZXh0ZW5zaW9uSG9zdENvbmZpZykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgYEV4cGVjdGVkIGFuIEV4dGVuc2lvbkhvc3RDb25maWcgb2JqZWN0LCBnb3QgJHtKU09OLnN0cmluZ2lmeShkYXRhLmV4dGVuc2lvbkhvc3RDb25maWcpfWAsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29uZmlnID0gZGF0YS5leHRlbnNpb25Ib3N0Q29uZmlnO1xyXG4gICAgICAgIHRoaXMub3BlbkluSWZyYW1lID0gIXRoaXMuY29uZmlnLm9wZW5Jbk5ld1RhYjtcclxuICAgICAgICB0aGlzLmV4dGVuc2lvblVybCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChcclxuICAgICAgICAgICAgdGhpcy5jb25maWcuZXh0ZW5zaW9uVXJsIHx8ICdhYm91dDpibGFuaycsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMub3BlbkluSWZyYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbldpbmRvdyA9IHRoaXMuZXh0ZW5zaW9uRnJhbWUubmF0aXZlRWxlbWVudC5jb250ZW50V2luZG93O1xyXG4gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uV2luZG93KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4dGVuc2lvbkhvc3RTZXJ2aWNlLmluaXQoZXh0ZW5zaW9uV2luZG93LCB0aGlzLnJvdXRlLnNuYXBzaG90KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5leHRlbnNpb25XaW5kb3cpIHtcclxuICAgICAgICAgICAgdGhpcy5leHRlbnNpb25XaW5kb3cuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGF1bmNoRXh0ZW5zaW9uV2luZG93KCkge1xyXG4gICAgICAgIGNvbnN0IGV4dGVuc2lvbldpbmRvdyA9IHdpbmRvdy5vcGVuKHRoaXMuY29uZmlnLmV4dGVuc2lvblVybCk7XHJcbiAgICAgICAgaWYgKCFleHRlbnNpb25XaW5kb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmV4dGVuc2lvbkhvc3RTZXJ2aWNlLmluaXQoZXh0ZW5zaW9uV2luZG93LCB0aGlzLnJvdXRlLnNuYXBzaG90KTtcclxuICAgICAgICB0aGlzLmV4dGVuc2lvbldpbmRvd0lzT3BlbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5leHRlbnNpb25XaW5kb3cgPSBleHRlbnNpb25XaW5kb3c7XHJcblxyXG4gICAgICAgIGxldCB0aW1lcjogbnVtYmVyO1xyXG4gICAgICAgIGZ1bmN0aW9uIHBvbGxXaW5kb3dTdGF0ZShleHR3aW5kb3c6IFdpbmRvdywgb25DbG9zZWQ6ICgpID0+IHZvaWQpIHtcclxuICAgICAgICAgICAgaWYgKGV4dHdpbmRvdy5jbG9zZWQpIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICAgICAgb25DbG9zZWQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gcG9sbFdpbmRvd1N0YXRlKGV4dHdpbmRvdywgb25DbG9zZWQpLCAyNTApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwb2xsV2luZG93U3RhdGUoZXh0ZW5zaW9uV2luZG93LCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uV2luZG93SXNPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uSG9zdFNlcnZpY2UuZGVzdHJveSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNFeHRlbnNpb25Ib3N0Q29uZmlnKGlucHV0OiBhbnkpOiBpbnB1dCBpcyBFeHRlbnNpb25Ib3N0Q29uZmlnIHtcclxuICAgICAgICByZXR1cm4gaW5wdXQuaGFzT3duUHJvcGVydHkoJ2V4dGVuc2lvblVybCcpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSBbbmdJZl09XCJvcGVuSW5JZnJhbWVcIiBbbmdJZkVsc2VdPVwibGF1bmNoRXh0ZW5zaW9uXCI+XHJcbiAgICA8aWZyYW1lIFtzcmNdPVwiZXh0ZW5zaW9uVXJsXCIgI2V4dGVuc2lvbkZyYW1lPjwvaWZyYW1lPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI2xhdW5jaEV4dGVuc2lvbj5cclxuICAgIDxkaXYgY2xhc3M9XCJsYXVuY2gtYnV0dG9uXCIgW2NsYXNzLmxhdW5jaGVkXT1cImV4dGVuc2lvbldpbmRvd0lzT3BlblwiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZXh0ZW5zaW9uV2luZG93SXNPcGVuXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJsYXVuY2hFeHRlbnNpb25XaW5kb3coKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInBvcC1vdXRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5sYXVuY2gtZXh0ZW5zaW9uJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwid2luZG93LWhpbnRcIiBbY2xhc3MudmlzaWJsZV09XCJleHRlbnNpb25XaW5kb3dJc09wZW5cIj5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24uZXh0ZW5zaW9uLXJ1bm5pbmctaW4tc2VwYXJhdGUtd2luZG93JyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZW5zaW9uLWhvc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NyYy9zaGFyZWQvY29tcG9uZW50cy9leHRlbnNpb24taG9zdC9leHRlbnNpb24taG9zdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvcmUvc3JjL3NoYXJlZC9jb21wb25lbnRzL2V4dGVuc2lvbi1ob3N0L2V4dGVuc2lvbi1ob3N0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUlULFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7O0FBRWhFOzs7R0FHRztBQVVILE1BQU0sT0FBTyxzQkFBc0I7SUFRL0IsWUFDWSxLQUFxQixFQUNyQixTQUF1QixFQUN2QixvQkFBMEM7UUFGMUMsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBVHRELGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztJQVMzQixDQUFDO0lBRUosUUFBUTtRQUNKLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1lBQ3ZELE1BQU0sSUFBSSxLQUFLLENBQ1gsK0NBQStDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FDNUYsQ0FBQztTQUNMO1FBQ0QsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyw4QkFBOEIsQ0FDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksYUFBYSxDQUM1QyxDQUFDO0lBQ04sQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO1lBQ3hFLElBQUksZUFBZSxFQUFFO2dCQUNqQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ3hFO1NBQ0o7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQjtRQUNqQixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNsQixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFFdkMsSUFBSSxLQUFhLENBQUM7UUFDbEIsU0FBUyxlQUFlLENBQUMsU0FBaUIsRUFBRSxRQUFvQjtZQUM1RCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2xCLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNCLFFBQVEsRUFBRSxDQUFDO2FBQ2Q7aUJBQU07Z0JBQ0gsS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUM5RTtRQUNMLENBQUM7UUFFRCxlQUFlLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFVO1FBQ3BDLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNoRCxDQUFDOzhHQXRFUSxzQkFBc0I7a0dBQXRCLHNCQUFzQixpRUFGcEIsQ0FBQyxvQkFBb0IsQ0FBQyw0SUMzQnJDLDIyQkFvQkEsK2lCRE1jLFlBQVk7OzJGQUdiLHNCQUFzQjtrQkFUbEMsU0FBUzsrQkFDSSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsT0FBTyxjQUNwQyxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsYUFDWixDQUFDLG9CQUFvQixDQUFDO21LQVFJLGNBQWM7c0JBQWxELFNBQVM7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU2hhcmVkTW9kdWxlIH0gZnJvbSAnLi4vLi4vc2hhcmVkLm1vZHVsZSc7XHJcblxyXG5pbXBvcnQgeyBFeHRlbnNpb25Ib3N0Q29uZmlnIH0gZnJvbSAnLi9leHRlbnNpb24taG9zdC1jb25maWcnO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25Ib3N0U2VydmljZSB9IGZyb20gJy4vZXh0ZW5zaW9uLWhvc3Quc2VydmljZSc7XHJcblxyXG4vKipcclxuICogVGhpcyBjb21wb25lbnQgdXNlcyBhbiBpZnJhbWUgdG8gZW1iZWQgYW4gZXh0ZXJuYWwgdXJsIGludG8gdGhlIEFkbWluIFVJLCBhbmQgdXNlcyB0aGUgUG9zdE1lc3NhZ2VcclxuICogcHJvdG9jb2wgdG8gYWxsb3cgY3Jvc3MtZnJhbWUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSB0d28gZnJhbWVzLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1leHRlbnNpb24taG9zdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXh0ZW5zaW9uLWhvc3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZXh0ZW5zaW9uLWhvc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbU2hhcmVkTW9kdWxlXSxcclxuICAgIHByb3ZpZGVyczogW0V4dGVuc2lvbkhvc3RTZXJ2aWNlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEV4dGVuc2lvbkhvc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgICBleHRlbnNpb25Vcmw6IFNhZmVSZXNvdXJjZVVybDtcclxuICAgIG9wZW5JbklmcmFtZSA9IHRydWU7XHJcbiAgICBleHRlbnNpb25XaW5kb3dJc09wZW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgY29uZmlnOiBFeHRlbnNpb25Ib3N0Q29uZmlnO1xyXG4gICAgcHJpdmF0ZSBleHRlbnNpb25XaW5kb3c/OiBXaW5kb3c7XHJcbiAgICBAVmlld0NoaWxkKCdleHRlbnNpb25GcmFtZScpIHByaXZhdGUgZXh0ZW5zaW9uRnJhbWU6IEVsZW1lbnRSZWY8SFRNTElGcmFtZUVsZW1lbnQ+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBleHRlbnNpb25Ib3N0U2VydmljZTogRXh0ZW5zaW9uSG9zdFNlcnZpY2UsXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnJvdXRlLnNuYXBzaG90O1xyXG4gICAgICAgIGlmICghdGhpcy5pc0V4dGVuc2lvbkhvc3RDb25maWcoZGF0YS5leHRlbnNpb25Ib3N0Q29uZmlnKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgRXhwZWN0ZWQgYW4gRXh0ZW5zaW9uSG9zdENvbmZpZyBvYmplY3QsIGdvdCAke0pTT04uc3RyaW5naWZ5KGRhdGEuZXh0ZW5zaW9uSG9zdENvbmZpZyl9YCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBkYXRhLmV4dGVuc2lvbkhvc3RDb25maWc7XHJcbiAgICAgICAgdGhpcy5vcGVuSW5JZnJhbWUgPSAhdGhpcy5jb25maWcub3BlbkluTmV3VGFiO1xyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uVXJsID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKFxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5leHRlbnNpb25VcmwgfHwgJ2Fib3V0OmJsYW5rJyxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5vcGVuSW5JZnJhbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgZXh0ZW5zaW9uV2luZG93ID0gdGhpcy5leHRlbnNpb25GcmFtZS5uYXRpdmVFbGVtZW50LmNvbnRlbnRXaW5kb3c7XHJcbiAgICAgICAgICAgIGlmIChleHRlbnNpb25XaW5kb3cpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXh0ZW5zaW9uSG9zdFNlcnZpY2UuaW5pdChleHRlbnNpb25XaW5kb3csIHRoaXMucm91dGUuc25hcHNob3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmV4dGVuc2lvbldpbmRvdykge1xyXG4gICAgICAgICAgICB0aGlzLmV4dGVuc2lvbldpbmRvdy5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsYXVuY2hFeHRlbnNpb25XaW5kb3coKSB7XHJcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uV2luZG93ID0gd2luZG93Lm9wZW4odGhpcy5jb25maWcuZXh0ZW5zaW9uVXJsKTtcclxuICAgICAgICBpZiAoIWV4dGVuc2lvbldpbmRvdykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uSG9zdFNlcnZpY2UuaW5pdChleHRlbnNpb25XaW5kb3csIHRoaXMucm91dGUuc25hcHNob3QpO1xyXG4gICAgICAgIHRoaXMuZXh0ZW5zaW9uV2luZG93SXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmV4dGVuc2lvbldpbmRvdyA9IGV4dGVuc2lvbldpbmRvdztcclxuXHJcbiAgICAgICAgbGV0IHRpbWVyOiBudW1iZXI7XHJcbiAgICAgICAgZnVuY3Rpb24gcG9sbFdpbmRvd1N0YXRlKGV4dHdpbmRvdzogV2luZG93LCBvbkNsb3NlZDogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgICAgICBpZiAoZXh0d2luZG93LmNsb3NlZCkge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcik7XHJcbiAgICAgICAgICAgICAgICBvbkNsb3NlZCgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiBwb2xsV2luZG93U3RhdGUoZXh0d2luZG93LCBvbkNsb3NlZCksIDI1MCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBvbGxXaW5kb3dTdGF0ZShleHRlbnNpb25XaW5kb3csICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5leHRlbnNpb25XaW5kb3dJc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5leHRlbnNpb25Ib3N0U2VydmljZS5kZXN0cm95KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc0V4dGVuc2lvbkhvc3RDb25maWcoaW5wdXQ6IGFueSk6IGlucHV0IGlzIEV4dGVuc2lvbkhvc3RDb25maWcge1xyXG4gICAgICAgIHJldHVybiBpbnB1dC5oYXNPd25Qcm9wZXJ0eSgnZXh0ZW5zaW9uVXJsJyk7XHJcbiAgICB9XHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIm9wZW5JbklmcmFtZVwiIFtuZ0lmRWxzZV09XCJsYXVuY2hFeHRlbnNpb25cIj5cclxuICAgIDxpZnJhbWUgW3NyY109XCJleHRlbnNpb25VcmxcIiAjZXh0ZW5zaW9uRnJhbWU+PC9pZnJhbWU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjbGF1bmNoRXh0ZW5zaW9uPlxyXG4gICAgPGRpdiBjbGFzcz1cImxhdW5jaC1idXR0b25cIiBbY2xhc3MubGF1bmNoZWRdPVwiZXh0ZW5zaW9uV2luZG93SXNPcGVuXCI+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWxnIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJleHRlbnNpb25XaW5kb3dJc09wZW5cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImxhdW5jaEV4dGVuc2lvbldpbmRvdygpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwicG9wLW91dFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmxhdW5jaC1leHRlbnNpb24nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJ3aW5kb3ctaGludFwiIFtjbGFzcy52aXNpYmxlXT1cImV4dGVuc2lvbldpbmRvd0lzT3BlblwiPlxyXG4gICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5leHRlbnNpb24tcnVubmluZy1pbi1zZXBhcmF0ZS13aW5kb3cnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19