@sumaris-net/ngx-components 18.18.25 → 18.18.26

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.
@@ -8,12 +8,13 @@ import { maskitoNumberOptionsGenerator } from '@maskito/kit';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "@angular/forms";
10
10
  import * as i2 from "@ionic/angular";
11
- import * as i3 from "@maskito/angular";
12
- import * as i4 from "@angular/material/select";
13
- import * as i5 from "@angular/material/core";
14
- import * as i6 from "../../pipes/latlong-format.pipe";
15
- import * as i7 from "@ngx-translate/core";
16
- import * as i8 from "@angular/material/form-field";
11
+ import * as i3 from "@angular/material/input";
12
+ import * as i4 from "@maskito/angular";
13
+ import * as i5 from "@angular/material/select";
14
+ import * as i6 from "@angular/material/core";
15
+ import * as i7 from "../../pipes/latlong-format.pipe";
16
+ import * as i8 from "@ngx-translate/core";
17
+ import * as i9 from "@angular/material/form-field";
17
18
  export class MatLatLongFieldInput {
18
19
  _elementRef;
19
20
  _formField;
@@ -105,9 +106,20 @@ export class MatLatLongFieldInput {
105
106
  get errorState() {
106
107
  return this.formGroup.invalid && this.touched;
107
108
  }
109
+ _defaultSign;
110
+ set defaultSign(value) {
111
+ this._defaultSign = value;
112
+ const parts = this.formGroup.value;
113
+ if (isNilOrBlank(parts.degrees) && isNilOrBlank(parts.seconds) && isNilOrBlank(parts.minutes)) {
114
+ const formValue = isNil(value) ? null : value === '-' ? -1 : 1;
115
+ this.formGroup.get('sign').setValue(formValue);
116
+ }
117
+ }
118
+ get defaultSign() {
119
+ return this._defaultSign;
120
+ }
108
121
  type;
109
122
  pattern;
110
- defaultSign;
111
123
  maxDecimals;
112
124
  readonly = false;
113
125
  degreesSymbolUnit = '°';
@@ -313,8 +325,8 @@ export class MatLatLongFieldInput {
313
325
  ? -1
314
326
  : 1
315
327
  : // Use default sign, if any
316
- this.defaultSign
317
- ? this.defaultSign === '-'
328
+ this._defaultSign
329
+ ? this._defaultSign === '-'
318
330
  ? -1
319
331
  : 1
320
332
  : null,
@@ -380,15 +392,15 @@ export class MatLatLongFieldInput {
380
392
  }
381
393
  }
382
394
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatLatLongFieldInput, deps: [{ token: i0.ElementRef }, { token: MAT_FORM_FIELD, optional: true }, { token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
383
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MatLatLongFieldInput, selector: "mat-latlong-input", inputs: { userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], required: ["required", "required", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], value: "value", type: "type", pattern: ["latLongPattern", "pattern"], defaultSign: "defaultSign", maxDecimals: "maxDecimals", readonly: "readonly" }, host: { properties: { "class.label-floating": "shouldLabelFloat", "id": "id" } }, providers: [{ provide: MatFormFieldControl, useExisting: MatLatLongFieldInput }], viewQueries: [{ propertyName: "degreesInput", first: true, predicate: ["degrees"], descendants: true, read: ElementRef }, { propertyName: "minutesInput", first: true, predicate: ["minutes"], descendants: true, read: ElementRef }, { propertyName: "secondsInput", first: true, predicate: ["seconds"], descendants: true, read: ElementRef }, { propertyName: "signInput", first: true, predicate: ["sign"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if (readonly) {\n <ion-text>\n {{\n ngControl.value\n | latLongFormat: { pattern: pattern, maxDecimals: lastInputMaxDecimals, type: type, placeholderChar: '' }\n }}\n </ion-text>\n} @else {\n <div\n role=\"group\"\n class=\"mat-latlong-input-container\"\n [formGroup]=\"formGroup\"\n [attr.aria-labelledby]=\"_formField?.getLabelId()\"\n (focusin)=\"onFocusIn($event)\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n #degrees\n aria-label=\"Degrees\"\n [class.degrees-only]=\"pattern === 'DD'\"\n [class.degrees]=\"pattern !== 'DD'\"\n [class.latitude]=\"type === 'latitude'\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"degreesPlaceholder | translate\"\n formControlName=\"degrees\"\n [maskito]=\"degreesMask\"\n (input)=\"handleInput('degrees', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ degreesSymbolUnit }}\n </span>\n\n @if (showMinutes) {\n <input\n #minutes\n aria-label=\"Minutes\"\n [class.minutes]=\"showSeconds\"\n [class.minutes-seconds]=\"!showSeconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"minutesPlaceholder | translate\"\n formControlName=\"minutes\"\n [maskito]=\"minutesMask\"\n (input)=\"handleInput('minutes', 'seconds')\"\n (keyup.backspace)=\"autoFocusPrev('minutes', 'degrees')\"\n />\n <span class=\"symbol-unit\">\n {{ minutesSymbolUnit }}\n </span>\n }\n\n @if (showSeconds) {\n <input\n #seconds\n aria-label=\"Seconds\"\n class=\"seconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"secondsPlaceholder | translate\"\n formControlName=\"seconds\"\n [maskito]=\"secondsMask\"\n (input)=\"handleInput('seconds', 'sign')\"\n (keyup.backspace)=\"autoFocusPrev('seconds', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ secondsSymbolUnit }}\n </span>\n }\n\n <!-- sign -->\n @if (showSign) {\n <span class=\"sign-spacer\"></span>\n <mat-select\n #sign\n aria-label=\"Sign\"\n class=\"sign\"\n formControlName=\"sign\"\n [placeholder]=\"\n (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER' : 'COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER')\n | translate\n \"\n (focusin)=\"sign.open()\"\n (selectionChange)=\"handleInput('sign')\"\n >\n <mat-option [value]=\"1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_N' : 'COMMON.LAT_LONG.LONG_SIGN_E') | translate }}\n </mat-option>\n <mat-option [value]=\"-1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_S' : 'COMMON.LAT_LONG.LONG_SIGN_W') | translate }}\n </mat-option>\n </mat-select>\n }\n </div>\n}\n", styles: [".mat-latlong-input-container{display:inline-flex;width:100%;opacity:0;transition:opacity .2s;pointer-events:none;--mat-select-arrow-transform: translateY(0)}input{border:none;background:none;padding:0;outline:none;font:inherit;text-align:right;color:var(--mdc-filled-text-field-input-text-color, var(--ion-text-color))}input::placeholder{letter-spacing:-.05em;color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--app-form-field-label-color))}input.degrees-only{width:calc(100% - .5em)}input.degrees{width:1.9em}input.degrees.latitude{width:1.3em}input.minutes{width:1.7em}input.minutes-seconds{width:3.5em}input.seconds{width:3em}.symbol-unit{font-weight:700}.sign-spacer{width:.25em}.sign{max-width:2.6em;color:inherit}:host.label-floating .mat-latlong-input-container{opacity:1;pointer-events:revert}\n"], dependencies: [{ kind: "component", type: i2.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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "component", type: i4.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: i5.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: i6.LatLongFormatPipe, name: "latLongFormat" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
395
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MatLatLongFieldInput, selector: "mat-latlong-input", inputs: { userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], required: ["required", "required", booleanAttribute], disabled: ["disabled", "disabled", booleanAttribute], value: "value", defaultSign: "defaultSign", type: "type", pattern: ["latLongPattern", "pattern"], maxDecimals: "maxDecimals", readonly: "readonly" }, host: { properties: { "class.label-floating": "shouldLabelFloat", "id": "id" } }, providers: [{ provide: MatFormFieldControl, useExisting: MatLatLongFieldInput }], viewQueries: [{ propertyName: "degreesInput", first: true, predicate: ["degrees"], descendants: true, read: ElementRef }, { propertyName: "minutesInput", first: true, predicate: ["minutes"], descendants: true, read: ElementRef }, { propertyName: "secondsInput", first: true, predicate: ["seconds"], descendants: true, read: ElementRef }, { propertyName: "signInput", first: true, predicate: ["sign"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if (readonly) {\n <ion-text>\n {{\n ngControl.value\n | latLongFormat: { pattern: pattern, maxDecimals: lastInputMaxDecimals, type: type, placeholderChar: '' }\n }}\n </ion-text>\n} @else {\n <div\n role=\"group\"\n class=\"mat-latlong-input-container\"\n [formGroup]=\"formGroup\"\n [attr.aria-labelledby]=\"_formField?.getLabelId()\"\n (focusin)=\"onFocusIn($event)\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n matInput\n #degrees\n aria-label=\"Degrees\"\n [class.degrees-only]=\"pattern === 'DD'\"\n [class.degrees]=\"pattern !== 'DD'\"\n [class.latitude]=\"type === 'latitude'\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"degreesPlaceholder | translate\"\n formControlName=\"degrees\"\n [maskito]=\"degreesMask\"\n (input)=\"handleInput('degrees', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ degreesSymbolUnit }}\n </span>\n\n @if (showMinutes) {\n <input\n matInput\n #minutes\n aria-label=\"Minutes\"\n [class.minutes]=\"showSeconds\"\n [class.minutes-seconds]=\"!showSeconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"minutesPlaceholder | translate\"\n formControlName=\"minutes\"\n [maskito]=\"minutesMask\"\n (input)=\"handleInput('minutes', 'seconds')\"\n (keyup.backspace)=\"autoFocusPrev('minutes', 'degrees')\"\n />\n <span class=\"symbol-unit\">\n {{ minutesSymbolUnit }}\n </span>\n }\n\n @if (showSeconds) {\n <input\n matInput\n #seconds\n aria-label=\"Seconds\"\n class=\"seconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"secondsPlaceholder | translate\"\n formControlName=\"seconds\"\n [maskito]=\"secondsMask\"\n (input)=\"handleInput('seconds', 'sign')\"\n (keyup.backspace)=\"autoFocusPrev('seconds', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ secondsSymbolUnit }}\n </span>\n }\n\n <!-- sign -->\n @if (showSign) {\n <span class=\"sign-spacer\"></span>\n <mat-select\n #sign\n hideSingleSelectionIndicator\n disableOptionCentering\n aria-label=\"Sign\"\n class=\"sign\"\n formControlName=\"sign\"\n [placeholder]=\"\n (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER' : 'COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER')\n | translate\n \"\n (focusin)=\"sign.open()\"\n (selectionChange)=\"handleInput('sign')\"\n >\n <mat-option [value]=\"1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_N' : 'COMMON.LAT_LONG.LONG_SIGN_E') | translate }}\n </mat-option>\n <mat-option [value]=\"-1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_S' : 'COMMON.LAT_LONG.LONG_SIGN_W') | translate }}\n </mat-option>\n\n </mat-select>\n\n }\n\n </div>\n}\n", styles: [".mat-latlong-input-container{display:inline-flex;width:100%;opacity:0;transition:opacity .2s;pointer-events:none;--mat-select-arrow-transform: translateY(0)}input{border:none;background:none;padding:0;outline:none;font:inherit;text-align:right;color:var(--mdc-filled-text-field-input-text-color, var(--ion-text-color))}input::placeholder{letter-spacing:-.05em;color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--app-form-field-label-color))}input.degrees-only{width:calc(100% - .5em)}input.degrees{width:1.9em}input.degrees.latitude{width:1.3em}input.minutes{width:1.7em}input.minutes-seconds{width:3.5em}input.seconds{width:3em}.symbol-unit{font-weight:700}.sign-spacer{width:.25em}.sign{max-width:2.6em}:host.label-floating .mat-latlong-input-container{opacity:1;pointer-events:revert}\n"], dependencies: [{ kind: "component", type: i2.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.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i4.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "component", type: i5.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: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "pipe", type: i7.LatLongFormatPipe, name: "latLongFormat" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
384
396
  }
385
397
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatLatLongFieldInput, decorators: [{
386
398
  type: Component,
387
399
  args: [{ selector: 'mat-latlong-input', providers: [{ provide: MatFormFieldControl, useExisting: MatLatLongFieldInput }], host: {
388
400
  '[class.label-floating]': 'shouldLabelFloat',
389
401
  '[id]': 'id',
390
- }, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (readonly) {\n <ion-text>\n {{\n ngControl.value\n | latLongFormat: { pattern: pattern, maxDecimals: lastInputMaxDecimals, type: type, placeholderChar: '' }\n }}\n </ion-text>\n} @else {\n <div\n role=\"group\"\n class=\"mat-latlong-input-container\"\n [formGroup]=\"formGroup\"\n [attr.aria-labelledby]=\"_formField?.getLabelId()\"\n (focusin)=\"onFocusIn($event)\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n #degrees\n aria-label=\"Degrees\"\n [class.degrees-only]=\"pattern === 'DD'\"\n [class.degrees]=\"pattern !== 'DD'\"\n [class.latitude]=\"type === 'latitude'\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"degreesPlaceholder | translate\"\n formControlName=\"degrees\"\n [maskito]=\"degreesMask\"\n (input)=\"handleInput('degrees', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ degreesSymbolUnit }}\n </span>\n\n @if (showMinutes) {\n <input\n #minutes\n aria-label=\"Minutes\"\n [class.minutes]=\"showSeconds\"\n [class.minutes-seconds]=\"!showSeconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"minutesPlaceholder | translate\"\n formControlName=\"minutes\"\n [maskito]=\"minutesMask\"\n (input)=\"handleInput('minutes', 'seconds')\"\n (keyup.backspace)=\"autoFocusPrev('minutes', 'degrees')\"\n />\n <span class=\"symbol-unit\">\n {{ minutesSymbolUnit }}\n </span>\n }\n\n @if (showSeconds) {\n <input\n #seconds\n aria-label=\"Seconds\"\n class=\"seconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"secondsPlaceholder | translate\"\n formControlName=\"seconds\"\n [maskito]=\"secondsMask\"\n (input)=\"handleInput('seconds', 'sign')\"\n (keyup.backspace)=\"autoFocusPrev('seconds', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ secondsSymbolUnit }}\n </span>\n }\n\n <!-- sign -->\n @if (showSign) {\n <span class=\"sign-spacer\"></span>\n <mat-select\n #sign\n aria-label=\"Sign\"\n class=\"sign\"\n formControlName=\"sign\"\n [placeholder]=\"\n (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER' : 'COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER')\n | translate\n \"\n (focusin)=\"sign.open()\"\n (selectionChange)=\"handleInput('sign')\"\n >\n <mat-option [value]=\"1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_N' : 'COMMON.LAT_LONG.LONG_SIGN_E') | translate }}\n </mat-option>\n <mat-option [value]=\"-1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_S' : 'COMMON.LAT_LONG.LONG_SIGN_W') | translate }}\n </mat-option>\n </mat-select>\n }\n </div>\n}\n", styles: [".mat-latlong-input-container{display:inline-flex;width:100%;opacity:0;transition:opacity .2s;pointer-events:none;--mat-select-arrow-transform: translateY(0)}input{border:none;background:none;padding:0;outline:none;font:inherit;text-align:right;color:var(--mdc-filled-text-field-input-text-color, var(--ion-text-color))}input::placeholder{letter-spacing:-.05em;color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--app-form-field-label-color))}input.degrees-only{width:calc(100% - .5em)}input.degrees{width:1.9em}input.degrees.latitude{width:1.3em}input.minutes{width:1.7em}input.minutes-seconds{width:3.5em}input.seconds{width:3em}.symbol-unit{font-weight:700}.sign-spacer{width:.25em}.sign{max-width:2.6em;color:inherit}:host.label-floating .mat-latlong-input-container{opacity:1;pointer-events:revert}\n"] }]
391
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i8.MatFormField, decorators: [{
402
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (readonly) {\n <ion-text>\n {{\n ngControl.value\n | latLongFormat: { pattern: pattern, maxDecimals: lastInputMaxDecimals, type: type, placeholderChar: '' }\n }}\n </ion-text>\n} @else {\n <div\n role=\"group\"\n class=\"mat-latlong-input-container\"\n [formGroup]=\"formGroup\"\n [attr.aria-labelledby]=\"_formField?.getLabelId()\"\n (focusin)=\"onFocusIn($event)\"\n (focusout)=\"onFocusOut($event)\"\n >\n <input\n matInput\n #degrees\n aria-label=\"Degrees\"\n [class.degrees-only]=\"pattern === 'DD'\"\n [class.degrees]=\"pattern !== 'DD'\"\n [class.latitude]=\"type === 'latitude'\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"degreesPlaceholder | translate\"\n formControlName=\"degrees\"\n [maskito]=\"degreesMask\"\n (input)=\"handleInput('degrees', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ degreesSymbolUnit }}\n </span>\n\n @if (showMinutes) {\n <input\n matInput\n #minutes\n aria-label=\"Minutes\"\n [class.minutes]=\"showSeconds\"\n [class.minutes-seconds]=\"!showSeconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"minutesPlaceholder | translate\"\n formControlName=\"minutes\"\n [maskito]=\"minutesMask\"\n (input)=\"handleInput('minutes', 'seconds')\"\n (keyup.backspace)=\"autoFocusPrev('minutes', 'degrees')\"\n />\n <span class=\"symbol-unit\">\n {{ minutesSymbolUnit }}\n </span>\n }\n\n @if (showSeconds) {\n <input\n matInput\n #seconds\n aria-label=\"Seconds\"\n class=\"seconds\"\n inputmode=\"decimal\"\n autocomplete=\"off\"\n [placeholder]=\"secondsPlaceholder | translate\"\n formControlName=\"seconds\"\n [maskito]=\"secondsMask\"\n (input)=\"handleInput('seconds', 'sign')\"\n (keyup.backspace)=\"autoFocusPrev('seconds', 'minutes')\"\n />\n <span class=\"symbol-unit\">\n {{ secondsSymbolUnit }}\n </span>\n }\n\n <!-- sign -->\n @if (showSign) {\n <span class=\"sign-spacer\"></span>\n <mat-select\n #sign\n hideSingleSelectionIndicator\n disableOptionCentering\n aria-label=\"Sign\"\n class=\"sign\"\n formControlName=\"sign\"\n [placeholder]=\"\n (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_PLACEHOLDER' : 'COMMON.LAT_LONG.LONG_SIGN_PLACEHOLDER')\n | translate\n \"\n (focusin)=\"sign.open()\"\n (selectionChange)=\"handleInput('sign')\"\n >\n <mat-option [value]=\"1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_N' : 'COMMON.LAT_LONG.LONG_SIGN_E') | translate }}\n </mat-option>\n <mat-option [value]=\"-1\" (click)=\"sign.close()\">\n {{ (type === 'latitude' ? 'COMMON.LAT_LONG.LAT_SIGN_S' : 'COMMON.LAT_LONG.LONG_SIGN_W') | translate }}\n </mat-option>\n\n </mat-select>\n\n }\n\n </div>\n}\n", styles: [".mat-latlong-input-container{display:inline-flex;width:100%;opacity:0;transition:opacity .2s;pointer-events:none;--mat-select-arrow-transform: translateY(0)}input{border:none;background:none;padding:0;outline:none;font:inherit;text-align:right;color:var(--mdc-filled-text-field-input-text-color, var(--ion-text-color))}input::placeholder{letter-spacing:-.05em;color:var(--mdc-filled-text-field-input-text-placeholder-color, var(--app-form-field-label-color))}input.degrees-only{width:calc(100% - .5em)}input.degrees{width:1.9em}input.degrees.latitude{width:1.3em}input.minutes{width:1.7em}input.minutes-seconds{width:3.5em}input.seconds{width:3em}.symbol-unit{font-weight:700}.sign-spacer{width:.25em}.sign{max-width:2.6em}:host.label-floating .mat-latlong-input-container{opacity:1;pointer-events:revert}\n"] }]
403
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i9.MatFormField, decorators: [{
392
404
  type: Optional
393
405
  }, {
394
406
  type: Inject,
@@ -420,16 +432,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
420
432
  args: [{ transform: booleanAttribute }]
421
433
  }], value: [{
422
434
  type: Input
435
+ }], defaultSign: [{
436
+ type: Input
423
437
  }], type: [{
424
438
  type: Input
425
439
  }], pattern: [{
426
440
  type: Input,
427
441
  args: ['latLongPattern']
428
- }], defaultSign: [{
429
- type: Input
430
442
  }], maxDecimals: [{
431
443
  type: Input
432
444
  }], readonly: [{
433
445
  type: Input
434
446
  }] } });
435
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwubGF0bG9uZy1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy1pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy1pbnB1dC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUVsQiw2QkFBNkIsRUFLN0IscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2Qix5QkFBeUIsR0FDMUIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsY0FBYyxFQUFnQixtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7OztBQWE3RCxNQUFNLE9BQU8sb0JBQW9CO0lBbUlyQjtJQUNtQztJQUNoQjtJQXBJN0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDMEIsWUFBWSxD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QW1CLEVBQUUsV0FBVyxzQkFBc0IsRUFBRSxDQUFDLFFBQzFFO3dCQUNKLHdCQUF3QixFQUFFLGtCQUFrQjt3QkFDNUMsTUFBTSxFQUFFLElBQUk7cUJBQ2IsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07OzBCQXNJNUMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxjQUFjOzswQkFDakMsUUFBUTs7MEJBQUksSUFBSTt5Q0FuSXlCLFlBQVk7c0JBQXZELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDRSxZQUFZO3NCQUF2RCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ0UsWUFBWTtzQkFBdkQsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNELFNBQVM7c0JBQWpELFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkErQlosbUJBQW1CO3NCQUE3QyxLQUFLO3VCQUFDLGtCQUFrQjtnQkFRckIsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWNsQyxRQUFRO3NCQURYLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBZ0NsQyxLQUFLO3NCQURSLEtBQUs7Z0JBbUJHLElBQUk7c0JBQVosS0FBSztnQkFDbUIsT0FBTztzQkFBL0IsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ2QsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNlbGYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIE5nQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmsgfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtcbiAgY29tcHV0ZURlY2ltYWxEZWdyZWVzLFxuICBjb21wdXRlRGVjaW1hbFBhcnQsXG4gIElMYXRMb25nRGF0YSxcbiAgTEFUX0xPTkdfUEFUVEVSTl9NQVhfREVDSU1BTFMsXG4gIExhdExvbmdQYXR0ZXJuLFxuICBMYXRMb25nU2lnbixcbiAgTGF0TG9uZ1NpZ25WYWx1ZSxcbiAgTGF0TG9uZ1R5cGUsXG4gIHNwbGl0RGVncmVlc1RvRERBcnJheSxcbiAgc3BsaXREZWdyZWVzVG9ERE1NQXJyYXksXG4gIHNwbGl0RGVncmVlc1RvRERNTVNTQXJyYXksXG59IGZyb20gJy4vbGF0bG9uZy51dGlscyc7XG5pbXBvcnQgeyBNYXNraXRvT3B0aW9ucyB9IGZyb20gJ0BtYXNraXRvL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0ZPUk1fRklFTEQsIE1hdEZvcm1GaWVsZCwgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXNraXRvTnVtYmVyT3B0aW9uc0dlbmVyYXRvciB9IGZyb20gJ0BtYXNraXRvL2tpdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1sYXRsb25nLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLmxhdGxvbmctaW5wdXQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tYXRlcmlhbC5sYXRsb25nLWlucHV0LnNjc3MnLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBNYXRMYXRMb25nRmllbGRJbnB1dCB9XSxcbiAgaG9zdDoge1xuICAgICdbY2xhc3MubGFiZWwtZmxvYXRpbmddJzogJ3Nob3VsZExhYmVsRmxvYXQnLFxuICAgICdbaWRdJzogJ2lkJyxcbiAgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdExhdExvbmdGaWVsZElucHV0IGltcGxlbWVudHMgTWF0Rm9ybUZpZWxkQ29udHJvbDxudW1iZXI+LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBzdGF0aWMgbmV4dElkID0gMDtcbiAgQFZpZXdDaGlsZCgnZGVncmVlcycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkZWdyZWVzSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ21pbnV0ZXMnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbWludXRlc0lucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzZWNvbmRzJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHNlY29uZHNJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2lnbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBzaWduSW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgcHJvdGVjdGVkIGZvcm1Hcm91cCA9IGluamVjdChGb3JtQnVpbGRlcikuZ3JvdXAoe1xuICAgIGRlZ3JlZXM6IFsnJ10sXG4gICAgbWludXRlczogWycnXSxcbiAgICBzZWNvbmRzOiBbJyddLFxuICAgIHNpZ246IFs8TGF0TG9uZ1NpZ25WYWx1ZT5udWxsXSxcbiAgfSk7XG4gIHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIGZvY3VzZWQgPSBmYWxzZTtcbiAgdG91Y2hlZCA9IGZhbHNlO1xuICBjb250cm9sVHlwZSA9ICdtYXQtbGF0bG9uZy1pbnB1dCc7XG4gIGlkID0gYG1hdC1sYXRsb25nLWlucHV0LSR7TWF0TGF0TG9uZ0ZpZWxkSW5wdXQubmV4dElkKyt9YDtcbiAgb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgZ2V0IGVtcHR5KCkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm4gaXNOaWwodGhpcy5uZ0NvbnRyb2wudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZhbHVlOiB7IGRlZ3JlZXMsIG1pbnV0ZXMsIHNlY29uZHMgfSxcbiAgICAgIH0gPSB0aGlzLmZvcm1Hcm91cDtcbiAgICAgIHJldHVybiAhZGVncmVlcyAmJiAhbWludXRlcyAmJiAhc2Vjb25kcztcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpIHtcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xuICB9XG5cbiAgQElucHV0KCdhcmlhLWRlc2NyaWJlZGJ5JykgdXNlckFyaWFEZXNjcmliZWRCeTogc3RyaW5nO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nOyAvLyBOb3QgdXNlZFxuXG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSB2YWx1ZTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgdGhpcy51cGRhdGVWYWxpZGF0b3JzKCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAuZGlzYWJsZWQgIT09IHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgZ2V0IHZhbHVlKCk6IG51bWJlciB8IG51bGwge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgY29uc3QgcGFydHMgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcbiAgICAgIGNvbnN0IGRlZ3JlZXMgPSB0aGlzLnNhZmVQYXJzZUZsb2F0KHBhcnRzLmRlZ3JlZXMpO1xuICAgICAgY29uc3QgbWludXRlcyA9IHRoaXMuc2FmZVBhcnNlRmxvYXQocGFydHMubWludXRlcyk7XG4gICAgICBjb25zdCBzZWNvbmRzID0gdGhpcy5zYWZlUGFyc2VGbG9hdChwYXJ0cy5zZWNvbmRzKTtcbiAgICAgIGNvbnN0IHNpZ24gPSBwYXJ0cy5zaWduO1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLnZhbGlkXG4gICAgICAgID8gaXNOaWwoZGVncmVlcykgfHwgdGhpcy5wYXR0ZXJuID09PSAnREQnXG4gICAgICAgICAgPyBkZWdyZWVzXG4gICAgICAgICAgOiBjb21wdXRlRGVjaW1hbERlZ3JlZXMoZGVncmVlcywgbWludXRlcywgc2Vjb25kcywgc2lnbiwgdGhpcy5tYXhEZWNpbWFscylcbiAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY29tcHV0ZUxhdExvbmdGb3JtR3JvdXBWYWx1ZSh2YWx1ZSk7XG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IFNldHRpbmcgdmFsdWVgLCB2YWx1ZSwgcmVzdWx0KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwLnNldFZhbHVlKHtcbiAgICAgIGRlZ3JlZXM6IHJlc3VsdC5kZWdyZWVzPy50b1N0cmluZygpIHx8IG51bGwsXG4gICAgICBtaW51dGVzOiByZXN1bHQubWludXRlcz8udG9TdHJpbmcoKSB8fCBudWxsLFxuICAgICAgc2Vjb25kczogcmVzdWx0LnNlY29uZHM/LnRvU3RyaW5nKCkgfHwgbnVsbCxcbiAgICAgIHNpZ246IHJlc3VsdC5zaWduLFxuICAgIH0pO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIGdldCBlcnJvclN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5pbnZhbGlkICYmIHRoaXMudG91Y2hlZDtcbiAgfVxuXG4gIEBJbnB1dCgpIHR5cGU6IExhdExvbmdUeXBlO1xuICBASW5wdXQoJ2xhdExvbmdQYXR0ZXJuJykgcGF0dGVybjogTGF0TG9uZ1BhdHRlcm47XG4gIEBJbnB1dCgpIGRlZmF1bHRTaWduOiBMYXRMb25nU2lnbjtcbiAgQElucHV0KCkgbWF4RGVjaW1hbHM6IG51bWJlcjtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgZGVncmVlc1N5bWJvbFVuaXQgPSAnwrAnO1xuICBwcm90ZWN0ZWQgbWludXRlc1N5bWJvbFVuaXQgPSBcIidcIjtcbiAgcHJvdGVjdGVkIHNlY29uZHNTeW1ib2xVbml0ID0gJ1wiJztcbiAgcHJvdGVjdGVkIHNob3dNaW51dGVzID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzaG93U2Vjb25kcyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgc2hvd1NpZ24gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGRlZ3JlZXNNYXNrOiBNYXNraXRvT3B0aW9ucztcbiAgcHJvdGVjdGVkIG1pbnV0ZXNNYXNrOiBNYXNraXRvT3B0aW9ucztcbiAgcHJvdGVjdGVkIHNlY29uZHNNYXNrOiBNYXNraXRvT3B0aW9ucztcbiAgcHJvdGVjdGVkIGRlZ3JlZXNQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgbWludXRlc1BsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBzZWNvbmRzUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgcHJvdGVjdGVkIGxhc3RJbnB1dE1heERlY2ltYWxzID0gTEFUX0xPTkdfUEFUVEVSTl9NQVhfREVDSU1BTFM7XG5cbiAgcHJpdmF0ZSBsb2dQcmVmaXggPSAnW21hdC1sYXRsb25nLWlucHV0XSc7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRk9STV9GSUVMRCkgcHVibGljIF9mb3JtRmllbGQ6IE1hdEZvcm1GaWVsZCxcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbFxuICApIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy50eXBlID0gdGhpcy50eXBlIHx8ICdsYXRpdHVkZSc7XG4gICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuIHx8ICdERE1NJztcbiAgICB0aGlzLnNob3dTaWduID0gdGhpcy5wYXR0ZXJuICE9PSAnREQnO1xuXG4gICAgc3dpdGNoICh0aGlzLnBhdHRlcm4pIHtcbiAgICAgIGNhc2UgJ0REJzpcbiAgICAgICAgdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyA9IDc7XG4gICAgICAgIHRoaXMuZGVncmVlc1BsYWNlaG9sZGVyID0gdGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8gJ0NPTU1PTi5MQVRfTE9ORy5ERF9EREREREREX1BMQUNFSE9MREVSJyA6ICdDT01NT04uTEFUX0xPTkcuREREX0RERERERERfUExBQ0VIT0xERVInO1xuICAgICAgICB0aGlzLmRlZ3JlZXNNYXNrID0gbWFza2l0b051bWJlck9wdGlvbnNHZW5lcmF0b3Ioe1xuICAgICAgICAgIHByZWNpc2lvbjogdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyxcbiAgICAgICAgICBtaW46IHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IC05MCA6IC0xODAsXG4gICAgICAgICAgbWF4OiB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyA5MCA6IDE4MCxcbiAgICAgICAgICBtaW51c1NpZ246ICctJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRERNTSc6XG4gICAgICAgIHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMgPSAzO1xuICAgICAgICB0aGlzLnNob3dNaW51dGVzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWdyZWVzUGxhY2Vob2xkZXIgPSB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyAnQ09NTU9OLkxBVF9MT05HLkREX1BMQUNFSE9MREVSJyA6ICdDT01NT04uTEFUX0xPTkcuREREX1BMQUNFSE9MREVSJztcbiAgICAgICAgdGhpcy5taW51dGVzUGxhY2Vob2xkZXIgPSAnQ09NTU9OLkxBVF9MT05HLk1NX01NTV9QTEFDRUhPTERFUic7XG4gICAgICAgIHRoaXMuZGVncmVlc01hc2sgPSBtYXNraXRvTnVtYmVyT3B0aW9uc0dlbmVyYXRvcih7XG4gICAgICAgICAgcHJlY2lzaW9uOiAwLFxuICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICBtYXg6IHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IDkwIDogMTgwLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5taW51dGVzTWFzayA9IG1hc2tpdG9OdW1iZXJPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgICAgICBwcmVjaXNpb246IHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMsXG4gICAgICAgICAgbWluOiAwLFxuICAgICAgICAgIG1heDogNjAgLSBjb21wdXRlRGVjaW1hbFBhcnQoMSwgdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyksXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IC8vIERlZmF1bHQgaXMgRERNTVNTXG4gICAgICAgIHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMgPSAyO1xuICAgICAgICB0aGlzLnNob3dNaW51dGVzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93U2Vjb25kcyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVncmVlc1BsYWNlaG9sZGVyID0gdGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8gJ0NPTU1PTi5MQVRfTE9ORy5ERF9QTEFDRUhPTERFUicgOiAnQ09NTU9OLkxBVF9MT05HLkRERF9QTEFDRUhPTERFUic7XG4gICAgICAgIHRoaXMubWludXRlc1BsYWNlaG9sZGVyID0gJ0NPTU1PTi5MQVRfTE9ORy5NTV9QTEFDRUhPTERFUic7XG4gICAgICAgIHRoaXMuc2Vjb25kc1BsYWNlaG9sZGVyID0gJ0NPTU1PTi5MQVRfTE9ORy5TU19TU19QTEFDRUhPTERFUic7XG4gICAgICAgIHRoaXMuZGVncmVlc01hc2sgPSBtYXNraXRvTnVtYmVyT3B0aW9uc0dlbmVyYXRvcih7XG4gICAgICAgICAgcHJlY2lzaW9uOiAwLFxuICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICBtYXg6IHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IDkwIDogMTgwLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5taW51dGVzTWFzayA9IG1hc2tpdG9OdW1iZXJPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgICAgICBwcmVjaXNpb246IDAsXG4gICAgICAgICAgbWluOiAwLFxuICAgICAgICAgIG1heDogNTksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlY29uZHNNYXNrID0gbWFza2l0b051bWJlck9wdGlvbnNHZW5lcmF0b3Ioe1xuICAgICAgICAgIHByZWNpc2lvbjogdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyxcbiAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgbWF4OiA2MCAtIGNvbXB1dGVEZWNpbWFsUGFydCgxLCB0aGlzLmxhc3RJbnB1dE1heERlY2ltYWxzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0b3JzIChhZGQgcmVxdWlyZWQgdG8gY29udHJvbHMpXG4gICAgdGhpcy51cGRhdGVWYWxpZGF0b3JzKCk7XG5cbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2QubWFya0ZvckNoZWNrKCkpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb25Gb2N1c0luKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1c091dChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCkpIHtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlSW5wdXQoY29udHJvbE5hbWU6IHN0cmluZywgbmV4dENvbnRyb2xOYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gQ2FuIGF1dG9mb2N1cyBuZXh0IGNvbnRyb2wgP1xuICAgIGxldCBmb2N1c05leHQgPSBmYWxzZTtcbiAgICBzd2l0Y2ggKGNvbnRyb2xOYW1lKSB7XG4gICAgICBjYXNlICdkZWdyZWVzJzoge1xuICAgICAgICBjb25zdCBkZWdyZWVzID0gdGhpcy5zYWZlUGFyc2VGbG9hdCh0aGlzLmZvcm1Hcm91cC52YWx1ZS5kZWdyZWVzKTtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyAmJiAoZGVncmVlcyA9PT0gMCB8fCBkZWdyZWVzID4gOSkpIHtcbiAgICAgICAgICBmb2N1c05leHQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2xvbmdpdHVkZScgJiYgKGRlZ3JlZXMgPT09IDAgfHwgZGVncmVlcyA+IDE4KSkge1xuICAgICAgICAgIGZvY3VzTmV4dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdtaW51dGVzJzoge1xuICAgICAgICBjb25zdCBtaW51dGVzID0gdGhpcy5zYWZlUGFyc2VGbG9hdCh0aGlzLmZvcm1Hcm91cC52YWx1ZS5taW51dGVzKTtcbiAgICAgICAgaWYgKG1pbnV0ZXMgPT09IDAgfHwgbWludXRlcyA+IDYpIHtcbiAgICAgICAgICBmb2N1c05leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc2Vjb25kcyc6IHtcbiAgICAgICAgLy8gZm9jdXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZvY3VzTmV4dCkge1xuICAgICAgdGhpcy5hdXRvRm9jdXNOZXh0KGNvbnRyb2xOYW1lLCBuZXh0Q29udHJvbE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgYXV0b0ZvY3VzTmV4dChjb250cm9sTmFtZTogc3RyaW5nLCBuZXh0Q29udHJvbE5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXS5lcnJvcnMgJiYgbmV4dENvbnRyb2xOYW1lKSB7XG4gICAgICB0aGlzLmdldEVsZW1lbnRCeU5hbWUobmV4dENvbnRyb2xOYW1lKT8uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBhdXRvRm9jdXNQcmV2KGNvbnRyb2xOYW1lOiBzdHJpbmcsIHByZXZDb250cm9sTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGlzTmlsT3JCbGFuayh0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUpKSB7XG4gICAgICB0aGlzLmdldEVsZW1lbnRCeU5hbWUocHJldkNvbnRyb2xOYW1lKT8uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbGVtZW50QnlOYW1lKG5hbWU6IHN0cmluZyk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgJ2RlZ3JlZXMnOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWdyZWVzSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMubWludXRlc0lucHV0Py5uYXRpdmVFbGVtZW50O1xuICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgIHJldHVybiB0aGlzLnNlY29uZHNJbnB1dD8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGNhc2UgJ3NpZ24nOlxuICAgICAgICByZXR1cm4gdGhpcy5zaWduSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5sb2dQcmVmaXh9IE5vIEhUTUxFbGVtZW50IHdpdGggbmFtZSAnJHtuYW1lfSdgKTtcbiAgICB9XG4gIH1cblxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgY29udHJvbEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1hdC1sYXRsb25nLWlucHV0LWNvbnRhaW5lcicpITtcbiAgICBjb250cm9sRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgaWRzLmpvaW4oJyAnKSk7XG4gIH1cblxuICBvbkNvbnRhaW5lckNsaWNrKCkge1xuICAgIC8vIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IERFQlVHIG9uQ29udGFpbmVyQ2xpY2tgKTtcbiAgICBpZiAodGhpcy5yZWFkb25seSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmVtcHR5KSB7XG4gICAgICB0aGlzLmRlZ3JlZXNJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmIChpc05pbE9yQmxhbmsodGhpcy5mb3JtR3JvdXAudmFsdWUubWludXRlcykpIHtcbiAgICAgIHRoaXMubWludXRlc0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKGlzTmlsT3JCbGFuayh0aGlzLmZvcm1Hcm91cC52YWx1ZS5zZWNvbmRzKSkge1xuICAgICAgdGhpcy5zZWNvbmRzSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoaXNOaWwodGhpcy5mb3JtR3JvdXAudmFsdWUuc2lnbikpIHtcbiAgICAgIHRoaXMuc2lnbklucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUxhdExvbmdGb3JtR3JvdXBWYWx1ZShyYXdWYWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogSUxhdExvbmdEYXRhIHtcbiAgICBjb25zdCBpc0xvbmdpdHVkZSA9IHRoaXMudHlwZSA9PT0gJ2xvbmdpdHVkZSc7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdzdHJpbmcnID8gdGhpcy5zYWZlUGFyc2VGbG9hdChyYXdWYWx1ZS5yZXBsYWNlKC8sL2csICcuJykpIDogcmF3VmFsdWU7XG4gICAgY29uc3QgcmVzdWx0OiBJTGF0TG9uZ0RhdGEgPSB7XG4gICAgICBkZWdyZWVzOiBudWxsLFxuICAgICAgbWludXRlczogbnVsbCxcbiAgICAgIHNlY29uZHM6IG51bGwsXG4gICAgICBzaWduOiBpc05vdE5pbCh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZSA8IDBcbiAgICAgICAgICA/IC0xXG4gICAgICAgICAgOiAxXG4gICAgICAgIDogLy8gVXNlIGRlZmF1bHQgc2lnbiwgaWYgYW55XG4gICAgICAgICAgdGhpcy5kZWZhdWx0U2lnblxuICAgICAgICAgID8gdGhpcy5kZWZhdWx0U2lnbiA9PT0gJy0nXG4gICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICA6IDFcbiAgICAgICAgICA6IG51bGwsXG4gICAgfTtcblxuICAgIGlmICh2YWx1ZSA9PT0gMCkge1xuICAgICAgcmVzdWx0LmRlZ3JlZXMgPSAwO1xuICAgIH0gZWxzZSBpZiAoaXNOb3ROaWwodmFsdWUpKSB7XG4gICAgICAvLyBQYXJzZSBvcHRpb25zXG4gICAgICBjb25zdCBwYXJzZU9wdGlvbnMgPSB7XG4gICAgICAgIGxvbmdpdHVkZTogaXNMb25naXR1ZGUsXG4gICAgICAgIHBhdHRlcm46IHRoaXMucGF0dGVybixcbiAgICAgICAgbWF4RGVjaW1hbHM6IHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMsXG4gICAgICAgIGZpeExhdExvbmc6IHRydWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5wYXR0ZXJuID09PSAnREQnKSB7XG4gICAgICAgIGNvbnN0IHNwbGl0VmFsdWUgPSBzcGxpdERlZ3JlZXNUb0REQXJyYXkodmFsdWUsIHBhcnNlT3B0aW9ucykuc2xpY2UoMSkgYXMgbnVtYmVyW107IC8vIHJlbW92ZSBzaWduO1xuICAgICAgICByZXN1bHQuc2Vjb25kcyA9IDA7XG4gICAgICAgIHJlc3VsdC5taW51dGVzID0gMDtcbiAgICAgICAgcmVzdWx0LmRlZ3JlZXMgPSAoc3BsaXRWYWx1ZVswXSArIGNvbXB1dGVEZWNpbWFsUGFydChzcGxpdFZhbHVlWzFdID8/IDAsIHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMpKSAqIChyZXN1bHQuc2lnbiB8fCAxKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wYXR0ZXJuID09PSAnRERNTScpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRWYWx1ZSA9IHNwbGl0RGVncmVlc1RvRERNTUFycmF5KHZhbHVlLCBwYXJzZU9wdGlvbnMpO1xuICAgICAgICByZXN1bHQuc2Vjb25kcyA9IDA7XG4gICAgICAgIHJlc3VsdC5taW51dGVzID0gTWF0aC5hYnMoKHNwbGl0VmFsdWVbMV0gPz8gMCkgKyBjb21wdXRlRGVjaW1hbFBhcnQoc3BsaXRWYWx1ZVsyXSA/PyAwLCB0aGlzLmxhc3RJbnB1dE1heERlY2ltYWxzKSk7XG4gICAgICAgIHJlc3VsdC5kZWdyZWVzID0gTWF0aC5hYnMoIXJlc3VsdC5taW51dGVzICYmIGlzTmlsT3JCbGFuayhzcGxpdFZhbHVlWzBdKSA/IDAgOiAoc3BsaXRWYWx1ZVswXSA/PyAwKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBEZWZhdWx0IC8vIERETU1TU1xuICAgICAgICBjb25zdCBzcGxpdFZhbHVlID0gc3BsaXREZWdyZWVzVG9ERE1NU1NBcnJheSh2YWx1ZSwgcGFyc2VPcHRpb25zKTtcbiAgICAgICAgcmVzdWx0LnNlY29uZHMgPSBNYXRoLmFicygoc3BsaXRWYWx1ZVsyXSA/PyAwKSArIGNvbXB1dGVEZWNpbWFsUGFydChzcGxpdFZhbHVlWzNdID8/IDAsIHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMpKTtcbiAgICAgICAgcmVzdWx0Lm1pbnV0ZXMgPSAhcmVzdWx0LnNlY29uZHMgJiYgIXNwbGl0VmFsdWVbMV0gPyAwIDogTWF0aC5hYnMoc3BsaXRWYWx1ZVsxXSA/PyAwKTtcbiAgICAgICAgcmVzdWx0LmRlZ3JlZXMgPSAhcmVzdWx0LnNlY29uZHMgJiYgIXJlc3VsdC5taW51dGVzICYmIGlzTmlsT3JCbGFuayhzcGxpdFZhbHVlWzBdKSA/IDAgOiBNYXRoLmFicyhzcGxpdFZhbHVlWzBdID8/IDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHNhZmVQYXJzZUZsb2F0KHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIHJldHVybiBpc05vdE5pbE9yQmxhbmsodmFsdWUpID8gcGFyc2VGbG9hdCh2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbGlkYXRvcnMoKSB7XG4gICAgY29uc3QgeyBtaW51dGVzLCBzZWNvbmRzLCBzaWduIH0gPSB0aGlzLmZvcm1Hcm91cC5jb250cm9scztcblxuICAgIC8vIFVwZGF0ZSBtaW51dGVzXG4gICAgaWYgKHRoaXMuc2hvd01pbnV0ZXMgJiYgdGhpcy5fcmVxdWlyZWQpIHtcbiAgICAgIG1pbnV0ZXMuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWludXRlcy5yZW1vdmVWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBzZWNvbmRzXG4gICAgaWYgKHRoaXMuc2hvd1NlY29uZHMgJiYgdGhpcy5fcmVxdWlyZWQpIHtcbiAgICAgIHNlY29uZHMuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2Vjb25kcy5yZW1vdmVWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBzaWduXG4gICAgaWYgKHRoaXMuc2hvd1NpZ24gJiYgdGhpcy5fcmVxdWlyZWQpIHtcbiAgICAgIHNpZ24uYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2lnbi5yZW1vdmVWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH1cbiAgfVxufVxuIiwiQGlmIChyZWFkb25seSkge1xuICA8aW9uLXRleHQ+XG4gICAge3tcbiAgICAgIG5nQ29udHJvbC52YWx1ZVxuICAgICAgICB8IGxhdExvbmdGb3JtYXQ6IHsgcGF0dGVybjogcGF0dGVybiwgbWF4RGVjaW1hbHM6IGxhc3RJbnB1dE1heERlY2ltYWxzLCB0eXBlOiB0eXBlLCBwbGFjZWhvbGRlckNoYXI6ICcnIH1cbiAgICB9fVxuICA8L2lvbi10ZXh0PlxufSBAZWxzZSB7XG4gIDxkaXZcbiAgICByb2xlPVwiZ3JvdXBcIlxuICAgIGNsYXNzPVwibWF0LWxhdGxvbmctaW5wdXQtY29udGFpbmVyXCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9mb3JtRmllbGQ/LmdldExhYmVsSWQoKVwiXG4gICAgKGZvY3VzaW4pPVwib25Gb2N1c0luKCRldmVudClcIlxuICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KCRldmVudClcIlxuICA+XG4gICAgPGlucHV0XG4gICAgICAjZGVncmVlc1xuICAgICAgYXJpYS1sYWJlbD1cIkRlZ3JlZXNcIlxuICAgICAgW2NsYXNzLmRlZ3JlZXMtb25seV09XCJwYXR0ZXJuID09PSAnREQnXCJcbiAgICAgIFtjbGFzcy5kZWdyZWVzXT1cInBhdHRlcm4gIT09ICdERCdcIlxuICAgICAgW2NsYXNzLmxhdGl0dWRlXT1cInR5cGUgPT09ICdsYXRpdHVkZSdcIlxuICAgICAgaW5wdXRtb2RlPVwiZGVjaW1hbFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cImRlZ3JlZXNQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZWdyZWVzXCJcbiAgICAgIFttYXNraXRvXT1cImRlZ3JlZXNNYXNrXCJcbiAgICAgIChpbnB1dCk9XCJoYW5kbGVJbnB1dCgnZGVncmVlcycsICdtaW51dGVzJylcIlxuICAgIC8+XG4gICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wtdW5pdFwiPlxuICAgICAge3sgZGVncmVlc1N5bWJvbFVuaXQgfX1cbiAgICA8L3NwYW4+XG5cbiAgICBAaWYgKHNob3dNaW51dGVzKSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgI21pbnV0ZXNcbiAgICAgICAgYXJpYS1sYWJlbD1cIk1pbnV0ZXNcIlxuICAgICAgICBbY2xhc3MubWludXRlc109XCJzaG93U2Vjb25kc1wiXG4gICAgICAgIFtjbGFzcy5taW51dGVzLXNlY29uZHNdPVwiIXNob3dTZWNvbmRzXCJcbiAgICAgICAgaW5wdXRtb2RlPVwiZGVjaW1hbFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJtaW51dGVzUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtaW51dGVzXCJcbiAgICAgICAgW21hc2tpdG9dPVwibWludXRlc01hc2tcIlxuICAgICAgICAoaW5wdXQpPVwiaGFuZGxlSW5wdXQoJ21pbnV0ZXMnLCAnc2Vjb25kcycpXCJcbiAgICAgICAgKGtleXVwLmJhY2tzcGFjZSk9XCJhdXRvRm9jdXNQcmV2KCdtaW51dGVzJywgJ2RlZ3JlZXMnKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wtdW5pdFwiPlxuICAgICAgICB7eyBtaW51dGVzU3ltYm9sVW5pdCB9fVxuICAgICAgPC9zcGFuPlxuICAgIH1cblxuICAgIEBpZiAoc2hvd1NlY29uZHMpIHtcbiAgICAgIDxpbnB1dFxuICAgICAgICAjc2Vjb25kc1xuICAgICAgICBhcmlhLWxhYmVsPVwiU2Vjb25kc1wiXG4gICAgICAgIGNsYXNzPVwic2Vjb25kc1wiXG4gICAgICAgIGlucHV0bW9kZT1cImRlY2ltYWxcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2Vjb25kc1BsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kc1wiXG4gICAgICAgIFttYXNraXRvXT1cInNlY29uZHNNYXNrXCJcbiAgICAgICAgKGlucHV0KT1cImhhbmRsZUlucHV0KCdzZWNvbmRzJywgJ3NpZ24nKVwiXG4gICAgICAgIChrZXl1cC5iYWNrc3BhY2UpPVwiYXV0b0ZvY3VzUHJldignc2Vjb25kcycsICdtaW51dGVzJylcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3ltYm9sLXVuaXRcIj5cbiAgICAgICAge3sgc2Vjb25kc1N5bWJvbFVuaXQgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG5cbiAgICA8IS0tIHNpZ24gLS0+XG4gICAgQGlmIChzaG93U2lnbikge1xuICAgICAgPHNwYW4gY2xhc3M9XCJzaWduLXNwYWNlclwiPjwvc3Bhbj5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICNzaWduXG4gICAgICAgIGFyaWEtbGFiZWw9XCJTaWduXCJcbiAgICAgICAgY2xhc3M9XCJzaWduXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2lnblwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAodHlwZSA9PT0gJ2xhdGl0dWRlJyA/ICdDT01NT04uTEFUX0xPTkcuTEFUX1NJR05fUExBQ0VIT0xERVInIDogJ0NPTU1PTi5MQVRfTE9ORy5MT05HX1NJR05fUExBQ0VIT0xERVInKVxuICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgXCJcbiAgICAgICAgKGZvY3VzaW4pPVwic2lnbi5vcGVuKClcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImhhbmRsZUlucHV0KCdzaWduJylcIlxuICAgICAgPlxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiMVwiIChjbGljayk9XCJzaWduLmNsb3NlKClcIj5cbiAgICAgICAgICB7eyAodHlwZSA9PT0gJ2xhdGl0dWRlJyA/ICdDT01NT04uTEFUX0xPTkcuTEFUX1NJR05fTicgOiAnQ09NTU9OLkxBVF9MT05HLkxPTkdfU0lHTl9FJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiLTFcIiAoY2xpY2spPVwic2lnbi5jbG9zZSgpXCI+XG4gICAgICAgICAge3sgKHR5cGUgPT09ICdsYXRpdHVkZScgPyAnQ09NTU9OLkxBVF9MT05HLkxBVF9TSUdOX1MnIDogJ0NPTU1PTi5MQVRfTE9ORy5MT05HX1NJR05fVycpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICB9XG4gIDwvZGl2PlxufVxuIl19
447
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwubGF0bG9uZy1pbnB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy1pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbWF0ZXJpYWwubGF0bG9uZy1pbnB1dC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUdMLFFBQVEsRUFDUixJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsV0FBVyxFQUFhLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFGLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUVsQiw2QkFBNkIsRUFLN0IscUJBQXFCLEVBQ3JCLHVCQUF1QixFQUN2Qix5QkFBeUIsR0FDMUIsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsY0FBYyxFQUFnQixtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pHLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7QUFhN0QsTUFBTSxPQUFPLG9CQUFvQjtJQWlKckI7SUFDbUM7SUFDaEI7SUFsSjdCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzBCLFlBQVks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QkFDRCxTQUFTO3NCQUFqRCxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBK0JaLG1CQUFtQjtzQkFBN0MsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBUXJCLFFBQVE7c0JBRFgsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFjbEMsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWdDbEMsS0FBSztzQkFEUixLQUFLO2dCQXFCTyxXQUFXO3NCQUF2QixLQUFLO2dCQWFHLElBQUk7c0JBQVosS0FBSztnQkFDbUIsT0FBTztzQkFBL0IsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBQ2QsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBTZWxmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1CdWlsZGVyLCBOZ0NvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7XG4gIGNvbXB1dGVEZWNpbWFsRGVncmVlcyxcbiAgY29tcHV0ZURlY2ltYWxQYXJ0LFxuICBJTGF0TG9uZ0RhdGEsXG4gIExBVF9MT05HX1BBVFRFUk5fTUFYX0RFQ0lNQUxTLFxuICBMYXRMb25nUGF0dGVybixcbiAgTGF0TG9uZ1NpZ24sXG4gIExhdExvbmdTaWduVmFsdWUsXG4gIExhdExvbmdUeXBlLFxuICBzcGxpdERlZ3JlZXNUb0REQXJyYXksXG4gIHNwbGl0RGVncmVlc1RvRERNTUFycmF5LFxuICBzcGxpdERlZ3JlZXNUb0RETU1TU0FycmF5LFxufSBmcm9tICcuL2xhdGxvbmcudXRpbHMnO1xuaW1wb3J0IHsgTWFza2l0b09wdGlvbnMgfSBmcm9tICdAbWFza2l0by9jb3JlJztcbmltcG9ydCB7IE1BVF9GT1JNX0ZJRUxELCBNYXRGb3JtRmllbGQsIE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFza2l0b051bWJlck9wdGlvbnNHZW5lcmF0b3IgfSBmcm9tICdAbWFza2l0by9raXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtbGF0bG9uZy1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5sYXRsb25nLWlucHV0Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vbWF0ZXJpYWwubGF0bG9uZy1pbnB1dC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogTWF0TGF0TG9uZ0ZpZWxkSW5wdXQgfV0sXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLmxhYmVsLWZsb2F0aW5nXSc6ICdzaG91bGRMYWJlbEZsb2F0JyxcbiAgICAnW2lkXSc6ICdpZCcsXG4gIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRMYXRMb25nRmllbGRJbnB1dCBpbXBsZW1lbnRzIE1hdEZvcm1GaWVsZENvbnRyb2w8bnVtYmVyPiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgc3RhdGljIG5leHRJZCA9IDA7XG4gIEBWaWV3Q2hpbGQoJ2RlZ3JlZXMnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgZGVncmVlc0lucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdtaW51dGVzJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIG1pbnV0ZXNJbnB1dDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2Vjb25kcycsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBzZWNvbmRzSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NpZ24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgc2lnbklucHV0OiBFbGVtZW50UmVmO1xuXG4gIHByb3RlY3RlZCBmb3JtR3JvdXAgPSBpbmplY3QoRm9ybUJ1aWxkZXIpLmdyb3VwKHtcbiAgICBkZWdyZWVzOiBbJyddLFxuICAgIG1pbnV0ZXM6IFsnJ10sXG4gICAgc2Vjb25kczogWycnXSxcbiAgICBzaWduOiBbPExhdExvbmdTaWduVmFsdWU+bnVsbF0sXG4gIH0pO1xuICBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBmb2N1c2VkID0gZmFsc2U7XG4gIHRvdWNoZWQgPSBmYWxzZTtcbiAgY29udHJvbFR5cGUgPSAnbWF0LWxhdGxvbmctaW5wdXQnO1xuICBpZCA9IGBtYXQtbGF0bG9uZy1pbnB1dC0ke01hdExhdExvbmdGaWVsZElucHV0Lm5leHRJZCsrfWA7XG4gIG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG4gIG9uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIGdldCBlbXB0eSgpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuIGlzTmlsKHRoaXMubmdDb250cm9sLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qge1xuICAgICAgICB2YWx1ZTogeyBkZWdyZWVzLCBtaW51dGVzLCBzZWNvbmRzIH0sXG4gICAgICB9ID0gdGhpcy5mb3JtR3JvdXA7XG4gICAgICByZXR1cm4gIWRlZ3JlZXMgJiYgIW1pbnV0ZXMgJiYgIXNlY29uZHM7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eTtcbiAgfVxuXG4gIEBJbnB1dCgnYXJpYS1kZXNjcmliZWRieScpIHVzZXJBcmlhRGVzY3JpYmVkQnk6IHN0cmluZztcbiAgcGxhY2Vob2xkZXI6IHN0cmluZzsgLy8gTm90IHVzZWRcblxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCByZXF1aXJlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gdmFsdWU7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIHRoaXMudXBkYXRlVmFsaWRhdG9ycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVxdWlyZWQgPSBmYWxzZTtcblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwLmRpc2FibGVkICE9PSB2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gIGdldCB2YWx1ZSgpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gdGhpcy5mb3JtR3JvdXAudmFsdWU7XG4gICAgICBjb25zdCBkZWdyZWVzID0gdGhpcy5zYWZlUGFyc2VGbG9hdChwYXJ0cy5kZWdyZWVzKTtcbiAgICAgIGNvbnN0IG1pbnV0ZXMgPSB0aGlzLnNhZmVQYXJzZUZsb2F0KHBhcnRzLm1pbnV0ZXMpO1xuICAgICAgY29uc3Qgc2Vjb25kcyA9IHRoaXMuc2FmZVBhcnNlRmxvYXQocGFydHMuc2Vjb25kcyk7XG4gICAgICBjb25zdCBzaWduID0gcGFydHMuc2lnbjtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC52YWxpZFxuICAgICAgICA/IGlzTmlsKGRlZ3JlZXMpIHx8IHRoaXMucGF0dGVybiA9PT0gJ0REJ1xuICAgICAgICAgID8gZGVncmVlc1xuICAgICAgICAgIDogY29tcHV0ZURlY2ltYWxEZWdyZWVzKGRlZ3JlZXMsIG1pbnV0ZXMsIHNlY29uZHMsIHNpZ24sIHRoaXMubWF4RGVjaW1hbHMpXG4gICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbXB1dGVMYXRMb25nRm9ybUdyb3VwVmFsdWUodmFsdWUpO1xuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBTZXR0aW5nIHZhbHVlYCwgdmFsdWUsIHJlc3VsdCk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5zZXRWYWx1ZSh7XG4gICAgICBkZWdyZWVzOiByZXN1bHQuZGVncmVlcz8udG9TdHJpbmcoKSB8fCBudWxsLFxuICAgICAgbWludXRlczogcmVzdWx0Lm1pbnV0ZXM/LnRvU3RyaW5nKCkgfHwgbnVsbCxcbiAgICAgIHNlY29uZHM6IHJlc3VsdC5zZWNvbmRzPy50b1N0cmluZygpIHx8IG51bGwsXG4gICAgICBzaWduOiByZXN1bHQuc2lnbixcbiAgICB9KTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBnZXQgZXJyb3JTdGF0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXAuaW52YWxpZCAmJiB0aGlzLnRvdWNoZWQ7XG4gIH1cblxuICBwcml2YXRlIF9kZWZhdWx0U2lnbjogTGF0TG9uZ1NpZ247XG5cbiAgQElucHV0KCkgc2V0IGRlZmF1bHRTaWduKHZhbHVlOiBMYXRMb25nU2lnbikge1xuICAgIHRoaXMuX2RlZmF1bHRTaWduID0gdmFsdWU7XG4gICAgY29uc3QgcGFydHMgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHBhcnRzLmRlZ3JlZXMpICYmIGlzTmlsT3JCbGFuayhwYXJ0cy5zZWNvbmRzKSAmJiBpc05pbE9yQmxhbmsocGFydHMubWludXRlcykpIHtcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IGlzTmlsKHZhbHVlKSA/IG51bGwgOiB2YWx1ZSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdzaWduJykuc2V0VmFsdWUoZm9ybVZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGVmYXVsdFNpZ24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRTaWduO1xuICB9XG5cbiAgQElucHV0KCkgdHlwZTogTGF0TG9uZ1R5cGU7XG4gIEBJbnB1dCgnbGF0TG9uZ1BhdHRlcm4nKSBwYXR0ZXJuOiBMYXRMb25nUGF0dGVybjtcbiAgQElucHV0KCkgbWF4RGVjaW1hbHM6IG51bWJlcjtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgZGVncmVlc1N5bWJvbFVuaXQgPSAnwrAnO1xuICBwcm90ZWN0ZWQgbWludXRlc1N5bWJvbFVuaXQgPSBcIidcIjtcbiAgcHJvdGVjdGVkIHNlY29uZHNTeW1ib2xVbml0ID0gJ1wiJztcbiAgcHJvdGVjdGVkIHNob3dNaW51dGVzID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzaG93U2Vjb25kcyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgc2hvd1NpZ24gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGRlZ3JlZXNNYXNrOiBNYXNraXRvT3B0aW9ucztcbiAgcHJvdGVjdGVkIG1pbnV0ZXNNYXNrOiBNYXNraXRvT3B0aW9ucztcbiAgcHJvdGVjdGVkIHNlY29uZHNNYXNrOiBNYXNraXRvT3B0aW9ucztcbiAgcHJvdGVjdGVkIGRlZ3JlZXNQbGFjZWhvbGRlcjogc3RyaW5nO1xuICBwcm90ZWN0ZWQgbWludXRlc1BsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBzZWNvbmRzUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgcHJvdGVjdGVkIGxhc3RJbnB1dE1heERlY2ltYWxzID0gTEFUX0xPTkdfUEFUVEVSTl9NQVhfREVDSU1BTFM7XG5cbiAgcHJpdmF0ZSBsb2dQcmVmaXggPSAnW21hdC1sYXRsb25nLWlucHV0XSc7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRk9STV9GSUVMRCkgcHVibGljIF9mb3JtRmllbGQ6IE1hdEZvcm1GaWVsZCxcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbFxuICApIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy50eXBlID0gdGhpcy50eXBlIHx8ICdsYXRpdHVkZSc7XG4gICAgdGhpcy5wYXR0ZXJuID0gdGhpcy5wYXR0ZXJuIHx8ICdERE1NJztcbiAgICB0aGlzLnNob3dTaWduID0gdGhpcy5wYXR0ZXJuICE9PSAnREQnO1xuXG4gICAgc3dpdGNoICh0aGlzLnBhdHRlcm4pIHtcbiAgICAgIGNhc2UgJ0REJzpcbiAgICAgICAgdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyA9IDc7XG4gICAgICAgIHRoaXMuZGVncmVlc1BsYWNlaG9sZGVyID0gdGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8gJ0NPTU1PTi5MQVRfTE9ORy5ERF9EREREREREX1BMQUNFSE9MREVSJyA6ICdDT01NT04uTEFUX0xPTkcuREREX0RERERERERfUExBQ0VIT0xERVInO1xuICAgICAgICB0aGlzLmRlZ3JlZXNNYXNrID0gbWFza2l0b051bWJlck9wdGlvbnNHZW5lcmF0b3Ioe1xuICAgICAgICAgIHByZWNpc2lvbjogdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyxcbiAgICAgICAgICBtaW46IHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IC05MCA6IC0xODAsXG4gICAgICAgICAgbWF4OiB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyA5MCA6IDE4MCxcbiAgICAgICAgICBtaW51c1NpZ246ICctJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRERNTSc6XG4gICAgICAgIHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMgPSAzO1xuICAgICAgICB0aGlzLnNob3dNaW51dGVzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWdyZWVzUGxhY2Vob2xkZXIgPSB0aGlzLnR5cGUgPT09ICdsYXRpdHVkZScgPyAnQ09NTU9OLkxBVF9MT05HLkREX1BMQUNFSE9MREVSJyA6ICdDT01NT04uTEFUX0xPTkcuREREX1BMQUNFSE9MREVSJztcbiAgICAgICAgdGhpcy5taW51dGVzUGxhY2Vob2xkZXIgPSAnQ09NTU9OLkxBVF9MT05HLk1NX01NTV9QTEFDRUhPTERFUic7XG4gICAgICAgIHRoaXMuZGVncmVlc01hc2sgPSBtYXNraXRvTnVtYmVyT3B0aW9uc0dlbmVyYXRvcih7XG4gICAgICAgICAgcHJlY2lzaW9uOiAwLFxuICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICBtYXg6IHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IDkwIDogMTgwLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5taW51dGVzTWFzayA9IG1hc2tpdG9OdW1iZXJPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgICAgICBwcmVjaXNpb246IHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMsXG4gICAgICAgICAgbWluOiAwLFxuICAgICAgICAgIG1heDogNjAgLSBjb21wdXRlRGVjaW1hbFBhcnQoMSwgdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyksXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IC8vIERlZmF1bHQgaXMgRERNTVNTXG4gICAgICAgIHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMgPSAyO1xuICAgICAgICB0aGlzLnNob3dNaW51dGVzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93U2Vjb25kcyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVncmVlc1BsYWNlaG9sZGVyID0gdGhpcy50eXBlID09PSAnbGF0aXR1ZGUnID8gJ0NPTU1PTi5MQVRfTE9ORy5ERF9QTEFDRUhPTERFUicgOiAnQ09NTU9OLkxBVF9MT05HLkRERF9QTEFDRUhPTERFUic7XG4gICAgICAgIHRoaXMubWludXRlc1BsYWNlaG9sZGVyID0gJ0NPTU1PTi5MQVRfTE9ORy5NTV9QTEFDRUhPTERFUic7XG4gICAgICAgIHRoaXMuc2Vjb25kc1BsYWNlaG9sZGVyID0gJ0NPTU1PTi5MQVRfTE9ORy5TU19TU19QTEFDRUhPTERFUic7XG4gICAgICAgIHRoaXMuZGVncmVlc01hc2sgPSBtYXNraXRvTnVtYmVyT3B0aW9uc0dlbmVyYXRvcih7XG4gICAgICAgICAgcHJlY2lzaW9uOiAwLFxuICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICBtYXg6IHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyA/IDkwIDogMTgwLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5taW51dGVzTWFzayA9IG1hc2tpdG9OdW1iZXJPcHRpb25zR2VuZXJhdG9yKHtcbiAgICAgICAgICBwcmVjaXNpb246IDAsXG4gICAgICAgICAgbWluOiAwLFxuICAgICAgICAgIG1heDogNTksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlY29uZHNNYXNrID0gbWFza2l0b051bWJlck9wdGlvbnNHZW5lcmF0b3Ioe1xuICAgICAgICAgIHByZWNpc2lvbjogdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyxcbiAgICAgICAgICBtaW46IDAsXG4gICAgICAgICAgbWF4OiA2MCAtIGNvbXB1dGVEZWNpbWFsUGFydCgxLCB0aGlzLmxhc3RJbnB1dE1heERlY2ltYWxzKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB2YWxpZGF0b3JzIChhZGQgcmVxdWlyZWQgdG8gY29udHJvbHMpXG4gICAgdGhpcy51cGRhdGVWYWxpZGF0b3JzKCk7XG5cbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2QubWFya0ZvckNoZWNrKCkpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb25Gb2N1c0luKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmZvY3VzZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1c091dChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgRWxlbWVudCkpIHtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlSW5wdXQoY29udHJvbE5hbWU6IHN0cmluZywgbmV4dENvbnRyb2xOYW1lPzogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gQ2FuIGF1dG9mb2N1cyBuZXh0IGNvbnRyb2wgP1xuICAgIGxldCBmb2N1c05leHQgPSBmYWxzZTtcbiAgICBzd2l0Y2ggKGNvbnRyb2xOYW1lKSB7XG4gICAgICBjYXNlICdkZWdyZWVzJzoge1xuICAgICAgICBjb25zdCBkZWdyZWVzID0gdGhpcy5zYWZlUGFyc2VGbG9hdCh0aGlzLmZvcm1Hcm91cC52YWx1ZS5kZWdyZWVzKTtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2xhdGl0dWRlJyAmJiAoZGVncmVlcyA9PT0gMCB8fCBkZWdyZWVzID4gOSkpIHtcbiAgICAgICAgICBmb2N1c05leHQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PT0gJ2xvbmdpdHVkZScgJiYgKGRlZ3JlZXMgPT09IDAgfHwgZGVncmVlcyA+IDE4KSkge1xuICAgICAgICAgIGZvY3VzTmV4dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdtaW51dGVzJzoge1xuICAgICAgICBjb25zdCBtaW51dGVzID0gdGhpcy5zYWZlUGFyc2VGbG9hdCh0aGlzLmZvcm1Hcm91cC52YWx1ZS5taW51dGVzKTtcbiAgICAgICAgaWYgKG1pbnV0ZXMgPT09IDAgfHwgbWludXRlcyA+IDYpIHtcbiAgICAgICAgICBmb2N1c05leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc2Vjb25kcyc6IHtcbiAgICAgICAgLy8gZm9jdXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZvY3VzTmV4dCkge1xuICAgICAgdGhpcy5hdXRvRm9jdXNOZXh0KGNvbnRyb2xOYW1lLCBuZXh0Q29udHJvbE5hbWUpO1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgYXV0b0ZvY3VzTmV4dChjb250cm9sTmFtZTogc3RyaW5nLCBuZXh0Q29udHJvbE5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXS5lcnJvcnMgJiYgbmV4dENvbnRyb2xOYW1lKSB7XG4gICAgICB0aGlzLmdldEVsZW1lbnRCeU5hbWUobmV4dENvbnRyb2xOYW1lKT8uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBhdXRvRm9jdXNQcmV2KGNvbnRyb2xOYW1lOiBzdHJpbmcsIHByZXZDb250cm9sTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGlzTmlsT3JCbGFuayh0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUpKSB7XG4gICAgICB0aGlzLmdldEVsZW1lbnRCeU5hbWUocHJldkNvbnRyb2xOYW1lKT8uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBnZXRFbGVtZW50QnlOYW1lKG5hbWU6IHN0cmluZyk6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgJ2RlZ3JlZXMnOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWdyZWVzSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjYXNlICdtaW51dGVzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMubWludXRlc0lucHV0Py5uYXRpdmVFbGVtZW50O1xuICAgICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgICAgIHJldHVybiB0aGlzLnNlY29uZHNJbnB1dD8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGNhc2UgJ3NpZ24nOlxuICAgICAgICByZXR1cm4gdGhpcy5zaWduSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dGhpcy5sb2dQcmVmaXh9IE5vIEhUTUxFbGVtZW50IHdpdGggbmFtZSAnJHtuYW1lfSdgKTtcbiAgICB9XG4gIH1cblxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgY29udHJvbEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm1hdC1sYXRsb25nLWlucHV0LWNvbnRhaW5lcicpITtcbiAgICBjb250cm9sRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgaWRzLmpvaW4oJyAnKSk7XG4gIH1cblxuICBvbkNvbnRhaW5lckNsaWNrKCkge1xuICAgIC8vIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IERFQlVHIG9uQ29udGFpbmVyQ2xpY2tgKTtcbiAgICBpZiAodGhpcy5yZWFkb25seSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmVtcHR5KSB7XG4gICAgICB0aGlzLmRlZ3JlZXNJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmIChpc05pbE9yQmxhbmsodGhpcy5mb3JtR3JvdXAudmFsdWUubWludXRlcykpIHtcbiAgICAgIHRoaXMubWludXRlc0lucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9IGVsc2UgaWYgKGlzTmlsT3JCbGFuayh0aGlzLmZvcm1Hcm91cC52YWx1ZS5zZWNvbmRzKSkge1xuICAgICAgdGhpcy5zZWNvbmRzSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoaXNOaWwodGhpcy5mb3JtR3JvdXAudmFsdWUuc2lnbikpIHtcbiAgICAgIHRoaXMuc2lnbklucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUxhdExvbmdGb3JtR3JvdXBWYWx1ZShyYXdWYWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogSUxhdExvbmdEYXRhIHtcbiAgICBjb25zdCBpc0xvbmdpdHVkZSA9IHRoaXMudHlwZSA9PT0gJ2xvbmdpdHVkZSc7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdzdHJpbmcnID8gdGhpcy5zYWZlUGFyc2VGbG9hdChyYXdWYWx1ZS5yZXBsYWNlKC8sL2csICcuJykpIDogcmF3VmFsdWU7XG4gICAgY29uc3QgcmVzdWx0OiBJTGF0TG9uZ0RhdGEgPSB7XG4gICAgICBkZWdyZWVzOiBudWxsLFxuICAgICAgbWludXRlczogbnVsbCxcbiAgICAgIHNlY29uZHM6IG51bGwsXG4gICAgICBzaWduOiBpc05vdE5pbCh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZSA8IDBcbiAgICAgICAgICA/IC0xXG4gICAgICAgICAgOiAxXG4gICAgICAgIDogLy8gVXNlIGRlZmF1bHQgc2lnbiwgaWYgYW55XG4gICAgICAgICAgdGhpcy5fZGVmYXVsdFNpZ25cbiAgICAgICAgICA/IHRoaXMuX2RlZmF1bHRTaWduID09PSAnLSdcbiAgICAgICAgICAgID8gLTFcbiAgICAgICAgICAgIDogMVxuICAgICAgICAgIDogbnVsbCxcbiAgICB9O1xuXG4gICAgaWYgKHZhbHVlID09PSAwKSB7XG4gICAgICByZXN1bHQuZGVncmVlcyA9IDA7XG4gICAgfSBlbHNlIGlmIChpc05vdE5pbCh2YWx1ZSkpIHtcbiAgICAgIC8vIFBhcnNlIG9wdGlvbnNcbiAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgICAgICAgbG9uZ2l0dWRlOiBpc0xvbmdpdHVkZSxcbiAgICAgICAgcGF0dGVybjogdGhpcy5wYXR0ZXJuLFxuICAgICAgICBtYXhEZWNpbWFsczogdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscyxcbiAgICAgICAgZml4TGF0TG9uZzogdHJ1ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLnBhdHRlcm4gPT09ICdERCcpIHtcbiAgICAgICAgY29uc3Qgc3BsaXRWYWx1ZSA9IHNwbGl0RGVncmVlc1RvRERBcnJheSh2YWx1ZSwgcGFyc2VPcHRpb25zKS5zbGljZSgxKSBhcyBudW1iZXJbXTsgLy8gcmVtb3ZlIHNpZ247XG4gICAgICAgIHJlc3VsdC5zZWNvbmRzID0gMDtcbiAgICAgICAgcmVzdWx0Lm1pbnV0ZXMgPSAwO1xuICAgICAgICByZXN1bHQuZGVncmVlcyA9IChzcGxpdFZhbHVlWzBdICsgY29tcHV0ZURlY2ltYWxQYXJ0KHNwbGl0VmFsdWVbMV0gPz8gMCwgdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscykpICogKHJlc3VsdC5zaWduIHx8IDEpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnBhdHRlcm4gPT09ICdERE1NJykge1xuICAgICAgICBjb25zdCBzcGxpdFZhbHVlID0gc3BsaXREZWdyZWVzVG9ERE1NQXJyYXkodmFsdWUsIHBhcnNlT3B0aW9ucyk7XG4gICAgICAgIHJlc3VsdC5zZWNvbmRzID0gMDtcbiAgICAgICAgcmVzdWx0Lm1pbnV0ZXMgPSBNYXRoLmFicygoc3BsaXRWYWx1ZVsxXSA/PyAwKSArIGNvbXB1dGVEZWNpbWFsUGFydChzcGxpdFZhbHVlWzJdID8/IDAsIHRoaXMubGFzdElucHV0TWF4RGVjaW1hbHMpKTtcbiAgICAgICAgcmVzdWx0LmRlZ3JlZXMgPSBNYXRoLmFicyghcmVzdWx0Lm1pbnV0ZXMgJiYgaXNOaWxPckJsYW5rKHNwbGl0VmFsdWVbMF0pID8gMCA6IChzcGxpdFZhbHVlWzBdID8/IDApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERlZmF1bHQgLy8gRERNTVNTXG4gICAgICAgIGNvbnN0IHNwbGl0VmFsdWUgPSBzcGxpdERlZ3JlZXNUb0RETU1TU0FycmF5KHZhbHVlLCBwYXJzZU9wdGlvbnMpO1xuICAgICAgICByZXN1bHQuc2Vjb25kcyA9IE1hdGguYWJzKChzcGxpdFZhbHVlWzJdID8/IDApICsgY29tcHV0ZURlY2ltYWxQYXJ0KHNwbGl0VmFsdWVbM10gPz8gMCwgdGhpcy5sYXN0SW5wdXRNYXhEZWNpbWFscykpO1xuICAgICAgICByZXN1bHQubWludXRlcyA9ICFyZXN1bHQuc2Vjb25kcyAmJiAhc3BsaXRWYWx1ZVsxXSA/IDAgOiBNYXRoLmFicyhzcGxpdFZhbHVlWzFdID8/IDApO1xuICAgICAgICByZXN1bHQuZGVncmVlcyA9ICFyZXN1bHQuc2Vjb25kcyAmJiAhcmVzdWx0Lm1pbnV0ZXMgJiYgaXNOaWxPckJsYW5rKHNwbGl0VmFsdWVbMF0pID8gMCA6IE1hdGguYWJzKHNwbGl0VmFsdWVbMF0gPz8gMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgc2FmZVBhcnNlRmxvYXQodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIGlzTm90TmlsT3JCbGFuayh2YWx1ZSkgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmFsaWRhdG9ycygpIHtcbiAgICBjb25zdCB7IG1pbnV0ZXMsIHNlY29uZHMsIHNpZ24gfSA9IHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzO1xuXG4gICAgLy8gVXBkYXRlIG1pbnV0ZXNcbiAgICBpZiAodGhpcy5zaG93TWludXRlcyAmJiB0aGlzLl9yZXF1aXJlZCkge1xuICAgICAgbWludXRlcy5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW51dGVzLnJlbW92ZVZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHNlY29uZHNcbiAgICBpZiAodGhpcy5zaG93U2Vjb25kcyAmJiB0aGlzLl9yZXF1aXJlZCkge1xuICAgICAgc2Vjb25kcy5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWNvbmRzLnJlbW92ZVZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHNpZ25cbiAgICBpZiAodGhpcy5zaG93U2lnbiAmJiB0aGlzLl9yZXF1aXJlZCkge1xuICAgICAgc2lnbi5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaWduLnJlbW92ZVZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICB9XG59XG4iLCJAaWYgKHJlYWRvbmx5KSB7XG4gIDxpb24tdGV4dD5cbiAgICB7e1xuICAgICAgbmdDb250cm9sLnZhbHVlXG4gICAgICAgIHwgbGF0TG9uZ0Zvcm1hdDogeyBwYXR0ZXJuOiBwYXR0ZXJuLCBtYXhEZWNpbWFsczogbGFzdElucHV0TWF4RGVjaW1hbHMsIHR5cGU6IHR5cGUsIHBsYWNlaG9sZGVyQ2hhcjogJycgfVxuICAgIH19XG4gIDwvaW9uLXRleHQ+XG59IEBlbHNlIHtcbiAgPGRpdlxuICAgIHJvbGU9XCJncm91cFwiXG4gICAgY2xhc3M9XCJtYXQtbGF0bG9uZy1pbnB1dC1jb250YWluZXJcIlxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX2Zvcm1GaWVsZD8uZ2V0TGFiZWxJZCgpXCJcbiAgICAoZm9jdXNpbik9XCJvbkZvY3VzSW4oJGV2ZW50KVwiXG4gICAgKGZvY3Vzb3V0KT1cIm9uRm9jdXNPdXQoJGV2ZW50KVwiXG4gID5cbiAgICA8aW5wdXRcbiAgICAgIG1hdElucHV0XG4gICAgICAjZGVncmVlc1xuICAgICAgYXJpYS1sYWJlbD1cIkRlZ3JlZXNcIlxuICAgICAgW2NsYXNzLmRlZ3JlZXMtb25seV09XCJwYXR0ZXJuID09PSAnREQnXCJcbiAgICAgIFtjbGFzcy5kZWdyZWVzXT1cInBhdHRlcm4gIT09ICdERCdcIlxuICAgICAgW2NsYXNzLmxhdGl0dWRlXT1cInR5cGUgPT09ICdsYXRpdHVkZSdcIlxuICAgICAgaW5wdXRtb2RlPVwiZGVjaW1hbFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cImRlZ3JlZXNQbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZWdyZWVzXCJcbiAgICAgIFttYXNraXRvXT1cImRlZ3JlZXNNYXNrXCJcbiAgICAgIChpbnB1dCk9XCJoYW5kbGVJbnB1dCgnZGVncmVlcycsICdtaW51dGVzJylcIlxuICAgIC8+XG4gICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wtdW5pdFwiPlxuICAgICAge3sgZGVncmVlc1N5bWJvbFVuaXQgfX1cbiAgICA8L3NwYW4+XG5cbiAgICBAaWYgKHNob3dNaW51dGVzKSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgI21pbnV0ZXNcbiAgICAgICAgYXJpYS1sYWJlbD1cIk1pbnV0ZXNcIlxuICAgICAgICBbY2xhc3MubWludXRlc109XCJzaG93U2Vjb25kc1wiXG4gICAgICAgIFtjbGFzcy5taW51dGVzLXNlY29uZHNdPVwiIXNob3dTZWNvbmRzXCJcbiAgICAgICAgaW5wdXRtb2RlPVwiZGVjaW1hbFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJtaW51dGVzUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGVcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtaW51dGVzXCJcbiAgICAgICAgW21hc2tpdG9dPVwibWludXRlc01hc2tcIlxuICAgICAgICAoaW5wdXQpPVwiaGFuZGxlSW5wdXQoJ21pbnV0ZXMnLCAnc2Vjb25kcycpXCJcbiAgICAgICAgKGtleXVwLmJhY2tzcGFjZSk9XCJhdXRvRm9jdXNQcmV2KCdtaW51dGVzJywgJ2RlZ3JlZXMnKVwiXG4gICAgICAvPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzeW1ib2wtdW5pdFwiPlxuICAgICAgICB7eyBtaW51dGVzU3ltYm9sVW5pdCB9fVxuICAgICAgPC9zcGFuPlxuICAgIH1cblxuICAgIEBpZiAoc2hvd1NlY29uZHMpIHtcbiAgICAgIDxpbnB1dFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICAjc2Vjb25kc1xuICAgICAgICBhcmlhLWxhYmVsPVwiU2Vjb25kc1wiXG4gICAgICAgIGNsYXNzPVwic2Vjb25kc1wiXG4gICAgICAgIGlucHV0bW9kZT1cImRlY2ltYWxcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2Vjb25kc1BsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2Vjb25kc1wiXG4gICAgICAgIFttYXNraXRvXT1cInNlY29uZHNNYXNrXCJcbiAgICAgICAgKGlucHV0KT1cImhhbmRsZUlucHV0KCdzZWNvbmRzJywgJ3NpZ24nKVwiXG4gICAgICAgIChrZXl1cC5iYWNrc3BhY2UpPVwiYXV0b0ZvY3VzUHJldignc2Vjb25kcycsICdtaW51dGVzJylcIlxuICAgICAgLz5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3ltYm9sLXVuaXRcIj5cbiAgICAgICAge3sgc2Vjb25kc1N5bWJvbFVuaXQgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG5cbiAgICA8IS0tIHNpZ24gLS0+XG4gICAgQGlmIChzaG93U2lnbikge1xuICAgICAgPHNwYW4gY2xhc3M9XCJzaWduLXNwYWNlclwiPjwvc3Bhbj5cbiAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICNzaWduXG4gICAgICAgIGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JcbiAgICAgICAgZGlzYWJsZU9wdGlvbkNlbnRlcmluZ1xuICAgICAgICBhcmlhLWxhYmVsPVwiU2lnblwiXG4gICAgICAgIGNsYXNzPVwic2lnblwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNpZ25cIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgKHR5cGUgPT09ICdsYXRpdHVkZScgPyAnQ09NTU9OLkxBVF9MT05HLkxBVF9TSUdOX1BMQUNFSE9MREVSJyA6ICdDT01NT04uTEFUX0xPTkcuTE9OR19TSUdOX1BMQUNFSE9MREVSJylcbiAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgIFwiXG4gICAgICAgIChmb2N1c2luKT1cInNpZ24ub3BlbigpXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJoYW5kbGVJbnB1dCgnc2lnbicpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIjFcIiAoY2xpY2spPVwic2lnbi5jbG9zZSgpXCI+XG4gICAgICAgICAge3sgKHR5cGUgPT09ICdsYXRpdHVkZScgPyAnQ09NTU9OLkxBVF9MT05HLkxBVF9TSUdOX04nIDogJ0NPTU1PTi5MQVRfTE9ORy5MT05HX1NJR05fRScpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIi0xXCIgKGNsaWNrKT1cInNpZ24uY2xvc2UoKVwiPlxuICAgICAgICAgIHt7ICh0eXBlID09PSAnbGF0aXR1ZGUnID8gJ0NPTU1PTi5MQVRfTE9ORy5MQVRfU0lHTl9TJyA6ICdDT01NT04uTEFUX0xPTkcuTE9OR19TSUdOX1cnKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgIDwvbWF0LXNlbGVjdD5cblxuICAgIH1cblxuICA8L2Rpdj5cbn1cbiJdfQ==
@@ -167,7 +167,7 @@ export class MatLatLongField {
167
167
  multi: true,
168
168
  useExisting: forwardRef(() => MatLatLongField),
169
169
  },
170
- ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<mat-form-field\n #formField\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n [class.mdc-text-field--invalid]=\"formControl.touched && formControl.invalid\"\n class=\"mat-latlong-field mat-latlong-field-{{ type }} {{ classList }}\"\n>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n @if (floatLabel !== 'never' && placeholder | isNotNilOrBlank) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <mat-latlong-input\n #input\n [formControl]=\"formControl\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n [latLongPattern]=\"pattern\"\n [defaultSign]=\"defaultSign\"\n [maxDecimals]=\"maxDecimals\"\n [readonly]=\"readonly\"\n ></mat-latlong-input>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\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 <mat-error>\n {{ i18nErrorKeys | mapGet: errorKey | translate: (formControl.errors | mapGet: errorKey) }}\n </mat-error>\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\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n @if (clearable && !readonly) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"formControl.value | isNil\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\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: [""], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatLatLongFieldInput, selector: "mat-latlong-input", inputs: ["aria-describedby", "required", "disabled", "value", "type", "latLongPattern", "defaultSign", "maxDecimals", "readonly"] }, { kind: "pipe", type: i7.ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: i8.MapGetPipe, name: "mapGet" }, { kind: "pipe", type: i8.MapKeysPipe, name: "mapKeys" }, { kind: "pipe", type: i9.IsNotNilOrBlankPipe, name: "isNotNilOrBlank" }, { kind: "pipe", type: i9.IsNilPipe, name: "isNil" }, { kind: "pipe", type: i10.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
170
+ ], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<mat-form-field\n #formField\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [subscriptSizing]=\"subscriptSizing\"\n [class.mdc-text-field--invalid]=\"formControl.touched && formControl.invalid\"\n class=\"mat-latlong-field mat-latlong-field-{{ type }} {{ classList }}\"\n>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n\n @if (floatLabel !== 'never' && placeholder | isNotNilOrBlank) {\n <mat-label>{{ placeholder }}</mat-label>\n }\n\n <mat-latlong-input\n #input\n [formControl]=\"formControl\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n [latLongPattern]=\"pattern\"\n [defaultSign]=\"defaultSign\"\n [maxDecimals]=\"maxDecimals\"\n [readonly]=\"readonly\"\n ></mat-latlong-input>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\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 <mat-error>\n {{ i18nErrorKeys | mapGet: errorKey | translate: (formControl.errors | mapGet: errorKey) }}\n </mat-error>\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\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n\n<ng-template #matSuffixTemplate>\n @if (clearable && !readonly) {\n <button\n matSuffix\n mat-icon-button\n tabindex=\"-1\"\n type=\"button\"\n (click)=\"clearValue($event)\"\n [hidden]=\"formControl.value | isNil\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n\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: [""], dependencies: [{ kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { 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: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatLatLongFieldInput, selector: "mat-latlong-input", inputs: ["aria-describedby", "required", "disabled", "value", "defaultSign", "type", "latLongPattern", "maxDecimals", "readonly"] }, { kind: "pipe", type: i7.ArrayFirstPipe, name: "arrayFirst" }, { kind: "pipe", type: i8.MapGetPipe, name: "mapGet" }, { kind: "pipe", type: i8.MapKeysPipe, name: "mapKeys" }, { kind: "pipe", type: i9.IsNotNilOrBlankPipe, name: "isNotNilOrBlank" }, { kind: "pipe", type: i9.IsNilPipe, name: "isNil" }, { kind: "pipe", type: i10.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
171
171
  }
172
172
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatLatLongField, decorators: [{
173
173
  type: Component,