@sumaris-net/ngx-components 2.8.3-beta9 → 2.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/doc/changelog.md +7 -0
  2. package/esm2022/src/app/admin/users/users.mjs +3 -3
  3. package/esm2022/src/app/core/account/account.page.mjs +3 -3
  4. package/esm2022/src/app/core/account/new-token.modal.mjs +1 -1
  5. package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +12 -14
  6. package/esm2022/src/app/core/form/entity/editor.class.mjs +4 -2
  7. package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +2 -1
  8. package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +3 -2
  9. package/esm2022/src/app/core/form/form-container.class.mjs +5 -2
  10. package/esm2022/src/app/core/form/form.utils.mjs +10 -1
  11. package/esm2022/src/app/core/services/model/referential.model.mjs +4 -1
  12. package/esm2022/src/app/core/settings/settings.page.mjs +2 -2
  13. package/esm2022/src/app/core/table/async-table.class.mjs +1 -1
  14. package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +10 -7
  15. package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +10 -7
  16. package/esm2022/src/app/core/table/table.class.mjs +1 -1
  17. package/esm2022/src/app/core/table/testing/table.testing.mjs +1 -1
  18. package/esm2022/src/app/core/table/testing/table2.testing.mjs +1 -1
  19. package/esm2022/src/app/shared/dates.mjs +11 -2
  20. package/esm2022/src/app/shared/form/field.component.mjs +1 -1
  21. package/esm2022/src/app/shared/functions.mjs +21 -1
  22. package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +1 -1
  23. package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +3 -3
  24. package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +3 -3
  25. package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +2 -2
  26. package/esm2022/src/app/shared/material/datetime/material.date.mjs +33 -9
  27. package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +33 -9
  28. package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +3 -3
  29. package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +3 -3
  30. package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +6 -5
  31. package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +8 -5
  32. package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +4 -4
  33. package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +5 -2
  34. package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +16 -1
  35. package/esm2022/src/app/shared/pipes/pipes.module.mjs +5 -2
  36. package/fesm2022/sumaris-net.ngx-components.mjs +257 -139
  37. package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
  38. package/package.json +1 -1
  39. package/src/app/core/account/account.page.d.ts +2 -2
  40. package/src/app/core/form/buttons/form-buttons-bar.component.d.ts +2 -3
  41. package/src/app/core/form/entity/editor.class.d.ts +2 -3
  42. package/src/app/core/form/form-container.class.d.ts +3 -0
  43. package/src/app/core/form/form.utils.d.ts +10 -0
  44. package/src/app/core/services/model/referential.model.d.ts +1 -0
  45. package/src/app/core/settings/settings.page.d.ts +1 -2
  46. package/src/app/core/table/async-table.class.d.ts +2 -2
  47. package/src/app/core/table/entities-async-table-datasource.class.d.ts +1 -0
  48. package/src/app/core/table/entities-table-datasource.class.d.ts +1 -0
  49. package/src/app/core/table/table.class.d.ts +2 -2
  50. package/src/app/shared/dates.d.ts +4 -3
  51. package/src/app/shared/functions.d.ts +2 -0
  52. package/src/app/shared/guard/component-dirty.guard.d.ts +1 -6
  53. package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -1
  54. package/src/app/shared/material/datetime/material.date.d.ts +12 -5
  55. package/src/app/shared/material/datetime/material.dateshort.d.ts +12 -5
  56. package/src/app/shared/material/datetime/material.datetime.d.ts +1 -1
  57. package/src/app/shared/material/latlong/material.latlong.d.ts +1 -1
  58. package/src/app/shared/pipes/arrays.pipe.d.ts +5 -0
  59. package/src/app/shared/pipes/pipes.module.d.ts +1 -1
  60. package/src/assets/manifest.json +1 -1
  61. package/src/theme/_ngx-components.forms.scss +2 -0
  62. package/src/theme/_ngx-components.tabs.scss +2 -0
@@ -383,13 +383,13 @@ export class MatLatLongField {
383
383
  this.cd.markForCheck();
384
384
  }
385
385
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MatLatLongField, deps: [{ token: i1.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i1.FormGroupDirective, optional: true }, { token: MAT_FORM_FIELD_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Component });
386
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: MatLatLongField, selector: "mat-latlong-field", inputs: { formControl: "formControl", formControlName: "formControlName", type: "type", pattern: ["latLongPattern", "pattern"], required: "required", floatLabel: "floatLabel", placeholder: "placeholder", tabindex: "tabindex", defaultSign: "defaultSign", maxDecimals: "maxDecimals", placeholderChar: "placeholderChar", autofocus: "autofocus", appearance: "appearance", readonly: "readonly", subscriptSizing: "subscriptSizing" }, outputs: { onBlur: "onBlur", onFocus: "onFocus" }, providers: [
386
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.4", type: MatLatLongField, selector: "mat-latlong-field", inputs: { formControl: "formControl", formControlName: "formControlName", type: "type", pattern: ["latLongPattern", "pattern"], required: "required", floatLabel: "floatLabel", placeholder: "placeholder", tabindex: "tabindex", defaultSign: "defaultSign", maxDecimals: "maxDecimals", placeholderChar: "placeholderChar", autofocus: "autofocus", appearance: "appearance", readonly: "readonly", subscriptSizing: "subscriptSizing" }, outputs: { onBlur: "onBlur", onFocus: "onFocus" }, providers: [
387
387
  {
388
388
  provide: NG_VALUE_ACCESSOR,
389
389
  multi: true,
390
390
  useExisting: forwardRef(() => MatLatLongField),
391
391
  },
392
- ], queries: [{ propertyName: "matError", first: true, predicate: MatError, descendants: true }], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], ngImport: i0, template: "<!-- readonly -->\n<mat-form-field\n *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-form-field-disabled\"\n>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <mat-label *ngIf=\"floatLabel !== 'never' && !!placeholder\">{{ placeholder }}</mat-label>\n\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ _format(formControl.value) }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <ion-grid class=\"ion-no-padding {{appearance}}\">\n <ion-row class=\"ion-no-padding no-wrap\">\n <ion-col class=\"text ion-no-padding\">\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && (signFormControl.invalid || formControl.invalid)\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <mat-label *ngIf=\"floatLabel !== 'never' && !!placeholder\">{{ placeholder }}</mat-label>\n\n <input\n matInput\n #inputElement\n [maskito]=\"inputPlaceholder | translate | maskitoPlaceholder: mask : !showSignControl && defaultSign\"\n type=\"text\"\n autocomplete=\"off\"\n [placeholder]=\"inputPlaceholder | translate\"\n (blur)=\"_onBlur($event)\"\n [formControl]=\"textFormControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n\n <div matSuffix *ngIf=\"!showSignControl\">\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ion-col>\n\n <!-- sign -->\n <ion-col class=\"sign ion-no-padding\" [ngSwitch]=\"type\" *ngIf=\"showSignControl\">\n <!-- sign on latitude -->\n <mat-form-field\n *ngSwitchCase=\"'latitude'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && signFormControl.invalid\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\" translate>\n COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER\n </mat-label>\n\n <mat-select [formControl]=\"signFormControl\" [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\">\n <mat-option [value]=\"1\">{{ 'COMMON.LAT_LONG.LAT_SIGN_N' | translate }}</mat-option>\n <mat-option [value]=\"-1\">{{ 'COMMON.LAT_LONG.LAT_SIGN_S' | translate }}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- sign on longitude -->\n <mat-form-field\n *ngSwitchCase=\"'longitude'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && signFormControl.invalid\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\" translate>\n COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER\n </mat-label>\n\n <mat-select [formControl]=\"signFormControl\" [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\">\n <mat-option [value]=\"1\" translate>{{ 'COMMON.LAT_LONG.LONG_SIGN_E' | translate }}</mat-option>\n <mat-option [value]=\"-1\" translate>{{ 'COMMON.LAT_LONG.LONG_SIGN_W' | translate }}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Do the same as MatFromField since angular 15 (see component source)-->\n <div\n class=\"mat-mdc-form-field-subscript-wrapper\"\n [class.mat-mdc-form-field-bottom-align]=\"subscriptSizing === 'fixed'\"\n [class.mat-mdc-form-field-subscript-dynamic-size]=\"subscriptSizing === 'dynamic'\">\n\n <ng-container *ngIf=\"formControl.touched && formControl.invalid; else hints\">\n <!-- errors -->\n <div class=\"mat-mdc-form-field-error-wrapper\">\n <mat-error *ngIf=\"formControl.errors | mapKeys | arrayFirst; let errorKey; else parentError\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'latitude'\" translate>ERROR.FIELD_NOT_VALID_LATITUDE</span>\n <span *ngSwitchCase=\"'longitude'\" translate>ERROR.FIELD_NOT_VALID_LONGITUDE</span>\n <span *ngSwitchCase=\"'min'\">\n {{ 'ERROR.FIELD_MIN_COMPACT' | translate: { min: _format(formControl.errors.min.min) } }}\n </span>\n <span *ngSwitchCase=\"'max'\">\n {{ 'ERROR.FIELD_MAX_COMPACT' | translate: { max: _format(formControl.errors.max.max) } }}\n </span>\n <span *ngSwitchCase=\"'msg'\">\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n </mat-error>\n <ng-template #parentError>\n <ng-content select=\"mat-error\"></ng-content>\n </ng-template>\n </div>\n </ng-container>\n\n <ng-template #hints>\n <!-- hints -->\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <ng-content select=\"mat-hint:not([align='end'])\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n </ng-template>\n </div>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;min-width:140px;position:relative;--ion-grid-column-padding: 0}mat-form-field{width:100%}mat-form-field .datetime-md{padding:0!important}.sign mat-form-field.mat-mdc-form-field-should-float .mat-mdc-form-field-placeholder{max-width:inherit}ion-row.no-wrap{flex-wrap:nowrap}ion-grid ion-col.text{--min-width: 100px;min-width:var(--min-width)}ion-grid ion-col.sign{--min-width: 65px;--max-width: 85px;min-width:var(--min-width);max-width:var(--max-width)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i7.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i10.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i11.ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: i12.MapKeysPipe, name: "mapKeys" }, { kind: "pipe", type: i13.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i14.MaskitoPlaceholderPipe, name: "maskitoPlaceholder" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
392
+ ], queries: [{ propertyName: "matError", first: true, predicate: MatError, descendants: true }], viewQueries: [{ propertyName: "inputElement", first: true, predicate: ["inputElement"], descendants: true }], ngImport: i0, template: "<!-- readonly -->\n<mat-form-field\n *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-form-field-disabled\"\n>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ _format(formControl.value) }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <!-- hints -->\n <mat-hint [class.cdk-visually-hidden]=\"formControl.invalid\">\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <ion-grid class=\"ion-no-padding {{ appearance }}\">\n <ion-row class=\"ion-no-padding no-wrap\">\n <ion-col class=\"text ion-no-padding\">\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && (signFormControl.invalid || formControl.invalid)\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <mat-label *ngIf=\"floatLabel !== 'never' && !!placeholder\">{{ placeholder }}</mat-label>\n\n <input\n matInput\n #inputElement\n [maskito]=\"inputPlaceholder | translate | maskitoPlaceholder: mask : !showSignControl && defaultSign\"\n type=\"text\"\n autocomplete=\"off\"\n [placeholder]=\"inputPlaceholder | translate\"\n (blur)=\"_onBlur($event)\"\n [formControl]=\"textFormControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n\n <div matSuffix *ngIf=\"!showSignControl\">\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ion-col>\n\n <!-- sign -->\n <ion-col class=\"sign ion-no-padding\" [ngSwitch]=\"type\" *ngIf=\"showSignControl\">\n <!-- sign on latitude -->\n <mat-form-field\n *ngSwitchCase=\"'latitude'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && signFormControl.invalid\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\" translate>\n COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER\n </mat-label>\n\n <mat-select [formControl]=\"signFormControl\" [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\">\n <mat-option [value]=\"1\">{{ 'COMMON.LAT_LONG.LAT_SIGN_N' | translate }}</mat-option>\n <mat-option [value]=\"-1\">{{ 'COMMON.LAT_LONG.LAT_SIGN_S' | translate }}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- sign on longitude -->\n <mat-form-field\n *ngSwitchCase=\"'longitude'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && signFormControl.invalid\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\" translate>\n COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER\n </mat-label>\n\n <mat-select [formControl]=\"signFormControl\" [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\">\n <mat-option [value]=\"1\" translate>{{ 'COMMON.LAT_LONG.LONG_SIGN_E' | translate }}</mat-option>\n <mat-option [value]=\"-1\" translate>{{ 'COMMON.LAT_LONG.LONG_SIGN_W' | translate }}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Do the same as MatFromField since angular 15 (see component source)-->\n <div\n class=\"mat-mdc-form-field-subscript-wrapper\"\n [class.mat-mdc-form-field-bottom-align]=\"subscriptSizing === 'fixed'\"\n [class.mat-mdc-form-field-subscript-dynamic-size]=\"subscriptSizing === 'dynamic'\"\n >\n @if (formControl.touched && formControl.invalid) {\n <!-- errors -->\n <div class=\"mat-mdc-form-field-error-wrapper\">\n @if (formControl.errors | mapKeys | arrayFirst; as errorKey) {\n @switch (errorKey) {\n @case ('required') {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n @case ('latitude') {\n <mat-error translate>ERROR.FIELD_NOT_VALID_LATITUDE</mat-error>\n }\n @case ('longitude') {\n <mat-error translate>ERROR.FIELD_NOT_VALID_LONGITUDE</mat-error>\n }\n @case ('min') {\n <mat-error>\n {{ 'ERROR.FIELD_MIN_COMPACT' | translate: { min: _format(formControl.errors.min.min) } }}\n </mat-error>\n }\n @case ('max') {\n <mat-error>\n {{ 'ERROR.FIELD_MAX_COMPACT' | translate: { max: _format(formControl.errors.max.max) } }}\n </mat-error>\n }\n @case ('msg') {\n <mat-error>\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </mat-error>\n }\n @default {\n <ng-container *ngTemplateOutlet=\"matErrorTemplate\"></ng-container>\n }\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"matErrorTemplate\"></ng-container>\n }\n </div>\n } @else {\n <!-- hints -->\n <mat-hint>\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n }\n </div>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #matErrorTemplate>\n <ng-content select=\"mat-error,[matError]\"></ng-content>\n</ng-template>\n\n<ng-template #matHintTemplate>\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <ng-content select=\"mat-hint:not([align='end']),[matHint]\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;min-width:140px;position:relative;--ion-grid-column-padding: 0}mat-form-field{width:100%}mat-form-field .datetime-md{padding:0!important}.sign mat-form-field.mat-mdc-form-field-should-float .mat-mdc-form-field-placeholder{max-width:inherit}ion-row.no-wrap{flex-wrap:nowrap}ion-grid ion-col.text{--min-width: 100px;min-width:var(--min-width)}ion-grid ion-col.sign{--min-width: 65px;--max-width: 85px;min-width:var(--min-width);max-width:var(--max-width)}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.AutofocusDirective, selector: "[autofocus], input[appAutofocus]", inputs: ["appAutofocus", "autofocusDelay"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i7.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i10.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i11.ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: i12.MapKeysPipe, name: "mapKeys" }, { kind: "pipe", type: i13.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i14.MaskitoPlaceholderPipe, name: "maskitoPlaceholder" }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
393
393
  }
394
394
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MatLatLongField, decorators: [{
395
395
  type: Component,
@@ -399,7 +399,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
399
399
  multi: true,
400
400
  useExisting: forwardRef(() => MatLatLongField),
401
401
  },
402
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- readonly -->\n<mat-form-field\n *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-form-field-disabled\"\n>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <mat-label *ngIf=\"floatLabel !== 'never' && !!placeholder\">{{ placeholder }}</mat-label>\n\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ _format(formControl.value) }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <ion-grid class=\"ion-no-padding {{appearance}}\">\n <ion-row class=\"ion-no-padding no-wrap\">\n <ion-col class=\"text ion-no-padding\">\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && (signFormControl.invalid || formControl.invalid)\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <mat-label *ngIf=\"floatLabel !== 'never' && !!placeholder\">{{ placeholder }}</mat-label>\n\n <input\n matInput\n #inputElement\n [maskito]=\"inputPlaceholder | translate | maskitoPlaceholder: mask : !showSignControl && defaultSign\"\n type=\"text\"\n autocomplete=\"off\"\n [placeholder]=\"inputPlaceholder | translate\"\n (blur)=\"_onBlur($event)\"\n [formControl]=\"textFormControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n\n <div matSuffix *ngIf=\"!showSignControl\">\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ion-col>\n\n <!-- sign -->\n <ion-col class=\"sign ion-no-padding\" [ngSwitch]=\"type\" *ngIf=\"showSignControl\">\n <!-- sign on latitude -->\n <mat-form-field\n *ngSwitchCase=\"'latitude'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && signFormControl.invalid\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\" translate>\n COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER\n </mat-label>\n\n <mat-select [formControl]=\"signFormControl\" [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\">\n <mat-option [value]=\"1\">{{ 'COMMON.LAT_LONG.LAT_SIGN_N' | translate }}</mat-option>\n <mat-option [value]=\"-1\">{{ 'COMMON.LAT_LONG.LAT_SIGN_S' | translate }}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- sign on longitude -->\n <mat-form-field\n *ngSwitchCase=\"'longitude'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && signFormControl.invalid\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\" translate>\n COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER\n </mat-label>\n\n <mat-select [formControl]=\"signFormControl\" [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\">\n <mat-option [value]=\"1\" translate>{{ 'COMMON.LAT_LONG.LONG_SIGN_E' | translate }}</mat-option>\n <mat-option [value]=\"-1\" translate>{{ 'COMMON.LAT_LONG.LONG_SIGN_W' | translate }}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Do the same as MatFromField since angular 15 (see component source)-->\n <div\n class=\"mat-mdc-form-field-subscript-wrapper\"\n [class.mat-mdc-form-field-bottom-align]=\"subscriptSizing === 'fixed'\"\n [class.mat-mdc-form-field-subscript-dynamic-size]=\"subscriptSizing === 'dynamic'\">\n\n <ng-container *ngIf=\"formControl.touched && formControl.invalid; else hints\">\n <!-- errors -->\n <div class=\"mat-mdc-form-field-error-wrapper\">\n <mat-error *ngIf=\"formControl.errors | mapKeys | arrayFirst; let errorKey; else parentError\" [ngSwitch]=\"errorKey\">\n <span *ngSwitchCase=\"'required'\" translate>ERROR.FIELD_REQUIRED</span>\n <span *ngSwitchCase=\"'latitude'\" translate>ERROR.FIELD_NOT_VALID_LATITUDE</span>\n <span *ngSwitchCase=\"'longitude'\" translate>ERROR.FIELD_NOT_VALID_LONGITUDE</span>\n <span *ngSwitchCase=\"'min'\">\n {{ 'ERROR.FIELD_MIN_COMPACT' | translate: { min: _format(formControl.errors.min.min) } }}\n </span>\n <span *ngSwitchCase=\"'max'\">\n {{ 'ERROR.FIELD_MAX_COMPACT' | translate: { max: _format(formControl.errors.max.max) } }}\n </span>\n <span *ngSwitchCase=\"'msg'\">\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </span>\n </mat-error>\n <ng-template #parentError>\n <ng-content select=\"mat-error\"></ng-content>\n </ng-template>\n </div>\n </ng-container>\n\n <ng-template #hints>\n <!-- hints -->\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <ng-content select=\"mat-hint:not([align='end'])\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n </ng-template>\n </div>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;min-width:140px;position:relative;--ion-grid-column-padding: 0}mat-form-field{width:100%}mat-form-field .datetime-md{padding:0!important}.sign mat-form-field.mat-mdc-form-field-should-float .mat-mdc-form-field-placeholder{max-width:inherit}ion-row.no-wrap{flex-wrap:nowrap}ion-grid ion-col.text{--min-width: 100px;min-width:var(--min-width)}ion-grid ion-col.sign{--min-width: 65px;--max-width: 85px;min-width:var(--min-width);max-width:var(--max-width)}\n"] }]
402
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- readonly -->\n<mat-form-field\n *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n class=\"mat-form-field-disabled\"\n>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <input matInput hidden type=\"text\" readonly [formControl]=\"formControl\" />\n <ion-text>{{ _format(formControl.value) }}</ion-text>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n <!-- hints -->\n <mat-hint [class.cdk-visually-hidden]=\"formControl.invalid\">\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n</mat-form-field>\n\n<!-- writable -->\n<ng-template #writable>\n <ion-grid class=\"ion-no-padding {{ appearance }}\">\n <ion-row class=\"ion-no-padding no-wrap\">\n <ion-col class=\"text ion-no-padding\">\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && (signFormControl.invalid || formControl.invalid)\"\n >\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n <mat-label *ngIf=\"floatLabel !== 'never' && !!placeholder\">{{ placeholder }}</mat-label>\n\n <input\n matInput\n #inputElement\n [maskito]=\"inputPlaceholder | translate | maskitoPlaceholder: mask : !showSignControl && defaultSign\"\n type=\"text\"\n autocomplete=\"off\"\n [placeholder]=\"inputPlaceholder | translate\"\n (blur)=\"_onBlur($event)\"\n [formControl]=\"textFormControl\"\n [required]=\"required\"\n [tabindex]=\"tabindex\"\n [appAutofocus]=\"autofocus\"\n />\n\n <div matSuffix *ngIf=\"!showSignControl\">\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ion-col>\n\n <!-- sign -->\n <ion-col class=\"sign ion-no-padding\" [ngSwitch]=\"type\" *ngIf=\"showSignControl\">\n <!-- sign on latitude -->\n <mat-form-field\n *ngSwitchCase=\"'latitude'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && signFormControl.invalid\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\" translate>\n COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER\n </mat-label>\n\n <mat-select [formControl]=\"signFormControl\" [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\">\n <mat-option [value]=\"1\">{{ 'COMMON.LAT_LONG.LAT_SIGN_N' | translate }}</mat-option>\n <mat-option [value]=\"-1\">{{ 'COMMON.LAT_LONG.LAT_SIGN_S' | translate }}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- sign on longitude -->\n <mat-form-field\n *ngSwitchCase=\"'longitude'\"\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"'dynamic'\"\n [class.mdc-text-field--invalid]=\"formControl.touched && signFormControl.invalid\"\n >\n <mat-label *ngIf=\"placeholder && floatLabel !== 'never'\" translate>\n COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER\n </mat-label>\n\n <mat-select [formControl]=\"signFormControl\" [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\">\n <mat-option [value]=\"1\" translate>{{ 'COMMON.LAT_LONG.LONG_SIGN_E' | translate }}</mat-option>\n <mat-option [value]=\"-1\" translate>{{ 'COMMON.LAT_LONG.LONG_SIGN_W' | translate }}</mat-option>\n </mat-select>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Do the same as MatFromField since angular 15 (see component source)-->\n <div\n class=\"mat-mdc-form-field-subscript-wrapper\"\n [class.mat-mdc-form-field-bottom-align]=\"subscriptSizing === 'fixed'\"\n [class.mat-mdc-form-field-subscript-dynamic-size]=\"subscriptSizing === 'dynamic'\"\n >\n @if (formControl.touched && formControl.invalid) {\n <!-- errors -->\n <div class=\"mat-mdc-form-field-error-wrapper\">\n @if (formControl.errors | mapKeys | arrayFirst; as errorKey) {\n @switch (errorKey) {\n @case ('required') {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n @case ('latitude') {\n <mat-error translate>ERROR.FIELD_NOT_VALID_LATITUDE</mat-error>\n }\n @case ('longitude') {\n <mat-error translate>ERROR.FIELD_NOT_VALID_LONGITUDE</mat-error>\n }\n @case ('min') {\n <mat-error>\n {{ 'ERROR.FIELD_MIN_COMPACT' | translate: { min: _format(formControl.errors.min.min) } }}\n </mat-error>\n }\n @case ('max') {\n <mat-error>\n {{ 'ERROR.FIELD_MAX_COMPACT' | translate: { max: _format(formControl.errors.max.max) } }}\n </mat-error>\n }\n @case ('msg') {\n <mat-error>\n {{ formControl.errors.msg?.key || formControl.errors.msg | translate: formControl.errors.msg?.params }}\n </mat-error>\n }\n @default {\n <ng-container *ngTemplateOutlet=\"matErrorTemplate\"></ng-container>\n }\n }\n } @else {\n <ng-container *ngTemplateOutlet=\"matErrorTemplate\"></ng-container>\n }\n </div>\n } @else {\n <!-- hints -->\n <mat-hint>\n <ng-container *ngTemplateOutlet=\"matHintTemplate\"></ng-container>\n </mat-hint>\n }\n </div>\n</ng-template>\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n\n<ng-template #matErrorTemplate>\n <ng-content select=\"mat-error,[matError]\"></ng-content>\n</ng-template>\n\n<ng-template #matHintTemplate>\n <div class=\"mat-mdc-form-field-hint-wrapper\">\n <ng-content select=\"mat-hint:not([align='end']),[matHint]\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;min-width:140px;position:relative;--ion-grid-column-padding: 0}mat-form-field{width:100%}mat-form-field .datetime-md{padding:0!important}.sign mat-form-field.mat-mdc-form-field-should-float .mat-mdc-form-field-placeholder{max-width:inherit}ion-row.no-wrap{flex-wrap:nowrap}ion-grid ion-col.text{--min-width: 100px;min-width:var(--min-width)}ion-grid ion-col.sign{--min-width: 65px;--max-width: 85px;min-width:var(--min-width);max-width:var(--max-width)}\n"] }]
403
403
  }], ctorParameters: () => [{ type: i1.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i1.FormGroupDirective, decorators: [{
404
404
  type: Optional
405
405
  }] }, { type: undefined, decorators: [{
@@ -447,4 +447,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
447
447
  type: ContentChild,
448
448
  args: [MatError]
449
449
  }] } });
450
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwubGF0bG9uZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE0QyxpQkFBaUIsRUFBMEMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakosT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUNMLGNBQWMsRUFDZCxlQUFlLEVBQ2YsNkJBQTZCLEVBSTdCLHdCQUF3QixHQUN6QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pILE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xF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LFFBQVEsOEpDakp4QiwwMU1BMkpBOzsyRkQ1RWEsZUFBZTtrQkFiM0IsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7eUJBQy9DO3FCQUNGLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNOzswQkF5RTVDLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsOEJBQThCO3lDQWhEL0IsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDbUIsT0FBTztzQkFBL0IsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ2QsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdGLFVBQVU7c0JBRGIsS0FBSztnQkFRTyxRQUFRO3NCQUFwQixLQUFLO2dCQVVGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBUUksTUFBTTtzQkFBZixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBRW9CLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDRCxRQUFRO3NCQUEvQixZQUFZO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2hhcmVkVmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmltcG9ydCB7XG4gIGZvcm1hdExhdGl0dWRlLFxuICBmb3JtYXRMb25naXR1ZGUsXG4gIExBVF9MT05HX0RFRkFVTFRfTUFYX0RFQ0lNQUxTLFxuICBMYXRMb25nRm9ybWF0Rm4sXG4gIExhdExvbmdGb3JtYXRPcHRpb25zLFxuICBMYXRMb25nUGF0dGVybixcbiAgcGFyc2VMYXRpdHVkZU9yTG9uZ2l0dWRlLFxufSBmcm9tICcuL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgRU1QVFlfUExBQ0VIT0xERVJfQ0hBUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOaWxPck5hTiwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBnZXRDYXJldFBvc2l0aW9uLCBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yLCBzZWxlY3RJbnB1dENvbnRlbnQsIHNlbGVjdElucHV0UmFuZ2UgfSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgREVGQVVMVF9NQVhfREVDSU1BTFMgfSBmcm9tICcuLi9kdXJhdGlvbi9kdXJhdGlvbi51dGlscyc7XG5pbXBvcnQge1xuICBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMsXG4gIE1hdEVycm9yLFxuICBNYXRGb3JtRmllbGRBcHBlYXJhbmNlLFxuICBNYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucyxcbiAgU3Vic2NyaXB0U2l6aW5nLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IEFwcEZsb2F0TGFiZWxUeXBlIH0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNYXNraXRvTWFzayB9IGZyb20gJ0BtYXNraXRvL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9BUFBFQVJBTkNFLCBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX1NVQlNDUklQVF9TSVpJTkcgfSBmcm9tICcuLi9tYXRlcmlhbC5jb25maWcnO1xuXG5jb25zdCBEID0gL1xcZHxcXHVGRUZGLztcbmNvbnN0IE0gPSAvXFxkfFxcdUZFRkYvO1xuY29uc3QgUyA9IC9cXGR8XFx1RkVGRi87XG5jb25zdCBNQVNLUzoge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgW3BhdHRlcm46IHN0cmluZ106IEFycmF5PHN0cmluZyB8IFJlZ0V4cD4gfCBSZWdFeHA7XG4gIH07XG59ID0ge1xuICBsYXRpdHVkZToge1xuICAgIERETU1TUzogW0QsIEQsICfCsCcsICcgJywgTSwgTSwgXCInXCIsICcgJywgUywgUywgJy4nLCBTLCBTLCAnXCInXSxcbiAgICBERE1NOiBbRCwgRCwgJ8KwJywgJyAnLCBNLCBNLCAnLicsIE0sIE0sIE0sIFwiJ1wiXSxcbiAgICBERDogWy9bK118LS8sICcgJywgRCwgRCwgJy4nLCBELCBELCBELCBELCBELCBELCBELCAnwrAnXSxcbiAgfSxcbiAgbG9uZ2l0dWRlOiB7XG4gICAgRERNTVNTOiBbRCwgRCwgRCwgJ8KwJywgJyAnLCBNLCBNLCBcIidcIiwgJyAnLCBTLCBTLCAnLicsIFMsIFMsICdcIiddLFxuICAgIERETU06IFtELCBELCBELCAnwrAnLCAnICcsIE0sIE0sICcuJywgTSwgTSwgTSwgXCInXCJdLFxuICAgIEREOiBbL1srLV0vLCBELCBELCBELCAnLicsIEQsIEQsIEQsIEQsIEQsIEQsIEQsICfCsCddLFxuICB9LFxufTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtbGF0bG9uZy1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5sYXRsb25nLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC5sYXRsb25nLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdExhdExvbmdGaWVsZCksXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdExhdExvbmdGaWVsZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfZm9ybWF0T3B0aW9uczogTGF0TG9uZ0Zvcm1hdE9wdGlvbnM7XG4gIHByaXZhdGUgX2Rpc2FibGluZyA9IGZhbHNlO1xuICBwcml2YXRlIF93cml0aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2FwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRTdWJzY3JpcHRTaXppbmc6IFN1YnNjcmlwdFNpemluZztcblxuICBfcmVhZG9ubHkgPSBmYWxzZTtcbiAgX2Zvcm1hdEZuOiBMYXRMb25nRm9ybWF0Rm47XG4gIHRleHRGb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICBzaWduRm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgbWFzazogTWFza2l0b01hc2s7XG4gIGlucHV0UGxhY2Vob2xkZXI6IHN0cmluZztcbiAgc2hvd1NpZ25Db250cm9sOiBib29sZWFuO1xuXG4gIGdldCBkaXNhYmxlZCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIH1cblxuICBASW5wdXQoKSBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgdHlwZTogJ2xhdGl0dWRlJyB8ICdsb25naXR1ZGUnO1xuICBASW5wdXQoJ2xhdExvbmdQYXR0ZXJuJykgcGF0dGVybjogTGF0TG9uZ1BhdHRlcm47XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEFwcEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSB0YWJpbmRleDogbnVtYmVyO1xuICBASW5wdXQoKSBkZWZhdWx0U2lnbjogJy0nIHwgJysnIHwgJysgJyB8ICctICc7XG4gIEBJbnB1dCgpIG1heERlY2ltYWxzOiBudW1iZXIgPSBMQVRfTE9OR19ERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXJDaGFyOiBzdHJpbmcgPSBFTVBUWV9QTEFDRUhPTERFUl9DSEFSO1xuICBASW5wdXQoKSBhdXRvZm9jdXMgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgYXBwZWFyYW5jZSh2YWx1ZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSkge1xuICAgIHRoaXMuX2FwcGVhcmFuY2UgPSB2YWx1ZTtcbiAgfVxuICBnZXQgYXBwZWFyYW5jZSgpOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZWFyYW5jZSB8fCB0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgc3Vic2NyaXB0U2l6aW5nKHZhbHVlOiBTdWJzY3JpcHRTaXppbmcpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRTaXppbmcgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc3Vic2NyaXB0U2l6aW5nKCk6IFN1YnNjcmlwdFNpemluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnNjcmlwdFNpemluZyB8fCB0aGlzLl9kZWZhdWx0U3Vic2NyaXB0U2l6aW5nO1xuICB9XG5cbiAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JykgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuICBAQ29udGVudENoaWxkKE1hdEVycm9yKSBtYXRFcnJvcjogTWF0RXJyb3I7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwRGlyOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgQEluamVjdChNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMpIGRlZmF1bHRPcHRpb25zPzogTWF0Rm9ybUZpZWxkRGVmYXVsdE9wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5fZGVmYXVsdFN1YnNjcmlwdFNpemluZyA9IGRlZmF1bHRPcHRpb25zPy5zdWJzY3JpcHRTaXppbmcgfHwgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9TVUJTQ1JJUFRfU0laSU5HO1xuICAgIHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlID0gZGVmYXVsdE9wdGlvbnM/LmFwcGVhcmFuY2UgfHwgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9BUFBFQVJBTkNFO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy50eXBlID0gdGhpcy50eXBlIHx8ICdsYXRpdHVkZSc7XG4gICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuIHx8ICdERE1NJztcbiAgICB0aGlzLm1hc2sgPSBNQVNLU1t0aGlzLnR5cGVdICYmIE1BU0tTW3RoaXMudHlwZV1bdGhpcy5wYXR0ZXJuXTtcbiAgICBpZiAoIXRoaXMubWFzaykge1xuICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgYXR0cmlidXRlIHZhbHVlLiBFeHBlY3RlZDogdHlwZTogJ2xhdGl0dWRlfGxvbmdpdHVkZScgYW5kIGxhdGxvbmdQYXR0ZXJuOiAnRER8RERNTXxERE1NU1MnXCIpO1xuICAgICAgdGhpcy50eXBlID0gJ2xhdGl0dWRlJztcbiAgICAgIHRoaXMucGF0dGVybiA9ICdERE1NJztcbiAgICAgIHRoaXMubWFzayA9IE1BU0tTW3RoaXMudHlwZV1bdGhpcy5wYXR0ZXJuXTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbWF4IGRlY2ltYWxzIGluIHRoZSBERE1NU1MgZm9ybWF0XG4gICAgaWYgKHRoaXMucGF0dGVybiA9PT0gJ0REJykge1xuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGF0dHJpYnV0ZSAnbWF4RGVjaW1hbHMnIC0gTXVzdCBiZSAnMCcgd2hlbiB1c2luZyB0aGUgJ0RETU1TUycgcGF0dGVybi5gKTtcbiAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSA3O1xuICAgIH0gZWxzZSBpZiAodGhpcy5wYXR0ZXJuID09PSAnRERNTVNTJykge1xuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGF0dHJpYnV0ZSAnbWF4RGVjaW1hbHMnIC0gTXVzdCBiZSAnMCcgd2hlbiB1c2luZyB0aGUgJ0RETU1TUycgcGF0dGVybi5gKTtcbiAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoaXNOaWwodGhpcy5tYXhEZWNpbWFscykpIHtcbiAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSBERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgICB9IGVsc2UgaWYgKHRoaXMubWF4RGVjaW1hbHMgPCAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBhdHRyaWJ1dGUgJ21heERlY2ltYWxzJy4gTXVzdCBhIHBvc2l0aXZlIHZhbHVlLlwiKTtcbiAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSBERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgICB9IGVsc2UgaWYgKHRoaXMubWF4RGVjaW1hbHMgIT09IERFRkFVTFRfTUFYX0RFQ0lNQUxTKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBJbnZhbGlkIGF0dHJpYnV0ZSAnbWF4RGVjaW1hbHMnIC0gRXhwZWN0ZWQgdmFsdWU6ICR7REVGQVVMVF9NQVhfREVDSU1BTFN9IGJ1dCBnZXQ6ICR7dGhpcy5tYXhEZWNpbWFsc30uIE90aGVyIHZhbHVlIG5vdCBpbXBsZW1lbnRlZC5gXG4gICAgICApO1xuICAgICAgdGhpcy5tYXhEZWNpbWFscyA9IERFRkFVTFRfTUFYX0RFQ0lNQUxTO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1NpZ25Db250cm9sID0gdGhpcy5wYXR0ZXJuICE9PSAnREQnO1xuXG4gICAgdGhpcy5fZm9ybWF0Rm4gPSB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyBmb3JtYXRMYXRpdHVkZSA6IGZvcm1hdExvbmdpdHVkZTtcbiAgICB0aGlzLl9mb3JtYXRPcHRpb25zID0geyBwYXR0ZXJuOiB0aGlzLnBhdHRlcm4sIG1heERlY2ltYWxzOiB0aGlzLm1heERlY2ltYWxzLCBoaWRlU2lnbjogdGhpcy5zaG93U2lnbkNvbnRyb2wgfTtcblxuICAgIHRoaXMuaW5wdXRQbGFjZWhvbGRlciA9ICdDT01NT04uTEFUX0xPTkcuJyArICgodGhpcy50eXBlID09PSAnbG9uZ2l0dWRlJyAmJiAnRCcpIHx8ICcnKSArIHRoaXMucGF0dGVybiArICdfUExBQ0VIT0xERVInO1xuXG4gICAgdGhpcy50ZXh0Rm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wodGhpcy5yZXF1aXJlZCA/IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtudWxsXSk7XG5cbiAgICB0aGlzLnNpZ25Gb3JtQ29udHJvbCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh0aGlzLnJlcXVpcmVkID8gW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdIDogW251bGxdKTtcblxuICAgIHRoaXMuZm9ybUNvbnRyb2wgPVxuICAgICAgdGhpcy5mb3JtQ29udHJvbCB8fCAodGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgKHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2wpKTtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgbWFuZGF0b3J5IGF0dHJpYnV0ZSAnZm9ybUNvbnRyb2wnIG9yICdmb3JtQ29udHJvbE5hbWUnIGluIDxtYXQtbGF0bG9uZy1maWVsZD4uXCIpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdWYWxpZGF0b3JzID0gdGhpcy5mb3JtQ29udHJvbC52YWxpZGF0b3I7XG4gICAgaWYgKGV4aXN0aW5nVmFsaWRhdG9ycykge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtleGlzdGluZ1ZhbGlkYXRvcnMsIHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IFNoYXJlZFZhbGlkYXRvcnMubGF0aXR1ZGUgOiBTaGFyZWRWYWxpZGF0b3JzLmxvbmdpdHVkZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8gU2hhcmVkVmFsaWRhdG9ycy5sYXRpdHVkZSA6IFNoYXJlZFZhbGlkYXRvcnMubG9uZ2l0dWRlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKG1lcmdlKHRoaXMudGV4dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcywgdGhpcy5zaWduRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzKS5zdWJzY3JpYmUoKF8pID0+IHRoaXMub25Gb3JtQ2hhbmdlKCkpKTtcblxuICAgIC8vIExpc3RlbiBzdGF0dXMgY2hhbmdlcyAod2hlbiBkb25lIG91dHNpZGUgdGhlIGNvbXBvbmVudCAgLSBlLmcuIHdoZW4gc2V0RXJyb3JzKCkgaXMgY2FsbGluZyBvbiB0aGUgZm9ybUNvbnRyb2wpXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLl93cml0aW5nICYmICF0aGlzLl9kaXNhYmxpbmcpIC8vIFNraXBcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB0aGlzLm1hcmtGb3JDaGVjaygpKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuO1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgPyBwYXJzZUZsb2F0KG9iai5yZXBsYWNlKC8sL2csICcuJykpIDogb2JqO1xuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHN0clZhbHVlID0gdGhpcy5fZm9ybWF0Rm4odmFsdWUsIHsgLi4udGhpcy5fZm9ybWF0T3B0aW9ucywgcGxhY2Vob2xkZXJDaGFyOiB0aGlzLnBsYWNlaG9sZGVyQ2hhciB9KTtcbiAgICBjb25zdCBzaWduID0gaXNOb3ROaWwodmFsdWUpXG4gICAgICA/IHZhbHVlIDwgMFxuICAgICAgICA/IC0xXG4gICAgICAgIDogMVxuICAgICAgOiAvLyBVc2UgZGVmYXVsdCBzaWduLCBpZiBhbnlcbiAgICAgICAgdGhpcy5kZWZhdWx0U2lnblxuICAgICAgICA/IHRoaXMuZGVmYXVsdFNpZ24gPT09ICctJ1xuICAgICAgICAgID8gLTFcbiAgICAgICAgICA6IDFcbiAgICAgICAgOiBudWxsO1xuXG4gICAgLy8gREVCVUdcbiAgICAvLyBjb25zb2xlLmRlYnVnKFwic3RyVmFsdWU6IFwiICsgc3RyVmFsdWUpXG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcInNpZ246IFwiICsgc2lnbilcblxuICAgIHRoaXMudGV4dEZvcm1Db250cm9sLnBhdGNoVmFsdWUoc3RyVmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLnNpZ25Gb3JtQ29udHJvbC5wYXRjaFZhbHVlKHNpZ24sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5fZGlzYWJsaW5nID0gdHJ1ZTtcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy50ZXh0Rm9ybUNvbnRyb2wuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5zaWduRm9ybUNvbnRyb2wuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRleHRGb3JtQ29udHJvbC5lbmFibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuc2lnbkZvcm1Db250cm9sLmVuYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgICB0aGlzLl9kaXNhYmxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB2YWx1ZSB0byBkaXNwbGF5IGFzIHN0cmluZyAobm8gcGxhY2Vob2xkZXIgY2hhciwgYW5kIHNob3cgc2lnbilcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBfZm9ybWF0KHZhbHVlOiBudW1iZXIsIG9wdHM/OiBQYXJ0aWFsPExhdExvbmdGb3JtYXRPcHRpb25zPikge1xuICAgIHJldHVybiB0aGlzLl9mb3JtYXRGbih2YWx1ZSwge1xuICAgICAgLi4udGhpcy5fZm9ybWF0T3B0aW9ucyxcbiAgICAgIGhpZGVTaWduOiBmYWxzZSxcbiAgICAgIHBsYWNlaG9sZGVyQ2hhcjogJycsXG4gICAgfSk7XG4gIH1cblxuICBfb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCkge1xuICAgIC8vIEFwcGx5IHRoZSBkZWZhdWx0IHNpZ24sIHdoZW4gcGF0dGVybiBpcyBERCBhbmQgZmllbGQgaXMgZW1wdHlcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgaWYgKGlzTmlsT3JOYU4odmFsdWUpKSB7XG4gICAgICBpZiAodGhpcy5kZWZhdWx0U2lnbikge1xuICAgICAgICAvLyBDb21wdXRlIHRoZSB0ZXh0IHZhbHVlLCB1c2luZyB0aGUgZGVmYXVsdCBzaWduXG4gICAgICAgIGNvbnN0IGRlZmF1bHRTaWduID0gdGhpcy5kZWZhdWx0U2lnbiA9PT0gJy0nID8gLTEgOiAxO1xuXG4gICAgICAgIGlmICh0aGlzLnBhdHRlcm4gPT09ICdERCcpIHtcbiAgICAgICAgICBsZXQgdmFsdWVTdHIgPSB0aGlzLl9mb3JtYXRGbihkZWZhdWx0U2lnbiwgeyAuLi50aGlzLl9mb3JtYXRPcHRpb25zLCBwbGFjZWhvbGRlckNoYXI6IHRoaXMucGxhY2Vob2xkZXJDaGFyIH0pO1xuICAgICAgICAgIC8vIEtlZXAgb25seSB0aGUgc2lnbiAoJysnIG9yICctJykgYW5kIHBsYWNlaG9sZGVyIGNoYXJzLCBidXQgTk9UIHRoZSAnMSdcbiAgICAgICAgICB2YWx1ZVN0ciA9IHZhbHVlU3RyICYmIHZhbHVlU3RyLnJlcGxhY2UoJzEnLCB0aGlzLnBsYWNlaG9sZGVyQ2hhcik7XG5cbiAgICAgICAgICAvLyBXYWl0IGVuZCBvZiBmb2N1cyBhbmltYXRpb24gKGxhYmVsIHNob3VsZCBtb3ZlIHRvIHRvcClcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZVN0cjtcblxuICAgICAgICAgICAgLy8gTW92ZSBjdXJzb3IgYWZ0ZXIgdGhlIHNpZ25cbiAgICAgICAgICAgIGNvbnN0IGNhcmV0SW5kZXggPSB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyAyIDogMTtcbiAgICAgICAgICAgIHNlbGVjdElucHV0UmFuZ2UoZXZlbnQudGFyZ2V0LCBjYXJldEluZGV4KTtcbiAgICAgICAgICB9LCAyNTApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2lnbkZvcm1Db250cm9sLnNldFZhbHVlKGRlZmF1bHRTaWduKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlbGVjdCB0aGUgY29udGVudCAoaWYgdGhlcmUgaXMgYSB2YWx1ZSlcbiAgICBlbHNlIHtcbiAgICAgIHNlbGVjdElucHV0Q29udGVudChldmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZlbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgX29uQmx1cihldmVudDogRm9jdXNFdmVudCkge1xuICAgIGNvbnN0IHRvdWNoZWQgPSB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgaWYgKHRvdWNoZWQgJiYgaXNOaWwodGhpcy5mb3JtQ29udHJvbD8udmFsdWUpKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMub25CbHVyLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgbW92ZUNhcmV0VG9TZXBhcmF0b3IoZXZlbnQ6IGFueSwgZm9yd2FyZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIC8vIE1vdmUgdG8gdGhlIHNwYWNlIHNlcGFyYXRvclxuICAgIHJldHVybiBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yKGV2ZW50LCAnICcsIGZvcndhcmQpO1xuICB9XG5cbiAgb25LZXlwcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIE51bWJlciBlbnRlcmVkIG9yIG9uZSBvZiB0aGUgNCBkaXJlY3Rpb24gdXAsIGRvd24sIGxlZnQgYW5kIHJpZ2h0XG4gICAgaWYgKChldmVudC53aGljaCA+PSA0OCAmJiBldmVudC53aGljaCA8PSA1NykgfHwgKGV2ZW50LndoaWNoID49IDM3ICYmIGV2ZW50LndoaWNoIDw9IDQwKSkge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcbiAgICAgIC8vIE9LXG4gICAgfVxuICAgIC8vIERlY2ltYWwgc2VwYXJhdG9yIGVudGVyZWRcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICcuJyB8fCBldmVudC5rZXkgPT09ICcsJykge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ2lucHV0IGRlY2ltYWwgc2VwYXJhdG9yIGVudGVyZWQgOicgKyBldmVudC5jb2RlKTtcblxuICAgICAgLy8gTW92ZSBjYXJldCBhZnRlciBwb2ludFxuICAgICAgbW92ZUlucHV0Q2FyZXRUb1NlcGFyYXRvcihldmVudCwgJy4nKTtcblxuICAgICAgLy8gT0tcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29tbWFuZCBlbnRlcmVkIChkZWxldGUsIGJhY2tzcGFjZSBvciBvbmUgb2YgdGhlIDQgZGlyZWN0aW9uIHVwLCBkb3duLCBsZWZ0IGFuZCByaWdodClcbiAgICAgIGlmICgoZXZlbnQua2V5Q29kZSA+PSAzNyAmJiBldmVudC5rZXlDb2RlIDw9IDQwKSB8fCBldmVudC5rZXlDb2RlID09PSA0NiB8fCBldmVudC53aGljaCA9PT0gOCB8fCBldmVudC5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZygnaW5wdXQgY29tbWFuZCBlbnRlcmVkOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSk7XG4gICAgICAgIC8vIE9LXG4gICAgICB9XG4gICAgICAvLyBTaWduIGVudGVyZWQgKCcrJyBvciAnLScpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSA0MyB8fCBldmVudC5rZXlDb2RlID09PSA0NSkge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKCdpbnB1dCBzaWduIGVudGVyZWQ6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcbiAgICAgICAgY29uc3QgY2FyZXRQb3NpdGlvbiA9IGdldENhcmV0UG9zaXRpb24oZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKHRoaXMucGF0dGVybiA9PT0gJ0REJyAmJiBjYXJldFBvc2l0aW9uID4gMCkge1xuICAgICAgICAgIGNvbnN0IHNpZ24gPSBldmVudC5rZXk7XG4gICAgICAgICAgLy8gV2FpdCBrZXkgYXBwbHlcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZS5zdGFydHNXaXRoKHNpZ24pKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHNpZ24gKyAodmFsdWUubGVuZ3RoID4gMSA/IHZhbHVlLnN1YnN0cigxKSA6ICcnKTtcblxuICAgICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAgIC8vIGNvbnNvbGUuZGVidWcoXCJzaWduIGVudGVyZWQuIFVwZGF0aW5nIGlucHV0IHZhbHVlIHRvOlwiLCBuZXdWYWx1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHNlbGVjdElucHV0UmFuZ2UodGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudCwgY2FyZXRQb3NpdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPS1xuICAgICAgfVxuICAgICAgLy8gRGlyZWN0aW9uIGNoYXIgKGNhcGl0YWxpemVkKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnTicgfHwgZXZlbnQua2V5ID09PSAnUycgfHwgZXZlbnQua2V5ID09PSAnRScgfHwgZXZlbnQua2V5ID09PSAnVycpIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy8gY29uc29sZS5kZWJ1ZygnaW5wdXQgZGlyZWN0aW9uIGVudGVyZWQ6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcbiAgICAgICAgLy8gT0tcbiAgICAgIH1cbiAgICAgIC8vIERpcmVjdGlvbiBjaGFyXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICduJyB8fCBldmVudC5rZXkgPT09ICdzJyB8fCBldmVudC5rZXkgPT09ICdlJyB8fCBldmVudC5rZXkgPT09ICd3Jykge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKCdpbnB1dCBkaXJlY3Rpb24gZW50ZXJlZDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuXG4gICAgICAgIC8vIENhcGl0YWxpemUgKHdpdGggYSBkZWxheSwgdG8gYmUgc3VyZSB0aGUga2V5IGhhcyBiZWVuIGFwcGxpZWQgdG8gaW5wdXQgdGV4dClcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfSwgMTApO1xuXG4gICAgICAgIC8vIE9LXG4gICAgICB9XG5cbiAgICAgIC8vIEFueSBvdGhlciBrZXlib2FyZCBldmVudHNcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG5vdCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlICsgJyAnICsgZXZlbnQuY29kZSApO1xuXG4gICAgICAgIC8vIEtPOiBjYW5jZWwgdGhlIGV2ZW50XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkZvcm1DaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcCBpZiBjYWxsIGJ5IHNlbGZcbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0clZhbHVlID0gdGhpcy50ZXh0Rm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAodGhpcy50ZXh0Rm9ybUNvbnRyb2wuaW52YWxpZCB8fCB0aGlzLnNpZ25Gb3JtQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoKTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0RXJyb3JzKHtcbiAgICAgICAgLi4udGhpcy5mb3JtQ29udHJvbC5lcnJvcnMsXG4gICAgICAgIC4uLnRoaXMudGV4dEZvcm1Db250cm9sLmVycm9ycyxcbiAgICAgICAgLi4udGhpcy5zaWduRm9ybUNvbnRyb2wuZXJyb3JzLFxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy50ZXh0Rm9ybUNvbnRyb2wuZGlydHkgfHwgdGhpcy5zaWduRm9ybUNvbnRyb2wuZGlydHkpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gaXNOb3ROaWxPckJsYW5rKHN0clZhbHVlKVxuICAgICAgPyBwYXJzZUxhdGl0dWRlT3JMb25naXR1ZGUoc3RyVmFsdWUsIHRoaXMucGF0dGVybiwgNyAvKj1wcmVjaXNpb24gb2YgdGhlIGNvbnZlcnRlZCBkb3VibGUgdmFsdWUgKi8sIHRoaXMucGxhY2Vob2xkZXJDaGFyKVxuICAgICAgOiBudWxsO1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ3BhcnNlZFZhbHVlPScsIHBhcnNlZFZhbHVlKTtcblxuICAgIGlmIChpc05hTihwYXJzZWRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUGVuZGluZygpO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRFcnJvcnModGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8geyBsYXRpdHVkZTogdHJ1ZSB9IDogeyBsb25naXR1ZGU6IHRydWUgfSk7XG4gICAgICAvLyBUT0RPIERpcnR5IGZpeCA6IHRyZWF0IHRoaXMgZXJyb3Igd2l0aCBhIHZhbGlkYXRvclxuICAgICAgdGhpcy50ZXh0Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IHsgbGF0aXR1ZGU6IHRydWUgfSA6IHsgbG9uZ2l0dWRlOiB0cnVlIH0pO1xuICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaWduID0gdGhpcy5wYXR0ZXJuID09PSAnREQnID8gMSAvKmlnbm9yZSBzaWduKi8gOiB0aGlzLnNpZ25Gb3JtQ29udHJvbC52YWx1ZSB8fCAxO1xuICAgIGNvbnN0IHZhbHVlID0gaXNOb3ROaWwocGFyc2VkVmFsdWUpID8gc2lnbiAqIHBhcnNlZFZhbHVlIDogbnVsbDtcblxuICAgIC8vIEdldCB0aGUgbW9kZWwgdmFsdWVcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbbWF0LWxhdGxvbl0gU2V0dGluZyB2YWx1ZSB7XCIgKyB2YWx1ZSArIFwifSBwYXJzZWQgZnJvbSB7XCIgKyBzdHJWYWx1ZSArIFwifVwiKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkIHx8IHRoaXMudGV4dEZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjwhLS0gcmVhZG9ubHkgLS0+XG48bWF0LWZvcm0tZmllbGRcbiAgKm5nSWY9XCJyZWFkb25seTsgZWxzZSB3cml0YWJsZVwiXG4gIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCJcbiAgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1kaXNhYmxlZFwiXG4+XG4gIDxkaXYgbWF0UHJlZml4PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8bWF0LWxhYmVsICpuZ0lmPVwiZmxvYXRMYWJlbCAhPT0gJ25ldmVyJyAmJiAhIXBsYWNlaG9sZGVyXCI+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cblxuICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIHR5cGU9XCJ0ZXh0XCIgcmVhZG9ubHkgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgLz5cbiAgPGlvbi10ZXh0Pnt7IF9mb3JtYXQoZm9ybUNvbnRyb2wudmFsdWUpIH19PC9pb24tdGV4dD5cblxuICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0U3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L21hdC1mb3JtLWZpZWxkPlxuXG48IS0tIHdyaXRhYmxlIC0tPlxuPG5nLXRlbXBsYXRlICN3cml0YWJsZT5cbiAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmcge3thcHBlYXJhbmNlfX1cIj5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nIG5vLXdyYXBcIj5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwidGV4dCBpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCInZHluYW1pYydcIlxuICAgICAgICAgIFtjbGFzcy5tZGMtdGV4dC1maWVsZC0taW52YWxpZF09XCJmb3JtQ29udHJvbC50b3VjaGVkICYmIChzaWduRm9ybUNvbnRyb2wuaW52YWxpZCB8fCBmb3JtQ29udHJvbC5pbnZhbGlkKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cImZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlclwiPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAjaW5wdXRFbGVtZW50XG4gICAgICAgICAgICBbbWFza2l0b109XCJpbnB1dFBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlIHwgbWFza2l0b1BsYWNlaG9sZGVyOiBtYXNrIDogIXNob3dTaWduQ29udHJvbCAmJiBkZWZhdWx0U2lnblwiXG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImlucHV0UGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGJsdXIpPVwiX29uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0ZXh0Rm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICBbYXBwQXV0b2ZvY3VzXT1cImF1dG9mb2N1c1wiXG4gICAgICAgICAgLz5cblxuICAgICAgICAgIDxkaXYgbWF0U3VmZml4ICpuZ0lmPVwiIXNob3dTaWduQ29udHJvbFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2lvbi1jb2w+XG5cbiAgICAgIDwhLS0gc2lnbiAtLT5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwic2lnbiBpb24tbm8tcGFkZGluZ1wiIFtuZ1N3aXRjaF09XCJ0eXBlXCIgKm5nSWY9XCJzaG93U2lnbkNvbnRyb2xcIj5cbiAgICAgICAgPCEtLSBzaWduIG9uIGxhdGl0dWRlIC0tPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2xhdGl0dWRlJ1wiXG4gICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwiJ2R5bmFtaWMnXCJcbiAgICAgICAgICBbY2xhc3MubWRjLXRleHQtZmllbGQtLWludmFsaWRdPVwiZm9ybUNvbnRyb2wudG91Y2hlZCAmJiBzaWduRm9ybUNvbnRyb2wuaW52YWxpZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwicGxhY2Vob2xkZXIgJiYgZmxvYXRMYWJlbCAhPT0gJ25ldmVyJ1wiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIENPTU1PTi5MQVRfTE9ORy5MQVRfU0lHTl9QTEFDRUhPTERFUlxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuXG4gICAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInNpZ25Gb3JtQ29udHJvbFwiIFt0YWJpbmRleF09XCJ0YWJpbmRleCAhPT0gdW5kZWZpbmVkID8gdGFiaW5kZXggKyAxIDogdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiMVwiPnt7ICdDT01NT04uTEFUX0xPTkcuTEFUX1NJR05fTicgfCB0cmFuc2xhdGUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiLTFcIj57eyAnQ09NTU9OLkxBVF9MT05HLkxBVF9TSUdOX1MnIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgICAgICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPCEtLSBzaWduIG9uIGxvbmdpdHVkZSAtLT5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidsb25naXR1ZGUnXCJcbiAgICAgICAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCInZHluYW1pYydcIlxuICAgICAgICAgIFtjbGFzcy5tZGMtdGV4dC1maWVsZC0taW52YWxpZF09XCJmb3JtQ29udHJvbC50b3VjaGVkICYmIHNpZ25Gb3JtQ29udHJvbC5pbnZhbGlkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJwbGFjZWhvbGRlciAmJiBmbG9hdExhYmVsICE9PSAnbmV2ZXInXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgQ09NTU9OLkxBVF9MT05HLkxPTkdfU0lHTl9QTEFDRUhPTERFUlxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuXG4gICAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cInNpZ25Gb3JtQ29udHJvbFwiIFt0YWJpbmRleF09XCJ0YWJpbmRleCAhPT0gdW5kZWZpbmVkID8gdGFiaW5kZXggKyAxIDogdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiMVwiIHRyYW5zbGF0ZT57eyAnQ09NTU9OLkxBVF9MT05HLkxPTkdfU0lHTl9FJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCItMVwiIHRyYW5zbGF0ZT57eyAnQ09NTU9OLkxBVF9MT05HLkxPTkdfU0lHTl9XJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgPC9pb24tZ3JpZD5cblxuICA8IS0tIERvIHRoZSBzYW1lIGFzIE1hdEZyb21GaWVsZCBzaW5jZSBhbmd1bGFyIDE1IChzZWUgY29tcG9uZW50IHNvdXJjZSktLT5cbiAgPGRpdlxuICAgIGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC13cmFwcGVyXCJcbiAgICBbY2xhc3MubWF0LW1kYy1mb3JtLWZpZWxkLWJvdHRvbS1hbGlnbl09XCJzdWJzY3JpcHRTaXppbmcgPT09ICdmaXhlZCdcIlxuICAgIFtjbGFzcy5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LWR5bmFtaWMtc2l6ZV09XCJzdWJzY3JpcHRTaXppbmcgPT09ICdkeW5hbWljJ1wiPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZvcm1Db250cm9sLnRvdWNoZWQgJiYgZm9ybUNvbnRyb2wuaW52YWxpZDsgZWxzZSBoaW50c1wiPlxuICAgICAgPCEtLSBlcnJvcnMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yLXdyYXBwZXJcIj5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZvcm1Db250cm9sLmVycm9ycyB8IG1hcEtleXMgfCBhcnJheUZpcnN0OyBsZXQgZXJyb3JLZXk7IGVsc2UgcGFyZW50RXJyb3JcIiBbbmdTd2l0Y2hdPVwiZXJyb3JLZXlcIj5cbiAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3JlcXVpcmVkJ1wiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2xhdGl0dWRlJ1wiIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfTEFUSVRVREU8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidsb25naXR1ZGUnXCIgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX05PVF9WQUxJRF9MT05HSVRVREU8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidtaW4nXCI+XG4gICAgICAgICAgICB7eyAnRVJST1IuRklFTERfTUlOX0NPTVBBQ1QnIHwgdHJhbnNsYXRlOiB7IG1pbjogX2Zvcm1hdChmb3JtQ29udHJvbC5lcnJvcnMubWluLm1pbikgfSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ21heCdcIj5cbiAgICAgICAgICAgIHt7ICdFUlJPUi5GSUVMRF9NQVhfQ09NUEFDVCcgfCB0cmFuc2xhdGU6IHsgbWF4OiBfZm9ybWF0KGZvcm1Db250cm9sLmVycm9ycy5tYXgubWF4KSB9IH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInbXNnJ1wiPlxuICAgICAgICAgICAge3sgZm9ybUNvbnRyb2wuZXJyb3JzLm1zZz8ua2V5IHx8IGZvcm1Db250cm9sLmVycm9ycy5tc2cgfCB0cmFuc2xhdGU6IGZvcm1Db250cm9sLmVycm9ycy5tc2c/LnBhcmFtcyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcGFyZW50RXJyb3I+XG4gICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWVycm9yXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI2hpbnRzPlxuICAgICAgPCEtLSBoaW50cyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1oaW50Om5vdChbYWxpZ249J2VuZCddKVwiPjwvbmctY29udGVudD5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXNwYWNlclwiPjwvZGl2PlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludFthbGlnbj0nZW5kJ11cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0UHJlZml4VGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRQcmVmaXhdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRTdWZmaXhUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
450
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwubGF0bG9uZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFFWixZQUFZLEVBQ1osVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE0QyxpQkFBaUIsRUFBMEMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakosT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUNMLGNBQWMsRUFDZCxlQUFlLEVBQ2YsNkJBQTZCLEVBSTdCLHdCQUF3QixHQUN6QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pILE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xF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LFFBQVEsOEpDakp4Qix1Z09BMExBOzsyRkQzR2EsZUFBZTtrQkFiM0IsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsS0FBSyxFQUFFLElBQUk7NEJBQ1gsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7eUJBQy9DO3FCQUNGLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNOzswQkF5RTVDLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsOEJBQThCO3lDQWhEL0IsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDbUIsT0FBTztzQkFBL0IsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ2QsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdGLFVBQVU7c0JBRGIsS0FBSztnQkFRTyxRQUFRO3NCQUFwQixLQUFLO2dCQVVGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBUUksTUFBTTtzQkFBZixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBRW9CLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDRCxRQUFRO3NCQUEvQixZQUFZO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU2hhcmVkVmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmltcG9ydCB7XG4gIGZvcm1hdExhdGl0dWRlLFxuICBmb3JtYXRMb25naXR1ZGUsXG4gIExBVF9MT05HX0RFRkFVTFRfTUFYX0RFQ0lNQUxTLFxuICBMYXRMb25nRm9ybWF0Rm4sXG4gIExhdExvbmdGb3JtYXRPcHRpb25zLFxuICBMYXRMb25nUGF0dGVybixcbiAgcGFyc2VMYXRpdHVkZU9yTG9uZ2l0dWRlLFxufSBmcm9tICcuL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgRU1QVFlfUExBQ0VIT0xERVJfQ0hBUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOaWxPck5hTiwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBnZXRDYXJldFBvc2l0aW9uLCBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yLCBzZWxlY3RJbnB1dENvbnRlbnQsIHNlbGVjdElucHV0UmFuZ2UgfSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgREVGQVVMVF9NQVhfREVDSU1BTFMgfSBmcm9tICcuLi9kdXJhdGlvbi9kdXJhdGlvbi51dGlscyc7XG5pbXBvcnQge1xuICBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMsXG4gIE1hdEVycm9yLFxuICBNYXRGb3JtRmllbGRBcHBlYXJhbmNlLFxuICBNYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucyxcbiAgU3Vic2NyaXB0U2l6aW5nLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IEFwcEZsb2F0TGFiZWxUeXBlIH0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNYXNraXRvTWFzayB9IGZyb20gJ0BtYXNraXRvL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9BUFBFQVJBTkNFLCBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX1NVQlNDUklQVF9TSVpJTkcgfSBmcm9tICcuLi9tYXRlcmlhbC5jb25maWcnO1xuXG5jb25zdCBEID0gL1xcZHxcXHVGRUZGLztcbmNvbnN0IE0gPSAvXFxkfFxcdUZFRkYvO1xuY29uc3QgUyA9IC9cXGR8XFx1RkVGRi87XG5jb25zdCBNQVNLUzoge1xuICBba2V5OiBzdHJpbmddOiB7XG4gICAgW3BhdHRlcm46IHN0cmluZ106IEFycmF5PHN0cmluZyB8IFJlZ0V4cD4gfCBSZWdFeHA7XG4gIH07XG59ID0ge1xuICBsYXRpdHVkZToge1xuICAgIERETU1TUzogW0QsIEQsICfCsCcsICcgJywgTSwgTSwgXCInXCIsICcgJywgUywgUywgJy4nLCBTLCBTLCAnXCInXSxcbiAgICBERE1NOiBbRCwgRCwgJ8KwJywgJyAnLCBNLCBNLCAnLicsIE0sIE0sIE0sIFwiJ1wiXSxcbiAgICBERDogWy9bK118LS8sICcgJywgRCwgRCwgJy4nLCBELCBELCBELCBELCBELCBELCBELCAnwrAnXSxcbiAgfSxcbiAgbG9uZ2l0dWRlOiB7XG4gICAgRERNTVNTOiBbRCwgRCwgRCwgJ8KwJywgJyAnLCBNLCBNLCBcIidcIiwgJyAnLCBTLCBTLCAnLicsIFMsIFMsICdcIiddLFxuICAgIERETU06IFtELCBELCBELCAnwrAnLCAnICcsIE0sIE0sICcuJywgTSwgTSwgTSwgXCInXCJdLFxuICAgIEREOiBbL1srLV0vLCBELCBELCBELCAnLicsIEQsIEQsIEQsIEQsIEQsIEQsIEQsICfCsCddLFxuICB9LFxufTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtbGF0bG9uZy1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5sYXRsb25nLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC5sYXRsb25nLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdExhdExvbmdGaWVsZCksXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdExhdExvbmdGaWVsZCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfZm9ybWF0T3B0aW9uczogTGF0TG9uZ0Zvcm1hdE9wdGlvbnM7XG4gIHByaXZhdGUgX2Rpc2FibGluZyA9IGZhbHNlO1xuICBwcml2YXRlIF93cml0aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2FwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVmYXVsdEFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRTdWJzY3JpcHRTaXppbmc6IFN1YnNjcmlwdFNpemluZztcblxuICBfcmVhZG9ubHkgPSBmYWxzZTtcbiAgX2Zvcm1hdEZuOiBMYXRMb25nRm9ybWF0Rm47XG4gIHRleHRGb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICBzaWduRm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgbWFzazogTWFza2l0b01hc2s7XG4gIGlucHV0UGxhY2Vob2xkZXI6IHN0cmluZztcbiAgc2hvd1NpZ25Db250cm9sOiBib29sZWFuO1xuXG4gIGdldCBkaXNhYmxlZCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJlYWRvbmx5IHx8IHRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIH1cblxuICBASW5wdXQoKSBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgdHlwZTogJ2xhdGl0dWRlJyB8ICdsb25naXR1ZGUnO1xuICBASW5wdXQoJ2xhdExvbmdQYXR0ZXJuJykgcGF0dGVybjogTGF0TG9uZ1BhdHRlcm47XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEFwcEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSB0YWJpbmRleDogbnVtYmVyO1xuICBASW5wdXQoKSBkZWZhdWx0U2lnbjogJy0nIHwgJysnIHwgJysgJyB8ICctICc7XG4gIEBJbnB1dCgpIG1heERlY2ltYWxzOiBudW1iZXIgPSBMQVRfTE9OR19ERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXJDaGFyOiBzdHJpbmcgPSBFTVBUWV9QTEFDRUhPTERFUl9DSEFSO1xuICBASW5wdXQoKSBhdXRvZm9jdXMgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzZXQgYXBwZWFyYW5jZSh2YWx1ZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSkge1xuICAgIHRoaXMuX2FwcGVhcmFuY2UgPSB2YWx1ZTtcbiAgfVxuICBnZXQgYXBwZWFyYW5jZSgpOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZWFyYW5jZSB8fCB0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgc3Vic2NyaXB0U2l6aW5nKHZhbHVlOiBTdWJzY3JpcHRTaXppbmcpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRTaXppbmcgPSB2YWx1ZTtcbiAgfVxuICBnZXQgc3Vic2NyaXB0U2l6aW5nKCk6IFN1YnNjcmlwdFNpemluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnNjcmlwdFNpemluZyB8fCB0aGlzLl9kZWZhdWx0U3Vic2NyaXB0U2l6aW5nO1xuICB9XG5cbiAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgQE91dHB1dCgpIG9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JykgaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmO1xuICBAQ29udGVudENoaWxkKE1hdEVycm9yKSBtYXRFcnJvcjogTWF0RXJyb3I7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwRGlyOiBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gICAgQEluamVjdChNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMpIGRlZmF1bHRPcHRpb25zPzogTWF0Rm9ybUZpZWxkRGVmYXVsdE9wdGlvbnNcbiAgKSB7XG4gICAgdGhpcy5fZGVmYXVsdFN1YnNjcmlwdFNpemluZyA9IGRlZmF1bHRPcHRpb25zPy5zdWJzY3JpcHRTaXppbmcgfHwgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9TVUJTQ1JJUFRfU0laSU5HO1xuICAgIHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlID0gZGVmYXVsdE9wdGlvbnM/LmFwcGVhcmFuY2UgfHwgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9BUFBFQVJBTkNFO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy50eXBlID0gdGhpcy50eXBlIHx8ICdsYXRpdHVkZSc7XG4gICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuIHx8ICdERE1NJztcbiAgICB0aGlzLm1hc2sgPSBNQVNLU1t0aGlzLnR5cGVdICYmIE1BU0tTW3RoaXMudHlwZV1bdGhpcy5wYXR0ZXJuXTtcbiAgICBpZiAoIXRoaXMubWFzaykge1xuICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgYXR0cmlidXRlIHZhbHVlLiBFeHBlY3RlZDogdHlwZTogJ2xhdGl0dWRlfGxvbmdpdHVkZScgYW5kIGxhdGxvbmdQYXR0ZXJuOiAnRER8RERNTXxERE1NU1MnXCIpO1xuICAgICAgdGhpcy50eXBlID0gJ2xhdGl0dWRlJztcbiAgICAgIHRoaXMucGF0dGVybiA9ICdERE1NJztcbiAgICAgIHRoaXMubWFzayA9IE1BU0tTW3RoaXMudHlwZV1bdGhpcy5wYXR0ZXJuXTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgbWF4IGRlY2ltYWxzIGluIHRoZSBERE1NU1MgZm9ybWF0XG4gICAgaWYgKHRoaXMucGF0dGVybiA9PT0gJ0REJykge1xuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGF0dHJpYnV0ZSAnbWF4RGVjaW1hbHMnIC0gTXVzdCBiZSAnMCcgd2hlbiB1c2luZyB0aGUgJ0RETU1TUycgcGF0dGVybi5gKTtcbiAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSA3O1xuICAgIH0gZWxzZSBpZiAodGhpcy5wYXR0ZXJuID09PSAnRERNTVNTJykge1xuICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGF0dHJpYnV0ZSAnbWF4RGVjaW1hbHMnIC0gTXVzdCBiZSAnMCcgd2hlbiB1c2luZyB0aGUgJ0RETU1TUycgcGF0dGVybi5gKTtcbiAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSAwO1xuICAgIH0gZWxzZSBpZiAoaXNOaWwodGhpcy5tYXhEZWNpbWFscykpIHtcbiAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSBERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgICB9IGVsc2UgaWYgKHRoaXMubWF4RGVjaW1hbHMgPCAwKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBhdHRyaWJ1dGUgJ21heERlY2ltYWxzJy4gTXVzdCBhIHBvc2l0aXZlIHZhbHVlLlwiKTtcbiAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSBERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgICB9IGVsc2UgaWYgKHRoaXMubWF4RGVjaW1hbHMgIT09IERFRkFVTFRfTUFYX0RFQ0lNQUxTKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBJbnZhbGlkIGF0dHJpYnV0ZSAnbWF4RGVjaW1hbHMnIC0gRXhwZWN0ZWQgdmFsdWU6ICR7REVGQVVMVF9NQVhfREVDSU1BTFN9IGJ1dCBnZXQ6ICR7dGhpcy5tYXhEZWNpbWFsc30uIE90aGVyIHZhbHVlIG5vdCBpbXBsZW1lbnRlZC5gXG4gICAgICApO1xuICAgICAgdGhpcy5tYXhEZWNpbWFscyA9IERFRkFVTFRfTUFYX0RFQ0lNQUxTO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1NpZ25Db250cm9sID0gdGhpcy5wYXR0ZXJuICE9PSAnREQnO1xuXG4gICAgdGhpcy5fZm9ybWF0Rm4gPSB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyBmb3JtYXRMYXRpdHVkZSA6IGZvcm1hdExvbmdpdHVkZTtcbiAgICB0aGlzLl9mb3JtYXRPcHRpb25zID0geyBwYXR0ZXJuOiB0aGlzLnBhdHRlcm4sIG1heERlY2ltYWxzOiB0aGlzLm1heERlY2ltYWxzLCBoaWRlU2lnbjogdGhpcy5zaG93U2lnbkNvbnRyb2wgfTtcblxuICAgIHRoaXMuaW5wdXRQbGFjZWhvbGRlciA9ICdDT01NT04uTEFUX0xPTkcuJyArICgodGhpcy50eXBlID09PSAnbG9uZ2l0dWRlJyAmJiAnRCcpIHx8ICcnKSArIHRoaXMucGF0dGVybiArICdfUExBQ0VIT0xERVInO1xuXG4gICAgdGhpcy50ZXh0Rm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wodGhpcy5yZXF1aXJlZCA/IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSA6IFtudWxsXSk7XG5cbiAgICB0aGlzLnNpZ25Gb3JtQ29udHJvbCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCh0aGlzLnJlcXVpcmVkID8gW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdIDogW251bGxdKTtcblxuICAgIHRoaXMuZm9ybUNvbnRyb2wgPVxuICAgICAgdGhpcy5mb3JtQ29udHJvbCB8fCAodGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgKHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2wpKTtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgbWFuZGF0b3J5IGF0dHJpYnV0ZSAnZm9ybUNvbnRyb2wnIG9yICdmb3JtQ29udHJvbE5hbWUnIGluIDxtYXQtbGF0bG9uZy1maWVsZD4uXCIpO1xuXG4gICAgY29uc3QgZXhpc3RpbmdWYWxpZGF0b3JzID0gdGhpcy5mb3JtQ29udHJvbC52YWxpZGF0b3I7XG4gICAgaWYgKGV4aXN0aW5nVmFsaWRhdG9ycykge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKFtleGlzdGluZ1ZhbGlkYXRvcnMsIHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IFNoYXJlZFZhbGlkYXRvcnMubGF0aXR1ZGUgOiBTaGFyZWRWYWxpZGF0b3JzLmxvbmdpdHVkZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8gU2hhcmVkVmFsaWRhdG9ycy5sYXRpdHVkZSA6IFNoYXJlZFZhbGlkYXRvcnMubG9uZ2l0dWRlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKG1lcmdlKHRoaXMudGV4dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcywgdGhpcy5zaWduRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzKS5zdWJzY3JpYmUoKF8pID0+IHRoaXMub25Gb3JtQ2hhbmdlKCkpKTtcblxuICAgIC8vIExpc3RlbiBzdGF0dXMgY2hhbmdlcyAod2hlbiBkb25lIG91dHNpZGUgdGhlIGNvbXBvbmVudCAgLSBlLmcuIHdoZW4gc2V0RXJyb3JzKCkgaXMgY2FsbGluZyBvbiB0aGUgZm9ybUNvbnRyb2wpXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLnJlYWRvbmx5ICYmICF0aGlzLl93cml0aW5nICYmICF0aGlzLl9kaXNhYmxpbmcpIC8vIFNraXBcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB0aGlzLm1hcmtGb3JDaGVjaygpKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuO1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgPyBwYXJzZUZsb2F0KG9iai5yZXBsYWNlKC8sL2csICcuJykpIDogb2JqO1xuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHN0clZhbHVlID0gdGhpcy5fZm9ybWF0Rm4odmFsdWUsIHsgLi4udGhpcy5fZm9ybWF0T3B0aW9ucywgcGxhY2Vob2xkZXJDaGFyOiB0aGlzLnBsYWNlaG9sZGVyQ2hhciB9KTtcbiAgICBjb25zdCBzaWduID0gaXNOb3ROaWwodmFsdWUpXG4gICAgICA/IHZhbHVlIDwgMFxuICAgICAgICA/IC0xXG4gICAgICAgIDogMVxuICAgICAgOiAvLyBVc2UgZGVmYXVsdCBzaWduLCBpZiBhbnlcbiAgICAgICAgdGhpcy5kZWZhdWx0U2lnblxuICAgICAgICA/IHRoaXMuZGVmYXVsdFNpZ24gPT09ICctJ1xuICAgICAgICAgID8gLTFcbiAgICAgICAgICA6IDFcbiAgICAgICAgOiBudWxsO1xuXG4gICAgLy8gREVCVUdcbiAgICAvLyBjb25zb2xlLmRlYnVnKFwic3RyVmFsdWU6IFwiICsgc3RyVmFsdWUpXG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcInNpZ246IFwiICsgc2lnbilcblxuICAgIHRoaXMudGV4dEZvcm1Db250cm9sLnBhdGNoVmFsdWUoc3RyVmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLnNpZ25Gb3JtQ29udHJvbC5wYXRjaFZhbHVlKHNpZ24sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5fZGlzYWJsaW5nID0gdHJ1ZTtcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xuICAgICAgdGhpcy50ZXh0Rm9ybUNvbnRyb2wuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5zaWduRm9ybUNvbnRyb2wuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRleHRGb3JtQ29udHJvbC5lbmFibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuc2lnbkZvcm1Db250cm9sLmVuYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgICB0aGlzLl9kaXNhYmxpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB2YWx1ZSB0byBkaXNwbGF5IGFzIHN0cmluZyAobm8gcGxhY2Vob2xkZXIgY2hhciwgYW5kIHNob3cgc2lnbilcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBfZm9ybWF0KHZhbHVlOiBudW1iZXIsIG9wdHM/OiBQYXJ0aWFsPExhdExvbmdGb3JtYXRPcHRpb25zPikge1xuICAgIHJldHVybiB0aGlzLl9mb3JtYXRGbih2YWx1ZSwge1xuICAgICAgLi4udGhpcy5fZm9ybWF0T3B0aW9ucyxcbiAgICAgIGhpZGVTaWduOiBmYWxzZSxcbiAgICAgIHBsYWNlaG9sZGVyQ2hhcjogJycsXG4gICAgfSk7XG4gIH1cblxuICBfb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCkge1xuICAgIC8vIEFwcGx5IHRoZSBkZWZhdWx0IHNpZ24sIHdoZW4gcGF0dGVybiBpcyBERCBhbmQgZmllbGQgaXMgZW1wdHlcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgaWYgKGlzTmlsT3JOYU4odmFsdWUpKSB7XG4gICAgICBpZiAodGhpcy5kZWZhdWx0U2lnbikge1xuICAgICAgICAvLyBDb21wdXRlIHRoZSB0ZXh0IHZhbHVlLCB1c2luZyB0aGUgZGVmYXVsdCBzaWduXG4gICAgICAgIGNvbnN0IGRlZmF1bHRTaWduID0gdGhpcy5kZWZhdWx0U2lnbiA9PT0gJy0nID8gLTEgOiAxO1xuXG4gICAgICAgIGlmICh0aGlzLnBhdHRlcm4gPT09ICdERCcpIHtcbiAgICAgICAgICBsZXQgdmFsdWVTdHIgPSB0aGlzLl9mb3JtYXRGbihkZWZhdWx0U2lnbiwgeyAuLi50aGlzLl9mb3JtYXRPcHRpb25zLCBwbGFjZWhvbGRlckNoYXI6IHRoaXMucGxhY2Vob2xkZXJDaGFyIH0pO1xuICAgICAgICAgIC8vIEtlZXAgb25seSB0aGUgc2lnbiAoJysnIG9yICctJykgYW5kIHBsYWNlaG9sZGVyIGNoYXJzLCBidXQgTk9UIHRoZSAnMSdcbiAgICAgICAgICB2YWx1ZVN0ciA9IHZhbHVlU3RyICYmIHZhbHVlU3RyLnJlcGxhY2UoJzEnLCB0aGlzLnBsYWNlaG9sZGVyQ2hhcik7XG5cbiAgICAgICAgICAvLyBXYWl0IGVuZCBvZiBmb2N1cyBhbmltYXRpb24gKGxhYmVsIHNob3VsZCBtb3ZlIHRvIHRvcClcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZVN0cjtcblxuICAgICAgICAgICAgLy8gTW92ZSBjdXJzb3IgYWZ0ZXIgdGhlIHNpZ25cbiAgICAgICAgICAgIGNvbnN0IGNhcmV0SW5kZXggPSB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyAyIDogMTtcbiAgICAgICAgICAgIHNlbGVjdElucHV0UmFuZ2UoZXZlbnQudGFyZ2V0LCBjYXJldEluZGV4KTtcbiAgICAgICAgICB9LCAyNTApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2lnbkZvcm1Db250cm9sLnNldFZhbHVlKGRlZmF1bHRTaWduKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlbGVjdCB0aGUgY29udGVudCAoaWYgdGhlcmUgaXMgYSB2YWx1ZSlcbiAgICBlbHNlIHtcbiAgICAgIHNlbGVjdElucHV0Q29udGVudChldmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZlbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgX29uQmx1cihldmVudDogRm9jdXNFdmVudCkge1xuICAgIGNvbnN0IHRvdWNoZWQgPSB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgaWYgKHRvdWNoZWQgJiYgaXNOaWwodGhpcy5mb3JtQ29udHJvbD8udmFsdWUpKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICAgIHRoaXMub25CbHVyLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgbW92ZUNhcmV0VG9TZXBhcmF0b3IoZXZlbnQ6IGFueSwgZm9yd2FyZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIC8vIE1vdmUgdG8gdGhlIHNwYWNlIHNlcGFyYXRvclxuICAgIHJldHVybiBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yKGV2ZW50LCAnICcsIGZvcndhcmQpO1xuICB9XG5cbiAgb25LZXlwcmVzcyhldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIC8vIE51bWJlciBlbnRlcmVkIG9yIG9uZSBvZiB0aGUgNCBkaXJlY3Rpb24gdXAsIGRvd24sIGxlZnQgYW5kIHJpZ2h0XG4gICAgaWYgKChldmVudC53aGljaCA+PSA0OCAmJiBldmVudC53aGljaCA8PSA1NykgfHwgKGV2ZW50LndoaWNoID49IDM3ICYmIGV2ZW50LndoaWNoIDw9IDQwKSkge1xuICAgICAgLy9jb25zb2xlLmRlYnVnKCdpbnB1dCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcbiAgICAgIC8vIE9LXG4gICAgfVxuICAgIC8vIERlY2ltYWwgc2VwYXJhdG9yIGVudGVyZWRcbiAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICcuJyB8fCBldmVudC5rZXkgPT09ICcsJykge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vIGNvbnNvbGUuZGVidWcoJ2lucHV0IGRlY2ltYWwgc2VwYXJhdG9yIGVudGVyZWQgOicgKyBldmVudC5jb2RlKTtcblxuICAgICAgLy8gTW92ZSBjYXJldCBhZnRlciBwb2ludFxuICAgICAgbW92ZUlucHV0Q2FyZXRUb1NlcGFyYXRvcihldmVudCwgJy4nKTtcblxuICAgICAgLy8gT0tcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29tbWFuZCBlbnRlcmVkIChkZWxldGUsIGJhY2tzcGFjZSBvciBvbmUgb2YgdGhlIDQgZGlyZWN0aW9uIHVwLCBkb3duLCBsZWZ0IGFuZCByaWdodClcbiAgICAgIGlmICgoZXZlbnQua2V5Q29kZSA+PSAzNyAmJiBldmVudC5rZXlDb2RlIDw9IDQwKSB8fCBldmVudC5rZXlDb2RlID09PSA0NiB8fCBldmVudC53aGljaCA9PT0gOCB8fCBldmVudC5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZygnaW5wdXQgY29tbWFuZCBlbnRlcmVkOicgKyBldmVudC53aGljaCArICcgJyArIGV2ZW50LmtleUNvZGUgKyAnICcgKyBldmVudC5jaGFyQ29kZSk7XG4gICAgICAgIC8vIE9LXG4gICAgICB9XG4gICAgICAvLyBTaWduIGVudGVyZWQgKCcrJyBvciAnLScpXG4gICAgICBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSA0MyB8fCBldmVudC5rZXlDb2RlID09PSA0NSkge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKCdpbnB1dCBzaWduIGVudGVyZWQ6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcbiAgICAgICAgY29uc3QgY2FyZXRQb3NpdGlvbiA9IGdldENhcmV0UG9zaXRpb24oZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKHRoaXMucGF0dGVybiA9PT0gJ0REJyAmJiBjYXJldFBvc2l0aW9uID4gMCkge1xuICAgICAgICAgIGNvbnN0IHNpZ24gPSBldmVudC5rZXk7XG4gICAgICAgICAgLy8gV2FpdCBrZXkgYXBwbHlcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgICAgICAgaWYgKHZhbHVlICYmICF2YWx1ZS5zdGFydHNXaXRoKHNpZ24pKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHNpZ24gKyAodmFsdWUubGVuZ3RoID4gMSA/IHZhbHVlLnN1YnN0cigxKSA6ICcnKTtcblxuICAgICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAgIC8vIGNvbnNvbGUuZGVidWcoXCJzaWduIGVudGVyZWQuIFVwZGF0aW5nIGlucHV0IHZhbHVlIHRvOlwiLCBuZXdWYWx1ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHNlbGVjdElucHV0UmFuZ2UodGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudCwgY2FyZXRQb3NpdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPS1xuICAgICAgfVxuICAgICAgLy8gRGlyZWN0aW9uIGNoYXIgKGNhcGl0YWxpemVkKVxuICAgICAgZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnTicgfHwgZXZlbnQua2V5ID09PSAnUycgfHwgZXZlbnQua2V5ID09PSAnRScgfHwgZXZlbnQua2V5ID09PSAnVycpIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy8gY29uc29sZS5kZWJ1ZygnaW5wdXQgZGlyZWN0aW9uIGVudGVyZWQ6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlKTtcbiAgICAgICAgLy8gT0tcbiAgICAgIH1cbiAgICAgIC8vIERpcmVjdGlvbiBjaGFyXG4gICAgICBlbHNlIGlmIChldmVudC5rZXkgPT09ICduJyB8fCBldmVudC5rZXkgPT09ICdzJyB8fCBldmVudC5rZXkgPT09ICdlJyB8fCBldmVudC5rZXkgPT09ICd3Jykge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLyBjb25zb2xlLmRlYnVnKCdpbnB1dCBkaXJlY3Rpb24gZW50ZXJlZDonICsgZXZlbnQud2hpY2ggKyAnICcgKyBldmVudC5rZXlDb2RlICsgJyAnICsgZXZlbnQuY2hhckNvZGUpO1xuXG4gICAgICAgIC8vIENhcGl0YWxpemUgKHdpdGggYSBkZWxheSwgdG8gYmUgc3VyZSB0aGUga2V5IGhhcyBiZWVuIGFwcGxpZWQgdG8gaW5wdXQgdGV4dClcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfSwgMTApO1xuXG4gICAgICAgIC8vIE9LXG4gICAgICB9XG5cbiAgICAgIC8vIEFueSBvdGhlciBrZXlib2FyZCBldmVudHNcbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ2lucHV0IG5vdCBudW1iZXIgZW50ZXJlZCA6JyArIGV2ZW50LndoaWNoICsgJyAnICsgZXZlbnQua2V5Q29kZSArICcgJyArIGV2ZW50LmNoYXJDb2RlICsgJyAnICsgZXZlbnQuY29kZSApO1xuXG4gICAgICAgIC8vIEtPOiBjYW5jZWwgdGhlIGV2ZW50XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvbkZvcm1DaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcCBpZiBjYWxsIGJ5IHNlbGZcbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IHN0clZhbHVlID0gdGhpcy50ZXh0Rm9ybUNvbnRyb2wudmFsdWU7XG5cbiAgICBpZiAodGhpcy50ZXh0Rm9ybUNvbnRyb2wuaW52YWxpZCB8fCB0aGlzLnNpZ25Gb3JtQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoKTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0RXJyb3JzKHtcbiAgICAgICAgLi4udGhpcy5mb3JtQ29udHJvbC5lcnJvcnMsXG4gICAgICAgIC4uLnRoaXMudGV4dEZvcm1Db250cm9sLmVycm9ycyxcbiAgICAgICAgLi4udGhpcy5zaWduRm9ybUNvbnRyb2wuZXJyb3JzLFxuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy50ZXh0Rm9ybUNvbnRyb2wuZGlydHkgfHwgdGhpcy5zaWduRm9ybUNvbnRyb2wuZGlydHkpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gaXNOb3ROaWxPckJsYW5rKHN0clZhbHVlKVxuICAgICAgPyBwYXJzZUxhdGl0dWRlT3JMb25naXR1ZGUoc3RyVmFsdWUsIHRoaXMucGF0dGVybiwgNyAvKj1wcmVjaXNpb24gb2YgdGhlIGNvbnZlcnRlZCBkb3VibGUgdmFsdWUgKi8sIHRoaXMucGxhY2Vob2xkZXJDaGFyKVxuICAgICAgOiBudWxsO1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoJ3BhcnNlZFZhbHVlPScsIHBhcnNlZFZhbHVlKTtcblxuICAgIGlmIChpc05hTihwYXJzZWRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUGVuZGluZygpO1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRFcnJvcnModGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8geyBsYXRpdHVkZTogdHJ1ZSB9IDogeyBsb25naXR1ZGU6IHRydWUgfSk7XG4gICAgICAvLyBUT0RPIERpcnR5IGZpeCA6IHRyZWF0IHRoaXMgZXJyb3Igd2l0aCBhIHZhbGlkYXRvclxuICAgICAgdGhpcy50ZXh0Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IHsgbGF0aXR1ZGU6IHRydWUgfSA6IHsgbG9uZ2l0dWRlOiB0cnVlIH0pO1xuICAgICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaWduID0gdGhpcy5wYXR0ZXJuID09PSAnREQnID8gMSAvKmlnbm9yZSBzaWduKi8gOiB0aGlzLnNpZ25Gb3JtQ29udHJvbC52YWx1ZSB8fCAxO1xuICAgIGNvbnN0IHZhbHVlID0gaXNOb3ROaWwocGFyc2VkVmFsdWUpID8gc2lnbiAqIHBhcnNlZFZhbHVlIDogbnVsbDtcblxuICAgIC8vIEdldCB0aGUgbW9kZWwgdmFsdWVcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJbbWF0LWxhdGxvbl0gU2V0dGluZyB2YWx1ZSB7XCIgKyB2YWx1ZSArIFwifSBwYXJzZWQgZnJvbSB7XCIgKyBzdHJWYWx1ZSArIFwifVwiKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkIHx8IHRoaXMudGV4dEZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjwhLS0gcmVhZG9ubHkgLS0+XG48bWF0LWZvcm0tZmllbGRcbiAgKm5nSWY9XCJyZWFkb25seTsgZWxzZSB3cml0YWJsZVwiXG4gIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCJcbiAgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1kaXNhYmxlZFwiXG4+XG4gIDxkaXYgbWF0UHJlZml4PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgIDxtYXQtbGFiZWw+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cbiAgfVxuXG4gIDxpbnB1dCBtYXRJbnB1dCBoaWRkZW4gdHlwZT1cInRleHRcIiByZWFkb25seSBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiAvPlxuICA8aW9uLXRleHQ+e3sgX2Zvcm1hdChmb3JtQ29udHJvbC52YWx1ZSkgfX08L2lvbi10ZXh0PlxuXG4gIDxkaXYgbWF0U3VmZml4PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cblxuICA8IS0tIGhpbnRzIC0tPlxuICA8bWF0LWhpbnQgW2NsYXNzLmNkay12aXN1YWxseS1oaWRkZW5dPVwiZm9ybUNvbnRyb2wuaW52YWxpZFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRIaW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtaGludD5cbjwvbWF0LWZvcm0tZmllbGQ+XG5cbjwhLS0gd3JpdGFibGUgLS0+XG48bmctdGVtcGxhdGUgI3dyaXRhYmxlPlxuICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZyB7eyBhcHBlYXJhbmNlIH19XCI+XG4gICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZyBuby13cmFwXCI+XG4gICAgICA8aW9uLWNvbCBjbGFzcz1cInRleHQgaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwiJ2R5bmFtaWMnXCJcbiAgICAgICAgICBbY2xhc3MubWRjLXRleHQtZmllbGQtLWludmFsaWRdPVwiZm9ybUNvbnRyb2wudG91Y2hlZCAmJiAoc2lnbkZvcm1Db250cm9sLmludmFsaWQgfHwgZm9ybUNvbnRyb2wuaW52YWxpZClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBtYXRQcmVmaXg+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXJcIj57eyBwbGFjZWhvbGRlciB9fTwvbWF0LWxhYmVsPlxuXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgI2lucHV0RWxlbWVudFxuICAgICAgICAgICAgW21hc2tpdG9dPVwiaW5wdXRQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZSB8IG1hc2tpdG9QbGFjZWhvbGRlcjogbWFzayA6ICFzaG93U2lnbkNvbnRyb2wgJiYgZGVmYXVsdFNpZ25cIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpbnB1dFBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChibHVyKT1cIl9vbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dEZvcm1Db250cm9sXCJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICAgIC8+XG5cbiAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeCAqbmdJZj1cIiFzaG93U2lnbkNvbnRyb2xcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9pb24tY29sPlxuXG4gICAgICA8IS0tIHNpZ24gLS0+XG4gICAgICA8aW9uLWNvbCBjbGFzcz1cInNpZ24gaW9uLW5vLXBhZGRpbmdcIiBbbmdTd2l0Y2hdPVwidHlwZVwiICpuZ0lmPVwic2hvd1NpZ25Db250cm9sXCI+XG4gICAgICAgIDwhLS0gc2lnbiBvbiBsYXRpdHVkZSAtLT5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidsYXRpdHVkZSdcIlxuICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cIidkeW5hbWljJ1wiXG4gICAgICAgICAgW2NsYXNzLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkXT1cImZvcm1Db250cm9sLnRvdWNoZWQgJiYgc2lnbkZvcm1Db250cm9sLmludmFsaWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cInBsYWNlaG9sZGVyICYmIGZsb2F0TGFiZWwgIT09ICduZXZlcidcIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBDT01NT04uTEFUX0xPTkcuTEFUX1NJR05fUExBQ0VIT0xERVJcbiAgICAgICAgICA8L21hdC1sYWJlbD5cblxuICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJzaWduRm9ybUNvbnRyb2xcIiBbdGFiaW5kZXhdPVwidGFiaW5kZXggIT09IHVuZGVmaW5lZCA/IHRhYmluZGV4ICsgMSA6IHVuZGVmaW5lZFwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIjFcIj57eyAnQ09NTU9OLkxBVF9MT05HLkxBVF9TSUdOX04nIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIi0xXCI+e3sgJ0NPTU1PTi5MQVRfTE9ORy5MQVRfU0lHTl9TJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDwhLS0gc2lnbiBvbiBsb25naXR1ZGUgLS0+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbG9uZ2l0dWRlJ1wiXG4gICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwiJ2R5bmFtaWMnXCJcbiAgICAgICAgICBbY2xhc3MubWRjLXRleHQtZmllbGQtLWludmFsaWRdPVwiZm9ybUNvbnRyb2wudG91Y2hlZCAmJiBzaWduRm9ybUNvbnRyb2wuaW52YWxpZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LWxhYmVsICpuZ0lmPVwicGxhY2Vob2xkZXIgJiYgZmxvYXRMYWJlbCAhPT0gJ25ldmVyJ1wiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIENPTU1PTi5MQVRfTE9ORy5MT05HX1NJR05fUExBQ0VIT0xERVJcbiAgICAgICAgICA8L21hdC1sYWJlbD5cblxuICAgICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJzaWduRm9ybUNvbnRyb2xcIiBbdGFiaW5kZXhdPVwidGFiaW5kZXggIT09IHVuZGVmaW5lZCA/IHRhYmluZGV4ICsgMSA6IHVuZGVmaW5lZFwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIjFcIiB0cmFuc2xhdGU+e3sgJ0NPTU1PTi5MQVRfTE9ORy5MT05HX1NJR05fRScgfCB0cmFuc2xhdGUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiLTFcIiB0cmFuc2xhdGU+e3sgJ0NPTU1PTi5MQVRfTE9ORy5MT05HX1NJR05fVycgfCB0cmFuc2xhdGUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuXG4gICAgICAgICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0U3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG4gIDwvaW9uLWdyaWQ+XG5cbiAgPCEtLSBEbyB0aGUgc2FtZSBhcyBNYXRGcm9tRmllbGQgc2luY2UgYW5ndWxhciAxNSAoc2VlIGNvbXBvbmVudCBzb3VyY2UpLS0+XG4gIDxkaXZcbiAgICBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlclwiXG4gICAgW2NsYXNzLm1hdC1tZGMtZm9ybS1maWVsZC1ib3R0b20tYWxpZ25dPVwic3Vic2NyaXB0U2l6aW5nID09PSAnZml4ZWQnXCJcbiAgICBbY2xhc3MubWF0LW1kYy1mb3JtLWZpZWxkLXN1YnNjcmlwdC1keW5hbWljLXNpemVdPVwic3Vic2NyaXB0U2l6aW5nID09PSAnZHluYW1pYydcIlxuICA+XG4gICAgQGlmIChmb3JtQ29udHJvbC50b3VjaGVkICYmIGZvcm1Db250cm9sLmludmFsaWQpIHtcbiAgICAgIDwhLS0gZXJyb3JzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1lcnJvci13cmFwcGVyXCI+XG4gICAgICAgIEBpZiAoZm9ybUNvbnRyb2wuZXJyb3JzIHwgbWFwS2V5cyB8IGFycmF5Rmlyc3Q7IGFzIGVycm9yS2V5KSB7XG4gICAgICAgICAgQHN3aXRjaCAoZXJyb3JLZXkpIHtcbiAgICAgICAgICAgIEBjYXNlICgncmVxdWlyZWQnKSB7XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ2xhdGl0dWRlJykge1xuICAgICAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfTEFUSVRVREU8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnbG9uZ2l0dWRlJykge1xuICAgICAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9OT1RfVkFMSURfTE9OR0lUVURFPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAY2FzZSAoJ21pbicpIHtcbiAgICAgICAgICAgICAgPG1hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICB7eyAnRVJST1IuRklFTERfTUlOX0NPTVBBQ1QnIHwgdHJhbnNsYXRlOiB7IG1pbjogX2Zvcm1hdChmb3JtQ29udHJvbC5lcnJvcnMubWluLm1pbikgfSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBjYXNlICgnbWF4Jykge1xuICAgICAgICAgICAgICA8bWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIHt7ICdFUlJPUi5GSUVMRF9NQVhfQ09NUEFDVCcgfCB0cmFuc2xhdGU6IHsgbWF4OiBfZm9ybWF0KGZvcm1Db250cm9sLmVycm9ycy5tYXgubWF4KSB9IH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGNhc2UgKCdtc2cnKSB7XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAge3sgZm9ybUNvbnRyb2wuZXJyb3JzLm1zZz8ua2V5IHx8IGZvcm1Db250cm9sLmVycm9ycy5tc2cgfCB0cmFuc2xhdGU6IGZvcm1Db250cm9sLmVycm9ycy5tc2c/LnBhcmFtcyB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEVycm9yVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRFcnJvclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPCEtLSBoaW50cyAtLT5cbiAgICAgIDxtYXQtaGludD5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEhpbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9tYXQtaGludD5cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRQcmVmaXhUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdFN1ZmZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0U3VmZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0RXJyb3JUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWVycm9yLFttYXRFcnJvcl1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdEhpbnRUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludDpub3QoW2FsaWduPSdlbmQnXSksW21hdEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC1zcGFjZXJcIj48L2Rpdj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludFthbGlnbj0nZW5kJ11cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, ViewChild, } from '@angular/core';
2
2
  import { AppForm } from '../../core/form/form.class';
3
3
  import { FilesUtils } from '../file/file.utils';
4
- import { isEmptyArray, isNilOrBlank, isNilOrNaN, isNotNil, isNotNilOrBlank } from '../functions';
4
+ import { isEmptyArray, isNil, isNilOrBlank, isNilOrNaN, isNotNil, isNotNilOrBlank } from '../functions';
5
5
  import { MatAutocompleteField } from '../material/autocomplete/material.autocomplete';
6
6
  import { Toasts } from '../toast/toasts';
7
7
  import { NamedFilter } from './named-filter.model';
@@ -180,6 +180,9 @@ export class NamedFilterSelector extends AppForm {
180
180
  console.debug(`${this.logPrefix} import named filter`, data);
181
181
  if (this.filterImportCallback) {
182
182
  data = await this.filterImportCallback(data);
183
+ if (isNil(data)) {
184
+ return; // Abort import if callback returns null or undefined
185
+ }
183
186
  }
184
187
  this.setControlValue(data);
185
188
  this.filterSelected.emit(data.content);
@@ -261,4 +264,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
261
264
  type: ViewChild,
262
265
  args: [MatAutocompleteField, { static: true }]
263
266
  }] } });
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZWQtZmlsdGVyLXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL25hbWVkLWZpbHRlci9uYW1lZC1maWx0ZXItc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbmFtZWQtZmlsdGVyL25hbWVkLWZpbHRlci1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUVOLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFdEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBb0MsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckYsT0FBTyxFQUFFLHdCQUF3QixFQUF3RSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hJLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7O0FBUzFELE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxPQUFZO0lBb0N2QztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUF6Q08sU0FBUyxHQUFHLHlCQUF5QixDQUFDO0lBQ3RDLE1BQU0sQ0FBVTtJQUUz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Q0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ3BELENBQUM7SUFDSCxDQUFDO0lBRVMsZUFBZSxDQUFDLEtBQWtCO1FBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7dUdBL05VLG1CQUFtQiw2S0F5Q3BCLHdCQUF3QjsyRkF6Q3ZCLG1CQUFtQix1bUJBaUNuQixvQkFBb0IscUZDaEVqQyw0ckVBK0RBOzsyRkRoQ2EsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLDJCQUEyQixtQkFHcEIsdUJBQXVCLENBQUMsTUFBTTs7MEJBMkM1QyxNQUFNOzJCQUFDLHdCQUF3Qjt5Q0FsQ3JCLFVBQVU7c0JBQXRCLEtBQUs7Z0JBV0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUU0QyxpQkFBaUI7c0JBQW5FLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEFwcEZvcm0gfSBmcm9tICcuLi8uLi9jb3JlL2Zvcm0vZm9ybS5jbGFzcyc7XG5pbXBvcnQgeyBGaWxlc1V0aWxzIH0gZnJvbSAnLi4vZmlsZS9maWxlLnV0aWxzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOaWxPckJsYW5rLCBpc05pbE9yTmFOLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUZpZWxkIH0gZnJvbSAnLi4vbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZyB9IGZyb20gJy4uL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmltcG9ydCB7IFRvYXN0cyB9IGZyb20gJy4uL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQgeyBJTmFtZWRGaWx0ZXIsIElOYW1lZEZpbHRlckZpbHRlciwgTmFtZWRGaWx0ZXIgfSBmcm9tICcuL25hbWVkLWZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBBUFBfTkFNRURfRklMVEVSX1NFUlZJQ0UsIElOYW1lZEZpbHRlclNlcnZpY2UsIE5hbWVkRmlsdGVyTG9hZE9wdGlvbnMsIE5hbWVkRmlsdGVyV2F0Y2hPcHRpb25zIH0gZnJvbSAnLi9uYW1lZC1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlLCBTdWJzY3JpcHRTaXppbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLW5hbWVkLWZpbHRlci1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9uYW1lZC1maWx0ZXItc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9uYW1lZC1maWx0ZXItc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5hbWVkRmlsdGVyU2VsZWN0b3IgZXh0ZW5kcyBBcHBGb3JtPGFueT4gaW1wbGVtZW50cyBPbkluaXQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9nUHJlZml4ID0gJ1tuYW1lZC1maWx0ZXItc2VsZWN0b3JdJztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1vYmlsZTogYm9vbGVhbjtcblxuICBwcml2YXRlIF9lbnRpdHlOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX2RlbGV0ZURpc2FibGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2V0IGVudGl0eU5hbWUoZW50aXR5TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFlbnRpdHlOYW1lIHx8IHRoaXMuX2VudGl0eU5hbWUgPT09IGVudGl0eU5hbWUpIHJldHVybjtcbiAgICB0aGlzLl9lbnRpdHlOYW1lID0gZW50aXR5TmFtZTtcbiAgICAvLyBVcGRhdGUgYXV0b2NvbXBsZXRlIGZpbHRlclxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGQuZmlsdGVyID0geyAuLi50aGlzLmF1dG9jb21wbGV0ZUZpZWxkLmZpbHRlciwgLi4udGhpcy5nZXRGaWx0ZXIoKSB9O1xuICB9XG5cbiAgZ2V0IGVudGl0eU5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fZW50aXR5TmFtZTtcbiAgfVxuXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIEBJbnB1dCgpIHN1YnNjcmlwdFNpemluZzogU3Vic2NyaXB0U2l6aW5nO1xuXG4gIEBJbnB1dCgpIGZpbHRlckNvbnRlbnRQcm92aWRlcjogKCkgPT4gYW55O1xuICBASW5wdXQoKSBmaWx0ZXJJbXBvcnRDYWxsYmFjazogKG5hbWVkRmlsdGVyOiBOYW1lZEZpbHRlcikgPT4gUHJvbWlzZTxOYW1lZEZpbHRlcj47XG4gIEBJbnB1dCgpIGZpbHRlckZvcm1EaXJ0eTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd0J1dHRvbnMgPSB0cnVlO1xuICBASW5wdXQoKSBleHBvcnRGaWxlTmFtZVByZWZpeCA9ICdmaWx0ZXInO1xuICBASW5wdXQoKSBhdXRvY29tcGxldGVDb25maWc6IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnO1xuICBASW5wdXQoKSBkcm9wQnV0dG9uVGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgY2xlYXJCdXR0b25UaXRsZTogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBmaWx0ZXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZmlsdGVyRGVsZXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TmFtZWRGaWx0ZXI+KCk7XG5cbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGVGaWVsZCwgeyBzdGF0aWM6IHRydWUgfSkgYXV0b2NvbXBsZXRlRmllbGQ6IE1hdEF1dG9jb21wbGV0ZUZpZWxkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJvdGVjdGVkIHBvcG92ZXJDb250cm9sbGVyOiBQb3BvdmVyQ29udHJvbGxlcixcbiAgICBASW5qZWN0KEFQUF9OQU1FRF9GSUxURVJfU0VSVklDRSlcbiAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IElOYW1lZEZpbHRlclNlcnZpY2U8SU5hbWVkRmlsdGVyPGFueT4sIElOYW1lZEZpbHRlckZpbHRlcjxhbnksIGFueT4sIE5hbWVkRmlsdGVyV2F0Y2hPcHRpb25zLCBOYW1lZEZpbHRlckxvYWRPcHRpb25zPlxuICApIHtcbiAgICBzdXBlcihpbmplY3RvciwgZm9ybUJ1aWxkZXIuZ3JvdXAoeyBuYW1lZEZpbHRlcjogW251bGxdIH0pKTtcbiAgICB0aGlzLm1vYmlsZSA9IHRoaXMuc2V0dGluZ3MubW9iaWxlO1xuICB9XG5cbiAgZ2V0IGlzTmV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbE9yTmFOKHRoaXMudmFsdWU/Lm5hbWVkRmlsdGVyPy5pZCk7XG4gIH1cblxuICBnZXQgc2F2ZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5kaXJ0eSB8fCBpc05pbE9yQmxhbmsodGhpcy52YWx1ZS5uYW1lZEZpbHRlcik7XG4gIH1cblxuICBnZXQgZGVsZXRlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RlbGV0ZURpc2FibGVkIHx8IHRoaXMuaXNOZXc7XG4gIH1cblxuICBnZXQgZGlydHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLmRpcnR5IHx8IHRoaXMuZmlsdGVyRm9ybURpcnR5O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpc3RlckF1dG9jb21wbGV0ZUZpZWxkKCduYW1lZEZpbHRlcicsIHtcbiAgICAgIHN1Z2dlc3RGbjogKHZhbHVlLCBmaWx0ZXIpID0+IHRoaXMuZGF0YVNlcnZpY2Uuc3VnZ2VzdCh2YWx1ZSwgZmlsdGVyKSxcbiAgICAgIGF0dHJpYnV0ZXM6IFsnbmFtZSddLFxuICAgICAgZmlsdGVyOiB0aGlzLmdldEZpbHRlcigpLFxuICAgICAgLi4udGhpcy5hdXRvY29tcGxldGVDb25maWcsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzLm5hbWVkRmlsdGVyLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxMDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRmlsdGVyQ2hhbmdlcyh2YWx1ZSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldEZpbHRlcigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRpdHlOYW1lOiB0aGlzLmVudGl0eU5hbWUsXG4gICAgfTtcbiAgfVxuXG4gIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZShldmVudDogVUlFdmVudCkge1xuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgZmlsdGVyQ29udGVudCA9IHRoaXMuZmlsdGVyQ29udGVudFByb3ZpZGVyKCk7XG5cbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gc2F2ZSBuYW1lZCBmaWx0ZXJgLCBmaWx0ZXJDb250ZW50KTtcblxuICAgIGlmIChpc05pbE9yQmxhbmsoZmlsdGVyQ29udGVudCkpIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZCA9IHRoaXMudmFsdWUubmFtZWRGaWx0ZXI7XG4gICAgbGV0IHJlc3VsdDogTmFtZWRGaWx0ZXI7XG5cbiAgICBpZiAodHlwZW9mIGN1cnJlbnRTZWxlY3RlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlc3VsdCA9IE5hbWVkRmlsdGVyLmZyb21PYmplY3Qoe1xuICAgICAgICBuYW1lOiBjdXJyZW50U2VsZWN0ZWQsXG4gICAgICAgIGVudGl0eU5hbWU6IHRoaXMuZW50aXR5TmFtZSxcbiAgICAgICAgY29udGVudDogZmlsdGVyQ29udGVudCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBOYW1lZEZpbHRlci5mcm9tT2JqZWN0KHtcbiAgICAgICAgLi4uY3VycmVudFNlbGVjdGVkLFxuICAgICAgICBjb250ZW50OiBmaWx0ZXJDb250ZW50LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2F2ZWRFbnRpdHkgPSBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLnNhdmUocmVzdWx0KTtcbiAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShzYXZlZEVudGl0eSk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZC5yZWxvYWRJdGVtcygpO1xuICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShldmVudD86IFVJRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnZhbHVlLm5hbWVkRmlsdGVyO1xuXG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IGRlbGV0ZSBuYW1lZCBmaWx0ZXJgLCBkYXRhKTtcblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UuZGVsZXRlKGRhdGEpO1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZC5yZWxvYWRJdGVtcygpO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZC5ibHVycmVkLmVtaXQoKTtcbiAgICAgIHRoaXMuZmlsdGVyRGVsZXRlZC5lbWl0KGRhdGEpO1xuICAgICAgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCB7XG4gICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgbWVzc2FnZTogJ0NPTU1PTi5OQU1FRF9GSUxURVIuREVMRVRFRCcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBleHBvcnQoZXZlbnQ/OiBVSUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBpZCA9IHRoaXMuYXV0b2NvbXBsZXRlRmllbGQudmFsdWU/LmlkO1xuXG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IGV4cG9ydCBuYW1lZCBmaWx0ZXJgLCBpZCk7XG5cbiAgICBpZiAoIWlkKSByZXR1cm47XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5kYXRhU2VydmljZS5sb2FkKGlkLCB7IHdpdGhDb250ZW50OiB0cnVlIH0pO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIEZpbGVzVXRpbHMud3JpdGVUZXh0VG9GaWxlKEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpLCB7XG4gICAgICAgIHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgZmlsZW5hbWU6IGAke3RoaXMuZXhwb3J0RmlsZU5hbWVQcmVmaXh9LSR7ZGF0YS5lbnRpdHlOYW1lfS0ke2RhdGEubmFtZX0uanNvbmAsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCB7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdDT01NT04uTkFNRURfRklMVEVSLk5PVF9GT1VORCcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbXBvcnQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBGaWxlc1V0aWxzLnNob3dVcGxvYWRQb3BvdmVyKHRoaXMucG9wb3ZlckNvbnRyb2xsZXIsIGV2ZW50LCB7XG4gICAgICB1cGxvYWRGbjogKGZpbGUpID0+IEZpbGVzVXRpbHMucmVhZEFzVGV4dChmaWxlKSxcbiAgICAgIHRpdGxlOiAnQ09NTU9OLk5BTUVEX0ZJTFRFUi5JTVBPUlQnLFxuICAgICAgZmlsZUV4dGVuc2lvbjogJy5qc29uJyxcbiAgICAgIHVuaXF1ZUZpbGU6IHRydWUsXG4gICAgICBpbnN0YW50VXBsb2FkOiB0cnVlLFxuICAgIH0pO1xuICAgIGlmICghcmVzdWx0IHx8IGlzRW1wdHlBcnJheShyZXN1bHQuZGF0YSkpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHJlc3VsdC5kYXRhWzBdLnJlc3BvbnNlLmJvZHkpO1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IGltcG9ydCBuYW1lZCBmaWx0ZXJgLCBkYXRhKTtcbiAgICAgIGlmICh0aGlzLmZpbHRlckltcG9ydENhbGxiYWNrKSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLmZpbHRlckltcG9ydENhbGxiYWNrKGRhdGEpO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRDb250cm9sVmFsdWUoZGF0YSk7XG4gICAgICB0aGlzLmZpbHRlclNlbGVjdGVkLmVtaXQoZGF0YS5jb250ZW50KTtcbiAgICAgIHRoaXMubWFya0FzRGlydHkoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCB7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdDT01NT04uTkFNRURfRklMVEVSLklNUE9SVF9GQUlMRUQnLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG9uRmlsdGVyQ2hhbmdlcyh2YWx1ZTogTmFtZWRGaWx0ZXIgfCBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gZmlsdGVyIGNoYW5nZWAsIHZhbHVlKTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlPy5pZCAmJiBpc05vdE5pbCh2YWx1ZS5pZCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmxvYWQodmFsdWUuaWQsIHsgd2l0aENvbnRlbnQ6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuX2RlbGV0ZURpc2FibGVkID0gIXRoaXMuZGF0YVNlcnZpY2UuY2FuVXNlcldyaXRlKGRhdGEpO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGlzTm90TmlsT3JCbGFuayhkYXRhPy5jb250ZW50KSA/IGRhdGEuY29udGVudCA6IG51bGw7XG4gICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICB0aGlzLmZpbHRlclNlbGVjdGVkLmVtaXQoZmlsdGVyKTtcbiAgICAgICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCB7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICBtZXNzYWdlOiAnQ09NTU9OLk5BTUVEX0ZJTFRFUi5MT0FEX0ZBSUxFRCcsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkLmFwcGx5SW1wbGljaXRWYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkLmFwcGx5SW1wbGljaXRWYWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRDb250cm9sVmFsdWUodmFsdWU6IE5hbWVkRmlsdGVyKSB7XG4gICAgdGhpcy5zZXRWYWx1ZSh7IG5hbWVkRmlsdGVyOiB2YWx1ZSB9KTtcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkLmJsdXJyZWQuZW1pdCgpO1xuICB9XG59XG4iLCI8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbD5cbiAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1jb250YWluZXJcIiBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgICAgPG1hdC1hdXRvY29tcGxldGUtZmllbGRcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVkRmlsdGVyXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiYXV0b2NvbXBsZXRlRmllbGRzLm5hbWVkRmlsdGVyXCJcbiAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidDT01NT04uTkFNRURfRklMVEVSLlRJVExFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbY2xlYXJhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2Ryb3BCdXR0b25UaXRsZV09XCJkcm9wQnV0dG9uVGl0bGVcIlxuICAgICAgICAgICAgW2NsZWFyQnV0dG9uVGl0bGVdPVwiY2xlYXJCdXR0b25UaXRsZVwiXG4gICAgICAgICAgICBbYXBwbHlJbXBsaWNpdFZhbHVlXT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgbWF0U3VmZml4ICpuZ0lmPVwic2hvd0J1dHRvbnMgJiYgIW1vYmlsZVwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZS1maWVsZD5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIiAqbmdJZj1cIm1vYmlsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbnNcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cbjwvaW9uLWdyaWQ+XG5cblxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnM+XG4gIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgW2NvbG9yXT1cIidwcmltYXJ5J1wiXG4gICAgICBbZGlzYWJsZWRdPVwic2F2ZURpc2FibGVkXCJcbiAgICAgIFt0aXRsZV09XCInQ09NTU9OLk5BTUVEX0ZJTFRFUi5TQVZFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAoY2xpY2spPVwic2F2ZSgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgIDxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj5cbiAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImlzTmV3XCIgY2xhc3M9XCJpY29uLXNlY29uZGFyeVwiIHN0eWxlPVwibGVmdDogMTJweDsgdG9wOiAwcHhcIj5hZGQ8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPVwiZGVsZXRlRGlzYWJsZWRcIlxuICAgICAgW3RpdGxlXT1cIidDT01NT04uTkFNRURfRklMVEVSLkRFTEVURScgfCB0cmFuc2xhdGVcIlxuICAgICAgKGNsaWNrKT1cImRlbGV0ZSgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1vcmVNZW51XCIgKGNsaWNrKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuICA8bWF0LW1lbnUgI21vcmVNZW51PVwibWF0TWVudVwiPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiZXhwb3J0KCRldmVudClcIiBbZGlzYWJsZWRdPVwiaXNOZXdcIj5cbiAgICAgIDxtYXQtaWNvbj5maWxlX2Rvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgIDxpb24tbGFiZWw+e3sgJ0NPTU1PTi5OQU1FRF9GSUxURVIuRVhQT1JUJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWxhYmVsPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiaW1wb3J0KCRldmVudClcIj5cbiAgICAgIDxtYXQtaWNvbj5maWxlX3VwbG9hZDwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsPnt7ICdDT01NT04uTkFNRURfRklMVEVSLklNUE9SVCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvaW9uLWxhYmVsPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1tZW51PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZWQtZmlsdGVyLXNlbGVjdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL25hbWVkLWZpbHRlci9uYW1lZC1maWx0ZXItc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbmFtZWQtZmlsdGVyL25hbWVkLWZpbHRlci1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUVOLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRXRGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQW9DLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSx3QkFBd0IsRUFBd0UsTUFBTSx3QkFBd0IsQ0FBQztBQUN4SSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7OztBQVMxRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsT0FBWTtJQW9DdkM7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUVBO0lBekNPLFNBQVMsR0FBRyx5QkFBeUIsQ0FBQztJQUN0QyxNQUFN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bmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEFwcEZvcm0gfSBmcm9tICcuLi8uLi9jb3JlL2Zvcm0vZm9ybS5jbGFzcyc7XG5pbXBvcnQgeyBGaWxlc1V0aWxzIH0gZnJvbSAnLi4vZmlsZS9maWxlLnV0aWxzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOaWxPck5hTiwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuayB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVGaWVsZCB9IGZyb20gJy4uL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWcgfSBmcm9tICcuLi9tYXRlcmlhbC9hdXRvY29tcGxldGUvbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmNvbmZpZyc7XG5pbXBvcnQgeyBUb2FzdHMgfSBmcm9tICcuLi90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHsgSU5hbWVkRmlsdGVyLCBJTmFtZWRGaWx0ZXJGaWx0ZXIsIE5hbWVkRmlsdGVyIH0gZnJvbSAnLi9uYW1lZC1maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHsgQVBQX05BTUVEX0ZJTFRFUl9TRVJWSUNFLCBJTmFtZWRGaWx0ZXJTZXJ2aWNlLCBOYW1lZEZpbHRlckxvYWRPcHRpb25zLCBOYW1lZEZpbHRlcldhdGNoT3B0aW9ucyB9IGZyb20gJy4vbmFtZWQtZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSwgU3Vic2NyaXB0U2l6aW5nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1uYW1lZC1maWx0ZXItc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vbmFtZWQtZmlsdGVyLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbmFtZWQtZmlsdGVyLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOYW1lZEZpbHRlclNlbGVjdG9yIGV4dGVuZHMgQXBwRm9ybTxhbnk+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvZ1ByZWZpeCA9ICdbbmFtZWQtZmlsdGVyLXNlbGVjdG9yXSc7XG4gIHByb3RlY3RlZCByZWFkb25seSBtb2JpbGU6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBfZW50aXR5TmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9kZWxldGVEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNldCBlbnRpdHlOYW1lKGVudGl0eU5hbWU6IHN0cmluZykge1xuICAgIGlmICghZW50aXR5TmFtZSB8fCB0aGlzLl9lbnRpdHlOYW1lID09PSBlbnRpdHlOYW1lKSByZXR1cm47XG4gICAgdGhpcy5fZW50aXR5TmFtZSA9IGVudGl0eU5hbWU7XG4gICAgLy8gVXBkYXRlIGF1dG9jb21wbGV0ZSBmaWx0ZXJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkLmZpbHRlciA9IHsgLi4udGhpcy5hdXRvY29tcGxldGVGaWVsZC5maWx0ZXIsIC4uLnRoaXMuZ2V0RmlsdGVyKCkgfTtcbiAgfVxuXG4gIGdldCBlbnRpdHlOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2VudGl0eU5hbWU7XG4gIH1cblxuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlO1xuICBASW5wdXQoKSBzdWJzY3JpcHRTaXppbmc6IFN1YnNjcmlwdFNpemluZztcblxuICBASW5wdXQoKSBmaWx0ZXJDb250ZW50UHJvdmlkZXI6ICgpID0+IGFueTtcbiAgQElucHV0KCkgZmlsdGVySW1wb3J0Q2FsbGJhY2s6IChuYW1lZEZpbHRlcjogTmFtZWRGaWx0ZXIpID0+IFByb21pc2U8TmFtZWRGaWx0ZXI+O1xuICBASW5wdXQoKSBmaWx0ZXJGb3JtRGlydHk6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dCdXR0b25zID0gdHJ1ZTtcbiAgQElucHV0KCkgZXhwb3J0RmlsZU5hbWVQcmVmaXggPSAnZmlsdGVyJztcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlQ29uZmlnOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZztcbiAgQElucHV0KCkgZHJvcEJ1dHRvblRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsZWFyQnV0dG9uVGl0bGU6IHN0cmluZztcblxuICBAT3V0cHV0KCkgZmlsdGVyU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGZpbHRlckRlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5hbWVkRmlsdGVyPigpO1xuXG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlRmllbGQsIHsgc3RhdGljOiB0cnVlIH0pIGF1dG9jb21wbGV0ZUZpZWxkOiBNYXRBdXRvY29tcGxldGVGaWVsZDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCBwb3BvdmVyQ29udHJvbGxlcjogUG9wb3ZlckNvbnRyb2xsZXIsXG4gICAgQEluamVjdChBUFBfTkFNRURfRklMVEVSX1NFUlZJQ0UpXG4gICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBJTmFtZWRGaWx0ZXJTZXJ2aWNlPElOYW1lZEZpbHRlcjxhbnk+LCBJTmFtZWRGaWx0ZXJGaWx0ZXI8YW55LCBhbnk+LCBOYW1lZEZpbHRlcldhdGNoT3B0aW9ucywgTmFtZWRGaWx0ZXJMb2FkT3B0aW9ucz5cbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IsIGZvcm1CdWlsZGVyLmdyb3VwKHsgbmFtZWRGaWx0ZXI6IFtudWxsXSB9KSk7XG4gICAgdGhpcy5tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcbiAgfVxuXG4gIGdldCBpc05ldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOaWxPck5hTih0aGlzLnZhbHVlPy5uYW1lZEZpbHRlcj8uaWQpO1xuICB9XG5cbiAgZ2V0IHNhdmVEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZGlydHkgfHwgaXNOaWxPckJsYW5rKHRoaXMudmFsdWUubmFtZWRGaWx0ZXIpO1xuICB9XG5cbiAgZ2V0IGRlbGV0ZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kZWxldGVEaXNhYmxlZCB8fCB0aGlzLmlzTmV3O1xuICB9XG5cbiAgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5kaXJ0eSB8fCB0aGlzLmZpbHRlckZvcm1EaXJ0eTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVnaXN0ZXJBdXRvY29tcGxldGVGaWVsZCgnbmFtZWRGaWx0ZXInLCB7XG4gICAgICBzdWdnZXN0Rm46ICh2YWx1ZSwgZmlsdGVyKSA9PiB0aGlzLmRhdGFTZXJ2aWNlLnN1Z2dlc3QodmFsdWUsIGZpbHRlciksXG4gICAgICBhdHRyaWJ1dGVzOiBbJ25hbWUnXSxcbiAgICAgIGZpbHRlcjogdGhpcy5nZXRGaWx0ZXIoKSxcbiAgICAgIC4uLnRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuZm9ybS5jb250cm9scy5uYW1lZEZpbHRlci52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5vbkZpbHRlckNoYW5nZXModmFsdWUpKVxuICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXIoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50aXR5TmFtZTogdGhpcy5lbnRpdHlOYW1lLFxuICAgIH07XG4gIH1cblxuICBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoZXZlbnQ6IFVJRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQ/LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGZpbHRlckNvbnRlbnQgPSB0aGlzLmZpbHRlckNvbnRlbnRQcm92aWRlcigpO1xuXG4gICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IHNhdmUgbmFtZWQgZmlsdGVyYCwgZmlsdGVyQ29udGVudCk7XG5cbiAgICBpZiAoaXNOaWxPckJsYW5rKGZpbHRlckNvbnRlbnQpKSByZXR1cm47XG5cbiAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWQgPSB0aGlzLnZhbHVlLm5hbWVkRmlsdGVyO1xuICAgIGxldCByZXN1bHQ6IE5hbWVkRmlsdGVyO1xuXG4gICAgaWYgKHR5cGVvZiBjdXJyZW50U2VsZWN0ZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXN1bHQgPSBOYW1lZEZpbHRlci5mcm9tT2JqZWN0KHtcbiAgICAgICAgbmFtZTogY3VycmVudFNlbGVjdGVkLFxuICAgICAgICBlbnRpdHlOYW1lOiB0aGlzLmVudGl0eU5hbWUsXG4gICAgICAgIGNvbnRlbnQ6IGZpbHRlckNvbnRlbnQsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gTmFtZWRGaWx0ZXIuZnJvbU9iamVjdCh7XG4gICAgICAgIC4uLmN1cnJlbnRTZWxlY3RlZCxcbiAgICAgICAgY29udGVudDogZmlsdGVyQ29udGVudCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNhdmVkRW50aXR5ID0gYXdhaXQgdGhpcy5kYXRhU2VydmljZS5zYXZlKHJlc3VsdCk7XG4gICAgdGhpcy5zZXRDb250cm9sVmFsdWUoc2F2ZWRFbnRpdHkpO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGQucmVsb2FkSXRlbXMoKTtcbiAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZXZlbnQ/OiBVSUV2ZW50KSB7XG4gICAgaWYgKGV2ZW50Py5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBkYXRhID0gdGhpcy52YWx1ZS5uYW1lZEZpbHRlcjtcblxuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBkZWxldGUgbmFtZWQgZmlsdGVyYCwgZGF0YSk7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmRlbGV0ZShkYXRhKTtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGQucmVsb2FkSXRlbXMoKTtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGQuYmx1cnJlZC5lbWl0KCk7XG4gICAgICB0aGlzLmZpbHRlckRlbGV0ZWQuZW1pdChkYXRhKTtcbiAgICAgIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwge1xuICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgIG1lc3NhZ2U6ICdDT01NT04uTkFNRURfRklMVEVSLkRFTEVURUQnLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZXhwb3J0KGV2ZW50PzogVUlFdmVudCkge1xuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgaWQgPSB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkLnZhbHVlPy5pZDtcblxuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBleHBvcnQgbmFtZWQgZmlsdGVyYCwgaWQpO1xuXG4gICAgaWYgKCFpZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UubG9hZChpZCwgeyB3aXRoQ29udGVudDogdHJ1ZSB9KTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBGaWxlc1V0aWxzLndyaXRlVGV4dFRvRmlsZShKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKSwge1xuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgIGZpbGVuYW1lOiBgJHt0aGlzLmV4cG9ydEZpbGVOYW1lUHJlZml4fS0ke2RhdGEuZW50aXR5TmFtZX0tJHtkYXRhLm5hbWV9Lmpzb25gLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwge1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnQ09NTU9OLk5BTUVEX0ZJTFRFUi5OT1RfRk9VTkQnLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW1wb3J0KGV2ZW50OiBFdmVudCkge1xuICAgIGlmIChldmVudD8uZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRmlsZXNVdGlscy5zaG93VXBsb2FkUG9wb3Zlcih0aGlzLnBvcG92ZXJDb250cm9sbGVyLCBldmVudCwge1xuICAgICAgdXBsb2FkRm46IChmaWxlKSA9PiBGaWxlc1V0aWxzLnJlYWRBc1RleHQoZmlsZSksXG4gICAgICB0aXRsZTogJ0NPTU1PTi5OQU1FRF9GSUxURVIuSU1QT1JUJyxcbiAgICAgIGZpbGVFeHRlbnNpb246ICcuanNvbicsXG4gICAgICB1bmlxdWVGaWxlOiB0cnVlLFxuICAgICAgaW5zdGFudFVwbG9hZDogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3VsdCB8fCBpc0VtcHR5QXJyYXkocmVzdWx0LmRhdGEpKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShyZXN1bHQuZGF0YVswXS5yZXNwb25zZS5ib2R5KTtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBpbXBvcnQgbmFtZWQgZmlsdGVyYCwgZGF0YSk7XG4gICAgICBpZiAodGhpcy5maWx0ZXJJbXBvcnRDYWxsYmFjaykge1xuICAgICAgICBkYXRhID0gYXdhaXQgdGhpcy5maWx0ZXJJbXBvcnRDYWxsYmFjayhkYXRhKTtcbiAgICAgICAgaWYgKGlzTmlsKGRhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuOyAvLyBBYm9ydCBpbXBvcnQgaWYgY2FsbGJhY2sgcmV0dXJucyBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShkYXRhKTtcbiAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWQuZW1pdChkYXRhLmNvbnRlbnQpO1xuICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgbWVzc2FnZTogJ0NPTU1PTi5OQU1FRF9GSUxURVIuSU1QT1JUX0ZBSUxFRCcsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25GaWx0ZXJDaGFuZ2VzKHZhbHVlOiBOYW1lZEZpbHRlciB8IHN0cmluZykge1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBmaWx0ZXIgY2hhbmdlYCwgdmFsdWUpO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWU/LmlkICYmIGlzTm90TmlsKHZhbHVlLmlkKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UubG9hZCh2YWx1ZS5pZCwgeyB3aXRoQ29udGVudDogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5fZGVsZXRlRGlzYWJsZWQgPSAhdGhpcy5kYXRhU2VydmljZS5jYW5Vc2VyV3JpdGUoZGF0YSk7XG5cbiAgICAgICAgY29uc3QgZmlsdGVyID0gaXNOb3ROaWxPckJsYW5rKGRhdGE/LmNvbnRlbnQpID8gZGF0YS5jb250ZW50IDogbnVsbDtcbiAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWQuZW1pdChmaWx0ZXIpO1xuICAgICAgICAgIHRoaXMubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIG1lc3NhZ2U6ICdDT01NT04uTkFNRURfRklMVEVSLkxPQURfRkFJTEVEJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGQuYXBwbHlJbXBsaWNpdFZhbHVlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGQuYXBwbHlJbXBsaWNpdFZhbHVlID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldENvbnRyb2xWYWx1ZSh2YWx1ZTogTmFtZWRGaWx0ZXIpIHtcbiAgICB0aGlzLnNldFZhbHVlKHsgbmFtZWRGaWx0ZXI6IHZhbHVlIH0pO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGQuYmx1cnJlZC5lbWl0KCk7XG4gIH1cbn1cbiIsIjxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sPlxuICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZS1maWVsZFxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZWRGaWx0ZXJcIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJhdXRvY29tcGxldGVGaWVsZHMubmFtZWRGaWx0ZXJcIlxuICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0NPTU1PTi5OQU1FRF9GSUxURVIuVElUTEUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZHJvcEJ1dHRvblRpdGxlXT1cImRyb3BCdXR0b25UaXRsZVwiXG4gICAgICAgICAgICBbY2xlYXJCdXR0b25UaXRsZV09XCJjbGVhckJ1dHRvblRpdGxlXCJcbiAgICAgICAgICAgIFthcHBseUltcGxpY2l0VmFsdWVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRTdWZmaXggKm5nSWY9XCJzaG93QnV0dG9ucyAmJiAhbW9iaWxlXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlLWZpZWxkPlxuICAgICAgPC9mb3JtPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiICpuZ0lmPVwibW9iaWxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uc1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuPC9pb24tZ3JpZD5cblxuXG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9ucz5cbiAgPGJ1dHRvblxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICBbY29sb3JdPVwiJ3ByaW1hcnknXCJcbiAgICAgIFtkaXNhYmxlZF09XCJzYXZlRGlzYWJsZWRcIlxuICAgICAgW3RpdGxlXT1cIidDT01NT04uTkFNRURfRklMVEVSLlNBVkUnIHwgdHJhbnNsYXRlXCJcbiAgICAgIChjbGljayk9XCJzYXZlKCRldmVudClcIlxuICAgICAgPlxuICAgICAgPG1hdC1pY29uPnNhdmU8L21hdC1pY29uPlxuICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaXNOZXdcIiBjbGFzcz1cImljb24tc2Vjb25kYXJ5XCIgc3R5bGU9XCJsZWZ0OiAxMnB4OyB0b3A6IDBweFwiPmFkZDwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIFtkaXNhYmxlZF09XCJkZWxldGVEaXNhYmxlZFwiXG4gICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5OQU1FRF9GSUxURVIuREVMRVRFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAoY2xpY2spPVwiZGVsZXRlKCRldmVudClcIlxuICAgICAgPlxuICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibW9yZU1lbnVcIiAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxtYXQtbWVudSAjbW9yZU1lbnU9XCJtYXRNZW51XCI+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJleHBvcnQoJGV2ZW50KVwiIFtkaXNhYmxlZF09XCJpc05ld1wiPlxuICAgICAgPG1hdC1pY29uPmZpbGVfZG93bmxvYWQ8L21hdC1pY29uPlxuICAgICAgPGlvbi1sYWJlbD57eyAnQ09NTU9OLk5BTUVEX0ZJTFRFUi5FWFBPUlQnIHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJpbXBvcnQoJGV2ZW50KVwiPlxuICAgICAgPG1hdC1pY29uPmZpbGVfdXBsb2FkPC9tYXQtaWNvbj5cbiAgICAgIDxpb24tbGFiZWw+e3sgJ0NPTU1PTi5OQU1FRF9GSUxURVIuSU1QT1JUJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9pb24tbGFiZWw+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LW1lbnU+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -70,6 +70,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
70
70
  name: 'arrayFirst',
71
71
  }]
72
72
  }] });
73
+ export class ArrayLastPipe {
74
+ transform(val) {
75
+ if (!Array.isArray(val))
76
+ return null;
77
+ return val.length > 0 ? val[val.length - 1] : null;
78
+ }
79
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ArrayLastPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
80
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: ArrayLastPipe, name: "arrayLast" });
81
+ }
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ArrayLastPipe, decorators: [{
83
+ type: Pipe,
84
+ args: [{
85
+ name: 'arrayLast',
86
+ }]
87
+ }] });
73
88
  export class ArrayPluckPipe {
74
89
  /**
75
90
  *
@@ -138,4 +153,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
138
153
  name: 'arrayJoin',
139
154
  }]
140
155
  }] });
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlzLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9hcnJheXMucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUszRCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFNBQVMsQ0FBVSxHQUFrQjtRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN0QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7dUdBSlUsaUJBQWlCO3FHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBSDdCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGlCQUFpQjtpQkFDeEI7O0FBV0QsTUFBTSxPQUFPLGNBQWM7SUFDekIsU0FBUyxDQUFVLEdBQWtCO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3JDLE9BQU8sR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQzt1R0FKVSxjQUFjO3FHQUFkLGNBQWM7OzJGQUFkLGNBQWM7a0JBSDFCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGNBQWM7aUJBQ3JCOztBQVdELE1BQU0sT0FBTyxlQUFlO0lBQzFCLFNBQVMsQ0FBVSxHQUFrQixFQUFFLElBQW1FO1FBQ3hHLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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Q0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3JDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDO3VHQUpVLGVBQWU7cUdBQWYsZUFBZTs7MkZBQWYsZUFBZTtrQkFIM0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsYUFBYTtpQkFDcEI7O0FBV0QsTUFBTSxPQUFPLGFBQWE7SUFDeEIsU0FBUyxDQUFVLEdBQWtCLEVBQUUsU0FBaUI7UUFDdEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDbkMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO3VHQUpVLGFBQWE7cUdBQWIsYUFBYTs7MkZBQWIsYUFBYTtrQkFIekIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsV0FBVztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUJ5UGF0aCwgaXNOb3ROaWwgfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc05vdEVtcHR5QXJyYXknLFxufSlcbmV4cG9ydCBjbGFzcyBOb3RFbXB0eUFycmF5UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VCA9IGFueT4odmFsOiB1bmtub3duIHwgVFtdKTogYm9vbGVhbiB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdmFsLmxlbmd0aCA+IDA7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnaXNFbXB0eUFycmF5Jyxcbn0pXG5leHBvcnQgY2xhc3MgRW1wdHlBcnJheVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQgPSBhbnk+KHZhbDogdW5rbm93biB8IFRbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gdmFsLmxlbmd0aCA9PT0gMDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdpc0FycmF5TGVuZ3RoJyxcbn0pXG5leHBvcnQgY2xhc3MgQXJyYXlMZW5ndGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUID0gYW55Pih2YWw6IHVua25vd24gfCBUW10sIGFyZ3M/OiB7IGdyZWF0ZXJUaGFuPzogbnVtYmVyOyBlcXVhbHM/OiBudW1iZXI7IGxlc3NUaGFuPzogbnVtYmVyIH0pOiBib29sZWFuIHtcbiAgICBhcmdzID0gYXJncyB8fCB7fTtcbiAgICBjb25zdCBzaXplID0gIUFycmF5LmlzQXJyYXkodmFsKSA/IDAgOiB2YWwubGVuZ3RoO1xuICAgIGlmIChpc05vdE5pbChhcmdzLmxlc3NUaGFuKSkge1xuICAgICAgcmV0dXJuIHNpemUgPCBhcmdzLmxlc3NUaGFuO1xuICAgIH1cbiAgICBpZiAoaXNOb3ROaWwoYXJncy5ncmVhdGVyVGhhbikpIHtcbiAgICAgIHJldHVybiBzaXplID4gYXJncy5ncmVhdGVyVGhhbjtcbiAgICB9XG4gICAgaWYgKGlzTm90TmlsKGFyZ3MuZXF1YWxzKSkge1xuICAgICAgcmV0dXJuIHNpemUgPT09IGFyZ3MuZXF1YWxzO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnYXJyYXlGaXJzdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5Rmlyc3RQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUID0gYW55Pih2YWw6IHVua25vd24gfCBUW10pOiBUIHwgbnVsbCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiBudWxsO1xuICAgIHJldHVybiB2YWwubGVuZ3RoID4gMCA/IHZhbFswXSA6IG51bGw7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnYXJyYXlQbHVjaycsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5UGx1Y2tQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gdmFsXG4gICAqIEBwYXJhbSBvcHRzIHByb3BlcnR5IHRvIGdldCwgb3Igb3B0aW9uc1xuICAgKi9cbiAgdHJhbnNmb3JtPFQgPSBhbnk+KHZhbDogdW5rbm93biB8IFRbXSwgb3B0czogc3RyaW5nIHwgc3RyaW5nW10gfCB7IHByb3BlcnR5OiBzdHJpbmcgfCBzdHJpbmdbXTsgb21pdE5pbD86IGJvb2xlYW4gfSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSB8fCAhb3B0cykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcHJvcGVydHkgPSB0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheShvcHRzKSA/IChvcHRzIGFzIHN0cmluZyB8IHN0cmluZ1tdKSA6IG9wdHMucHJvcGVydHk7XG4gICAgcmV0dXJuIG9wdHNbJ29taXROaWwnXSAhPT0gdHJ1ZVxuICAgICAgPyB2YWwubWFwKCh2YWx1ZSkgPT4gZ2V0UHJvcGVydHlCeVBhdGgodmFsdWUsIHByb3BlcnR5KSlcbiAgICAgIDogdmFsLm1hcCgodmFsdWUpID0+IGdldFByb3BlcnR5QnlQYXRoKHZhbHVlLCBwcm9wZXJ0eSkpLmZpbHRlcihpc05vdE5pbCk7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnYXJyYXlJbmNsdWRlcycsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5SW5jbHVkZXNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUID0gYW55Pih2YWw6IHVua25vd24gfCBUW10sIHNlYXJjaEVsZW1lbnQ6IFQsIGZyb21JbmRleD86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICh2YWwgJiYgdmFsLmluY2x1ZGVzKHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCkpIHx8IGZhbHNlO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2FycmF5RmlsdGVyJyxcbn0pXG5leHBvcnQgY2xhc3MgQXJyYXlGaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUID0gYW55Pih2YWw6IHVua25vd24gfCBUW10sIGZpbHRlckZuOiAoVCkgPT4gYm9vbGVhbik6IFRbXSB8IG51bGwge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdmFsLmZpbHRlcihmaWx0ZXJGbik7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnYXJyYXlKb2luJyxcbn0pXG5leHBvcnQgY2xhc3MgQXJyYXlKb2luUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VCA9IGFueT4odmFsOiB1bmtub3duIHwgVFtdLCBzZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiAnJztcbiAgICByZXR1cm4gdmFsLmpvaW4oc2VwYXJhdG9yKSB8fCAnJztcbiAgfVxufVxuIl19
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlzLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9waXBlcy9hcnJheXMucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUszRCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFNBQVMsQ0FBVSxHQUFrQjtRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN0QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7dUdBSlUsaUJBQWlCO3FHQUFqQixpQkFBaUI7OzJGQUFqQixpQkFBaUI7a0JBSDdCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGlCQUFpQjtpQkFDeEI7O0FBV0QsTUFBTSxPQUFPLGNBQWM7SUFDekIsU0FBUyxDQUFVLEdBQWtCO1FBQ25DLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3JDLE9BQU8sR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQzt1R0FKVSxjQUFjO3FHQUFkLGNBQWM7OzJGQUFkLGNBQWM7a0JBSDFCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGNBQWM7aUJBQ3JCOztBQVdELE1BQU0sT0FBTyxlQUFlO0lBQzFCLFNBQVMsQ0FBVSxHQUFrQixFQUFFLElBQW1FO1FBQ3hHLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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LENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDdEMsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNsRSxDQUFDO3VHQUpVLGlCQUFpQjtxR0FBakIsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUg3QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxlQUFlO2lCQUN0Qjs7QUFXRCxNQUFNLE9BQU8sZUFBZTtJQUMxQixTQUFTLENBQVUsR0FBa0IsRUFBRSxRQUF3QjtRQUM3RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNyQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDOUIsQ0FBQzt1R0FKVSxlQUFlO3FHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBSDNCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGFBQWE7aUJBQ3BCOztBQVdELE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFNBQVMsQ0FBVSxHQUFrQixFQUFFLFNBQWlCO1FBQ3RELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ25DLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQzt1R0FKVSxhQUFhO3FHQUFiLGFBQWE7OzJGQUFiLGFBQWE7a0JBSHpCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFdBQVc7aUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0UHJvcGVydHlCeVBhdGgsIGlzTm90TmlsIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuQFBpcGUoe1xuICBuYW1lOiAnaXNOb3RFbXB0eUFycmF5Jyxcbn0pXG5leHBvcnQgY2xhc3MgTm90RW1wdHlBcnJheVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQgPSBhbnk+KHZhbDogdW5rbm93biB8IFRbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHZhbC5sZW5ndGggPiAwO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2lzRW1wdHlBcnJheScsXG59KVxuZXhwb3J0IGNsYXNzIEVtcHR5QXJyYXlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUID0gYW55Pih2YWw6IHVua25vd24gfCBUW10pOiBib29sZWFuIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIHRydWU7XG4gICAgcmV0dXJuIHZhbC5sZW5ndGggPT09IDA7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnaXNBcnJheUxlbmd0aCcsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5TGVuZ3RoUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VCA9IGFueT4odmFsOiB1bmtub3duIHwgVFtdLCBhcmdzPzogeyBncmVhdGVyVGhhbj86IG51bWJlcjsgZXF1YWxzPzogbnVtYmVyOyBsZXNzVGhhbj86IG51bWJlciB9KTogYm9vbGVhbiB7XG4gICAgYXJncyA9IGFyZ3MgfHwge307XG4gICAgY29uc3Qgc2l6ZSA9ICFBcnJheS5pc0FycmF5KHZhbCkgPyAwIDogdmFsLmxlbmd0aDtcbiAgICBpZiAoaXNOb3ROaWwoYXJncy5sZXNzVGhhbikpIHtcbiAgICAgIHJldHVybiBzaXplIDwgYXJncy5sZXNzVGhhbjtcbiAgICB9XG4gICAgaWYgKGlzTm90TmlsKGFyZ3MuZ3JlYXRlclRoYW4pKSB7XG4gICAgICByZXR1cm4gc2l6ZSA+IGFyZ3MuZ3JlYXRlclRoYW47XG4gICAgfVxuICAgIGlmIChpc05vdE5pbChhcmdzLmVxdWFscykpIHtcbiAgICAgIHJldHVybiBzaXplID09PSBhcmdzLmVxdWFscztcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2FycmF5Rmlyc3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBcnJheUZpcnN0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VCA9IGFueT4odmFsOiB1bmtub3duIHwgVFtdKTogVCB8IG51bGwge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdmFsLmxlbmd0aCA+IDAgPyB2YWxbMF0gOiBudWxsO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2FycmF5TGFzdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5TGFzdFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQgPSBhbnk+KHZhbDogdW5rbm93biB8IFRbXSk6IFQgfCBudWxsIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHZhbC5sZW5ndGggPiAwID8gdmFsW3ZhbC5sZW5ndGggLSAxXSA6IG51bGw7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnYXJyYXlQbHVjaycsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5UGx1Y2tQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gdmFsXG4gICAqIEBwYXJhbSBvcHRzIHByb3BlcnR5IHRvIGdldCwgb3Igb3B0aW9uc1xuICAgKi9cbiAgdHJhbnNmb3JtPFQgPSBhbnk+KHZhbDogdW5rbm93biB8IFRbXSwgb3B0czogc3RyaW5nIHwgc3RyaW5nW10gfCB7IHByb3BlcnR5OiBzdHJpbmcgfCBzdHJpbmdbXTsgb21pdE5pbD86IGJvb2xlYW4gfSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSB8fCAhb3B0cykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcHJvcGVydHkgPSB0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheShvcHRzKSA/IChvcHRzIGFzIHN0cmluZyB8IHN0cmluZ1tdKSA6IG9wdHMucHJvcGVydHk7XG4gICAgcmV0dXJuIG9wdHNbJ29taXROaWwnXSAhPT0gdHJ1ZVxuICAgICAgPyB2YWwubWFwKCh2YWx1ZSkgPT4gZ2V0UHJvcGVydHlCeVBhdGgodmFsdWUsIHByb3BlcnR5KSlcbiAgICAgIDogdmFsLm1hcCgodmFsdWUpID0+IGdldFByb3BlcnR5QnlQYXRoKHZhbHVlLCBwcm9wZXJ0eSkpLmZpbHRlcihpc05vdE5pbCk7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnYXJyYXlJbmNsdWRlcycsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5SW5jbHVkZXNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUID0gYW55Pih2YWw6IHVua25vd24gfCBUW10sIHNlYXJjaEVsZW1lbnQ6IFQsIGZyb21JbmRleD86IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICh2YWwgJiYgdmFsLmluY2x1ZGVzKHNlYXJjaEVsZW1lbnQsIGZyb21JbmRleCkpIHx8IGZhbHNlO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2FycmF5RmlsdGVyJyxcbn0pXG5leHBvcnQgY2xhc3MgQXJyYXlGaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUID0gYW55Pih2YWw6IHVua25vd24gfCBUW10sIGZpbHRlckZuOiAoVCkgPT4gYm9vbGVhbik6IFRbXSB8IG51bGwge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdmFsLmZpbHRlcihmaWx0ZXJGbik7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnYXJyYXlKb2luJyxcbn0pXG5leHBvcnQgY2xhc3MgQXJyYXlKb2luUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VCA9IGFueT4odmFsOiB1bmtub3duIHwgVFtdLCBzZXBhcmF0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbCkpIHJldHVybiAnJztcbiAgICByZXR1cm4gdmFsLmpvaW4oc2VwYXJhdG9yKSB8fCAnJztcbiAgfVxufVxuIl19