kitsng-form-factory 0.4.41 → 0.4.43

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.
@@ -39,7 +39,9 @@ export class LookupSelectComponent {
39
39
  this.firstTime = true;
40
40
  this.loadingOptions = signal(true);
41
41
  this.tempOptions = [];
42
+ this.optionsUpdated = signal(0);
42
43
  this.dropdownOptions = computed(() => {
44
+ this.optionsUpdated();
43
45
  return this.options()?.dropdownOptions ?? [];
44
46
  });
45
47
  this.loadingError = signal(false);
@@ -103,10 +105,10 @@ export class LookupSelectComponent {
103
105
  .subscribe({
104
106
  next: (response) => {
105
107
  this.totalItems = response?.data?.pageInfo?.totalItems;
106
- if (!this.options().dropdownOptions || this.pageIndex == 1) {
107
- this.options().dropdownOptions = [];
108
- }
109
- this.options().dropdownOptions.push(...(this.mappOptions(response.data?.items) ?? []));
108
+ const currentOptions = (!this.options().dropdownOptions || this.pageIndex == 1) ? [] : this.options().dropdownOptions;
109
+ const mapped = this.mappOptions(response.data?.items) ?? [];
110
+ const combined = [...currentOptions, ...mapped];
111
+ this.options().dropdownOptions = this.deduplicate(combined);
110
112
  if (this.options().dropdownOptions?.length > 0 && this.firstTime) {
111
113
  if (this.options()?.value) {
112
114
  this._formControl.setValue(this.options()?.value);
@@ -114,7 +116,6 @@ export class LookupSelectComponent {
114
116
  this.allTotalItems = response?.data?.pageInfo?.totalItems;
115
117
  this.firstTime = false;
116
118
  }
117
- this.options().dropdownOptions = this.deduplicate(this.options()?.dropdownOptions);
118
119
  if (!this.filterWord) {
119
120
  this.tempOptions = this.options().dropdownOptions;
120
121
  }
@@ -214,6 +215,20 @@ export class LookupSelectComponent {
214
215
  this.applyfilter();
215
216
  }
216
217
  }
218
+ getIsLazyLoadEnabled() {
219
+ const path = this.options()?.path ?? 'page';
220
+ return path === 'page' && (this.totalItems > (this.options()?.dropdownOptions?.length || 0));
221
+ }
222
+ onLazyLoad(event) {
223
+ if (this.loadingOptions()) {
224
+ return;
225
+ }
226
+ if (this.getIsLazyLoadEnabled()) {
227
+ if (event.last >= (this.options()?.dropdownOptions?.length || 0) - 1) {
228
+ this.loadMore();
229
+ }
230
+ }
231
+ }
217
232
  loadMore() {
218
233
  this.pageIndex++;
219
234
  this.getOptions();
@@ -285,8 +300,15 @@ export class LookupSelectComponent {
285
300
  this.updateOverlayDropdownoptions();
286
301
  }
287
302
  updateOverlayDropdownoptions() {
288
- if (this.pdropdown?.options) {
289
- this.pdropdown.options = this.options().dropdownOptions;
303
+ this.optionsUpdated.update((v) => v + 1);
304
+ if (this.pdropdown) {
305
+ this.pdropdown.options = this.dropdownOptions();
306
+ setTimeout(() => {
307
+ const dropdown = this.pdropdown;
308
+ if (dropdown?.overlayVisible) {
309
+ dropdown.alignOverlay();
310
+ }
311
+ });
290
312
  }
291
313
  }
292
314
  copyToClipboard() {
@@ -320,11 +342,11 @@ export class LookupSelectComponent {
320
342
  this.destroy$.complete();
321
343
  }
322
344
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LookupSelectComponent, deps: [{ token: i1.LookupListService }, { token: i2.MessageService }], target: i0.ɵɵFactoryTarget.Component }); }
323
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: LookupSelectComponent, selector: "app-lookup-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: false, isRequired: false, transformFunction: null }, _formControl: { classPropertyName: "_formControl", publicName: "_formControl", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { modelChange: "modelChange", handleChange: "handleChange" }, viewQueries: [{ propertyName: "pdropdown", first: true, predicate: ["pdropdown"], descendants: true }], ngImport: i0, template: "<app-form-element-layout\n [options]=\"options()\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <div class=\"{{ options().showCopyButton ? 'd-flex flex align-items-center': '' }}\">\n <div class=\"{{ options().showCopyButton ? 'flex-1': '' }}\">\n <p-dropdown\n #pdropdown\n [options]=\"dropdownOptions()\"\n [placeholder]=\"(options().placeholder??'') | translate\"\n [formControl]=\"_formControl\"\n [optionLabel]=\"options().optionLabel ?? 'text'\"\n [optionValue]=\"options().optionValue ?? 'id'\"\n [optionGroupLabel]=\"options().optionGroupLabel ?? 'text'\"\n [optionGroupChildren]=\"options().optionGroupChildren ?? 'items'\"\n [group]=\"options().group ?? false\"\n styleClass=\"{{options().class ?? 'w-full'}}\"\n [showClear]=\"options().showClear ?? false\"\n [appendTo]=\"options().appendTo ?? 'body'\"\n [filter]=\"options().filter ?? false\"\n [filterBy]=\"options().filterBy ?? 'text'\"\n [autofocusFilter]=\"options().autofocusFilter ?? false\"\n [autoDisplayFirst]=\"options().autoDisplayFirst ?? false\"\n [autofocus]=\"options().autofocus ?? false\"\n [resetFilterOnHide]=\"true\"\n (onHide)=\"resetFilter()\"\n [readonly]=\"options().readonly ?? false\"\n [ngClass]=\"{'ng-invalid ng-dirty': (_formControl.errors && (_formControl.dirty || _formControl.touched) && !loadingOptions()) ?? false}\"\n (ngModelChange)=\"ngModelChange($event)\"\n\n [virtualScroll]=\"options().virtualScroll ?? false\"\n [virtualScrollItemSize]=\"options().virtualScrollItemSize ?? 10\"\n >\n @if (options().itemTemplate) {\n <ng-template let-option pTemplate=\"item\">\n <ng-template\n [ngTemplateOutlet]=\"options().itemTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: option,\n field: field,\n formControl: _formControl,\n options: options(),\n formGroup: _formControl.parent,\n }\">\n </ng-template>\n </ng-template>\n }\n @if (options().selectedItemTemplate) {\n <ng-template pTemplate=\"selectedItem\">\n <ng-template\n [ngTemplateOutlet]=\"options().selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: _formControl.value,\n field: field,\n formControl: _formControl,\n options: options(),\n formGroup: _formControl.parent,\n }\">\n </ng-template>\n </ng-template>\n }\n @if (options().filter) {\n <ng-template pTemplate=\"filter\">\n <ng-container *ngIf=\"options().filterTemplate; else defaultFilterTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"options().filterTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: field,\n formControl: _formControl,\n options: options(),\n refresh: refresh.bind(this),\n formGroup: _formControl.parent,\n defaultTemplate: defaultFilterTemplate\n }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultFilterTemplate>\n <div class=\"p-inputgroup\" style=\"width: 100%;\">\n <span class=\"p-inputgroup-addon\"><i class=\"pi pi-search\"></i></span>\n <input\n pInputText\n pAutoFocus\n placeholder=\"Search Item\"\n [(ngModel)]=\"filterWord\"\n [autofocus]=\"options().autofocusFilter ?? false\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"filterOptions()\"\n (keydown)=\"onKeyDown($event)\"\n style=\"width: 100%;\" />\n </div>\n </ng-template>\n </ng-template>\n }\n <ng-template pTemplate=\"empty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-template>\n <ng-template pTemplate=\"footer\">\n @if (!loadingOptions()) {\n @if (totalItems > (tempOptions.length || 0)) {\n <div class=\"flex d-flex align-items-center justify-content-center\">\n <p-button type=\"button\" styleClass=\"p-button-outlined p-button-link\" label=\"Load More\" icon=\"pi pi-spinner\" (onClick)=\"loadMore()\"></p-button>\n </div>\n }\n } @else {\n @if (!firstTime && ((pdropdown?.options?.length || 0) > 0)) {\n <div class=\"flex d-flex align-items-center justify-content-center text-primary fw-medium py-3 gap-2\">\n <i class=\"pi pi-spinner-dotted pi-spin \"></i>\n <span>{{'Loading Options'|translate}}...</span>\n </div>\n }\n }\n </ng-template>\n </p-dropdown>\n </div>\n @if (options().showCopyButton) {\n <p-button\n icon=\"pi pi-copy\"\n styleClass=\"p-button-outlined p-button-info border-0\"\n (onClick)=\"copyToClipboard()\"\n [disabled]=\"!_formControl.value || _formControl.value === ''\">\n </p-button>\n }\n </div>\n <app-field-errors\n [customErrorMessages]=\"options()?.errorMessages || {}\"\n [controlName]=\"options()?.formControlName\"\n [errors]=\"getErrors()\"\n [errorMessage]=\"options().errorMessage || ''\"\n [showErrors]=\"(_formControl.dirty || _formControl.touched) && !loadingOptions() && options()?.showError != false\"></app-field-errors>\n </ng-template>\n\n <ng-template #emptyTemplate>\n <div class=\"text-center\">\n @if (loadingOptions()) {\n <div>\n <p-progressSpinner styleClass=\"w-4rem h-4rem\"></p-progressSpinner>\n <p>{{'Loading Options'|translate}}</p>\n </div>\n } @else if (loadingError()) {\n <div>\n <p>{{'Failed to load options.'|translate}}</p>\n <p-button\n label=\"Retry\"\n icon=\"pi pi-refresh\"\n (onClick)=\"getOptions()\"\n styleClass=\"p-button-outlined p-button-danger\" />\n </div>\n } @else {\n <p>\n {{'No Options Found'|translate}}\n </p>\n }\n </div>\n </ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i6.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i8.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i9.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "component", type: i10.FormElementLayoutComponent, selector: "app-form-element-layout", inputs: ["options", "field", "controlTemplateRef", "formControlRef", "customTemplate"] }, { kind: "component", type: i11.FieldErrorsComponent, selector: "app-field-errors", inputs: ["errors", "errorMessage", "controlName", "customErrorMessages", "showErrors"] }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }] }); }
345
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: LookupSelectComponent, selector: "app-lookup-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: false, isRequired: false, transformFunction: null }, _formControl: { classPropertyName: "_formControl", publicName: "_formControl", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { modelChange: "modelChange", handleChange: "handleChange" }, viewQueries: [{ propertyName: "pdropdown", first: true, predicate: ["pdropdown"], descendants: true }], ngImport: i0, template: "<app-form-element-layout\n [options]=\"options()\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <div class=\"{{ options().showCopyButton ? 'd-flex flex align-items-center': '' }}\">\n <div class=\"{{ options().showCopyButton ? 'flex-1': '' }}\">\n <p-dropdown\n #pdropdown\n [options]=\"dropdownOptions()\"\n [placeholder]=\"(options().placeholder??'') | translate\"\n [formControl]=\"_formControl\"\n [optionLabel]=\"options().optionLabel ?? 'text'\"\n [optionValue]=\"options().optionValue ?? 'id'\"\n [optionGroupLabel]=\"options().optionGroupLabel ?? 'text'\"\n [optionGroupChildren]=\"options().optionGroupChildren ?? 'items'\"\n [group]=\"options().group ?? false\"\n styleClass=\"{{options().class ?? 'w-full'}}\"\n [showClear]=\"options().showClear ?? false\"\n [appendTo]=\"options().appendTo ?? 'body'\"\n [filter]=\"options().filter ?? false\"\n [filterBy]=\"options().filterBy ?? 'text'\"\n [autofocusFilter]=\"options().autofocusFilter ?? false\"\n [autoDisplayFirst]=\"options().autoDisplayFirst ?? false\"\n [autofocus]=\"options().autofocus ?? false\"\n [resetFilterOnHide]=\"true\"\n (onHide)=\"resetFilter()\"\n [readonly]=\"options().readonly ?? false\"\n [ngClass]=\"{'ng-invalid ng-dirty': (_formControl.errors && (_formControl.dirty || _formControl.touched) && !loadingOptions()) ?? false}\"\n (ngModelChange)=\"ngModelChange($event)\"\n\n [virtualScroll]=\"options().virtualScroll != false || getIsLazyLoadEnabled()\"\n [virtualScrollItemSize]=\"options().virtualScrollItemSize ?? 34\"\n [virtualScrollOptions]=\"options().virtualScrollOptions ?? { autoSize: false }\"\n [scrollHeight]=\"options().scrollHeight ?? '200px'\"\n [lazy]=\"getIsLazyLoadEnabled()\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n >\n @if (options().itemTemplate) {\n <ng-template let-option pTemplate=\"item\">\n <ng-template\n [ngTemplateOutlet]=\"options().itemTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: option,\n field: field,\n formControl: _formControl,\n options: options(),\n formGroup: _formControl.parent,\n }\">\n </ng-template>\n </ng-template>\n }\n @if (options().selectedItemTemplate) {\n <ng-template pTemplate=\"selectedItem\">\n <ng-template\n [ngTemplateOutlet]=\"options().selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: _formControl.value,\n field: field,\n formControl: _formControl,\n options: options(),\n formGroup: _formControl.parent,\n }\">\n </ng-template>\n </ng-template>\n }\n @if (options().filter) {\n <ng-template pTemplate=\"filter\">\n <ng-container *ngIf=\"options().filterTemplate; else defaultFilterTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"options().filterTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: field,\n formControl: _formControl,\n options: options(),\n refresh: refresh.bind(this),\n formGroup: _formControl.parent,\n defaultTemplate: defaultFilterTemplate\n }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultFilterTemplate>\n <div class=\"p-inputgroup\" style=\"width: 100%;\">\n <span class=\"p-inputgroup-addon\"><i class=\"pi pi-search\"></i></span>\n <input\n pInputText\n pAutoFocus\n placeholder=\"Search Item\"\n [(ngModel)]=\"filterWord\"\n [autofocus]=\"options().autofocusFilter ?? false\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"filterOptions()\"\n (keydown)=\"onKeyDown($event)\"\n style=\"width: 100%;\" />\n </div>\n </ng-template>\n </ng-template>\n }\n <ng-template pTemplate=\"empty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-template>\n <ng-template pTemplate=\"footer\">\n @if (loadingOptions() && !firstTime && ((pdropdown?.options?.length || 0) > 0)) {\n <div class=\"flex d-flex align-items-center justify-content-center text-primary fw-medium py-3 gap-2\">\n <i class=\"pi pi-spinner-dotted pi-spin \"></i>\n <span>{{'Loading Options'|translate}}...</span>\n </div>\n }\n </ng-template>\n </p-dropdown>\n </div>\n @if (options().showCopyButton) {\n <p-button\n icon=\"pi pi-copy\"\n styleClass=\"p-button-outlined p-button-info border-0\"\n (onClick)=\"copyToClipboard()\"\n [disabled]=\"!_formControl.value || _formControl.value === ''\">\n </p-button>\n }\n </div>\n <app-field-errors\n [customErrorMessages]=\"options()?.errorMessages || {}\"\n [controlName]=\"options()?.formControlName\"\n [errors]=\"getErrors()\"\n [errorMessage]=\"options().errorMessage || ''\"\n [showErrors]=\"(_formControl.dirty || _formControl.touched) && !loadingOptions() && options()?.showError != false\"></app-field-errors>\n </ng-template>\n\n <ng-template #emptyTemplate>\n <div class=\"text-center\">\n @if (loadingOptions()) {\n <div>\n <p-progressSpinner styleClass=\"w-4rem h-4rem\"></p-progressSpinner>\n <p>{{'Loading Options'|translate}}</p>\n </div>\n } @else if (loadingError()) {\n <div>\n <p>{{'Failed to load options.'|translate}}</p>\n <p-button\n label=\"Retry\"\n icon=\"pi pi-refresh\"\n (onClick)=\"getOptions()\"\n styleClass=\"p-button-outlined p-button-danger\" />\n </div>\n } @else {\n <p>\n {{'No Options Found'|translate}}\n </p>\n }\n </div>\n </ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i6.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i7.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i8.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "directive", type: i9.AutoFocus, selector: "[pAutoFocus]", inputs: ["autofocus"] }, { kind: "component", type: i10.FormElementLayoutComponent, selector: "app-form-element-layout", inputs: ["options", "field", "controlTemplateRef", "formControlRef", "customTemplate"] }, { kind: "component", type: i11.FieldErrorsComponent, selector: "app-field-errors", inputs: ["errors", "errorMessage", "controlName", "customErrorMessages", "showErrors"] }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }] }); }
324
346
  }
325
347
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LookupSelectComponent, decorators: [{
326
348
  type: Component,
327
- args: [{ selector: 'app-lookup-select', template: "<app-form-element-layout\n [options]=\"options()\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <div class=\"{{ options().showCopyButton ? 'd-flex flex align-items-center': '' }}\">\n <div class=\"{{ options().showCopyButton ? 'flex-1': '' }}\">\n <p-dropdown\n #pdropdown\n [options]=\"dropdownOptions()\"\n [placeholder]=\"(options().placeholder??'') | translate\"\n [formControl]=\"_formControl\"\n [optionLabel]=\"options().optionLabel ?? 'text'\"\n [optionValue]=\"options().optionValue ?? 'id'\"\n [optionGroupLabel]=\"options().optionGroupLabel ?? 'text'\"\n [optionGroupChildren]=\"options().optionGroupChildren ?? 'items'\"\n [group]=\"options().group ?? false\"\n styleClass=\"{{options().class ?? 'w-full'}}\"\n [showClear]=\"options().showClear ?? false\"\n [appendTo]=\"options().appendTo ?? 'body'\"\n [filter]=\"options().filter ?? false\"\n [filterBy]=\"options().filterBy ?? 'text'\"\n [autofocusFilter]=\"options().autofocusFilter ?? false\"\n [autoDisplayFirst]=\"options().autoDisplayFirst ?? false\"\n [autofocus]=\"options().autofocus ?? false\"\n [resetFilterOnHide]=\"true\"\n (onHide)=\"resetFilter()\"\n [readonly]=\"options().readonly ?? false\"\n [ngClass]=\"{'ng-invalid ng-dirty': (_formControl.errors && (_formControl.dirty || _formControl.touched) && !loadingOptions()) ?? false}\"\n (ngModelChange)=\"ngModelChange($event)\"\n\n [virtualScroll]=\"options().virtualScroll ?? false\"\n [virtualScrollItemSize]=\"options().virtualScrollItemSize ?? 10\"\n >\n @if (options().itemTemplate) {\n <ng-template let-option pTemplate=\"item\">\n <ng-template\n [ngTemplateOutlet]=\"options().itemTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: option,\n field: field,\n formControl: _formControl,\n options: options(),\n formGroup: _formControl.parent,\n }\">\n </ng-template>\n </ng-template>\n }\n @if (options().selectedItemTemplate) {\n <ng-template pTemplate=\"selectedItem\">\n <ng-template\n [ngTemplateOutlet]=\"options().selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: _formControl.value,\n field: field,\n formControl: _formControl,\n options: options(),\n formGroup: _formControl.parent,\n }\">\n </ng-template>\n </ng-template>\n }\n @if (options().filter) {\n <ng-template pTemplate=\"filter\">\n <ng-container *ngIf=\"options().filterTemplate; else defaultFilterTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"options().filterTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: field,\n formControl: _formControl,\n options: options(),\n refresh: refresh.bind(this),\n formGroup: _formControl.parent,\n defaultTemplate: defaultFilterTemplate\n }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultFilterTemplate>\n <div class=\"p-inputgroup\" style=\"width: 100%;\">\n <span class=\"p-inputgroup-addon\"><i class=\"pi pi-search\"></i></span>\n <input\n pInputText\n pAutoFocus\n placeholder=\"Search Item\"\n [(ngModel)]=\"filterWord\"\n [autofocus]=\"options().autofocusFilter ?? false\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"filterOptions()\"\n (keydown)=\"onKeyDown($event)\"\n style=\"width: 100%;\" />\n </div>\n </ng-template>\n </ng-template>\n }\n <ng-template pTemplate=\"empty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-template>\n <ng-template pTemplate=\"footer\">\n @if (!loadingOptions()) {\n @if (totalItems > (tempOptions.length || 0)) {\n <div class=\"flex d-flex align-items-center justify-content-center\">\n <p-button type=\"button\" styleClass=\"p-button-outlined p-button-link\" label=\"Load More\" icon=\"pi pi-spinner\" (onClick)=\"loadMore()\"></p-button>\n </div>\n }\n } @else {\n @if (!firstTime && ((pdropdown?.options?.length || 0) > 0)) {\n <div class=\"flex d-flex align-items-center justify-content-center text-primary fw-medium py-3 gap-2\">\n <i class=\"pi pi-spinner-dotted pi-spin \"></i>\n <span>{{'Loading Options'|translate}}...</span>\n </div>\n }\n }\n </ng-template>\n </p-dropdown>\n </div>\n @if (options().showCopyButton) {\n <p-button\n icon=\"pi pi-copy\"\n styleClass=\"p-button-outlined p-button-info border-0\"\n (onClick)=\"copyToClipboard()\"\n [disabled]=\"!_formControl.value || _formControl.value === ''\">\n </p-button>\n }\n </div>\n <app-field-errors\n [customErrorMessages]=\"options()?.errorMessages || {}\"\n [controlName]=\"options()?.formControlName\"\n [errors]=\"getErrors()\"\n [errorMessage]=\"options().errorMessage || ''\"\n [showErrors]=\"(_formControl.dirty || _formControl.touched) && !loadingOptions() && options()?.showError != false\"></app-field-errors>\n </ng-template>\n\n <ng-template #emptyTemplate>\n <div class=\"text-center\">\n @if (loadingOptions()) {\n <div>\n <p-progressSpinner styleClass=\"w-4rem h-4rem\"></p-progressSpinner>\n <p>{{'Loading Options'|translate}}</p>\n </div>\n } @else if (loadingError()) {\n <div>\n <p>{{'Failed to load options.'|translate}}</p>\n <p-button\n label=\"Retry\"\n icon=\"pi pi-refresh\"\n (onClick)=\"getOptions()\"\n styleClass=\"p-button-outlined p-button-danger\" />\n </div>\n } @else {\n <p>\n {{'No Options Found'|translate}}\n </p>\n }\n </div>\n </ng-template>\n" }]
349
+ args: [{ selector: 'app-lookup-select', template: "<app-form-element-layout\n [options]=\"options()\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <div class=\"{{ options().showCopyButton ? 'd-flex flex align-items-center': '' }}\">\n <div class=\"{{ options().showCopyButton ? 'flex-1': '' }}\">\n <p-dropdown\n #pdropdown\n [options]=\"dropdownOptions()\"\n [placeholder]=\"(options().placeholder??'') | translate\"\n [formControl]=\"_formControl\"\n [optionLabel]=\"options().optionLabel ?? 'text'\"\n [optionValue]=\"options().optionValue ?? 'id'\"\n [optionGroupLabel]=\"options().optionGroupLabel ?? 'text'\"\n [optionGroupChildren]=\"options().optionGroupChildren ?? 'items'\"\n [group]=\"options().group ?? false\"\n styleClass=\"{{options().class ?? 'w-full'}}\"\n [showClear]=\"options().showClear ?? false\"\n [appendTo]=\"options().appendTo ?? 'body'\"\n [filter]=\"options().filter ?? false\"\n [filterBy]=\"options().filterBy ?? 'text'\"\n [autofocusFilter]=\"options().autofocusFilter ?? false\"\n [autoDisplayFirst]=\"options().autoDisplayFirst ?? false\"\n [autofocus]=\"options().autofocus ?? false\"\n [resetFilterOnHide]=\"true\"\n (onHide)=\"resetFilter()\"\n [readonly]=\"options().readonly ?? false\"\n [ngClass]=\"{'ng-invalid ng-dirty': (_formControl.errors && (_formControl.dirty || _formControl.touched) && !loadingOptions()) ?? false}\"\n (ngModelChange)=\"ngModelChange($event)\"\n\n [virtualScroll]=\"options().virtualScroll != false || getIsLazyLoadEnabled()\"\n [virtualScrollItemSize]=\"options().virtualScrollItemSize ?? 34\"\n [virtualScrollOptions]=\"options().virtualScrollOptions ?? { autoSize: false }\"\n [scrollHeight]=\"options().scrollHeight ?? '200px'\"\n [lazy]=\"getIsLazyLoadEnabled()\"\n (onLazyLoad)=\"onLazyLoad($event)\"\n >\n @if (options().itemTemplate) {\n <ng-template let-option pTemplate=\"item\">\n <ng-template\n [ngTemplateOutlet]=\"options().itemTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: option,\n field: field,\n formControl: _formControl,\n options: options(),\n formGroup: _formControl.parent,\n }\">\n </ng-template>\n </ng-template>\n }\n @if (options().selectedItemTemplate) {\n <ng-template pTemplate=\"selectedItem\">\n <ng-template\n [ngTemplateOutlet]=\"options().selectedItemTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: _formControl.value,\n field: field,\n formControl: _formControl,\n options: options(),\n formGroup: _formControl.parent,\n }\">\n </ng-template>\n </ng-template>\n }\n @if (options().filter) {\n <ng-template pTemplate=\"filter\">\n <ng-container *ngIf=\"options().filterTemplate; else defaultFilterTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"options().filterTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: field,\n formControl: _formControl,\n options: options(),\n refresh: refresh.bind(this),\n formGroup: _formControl.parent,\n defaultTemplate: defaultFilterTemplate\n }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultFilterTemplate>\n <div class=\"p-inputgroup\" style=\"width: 100%;\">\n <span class=\"p-inputgroup-addon\"><i class=\"pi pi-search\"></i></span>\n <input\n pInputText\n pAutoFocus\n placeholder=\"Search Item\"\n [(ngModel)]=\"filterWord\"\n [autofocus]=\"options().autofocusFilter ?? false\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"filterOptions()\"\n (keydown)=\"onKeyDown($event)\"\n style=\"width: 100%;\" />\n </div>\n </ng-template>\n </ng-template>\n }\n <ng-template pTemplate=\"empty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-template>\n <ng-template pTemplate=\"footer\">\n @if (loadingOptions() && !firstTime && ((pdropdown?.options?.length || 0) > 0)) {\n <div class=\"flex d-flex align-items-center justify-content-center text-primary fw-medium py-3 gap-2\">\n <i class=\"pi pi-spinner-dotted pi-spin \"></i>\n <span>{{'Loading Options'|translate}}...</span>\n </div>\n }\n </ng-template>\n </p-dropdown>\n </div>\n @if (options().showCopyButton) {\n <p-button\n icon=\"pi pi-copy\"\n styleClass=\"p-button-outlined p-button-info border-0\"\n (onClick)=\"copyToClipboard()\"\n [disabled]=\"!_formControl.value || _formControl.value === ''\">\n </p-button>\n }\n </div>\n <app-field-errors\n [customErrorMessages]=\"options()?.errorMessages || {}\"\n [controlName]=\"options()?.formControlName\"\n [errors]=\"getErrors()\"\n [errorMessage]=\"options().errorMessage || ''\"\n [showErrors]=\"(_formControl.dirty || _formControl.touched) && !loadingOptions() && options()?.showError != false\"></app-field-errors>\n </ng-template>\n\n <ng-template #emptyTemplate>\n <div class=\"text-center\">\n @if (loadingOptions()) {\n <div>\n <p-progressSpinner styleClass=\"w-4rem h-4rem\"></p-progressSpinner>\n <p>{{'Loading Options'|translate}}</p>\n </div>\n } @else if (loadingError()) {\n <div>\n <p>{{'Failed to load options.'|translate}}</p>\n <p-button\n label=\"Retry\"\n icon=\"pi pi-refresh\"\n (onClick)=\"getOptions()\"\n styleClass=\"p-button-outlined p-button-danger\" />\n </div>\n } @else {\n <p>\n {{'No Options Found'|translate}}\n </p>\n }\n </div>\n </ng-template>\n" }]
328
350
  }], ctorParameters: () => [{ type: i1.LookupListService }, { type: i2.MessageService }], propDecorators: { field: [{
329
351
  type: Input
330
352
  }], _formControl: [{
@@ -335,4 +357,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
335
357
  type: ViewChild,
336
358
  args: ['pdropdown']
337
359
  }] } });
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXRzbmctZm9ybS1mYWN0b3J5L3NyYy9saWIva2l0c25nLWZvcm0tZmFjdG9yeS9jb21wb25lbnRzL2tpdHNuZy1mb3JtLWZpZWxkcy9sb29rdXAtc2VsZWN0L2xvb2t1cC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0c25nLWZvcm0tZmFjdG9yeS9zcmMvbGliL2tpdHNuZy1mb3JtLWZhY3RvcnkvY29tcG9uZW50cy9raXRzbmctZm9ybS1maWVsZHMvbG9va3VwLXNlbGVjdC9sb29rdXAtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVVsRSxNQUFNLE9BQU8scUJBQXFCO0lBd0NoQyxZQUNVLGlCQUFvQyxFQUNwQyxjQUE4QjtRQUQ5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXpDeEM7OztXQUdHO1FBQ0gsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUNqQjs7O1dBR0c7UUFDSCxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBTyxDQUFDO1FBR2hDLGdCQUFXLEdBQUcsTUFBTSxFQUtoQixDQUFDO1FBQ0w7OztXQUdHO1FBQ08saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFD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QUFNLENBQUM7b0JBQ3hCLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsV0FBVyxJQUFJLE1BQU0sQ0FBQyxDQUFDO2dCQUN4RCwrQkFBK0I7Z0JBQy9CLFNBQVMsQ0FBQyxTQUFTO3FCQUNoQixTQUFTLENBQUMsVUFBVSxDQUFDO3FCQUNyQixJQUFJLENBQUMsR0FBRyxFQUFFO29CQUNULElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO3dCQUN0QixRQUFRLEVBQUUsTUFBTTt3QkFDaEIsT0FBTyxFQUFFLFlBQVk7d0JBQ3JCLE1BQU0sRUFBRSx1QkFBdUIsR0FBRyxVQUFVO3FCQUM3QyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO3dCQUN0QixRQUFRLEVBQUUsT0FBTzt3QkFDakIsT0FBTyxFQUFFLE9BQU87d0JBQ2hCLE1BQU0sRUFBRSxtQ0FBbUM7cUJBQzVDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0F2WFUscUJBQXFCO2tHQUFyQixxQkFBcUIsd25CQ3ZCbEMsNDJOQTZKQTs7MkZEdElhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxtQkFBbUI7bUhBY3BCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQVdJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ2lCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgaW5wdXQsXG4gIGNvbXB1dGVkLFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbmFsaXplLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvb2t1cExpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9sb29rdXAtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9raXRzbmctZm9ybS1mYWN0b3J5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxvb2t1cC1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9va3VwLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIExvb2t1cFNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiAqIEdlbmVyYWxcbiAgICogQGVycm9ycyBGb3JtIGNvbnRyb2wgZXJyb3JzXG4gICAqL1xuICBlcnJvcnM6IGFueSA9IHt9O1xuICAvKipcbiAgICogKiBJbnB1dHNcbiAgICogQG9wdGlvbnMgQ29uZmlndXJhdGlvbiBmb3IgdGhpcyBmb3JtIGZpZWxkXG4gICAqL1xuICBvcHRpb25zID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xuICBASW5wdXQoKSBmaWVsZDogYW55O1xuICBASW5wdXQoKSBfZm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDxhbnk+O1xuICBtb2RlbENoYW5nZSA9IG91dHB1dDx7XG4gICAgZXZlbnQ6IGFueTtcbiAgICBwYXJlbnRGb3JtR3JvdXA/OiBGb3JtR3JvdXA8YW55PiB8IEZvcm1BcnJheTxhbnk+IHwgbnVsbDtcbiAgICBzZWxlY3RlZE9wdGlvbj86IGFueTtcbiAgICBmaWVsZD86IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWw7XG4gIH0+KCk7XG4gIC8qKlxuICAgKiAqIE91dHB1dHNcbiAgICogQGhhbmRsZUNoYW5nZSBFdmVudCB3aGVuIGl0ZW0gaW4gZHJvcGRvd24gaXMgc2VsZWN0ZWRcbiAgICovXG4gIEBPdXRwdXQoKSBoYW5kbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQFZpZXdDaGlsZCgncGRyb3Bkb3duJykgcGRyb3Bkb3duITogRHJvcGRvd247XG4gIHBhZ2VJbmRleCA9IDE7XG4gIHRvdGFsSXRlbXMhOiBudW1iZXI7XG4gIGFsbFRvdGFsSXRlbXMhOiBudW1iZXI7XG4gIF9maWx0ZXJPcHRpb25zOiBTdWJqZWN0PHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgZmlsdGVyT3B0aW9ucyQgPSB0aGlzLl9maWx0ZXJPcHRpb25zLmFzT2JzZXJ2YWJsZSgpO1xuICBmaXJzdFRpbWUgPSB0cnVlO1xuICBmaWx0ZXJXb3JkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBsb2FkaW5nT3B0aW9ucyA9IHNpZ25hbCh0cnVlKTtcbiAgdGVtcE9wdGlvbnM6IGFueVtdID0gW107XG4gIGN1cnJlbnRPcHRpb246IGFueTtcbiAgZHJvcGRvd25PcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMoKT8uZHJvcGRvd25PcHRpb25zID8/IFtdO1xuICB9KTtcbiAgbG9hZGluZ0Vycm9yID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbG9va3VwTGlzdFNlcnZpY2U6IExvb2t1cExpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXG4gICkge31cblxuICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAqICAgICAgICAgICAgICAgIEhFTFBFUlNcbiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnMoKS52YWx1ZSA9IHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlO1xuICAgIHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgIHRoaXMuZmlsdGVyT3B0aW9ucyRcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGZpbHRlcikgPT4ge1xuICAgICAgICAgIHRoaXMuZmlsdGVyV29yZCA9IGZpbHRlcjtcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG4gIGdldEVycm9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUNvbnRyb2wuZXJyb3JzO1xuICB9XG4gIG5nTW9kZWxDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMub3B0aW9ucygpPy5kcm9wZG93bk9wdGlvbnM/LmZpbmQoXG4gICAgICAoY286IGFueSkgPT4gY29bdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlID8/ICdpZCddID09IGV2ZW50XG4gICAgKTtcbiAgICB0aGlzLmN1cnJlbnRPcHRpb24gPSBvcHRpb247XG4gICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIHBhcmVudEZvcm1Hcm91cDogdGhpcy5fZm9ybUNvbnRyb2wucGFyZW50LFxuICAgICAgc2VsZWN0ZWRPcHRpb246IG9wdGlvbixcbiAgICAgIGZpZWxkOiB0aGlzLmZpZWxkLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLm9wdGlvbnMoKS5uZ01vZGVsQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMoKT8ubmdNb2RlbENoYW5nZT8uKFxuICAgICAgICBldmVudCxcbiAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2wucGFyZW50IGFzIEZvcm1Hcm91cCxcbiAgICAgICAgb3B0aW9uLFxuICAgICAgICB0aGlzLmZpZWxkXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLm9uT3B0aW9uQ2hhbmdlKCk7XG4gIH1cblxuICBvbk9wdGlvbkNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zKCk/Lm9uT3B0aW9uU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucygpPy5vbk9wdGlvblNlbGVjdGVkPy4odGhpcy5jdXJyZW50T3B0aW9uKTtcbiAgICB9XG4gIH1cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICB0aGlzLmxvYWRpbmdPcHRpb25zLnNldCh0cnVlKTtcbiAgICB0aGlzLmxvYWRpbmdFcnJvci5zZXQoZmFsc2UpO1xuICAgIGxldCBxID0ge1xuICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLm9wdGlvbnMoKT8ucGFnZVNpemUgPz8gMTAwLFxuICAgICAgLi4uKHRoaXMub3B0aW9ucygpLnF1ZXJ5ID8/IHt9KSxcbiAgICB9O1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPSAnJyAmJlxuICAgICAgdGhpcy5maWx0ZXJXb3JkICE9IG51bGwgJiZcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHFbJ3NlYXJjaCddID0gdGhpcy5maWx0ZXJXb3JkO1xuICAgIH1cbiAgICB0aGlzLmxvb2t1cExpc3RTZXJ2aWNlXG4gICAgICAuZ2V0TG9va3VwTGlzdHM8YW55PihcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LmFwaUJhc2VVcmwgYXMgc3RyaW5nLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uZW50aXR5IGFzIHN0cmluZyxcbiAgICAgICAgKHRoaXMub3B0aW9ucygpPy5sb2FkTG9va3VwRnJvbVNlc3Npb24gPz8gZmFsc2UpICYmXG4gICAgICAgICAgdGhpcy5maXJzdFRpbWUgJiZcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLm9wdGlvbnMoKS5xdWVyeSA/PyB7fSkubGVuZ3RoID09PSAwLFxuICAgICAgICBxLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8ubW9kdWxlLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8udmVyc2lvbixcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LnBhdGggPz8gJ3BhZ2UnLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8ubWVtb3J5Q2FjaGUgPz8gZmFsc2UsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5tZXRob2QgfHwgJ1BPU1QnLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uYXBpUmVzcG9uc2VNYXBwZXIgfHwgbnVsbFxuICAgICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCBmaW5hbGl6ZSgoKSA9PiB0aGlzLmxvYWRpbmdPcHRpb25zLnNldChmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzcG9uc2U/LmRhdGE/LnBhZ2VJbmZvPy50b3RhbEl0ZW1zO1xuICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zKCkuZHJvcGRvd25PcHRpb25zIHx8IHRoaXMucGFnZUluZGV4ID09IDEpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMoKS5kcm9wZG93bk9wdGlvbnMucHVzaChcbiAgICAgICAgICAgIC4uLih0aGlzLm1hcHBPcHRpb25zKHJlc3BvbnNlLmRhdGE/Lml0ZW1zKSA/PyBbXSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMoKS5kcm9wZG93bk9wdGlvbnM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5maXJzdFRpbWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMoKT8udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zKCk/LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWxsVG90YWxJdGVtcyA9IHJlc3BvbnNlPy5kYXRhPy5wYWdlSW5mbz8udG90YWxJdGVtcztcbiAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuZGVkdXBsaWNhdGUoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMoKT8uZHJvcGRvd25PcHRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIXRoaXMuZmlsdGVyV29yZCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wT3B0aW9ucyA9IHRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50ZW1wT3B0aW9ucyA9IHRoaXMuZGVkdXBsaWNhdGUoW1xuICAgICAgICAgICAgICAuLi50aGlzLnRlbXBPcHRpb25zLFxuICAgICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMoKS5kcm9wZG93bk9wdGlvbnMsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVPdmVybGF5RHJvcGRvd25vcHRpb25zKCk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnZhbHVlICYmXG4gICAgICAgICAgICAodGhpcy5maWx0ZXJXb3JkID09ICcnIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyV29yZCA9PSBudWxsIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyV29yZCA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLm9wdGlvbnMoKS5kcm9wZG93bk9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgKGNvOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgY29bdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlID8/ICdpZCddID09XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnZhbHVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFvcHRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25PZkRlZmF1bHRWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZ0Vycm9yLnNldCh0cnVlKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBvcHRpb25zOicsIGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG4gIGZpbHRlck9wdGlvbnMoKSB7XG4gICAgdGhpcy5hcHBseWZpbHRlcigpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMucGRyb3Bkb3duKSB7XG4gICAgICB0aGlzLnBkcm9wZG93bi5vbkZpbHRlcktleURvd24oZXZlbnQpO1xuICAgIH1cbiAgfVxuICBtYXBwT3B0aW9ucyhpdGVtczogYW55KXtcbiAgICBsZXQgbWFwcGVkSXRlbXMgPSBpdGVtcz8ubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgIC4uLml0ZW0/Lmt2IHx8IHt9LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkgPz8gW107XG4gICAgaWYodGhpcy5vcHRpb25zKCk/Lm1hcHBPcHRpb25zKXtcbiAgICAgICAgbWFwcGVkSXRlbXMgPSB0aGlzLm9wdGlvbnMoKT8ubWFwcE9wdGlvbnMobWFwcGVkSXRlbXMpIHx8IFsuLi5tYXBwZWRJdGVtc107XG4gICAgfVxuICAgIHJldHVybiBtYXBwZWRJdGVtcztcbiAgfVxuICBhcHBseWZpbHRlcigpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZpbHRlcldvcmQgPT0gJycgfHxcbiAgICAgIHRoaXMuZmlsdGVyV29yZCA9PSBudWxsIHx8XG4gICAgICB0aGlzLmZpbHRlcldvcmQgPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbnMoKS5kcm9wZG93bk9wdGlvbnMgPSB0aGlzLnRlbXBPcHRpb25zO1xuICAgICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5hbGxUb3RhbEl0ZW1zO1xuICAgICAgdGhpcy51cGRhdGVPdmVybGF5RHJvcGRvd25vcHRpb25zKCk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuYWxsVG90YWxJdGVtcyA+IHRoaXMudGVtcE9wdGlvbnMubGVuZ3RoIHx8XG4gICAgICAoIXRoaXMuYWxsVG90YWxJdGVtcyAmJiB0aGlzLm9wdGlvbnMoKS5wYXRoICE9PSAnYWxsJylcbiAgICApIHtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gMTtcbiAgICAgIHRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5sb2FkaW5nT3B0aW9ucy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLl9maWx0ZXJPcHRpb25zLm5leHQodGhpcy5maWx0ZXJXb3JkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5d29yZCA9ICh0aGlzLmZpbHRlcldvcmQgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZmlsdGVyQnkgPSB0aGlzLm9wdGlvbnMoKS5maWx0ZXJCeSA/PyAndGV4dCc7XG4gICAgICB0aGlzLm9wdGlvbnMoKS5kcm9wZG93bk9wdGlvbnMgPSB0aGlzLnRlbXBPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PntcbiAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb24/LltmaWx0ZXJCeV07XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAuaW5jbHVkZXMoa2V5d29yZCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMudXBkYXRlT3ZlcmxheURyb3Bkb3dub3B0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVkdXBsaWNhdGUoYXJyOiBhbnlbXSk6IGFueVtdIHtcbiAgICByZXR1cm4gYXJyPy5maWx0ZXIoKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlciwgc2VsZjogYW55KSA9PlxuICAgICAgaW5kZXggPT09IHNlbGY/LmZpbmRJbmRleCgodDogYW55KSA9PiAodD8uaWQgPT09IGl0ZW0/LmlkKSlcbiAgICApO1xuICB9XG4gIHJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAxO1xuICAgIHRoaXMuZmlyc3RUaW1lID0gdHJ1ZTtcbiAgICB0aGlzLmFsbFRvdGFsSXRlbXMgPSAwO1xuICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XG4gICAgdGhpcy5vcHRpb25zKCkuZHJvcGRvd25PcHRpb25zID0gW107XG4gICAgdGhpcy50ZW1wT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMudXBkYXRlT3ZlcmxheURyb3Bkb3dub3B0aW9ucygpO1xuICAgIHRoaXMuZ2V0T3B0aW9ucygpO1xuICB9XG4gIHJlc2V0RmlsdGVyKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPSAnJyAmJlxuICAgICAgdGhpcy5maWx0ZXJXb3JkICE9IG51bGwgJiZcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRoaXMuZmlsdGVyV29yZCA9ICcnO1xuICAgICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5hbGxUb3RhbEl0ZW1zO1xuICAgICAgdGhpcy5hcHBseWZpbHRlcigpO1xuICAgIH1cbiAgfVxuICBsb2FkTW9yZSgpIHtcbiAgICB0aGlzLnBhZ2VJbmRleCsrO1xuICAgIHRoaXMuZ2V0T3B0aW9ucygpO1xuICB9XG4gIGdldE9wdGlvbk9mRGVmYXVsdFZhbHVlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRPcHRpb24pIHtcbiAgICAgIHRoaXMuYWRkQ3VycmVudE9wdGlvblRvTGlzdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLm9wdGlvbnMoKT8ub3B0aW9uVmFsdWUgfHxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlID09PSAnaWQnIHx8XG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5mb3JjZUdldE9wdGlvbkJ5SWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLmdldE9wdGlvbkJ5SWQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uQnlGaWx0ZXJBbGxMb29rdXAoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0T3B0aW9uQnlJZCgpIHtcbiAgICB0aGlzLmxvb2t1cExpc3RTZXJ2aWNlXG4gICAgICAuZ2V0QnlJZChcbiAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnZhbHVlLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uZW50aXR5IGFzIHN0cmluZyxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm1vZHVsZSxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LnZlcnNpb24sXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5hcGlCYXNlVXJsXG4gICAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRPcHRpb24gPSB0aGlzLm1hcHBPcHRpb25zKFt2YWx1ZV0pPy5bMF0gfHwgbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudE9wdGlvblRvTGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5uZ01vZGVsQ2hhbmdlKHRoaXMuX2Zvcm1Db250cm9sPy52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cbiAgZ2V0T3B0aW9uQnlGaWx0ZXJBbGxMb29rdXAoKSB7XG4gICAgbGV0IHEgPSB7XG4gICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHRoaXMub3B0aW9ucygpPy5wYWdlU2l6ZSA/PyAxMDAsXG4gICAgICAuLi4odGhpcy5vcHRpb25zKCkucXVlcnkgPz8ge30pLFxuICAgICAgZmlsdGVyczoge1xuICAgICAgICBbdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlID8/ICdpZCddOiB7XG4gICAgICAgICAgdmFsdWU6IHRoaXMuX2Zvcm1Db250cm9sPy52YWx1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLmxvb2t1cExpc3RTZXJ2aWNlXG4gICAgICAuZ2V0TG9va3VwTGlzdHMoXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5hcGlCYXNlVXJsIGFzIHN0cmluZyxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LmVudGl0eSBhcyBzdHJpbmcsXG4gICAgICAgIGZhbHNlLFxuICAgICAgICBxLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8ubW9kdWxlLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8udmVyc2lvbixcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LnBhdGggPz8gJ2FsbCdcbiAgICAgIClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAodmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRpb24gPVxuICAgICAgICAgICAgdGhpcy5tYXBwT3B0aW9ucyh2YWx1ZS5kYXRhPy5pdGVtcylcbiAgICAgICAgICAgID8uZmluZCgoZWw6IGFueSk9PiBlbD8uW3RoaXMub3B0aW9ucygpPy5vcHRpb25WYWx1ZSA/PyAnaWQnXSA9PT0gdGhpcy5fZm9ybUNvbnRyb2w/LnZhbHVlKSB8fCBudWxsO1xuICAgICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRPcHRpb24gPSBvcHRpb247XG4gICAgICAgICAgICAgIHRoaXMuYWRkQ3VycmVudE9wdGlvblRvTGlzdCgpO1xuICAgICAgICAgICAgICB0aGlzLm5nTW9kZWxDaGFuZ2UodGhpcy5fZm9ybUNvbnRyb2w/LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG4gIGFkZEN1cnJlbnRPcHRpb25Ub0xpc3QoKSB7XG4gICAgdGhpcy5vcHRpb25zKCkuZHJvcGRvd25PcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICAuLi50aGlzLmN1cnJlbnRPcHRpb24sXG4gICAgICAgIC4uLnRoaXMuY3VycmVudE9wdGlvbj8ua3YsXG4gICAgICB9LFxuICAgICAgLi4udGhpcy5vcHRpb25zKCkuZHJvcGRvd25PcHRpb25zLFxuICAgIF07XG4gICAgdGhpcy50ZW1wT3B0aW9ucyA9IHRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucztcbiAgICB0aGlzLnVwZGF0ZU92ZXJsYXlEcm9wZG93bm9wdGlvbnMoKTtcbiAgfVxuICB1cGRhdGVPdmVybGF5RHJvcGRvd25vcHRpb25zKCkge1xuICAgIGlmICh0aGlzLnBkcm9wZG93bj8ub3B0aW9ucykge1xuICAgICAgdGhpcy5wZHJvcGRvd24ub3B0aW9ucyA9IHRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucztcbiAgICB9XG4gIH1cbiAgY29weVRvQ2xpcGJvYXJkKCkge1xuICAgIGlmICh0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLm9wdGlvbnMoKT8uZHJvcGRvd25PcHRpb25zPy5maW5kKFxuICAgICAgICAoY286IGFueSkgPT5cbiAgICAgICAgICBjb1t0aGlzLm9wdGlvbnMoKT8ub3B0aW9uVmFsdWUgfHwgJ2lkJ10gPT0gdGhpcy5fZm9ybUNvbnRyb2wudmFsdWVcbiAgICAgICk7XG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICAgICAgY29uc3QgdGV4dFRvQ29weSA9XG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb24/LlsnQ29kZSddID8/XG4gICAgICAgICAgc2VsZWN0ZWRPcHRpb25bdGhpcy5vcHRpb25zKCk/Lm9wdGlvbkxhYmVsIHx8ICd0ZXh0J107XG4gICAgICAgIC8vIFVzZSB0aGUgbmF0aXZlIGNsaXBib2FyZCBBUElcbiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZFxuICAgICAgICAgIC53cml0ZVRleHQodGV4dFRvQ29weSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgIHNldmVyaXR5OiAnaW5mbycsXG4gICAgICAgICAgICAgIHN1bW1hcnk6ICdzdWNjZXNzZnVsJyxcbiAgICAgICAgICAgICAgZGV0YWlsOiAnQ29waWVkIHRvIGNsaXBib2FyZDogJyArIHRleHRUb0NvcHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XG4gICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgICBzdW1tYXJ5OiAnRXJyb3InLFxuICAgICAgICAgICAgICBkZXRhaWw6ICdGYWlsZWQgdG8gY29weSB0ZXh0IHRvIGNsaXBib2FyZC4nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGFwcC1mb3JtLWVsZW1lbnQtbGF5b3V0XG4gIFtvcHRpb25zXT1cIm9wdGlvbnMoKVwiXG4gIFtmaWVsZF09XCJmaWVsZFwiXG4gIFtjb250cm9sVGVtcGxhdGVSZWZdPVwiY29udHJvbFRlbXBsYXRlXCJcbiAgW2Zvcm1Db250cm9sUmVmXT1cIl9mb3JtQ29udHJvbFwiXG4+PC9hcHAtZm9ybS1lbGVtZW50LWxheW91dD5cbjxuZy10ZW1wbGF0ZSAjY29udHJvbFRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwie3sgb3B0aW9ucygpLnNob3dDb3B5QnV0dG9uID8gJ2QtZmxleCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlcic6ICcnIH19XCI+XG4gICAgPGRpdiBjbGFzcz1cInt7IG9wdGlvbnMoKS5zaG93Q29weUJ1dHRvbiA/ICdmbGV4LTEnOiAnJyB9fVwiPlxuICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgI3Bkcm9wZG93blxuICAgICAgICBbb3B0aW9uc109XCJkcm9wZG93bk9wdGlvbnMoKVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCIob3B0aW9ucygpLnBsYWNlaG9sZGVyPz8nJykgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwiX2Zvcm1Db250cm9sXCJcbiAgICAgICAgW29wdGlvbkxhYmVsXT1cIm9wdGlvbnMoKS5vcHRpb25MYWJlbCA/PyAndGV4dCdcIlxuICAgICAgICBbb3B0aW9uVmFsdWVdPVwib3B0aW9ucygpLm9wdGlvblZhbHVlID8/ICdpZCdcIlxuICAgICAgICBbb3B0aW9uR3JvdXBMYWJlbF09XCJvcHRpb25zKCkub3B0aW9uR3JvdXBMYWJlbCA/PyAndGV4dCdcIlxuICAgICAgICBbb3B0aW9uR3JvdXBDaGlsZHJlbl09XCJvcHRpb25zKCkub3B0aW9uR3JvdXBDaGlsZHJlbiA/PyAnaXRlbXMnXCJcbiAgICAgICAgW2dyb3VwXT1cIm9wdGlvbnMoKS5ncm91cCA/PyBmYWxzZVwiXG4gICAgICAgIHN0eWxlQ2xhc3M9XCJ7e29wdGlvbnMoKS5jbGFzcyA/PyAndy1mdWxsJ319XCJcbiAgICAgICAgW3Nob3dDbGVhcl09XCJvcHRpb25zKCkuc2hvd0NsZWFyID8/IGZhbHNlXCJcbiAgICAgICAgW2FwcGVuZFRvXT1cIm9wdGlvbnMoKS5hcHBlbmRUbyA/PyAnYm9keSdcIlxuICAgICAgICBbZmlsdGVyXT1cIm9wdGlvbnMoKS5maWx0ZXIgPz8gZmFsc2VcIlxuICAgICAgICBbZmlsdGVyQnldPVwib3B0aW9ucygpLmZpbHRlckJ5ID8/ICd0ZXh0J1wiXG4gICAgICAgIFthdXRvZm9jdXNGaWx0ZXJdPVwib3B0aW9ucygpLmF1dG9mb2N1c0ZpbHRlciA/PyBmYWxzZVwiXG4gICAgICAgIFthdXRvRGlzcGxheUZpcnN0XT1cIm9wdGlvbnMoKS5hdXRvRGlzcGxheUZpcnN0ID8/IGZhbHNlXCJcbiAgICAgICAgW2F1dG9mb2N1c109XCJvcHRpb25zKCkuYXV0b2ZvY3VzID8/IGZhbHNlXCJcbiAgICAgICAgW3Jlc2V0RmlsdGVyT25IaWRlXT1cInRydWVcIlxuICAgICAgICAob25IaWRlKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICBbcmVhZG9ubHldPVwib3B0aW9ucygpLnJlYWRvbmx5ID8/IGZhbHNlXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyduZy1pbnZhbGlkIG5nLWRpcnR5JzogKF9mb3JtQ29udHJvbC5lcnJvcnMgJiYgKF9mb3JtQ29udHJvbC5kaXJ0eSB8fCBfZm9ybUNvbnRyb2wudG91Y2hlZCkgJiYgIWxvYWRpbmdPcHRpb25zKCkpID8/IGZhbHNlfVwiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm5nTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXG5cbiAgICAgICAgW3ZpcnR1YWxTY3JvbGxdPVwib3B0aW9ucygpLnZpcnR1YWxTY3JvbGwgPz8gZmFsc2VcIlxuICAgICAgICBbdmlydHVhbFNjcm9sbEl0ZW1TaXplXT1cIm9wdGlvbnMoKS52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPz8gMTBcIlxuICAgICAgICA+XG4gICAgICAgIEBpZiAob3B0aW9ucygpLml0ZW1UZW1wbGF0ZSkge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb24gcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9ucygpLml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogb3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbDogX2Zvcm1Db250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMoKSxcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6IF9mb3JtQ29udHJvbC5wYXJlbnQsXG4gICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChvcHRpb25zKCkuc2VsZWN0ZWRJdGVtVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnMoKS5zZWxlY3RlZEl0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogX2Zvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbDogX2Zvcm1Db250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMoKSxcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6IF9mb3JtQ29udHJvbC5wYXJlbnQsXG4gICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChvcHRpb25zKCkuZmlsdGVyKSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnMoKS5maWx0ZXJUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0RmlsdGVyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9ucygpLmZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbDogX2Zvcm1Db250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2g6IHJlZnJlc2guYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiBfZm9ybUNvbnRyb2wucGFyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VGVtcGxhdGU6IGRlZmF1bHRGaWx0ZXJUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRGaWx0ZXJUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dGdyb3VwLWFkZG9uXCI+PGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgcEF1dG9Gb2N1c1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlcldvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJvcHRpb25zKCkuYXV0b2ZvY3VzRmlsdGVyID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyT3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZW1wdHlUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgICAgICAgQGlmICghbG9hZGluZ09wdGlvbnMoKSkge1xuICAgICAgICAgICAgICBAaWYgKHRvdGFsSXRlbXMgPiAodGVtcE9wdGlvbnMubGVuZ3RoIHx8IDApKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8cC1idXR0b24gdHlwZT1cImJ1dHRvblwiIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1saW5rXCIgbGFiZWw9XCJMb2FkIE1vcmVcIiBpY29uPVwicGkgcGktc3Bpbm5lclwiIChvbkNsaWNrKT1cImxvYWRNb3JlKClcIj48L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgQGlmICghZmlyc3RUaW1lICYmICgocGRyb3Bkb3duPy5vcHRpb25zPy5sZW5ndGggfHwgMCkgPiAwKSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB0ZXh0LXByaW1hcnkgZnctbWVkaXVtIHB5LTMgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc3Bpbm5lci1kb3R0ZWQgcGktc3BpbiBcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eydMb2FkaW5nIE9wdGlvbnMnfHRyYW5zbGF0ZX19Li4uPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgPC9kaXY+XG4gICAgICBAaWYgKG9wdGlvbnMoKS5zaG93Q29weUJ1dHRvbikge1xuICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICBpY29uPVwicGkgcGktY29weVwiXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLWluZm8gYm9yZGVyLTBcIlxuICAgICAgICAgIChvbkNsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIV9mb3JtQ29udHJvbC52YWx1ZSB8fCBfZm9ybUNvbnRyb2wudmFsdWUgPT09ICcnXCI+XG4gICAgICAgIDwvcC1idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGFwcC1maWVsZC1lcnJvcnNcbiAgICAgIFtjdXN0b21FcnJvck1lc3NhZ2VzXT1cIm9wdGlvbnMoKT8uZXJyb3JNZXNzYWdlcyB8fCB7fVwiXG4gICAgICBbY29udHJvbE5hbWVdPVwib3B0aW9ucygpPy5mb3JtQ29udHJvbE5hbWVcIlxuICAgICAgW2Vycm9yc109XCJnZXRFcnJvcnMoKVwiXG4gICAgICBbZXJyb3JNZXNzYWdlXT1cIm9wdGlvbnMoKS5lcnJvck1lc3NhZ2UgfHwgJydcIlxuICAgICAgW3Nob3dFcnJvcnNdPVwiKF9mb3JtQ29udHJvbC5kaXJ0eSB8fCBfZm9ybUNvbnRyb2wudG91Y2hlZCkgJiYgIWxvYWRpbmdPcHRpb25zKCkgJiYgb3B0aW9ucygpPy5zaG93RXJyb3IgIT0gZmFsc2VcIj48L2FwcC1maWVsZC1lcnJvcnM+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNlbXB0eVRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgQGlmIChsb2FkaW5nT3B0aW9ucygpKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0eWxlQ2xhc3M9XCJ3LTRyZW0gaC00cmVtXCI+PC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgICAgICA8cD57eydMb2FkaW5nIE9wdGlvbnMnfHRyYW5zbGF0ZX19PC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2UgaWYgKGxvYWRpbmdFcnJvcigpKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHA+e3snRmFpbGVkIHRvIGxvYWQgb3B0aW9ucy4nfHRyYW5zbGF0ZX19PC9wPlxuICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgbGFiZWw9XCJSZXRyeVwiXG4gICAgICAgICAgICBpY29uPVwicGkgcGktcmVmcmVzaFwiXG4gICAgICAgICAgICAob25DbGljayk9XCJnZXRPcHRpb25zKClcIlxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLWRhbmdlclwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIHt7J05vIE9wdGlvbnMgRm91bmQnfHRyYW5zbGF0ZX19XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
360
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXRzbmctZm9ybS1mYWN0b3J5L3NyYy9saWIva2l0c25nLWZvcm0tZmFjdG9yeS9jb21wb25lbnRzL2tpdHNuZy1mb3JtLWZpZWxkcy9sb29rdXAtc2VsZWN0L2xvb2t1cC1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0c25nLWZvcm0tZmFjdG9yeS9zcmMvbGliL2tpdHNuZy1mb3JtLWZhY3RvcnkvY29tcG9uZW50cy9raXRzbmctZm9ybS1maWVsZHMvbG9va3VwLXNlbGVjdC9sb29rdXAtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7OztBQVVsRSxNQUFNLE9BQU8scUJBQXFCO0lBMENoQyxZQUNVLGlCQUFvQyxFQUNwQyxjQUE4QjtRQUQ5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQTNDeEM7OztXQUdHO1FBQ0gsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUNqQjs7O1dBR0c7UUFDSCxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBTyxDQUFDO1FBR2hDLGdCQUFXLEdBQUcsTUFBTSxFQUtoQixDQUFDO1FBQ0w7OztXQUdHO1FBQ08saUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFD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QUN4RCwrQkFBK0I7Z0JBQy9CLFNBQVMsQ0FBQyxTQUFTO3FCQUNoQixTQUFTLENBQUMsVUFBVSxDQUFDO3FCQUNyQixJQUFJLENBQUMsR0FBRyxFQUFFO29CQUNULElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO3dCQUN0QixRQUFRLEVBQUUsTUFBTTt3QkFDaEIsT0FBTyxFQUFFLFlBQVk7d0JBQ3JCLE1BQU0sRUFBRSx1QkFBdUIsR0FBRyxVQUFVO3FCQUM3QyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO3FCQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO3dCQUN0QixRQUFRLEVBQUUsT0FBTzt3QkFDakIsT0FBTyxFQUFFLE9BQU87d0JBQ2hCLE1BQU0sRUFBRSxtQ0FBbUM7cUJBQzVDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0ExWVUscUJBQXFCO2tHQUFyQixxQkFBcUIsd25CQ3ZCbEMsdXNOQXlKQTs7MkZEbElhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxtQkFBbUI7bUhBY3BCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQVdJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ2lCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgaW5wdXQsXG4gIGNvbXB1dGVkLFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbmFsaXplLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvb2t1cExpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9sb29rdXAtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9raXRzbmctZm9ybS1mYWN0b3J5JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWxvb2t1cC1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbG9va3VwLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIExvb2t1cFNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiAqIEdlbmVyYWxcbiAgICogQGVycm9ycyBGb3JtIGNvbnRyb2wgZXJyb3JzXG4gICAqL1xuICBlcnJvcnM6IGFueSA9IHt9O1xuICAvKipcbiAgICogKiBJbnB1dHNcbiAgICogQG9wdGlvbnMgQ29uZmlndXJhdGlvbiBmb3IgdGhpcyBmb3JtIGZpZWxkXG4gICAqL1xuICBvcHRpb25zID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xuICBASW5wdXQoKSBmaWVsZDogYW55O1xuICBASW5wdXQoKSBfZm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDxhbnk+O1xuICBtb2RlbENoYW5nZSA9IG91dHB1dDx7XG4gICAgZXZlbnQ6IGFueTtcbiAgICBwYXJlbnRGb3JtR3JvdXA/OiBGb3JtR3JvdXA8YW55PiB8IEZvcm1BcnJheTxhbnk+IHwgbnVsbDtcbiAgICBzZWxlY3RlZE9wdGlvbj86IGFueTtcbiAgICBmaWVsZD86IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWw7XG4gIH0+KCk7XG4gIC8qKlxuICAgKiAqIE91dHB1dHNcbiAgICogQGhhbmRsZUNoYW5nZSBFdmVudCB3aGVuIGl0ZW0gaW4gZHJvcGRvd24gaXMgc2VsZWN0ZWRcbiAgICovXG4gIEBPdXRwdXQoKSBoYW5kbGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQFZpZXdDaGlsZCgncGRyb3Bkb3duJykgcGRyb3Bkb3duITogRHJvcGRvd247XG4gIHBhZ2VJbmRleCA9IDE7XG4gIHRvdGFsSXRlbXMhOiBudW1iZXI7XG4gIGFsbFRvdGFsSXRlbXMhOiBudW1iZXI7XG4gIF9maWx0ZXJPcHRpb25zOiBTdWJqZWN0PHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgZmlsdGVyT3B0aW9ucyQgPSB0aGlzLl9maWx0ZXJPcHRpb25zLmFzT2JzZXJ2YWJsZSgpO1xuICBmaXJzdFRpbWUgPSB0cnVlO1xuICBmaWx0ZXJXb3JkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBsb2FkaW5nT3B0aW9ucyA9IHNpZ25hbCh0cnVlKTtcbiAgdGVtcE9wdGlvbnM6IGFueVtdID0gW107XG4gIGN1cnJlbnRPcHRpb246IGFueTtcbiAgb3B0aW9uc1VwZGF0ZWQgPSBzaWduYWwoMCk7XG4gIGRyb3Bkb3duT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICB0aGlzLm9wdGlvbnNVcGRhdGVkKCk7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucygpPy5kcm9wZG93bk9wdGlvbnMgPz8gW107XG4gIH0pO1xuICBsb2FkaW5nRXJyb3IgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsb29rdXBMaXN0U2VydmljZTogTG9va3VwTGlzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICogICAgICAgICAgICAgICAgSEVMUEVSU1xuICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucygpLnZhbHVlID0gdGhpcy5fZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgdGhpcy5nZXRPcHRpb25zKCk7XG4gICAgdGhpcy5maWx0ZXJPcHRpb25zJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJXb3JkID0gZmlsdGVyO1xuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cbiAgZ2V0RXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtQ29udHJvbC5lcnJvcnM7XG4gIH1cbiAgbmdNb2RlbENoYW5nZShldmVudDogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9uID0gdGhpcy5vcHRpb25zKCk/LmRyb3Bkb3duT3B0aW9ucz8uZmluZChcbiAgICAgIChjbzogYW55KSA9PiBjb1t0aGlzLm9wdGlvbnMoKT8ub3B0aW9uVmFsdWUgPz8gJ2lkJ10gPT0gZXZlbnRcbiAgICApO1xuICAgIHRoaXMuY3VycmVudE9wdGlvbiA9IG9wdGlvbjtcbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQoe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgcGFyZW50Rm9ybUdyb3VwOiB0aGlzLl9mb3JtQ29udHJvbC5wYXJlbnQsXG4gICAgICBzZWxlY3RlZE9wdGlvbjogb3B0aW9uLFxuICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgfSk7XG4gICAgaWYgKHRoaXMub3B0aW9ucygpLm5nTW9kZWxDaGFuZ2UpIHtcbiAgICAgIHRoaXMub3B0aW9ucygpPy5uZ01vZGVsQ2hhbmdlPy4oXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLl9mb3JtQ29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwLFxuICAgICAgICBvcHRpb24sXG4gICAgICAgIHRoaXMuZmllbGRcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMub25PcHRpb25DaGFuZ2UoKTtcbiAgfVxuXG4gIG9uT3B0aW9uQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wdGlvbnMoKT8ub25PcHRpb25TZWxlY3RlZCkge1xuICAgICAgdGhpcy5vcHRpb25zKCk/Lm9uT3B0aW9uU2VsZWN0ZWQ/Lih0aGlzLmN1cnJlbnRPcHRpb24pO1xuICAgIH1cbiAgfVxuICBnZXRPcHRpb25zKCkge1xuICAgIHRoaXMubG9hZGluZ09wdGlvbnMuc2V0KHRydWUpO1xuICAgIHRoaXMubG9hZGluZ0Vycm9yLnNldChmYWxzZSk7XG4gICAgbGV0IHEgPSB7XG4gICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHRoaXMub3B0aW9ucygpPy5wYWdlU2l6ZSA/PyAxMDAsXG4gICAgICAuLi4odGhpcy5vcHRpb25zKCkucXVlcnkgPz8ge30pLFxuICAgIH07XG4gICAgaWYgKFxuICAgICAgdGhpcy5maWx0ZXJXb3JkICE9ICcnICYmXG4gICAgICB0aGlzLmZpbHRlcldvcmQgIT0gbnVsbCAmJlxuICAgICAgdGhpcy5maWx0ZXJXb3JkICE9IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgcVsnc2VhcmNoJ10gPSB0aGlzLmZpbHRlcldvcmQ7XG4gICAgfVxuICAgIHRoaXMubG9va3VwTGlzdFNlcnZpY2VcbiAgICAgIC5nZXRMb29rdXBMaXN0czxhbnk+KFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uYXBpQmFzZVVybCBhcyBzdHJpbmcsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5lbnRpdHkgYXMgc3RyaW5nLFxuICAgICAgICAodGhpcy5vcHRpb25zKCk/LmxvYWRMb29rdXBGcm9tU2Vzc2lvbiA/PyBmYWxzZSkgJiZcbiAgICAgICAgICB0aGlzLmZpcnN0VGltZSAmJlxuICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMub3B0aW9ucygpLnF1ZXJ5ID8/IHt9KS5sZW5ndGggPT09IDAsXG4gICAgICAgIHEsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5tb2R1bGUsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy52ZXJzaW9uLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8ucGF0aCA/PyAncGFnZScsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5tZW1vcnlDYWNoZSA/PyBmYWxzZSxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm1ldGhvZCB8fCAnUE9TVCcsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5hcGlSZXNwb25zZU1hcHBlciB8fCBudWxsXG4gICAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZ09wdGlvbnMuc2V0KGZhbHNlKSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSByZXNwb25zZT8uZGF0YT8ucGFnZUluZm8/LnRvdGFsSXRlbXM7XG4gICAgICAgICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSAoIXRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucyB8fCB0aGlzLnBhZ2VJbmRleCA9PSAxKSA/IFtdIDogdGhpcy5vcHRpb25zKCkuZHJvcGRvd25PcHRpb25zO1xuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwcE9wdGlvbnMocmVzcG9uc2UuZGF0YT8uaXRlbXMpID8/IFtdO1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkID0gWy4uLmN1cnJlbnRPcHRpb25zLCAuLi5tYXBwZWRdO1xuICAgICAgICAgIHRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucyA9IHRoaXMuZGVkdXBsaWNhdGUoY29tYmluZWQpO1xuXG4gICAgICAgICAgaWYgKHRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucz8ubGVuZ3RoID4gMCAmJiB0aGlzLmZpcnN0VGltZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucygpPy52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLl9mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnMoKT8udmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hbGxUb3RhbEl0ZW1zID0gcmVzcG9uc2U/LmRhdGE/LnBhZ2VJbmZvPy50b3RhbEl0ZW1zO1xuICAgICAgICAgICAgdGhpcy5maXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmZpbHRlcldvcmQpIHtcbiAgICAgICAgICAgIHRoaXMudGVtcE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKS5kcm9wZG93bk9wdGlvbnM7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGVtcE9wdGlvbnMgPSB0aGlzLmRlZHVwbGljYXRlKFtcbiAgICAgICAgICAgICAgLi4udGhpcy50ZW1wT3B0aW9ucyxcbiAgICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zKCkuZHJvcGRvd25PcHRpb25zLFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXBkYXRlT3ZlcmxheURyb3Bkb3dub3B0aW9ucygpO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1Db250cm9sPy52YWx1ZSAmJlxuICAgICAgICAgICAgKHRoaXMuZmlsdGVyV29yZCA9PSAnJyB8fFxuICAgICAgICAgICAgICB0aGlzLmZpbHRlcldvcmQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICB0aGlzLmZpbHRlcldvcmQgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5vcHRpb25zKCkuZHJvcGRvd25PcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAgIChjbzogYW55KSA9PlxuICAgICAgICAgICAgICAgIGNvW3RoaXMub3B0aW9ucygpPy5vcHRpb25WYWx1ZSA/PyAnaWQnXSA9PVxuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1Db250cm9sPy52YWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uT2ZEZWZhdWx0VmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdFcnJvci5zZXQodHJ1ZSk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgb3B0aW9uczonLCBlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuICBmaWx0ZXJPcHRpb25zKCkge1xuICAgIHRoaXMuYXBwbHlmaWx0ZXIoKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLnBkcm9wZG93bikge1xuICAgICAgdGhpcy5wZHJvcGRvd24ub25GaWx0ZXJLZXlEb3duKGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgbWFwcE9wdGlvbnMoaXRlbXM6IGFueSl7XG4gICAgbGV0IG1hcHBlZEl0ZW1zID0gaXRlbXM/Lm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAuLi5pdGVtPy5rdiB8fCB7fSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pID8/IFtdO1xuICAgIGlmKHRoaXMub3B0aW9ucygpPy5tYXBwT3B0aW9ucyl7XG4gICAgICAgIG1hcHBlZEl0ZW1zID0gdGhpcy5vcHRpb25zKCk/Lm1hcHBPcHRpb25zKG1hcHBlZEl0ZW1zKSB8fCBbLi4ubWFwcGVkSXRlbXNdO1xuICAgIH1cbiAgICByZXR1cm4gbWFwcGVkSXRlbXM7XG4gIH1cbiAgYXBwbHlmaWx0ZXIoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5maWx0ZXJXb3JkID09ICcnIHx8XG4gICAgICB0aGlzLmZpbHRlcldvcmQgPT0gbnVsbCB8fFxuICAgICAgdGhpcy5maWx0ZXJXb3JkID09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zKCkuZHJvcGRvd25PcHRpb25zID0gdGhpcy50ZW1wT3B0aW9ucztcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuYWxsVG90YWxJdGVtcztcbiAgICAgIHRoaXMudXBkYXRlT3ZlcmxheURyb3Bkb3dub3B0aW9ucygpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmFsbFRvdGFsSXRlbXMgPiB0aGlzLnRlbXBPcHRpb25zLmxlbmd0aCB8fFxuICAgICAgKCF0aGlzLmFsbFRvdGFsSXRlbXMgJiYgdGhpcy5vcHRpb25zKCkucGF0aCAhPT0gJ2FsbCcpXG4gICAgKSB7XG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XG4gICAgICB0aGlzLm9wdGlvbnMoKS5kcm9wZG93bk9wdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMubG9hZGluZ09wdGlvbnMuc2V0KHRydWUpO1xuICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5uZXh0KHRoaXMuZmlsdGVyV29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleXdvcmQgPSAodGhpcy5maWx0ZXJXb3JkID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGZpbHRlckJ5ID0gdGhpcy5vcHRpb25zKCkuZmlsdGVyQnkgPz8gJ3RleHQnO1xuICAgICAgdGhpcy5vcHRpb25zKCkuZHJvcGRvd25PcHRpb25zID0gdGhpcy50ZW1wT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT57XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uPy5bZmlsdGVyQnldO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLmluY2x1ZGVzKGtleXdvcmQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlEcm9wZG93bm9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlZHVwbGljYXRlKGFycjogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGFycj8uZmlsdGVyKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIsIHNlbGY6IGFueSkgPT5cbiAgICAgIGluZGV4ID09PSBzZWxmPy5maW5kSW5kZXgoKHQ6IGFueSkgPT4gKHQ/LmlkID09PSBpdGVtPy5pZCkpXG4gICAgKTtcbiAgfVxuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMucGFnZUluZGV4ID0gMTtcbiAgICB0aGlzLmZpcnN0VGltZSA9IHRydWU7XG4gICAgdGhpcy5hbGxUb3RhbEl0ZW1zID0gMDtcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSAwO1xuICAgIHRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMudGVtcE9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLnVwZGF0ZU92ZXJsYXlEcm9wZG93bm9wdGlvbnMoKTtcbiAgICB0aGlzLmdldE9wdGlvbnMoKTtcbiAgfVxuICByZXNldEZpbHRlcigpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZpbHRlcldvcmQgIT0gJycgJiZcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPSBudWxsICYmXG4gICAgICB0aGlzLmZpbHRlcldvcmQgIT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLmZpbHRlcldvcmQgPSAnJztcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuYWxsVG90YWxJdGVtcztcbiAgICAgIHRoaXMuYXBwbHlmaWx0ZXIoKTtcbiAgICB9XG4gIH1cbiAgZ2V0SXNMYXp5TG9hZEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMub3B0aW9ucygpPy5wYXRoID8/ICdwYWdlJztcbiAgICByZXR1cm4gcGF0aCA9PT0gJ3BhZ2UnICYmICh0aGlzLnRvdGFsSXRlbXMgPiAodGhpcy5vcHRpb25zKCk/LmRyb3Bkb3duT3B0aW9ucz8ubGVuZ3RoIHx8IDApKTtcbiAgfVxuICBvbkxhenlMb2FkKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nT3B0aW9ucygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmdldElzTGF6eUxvYWRFbmFibGVkKCkpIHtcbiAgICAgIGlmIChldmVudC5sYXN0ID49ICh0aGlzLm9wdGlvbnMoKT8uZHJvcGRvd25PcHRpb25zPy5sZW5ndGggfHwgMCkgLSAxKSB7XG4gICAgICAgIHRoaXMubG9hZE1vcmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbG9hZE1vcmUoKSB7XG4gICAgdGhpcy5wYWdlSW5kZXgrKztcbiAgICB0aGlzLmdldE9wdGlvbnMoKTtcbiAgfVxuICBnZXRPcHRpb25PZkRlZmF1bHRWYWx1ZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50T3B0aW9uKSB7XG4gICAgICB0aGlzLmFkZEN1cnJlbnRPcHRpb25Ub0xpc3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlIHx8XG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5vcHRpb25WYWx1ZSA9PT0gJ2lkJyB8fFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uZm9yY2VHZXRPcHRpb25CeUlkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5nZXRPcHRpb25CeUlkKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldE9wdGlvbkJ5RmlsdGVyQWxsTG9va3VwKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldE9wdGlvbkJ5SWQoKSB7XG4gICAgdGhpcy5sb29rdXBMaXN0U2VydmljZVxuICAgICAgLmdldEJ5SWQoXG4gICAgICAgIHRoaXMuX2Zvcm1Db250cm9sPy52YWx1ZSxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LmVudGl0eSBhcyBzdHJpbmcsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5tb2R1bGUsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy52ZXJzaW9uLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uYXBpQmFzZVVybFxuICAgICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50T3B0aW9uID0gdGhpcy5tYXBwT3B0aW9ucyhbdmFsdWVdKT8uWzBdIHx8IG51bGw7XG4gICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRPcHRpb25Ub0xpc3QoKTtcbiAgICAgICAgICAgIHRoaXMubmdNb2RlbENoYW5nZSh0aGlzLl9mb3JtQ29udHJvbD8udmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG4gIGdldE9wdGlvbkJ5RmlsdGVyQWxsTG9va3VwKCkge1xuICAgIGxldCBxID0ge1xuICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLm9wdGlvbnMoKT8ucGFnZVNpemUgPz8gMTAwLFxuICAgICAgLi4uKHRoaXMub3B0aW9ucygpLnF1ZXJ5ID8/IHt9KSxcbiAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgW3RoaXMub3B0aW9ucygpPy5vcHRpb25WYWx1ZSA/PyAnaWQnXToge1xuICAgICAgICAgIHZhbHVlOiB0aGlzLl9mb3JtQ29udHJvbD8udmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgdGhpcy5sb29rdXBMaXN0U2VydmljZVxuICAgICAgLmdldExvb2t1cExpc3RzKFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uYXBpQmFzZVVybCBhcyBzdHJpbmcsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5lbnRpdHkgYXMgc3RyaW5nLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgcSxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm1vZHVsZSxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LnZlcnNpb24sXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5wYXRoID8/ICdhbGwnXG4gICAgICApXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHZhbHVlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICAgIHRoaXMubWFwcE9wdGlvbnModmFsdWUuZGF0YT8uaXRlbXMpXG4gICAgICAgICAgICA/LmZpbmQoKGVsOiBhbnkpPT4gZWw/Llt0aGlzLm9wdGlvbnMoKT8ub3B0aW9uVmFsdWUgPz8gJ2lkJ10gPT09IHRoaXMuX2Zvcm1Db250cm9sPy52YWx1ZSkgfHwgbnVsbDtcbiAgICAgICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50T3B0aW9uID0gb3B0aW9uO1xuICAgICAgICAgICAgICB0aGlzLmFkZEN1cnJlbnRPcHRpb25Ub0xpc3QoKTtcbiAgICAgICAgICAgICAgdGhpcy5uZ01vZGVsQ2hhbmdlKHRoaXMuX2Zvcm1Db250cm9sPy52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuICBhZGRDdXJyZW50T3B0aW9uVG9MaXN0KCkge1xuICAgIHRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgLi4udGhpcy5jdXJyZW50T3B0aW9uLFxuICAgICAgICAuLi50aGlzLmN1cnJlbnRPcHRpb24/Lmt2LFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMub3B0aW9ucygpLmRyb3Bkb3duT3B0aW9ucyxcbiAgICBdO1xuICAgIHRoaXMudGVtcE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKS5kcm9wZG93bk9wdGlvbnM7XG4gICAgdGhpcy51cGRhdGVPdmVybGF5RHJvcGRvd25vcHRpb25zKCk7XG4gIH1cbiAgdXBkYXRlT3ZlcmxheURyb3Bkb3dub3B0aW9ucygpIHtcbiAgICB0aGlzLm9wdGlvbnNVcGRhdGVkLnVwZGF0ZSgodikgPT4gdiArIDEpO1xuICAgIGlmICh0aGlzLnBkcm9wZG93bikge1xuICAgICAgdGhpcy5wZHJvcGRvd24ub3B0aW9ucyA9IHRoaXMuZHJvcGRvd25PcHRpb25zKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZHJvcGRvd24gPSB0aGlzLnBkcm9wZG93biBhcyBhbnk7XG4gICAgICAgIGlmIChkcm9wZG93bj8ub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgICBkcm9wZG93bi5hbGlnbk92ZXJsYXkoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIGNvcHlUb0NsaXBib2FyZCgpIHtcbiAgICBpZiAodGhpcy5fZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uID0gdGhpcy5vcHRpb25zKCk/LmRyb3Bkb3duT3B0aW9ucz8uZmluZChcbiAgICAgICAgKGNvOiBhbnkpID0+XG4gICAgICAgICAgY29bdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlIHx8ICdpZCddID09IHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlXG4gICAgICApO1xuICAgICAgaWYgKHNlbGVjdGVkT3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IHRleHRUb0NvcHkgPVxuICAgICAgICAgIHNlbGVjdGVkT3B0aW9uPy5bJ0NvZGUnXSA/P1xuICAgICAgICAgIHNlbGVjdGVkT3B0aW9uW3RoaXMub3B0aW9ucygpPy5vcHRpb25MYWJlbCB8fCAndGV4dCddO1xuICAgICAgICAvLyBVc2UgdGhlIG5hdGl2ZSBjbGlwYm9hcmQgQVBJXG4gICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmRcbiAgICAgICAgICAud3JpdGVUZXh0KHRleHRUb0NvcHkpXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICBzZXZlcml0eTogJ2luZm8nLFxuICAgICAgICAgICAgICBzdW1tYXJ5OiAnc3VjY2Vzc2Z1bCcsXG4gICAgICAgICAgICAgIGRldGFpbDogJ0NvcGllZCB0byBjbGlwYm9hcmQ6ICcgKyB0ZXh0VG9Db3B5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5hZGQoe1xuICAgICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgc3VtbWFyeTogJ0Vycm9yJyxcbiAgICAgICAgICAgICAgZGV0YWlsOiAnRmFpbGVkIHRvIGNvcHkgdGV4dCB0byBjbGlwYm9hcmQuJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxhcHAtZm9ybS1lbGVtZW50LWxheW91dFxuICBbb3B0aW9uc109XCJvcHRpb25zKClcIlxuICBbZmllbGRdPVwiZmllbGRcIlxuICBbY29udHJvbFRlbXBsYXRlUmVmXT1cImNvbnRyb2xUZW1wbGF0ZVwiXG4gIFtmb3JtQ29udHJvbFJlZl09XCJfZm9ybUNvbnRyb2xcIlxuPjwvYXBwLWZvcm0tZWxlbWVudC1sYXlvdXQ+XG48bmctdGVtcGxhdGUgI2NvbnRyb2xUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInt7IG9wdGlvbnMoKS5zaG93Q29weUJ1dHRvbiA/ICdkLWZsZXggZmxleCBhbGlnbi1pdGVtcy1jZW50ZXInOiAnJyB9fVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ7eyBvcHRpb25zKCkuc2hvd0NvcHlCdXR0b24gPyAnZmxleC0xJzogJycgfX1cIj5cbiAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICNwZHJvcGRvd25cbiAgICAgICAgW29wdGlvbnNdPVwiZHJvcGRvd25PcHRpb25zKClcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiKG9wdGlvbnMoKS5wbGFjZWhvbGRlcj8/JycpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cIl9mb3JtQ29udHJvbFwiXG4gICAgICAgIFtvcHRpb25MYWJlbF09XCJvcHRpb25zKCkub3B0aW9uTGFiZWwgPz8gJ3RleHQnXCJcbiAgICAgICAgW29wdGlvblZhbHVlXT1cIm9wdGlvbnMoKS5vcHRpb25WYWx1ZSA/PyAnaWQnXCJcbiAgICAgICAgW29wdGlvbkdyb3VwTGFiZWxdPVwib3B0aW9ucygpLm9wdGlvbkdyb3VwTGFiZWwgPz8gJ3RleHQnXCJcbiAgICAgICAgW29wdGlvbkdyb3VwQ2hpbGRyZW5dPVwib3B0aW9ucygpLm9wdGlvbkdyb3VwQ2hpbGRyZW4gPz8gJ2l0ZW1zJ1wiXG4gICAgICAgIFtncm91cF09XCJvcHRpb25zKCkuZ3JvdXAgPz8gZmFsc2VcIlxuICAgICAgICBzdHlsZUNsYXNzPVwie3tvcHRpb25zKCkuY2xhc3MgPz8gJ3ctZnVsbCd9fVwiXG4gICAgICAgIFtzaG93Q2xlYXJdPVwib3B0aW9ucygpLnNob3dDbGVhciA/PyBmYWxzZVwiXG4gICAgICAgIFthcHBlbmRUb109XCJvcHRpb25zKCkuYXBwZW5kVG8gPz8gJ2JvZHknXCJcbiAgICAgICAgW2ZpbHRlcl09XCJvcHRpb25zKCkuZmlsdGVyID8/IGZhbHNlXCJcbiAgICAgICAgW2ZpbHRlckJ5XT1cIm9wdGlvbnMoKS5maWx0ZXJCeSA/PyAndGV4dCdcIlxuICAgICAgICBbYXV0b2ZvY3VzRmlsdGVyXT1cIm9wdGlvbnMoKS5hdXRvZm9jdXNGaWx0ZXIgPz8gZmFsc2VcIlxuICAgICAgICBbYXV0b0Rpc3BsYXlGaXJzdF09XCJvcHRpb25zKCkuYXV0b0Rpc3BsYXlGaXJzdCA/PyBmYWxzZVwiXG4gICAgICAgIFthdXRvZm9jdXNdPVwib3B0aW9ucygpLmF1dG9mb2N1cyA/PyBmYWxzZVwiXG4gICAgICAgIFtyZXNldEZpbHRlck9uSGlkZV09XCJ0cnVlXCJcbiAgICAgICAgKG9uSGlkZSk9XCJyZXNldEZpbHRlcigpXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cIm9wdGlvbnMoKS5yZWFkb25seSA/PyBmYWxzZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnbmctaW52YWxpZCBuZy1kaXJ0eSc6IChfZm9ybUNvbnRyb2wuZXJyb3JzICYmIChfZm9ybUNvbnRyb2wuZGlydHkgfHwgX2Zvcm1Db250cm9sLnRvdWNoZWQpICYmICFsb2FkaW5nT3B0aW9ucygpKSA/PyBmYWxzZX1cIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJuZ01vZGVsQ2hhbmdlKCRldmVudClcIlxuXG4gICAgICAgIFt2aXJ0dWFsU2Nyb2xsXT1cIm9wdGlvbnMoKS52aXJ0dWFsU2Nyb2xsICE9IGZhbHNlIHx8IGdldElzTGF6eUxvYWRFbmFibGVkKClcIlxuICAgICAgICBbdmlydHVhbFNjcm9sbEl0ZW1TaXplXT1cIm9wdGlvbnMoKS52aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPz8gMzRcIlxuICAgICAgICBbdmlydHVhbFNjcm9sbE9wdGlvbnNdPVwib3B0aW9ucygpLnZpcnR1YWxTY3JvbGxPcHRpb25zID8/IHsgYXV0b1NpemU6IGZhbHNlIH1cIlxuICAgICAgICBbc2Nyb2xsSGVpZ2h0XT1cIm9wdGlvbnMoKS5zY3JvbGxIZWlnaHQgPz8gJzIwMHB4J1wiXG4gICAgICAgIFtsYXp5XT1cImdldElzTGF6eUxvYWRFbmFibGVkKClcIlxuICAgICAgICAob25MYXp5TG9hZCk9XCJvbkxhenlMb2FkKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgIEBpZiAob3B0aW9ucygpLml0ZW1UZW1wbGF0ZSkge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb24gcFRlbXBsYXRlPVwiaXRlbVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9ucygpLml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogb3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbDogX2Zvcm1Db250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMoKSxcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6IF9mb3JtQ29udHJvbC5wYXJlbnQsXG4gICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChvcHRpb25zKCkuc2VsZWN0ZWRJdGVtVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJzZWxlY3RlZEl0ZW1cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnMoKS5zZWxlY3RlZEl0ZW1UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogX2Zvcm1Db250cm9sLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbDogX2Zvcm1Db250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMoKSxcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6IF9mb3JtQ29udHJvbC5wYXJlbnQsXG4gICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChvcHRpb25zKCkuZmlsdGVyKSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbnMoKS5maWx0ZXJUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0RmlsdGVyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwib3B0aW9ucygpLmZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbDogX2Zvcm1Db250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2g6IHJlZnJlc2guYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiBfZm9ybUNvbnRyb2wucGFyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VGVtcGxhdGU6IGRlZmF1bHRGaWx0ZXJUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRGaWx0ZXJUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dGdyb3VwLWFkZG9uXCI+PGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgcEF1dG9Gb2N1c1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlcldvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJvcHRpb25zKCkuYXV0b2ZvY3VzRmlsdGVyID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyT3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZW1wdHlUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgICAgICAgQGlmIChsb2FkaW5nT3B0aW9ucygpICYmICFmaXJzdFRpbWUgJiYgKChwZHJvcGRvd24/Lm9wdGlvbnM/Lmxlbmd0aCB8fCAwKSA+IDApKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB0ZXh0LXByaW1hcnkgZnctbWVkaXVtIHB5LTMgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNwaW5uZXItZG90dGVkIHBpLXNwaW4gXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7J0xvYWRpbmcgT3B0aW9ucyd8dHJhbnNsYXRlfX0uLi48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChvcHRpb25zKCkuc2hvd0NvcHlCdXR0b24pIHtcbiAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgaWNvbj1cInBpIHBpLWNvcHlcIlxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1pbmZvIGJvcmRlci0wXCJcbiAgICAgICAgICAob25DbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFfZm9ybUNvbnRyb2wudmFsdWUgfHwgX2Zvcm1Db250cm9sLnZhbHVlID09PSAnJ1wiPlxuICAgICAgICA8L3AtYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxhcHAtZmllbGQtZXJyb3JzXG4gICAgICBbY3VzdG9tRXJyb3JNZXNzYWdlc109XCJvcHRpb25zKCk/LmVycm9yTWVzc2FnZXMgfHwge31cIlxuICAgICAgW2NvbnRyb2xOYW1lXT1cIm9wdGlvbnMoKT8uZm9ybUNvbnRyb2xOYW1lXCJcbiAgICAgIFtlcnJvcnNdPVwiZ2V0RXJyb3JzKClcIlxuICAgICAgW2Vycm9yTWVzc2FnZV09XCJvcHRpb25zKCkuZXJyb3JNZXNzYWdlIHx8ICcnXCJcbiAgICAgIFtzaG93RXJyb3JzXT1cIihfZm9ybUNvbnRyb2wuZGlydHkgfHwgX2Zvcm1Db250cm9sLnRvdWNoZWQpICYmICFsb2FkaW5nT3B0aW9ucygpICYmIG9wdGlvbnMoKT8uc2hvd0Vycm9yICE9IGZhbHNlXCI+PC9hcHAtZmllbGQtZXJyb3JzPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjZW1wdHlUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgIEBpZiAobG9hZGluZ09wdGlvbnMoKSkge1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHlsZUNsYXNzPVwidy00cmVtIGgtNHJlbVwiPjwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgICAgICAgPHA+e3snTG9hZGluZyBPcHRpb25zJ3x0cmFuc2xhdGV9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChsb2FkaW5nRXJyb3IoKSkge1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxwPnt7J0ZhaWxlZCB0byBsb2FkIG9wdGlvbnMuJ3x0cmFuc2xhdGV9fTwvcD5cbiAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgIGxhYmVsPVwiUmV0cnlcIlxuICAgICAgICAgICAgaWNvbj1cInBpIHBpLXJlZnJlc2hcIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwiZ2V0T3B0aW9ucygpXCJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1vdXRsaW5lZCBwLWJ1dHRvbi1kYW5nZXJcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8cD5cbiAgICAgICAgICB7eydObyBPcHRpb25zIEZvdW5kJ3x0cmFuc2xhdGV9fVxuICAgICAgICA8L3A+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -11,4 +11,4 @@ export class KitsngControlFieldOptionsModel {
11
11
  this.isHidden = false;
12
12
  }
13
13
  }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l0c25nLWZvcm0tZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdHNuZy1mb3JtLWZhY3Rvcnkvc3JjL2xpYi9raXRzbmctZm9ybS1mYWN0b3J5L2NvcmUvbW9kZWxzL2tpdHNuZy1mb3JtLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLHNCQUFzQjtDQWVsQztBQUNELE1BQU0sT0FBTywyQkFBMkI7SUFXdEM7UUFDRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUFrQ0QsTUFBTSxPQUFPLDhCQUE4QjtJQUEzQztRQTJDRSxjQUFTLEdBQWEsSUFBSSxDQUFDO1FBQzNCLGFBQVEsR0FBYSxLQUFLLENBQUM7SUFzVzdCLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuXG5leHBvcnQgY2xhc3MgS2l0c25nRm9ybUZhY3RvcnlNb2RlbCB7XG4gIGdyb3VwPzogS2l0c25nRm9ybUZhY3RvcnlNb2RlbFtdO1xuICBhcnJheT86IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWxbXTtcbiAgY29udHJvbFR5cGU/OiBLaXRzbmdGb3JtRmFjdG9yeUNvbnRyb2xUeXBlO1xuICBpZD86IHN0cmluZztcbiAgY29sU2l6ZT86IHN0cmluZzsgLy8gR3JpZCBmcm9tIHByaW1lbmcgZXhhbXBsZTogY29sLTEyXG4gIGR1bW15RmllbGRzPzoge1xuICAgIG9wdGlvbnM6IHtcbiAgICAgIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICAgICAgZm9ybUNvbnRyb2xUeXBlPzogXCJhcnJheVwiOyAvLyBEZWZhdWx0IGlzICdjb250cm9sJ1xuICAgICAgdmFsdWU/OiBhbnk7XG4gICAgfTtcbiAgfVtdO1xuICBvcHRpb25zPzogS2l0c25nQ29udHJvbEZpZWxkT3B0aW9uc01vZGVsO1xuICBwYXJlbnQ/OiBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsIHwgdW5kZWZpbmVkO1xufVxuZXhwb3J0IGNsYXNzIEtpdHNuZ0Zvcm1Hcm91cEZhY3RvcnlNb2RlbCB7XG4gIGdyb3VwPzogS2l0c25nRm9ybUZhY3RvcnlNb2RlbFtdO1xuICBjb2xTaXplPzogc3RyaW5nOyAvLyBHcmlkIGZyb20gcHJpbWVuZyBleGFtcGxlOiBjb2wtMTJcbiAgZHVtbXlGaWVsZHM/OiB7XG4gICAgb3B0aW9uczoge1xuICAgICAgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gICAgICBmb3JtQ29udHJvbFR5cGU/OiBcImFycmF5XCI7IC8vIERlZmF1bHQgaXMgJ2NvbnRyb2wnXG4gICAgICB2YWx1ZT86IGFueTtcbiAgICB9O1xuICB9W107XG4gIG9wdGlvbnM/OiBLaXRzbmdDb250cm9sRmllbGRPcHRpb25zTW9kZWw7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZ3JvdXAgPSBbXTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBLaXRzbmdGb3JtRmFjdG9yeUNvbnRyb2xUeXBlID1cbiAgfCBcImlucHV0XCJcbiAgfCBcInRleHRhcmVhXCJcbiAgfCBcImRyb3Bkb3duXCJcbiAgfCBcImNoZWNrYm94XCJcbiAgfCBcImlucHV0LW51bWJlclwiXG4gIHwgXCJpbnB1dC1waG9uZVwiXG4gIHwgXCJyYWRpby1idXR0b25cIlxuICB8IFwic2VsZWN0LWJ1dHRvblwiXG4gIHwgXCJtdWx0aS1zZWxlY3RcIlxuICB8IFwiY29sb3ItcGlja2VyXCJcbiAgfCBcImNhbGVuZGFyLXBpY2tlclwiXG4gIHwgXCJsb29rdXAtc2VsZWN0XCJcbiAgfCBcImxvb2t1cC1tdWx0aS1zZWxlY3RcIlxuICB8IFwiaW5wdXQtZ3JvdXBcIlxuICB8IFwiZ29vZ2xlLW1hcFwiXG4gIHwgXCJmaWxlLXVwbG9hZFwiXG4gIHwgXCJzbGlkZXJcIlxuICB8IFwidGl0bGVcIlxuICB8IFwic3dpdGNoLWJ1dHRvblwiXG4gIHwgXCJkaXZpZGVyXCJcbiAgfCBcImVkaXRvclwiXG4gIHwgXCJjaGVja2JveC1ncm91cFwiXG4gIHwgXCJidXR0b25cIlxuICB8IFwiaWNvbi1waWNrZXJcIlxuICB8IFwidHJlZS1zZWxlY3RcIlxuICB8IFwiYXV0by1jb21wbGV0ZVwiXG4gIHwgXCJjaGlwc1wiXG4gIHwgXCJyYXRpbmdcIlxuICB8IFwiaW5wdXQtbWFza1wiXG4gIHwgXCJwYXNzd29yZFwiO1xuXG5leHBvcnQgY2xhc3MgS2l0c25nQ29udHJvbEZpZWxkT3B0aW9uc01vZGVsIHtcbiAgLy8gPyBVbml2ZXJzYWwgb3B0aW9uc1xuICBsYWJlbD86IHN0cmluZzsgLy8gTGFiZWwgYWJvdmUgZmllbGRcbiAgY29udGFpbmVyQ2xhc3M/OiBzdHJpbmc7IC8vIFRoaXMgY2xhc3MgaXMgZm9yIGlucHV0IGZpZWxkIGNvbnRhaW5lclxuICBwbGFjZWhvbGRlcj86IHN0cmluZzsgLy8gRmllbGQgcGxhY2Vob2xkZXJcbiAgZm9ybUNvbnRyb2xOYW1lPzogc3RyaW5nOyAvLyBGb3JtIGNvbnRyb2wgbmFtZVxuICBmb3JtQ29udHJvbFR5cGU/OiBcImFycmF5XCI7XG4gIHNob3dBcnJheVJlbW92ZUJ1dHRvbj86IGJvb2xlYW47XG4gIHJlbW92ZUJ1dHRvbkNvbFNpemU/OiBzdHJpbmc7XG4gIHJlbW92ZUJ1dHRvblBvc2l0aW9uPzogXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcInNpZGVcIjtcbiAgc2hvd0FycmF5QWRkQnV0dG9uPzogYm9vbGVhbjtcbiAgYXJyYXlMYXlvdXQ/OiBcInRhYmxlXCIgfCBcImRlZmF1bHRcIjtcbiAgZGVmYXVsdEFycmF5R3JvdXA/OiBLaXRzbmdGb3JtR3JvdXBGYWN0b3J5TW9kZWw7XG4gIGFycmF5VGFibGVDbGFzcz86IHN0cmluZztcbiAgdGFibGVIZWFkZXJDbGFzcz86IHN0cmluZztcbiAgYXJyYXlUYWJsZUNvbHVtbnM/OiB7IGZpZWxkOiBzdHJpbmcsIGhlYWRlcjogc3RyaW5nLCBjZWxsQ2xhc3M/OiBzdHJpbmcsIGNlbGxTdHlsZT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sIGJvZHlDZWxsQ2xhc3M/OiBzdHJpbmcsIGJvZHlDZWxsU3R5bGU/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH1bXTtcbiAgYXJyYXlUYWJsZVN0eWxlPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgZmlyc3Q/OiBudW1iZXI7XG4gIHJvd3NQZXJQYWdlT3B0aW9ucz86IG51bWJlcltdO1xuICBzaG93Q2xpZW50UGFnaW5hdG9yPzogYm9vbGVhbjtcbiAgdG90YWxSZWNvcmRzPzogbnVtYmVyO1xuICB2YWx1ZT86IGFueTsgLy8gRGVmYXVsdCB2YWx1ZSBmb3IgZmllbGRcbiAgZGlzYWJsZWQ/OiBib29sZWFuOyAvLyBEZWZpbmUgaXMgZm9ybSBmaWVsZCBkaXNhYmxlZFxuICB2YWxpZGF0b3JzPzoge1xuICAgIC8vIFZhbGlkYXRvcnMgZm9yIGZvcm0gZmllbGRcbiAgICByZXF1aXJlZD86IGJvb2xlYW47XG4gICAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICAgIHBhdHRlcm4/OiBzdHJpbmc7XG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICAgIG1pbj86IG51bWJlcjtcbiAgICBtYXg/OiBudW1iZXI7XG4gICAgZW1haWw/OiBib29sZWFuO1xuICAgIG51bGxWYWxpZGF0b3I/OiBib29sZWFuO1xuICAgIHJlcXVpcmVkVHJ1ZT86IGJvb2xlYW47XG4gICAgY3VzdG9tVmFsaWRhdG9ycz86IFZhbGlkYXRvckZuW11cbiAgfTtcbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICBlcnJvck1lc3NhZ2VzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgc2hvd0Vyb3JyPzogYm9vbGVhbjtcbiAgY2xhc3M/OiBzdHJpbmc7XG4gIGlkPzogbnVtYmVyO1xuICByb3dzPzogbnVtYmVyIHwgc3RyaW5nO1xuICBmaWVsZEZvcm1Hcm91cD86IHN0cmluZztcbiAgaXNWaXNpYmxlPzogYm9vbGVhbiA9IHRydWU7XG4gIGlzSGlkZGVuPzogYm9vbGVhbiA9IGZhbHNlO1xuICByZWFkb25seT86IGJvb2xlYW47XG4gIGNvbnRyb2xMYXlvdXQ/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcbiAgbGFiZWxDb2xTaXplPzogc3RyaW5nO1xuICBjb250cm9sQ29sU2l6ZT86IHN0cmluZztcbiAgY3VzdG9tQ29udHJvbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgbmV3Q29udHJvbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgb25DaGFuZ2U/KGU6IGFueSk6IHZvaWQ7XG4gIG5nTW9kZWxDaGFuZ2U/KGV2ZW50OiBhbnksIHBhcmVudEZvcm1Hcm91cD86IEZvcm1Hcm91cCwgc2VsZWN0ZWRPcHRpb24/OiBhbnksIGZpZWxkPzogS2l0c25nRm9ybUZhY3RvcnlNb2RlbCk6IHZvaWQ7XG5cbiAgLy8gRW5oYW5jZW1lbnRzXG4gIHRpdGxlVGFnPzogXCJoMVwiIHwgXCJoMlwiIHwgXCJoM1wiIHwgXCJoNFwiIHwgXCJoNVwiIHwgXCJoNlwiIHwgXCJzcGFuXCIgfCBcImRpdlwiO1xuICB0aXRsZUljb24/OiBzdHJpbmc7XG4gIHRvb2x0aXA/OiBzdHJpbmc7XG4gIHRvb2x0aXBQb3NpdGlvbj86IFwicmlnaHRcIiB8IFwibGVmdFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG4gIGhpbnQ/OiBzdHJpbmc7XG4gIGhpbnRDbGFzcz86IHN0cmluZztcbiAgbGFiZWxDbGFzcz86IHN0cmluZztcbiAgZmxvYXRMYWJlbD86IGJvb2xlYW47XG4gIHByZWZpeFRleHQ/OiBzdHJpbmc7XG4gIHN1ZmZpeFRleHQ/OiBzdHJpbmc7XG5cbiAgLy8gaW5wdXQtcGhvbmVcbiAgZGlzYWJsZWRDb2RlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHlDb2RlPzogYm9vbGVhbjtcbiAgZGVmYXVsdENvdW50cnlDb2RlPzogc3RyaW5nO1xuXG4gIC8vIGdyb3VwXG4gIGdyb3VwTGF5b3V0PzogXCJUYWJzXCIgfCBcIlN0ZXBwZXJcIiB8IFwiQWNjb3JkaW9uXCIgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBhY3RpdmVUYWI/OiBudW1iZXI7XG4gIGFjdGl2ZVN0ZXA/OiBudW1iZXI7XG4gIHN0ZXBwZXJPcmllbnRhdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBzdGVwcGVyTGluZWFyPzogYm9vbGVhbjtcbiAgc3RlcHBlclRyYW5zaXRpb25PcHRpb25zPzogc3RyaW5nO1xuICBvbkFjdGl2ZVN0ZXBDaGFuZ2U/KGV2ZW50OiBudW1iZXIsIGZpZWxkPzogS2l0c25nRm9ybUZhY3RvcnlNb2RlbCwgc3RlcHBlclJlZj86IGFueSk6IHZvaWQ7XG4gIHN0ZXBwZXJTdGFydFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgc3RlcHBlckVuZFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgc3RlcHBlclBhbmVsT3B0aW9ucz86IHtcbiAgICBoZWFkZXI/OiBzdHJpbmc7XG4gICAgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIGNvbnRlbnRUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgc2VwYXJhdG9yVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIGRpc2FibGVIZWFkZXJOYXZpZ2F0aW9uPzogYm9vbGVhbjtcbiAgICBoaWRlTmF2aWdhdGlvbj86IGJvb2xlYW47XG4gICAgbmF2aWdhdGlvbkNvbnRhaW5lckNsYXNzPzogc3RyaW5nO1xuICAgIG5hdmlnYXRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbmV4dEJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuICAgIG5leHRCdXR0b25JY29uPzogc3RyaW5nO1xuICAgIG5leHRCdXR0b25DbGFzcz86IHN0cmluZztcbiAgICBoaWRlTmV4dEJ1dHRvbj86IGJvb2xlYW47XG4gICAgb25OZXh0TmF2aWdhdGlvbj8oZXZlbnQ6IGFueSwgbmV4dENhbGxiYWNrOiBhbnksIGZpZWxkPzogS2l0c25nRm9ybUZhY3RvcnlNb2RlbCk6IHZvaWQ7XG4gICAgYmFja0J1dHRvbkxhYmVsPzogc3RyaW5nO1xuICAgIGJhY2tCdXR0b25JY29uPzogc3RyaW5nO1xuICAgIGJhY2tCdXR0b25DbGFzcz86IHN0cmluZztcbiAgICBoaWRlQmFja0J1dHRvbj86IGJvb2xlYW47XG4gICAgb25CYWNrTmF2aWdhdGlvbj8oZXZlbnQ6IGFueSwgcHJldkNhbGxiYWNrOiBhbnksIGZpZWxkPzogS2l0c25nRm9ybUZhY3RvcnlNb2RlbCk6IHZvaWQ7XG4gIH07XG4gIHRhYlBhbmVsT3B0aW9ucz86IHtcbiAgICBoZWFkZXI/OiBzdHJpbmc7XG4gICAgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIGNsb3NhYmxlPzogYm9vbGVhbjtcbiAgICBzZWxlY3RlZD86IGJvb2xlYW47XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB9O1xuICBhY2NvcmRpb25PcHRpb25zPzoge1xuICAgIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgICBleHBhbmRJY29uPzogc3RyaW5nO1xuICAgIGNvbGxhcHNlSWNvbj86IHN0cmluZztcbiAgfTtcbiAgYWNjb3JkaW9uVGFiT3B0aW9ucz86IHtcbiAgICBoZWFkZXI/OiBzdHJpbmc7XG4gICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBoZWFkZXJJY29uPzogc3RyaW5nO1xuICB9O1xuICAvLyA/IElucHV0XG4gIHR5cGU/OiBcInRleHRcIiB8IFwicGFzc3dvcmRcIjtcblxuICAvLyA/IERyb3Bkb3duXG4gIGRyb3Bkb3duT3B0aW9ucz86IGFueTtcbiAgb3B0aW9uVmFsdWU/OiBzdHJpbmc7XG4gIG9wdGlvbkxhYmVsPzogc3RyaW5nO1xuICBvcHRpb25Hcm91cENoaWxkcmVuPzogc3RyaW5nO1xuICBvcHRpb25Hcm91cExhYmVsPzogc3RyaW5nO1xuICBhcHBlbmRUbz86IHN0cmluZztcbiAgc2hvd0NsZWFyPzogYm9vbGVhbjtcbiAgZ3JvdXA/OiBib29sZWFuO1xuICBmaWx0ZXI/OiBib29sZWFuO1xuICBmaWx0ZXJCeT86IHN0cmluZztcbiAgYXV0b2ZvY3VzRmlsdGVyPzogYm9vbGVhbjtcbiAgYXV0b0Rpc3BsYXlGaXJzdD86IGJvb2xlYW47XG4gIGF1dG9mb2N1cz86IGJvb2xlYW47XG5cbiAgLy8gPyBjaGVja2JveFxuICBiaW5hcnk/OiBib29sZWFuO1xuXG4gIC8vID8gaW5wdXQtbnVtYmVyXG4gIG1vZGU/OiBzdHJpbmc7IC8vIGRlY2ltYWwgb3IgY3VycmVuY3lcbiAgcHJlZml4Pzogc3RyaW5nO1xuICBzdWZmaXg/OiBzdHJpbmc7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xuICBzaG93QnV0dG9ucz86IGJvb2xlYW47XG4gIGJ1dHRvbkxheW91dD86IFwic3RhY2tlZFwiIHwgXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCI7IC8vIHN0YWNrZWQsIGhvcml6b250YWwgb3IgdmVydGljYWxcbiAgc3RlcD86IG51bWJlcjtcbiAgZGVjcmVtZW50QnV0dG9uQ2xhc3M/OiBzdHJpbmc7XG4gIGluY3JlbWVudEJ1dHRvbkNsYXNzPzogc3RyaW5nO1xuICBpbmNyZW1lbnRCdXR0b25JY29uPzogc3RyaW5nO1xuICBkZWNyZW1lbnRCdXR0b25JY29uPzogc3RyaW5nO1xuICBtaW5GcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbiAgbWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gIGFwaUJhc2VVcmw/OiBzdHJpbmc7XG4gIHVzZUdyb3VwaW5nPzogYm9vbGVhbjtcbiAgLy8gPyByYWRpby1idXR0b25cbiAgcmFkaW9PcHRpb25zPzogeyBpZDogYW55OyB0ZXh0OiBzdHJpbmcsIFtrZXk6IHN0cmluZ106IGFueSB9W107XG5cbiAgLy8gPyBzZWxlY3QtYnV0dG9uXG4gIHNlbGVjdEJ1dHRvbk9wdGlvbnM/OiBhbnlbXTtcbiAgLy8gICBvcHRpb25WYWx1ZT86IHN0cmluZztcbiAgLy8gICBvcHRpb25MYWJlbD86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBzZWxlY3RidXR0b25MYWJlbFR5cGU/OiBcImljb25cIiB8IFwiaHRtbFwiIHwgbnVsbDtcblxuICAvLyA/IG11bHRpLXNlbGVjdFxuICBkaXNwbGF5PzogXCJjaGlwXCIgfCBcImNvbW1hXCI7XG4gIHNob3dUb2dnbGVBbGw/OiBib29sZWFuO1xuICBtdWx0aVNlbGVjdE9wdGlvbnM/OiBhbnk7XG4gIC8vICAgb3B0aW9uVmFsdWU/OiBzdHJpbmc7XG4gIC8vICAgb3B0aW9uTGFiZWw/OiBzdHJpbmc7XG4gIC8vICAgb3B0aW9uR3JvdXBDaGlsZHJlbj86IHN0cmluZztcbiAgLy8gICBvcHRpb25Hcm91cExhYmVsPzogc3RyaW5nO1xuICAvLyAgIGFwcGVuZFRvPzogc3RyaW5nO1xuICAvLyAgIHNob3dDbGVhcj86IGJvb2xlYW47XG4gIC8vICAgZ3JvdXA/OiBib29sZWFuO1xuICAvLyAgIGZpbHRlcj86IGJvb2xlYW47XG4gIC8vICAgZmlsdGVyQnk/OiBzdHJpbmc7XG5cbiAgLy8gY29sb3ItcGlja2VyXG4gIGNvbG9yTWF0cml4Pzogc3RyaW5nW107XG4gIHNob3dDb2xvck1hdHJpeD86IGJvb2xlYW47XG4gIHNob3dDdXN0b21Db2xvclBpY2tlcj86IGJvb2xlYW47XG4gIHNob3dDb2xvckVkaXRJbnB1dD86IGJvb2xlYW47XG5cbiAgLy8gPyBjYWxlbmRhci1waWNrZXJcbiAgZGF0ZUZvcm1hdD86IHN0cmluZztcbiAgaG91ckZvcm1hdD86IHN0cmluZztcbiAgc2hvd0ljb24/OiBib29sZWFuO1xuICBtaW5EYXRlPzogRGF0ZTtcbiAgbWF4RGF0ZT86IERhdGU7XG4gIC8vICAgYXBwZW5kVG8/OiBzdHJpbmc7XG4gIGRlZmF1bHREYXRlPzogRGF0ZTtcbiAgZmlyc3REYXlPZldlZWs/OiBzdHJpbmc7XG4gIGRpc2FibGVkRGF0ZXM/OiBEYXRlW107XG4gIGRpc2FibGVkRGF5cz86IG51bWJlcltdO1xuICByZWFkb25seUlucHV0PzogYm9vbGVhbjtcbiAgeWVhclJhbmdlPzogc3RyaW5nO1xuICBkYXRhVHlwZT86IFwic3RyaW5nXCIgfCBcImRhdGVcIjtcbiAgY2FsZW5kYXJUeXBlPzogXCJ5ZWFyXCIgfCBcImRhdGVcIiB8IFwibW9udGhcIiB8IFwidGltZVwiIHwgXCJkYXRlVGltZVwiO1xuICBzZWxlY3Rpb25Nb2RlPzogXCJtdWx0aXBsZVwiIHwgXCJyYW5nZVwiIHwgXCJzaW5nbGVcIjtcblxuICAvLyA/IGxvb2t1cC1zZWxlY3RcbiAgLy8gICBkcm9wZG93bk9wdGlvbnM/OiBhbnk7XG4gIC8vICAgb3B0aW9uVmFsdWU/OiBzdHJpbmc7XG4gIC8vICAgb3B0aW9uTGFiZWw/OiBzdHJpbmc7XG4gIC8vICAgb3B0aW9uR3JvdXBDaGlsZHJlbj86IHN0cmluZztcbiAgLy8gICBvcHRpb25Hcm91cExhYmVsPzogc3RyaW5nO1xuICAvLyAgIGFwcGVuZFRvPzogc3RyaW5nO1xuICAvLyAgIHNob3dDbGVhcj86IGJvb2xlYW47XG4gIC8vICAgZ3JvdXA/OiBib29sZWFuO1xuICAvLyAgIGZpbHRlcj86IGJvb2xlYW47XG4gIC8vICAgZmlsdGVyQnk/OiBzdHJpbmc7XG4gIC8vICAgYXBpQmFzZVVybD86IHN0cmluZztcbiAgZW50aXR5Pzogc3RyaW5nO1xuICBtb2R1bGU/OiBzdHJpbmc7XG4gIHZlcnNpb24/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHF1ZXJ5PzogYW55O1xuICBtZXRob2Q/OiBcIkdFVFwiIHwgXCJQT1NUXCI7XG4gIG9uT3B0aW9uU2VsZWN0ZWQ/KGV2ZW50OiBhbnkpOiB2b2lkO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgbG9hZExvb2t1cEZyb21TZXNzaW9uPzogYm9vbGVhbjtcbiAgc2hvd0NvcHlCdXR0b24/OiBib29sZWFuO1xuICBtZW1vcnlDYWNoZT86IGJvb2xlYW47XG4gIGZvcmNlR2V0T3B0aW9uQnlJZD86IGJvb2xlYW47XG4gIGZpbHRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgaXRlbVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgc2VsZWN0ZWRJdGVtVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBtYXBwT3B0aW9ucz8oaXRlbXM6IGFueVtdKTogYW55W107XG4gIGFwaVJlc3BvbnNlTWFwcGVyPzogKChkYXRhOiBhbnkpID0+IGFueSkgfCBudWxsO1xuXG4gIC8vID8gbG9va3VwLW11bHRpLXNlbGVjdFxuICAvLyAgIGRpc3BsYXk/OiBcImNoaXBcIiB8IFwiY29tbWFcIjtcbiAgLy8gICBzaG93VG9nZ2xlQWxsPzogYm9vbGVhbjtcbiAgLy8gICBtdWx0aVNlbGVjdE9wdGlvbnM/OiBhbnk7XG4gIC8vICAgb3B0aW9uVmFsdWU/OiBzdHJpbmc7XG4gIC8vICAgb3B0aW9uTGFiZWw/OiBzdHJpbmc7XG4gIC8vICAgb3B0aW9uR3JvdXBDaGlsZHJlbj86IHN0cmluZztcbiAgLy8gICBvcHRpb25Hcm91cExhYmVsPzogc3RyaW5nO1xuICAvLyAgIGFwcGVuZFRvPzogc3RyaW5nO1xuICAvLyAgIHNob3dDbGVhcj86IGJvb2xlYW47XG4gIC8vICAgZ3JvdXA/OiBib29sZWFuO1xuICAvLyAgIGZpbHRlcj86IGJvb2xlYW47XG4gIC8vICAgZmlsdGVyQnk/OiBzdHJpbmc7XG4gIC8vICAgYXBpQmFzZVVybD86IHN0cmluZztcbiAgLy8gICBlbnRpdHk/OiBzdHJpbmc7XG4gIC8vICAgbW9kdWxlPzogc3RyaW5nO1xuICAvLyAgIHZlcnNpb24/OiBzdHJpbmc7XG4gIC8vICAgcXVlcnk/OiBhbnk7XG4gIC8vICAgb25PcHRpb25TZWxlY3RlZD8oZXZlbnQ6IGFueSk6IHZvaWQ7XG5cbiAgLy8gPyBmaWxlLXVwbG9hZG1vZFxuICAvLyAgIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZmlsZUlucHV0TW9kZT86IFwiYWR2YW5jZWRcIiB8IFwiYmFzaWNcIjtcbiAgZmlsZUxpbWl0PzogbnVtYmVyO1xuICBhY2NlcHQ/OiBzdHJpbmc7XG4gIG1heEZpbGVTaXplPzogbnVtYmVyO1xuICBzaG93VXBsb2FkTWVzc2FnZT86IGJvb2xlYW47XG4gIGNob29zZUxhYmVsPzogc3RyaW5nIHwgbnVsbDtcbiAgY2hvb3NlSWNvbj86IHN0cmluZyB8IG51bGw7XG4gIGNob29zZVN0eWxlQ2xhc3M/OiBzdHJpbmcgfCBudWxsO1xuICBvblJlbW92ZUZpbGU/KFJlbW92ZWRGaWxlVXJsOiBzdHJpbmcsIHBhcmVudEZvcm1Hcm91cD86IEZvcm1Hcm91cCk6IHZvaWQ7XG4gIHNob3dSZW1vdmVCdXR0b24/OiBib29sZWFuO1xuICBmaWxlUHJldmlld1RlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgdG9vbGJhclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvLyA/IGlucHV0LWdyb3VwXG4gIC8vIHR5cGU/OiBcInRleHRcIiB8IFwicGFzc3dvcmRcIjtcbiAgLy8gcHJlZml4Pzogc3RyaW5nO1xuICAvLyBzdWZmaXg/OiBzdHJpbmc7XG4gIHByZWZpeEljb24/OiBzdHJpbmc7XG4gIHN1ZmZpeEljb24/OiBzdHJpbmc7XG5cbiAgLy8gRm9ybSBBcnJheSBvcHRpb25zXG4gIGFkZEJ1dHRvbkxhYmVsPzogc3RyaW5nO1xuICBhZGRCdXR0b25DbGFzcz86IHN0cmluZztcbiAgYWRkQnV0dG9uSWNvbj86IHN0cmluZztcbiAgcmVtb3ZlQnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIHJlbW92ZUJ1dHRvbkNsYXNzPzogc3RyaW5nO1xuICByZW1vdmVCdXR0b25JY29uPzogc3RyaW5nO1xuICBvblJlbW92ZUFycmF5SXRlbT8oYXJyYXk6IGFueSwgYXJyYXlJdGVtOiBhbnksIEl0ZW1JbmRleD86IG51bWJlciwgYXJyYXlGb3JtPzogRm9ybUFycmF5KTogdm9pZDtcbiAgb25BZGRBcnJheUl0ZW0/KGFycmF5OiBhbnksIGFycmF5SXRlbTogYW55LCBhcnJheUZvcm0/OiBGb3JtQXJyYXkpOiB2b2lkO1xuXG4gIC8vIGdvb2dsZS1tYXBcbiAgY2VudGVyPzogeyBsYXQ6IG51bWJlciwgbG5nOiBudW1iZXIgfTtcbiAgem9vbT86IG51bWJlcjtcbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICB3aWR0aD86IHN0cmluZztcbiAgbWFwT3B0aW9ucz86IGdvb2dsZS5tYXBzLk1hcE9wdGlvbnM7XG4gIG1hcmtlck9wdGlvbnM/OiBnb29nbGUubWFwcy5NYXJrZXJPcHRpb25zO1xuXG4gIC8vIHNsaWRlclxuICAvLyBtaW4/OiBudW1iZXI7XG4gIC8vIG1heD86IG51bWJlcjtcbiAgLy8gc3RlcD86IG51bWJlcjtcbiAgcmFuZ2U/OiBib29sZWFuO1xuICBhbmltYXRlPzogYm9vbGVhbjtcbiAgb3JpZW50YXRpb24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcblxuICAvLyBkaXZpZGVyXG4gIGNvbnRlbnRUZW1wbGF0ZVJlZj86IFRlbXBsYXRlUmVmPGFueT47XG4gIGRpdmlkZXJUeXBlPzogXCJzb2xpZFwiIHwgXCJkYXNoZWRcIiB8IFwiZG90dGVkXCI7XG4gIGFsaWduPzogXCJjZW50ZXJcIiB8IFwibGVmdFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCIgfCBcInJpZ2h0XCI7XG4gIGNvbnRlbnQ/OiBzdHJpbmc7XG5cbiAgLy8gc3dpdGNoLWJ1dHRvblxuICBmYWxzZVZhbHVlPzogYW55O1xuICB0cnVlVmFsdWU/OiBhbnk7XG5cbiAgLy8gZWRpdG9yXG4gIGVkaXRvckhlYWRlclRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgYm91bmRzPzogSFRNTEVsZW1lbnQgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG1vZHVsZXM/OiBvYmplY3QgfCB1bmRlZmluZWQ7XG4gIHNjcm9sbGluZ0NvbnRhaW5lcj86IEhUTUxFbGVtZW50IHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBkZWJ1Zz86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZm9ybWF0cz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8vIGNoZWNrYm94LWdyb3VwXG4gIGNoZWNrYm94R3JvdXBzPzogeyBpZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIFtrZXk6IHN0cmluZ106IHN0cmluZyB9W107XG4gIGNoZWNrYm94R3JvdXBzQWxpZ24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcbiAgY2hlY2tib3hDb2xTaXplPzogc3RyaW5nO1xuXG4gIC8vIGljb24tcGlja2VyXG4gIGljb25zTWF0cml4Pzogc3RyaW5nW107XG4gIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuO1xuXG4gIC8vIGJ1dHRvblxuICAvLyBsYWJlbD86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgaWNvblBvcz86ICdsZWZ0JyB8ICdyaWdodCcgfCAndG9wJyB8ICdib3R0b20nO1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgbG9hZGluZ0ljb24/OiBzdHJpbmc7XG4gIC8vIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLy8gY2xhc3M/OiBzdHJpbmc7XG4gIG9uQ2xpY2s/KGV2ZW50OiBhbnksIHBhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwLCBmaWVsZD86IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWwpOiB2b2lkO1xuICBidXR0b25zU3R5bGU/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8vIHRyZWUtc2VsZWN0XG4gIHRyZWVTZWxlY3RPcHRpb25zPzogYW55W107XG4gIHByb3BhZ2F0ZVNlbGVjdGlvblVwPzogYm9vbGVhbjtcbiAgcHJvcGFnYXRlU2VsZWN0aW9uRG93bj86IGJvb2xlYW47XG4gIGNvbnRhaW5lclN0eWxlQ2xhc3M/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclN0eWxlPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcGFuZWxTdHlsZT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHBhbmVsQ2xhc3M/OiBzdHJpbmc7XG4gIHRyZWVTZWxlY3Rpb25Nb2RlPzogXCJzaW5nbGVcIiB8IFwibXVsdGlwbGVcIiB8IFwiY2hlY2tib3hcIjtcbiAgLy8gZGlzcGxheT86IFwiY29tbWFcIiB8IFwiY2hpcFwiO1xuICBtZXRhS2V5U2VsZWN0aW9uPzogYm9vbGVhbjtcblxuICAvLyBhdXRvLWNvbXBsZXRlXG4gIG9uTmV3VmFsdWU/KGV2ZW50OiBhbnksIHBhcmVudEZvcm1Hcm91cD86IEZvcm1Hcm91cCwgZmllbGQ/OiBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsKTogdm9pZDtcbiAgYWxsb3dOZXdWYWx1ZT86IGJvb2xlYW47XG4gIHNob3dEcm9wZG93bj86IGJvb2xlYW47XG4gIG1pbkNoYXJUb1N0YXJ0U2VhcmNoPzogbnVtYmVyO1xuICBmb3JjZVNlbGVjdGlvbj86IGJvb2xlYW47XG4gIC8vICAgb3B0aW9uVmFsdWU/OiBzdHJpbmc7XG4gIC8vICAgb3B0aW9uTGFiZWw/OiBzdHJpbmc7XG4gIC8vICAgYXBwZW5kVG8/OiBzdHJpbmc7XG4gIC8vICAgc2hvd0NsZWFyPzogYm9vbGVhbjtcbiAgLy8gICBhcGlCYXNlVXJsPzogc3RyaW5nO1xuICAvLyBlbnRpdHk/OiBzdHJpbmc7XG4gIC8vIG1vZHVsZT86IHN0cmluZztcbiAgLy8gdmVyc2lvbj86IHN0cmluZztcbiAgLy8gcXVlcnk/OiBhbnk7XG4gIC8vIG9uT3B0aW9uU2VsZWN0ZWQ/KGV2ZW50OiBhbnkpOiB2b2lkO1xuICBkZWxheT86IG51bWJlcjtcbiAgc3R5bGU/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAvLyBwYW5lbFN0eWxlPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICBpbnB1dFN0eWxlPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcGFuZWxTdHlsZUNsYXNzPzogc3RyaW5nO1xuICBpbnB1dFN0eWxlQ2xhc3M/OiBzdHJpbmc7XG5cbiAgLy8gcGFzc3dvcmRcbiAgcHJvbXB0TGFiZWw/OiBzdHJpbmc7XG4gIHdlYWtMYWJlbD86IHN0cmluZztcbiAgbWVkaXVtTGFiZWw/OiBzdHJpbmc7XG4gIHN0cm9uZ0xhYmVsPzogc3RyaW5nO1xuICBmZWVkYmFjaz86IGJvb2xlYW47XG4gIHRvZ2dsZU1hc2s/OiBib29sZWFuO1xuXG4gIC8vIGlucHV0LW1hc2tcbiAgbWFzaz86IHN0cmluZztcbiAgc2xvdENoYXI/OiBzdHJpbmc7XG4gIGF1dG9DbGVhcj86IGJvb2xlYW47XG4gIHVubWFzaz86IGJvb2xlYW47XG5cbiAgLy8gcmF0aW5nXG4gIHN0YXJzPzogbnVtYmVyO1xuICBjYW5jZWw/OiBib29sZWFuO1xuICBvbkljb24/OiBzdHJpbmc7XG4gIG9mZkljb24/OiBzdHJpbmc7XG4gIGNhbmNlbEljb24/OiBzdHJpbmc7XG5cbiAgLy8gY2hpcHNcbiAgYWRkT25UYWI/OiBib29sZWFuO1xuICBhZGRPbkJsdXI/OiBib29sZWFuO1xuICBzZXBhcmF0b3I/OiBzdHJpbmc7XG4gIGFsbG93RHVwbGljYXRlPzogYm9vbGVhbjtcblxufVxuIl19
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2l0c25nLWZvcm0tZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdHNuZy1mb3JtLWZhY3Rvcnkvc3JjL2xpYi9raXRzbmctZm9ybS1mYWN0b3J5L2NvcmUvbW9kZWxzL2tpdHNuZy1mb3JtLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxPQUFPLHNCQUFzQjtDQWVsQztBQUNELE1BQU0sT0FBTywyQkFBMkI7SUFXdEM7UUFDRSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0NBQ0Y7QUFrQ0QsTUFBTSxPQUFPLDhCQUE4QjtJQUEzQztRQTJDRSxjQUFTLEdBQWEsSUFBSSxDQUFDO1FBQzNCLGFBQVEsR0FBYSxLQUFLLENBQUM7SUEwVzdCLENBQUM7Q0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgU2Nyb2xsZXJPcHRpb25zIH0gZnJvbSBcInByaW1lbmcvYXBpXCI7XG5cbmV4cG9ydCBjbGFzcyBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsIHtcbiAgZ3JvdXA/OiBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsW107XG4gIGFycmF5PzogS2l0c25nRm9ybUZhY3RvcnlNb2RlbFtdO1xuICBjb250cm9sVHlwZT86IEtpdHNuZ0Zvcm1GYWN0b3J5Q29udHJvbFR5cGU7XG4gIGlkPzogc3RyaW5nO1xuICBjb2xTaXplPzogc3RyaW5nOyAvLyBHcmlkIGZyb20gcHJpbWVuZyBleGFtcGxlOiBjb2wtMTJcbiAgZHVtbXlGaWVsZHM/OiB7XG4gICAgb3B0aW9uczoge1xuICAgICAgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gICAgICBmb3JtQ29udHJvbFR5cGU/OiBcImFycmF5XCI7IC8vIERlZmF1bHQgaXMgJ2NvbnRyb2wnXG4gICAgICB2YWx1ZT86IGFueTtcbiAgICB9O1xuICB9W107XG4gIG9wdGlvbnM/OiBLaXRzbmdDb250cm9sRmllbGRPcHRpb25zTW9kZWw7XG4gIHBhcmVudD86IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWwgfCB1bmRlZmluZWQ7XG59XG5leHBvcnQgY2xhc3MgS2l0c25nRm9ybUdyb3VwRmFjdG9yeU1vZGVsIHtcbiAgZ3JvdXA/OiBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsW107XG4gIGNvbFNpemU/OiBzdHJpbmc7IC8vIEdyaWQgZnJvbSBwcmltZW5nIGV4YW1wbGU6IGNvbC0xMlxuICBkdW1teUZpZWxkcz86IHtcbiAgICBvcHRpb25zOiB7XG4gICAgICBmb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgICAgIGZvcm1Db250cm9sVHlwZT86IFwiYXJyYXlcIjsgLy8gRGVmYXVsdCBpcyAnY29udHJvbCdcbiAgICAgIHZhbHVlPzogYW55O1xuICAgIH07XG4gIH1bXTtcbiAgb3B0aW9ucz86IEtpdHNuZ0NvbnRyb2xGaWVsZE9wdGlvbnNNb2RlbDtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ncm91cCA9IFtdO1xuICB9XG59XG5cbmV4cG9ydCB0eXBlIEtpdHNuZ0Zvcm1GYWN0b3J5Q29udHJvbFR5cGUgPVxuICB8IFwiaW5wdXRcIlxuICB8IFwidGV4dGFyZWFcIlxuICB8IFwiZHJvcGRvd25cIlxuICB8IFwiY2hlY2tib3hcIlxuICB8IFwiaW5wdXQtbnVtYmVyXCJcbiAgfCBcImlucHV0LXBob25lXCJcbiAgfCBcInJhZGlvLWJ1dHRvblwiXG4gIHwgXCJzZWxlY3QtYnV0dG9uXCJcbiAgfCBcIm11bHRpLXNlbGVjdFwiXG4gIHwgXCJjb2xvci1waWNrZXJcIlxuICB8IFwiY2FsZW5kYXItcGlja2VyXCJcbiAgfCBcImxvb2t1cC1zZWxlY3RcIlxuICB8IFwibG9va3VwLW11bHRpLXNlbGVjdFwiXG4gIHwgXCJpbnB1dC1ncm91cFwiXG4gIHwgXCJnb29nbGUtbWFwXCJcbiAgfCBcImZpbGUtdXBsb2FkXCJcbiAgfCBcInNsaWRlclwiXG4gIHwgXCJ0aXRsZVwiXG4gIHwgXCJzd2l0Y2gtYnV0dG9uXCJcbiAgfCBcImRpdmlkZXJcIlxuICB8IFwiZWRpdG9yXCJcbiAgfCBcImNoZWNrYm94LWdyb3VwXCJcbiAgfCBcImJ1dHRvblwiXG4gIHwgXCJpY29uLXBpY2tlclwiXG4gIHwgXCJ0cmVlLXNlbGVjdFwiXG4gIHwgXCJhdXRvLWNvbXBsZXRlXCJcbiAgfCBcImNoaXBzXCJcbiAgfCBcInJhdGluZ1wiXG4gIHwgXCJpbnB1dC1tYXNrXCJcbiAgfCBcInBhc3N3b3JkXCI7XG5cbmV4cG9ydCBjbGFzcyBLaXRzbmdDb250cm9sRmllbGRPcHRpb25zTW9kZWwge1xuICAvLyA/IFVuaXZlcnNhbCBvcHRpb25zXG4gIGxhYmVsPzogc3RyaW5nOyAvLyBMYWJlbCBhYm92ZSBmaWVsZFxuICBjb250YWluZXJDbGFzcz86IHN0cmluZzsgLy8gVGhpcyBjbGFzcyBpcyBmb3IgaW5wdXQgZmllbGQgY29udGFpbmVyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nOyAvLyBGaWVsZCBwbGFjZWhvbGRlclxuICBmb3JtQ29udHJvbE5hbWU/OiBzdHJpbmc7IC8vIEZvcm0gY29udHJvbCBuYW1lXG4gIGZvcm1Db250cm9sVHlwZT86IFwiYXJyYXlcIjtcbiAgc2hvd0FycmF5UmVtb3ZlQnV0dG9uPzogYm9vbGVhbjtcbiAgcmVtb3ZlQnV0dG9uQ29sU2l6ZT86IHN0cmluZztcbiAgcmVtb3ZlQnV0dG9uUG9zaXRpb24/OiBcInRvcFwiIHwgXCJib3R0b21cIiB8IFwic2lkZVwiO1xuICBzaG93QXJyYXlBZGRCdXR0b24/OiBib29sZWFuO1xuICBhcnJheUxheW91dD86IFwidGFibGVcIiB8IFwiZGVmYXVsdFwiO1xuICBkZWZhdWx0QXJyYXlHcm91cD86IEtpdHNuZ0Zvcm1Hcm91cEZhY3RvcnlNb2RlbDtcbiAgYXJyYXlUYWJsZUNsYXNzPzogc3RyaW5nO1xuICB0YWJsZUhlYWRlckNsYXNzPzogc3RyaW5nO1xuICBhcnJheVRhYmxlQ29sdW1ucz86IHsgZmllbGQ6IHN0cmluZywgaGVhZGVyOiBzdHJpbmcsIGNlbGxDbGFzcz86IHN0cmluZywgY2VsbFN0eWxlPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSwgYm9keUNlbGxDbGFzcz86IHN0cmluZywgYm9keUNlbGxTdHlsZT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfVtdO1xuICBhcnJheVRhYmxlU3R5bGU/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBmaXJzdD86IG51bWJlcjtcbiAgcm93c1BlclBhZ2VPcHRpb25zPzogbnVtYmVyW107XG4gIHNob3dDbGllbnRQYWdpbmF0b3I/OiBib29sZWFuO1xuICB0b3RhbFJlY29yZHM/OiBudW1iZXI7XG4gIHZhbHVlPzogYW55OyAvLyBEZWZhdWx0IHZhbHVlIGZvciBmaWVsZFxuICBkaXNhYmxlZD86IGJvb2xlYW47IC8vIERlZmluZSBpcyBmb3JtIGZpZWxkIGRpc2FibGVkXG4gIHZhbGlkYXRvcnM/OiB7XG4gICAgLy8gVmFsaWRhdG9ycyBmb3IgZm9ybSBmaWVsZFxuICAgIHJlcXVpcmVkPzogYm9vbGVhbjtcbiAgICBtYXhMZW5ndGg/OiBudW1iZXI7XG4gICAgcGF0dGVybj86IHN0cmluZztcbiAgICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gICAgbWluPzogbnVtYmVyO1xuICAgIG1heD86IG51bWJlcjtcbiAgICBlbWFpbD86IGJvb2xlYW47XG4gICAgbnVsbFZhbGlkYXRvcj86IGJvb2xlYW47XG4gICAgcmVxdWlyZWRUcnVlPzogYm9vbGVhbjtcbiAgICBjdXN0b21WYWxpZGF0b3JzPzogVmFsaWRhdG9yRm5bXVxuICB9O1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIGVycm9yTWVzc2FnZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBzaG93RXJyb3I/OiBib29sZWFuO1xuICBjbGFzcz86IHN0cmluZztcbiAgaWQ/OiBudW1iZXI7XG4gIHJvd3M/OiBudW1iZXIgfCBzdHJpbmc7XG4gIGZpZWxkRm9ybUdyb3VwPzogc3RyaW5nO1xuICBpc1Zpc2libGU/OiBib29sZWFuID0gdHJ1ZTtcbiAgaXNIaWRkZW4/OiBib29sZWFuID0gZmFsc2U7XG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcbiAgY29udHJvbExheW91dD86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBsYWJlbENvbFNpemU/OiBzdHJpbmc7XG4gIGNvbnRyb2xDb2xTaXplPzogc3RyaW5nO1xuICBjdXN0b21Db250cm9sVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBuZXdDb250cm9sVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBvbkNoYW5nZT8oZTogYW55KTogdm9pZDtcbiAgbmdNb2RlbENoYW5nZT8oZXZlbnQ6IGFueSwgcGFyZW50Rm9ybUdyb3VwPzogRm9ybUdyb3VwLCBzZWxlY3RlZE9wdGlvbj86IGFueSwgZmllbGQ/OiBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsKTogdm9pZDtcblxuICAvLyBFbmhhbmNlbWVudHNcbiAgdGl0bGVUYWc/OiBcImgxXCIgfCBcImgyXCIgfCBcImgzXCIgfCBcImg0XCIgfCBcImg1XCIgfCBcImg2XCIgfCBcInNwYW5cIiB8IFwiZGl2XCI7XG4gIHRpdGxlSWNvbj86IHN0cmluZztcbiAgdG9vbHRpcD86IHN0cmluZztcbiAgdG9vbHRpcFBvc2l0aW9uPzogXCJyaWdodFwiIHwgXCJsZWZ0XCIgfCBcInRvcFwiIHwgXCJib3R0b21cIjtcbiAgaGludD86IHN0cmluZztcbiAgaGludENsYXNzPzogc3RyaW5nO1xuICBsYWJlbENsYXNzPzogc3RyaW5nO1xuICBmbG9hdExhYmVsPzogYm9vbGVhbjtcbiAgcHJlZml4VGV4dD86IHN0cmluZztcbiAgc3VmZml4VGV4dD86IHN0cmluZztcblxuICAvLyBpbnB1dC1waG9uZVxuICBkaXNhYmxlZENvZGU/OiBib29sZWFuO1xuICByZWFkb25seUNvZGU/OiBib29sZWFuO1xuICBkZWZhdWx0Q291bnRyeUNvZGU/OiBzdHJpbmc7XG5cbiAgLy8gZ3JvdXBcbiAgZ3JvdXBMYXlvdXQ/OiBcIlRhYnNcIiB8IFwiU3RlcHBlclwiIHwgXCJBY2NvcmRpb25cIiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGFjdGl2ZVRhYj86IG51bWJlcjtcbiAgYWN0aXZlU3RlcD86IG51bWJlcjtcbiAgc3RlcHBlck9yaWVudGF0aW9uPzogXCJob3Jpem9udGFsXCIgfCBcInZlcnRpY2FsXCI7XG4gIHN0ZXBwZXJMaW5lYXI/OiBib29sZWFuO1xuICBzdGVwcGVyVHJhbnNpdGlvbk9wdGlvbnM/OiBzdHJpbmc7XG4gIG9uQWN0aXZlU3RlcENoYW5nZT8oZXZlbnQ6IG51bWJlciwgZmllbGQ/OiBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsLCBzdGVwcGVyUmVmPzogYW55KTogdm9pZDtcbiAgc3RlcHBlclN0YXJ0VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzdGVwcGVyRW5kVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzdGVwcGVyUGFuZWxPcHRpb25zPzoge1xuICAgIGhlYWRlcj86IHN0cmluZztcbiAgICBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgY29udGVudFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBzZXBhcmF0b3JUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgZGlzYWJsZUhlYWRlck5hdmlnYXRpb24/OiBib29sZWFuO1xuICAgIGhpZGVOYXZpZ2F0aW9uPzogYm9vbGVhbjtcbiAgICBuYXZpZ2F0aW9uQ29udGFpbmVyQ2xhc3M/OiBzdHJpbmc7XG4gICAgbmF2aWdhdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBuZXh0QnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gICAgbmV4dEJ1dHRvbkljb24/OiBzdHJpbmc7XG4gICAgbmV4dEJ1dHRvbkNsYXNzPzogc3RyaW5nO1xuICAgIGhpZGVOZXh0QnV0dG9uPzogYm9vbGVhbjtcbiAgICBvbk5leHROYXZpZ2F0aW9uPyhldmVudDogYW55LCBuZXh0Q2FsbGJhY2s6IGFueSwgZmllbGQ/OiBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsKTogdm9pZDtcbiAgICBiYWNrQnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gICAgYmFja0J1dHRvbkljb24/OiBzdHJpbmc7XG4gICAgYmFja0J1dHRvbkNsYXNzPzogc3RyaW5nO1xuICAgIGhpZGVCYWNrQnV0dG9uPzogYm9vbGVhbjtcbiAgICBvbkJhY2tOYXZpZ2F0aW9uPyhldmVudDogYW55LCBwcmV2Q2FsbGJhY2s6IGFueSwgZmllbGQ/OiBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsKTogdm9pZDtcbiAgfTtcbiAgdGFiUGFuZWxPcHRpb25zPzoge1xuICAgIGhlYWRlcj86IHN0cmluZztcbiAgICBoZWFkZXJUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gICAgY2xvc2FibGU/OiBib29sZWFuO1xuICAgIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIH07XG4gIGFjY29yZGlvbk9wdGlvbnM/OiB7XG4gICAgbXVsdGlwbGU/OiBib29sZWFuO1xuICAgIGV4cGFuZEljb24/OiBzdHJpbmc7XG4gICAgY29sbGFwc2VJY29uPzogc3RyaW5nO1xuICB9O1xuICBhY2NvcmRpb25UYWJPcHRpb25zPzoge1xuICAgIGhlYWRlcj86IHN0cmluZztcbiAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xuICAgIGhlYWRlckljb24/OiBzdHJpbmc7XG4gIH07XG4gIC8vID8gSW5wdXRcbiAgdHlwZT86IFwidGV4dFwiIHwgXCJwYXNzd29yZFwiO1xuXG4gIC8vID8gRHJvcGRvd25cbiAgZHJvcGRvd25PcHRpb25zPzogYW55O1xuICBvcHRpb25WYWx1ZT86IHN0cmluZztcbiAgb3B0aW9uTGFiZWw/OiBzdHJpbmc7XG4gIG9wdGlvbkdyb3VwQ2hpbGRyZW4/OiBzdHJpbmc7XG4gIG9wdGlvbkdyb3VwTGFiZWw/OiBzdHJpbmc7XG4gIGFwcGVuZFRvPzogc3RyaW5nO1xuICBzaG93Q2xlYXI/OiBib29sZWFuO1xuICBncm91cD86IGJvb2xlYW47XG4gIGZpbHRlcj86IGJvb2xlYW47XG4gIGZpbHRlckJ5Pzogc3RyaW5nO1xuICBhdXRvZm9jdXNGaWx0ZXI/OiBib29sZWFuO1xuICBhdXRvRGlzcGxheUZpcnN0PzogYm9vbGVhbjtcbiAgYXV0b2ZvY3VzPzogYm9vbGVhbjtcbiAgdmlydHVhbFNjcm9sbEl0ZW1TaXplPzogbnVtYmVyO1xuICB2aXJ0dWFsU2Nyb2xsPzogYm9vbGVhbjtcbiAgdmlydHVhbFNjcm9sbE9wdGlvbnM/OiBTY3JvbGxlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gIHNjcm9sbEhlaWdodD86IHN0cmluZztcblxuICAvLyA/IGNoZWNrYm94XG4gIGJpbmFyeT86IGJvb2xlYW47XG5cbiAgLy8gPyBpbnB1dC1udW1iZXJcbiAgbW9kZT86IHN0cmluZzsgLy8gZGVjaW1hbCBvciBjdXJyZW5jeVxuICBwcmVmaXg/OiBzdHJpbmc7XG4gIHN1ZmZpeD86IHN0cmluZztcbiAgbWluPzogbnVtYmVyO1xuICBtYXg/OiBudW1iZXI7XG4gIHNob3dCdXR0b25zPzogYm9vbGVhbjtcbiAgYnV0dG9uTGF5b3V0PzogXCJzdGFja2VkXCIgfCBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjsgLy8gc3RhY2tlZCwgaG9yaXpvbnRhbCBvciB2ZXJ0aWNhbFxuICBzdGVwPzogbnVtYmVyO1xuICBkZWNyZW1lbnRCdXR0b25DbGFzcz86IHN0cmluZztcbiAgaW5jcmVtZW50QnV0dG9uQ2xhc3M/OiBzdHJpbmc7XG4gIGluY3JlbWVudEJ1dHRvbkljb24/OiBzdHJpbmc7XG4gIGRlY3JlbWVudEJ1dHRvbkljb24/OiBzdHJpbmc7XG4gIG1pbkZyYWN0aW9uRGlnaXRzPzogbnVtYmVyO1xuICBtYXhGcmFjdGlvbkRpZ2l0cz86IG51bWJlcjtcbiAgYXBpQmFzZVVybD86IHN0cmluZztcbiAgdXNlR3JvdXBpbmc/OiBib29sZWFuO1xuICAvLyA/IHJhZGlvLWJ1dHRvblxuICByYWRpb09wdGlvbnM/OiB7IGlkOiBhbnk7IHRleHQ6IHN0cmluZywgW2tleTogc3RyaW5nXTogYW55IH1bXTtcblxuICAvLyA/IHNlbGVjdC1idXR0b25cbiAgc2VsZWN0QnV0dG9uT3B0aW9ucz86IGFueVtdO1xuICAvLyAgIG9wdGlvblZhbHVlPzogc3RyaW5nO1xuICAvLyAgIG9wdGlvbkxhYmVsPzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIHNlbGVjdGJ1dHRvbkxhYmVsVHlwZT86IFwiaWNvblwiIHwgXCJodG1sXCIgfCBudWxsO1xuXG4gIC8vID8gbXVsdGktc2VsZWN0XG4gIGRpc3BsYXk/OiBcImNoaXBcIiB8IFwiY29tbWFcIjtcbiAgc2hvd1RvZ2dsZUFsbD86IGJvb2xlYW47XG4gIG11bHRpU2VsZWN0T3B0aW9ucz86IGFueTtcbiAgLy8gICBvcHRpb25WYWx1ZT86IHN0cmluZztcbiAgLy8gICBvcHRpb25MYWJlbD86IHN0cmluZztcbiAgLy8gICBvcHRpb25Hcm91cENoaWxkcmVuPzogc3RyaW5nO1xuICAvLyAgIG9wdGlvbkdyb3VwTGFiZWw/OiBzdHJpbmc7XG4gIC8vICAgYXBwZW5kVG8/OiBzdHJpbmc7XG4gIC8vICAgc2hvd0NsZWFyPzogYm9vbGVhbjtcbiAgLy8gICBncm91cD86IGJvb2xlYW47XG4gIC8vICAgZmlsdGVyPzogYm9vbGVhbjtcbiAgLy8gICBmaWx0ZXJCeT86IHN0cmluZztcblxuICAvLyBjb2xvci1waWNrZXJcbiAgY29sb3JNYXRyaXg/OiBzdHJpbmdbXTtcbiAgc2hvd0NvbG9yTWF0cml4PzogYm9vbGVhbjtcbiAgc2hvd0N1c3RvbUNvbG9yUGlja2VyPzogYm9vbGVhbjtcbiAgc2hvd0NvbG9yRWRpdElucHV0PzogYm9vbGVhbjtcblxuICAvLyA/IGNhbGVuZGFyLXBpY2tlclxuICBkYXRlRm9ybWF0Pzogc3RyaW5nO1xuICBob3VyRm9ybWF0Pzogc3RyaW5nO1xuICBzaG93SWNvbj86IGJvb2xlYW47XG4gIG1pbkRhdGU/OiBEYXRlO1xuICBtYXhEYXRlPzogRGF0ZTtcbiAgLy8gICBhcHBlbmRUbz86IHN0cmluZztcbiAgZGVmYXVsdERhdGU/OiBEYXRlO1xuICBmaXJzdERheU9mV2Vlaz86IHN0cmluZztcbiAgZGlzYWJsZWREYXRlcz86IERhdGVbXTtcbiAgZGlzYWJsZWREYXlzPzogbnVtYmVyW107XG4gIHJlYWRvbmx5SW5wdXQ/OiBib29sZWFuO1xuICB5ZWFyUmFuZ2U/OiBzdHJpbmc7XG4gIGRhdGFUeXBlPzogXCJzdHJpbmdcIiB8IFwiZGF0ZVwiO1xuICBjYWxlbmRhclR5cGU/OiBcInllYXJcIiB8IFwiZGF0ZVwiIHwgXCJtb250aFwiIHwgXCJ0aW1lXCIgfCBcImRhdGVUaW1lXCI7XG4gIHNlbGVjdGlvbk1vZGU/OiBcIm11bHRpcGxlXCIgfCBcInJhbmdlXCIgfCBcInNpbmdsZVwiO1xuXG4gIC8vID8gbG9va3VwLXNlbGVjdFxuICAvLyAgIGRyb3Bkb3duT3B0aW9ucz86IGFueTtcbiAgLy8gICBvcHRpb25WYWx1ZT86IHN0cmluZztcbiAgLy8gICBvcHRpb25MYWJlbD86IHN0cmluZztcbiAgLy8gICBvcHRpb25Hcm91cENoaWxkcmVuPzogc3RyaW5nO1xuICAvLyAgIG9wdGlvbkdyb3VwTGFiZWw/OiBzdHJpbmc7XG4gIC8vICAgYXBwZW5kVG8/OiBzdHJpbmc7XG4gIC8vICAgc2hvd0NsZWFyPzogYm9vbGVhbjtcbiAgLy8gICBncm91cD86IGJvb2xlYW47XG4gIC8vICAgZmlsdGVyPzogYm9vbGVhbjtcbiAgLy8gICBmaWx0ZXJCeT86IHN0cmluZztcbiAgLy8gICBhcGlCYXNlVXJsPzogc3RyaW5nO1xuICBlbnRpdHk/OiBzdHJpbmc7XG4gIG1vZHVsZT86IHN0cmluZztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcbiAgcXVlcnk/OiBhbnk7XG4gIG1ldGhvZD86IFwiR0VUXCIgfCBcIlBPU1RcIjtcbiAgb25PcHRpb25TZWxlY3RlZD8oZXZlbnQ6IGFueSk6IHZvaWQ7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICBsb2FkTG9va3VwRnJvbVNlc3Npb24/OiBib29sZWFuO1xuICBzaG93Q29weUJ1dHRvbj86IGJvb2xlYW47XG4gIG1lbW9yeUNhY2hlPzogYm9vbGVhbjtcbiAgZm9yY2VHZXRPcHRpb25CeUlkPzogYm9vbGVhbjtcbiAgZmlsdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBpdGVtVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBzZWxlY3RlZEl0ZW1UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG4gIG1hcHBPcHRpb25zPyhpdGVtczogYW55W10pOiBhbnlbXTtcbiAgYXBpUmVzcG9uc2VNYXBwZXI/OiAoKGRhdGE6IGFueSkgPT4gYW55KSB8IG51bGw7XG5cbiAgLy8gPyBsb29rdXAtbXVsdGktc2VsZWN0XG4gIC8vICAgZGlzcGxheT86IFwiY2hpcFwiIHwgXCJjb21tYVwiO1xuICAvLyAgIHNob3dUb2dnbGVBbGw/OiBib29sZWFuO1xuICAvLyAgIG11bHRpU2VsZWN0T3B0aW9ucz86IGFueTtcbiAgLy8gICBvcHRpb25WYWx1ZT86IHN0cmluZztcbiAgLy8gICBvcHRpb25MYWJlbD86IHN0cmluZztcbiAgLy8gICBvcHRpb25Hcm91cENoaWxkcmVuPzogc3RyaW5nO1xuICAvLyAgIG9wdGlvbkdyb3VwTGFiZWw/OiBzdHJpbmc7XG4gIC8vICAgYXBwZW5kVG8/OiBzdHJpbmc7XG4gIC8vICAgc2hvd0NsZWFyPzogYm9vbGVhbjtcbiAgLy8gICBncm91cD86IGJvb2xlYW47XG4gIC8vICAgZmlsdGVyPzogYm9vbGVhbjtcbiAgLy8gICBmaWx0ZXJCeT86IHN0cmluZztcbiAgLy8gICBhcGlCYXNlVXJsPzogc3RyaW5nO1xuICAvLyAgIGVudGl0eT86IHN0cmluZztcbiAgLy8gICBtb2R1bGU/OiBzdHJpbmc7XG4gIC8vICAgdmVyc2lvbj86IHN0cmluZztcbiAgLy8gICBxdWVyeT86IGFueTtcbiAgLy8gICBvbk9wdGlvblNlbGVjdGVkPyhldmVudDogYW55KTogdm9pZDtcblxuICAvLyA/IGZpbGUtdXBsb2FkbW9kXG4gIC8vICAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBmaWxlSW5wdXRNb2RlPzogXCJhZHZhbmNlZFwiIHwgXCJiYXNpY1wiO1xuICBmaWxlTGltaXQ/OiBudW1iZXI7XG4gIGFjY2VwdD86IHN0cmluZztcbiAgbWF4RmlsZVNpemU/OiBudW1iZXI7XG4gIHNob3dVcGxvYWRNZXNzYWdlPzogYm9vbGVhbjtcbiAgY2hvb3NlTGFiZWw/OiBzdHJpbmcgfCBudWxsO1xuICBjaG9vc2VJY29uPzogc3RyaW5nIHwgbnVsbDtcbiAgY2hvb3NlU3R5bGVDbGFzcz86IHN0cmluZyB8IG51bGw7XG4gIG9uUmVtb3ZlRmlsZT8oUmVtb3ZlZEZpbGVVcmw6IHN0cmluZywgcGFyZW50Rm9ybUdyb3VwPzogRm9ybUdyb3VwKTogdm9pZDtcbiAgc2hvd1JlbW92ZUJ1dHRvbj86IGJvb2xlYW47XG4gIGZpbGVQcmV2aWV3VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICB0b29sYmFyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8vID8gaW5wdXQtZ3JvdXBcbiAgLy8gdHlwZT86IFwidGV4dFwiIHwgXCJwYXNzd29yZFwiO1xuICAvLyBwcmVmaXg/OiBzdHJpbmc7XG4gIC8vIHN1ZmZpeD86IHN0cmluZztcbiAgcHJlZml4SWNvbj86IHN0cmluZztcbiAgc3VmZml4SWNvbj86IHN0cmluZztcblxuICAvLyBGb3JtIEFycmF5IG9wdGlvbnNcbiAgYWRkQnV0dG9uTGFiZWw/OiBzdHJpbmc7XG4gIGFkZEJ1dHRvbkNsYXNzPzogc3RyaW5nO1xuICBhZGRCdXR0b25JY29uPzogc3RyaW5nO1xuICByZW1vdmVCdXR0b25MYWJlbD86IHN0cmluZztcbiAgcmVtb3ZlQnV0dG9uQ2xhc3M/OiBzdHJpbmc7XG4gIHJlbW92ZUJ1dHRvbkljb24/OiBzdHJpbmc7XG4gIG9uUmVtb3ZlQXJyYXlJdGVtPyhhcnJheTogYW55LCBhcnJheUl0ZW06IGFueSwgSXRlbUluZGV4PzogbnVtYmVyLCBhcnJheUZvcm0/OiBGb3JtQXJyYXkpOiB2b2lkO1xuICBvbkFkZEFycmF5SXRlbT8oYXJyYXk6IGFueSwgYXJyYXlJdGVtOiBhbnksIGFycmF5Rm9ybT86IEZvcm1BcnJheSk6IHZvaWQ7XG5cbiAgLy8gZ29vZ2xlLW1hcFxuICBjZW50ZXI/OiB7IGxhdDogbnVtYmVyLCBsbmc6IG51bWJlciB9O1xuICB6b29tPzogbnVtYmVyO1xuICBoZWlnaHQ/OiBzdHJpbmc7XG4gIHdpZHRoPzogc3RyaW5nO1xuICBtYXBPcHRpb25zPzogZ29vZ2xlLm1hcHMuTWFwT3B0aW9ucztcbiAgbWFya2VyT3B0aW9ucz86IGdvb2dsZS5tYXBzLk1hcmtlck9wdGlvbnM7XG5cbiAgLy8gc2xpZGVyXG4gIC8vIG1pbj86IG51bWJlcjtcbiAgLy8gbWF4PzogbnVtYmVyO1xuICAvLyBzdGVwPzogbnVtYmVyO1xuICByYW5nZT86IGJvb2xlYW47XG4gIGFuaW1hdGU/OiBib29sZWFuO1xuICBvcmllbnRhdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuXG4gIC8vIGRpdmlkZXJcbiAgY29udGVudFRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgZGl2aWRlclR5cGU/OiBcInNvbGlkXCIgfCBcImRhc2hlZFwiIHwgXCJkb3R0ZWRcIjtcbiAgYWxpZ24/OiBcImNlbnRlclwiIHwgXCJsZWZ0XCIgfCBcInRvcFwiIHwgXCJib3R0b21cIiB8IFwicmlnaHRcIjtcbiAgY29udGVudD86IHN0cmluZztcblxuICAvLyBzd2l0Y2gtYnV0dG9uXG4gIGZhbHNlVmFsdWU/OiBhbnk7XG4gIHRydWVWYWx1ZT86IGFueTtcblxuICAvLyBlZGl0b3JcbiAgZWRpdG9ySGVhZGVyVGVtcGxhdGVSZWY/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBib3VuZHM/OiBIVE1MRWxlbWVudCB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbW9kdWxlcz86IG9iamVjdCB8IHVuZGVmaW5lZDtcbiAgc2Nyb2xsaW5nQ29udGFpbmVyPzogSFRNTEVsZW1lbnQgfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRlYnVnPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmb3JtYXRzPzogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cbiAgLy8gY2hlY2tib3gtZ3JvdXBcbiAgY2hlY2tib3hHcm91cHM/OiB7IGlkOiBzdHJpbmcsIHRleHQ6IHN0cmluZywgW2tleTogc3RyaW5nXTogc3RyaW5nIH1bXTtcbiAgY2hlY2tib3hHcm91cHNBbGlnbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBjaGVja2JveENvbFNpemU/OiBzdHJpbmc7XG5cbiAgLy8gaWNvbi1waWNrZXJcbiAgaWNvbnNNYXRyaXg/OiBzdHJpbmdbXTtcbiAgY2xvc2VPblNlbGVjdD86IGJvb2xlYW47XG5cbiAgLy8gYnV0dG9uXG4gIC8vIGxhYmVsPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBpY29uUG9zPzogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbSc7XG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICBsb2FkaW5nSWNvbj86IHN0cmluZztcbiAgLy8gZGlzYWJsZWQ/OiBib29sZWFuO1xuICAvLyBjbGFzcz86IHN0cmluZztcbiAgb25DbGljaz8oZXZlbnQ6IGFueSwgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXAsIGZpZWxkPzogS2l0c25nRm9ybUZhY3RvcnlNb2RlbCk6IHZvaWQ7XG4gIGJ1dHRvbnNTdHlsZT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLy8gdHJlZS1zZWxlY3RcbiAgdHJlZVNlbGVjdE9wdGlvbnM/OiBhbnlbXTtcbiAgcHJvcGFnYXRlU2VsZWN0aW9uVXA/OiBib29sZWFuO1xuICBwcm9wYWdhdGVTZWxlY3Rpb25Eb3duPzogYm9vbGVhbjtcbiAgY29udGFpbmVyU3R5bGVDbGFzcz86IHN0cmluZztcbiAgY29udGFpbmVyU3R5bGU/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwYW5lbFN0eWxlPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgcGFuZWxDbGFzcz86IHN0cmluZztcbiAgdHJlZVNlbGVjdGlvbk1vZGU/OiBcInNpbmdsZVwiIHwgXCJtdWx0aXBsZVwiIHwgXCJjaGVja2JveFwiO1xuICAvLyBkaXNwbGF5PzogXCJjb21tYVwiIHwgXCJjaGlwXCI7XG4gIG1ldGFLZXlTZWxlY3Rpb24/OiBib29sZWFuO1xuXG4gIC8vIGF1dG8tY29tcGxldGVcbiAgb25OZXdWYWx1ZT8oZXZlbnQ6IGFueSwgcGFyZW50Rm9ybUdyb3VwPzogRm9ybUdyb3VwLCBmaWVsZD86IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWwpOiB2b2lkO1xuICBhbGxvd05ld1ZhbHVlPzogYm9vbGVhbjtcbiAgc2hvd0Ryb3Bkb3duPzogYm9vbGVhbjtcbiAgbWluQ2hhclRvU3RhcnRTZWFyY2g/OiBudW1iZXI7XG4gIGZvcmNlU2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgLy8gICBvcHRpb25WYWx1ZT86IHN0cmluZztcbiAgLy8gICBvcHRpb25MYWJlbD86IHN0cmluZztcbiAgLy8gICBhcHBlbmRUbz86IHN0cmluZztcbiAgLy8gICBzaG93Q2xlYXI/OiBib29sZWFuO1xuICAvLyAgIGFwaUJhc2VVcmw/OiBzdHJpbmc7XG4gIC8vIGVudGl0eT86IHN0cmluZztcbiAgLy8gbW9kdWxlPzogc3RyaW5nO1xuICAvLyB2ZXJzaW9uPzogc3RyaW5nO1xuICAvLyBxdWVyeT86IGFueTtcbiAgLy8gb25PcHRpb25TZWxlY3RlZD8oZXZlbnQ6IGFueSk6IHZvaWQ7XG4gIGRlbGF5PzogbnVtYmVyO1xuICBzdHlsZT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8vIHBhbmVsU3R5bGU/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ307XG4gIGlucHV0U3R5bGU/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwYW5lbFN0eWxlQ2xhc3M/OiBzdHJpbmc7XG4gIGlucHV0U3R5bGVDbGFzcz86IHN0cmluZztcblxuICAvLyBwYXNzd29yZFxuICBwcm9tcHRMYWJlbD86IHN0cmluZztcbiAgd2Vha0xhYmVsPzogc3RyaW5nO1xuICBtZWRpdW1MYWJlbD86IHN0cmluZztcbiAgc3Ryb25nTGFiZWw/OiBzdHJpbmc7XG4gIGZlZWRiYWNrPzogYm9vbGVhbjtcbiAgdG9nZ2xlTWFzaz86IGJvb2xlYW47XG5cbiAgLy8gaW5wdXQtbWFza1xuICBtYXNrPzogc3RyaW5nO1xuICBzbG90Q2hhcj86IHN0cmluZztcbiAgYXV0b0NsZWFyPzogYm9vbGVhbjtcbiAgdW5tYXNrPzogYm9vbGVhbjtcblxuICAvLyByYXRpbmdcbiAgc3RhcnM/OiBudW1iZXI7XG4gIGNhbmNlbD86IGJvb2xlYW47XG4gIG9uSWNvbj86IHN0cmluZztcbiAgb2ZmSWNvbj86IHN0cmluZztcbiAgY2FuY2VsSWNvbj86IHN0cmluZztcblxuICAvLyBjaGlwc1xuICBhZGRPblRhYj86IGJvb2xlYW47XG4gIGFkZE9uQmx1cj86IGJvb2xlYW47XG4gIHNlcGFyYXRvcj86IHN0cmluZztcbiAgYWxsb3dEdXBsaWNhdGU/OiBib29sZWFuO1xuXG59XG4iXX0=