@arsedizioni/ars-utils 18.1.33 → 18.1.34

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.
@@ -225,12 +225,12 @@ export class FileInputComponent {
225
225
  this.preview.emit();
226
226
  }
227
227
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: FileInputComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
228
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: FileInputComponent, isStandalone: true, selector: "file-input", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, maxSizeMb: { classPropertyName: "maxSizeMb", publicName: "maxSizeMb", isSignal: true, isRequired: false, transformFunction: null }, minSizeMb: { classPropertyName: "minSizeMb", publicName: "minSizeMb", isSignal: true, isRequired: false, transformFunction: null }, isNew: { classPropertyName: "isNew", publicName: "isNew", isSignal: true, isRequired: false, transformFunction: null }, canPreview: { classPropertyName: "canPreview", publicName: "canPreview", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", download: "download", preview: "preview" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedBy": "this.describedBy" } }, providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }], viewQueries: [{ propertyName: "__file", first: true, predicate: ["__file"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-form-field style=\"width:100%\" [appearance]=\"appearance\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [(ngModel)]=\"fileName\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize\" [maxSizeMb]=\"maxSizeMb\" [minSizeMb]=\"minSizeMb\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew && canPreview) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew) {\r\n<button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\">\r\n <mat-icon>save_alt</mat-icon>\r\n</button>\r\n}\r\n @if (hasFile() && fileSize > 0) {\r\n<mat-hint align=\"left\">{{fileSize}} MB</mat-hint>\r\n}\r\n @if (hasFile() && fileSize == 0) {\r\n<mat-hint align=\"left\">\r\n < 1 MB</mat-hint>\r\n} @if (maxSizeMb) {\r\n<mat-hint align=\"end\">Massimo {{maxSizeMb}} MB\r\n </mat-hint>\r\n}\r\n @if (_fileName.invalid && !hasFile()) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n @if (_fileName.invalid && hasFile()) {\r\n<mat-error>Dimensione non consentita.</mat-error>\r\n}\r\n</mat-form-field>", styles: [""], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { 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: "ngmodule", type: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: FileSizeValidatorDirective, selector: "[fileSize]", inputs: ["maxSizeMb", "minSizeMb", "size"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
228
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: FileInputComponent, isStandalone: true, selector: "file-input", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, maxSizeMb: { classPropertyName: "maxSizeMb", publicName: "maxSizeMb", isSignal: true, isRequired: false, transformFunction: null }, minSizeMb: { classPropertyName: "minSizeMb", publicName: "minSizeMb", isSignal: true, isRequired: false, transformFunction: null }, isNew: { classPropertyName: "isNew", publicName: "isNew", isSignal: true, isRequired: false, transformFunction: null }, canPreview: { classPropertyName: "canPreview", publicName: "canPreview", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", download: "download", preview: "preview" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedBy": "this.describedBy" } }, providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }], viewQueries: [{ propertyName: "__file", first: true, predicate: ["__file"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-form-field style=\"width:100%\" [appearance]=\"appearance()\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [(ngModel)]=\"fileName\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize\" [maxSizeMb]=\"maxSizeMb()\" [minSizeMb]=\"minSizeMb()\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew() && canPreview()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew) {\r\n<button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\">\r\n <mat-icon>save_alt</mat-icon>\r\n</button>\r\n}\r\n @if (hasFile() && fileSize > 0) {\r\n<mat-hint align=\"left\">{{fileSize}} MB</mat-hint>\r\n}\r\n @if (hasFile() && fileSize == 0) {\r\n<mat-hint align=\"left\">\r\n < 1 MB</mat-hint>\r\n} @if (maxSizeMb()) {\r\n<mat-hint align=\"end\">Massimo {{maxSizeMb()}} MB\r\n </mat-hint>\r\n}\r\n @if (_fileName.invalid && !hasFile()) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n @if (_fileName.invalid && hasFile()) {\r\n<mat-error>Dimensione non consentita.</mat-error>\r\n}\r\n</mat-form-field>", styles: [""], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { 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: "ngmodule", type: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: FileSizeValidatorDirective, selector: "[fileSize]", inputs: ["maxSizeMb", "minSizeMb", "size"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
229
229
  }
230
230
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: FileInputComponent, decorators: [{
231
231
  type: Component,
232
232
  args: [{ selector: 'file-input', providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatFormFieldModule, MatInputModule, FormsModule, FileSizeValidatorDirective, MatButtonModule,
233
- MatIconModule, MatTooltipModule], template: "<mat-form-field style=\"width:100%\" [appearance]=\"appearance\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [(ngModel)]=\"fileName\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize\" [maxSizeMb]=\"maxSizeMb\" [minSizeMb]=\"minSizeMb\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew && canPreview) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew) {\r\n<button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\">\r\n <mat-icon>save_alt</mat-icon>\r\n</button>\r\n}\r\n @if (hasFile() && fileSize > 0) {\r\n<mat-hint align=\"left\">{{fileSize}} MB</mat-hint>\r\n}\r\n @if (hasFile() && fileSize == 0) {\r\n<mat-hint align=\"left\">\r\n < 1 MB</mat-hint>\r\n} @if (maxSizeMb) {\r\n<mat-hint align=\"end\">Massimo {{maxSizeMb}} MB\r\n </mat-hint>\r\n}\r\n @if (_fileName.invalid && !hasFile()) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n @if (_fileName.invalid && hasFile()) {\r\n<mat-error>Dimensione non consentita.</mat-error>\r\n}\r\n</mat-form-field>" }]
233
+ MatIconModule, MatTooltipModule], template: "<mat-form-field style=\"width:100%\" [appearance]=\"appearance()\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [(ngModel)]=\"fileName\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize\" [maxSizeMb]=\"maxSizeMb()\" [minSizeMb]=\"minSizeMb()\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew() && canPreview()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew) {\r\n<button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\">\r\n <mat-icon>save_alt</mat-icon>\r\n</button>\r\n}\r\n @if (hasFile() && fileSize > 0) {\r\n<mat-hint align=\"left\">{{fileSize}} MB</mat-hint>\r\n}\r\n @if (hasFile() && fileSize == 0) {\r\n<mat-hint align=\"left\">\r\n < 1 MB</mat-hint>\r\n} @if (maxSizeMb()) {\r\n<mat-hint align=\"end\">Massimo {{maxSizeMb()}} MB\r\n </mat-hint>\r\n}\r\n @if (_fileName.invalid && !hasFile()) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n @if (_fileName.invalid && hasFile()) {\r\n<mat-error>Dimensione non consentita.</mat-error>\r\n}\r\n</mat-form-field>" }]
234
234
  }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
235
235
  type: Optional
236
236
  }, {
@@ -259,4 +259,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
259
259
  }], preview: [{
260
260
  type: Output
261
261
  }] } });
262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24vdWkvY29tcG9uZW50cy9maWxlLWlucHV0L2ZpbGUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uL3VpL2NvbXBvbmVudHMvZmlsZS1pbnB1dC9maWxlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUF1QixZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBd0IsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzTyxPQUFPLEVBQW1DLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxP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QUFRO2dCQStCZixRQUFRO3NCQURYLEtBQUs7Z0JBVUYsUUFBUTtzQkFEWCxLQUFLO2dCQWdCRixXQUFXO3NCQURkLEtBQUs7Z0JBc0JTLEVBQUU7c0JBQWhCLFdBQVc7Z0JBRVIsZ0JBQWdCO3NCQURuQixXQUFXO3VCQUFDLGdCQUFnQjtnQkFJUyxXQUFXO3NCQUFoRCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFFMUIsT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBPdXRwdXQsIFJlbmRlcmVyMiwgU2VsZiwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sLCBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgRmlsZUluZm8sIEZpbGVTaXplVmFsaWRhdG9yRGlyZWN0aXZlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBVSVNlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdmaWxlLWlucHV0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2ZpbGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IEZpbGVJbnB1dENvbXBvbmVudCB9XSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGltcG9ydHM6IFtNYXRGb3JtRmllbGRNb2R1bGUsIE1hdElucHV0TW9kdWxlLCBGb3Jtc01vZHVsZSwgRmlsZVNpemVWYWxpZGF0b3JEaXJlY3RpdmUsICBNYXRCdXR0b25Nb2R1bGUsIFxyXG4gICAgICBNYXRJY29uTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZUlucHV0Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50c1xyXG4gIE9uRGVzdHJveSxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIERvQ2hlY2ssXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE1hdEZvcm1GaWVsZENvbnRyb2w8RmlsZUluZm8+LFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgQFZpZXdDaGlsZCgnX19maWxlJykgX19maWxlITogRWxlbWVudFJlZjtcclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG4gIHByaXZhdGUgdWlTZXJ2aWNlID0gaW5qZWN0KFVJU2VydmljZSk7XHJcblxyXG4gIC8vIEluaXRpYWxpemVcclxuICBzdGF0aWMgbmV4dElkID0gMDtcclxuICByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcHJldmlvdXNOYXRpdmVWYWx1ZTogYW55O1xyXG4gIGNvbnRyb2xUeXBlOiBzdHJpbmcgPSAnZmlsZS1pbnB1dCc7XHJcbiAgZm9jdXNlZCA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBmaWxlU2l6ZTogbnVtYmVyO1xyXG4gIFxyXG4gIHByb3RlY3RlZCBjYW5DYXB0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3ZhbHVlOiBGaWxlSW5mbyA9IG5ldyBGaWxlSW5mbygpO1xyXG4gIHNldCB2YWx1ZSh2YWx1ZTogRmlsZUluZm8pIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLl92YWx1ZSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB0aGlzLmNoYW5nZWQuZW1pdCh0aGlzLl92YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCB2YWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcbiAgZ2V0IHNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWUgJiYgdGhpcy5fdmFsdWUuZmlsZS5zaXplO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcclxuICB9XHJcbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBnZXQgZGlzYWJsZWQoKSB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgfVxyXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xyXG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KClcclxuICBnZXQgcGxhY2Vob2xkZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XHJcbiAgfVxyXG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgZmlsZU5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XHJcbiAgbWF4U2l6ZU1iID0gaW5wdXQ8bnVtYmVyPig1KTtcclxuICBtaW5TaXplTWIgPSBpbnB1dDxudW1iZXI+KDApO1xyXG4gIGlzTmV3ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhblByZXZpZXcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgYXBwZWFyYW5jZSA9IGlucHV0PCdmaWxsJyB8ICdvdXRsaW5lZCcgfCBudWxsPih0aGlzLnVpU2VydmljZS5hcHBlYXJhbmNlKTtcclxuICBhY2NlcHQgPSBpbnB1dDxzdHJpbmc+KCk7XHJcbiAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLl92YWx1ZSB8fCAhdGhpcy5fdmFsdWUuZmlsZTtcclxuICB9XHJcbiAgZ2V0IGVycm9yU3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wuZXJyb3JzICE9IG51bGwgJiYgdGhpcy5uZ0NvbnRyb2wudG91Y2hlZDtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCkgaWQgPSBgJHt0aGlzLmNvbnRyb2xUeXBlfS0ke0ZpbGVJbnB1dENvbXBvbmVudC5uZXh0SWQrK31gO1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmxvYXRpbmcnKVxyXG4gIGdldCBzaG91bGRMYWJlbEZsb2F0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eTtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkQnknKSBkZXNjcmliZWRCeSA9ICcnO1xyXG5cclxuICBAT3V0cHV0KCkgY2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZUluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGRvd25sb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHByZXZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBwcm9wYWdhdGVDaGFuZ2U6IChfOiBhbnkpID0+IHZvaWQgPSAoXzogYW55KSA9PiB7IH07XHJcbiAgcHJpdmF0ZSBwcm9wYWdhdGVUb3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCkge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBhd2FpdCB0aGlzLnNldHVwRGV2aWNlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dXAgY2FwdHVyZSBkZXZpY2VzICAgXHJcbiAgICovXHJcbiAgYXN5bmMgc2V0dXBEZXZpY2VzKCkge1xyXG4gICAgdGhpcy5jYW5DYXB0dXJlID0gZmFsc2U7XHJcbiAgICBpZiAobmF2aWdhdG9yLm1lZGlhRGV2aWNlcyAmJiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHtcclxuICAgICAgICAgIHZpZGVvOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHN0cmVhbSkge1xyXG4gICAgICAgICAgdGhpcy5jYW5DYXB0dXJlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9XHJcbiAgICAgICAgdGhpcy5jYW5DYXB0dXJlXHJcbiAgICAgICAgICA/IFwiU2VsZXppb25hIGZpbGUgbyBhY3F1aXNpc2NpIGNvbiBmb3RvY2FtZXJhXCJcclxuICAgICAgICAgIDogXCJTZWxlemlvbmEgZmlsZVwiXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUlucHV0RGlydHlDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShjaGFuZ2VzLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmICghU3lzdGVtVXRpbHMuaXNCcm93c2VyKCkpIHJldHVybjtcclxuICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5pZCk7XHJcbiAgICBpZiAoZWxlbSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGVsZW0sICdkaXNhYmxlZCcsIGlzRGlzYWJsZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Db250YWluZXJDbGljaygpIHtcclxuICAgIGlmICghdGhpcy5mb2N1c2VkKSB7XHJcbiAgICAgIGlmICghU3lzdGVtVXRpbHMuaXNCcm93c2VyKCkpIHJldHVybjtcclxuICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKTtcclxuICAgICAgaWYgKGVsZW0pIHtcclxuICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVJbnB1dERpcnR5Q2hlY2soKSB7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgaWYgKHRoaXMucHJldmlvdXNOYXRpdmVWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcclxuICAgICAgdGhpcy5wcmV2aW91c05hdGl2ZVZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBhIGZpbGVcclxuICAgKiBAcGFyYW0gZSA6IGV2ZW50XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkICBzZWxlY3RGaWxlKGU6IGFueSkge1xyXG4gICAgaWYgKGUudGFyZ2V0LmZpbGVzKSB7XHJcbiAgICAgIGxldCBmID0gZS50YXJnZXQuZmlsZXNbMF07XHJcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBmLm5hbWU7XHJcbiAgICAgIHRoaXMuZmlsZVNpemUgPSBNYXRoLnJvdW5kKGYuc2l6ZSAvICgxMDI0ICogMTAyNCkpO1xyXG4gICAgICBsZXQgZmkgPSBuZXcgRmlsZUluZm8oKTtcclxuICAgICAgZmkuZmlsZSA9IGY7XHJcbiAgICAgIGZpLnZhbGlkID1cclxuICAgICAgICAoIXRoaXMubWF4U2l6ZU1iIHx8IHRoaXMuZmlsZVNpemUgPD0gdGhpcy5tYXhTaXplTWIoKSkgJiZcclxuICAgICAgICAoIXRoaXMubWluU2l6ZU1iIHx8IHRoaXMuZmlsZVNpemUgPj0gdGhpcy5taW5TaXplTWIoKSk7XHJcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShmaSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBhIGZpbGUgaGFzIGJlZW4gc2VsZWN0ZWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaGFzRmlsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5maWxlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgZmlsZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCAgY2xlYXJGaWxlKCkge1xyXG4gICAgaWYgKHRoaXMuaGFzRmlsZSgpKSB7XHJcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBudWxsO1xyXG4gICAgICB0aGlzLmZpbGVTaXplID0gMDtcclxuICAgICAgbGV0IGZpID0gbmV3IEZpbGVJbmZvKCk7XHJcbiAgICAgIGZpLmZpbGUgPSBudWxsO1xyXG4gICAgICBmaS52YWxpZCA9ICF0aGlzLnJlcXVpcmVkXHJcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShmaSk7XHJcbiAgICAgIHRoaXMuX19maWxlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG93bmxvYWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgIGRvd25sb2FkRmlsZSgpIHtcclxuICAgIGlmICghdGhpcy5pc05ldykgdGhpcy5kb3dubG9hZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUHJldmlld1xyXG4gKi9cclxuICBwcm90ZWN0ZWQgcHJldmlld0ZpbGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNOZXcgJiYgdGhpcy5jYW5QcmV2aWV3KSB0aGlzLnByZXZpZXcuZW1pdCgpO1xyXG4gIH1cclxufVxyXG4iLCI8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDoxMDAlXCIgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiPlxyXG4gIDxtYXQtbGFiZWw+e3twbGFjZWhvbGRlcn19PC9tYXQtbGFiZWw+XHJcbiAgPGlucHV0IHR5cGU9XCJmaWxlXCIgW2hpZGRlbl09XCJ0cnVlXCIgW2FjY2VwdF09XCJhY2NlcHRcIiAoY2hhbmdlKT1cInNlbGVjdEZpbGUoJGV2ZW50KVwiICNfX2ZpbGUgLz5cclxuICA8aW5wdXQgbmFtZT1cIl9maWxlTmFtZVwiICNfZmlsZU5hbWU9XCJuZ01vZGVsXCIgWyhuZ01vZGVsKV09XCJmaWxlTmFtZVwiIFtpZF09XCJpZFwiIG1hdElucHV0IHJlYWRvbmx5IFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbiAgICBmaWxlU2l6ZSBbc2l6ZV09XCJmaWxlU2l6ZVwiIFttYXhTaXplTWJdPVwibWF4U2l6ZU1iXCIgW21pblNpemVNYl09XCJtaW5TaXplTWJcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAvPlxyXG4gIEBpZiAoaGFzRmlsZSgpKSB7XHJcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkF6emVyYVwiIChjbGljayk9XCJjbGVhckZpbGUoKVwiPlxyXG4gICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICghZGlzYWJsZWQpIHtcclxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiX19maWxlLmNsaWNrKClcIiBhcmlhLWxhYmVsPVwiU2VsZXppb25hIGZpbGVcIlxyXG4gICAgbWF0VG9vbHRpcD1cIlNlbGV6aW9uYVwiPlxyXG4gICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoIWlzTmV3ICYmIGNhblByZXZpZXcpIHtcclxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IChjbGljayk9XCJwcmV2aWV3RmlsZSgpXCIgYXJpYS1sYWJlbD1cIkFudGVwcmltYVwiIG1hdFRvb2x0aXA9XCJBbnRlcHJpbWFcIj5cclxuICAgIDxtYXQtaWNvbj5wcmV2aWV3PC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICghaXNOZXcpIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiZG93bmxvYWRGaWxlKClcIiBhcmlhLWxhYmVsPVwiU2NhcmljYSBmaWxlXCJcclxuICAgbWF0VG9vbHRpcD1cIlNjYXJpY2FcIj5cclxuICA8bWF0LWljb24+c2F2ZV9hbHQ8L21hdC1pY29uPlxyXG48L2J1dHRvbj5cclxufVxyXG4gIEBpZiAoaGFzRmlsZSgpICYmIGZpbGVTaXplID4gMCkge1xyXG48bWF0LWhpbnQgYWxpZ249XCJsZWZ0XCI+e3tmaWxlU2l6ZX19IE1CPC9tYXQtaGludD5cclxufVxyXG4gIEBpZiAoaGFzRmlsZSgpICYmIGZpbGVTaXplID09IDApIHtcclxuPG1hdC1oaW50IGFsaWduPVwibGVmdFwiPlxyXG4gICAgPCAxIE1CPC9tYXQtaGludD5cclxufSBAaWYgKG1heFNpemVNYikge1xyXG48bWF0LWhpbnQgYWxpZ249XCJlbmRcIj5NYXNzaW1vIHt7bWF4U2l6ZU1ifX0gTUJcclxuICA8L21hdC1oaW50PlxyXG59XHJcbiAgQGlmIChfZmlsZU5hbWUuaW52YWxpZCAmJiAhaGFzRmlsZSgpKSB7XHJcbjxtYXQtZXJyb3I+T2JibGlnYXRvcmlvLjwvbWF0LWVycm9yPlxyXG59XHJcbiAgQGlmIChfZmlsZU5hbWUuaW52YWxpZCAmJiBoYXNGaWxlKCkpIHtcclxuPG1hdC1lcnJvcj5EaW1lbnNpb25lIG5vbiBjb25zZW50aXRhLjwvbWF0LWVycm9yPlxyXG59XHJcbjwvbWF0LWZvcm0tZmllbGQ+Il19
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvdWkuYXBwbGljYXRpb24vdWkvY29tcG9uZW50cy9maWxlLWlucHV0L2ZpbGUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL3VpLmFwcGxpY2F0aW9uL3VpL2NvbXBvbmVudHMvZmlsZS1pbnB1dC9maWxlLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBaUIsdUJBQXVCLEVBQUUsU0FBUyxFQUF1QixZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBd0IsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzTyxPQUFPLEVBQW1DLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxRQUFRLEVBQUUsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7O0FBWXRELE1BQU0sT0FBTyxrQkFBa0I7SUFjN0IsYUFBYTthQUNOLFdBQU0sR0FBRyxDQUFDLEFBQUosQ0FBSztJQVVsQixJQUFJLEtBQUssQ0FBQyxLQUFlO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDOUMsQ0FBQztJQUdELElBQ0ksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBQ0QsSUFBSSxRQUFRLENBQUMsS0FBYztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQ0ksUUFBUTtRQUNWLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN0RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLEtBQWM7UUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFDSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLFdBQVcsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQVNELElBQUksS0FBSztRQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUNELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxJQUNJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFXRCxZQUM2QixTQUFvQjtRQUFwQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBMUZ6QyxhQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdCLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFJN0IsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRTVDLGdCQUFXLEdBQVcsWUFBWSxDQUFDO1FBQ25DLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFHTixlQUFVLEdBQVksS0FBSyxDQUFDO1FBRTlCLFdBQU0sR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBY2xDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFTM0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQWUzQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQVVsQyxhQUFRLEdBQUcsS0FBSyxFQUFVLENBQUM7UUFDM0IsY0FBUyxHQUFHLEtBQUssQ0FBUyxDQUFDLENBQUMsQ0FBQztRQUM3QixjQUFTLEdBQUcsS0FBSyxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzdCLFVBQUssR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDOUIsZUFBVSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNuQyxlQUFVLEdBQUcsS0FBSyxDQUE2QixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFFLFdBQU0sR0FBRyxLQUFLLEVBQVUsQ0FBQztRQU9WLE9BQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUtuQyxnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUU3QyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUN2QyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNuQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVwQyxvQkFBZSxHQUFxQixDQUFDLENBQU0sRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELHFCQUFnQixHQUFlLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUsvQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWU7UUFDbkIsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFlBQVk7UUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxTQUFTLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEUsSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7b0JBQ3ZELEtBQUssRUFBRSxJQUFJO2lCQUNaLENBQUMsQ0FBQztnQkFDSCxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN6QixDQUFDO1lBQ0gsQ0FBQztZQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVztnQkFDZCxJQUFJLENBQUMsVUFBVTtvQkFDYixDQUFDLENBQUMsNENBQTRDO29CQUM5QyxDQUFDLENBQUMsZ0JBQWdCLENBQUE7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQU87UUFDdEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBYTtRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFFLFVBQW1CO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFO1lBQUUsT0FBTztRQUNyQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1QyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUU7Z0JBQUUsT0FBTztZQUNyQyxJQUFJLElBQUksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFUyxxQkFBcUI7UUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsUUFBUSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDUSxVQUFVLENBQUMsQ0FBTTtRQUMxQixJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkQsSUFBSSxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUN4QixFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNaLEVBQUUsQ0FBQyxLQUFLO2dCQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUN0RCxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNPLE9BQU87UUFDZixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ1EsU0FBUztRQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLElBQUksRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDeEIsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDZixFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQTtZQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNRLFlBQVk7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O0tBRUM7SUFDUyxXQUFXO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxRCxDQUFDOzhHQXBQVSxrQkFBa0I7a0dBQWxCLGtCQUFrQiw0aURBTmhCLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixFQUFFLENBQUMsaUpDaEJsRiw2ekRBMkNpQix5RER4Qkgsa0JBQWtCLGdtQkFBRSxjQUFjLDBXQUFFLFdBQVcsNDBCQUFFLDBCQUEwQixrR0FBRyxlQUFlLDJJQUNyRyxhQUFhLG1MQUFFLGdCQUFnQjs7MkZBRXhCLGtCQUFrQjtrQkFWOUIsU0FBUzsrQkFDSSxZQUFZLGFBR1gsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLG9CQUFvQixFQUFFLENBQUMsY0FDbEUsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSwwQkFBMEIsRUFBRyxlQUFlO3dCQUNyRyxhQUFhLEVBQUUsZ0JBQWdCLENBQUM7OzBCQXVHakMsUUFBUTs7MEJBQUksSUFBSTt5Q0E1RkUsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRO2dCQStCZixRQUFRO3NCQURYLEtBQUs7Z0JBVUYsUUFBUTtzQkFEWCxLQUFLO2dCQWdCRixXQUFXO3NCQURkLEtBQUs7Z0JBc0JTLEVBQUU7c0JBQWhCLFdBQVc7Z0JBRVIsZ0JBQWdCO3NCQURuQixXQUFXO3VCQUFDLGdCQUFnQjtnQkFJUyxXQUFXO3NCQUFoRCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFFMUIsT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBPdXRwdXQsIFJlbmRlcmVyMiwgU2VsZiwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sLCBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgRmlsZUluZm8sIEZpbGVTaXplVmFsaWRhdG9yRGlyZWN0aXZlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBVSVNlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdmaWxlLWlucHV0JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9maWxlLWlucHV0LmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2ZpbGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IEZpbGVJbnB1dENvbXBvbmVudCB9XSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICAgIGltcG9ydHM6IFtNYXRGb3JtRmllbGRNb2R1bGUsIE1hdElucHV0TW9kdWxlLCBGb3Jtc01vZHVsZSwgRmlsZVNpemVWYWxpZGF0b3JEaXJlY3RpdmUsICBNYXRCdXR0b25Nb2R1bGUsIFxyXG4gICAgICBNYXRJY29uTW9kdWxlLCBNYXRUb29sdGlwTW9kdWxlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsZUlucHV0Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50c1xyXG4gIE9uRGVzdHJveSxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIERvQ2hlY2ssXHJcbiAgT25DaGFuZ2VzLFxyXG4gIE1hdEZvcm1GaWVsZENvbnRyb2w8RmlsZUluZm8+LFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcclxuXHJcbiAgQFZpZXdDaGlsZCgnX19maWxlJykgX19maWxlITogRWxlbWVudFJlZjtcclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG4gIHByaXZhdGUgdWlTZXJ2aWNlID0gaW5qZWN0KFVJU2VydmljZSk7XHJcblxyXG4gIC8vIEluaXRpYWxpemVcclxuICBzdGF0aWMgbmV4dElkID0gMDtcclxuICByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgcHJldmlvdXNOYXRpdmVWYWx1ZTogYW55O1xyXG4gIGNvbnRyb2xUeXBlOiBzdHJpbmcgPSAnZmlsZS1pbnB1dCc7XHJcbiAgZm9jdXNlZCA9IGZhbHNlO1xyXG4gIHByb3RlY3RlZCBmaWxlU2l6ZTogbnVtYmVyO1xyXG4gIFxyXG4gIHByb3RlY3RlZCBjYW5DYXB0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX3ZhbHVlOiBGaWxlSW5mbyA9IG5ldyBGaWxlSW5mbygpO1xyXG4gIHNldCB2YWx1ZSh2YWx1ZTogRmlsZUluZm8pIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLl92YWx1ZSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB0aGlzLmNoYW5nZWQuZW1pdCh0aGlzLl92YWx1ZSk7XHJcbiAgfVxyXG4gIGdldCB2YWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcbiAgZ2V0IHNpemUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWUgJiYgdGhpcy5fdmFsdWUuZmlsZS5zaXplO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCByZXF1aXJlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcclxuICB9XHJcbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBnZXQgZGlzYWJsZWQoKSB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQgIT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgfVxyXG4gIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xyXG4gICAgaWYgKHRoaXMuZm9jdXNlZCkge1xyXG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XHJcbiAgQElucHV0KClcclxuICBnZXQgcGxhY2Vob2xkZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XHJcbiAgfVxyXG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgZmlsZU5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XHJcbiAgbWF4U2l6ZU1iID0gaW5wdXQ8bnVtYmVyPig1KTtcclxuICBtaW5TaXplTWIgPSBpbnB1dDxudW1iZXI+KDApO1xyXG4gIGlzTmV3ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhblByZXZpZXcgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgYXBwZWFyYW5jZSA9IGlucHV0PCdmaWxsJyB8ICdvdXRsaW5lZCcgfCBudWxsPih0aGlzLnVpU2VydmljZS5hcHBlYXJhbmNlKTtcclxuICBhY2NlcHQgPSBpbnB1dDxzdHJpbmc+KCk7XHJcbiAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLl92YWx1ZSB8fCAhdGhpcy5fdmFsdWUuZmlsZTtcclxuICB9XHJcbiAgZ2V0IGVycm9yU3RhdGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uZ0NvbnRyb2wuZXJyb3JzICE9IG51bGwgJiYgdGhpcy5uZ0NvbnRyb2wudG91Y2hlZDtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCkgaWQgPSBgJHt0aGlzLmNvbnRyb2xUeXBlfS0ke0ZpbGVJbnB1dENvbXBvbmVudC5uZXh0SWQrK31gO1xyXG4gIEBIb3N0QmluZGluZygnY2xhc3MuZmxvYXRpbmcnKVxyXG4gIGdldCBzaG91bGRMYWJlbEZsb2F0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eTtcclxuICB9XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkQnknKSBkZXNjcmliZWRCeSA9ICcnO1xyXG5cclxuICBAT3V0cHV0KCkgY2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZUluZm8+KCk7XHJcbiAgQE91dHB1dCgpIGRvd25sb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHByZXZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBwcm9wYWdhdGVDaGFuZ2U6IChfOiBhbnkpID0+IHZvaWQgPSAoXzogYW55KSA9PiB7IH07XHJcbiAgcHJpdmF0ZSBwcm9wYWdhdGVUb3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCkge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBhd2FpdCB0aGlzLnNldHVwRGV2aWNlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0dXAgY2FwdHVyZSBkZXZpY2VzICAgXHJcbiAgICovXHJcbiAgYXN5bmMgc2V0dXBEZXZpY2VzKCkge1xyXG4gICAgdGhpcy5jYW5DYXB0dXJlID0gZmFsc2U7XHJcbiAgICBpZiAobmF2aWdhdG9yLm1lZGlhRGV2aWNlcyAmJiBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHtcclxuICAgICAgICAgIHZpZGVvOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHN0cmVhbSkge1xyXG4gICAgICAgICAgdGhpcy5jYW5DYXB0dXJlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggeyB9XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9XHJcbiAgICAgICAgdGhpcy5jYW5DYXB0dXJlXHJcbiAgICAgICAgICA/IFwiU2VsZXppb25hIGZpbGUgbyBhY3F1aXNpc2NpIGNvbiBmb3RvY2FtZXJhXCJcclxuICAgICAgICAgIDogXCJTZWxlemlvbmEgZmlsZVwiXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKSB7XHJcbiAgICB0aGlzLnVwZGF0ZUlucHV0RGlydHlDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKGNoYW5nZXMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShjaGFuZ2VzLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICBzZXREZXNjcmliZWRCeUlkcyhpZHM6IHN0cmluZ1tdKSB7XHJcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIGlmICghU3lzdGVtVXRpbHMuaXNCcm93c2VyKCkpIHJldHVybjtcclxuICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5pZCk7XHJcbiAgICBpZiAoZWxlbSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGVsZW0sICdkaXNhYmxlZCcsIGlzRGlzYWJsZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Db250YWluZXJDbGljaygpIHtcclxuICAgIGlmICghdGhpcy5mb2N1c2VkKSB7XHJcbiAgICAgIGlmICghU3lzdGVtVXRpbHMuaXNCcm93c2VyKCkpIHJldHVybjtcclxuICAgICAgbGV0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKTtcclxuICAgICAgaWYgKGVsZW0pIHtcclxuICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVJbnB1dERpcnR5Q2hlY2soKSB7XHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xyXG4gICAgaWYgKHRoaXMucHJldmlvdXNOYXRpdmVWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcclxuICAgICAgdGhpcy5wcmV2aW91c05hdGl2ZVZhbHVlID0gbmV3VmFsdWU7XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBhIGZpbGVcclxuICAgKiBAcGFyYW0gZSA6IGV2ZW50XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkICBzZWxlY3RGaWxlKGU6IGFueSkge1xyXG4gICAgaWYgKGUudGFyZ2V0LmZpbGVzKSB7XHJcbiAgICAgIGxldCBmID0gZS50YXJnZXQuZmlsZXNbMF07XHJcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBmLm5hbWU7XHJcbiAgICAgIHRoaXMuZmlsZVNpemUgPSBNYXRoLnJvdW5kKGYuc2l6ZSAvICgxMDI0ICogMTAyNCkpO1xyXG4gICAgICBsZXQgZmkgPSBuZXcgRmlsZUluZm8oKTtcclxuICAgICAgZmkuZmlsZSA9IGY7XHJcbiAgICAgIGZpLnZhbGlkID1cclxuICAgICAgICAoIXRoaXMubWF4U2l6ZU1iIHx8IHRoaXMuZmlsZVNpemUgPD0gdGhpcy5tYXhTaXplTWIoKSkgJiZcclxuICAgICAgICAoIXRoaXMubWluU2l6ZU1iIHx8IHRoaXMuZmlsZVNpemUgPj0gdGhpcy5taW5TaXplTWIoKSk7XHJcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShmaSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBhIGZpbGUgaGFzIGJlZW4gc2VsZWN0ZWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaGFzRmlsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5maWxlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgZmlsZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCAgY2xlYXJGaWxlKCkge1xyXG4gICAgaWYgKHRoaXMuaGFzRmlsZSgpKSB7XHJcbiAgICAgIHRoaXMuZmlsZU5hbWUgPSBudWxsO1xyXG4gICAgICB0aGlzLmZpbGVTaXplID0gMDtcclxuICAgICAgbGV0IGZpID0gbmV3IEZpbGVJbmZvKCk7XHJcbiAgICAgIGZpLmZpbGUgPSBudWxsO1xyXG4gICAgICBmaS52YWxpZCA9ICF0aGlzLnJlcXVpcmVkXHJcbiAgICAgIHRoaXMud3JpdGVWYWx1ZShmaSk7XHJcbiAgICAgIHRoaXMuX19maWxlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG93bmxvYWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgIGRvd25sb2FkRmlsZSgpIHtcclxuICAgIGlmICghdGhpcy5pc05ldykgdGhpcy5kb3dubG9hZC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogUHJldmlld1xyXG4gKi9cclxuICBwcm90ZWN0ZWQgcHJldmlld0ZpbGUoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNOZXcgJiYgdGhpcy5jYW5QcmV2aWV3KSB0aGlzLnByZXZpZXcuZW1pdCgpO1xyXG4gIH1cclxufVxyXG4iLCI8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDoxMDAlXCIgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZSgpXCI+XHJcbiAgPG1hdC1sYWJlbD57e3BsYWNlaG9sZGVyfX08L21hdC1sYWJlbD5cclxuICA8aW5wdXQgdHlwZT1cImZpbGVcIiBbaGlkZGVuXT1cInRydWVcIiBbYWNjZXB0XT1cImFjY2VwdFwiIChjaGFuZ2UpPVwic2VsZWN0RmlsZSgkZXZlbnQpXCIgI19fZmlsZSAvPlxyXG4gIDxpbnB1dCBuYW1lPVwiX2ZpbGVOYW1lXCIgI19maWxlTmFtZT1cIm5nTW9kZWxcIiBbKG5nTW9kZWwpXT1cImZpbGVOYW1lXCIgW2lkXT1cImlkXCIgbWF0SW5wdXQgcmVhZG9ubHkgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcclxuICAgIGZpbGVTaXplIFtzaXplXT1cImZpbGVTaXplXCIgW21heFNpemVNYl09XCJtYXhTaXplTWIoKVwiIFttaW5TaXplTWJdPVwibWluU2l6ZU1iKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAvPlxyXG4gIEBpZiAoaGFzRmlsZSgpKSB7XHJcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggYXJpYS1sYWJlbD1cIkF6emVyYVwiIChjbGljayk9XCJjbGVhckZpbGUoKVwiPlxyXG4gICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICghZGlzYWJsZWQpIHtcclxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwiX19maWxlLmNsaWNrKClcIiBhcmlhLWxhYmVsPVwiU2VsZXppb25hIGZpbGVcIlxyXG4gICAgbWF0VG9vbHRpcD1cIlNlbGV6aW9uYVwiPlxyXG4gICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoIWlzTmV3KCkgJiYgY2FuUHJldmlldygpKSB7XHJcbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCAoY2xpY2spPVwicHJldmlld0ZpbGUoKVwiIGFyaWEtbGFiZWw9XCJBbnRlcHJpbWFcIiBtYXRUb29sdGlwPVwiQW50ZXByaW1hXCI+XHJcbiAgICA8bWF0LWljb24+cHJldmlldzwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoIWlzTmV3KSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXggKGNsaWNrKT1cImRvd25sb2FkRmlsZSgpXCIgYXJpYS1sYWJlbD1cIlNjYXJpY2EgZmlsZVwiXHJcbiAgIG1hdFRvb2x0aXA9XCJTY2FyaWNhXCI+XHJcbiAgPG1hdC1pY29uPnNhdmVfYWx0PC9tYXQtaWNvbj5cclxuPC9idXR0b24+XHJcbn1cclxuICBAaWYgKGhhc0ZpbGUoKSAmJiBmaWxlU2l6ZSA+IDApIHtcclxuPG1hdC1oaW50IGFsaWduPVwibGVmdFwiPnt7ZmlsZVNpemV9fSBNQjwvbWF0LWhpbnQ+XHJcbn1cclxuICBAaWYgKGhhc0ZpbGUoKSAmJiBmaWxlU2l6ZSA9PSAwKSB7XHJcbjxtYXQtaGludCBhbGlnbj1cImxlZnRcIj5cclxuICAgIDwgMSBNQjwvbWF0LWhpbnQ+XHJcbn0gQGlmIChtYXhTaXplTWIoKSkge1xyXG48bWF0LWhpbnQgYWxpZ249XCJlbmRcIj5NYXNzaW1vIHt7bWF4U2l6ZU1iKCl9fSBNQlxyXG4gIDwvbWF0LWhpbnQ+XHJcbn1cclxuICBAaWYgKF9maWxlTmFtZS5pbnZhbGlkICYmICFoYXNGaWxlKCkpIHtcclxuPG1hdC1lcnJvcj5PYmJsaWdhdG9yaW8uPC9tYXQtZXJyb3I+XHJcbn1cclxuICBAaWYgKF9maWxlTmFtZS5pbnZhbGlkICYmIGhhc0ZpbGUoKSkge1xyXG48bWF0LWVycm9yPkRpbWVuc2lvbmUgbm9uIGNvbnNlbnRpdGEuPC9tYXQtZXJyb3I+XHJcbn1cclxuPC9tYXQtZm9ybS1maWVsZD4iXX0=
@@ -1527,12 +1527,12 @@ class FileInputComponent {
1527
1527
  this.preview.emit();
1528
1528
  }
1529
1529
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: FileInputComponent, deps: [{ token: i1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
1530
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: FileInputComponent, isStandalone: true, selector: "file-input", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, maxSizeMb: { classPropertyName: "maxSizeMb", publicName: "maxSizeMb", isSignal: true, isRequired: false, transformFunction: null }, minSizeMb: { classPropertyName: "minSizeMb", publicName: "minSizeMb", isSignal: true, isRequired: false, transformFunction: null }, isNew: { classPropertyName: "isNew", publicName: "isNew", isSignal: true, isRequired: false, transformFunction: null }, canPreview: { classPropertyName: "canPreview", publicName: "canPreview", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", download: "download", preview: "preview" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedBy": "this.describedBy" } }, providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }], viewQueries: [{ propertyName: "__file", first: true, predicate: ["__file"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-form-field style=\"width:100%\" [appearance]=\"appearance\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [(ngModel)]=\"fileName\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize\" [maxSizeMb]=\"maxSizeMb\" [minSizeMb]=\"minSizeMb\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew && canPreview) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew) {\r\n<button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\">\r\n <mat-icon>save_alt</mat-icon>\r\n</button>\r\n}\r\n @if (hasFile() && fileSize > 0) {\r\n<mat-hint align=\"left\">{{fileSize}} MB</mat-hint>\r\n}\r\n @if (hasFile() && fileSize == 0) {\r\n<mat-hint align=\"left\">\r\n < 1 MB</mat-hint>\r\n} @if (maxSizeMb) {\r\n<mat-hint align=\"end\">Massimo {{maxSizeMb}} MB\r\n </mat-hint>\r\n}\r\n @if (_fileName.invalid && !hasFile()) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n @if (_fileName.invalid && hasFile()) {\r\n<mat-error>Dimensione non consentita.</mat-error>\r\n}\r\n</mat-form-field>", styles: [""], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { 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.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.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: "ngmodule", type: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: FileSizeValidatorDirective, selector: "[fileSize]", inputs: ["maxSizeMb", "minSizeMb", "size"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1530
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: FileInputComponent, isStandalone: true, selector: "file-input", inputs: { required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, fileName: { classPropertyName: "fileName", publicName: "fileName", isSignal: true, isRequired: false, transformFunction: null }, maxSizeMb: { classPropertyName: "maxSizeMb", publicName: "maxSizeMb", isSignal: true, isRequired: false, transformFunction: null }, minSizeMb: { classPropertyName: "minSizeMb", publicName: "minSizeMb", isSignal: true, isRequired: false, transformFunction: null }, isNew: { classPropertyName: "isNew", publicName: "isNew", isSignal: true, isRequired: false, transformFunction: null }, canPreview: { classPropertyName: "canPreview", publicName: "canPreview", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", download: "download", preview: "preview" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedBy": "this.describedBy" } }, providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }], viewQueries: [{ propertyName: "__file", first: true, predicate: ["__file"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<mat-form-field style=\"width:100%\" [appearance]=\"appearance()\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [(ngModel)]=\"fileName\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize\" [maxSizeMb]=\"maxSizeMb()\" [minSizeMb]=\"minSizeMb()\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew() && canPreview()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew) {\r\n<button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\">\r\n <mat-icon>save_alt</mat-icon>\r\n</button>\r\n}\r\n @if (hasFile() && fileSize > 0) {\r\n<mat-hint align=\"left\">{{fileSize}} MB</mat-hint>\r\n}\r\n @if (hasFile() && fileSize == 0) {\r\n<mat-hint align=\"left\">\r\n < 1 MB</mat-hint>\r\n} @if (maxSizeMb()) {\r\n<mat-hint align=\"end\">Massimo {{maxSizeMb()}} MB\r\n </mat-hint>\r\n}\r\n @if (_fileName.invalid && !hasFile()) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n @if (_fileName.invalid && hasFile()) {\r\n<mat-error>Dimensione non consentita.</mat-error>\r\n}\r\n</mat-form-field>", styles: [""], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { 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.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4.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: "ngmodule", type: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: FileSizeValidatorDirective, selector: "[fileSize]", inputs: ["maxSizeMb", "minSizeMb", "size"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1531
1531
  }
1532
1532
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: FileInputComponent, decorators: [{
1533
1533
  type: Component,
1534
1534
  args: [{ selector: 'file-input', providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatFormFieldModule, MatInputModule, FormsModule, FileSizeValidatorDirective, MatButtonModule,
1535
- MatIconModule, MatTooltipModule], template: "<mat-form-field style=\"width:100%\" [appearance]=\"appearance\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [(ngModel)]=\"fileName\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize\" [maxSizeMb]=\"maxSizeMb\" [minSizeMb]=\"minSizeMb\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew && canPreview) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew) {\r\n<button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\">\r\n <mat-icon>save_alt</mat-icon>\r\n</button>\r\n}\r\n @if (hasFile() && fileSize > 0) {\r\n<mat-hint align=\"left\">{{fileSize}} MB</mat-hint>\r\n}\r\n @if (hasFile() && fileSize == 0) {\r\n<mat-hint align=\"left\">\r\n < 1 MB</mat-hint>\r\n} @if (maxSizeMb) {\r\n<mat-hint align=\"end\">Massimo {{maxSizeMb}} MB\r\n </mat-hint>\r\n}\r\n @if (_fileName.invalid && !hasFile()) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n @if (_fileName.invalid && hasFile()) {\r\n<mat-error>Dimensione non consentita.</mat-error>\r\n}\r\n</mat-form-field>" }]
1535
+ MatIconModule, MatTooltipModule], template: "<mat-form-field style=\"width:100%\" [appearance]=\"appearance()\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [(ngModel)]=\"fileName\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize\" [maxSizeMb]=\"maxSizeMb()\" [minSizeMb]=\"minSizeMb()\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew() && canPreview()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew) {\r\n<button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\">\r\n <mat-icon>save_alt</mat-icon>\r\n</button>\r\n}\r\n @if (hasFile() && fileSize > 0) {\r\n<mat-hint align=\"left\">{{fileSize}} MB</mat-hint>\r\n}\r\n @if (hasFile() && fileSize == 0) {\r\n<mat-hint align=\"left\">\r\n < 1 MB</mat-hint>\r\n} @if (maxSizeMb()) {\r\n<mat-hint align=\"end\">Massimo {{maxSizeMb()}} MB\r\n </mat-hint>\r\n}\r\n @if (_fileName.invalid && !hasFile()) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n @if (_fileName.invalid && hasFile()) {\r\n<mat-error>Dimensione non consentita.</mat-error>\r\n}\r\n</mat-form-field>" }]
1536
1536
  }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
1537
1537
  type: Optional
1538
1538
  }, {