@arsedizioni/ars-utils 18.1.111 → 18.1.112

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.
@@ -5,23 +5,24 @@ import { MatCheckboxModule } from '@angular/material/checkbox';
5
5
  import { MatOptionModule } from '@angular/material/core';
6
6
  import { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MatDatepickerModule } from '@angular/material/datepicker';
7
7
  import { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';
8
+ import { MatDividerModule } from '@angular/material/divider';
8
9
  import { MatExpansionModule } from '@angular/material/expansion';
9
10
  import { MatFormFieldModule } from '@angular/material/form-field';
10
11
  import { MatIconModule } from '@angular/material/icon';
11
12
  import { MatInputModule } from '@angular/material/input';
13
+ import { MatMenuModule } from '@angular/material/menu';
12
14
  import { MatSelectModule } from '@angular/material/select';
15
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
13
16
  import { MatTooltipModule } from '@angular/material/tooltip';
14
17
  import { ClipperAuthors, ClipperChannels, ClipperModule, ClipperRegions, ClipperSearchUtils, ClipperSectorTypes, ClipperSectors, ClipperService } from '@arsedizioni/ars-utils/clipper.common';
15
18
  import { DateInterval, DateIntervalChangeDirective, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';
16
19
  import { DialogService } from '@arsedizioni/ars-utils/ui';
20
+ import { ChipsSelectorComponent } from '@arsedizioni/ars-utils/ui.application';
17
21
  import { ExtendedModule } from '@ngbracket/ngx-layout/extended';
18
22
  import { FlexModule } from '@ngbracket/ngx-layout/flex';
19
23
  import { Subject } from 'rxjs';
20
24
  import { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';
21
25
  import { ClipperSearchFreeTextQueryBuilderComponent } from '../search-free-text-query-builder/search-free-text-query-builder.component';
22
- import { MatMenuModule } from '@angular/material/menu';
23
- import { ChipsSelectorComponent } from '@arsedizioni/ars-utils/ui.application';
24
- import { MatDividerModule } from '@angular/material/divider';
25
26
  import * as i0 from "@angular/core";
26
27
  import * as i1 from "@angular/forms";
27
28
  import * as i2 from "@ngbracket/ngx-layout/flex";
@@ -37,6 +38,7 @@ import * as i11 from "@angular/material/menu";
37
38
  import * as i12 from "@ngbracket/ngx-layout/extended";
38
39
  import * as i13 from "@angular/material/datepicker";
39
40
  import * as i14 from "@angular/material/divider";
41
+ import * as i15 from "@angular/material/slide-toggle";
40
42
  export class ClipperSearchDialogComponent {
41
43
  constructor() {
42
44
  this.done = new EventEmitter();
@@ -297,7 +299,7 @@ export class ClipperSearchDialogComponent {
297
299
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperSearchDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
298
300
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ClipperSearchDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [
299
301
  MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER
300
- ], viewQueries: [{ propertyName: "okButton", first: true, predicate: ["okButton"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\">Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors; track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types; track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics; track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>", styles: [".accordion-panel{background-color:transparent}.accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel-body{padding-bottom:20px!important}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatCheckboxModule }, { 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.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i4.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatSelectModule }, { 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: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i8.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: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i12.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i13.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i13.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i13.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i13.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i13.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: DateIntervalChangeDirective, selector: "[dateIntervalChange]", inputs: ["dateIntervalChange", "end"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i14.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: ChipsSelectorComponent, selector: "chips-selector", inputs: ["options", "collapsedWidth", "collapseAt", "collapseAtContainer", "collapseDisplayMode", "label", "multiple", "mode", "required", "disabled", "placeholder"], outputs: ["changed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
302
+ ], viewQueries: [{ propertyName: "okButton", first: true, predicate: ["okButton"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\">Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors; track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types; track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics; track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">Trova</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>", styles: [".accordion-panel{background-color:transparent}.accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel-body{padding-bottom:20px!important}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatCheckboxModule }, { 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.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i4.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatSelectModule }, { 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: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i8.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: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i12.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i13.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i13.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i13.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i13.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i13.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: DateIntervalChangeDirective, selector: "[dateIntervalChange]", inputs: ["dateIntervalChange", "end"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i14.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i15.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: ChipsSelectorComponent, selector: "chips-selector", inputs: ["options", "collapsedWidth", "collapseAt", "collapseAtContainer", "collapseDisplayMode", "label", "multiple", "mode", "required", "disabled", "placeholder"], outputs: ["changed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
301
303
  }
302
304
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperSearchDialogComponent, decorators: [{
303
305
  type: Component,
@@ -325,13 +327,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
325
327
  MatDialogClose,
326
328
  MatDialogTitle,
327
329
  MatDividerModule,
330
+ MatSlideToggleModule,
328
331
  ChipsSelectorComponent,
329
332
  SafeHtmlPipe,
330
- ], template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\">Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors; track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types; track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics; track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>", styles: [".accordion-panel{background-color:transparent}.accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel-body{padding-bottom:20px!important}\n"] }]
333
+ ], template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\">Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track $index) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors; track $index) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types; track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics; track $index) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">Pulisci</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">Trova</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Chiudi</button>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>", styles: [".accordion-panel{background-color:transparent}.accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel-body{padding-bottom:20px!important}\n"] }]
331
334
  }], propDecorators: { okButton: [{
332
335
  type: ViewChild,
333
336
  args: ['okButton']
334
337
  }], done: [{
335
338
  type: Output
336
339
  }] } });
337
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9zZWFyY2gtZGlhbG9nL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsK0NBQStDLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwSCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVB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Q0FBQyxVQUFVLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0UsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFR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SSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7d0JBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7d0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzNFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO3dCQUM5QyxNQUFNO29CQUNSLEtBQUssYUFBYSxDQUFDLDJCQUEyQjt3QkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7d0JBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO3dCQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQzt3QkFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7d0JBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO3dCQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFD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QXNCO3dCQUN0QixZQUFZO3FCQUNiOzhCQUdzQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ1gsSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfREFURVBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUiwgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0FjdGlvbnMsIE1hdERpYWxvZ0Nsb3NlLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7XHJcbiAgQ2xpcHBlckF1dGhvcnMsXHJcbiAgQ2xpcHBlckNoYW5uZWxzLCBDbGlwcGVyTW9kdWxlLFxyXG4gIENsaXBwZXJSZWdpb25zLFxyXG4gIENsaXBwZXJTZWFyY2hQYXJhbXMsXHJcbiAgQ2xpcHBlclNlYXJjaFV0aWxzLCBDbGlwcGVyU2VjdG9yVHlwZXMsIENsaXBwZXJTZWN0b3JzLCBDbGlwcGVyU2VydmljZSwgU2VjdG9ySW5mb1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwsIERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSwgTmFtZVZhbHVlSXRlbSwgU2FmZUh0bWxQaXBlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuaW1wb3J0IHsgRXh0ZW5kZWRNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQvZXh0ZW5kZWQnO1xyXG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXgnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGcmVlVGV4dEhlbHBDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZnJlZS10ZXh0LWhlbHAvc2VhcmNoLWZyZWUtdGV4dC1oZWxwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGcmVlVGV4dFF1ZXJ5QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mcmVlLXRleHQtcXVlcnktYnVpbGRlci9zZWFyY2gtZnJlZS10ZXh0LXF1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBDaGlwc1NlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbic7XHJcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsaXBwZXJTZWFyY2hEaWFsb2dEYXRhIGV4dGVuZHMgQ2xpcHBlclNlYXJjaFBhcmFtcyB7XHJcbiAgZGlzcGxheU1vZGU/OiAnbGF3cycgfCAnbmV3cycgfCAnbW9kdWxlJyB8ICdzaW1wbGUnO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgTUFUX0RBVEVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVJcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICBNYXREaWFsb2dDb250ZW50LFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBGbGV4TW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRPcHRpb25Nb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0TWVudU1vZHVsZSxcclxuICAgIEV4dGVuZGVkTW9kdWxlLFxyXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcclxuICAgIERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSxcclxuICAgIE1hdERpYWxvZ0FjdGlvbnMsXHJcbiAgICBNYXREaWFsb2dDbG9zZSxcclxuICAgIE1hdERpYWxvZ1RpdGxlLFxyXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcclxuICAgIENoaXBzU2VsZWN0b3JDb21wb25lbnQsXHJcbiAgICBTYWZlSHRtbFBpcGUsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJTZWFyY2hEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnb2tCdXR0b24nKSBva0J1dHRvbiE6IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gIEBPdXRwdXQoKSBkb25lID0gbmV3IEV2ZW50RW1pdHRlcjxDbGlwcGVyU2VhcmNoUGFyYW1zPigpO1xyXG5cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIGNsaXBwZXJTZXJ2aWNlID0gaW5qZWN0KENsaXBwZXJTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIGRpYWxvZ0RhdGE6IENsaXBwZXJTZWFyY2hEaWFsb2dEYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgPz8geyBkaXNwbGF5TW9kZTogJ3NpbXBsZScgfTtcclxuICBwcm90ZWN0ZWQgcGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zID0ge1xyXG4gICAgY2hhbm5lbHM6IFsuLi5DbGlwcGVyQ2hhbm5lbHNdLFxyXG4gICAgY291bnQ6IDE1XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kdWxlc0VudW06IHR5cGVvZiBDbGlwcGVyTW9kdWxlID0gQ2xpcHBlck1vZHVsZTtcclxuICBwcm90ZWN0ZWQgc2VjdG9yczogU2VjdG9ySW5mb1tdID0gQ2xpcHBlclNlY3RvcnMuZmlsdGVyKChuKSA9PiBuLmdyb3VwID09PSAnUycpLm1hcCgobikgPT4ge1xyXG4gICAgcmV0dXJuIHsgbmFtZTogbi5zaG9ydE5hbWUgPz8gbi5uYW1lLCB2YWx1ZTogbi52YWx1ZSB9O1xyXG4gIH0pO1xyXG4gIHByb3RlY3RlZCBpc0xhd3MgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gXCJsYXdzXCIgfHxcclxuICAgICAgKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gXCJtb2R1bGVcIiAmJiB0aGlzLmRpYWxvZ0RhdGEubW9kdWxlID09PSBDbGlwcGVyTW9kdWxlLk5vcm1hdGl2YVZpZ2VudGUpIHx8XHJcbiAgICAgICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibW9kdWxlXCIgJiYgdGhpcy5kaWFsb2dEYXRhLm1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5HYXp6ZXR0ZUJvbGxldHRpbmlFRm9udGlEaXZlcnNlKSk7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgaXNOZXdzID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibmV3c1wiIHx8XHJcbiAgICAgICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibW9kdWxlXCIgJiYgdGhpcy5kaWFsb2dEYXRhLm1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5OZXdzKSB8fFxyXG4gICAgICAodGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm1vZHVsZVwiICYmIHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuQXBwcm9mb25kaW1lbnRpKSk7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgaXNNb2R1bGUgPSAobW9kdWxlOiBDbGlwcGVyTW9kdWxlKTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm1vZHVsZVwiICYmIHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUgPT09IG1vZHVsZTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGhhc1JlZ2lvbnMgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gKHRoaXMucGFyYW1zLnNlY3RvcnM/LmZpbHRlcihuID0+IG4udmFsdWUgPT09ICdMUicpLmxlbmd0aCA/PyAwKSA+IDA7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgaGFzQXV0aG9yT3JUeXBlID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyYW1zLnNlY3RvcnM/Lmxlbmd0aCA9PT0gMSAmJiB0aGlzLmlzTGF3cygpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIHJlZ2lvbnM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdID0gWy4uLkNsaXBwZXJSZWdpb25zXTtcclxuICBwcm90ZWN0ZWQgY2hhbm5lbHM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdID0gWy4uLkNsaXBwZXJDaGFubmVsc107XHJcbiAgcHJvdGVjdGVkIHNvdXJjZXM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdIHwgbnVsbCA9IFtdO1xyXG4gIHByb3RlY3RlZCBhdXRob3JzOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSB8IG51bGwgPSBbXTtcclxuICBwcm90ZWN0ZWQgdHlwZXM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdIHwgbnVsbCA9IFtdO1xyXG4gIHByb3RlY3RlZCB0b3BpY3M6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdIHwgbnVsbCA9IFtdO1xyXG4gIGludGVydmFsOiBEYXRlSW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKCk7XHJcbiAgc291cmNlSW50ZXJ2YWw6IERhdGVJbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwoKTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhKSB7XHJcbiAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09ICdzaW1wbGUnKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRpdGxlT25seSA9IHRoaXMuZGlhbG9nRGF0YS50aXRsZU9ubHk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMubnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLm51bWJlcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy55ZWFyID0gdGhpcy5kaWFsb2dEYXRhLnllYXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuZnJvbURhdGUgPSB0aGlzLmRpYWxvZ0RhdGEuZnJvbURhdGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnRvRGF0ZTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5mcm9tRGF0ZSwgdGhpcy5wYXJhbXMudG9EYXRlKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTGF3cygpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRpdGxlT25seSA9IHRoaXMuZGlhbG9nRGF0YS50aXRsZU9ubHk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMubnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLm51bWJlcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy55ZWFyID0gdGhpcy5kaWFsb2dEYXRhLnllYXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuZnJvbURhdGUgPSB0aGlzLmRpYWxvZ0RhdGEuZnJvbURhdGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnRvRGF0ZTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5mcm9tRGF0ZSwgdGhpcy5wYXJhbXMudG9EYXRlKTtcclxuICAgICAgICB0aGlzLnBhcmFtcy5zb3VyY2UgPSB0aGlzLmRpYWxvZ0RhdGEuc291cmNlO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNvdXJjZU51bWJlciA9IHRoaXMuZGlhbG9nRGF0YS5zb3VyY2VOdW1iZXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlWWVhciA9IHRoaXMuZGlhbG9nRGF0YS5zb3VyY2VZZWFyO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNvdXJjZUZyb21EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnNvdXJjZUZyb21EYXRlO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNvdXJjZVRvRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5zb3VyY2VUb0RhdGU7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VJbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwodGhpcy5wYXJhbXMuc291cmNlRnJvbURhdGUsIHRoaXMucGFyYW1zLnNvdXJjZVRvRGF0ZSk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc2VjdG9ycyA9IHRoaXMuZGlhbG9nRGF0YS5zZWN0b3JzO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLmF1dGhvcnMgPSB0aGlzLmRpYWxvZ0RhdGEuYXV0aG9ycztcclxuICAgICAgICB0aGlzLnBhcmFtcy50eXBlID0gdGhpcy5kaWFsb2dEYXRhLnR5cGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudG9waWMgPSB0aGlzLmRpYWxvZ0RhdGEudG9waWM7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHkgPSB0aGlzLmRpYWxvZ0RhdGEuc2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc05ld3MoKSkge1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRleHQgPSB0aGlzLmRpYWxvZ0RhdGEudGV4dDtcclxuICAgICAgICB0aGlzLnBhcmFtcy50aXRsZU9ubHkgPSB0aGlzLmRpYWxvZ0RhdGEudGl0bGVPbmx5O1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnllYXIgPSB0aGlzLmRpYWxvZ0RhdGEueWVhcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5mcm9tRGF0ZTtcclxuICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKHRoaXMucGFyYW1zLmZyb21EYXRlLCB0aGlzLnBhcmFtcy50b0RhdGUpO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNlY3RvcnMgPSB0aGlzLmRpYWxvZ0RhdGEuc2VjdG9ycztcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09ICdtb2R1bGUnKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmRpYWxvZ0RhdGEubW9kdWxlKSB7XHJcbiAgICAgICAgICBjYXNlIENsaXBwZXJNb2R1bGUuR2l1cmlzcHJ1ZGVuemE6XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnRleHQgPSB0aGlzLmRpYWxvZ0RhdGEudGV4dDtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMudGl0bGVPbmx5ID0gdGhpcy5kaWFsb2dEYXRhLnRpdGxlT25seTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMubnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLm51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMueWVhciA9IHRoaXMuZGlhbG9nRGF0YS55ZWFyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5mcm9tRGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnRvRGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwodGhpcy5wYXJhbXMuZnJvbURhdGUsIHRoaXMucGFyYW1zLnRvRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnNlY3RvcnMgPSB0aGlzLmRpYWxvZ0RhdGEuc2VjdG9ycztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIENsaXBwZXJNb2R1bGUuTW9kaWZpY2hlQWJyb2dhemlvbmlFUmludmlpOlxyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VSZWFzb24gPSB0aGlzLmRpYWxvZ0RhdGEuY2hhbmdlUmVhc29uO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkTnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLmNoYW5nZWROdW1iZXI7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmNoYW5nZWRZZWFyID0gdGhpcy5kaWFsb2dEYXRhLmNoYW5nZWRZZWFyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkVGl0bGUgPSB0aGlzLmRpYWxvZ0RhdGEuY2hhbmdlZFRpdGxlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5tb2RpZmllck51bWJlciA9IHRoaXMuZGlhbG9nRGF0YS5tb2RpZmllck51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJZZWFyID0gdGhpcy5kaWFsb2dEYXRhLm1vZGlmaWVyWWVhcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJUaXRsZSA9IHRoaXMuZGlhbG9nRGF0YS5tb2RpZmllclRpdGxlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5zZWN0b3JzID0gdGhpcy5kaWFsb2dEYXRhLnNlY3RvcnM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50aXRsZU9ubHkgPSB0aGlzLmRpYWxvZ0RhdGEudGl0bGVPbmx5O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy55ZWFyID0gdGhpcy5kaWFsb2dEYXRhLnllYXI7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmZyb21EYXRlID0gdGhpcy5kaWFsb2dEYXRhLmZyb21EYXRlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgICAgICB0aGlzLmludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5mcm9tRGF0ZSwgdGhpcy5wYXJhbXMudG9EYXRlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzTGF3cygpKSB7XHJcbiAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbikgcmV0dXJuO1xyXG4gICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmdldFRvcGljcygpXHJcbiAgICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuICAgICAgICAgICAgci52YWx1ZS5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgKG4udmFsdWUubWF0Y2goLy4vZykgfHwgW10pLmZvckVhY2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZSArPSAnJm5ic3A7Jm5ic3A7JztcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBuYW1lICs9IG4udmFsdWUgKyAnIC0gJyArIG4ubmFtZTtcclxuICAgICAgICAgICAgICBuLnRpdGxlID0gbmFtZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMudG9waWNzID0gci52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmhhc0F1dGhvck9yVHlwZSgpKSB7XHJcbiAgICAgICAgdGhpcy5zZWN0b3JzQ2hhbmdlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBvdGhlciBsaXN0cyB3aGVuIHNlY3RvcnMgY2hhbmdlc1xyXG4gICAqL1xyXG4gIHNlY3RvcnNDaGFuZ2VkKCkge1xyXG4gICAgLy8gUmVzZXQgYXV0aG9ycyBhbmQgdHlwZXNcclxuICAgIHRoaXMucGFyYW1zLmF1dGhvcnMgPSBbXTtcclxuICAgIHRoaXMucGFyYW1zLnR5cGUgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuaGFzQXV0aG9yT3JUeXBlKCkpIHtcclxuICAgICAgdGhpcy5hdXRob3JzID0gW107XHJcbiAgICAgIENsaXBwZXJBdXRob3JzLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChuLnNlY3RvcklkID09PSB0aGlzLnBhcmFtcy5zZWN0b3JzWzBdKSB0aGlzLmF1dGhvcnMucHVzaChuKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudHlwZXMgPSBbXTtcclxuICAgICAgQ2xpcHBlclNlY3RvclR5cGVzLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChuLnBhcmVudFZhbHVlID09PSB0aGlzLnBhcmFtcy5zZWN0b3JzWzBdKSB0aGlzLnR5cGVzLnB1c2gobik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodGhpcy50eXBlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgIHRoaXMudHlwZXMgPSBbLi4uQ2xpcHBlclNlY3RvclR5cGVzXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgc2VhcmNoXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGNsZWFyKCkge1xyXG4gICAgQ2xpcHBlclNlYXJjaFV0aWxzLmNsZWFyKHRoaXMucGFyYW1zKTtcclxuICAgIHRoaXMuaW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc291cmNlSW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc2VjdG9yc0NoYW5nZWQoKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICogU2hvdyBmcmVlIHRleHQgaGVscFxyXG4gKi9cclxuICBwcm90ZWN0ZWQgaGVscCgpIHtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hGcmVlVGV4dEhlbHBDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnaW5mb3JtYXppb25pIHJpY2VyY2EnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzgwMHB4JyxcclxuICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICAvKipcclxuICAgKiBDb21wb3NlIGEgZnJlZSB0ZXh0IHNlYXJjaCBxdWVyeVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjb21wb3NlKCkge1xyXG4gICAgY29uc3QgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hGcmVlVGV4dFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdjb3N0cnVpc2NpIHJpY2VyY2EnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzYwMHB4JyxcclxuICAgICAgd2lkdGg6ICc5OSUnXHJcbiAgICB9KTtcclxuICAgIGQuY29tcG9uZW50SW5zdGFuY2UuZG9uZVxyXG4gICAgICAuc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gci5xdWVyeTtcclxuICAgICAgICAvLyBGaW5pc2hlZFxyXG4gICAgICAgIGQuY2xvc2UoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJtaXQgc2VhcmNoXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9rKCkge1xyXG4gICAgdGhpcy5va0J1dHRvbi5mb2N1cygpO1xyXG4gICAgaWYgKHRoaXMucGFyYW1zLnRleHQpIHtcclxuICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IENsaXBwZXJTZWFyY2hVdGlscy5ub3JtYWxpemVUZXh0UXVlcnkodGhpcy5wYXJhbXMudGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xyXG4gICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuaW50ZXJ2YWwuZnJvbTtcclxuICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5pbnRlcnZhbC50bztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNvdXJjZUludGVydmFsKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLnNvdXJjZUZyb21EYXRlID0gdGhpcy5zb3VyY2VJbnRlcnZhbC5mcm9tO1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2VUb0RhdGUgPSB0aGlzLnNvdXJjZUludGVydmFsLnRvO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kb25lLmVtaXQodGhpcy5wYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIENoZWNrIGlmIGEgYmxvY2sgb2YgZXhwYW5kYWJsZSBvcHRpb25zIGhhcyBhIGZpbHRlciBvblxyXG4gKiBAcGFyYW0gYmxvY2sgOiB0aGUgYmxvY2sgaWRcclxuICogQHJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBhIHZhbHVlIGlzIHNldFxyXG4gKi9cclxuICBoYXNGaWx0ZXIoYmxvY2s6ICdzb3VyY2UnIHwgJ290aGVyJyB8ICdtb2RpZmllcicpOiBib29sZWFuIHtcclxuICAgIGlmIChibG9jayA9PT0gJ3NvdXJjZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnNvdXJjZU51bWJlciAhPSBudWxsIHx8XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlWWVhciAhPSBudWxsIHx8XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlICE9IG51bGwgfHxcclxuICAgICAgICB0aGlzLnNvdXJjZUludGVydmFsLmZyb20gIT0gbnVsbDtcclxuICAgIH0gZWxzZSBpZiAoYmxvY2sgPT09ICdvdGhlcicpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzTW9kdWxlKENsaXBwZXJNb2R1bGUuTW9kaWZpY2hlQWJyb2dhemlvbmlFUmludmlpKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtcy5zb3VyY2VOdW1iZXIgIT0gbnVsbCB8fFxyXG4gICAgICAgICAgdGhpcy5wYXJhbXMuYXV0aG9yICE9IG51bGwgfHxcclxuICAgICAgICAgIHRoaXMucGFyYW1zLnR5cGUgIT0gbnVsbCB8fFxyXG4gICAgICAgICAgdGhpcy5wYXJhbXMudG9waWMgIT0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMuY2hhbmdlUmVhc29uICE9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoYmxvY2sgPT09ICdtb2RpZmllcicpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLm1vZGlmaWVyTnVtYmVyICE9IG51bGwgfHxcclxuICAgICAgICB0aGlzLnBhcmFtcy5tb2RpZmllclllYXIgIT0gbnVsbCB8fFxyXG4gICAgICAgIHRoaXMucGFyYW1zLm1vZGlmaWVyVGl0bGUgIT0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxoMiBtYXQtZGlhbG9nLXRpdGxlPlJpY2VyY2E8L2gyPlxyXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cclxuICA8Zm9ybSBuYW1lPVwiZm9ybVwiICNmPVwibmdGb3JtXCIgKGtleXVwLkVudGVyKT1cIiFmLmZvcm0uaW52YWxpZCA/IG9rKCkgOiBudWxsXCIgbm92YWxpZGF0ZT5cclxuICAgIDxtYXQtYWNjb3JkaW9uIG11bHRpIGRpc3BsYXlNb2RlPVwiZmxhdFwiPlxyXG4gICAgICBAaWYoaXNMYXdzKCkgfHwgaXNNb2R1bGUobW9kdWxlc0VudW0uTW9kaWZpY2hlQWJyb2dhemlvbmlFUmludmlpKSkge1xyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBleHBhbmRlZD1cInRydWVcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowIFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIFNldHRvcmlcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGNoaXBzLXNlbGVjdG9yIFsobmdNb2RlbCldPVwicGFyYW1zLnNlY3RvcnNcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIG5hbWU9XCJzZWN0b3JzXCIgbGFiZWw9XCJTZXR0b3JpXCJcclxuICAgICAgICAgIFtvcHRpb25zXT1cInNlY3RvcnNcIiAoY2hhbmdlZCk9XCJzZWN0b3JzQ2hhbmdlZCgpXCIgLz5cclxuICAgICAgICBAaWYoaGFzUmVnaW9ucygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICA8bWF0LWRpdmlkZXIgc3R5bGU9XCJwYWRkaW5nLXRvcDogOHB4OyBtYXJnaW4tdG9wOjhweFwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGNoaXBzLXNlbGVjdG9yIG1vZGU9XCJjb2xsYXBzZWRcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5hdXRob3JzXCIgW211bHRpcGxlXT1cInRydWVcIiBuYW1lPVwiYXV0aG9yc1wiXHJcbiAgICAgICAgICBsYWJlbD1cIlR1dHRlIGxlIHJlZ2lvbmlcIiBbb3B0aW9uc109XCJyZWdpb25zXCIgLz5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgfSBAZWxzZSBpZihpc05ld3MoKSkge1xyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBleHBhbmRlZD1cInRydWVcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowIFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIFRpcG9sb2dpYVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8Y2hpcHMtc2VsZWN0b3IgWyhuZ01vZGVsKV09XCJwYXJhbXMuc2VjdG9yc1wiIFttdWx0aXBsZV09XCJ0cnVlXCIgbmFtZT1cInNlY3RvcnNcIiBsYWJlbD1cIlRpcG9sb2dpYVwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJzZWN0b3JzXCIgLz5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICB9XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGV4cGFuZGVkPVwidHJ1ZVwiIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejAgXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgRG9jdW1lbnRvXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgICAgICAgIEBpZiAoaXNMYXdzKCkgfHwgaXNNb2R1bGUobW9kdWxlc0VudW0uR2l1cmlzcHJ1ZGVuemEpKSB7XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtZXJvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0ICNmaWx0ZXJCeU51bWJlcj1cIm1hdElucHV0XCIgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiMTBcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5udW1iZXJcIiBuYW1lPVwibnVtYmVyXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5udW1iZXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLm51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhIaWRlLnhzIGZ4RmxleD1cIjM5XCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIxNzUwXCIgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiNFwiIFsobmdNb2RlbCldPVwicGFyYW1zLnllYXJcIiBuYW1lPVwieWVhclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMueWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMueWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBAaWYgKGlzTGF3cygpIHx8ICFpc01vZHVsZShtb2R1bGVzRW51bS5TY2FkZW56ZUVTZWduYWxhemlvbmkpKSB7XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+SW50ZXJ2YWxsbyBkaSBwdWJibGljYXppb25lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbcmFuZ2VQaWNrZXJdPVwicGlja2VyMVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGUgWyhuZ01vZGVsKV09XCJpbnRlcnZhbC5mcm9tXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJpbnRlcnZhbFwiICNyYW5nZUZyb20xPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwicmFuZ2VGcm9tMVwiIHBsYWNlaG9sZGVyPVwiRGEgZGF0YVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIFsobmdNb2RlbCldPVwiaW50ZXJ2YWwudG9cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cImludGVydmFsXCIgW2VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICNyYW5nZVRvMT1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VUbzFcIiBwbGFjZWhvbGRlcj1cIkEgZGF0YVwiPlxyXG4gICAgICAgICAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxyXG4gICAgICAgICAgICBAaWYgKGludGVydmFsLmZyb20gfHwgaW50ZXJ2YWwudG8pIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJpbnRlcnZhbC5jbGVhcigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXIxXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcjE+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XHJcbiAgICAgICAgICAgIEBpZiAocmFuZ2VGcm9tMS5pbnZhbGlkIHx8IHJhbmdlVG8xLmludmFsaWQpIHtcclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5JbnRlcnZhbGxvIG5vbiB2YWxpZG8uPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+VGVzdG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjIwMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLnRleHRcIiBuYW1lPVwidGV4dFwiIC8+XHJcbiAgICAgICAgICAgIEBpZiAocGFyYW1zLnRleHQpIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMudGV4dCA9IG51bGxcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCBtYXRUb29sdGlwPVwiT3B6aW9uaVwiIGFyaWEtbGFiZWw9XCJPcHppb25pXCJcclxuICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwidGV4dE9wdGlvbnNNZW51XCI+PG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cInBhcmFtcy50aXRsZU9ubHlcIiBuYW1lPVwidGl0bGVPbmx5XCI+Q2VyY2Egc29sbyBuZWxcclxuICAgICAgICAgICAgICAgIHRpdG9sbzwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIEBpZihpc0xhd3MoKSkge1xyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6MTBweFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwicGFyYW1zLnNob3dDb21tZW50ZWREb2N1bWVudHNPbmx5XCIgbmFtZT1cInNob3dDb21tZW50ZWREb2N1bWVudHNPbmx5XCI+TW9zdHJhXHJcbiAgICAgICAgICAgICAgICBzb2xvIG5vcm1lIGNvbiBjb21tZW50aTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIEBpZihpc0xhd3MoKSkge1xyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiaGFzRmlsdGVyKCdzb3VyY2UnKVwiIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejAgXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgRm9udGVcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bWVybzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBtYXhsZW5ndGg9XCIxMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLnNvdXJjZU51bWJlclwiIG5hbWU9XCJzb3VyY2VOdW1iZXJcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLnNvdXJjZU51bWJlcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuc291cmNlTnVtYmVyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEhpZGUueHMgZnhGbGV4PVwiMzlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjE3NTBcIiBtYXRJbnB1dCBtYXhsZW5ndGg9XCI0XCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuc291cmNlWWVhclwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwic291cmNlWWVhclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuc291cmNlWWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuc291cmNlWWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+SW50ZXJ2YWxsbyBkaSBwdWJibGljYXppb25lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbcmFuZ2VQaWNrZXJdPVwicGlja2VyMlwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGUgWyhuZ01vZGVsKV09XCJzb3VyY2VJbnRlcnZhbC5mcm9tXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJzb3VyY2VJbnRlcnZhbFwiXHJcbiAgICAgICAgICAgICAgICAjcmFuZ2VGcm9tMj1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VGcm9tMlwiIHBsYWNlaG9sZGVyPVwiRGEgZGF0YVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIFsobmdNb2RlbCldPVwic291cmNlSW50ZXJ2YWwudG9cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cInNvdXJjZUludGVydmFsXCIgW2VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICNyYW5nZVRvMj1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VUbzJcIiBwbGFjZWhvbGRlcj1cIkEgZGF0YVwiPlxyXG4gICAgICAgICAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxyXG4gICAgICAgICAgICBAaWYgKHNvdXJjZUludGVydmFsLmZyb20gfHwgc291cmNlSW50ZXJ2YWwudG8pIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzb3VyY2VJbnRlcnZhbC5jbGVhcigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXIyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcjI+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XHJcbiAgICAgICAgICAgIEBpZiAocmFuZ2VGcm9tMi5pbnZhbGlkIHx8IHJhbmdlVG8yLmludmFsaWQpIHtcclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5JbnRlcnZhbGxvIG5vbiB2YWxpZG8uPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy5zb3VyY2VcIiBuYW1lPVwic291cmNlXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAocyBvZiBzb3VyY2VzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwicy52YWx1ZVwiIFttYXRUb29sdGlwXT1cInMubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3tzLm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJoYXNGaWx0ZXIoJ290aGVyJylcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgQWx0cmUgb3B6aW9uaVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICBAaWYoaXNMYXdzKCkpIHtcclxuICAgICAgICAgIEBpZighaGFzUmVnaW9ucygpKSB7XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+QXV0b3JlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLmF1dGhvclwiIG5hbWU9XCJhdXRob3JcIj5cclxuICAgICAgICAgICAgICBAZm9yIChhIG9mIGF1dGhvcnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJhLnZhbHVlXCIgW21hdFRvb2x0aXBdPVwiYS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICB7e2EubmFtZX19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRvY3VtZW50bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy50eXBlXCIgbmFtZT1cInR5cGVcIj5cclxuICAgICAgICAgICAgICBAZm9yICh0IG9mIHR5cGVzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC52YWx1ZVwiIFttYXRUb29sdGlwXT1cInQubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3t0Lm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+QXJnb21lbnRvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnRvcGljXCIgbmFtZT1cInRvcGljXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAodCBvZiB0b3BpY3M7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0LnZhbHVlXCIgW21hdFRvb2x0aXBdPVwidC5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICB7e3QubmFtZX19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG5cclxuICAgICAgfSBAZWxzZSBpZihpc01vZHVsZShtb2R1bGVzRW51bS5Nb2RpZmljaGVBYnJvZ2F6aW9uaUVSaW52aWkpKSB7XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGV4cGFuZGVkIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejAgXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgRG9jdW1lbnRvIG1vZGlmaWNhdG9cclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bWVybzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBtYXhsZW5ndGg9XCIxMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLmNoYW5nZWROdW1iZXJcIiBuYW1lPVwiY2hhbmdlZE51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAjZmlsdGVyQnlDaGFuZ2VOdW1iZXI9XCJtYXRJbnB1dFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuY2hhbmdlZE51bWJlcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuY2hhbmdlZE51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhIaWRlLnhzIGZ4RmxleD1cIjM5XCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIxNzUwXCIgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiNFwiIFsobmdNb2RlbCldPVwicGFyYW1zLmNoYW5nZWRZZWFyXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJjaGFuZ2VkWWVhclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuY2hhbmdlZFllYXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLmNoYW5nZWRZZWFyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXRvbG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjIwMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLmNoYW5nZWRUaXRsZVwiIG5hbWU9XCJjaGFuZ2VkVGl0bGVcIiAvPlxyXG4gICAgICAgICAgICBAaWYgKHBhcmFtcy5jaGFuZ2VkVGl0bGUpIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuY2hhbmdlZFRpdGxlID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJoYXNGaWx0ZXIoJ21vZGlmaWVyJylcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowIFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIERvY3VtZW50byBtb2RpZmljYW50ZVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtZXJvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjEwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMubW9kaWZpZXJOdW1iZXJcIiBuYW1lPVwibW9kaWZpZXJOdW1iZXJcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLmNoYW5nZWROdW1iZXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLm1vZGlmaWVyTnVtYmVyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEhpZGUueHMgZnhGbGV4PVwiMzlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjE3NTBcIiBtYXRJbnB1dCBtYXhsZW5ndGg9XCI0XCIgWyhuZ01vZGVsKV09XCJwYXJhbXMubW9kaWZpZXJZZWFyXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJtb2RpZmllclllYXJcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLm1vZGlmaWVyWWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMubW9kaWZpZXJZZWFyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXRvbG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjIwMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLm1vZGlmaWVyVGl0bGVcIiBuYW1lPVwibW9kaWZpZXJUaXRsZVwiIC8+XHJcbiAgICAgICAgICAgIEBpZiAocGFyYW1zLm1vZGlmaWVyVGl0bGUpIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMubW9kaWZpZXJUaXRsZSA9IG51bGxcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiaGFzRmlsdGVyKCdvdGhlcicpXCIgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIEFsdHJlIG9wemlvbmlcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPk1vdGl2bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy5jaGFuZ2VSZWFzb25cIiBuYW1lPVwiY2hhbmdlUmVhc29uXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtYWNjb3JkaW9uPlxyXG4gIDwvZm9ybT5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjMwXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gKGNsaWNrKT1cImNsZWFyKClcIiBjb2xvcj1cInByaW1hcnlcIj5QVUxJU0NJPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZnhGbGV4PVwiNzBcIiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICNva0J1dHRvbiBbZGlzYWJsZWRdPVwiZi5mb3JtLmludmFsaWRcIiAoY2xpY2spPVwib2soKVwiPlRST1ZBPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCI+Q0hJVURJPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxtYXQtbWVudSAjdGV4dE9wdGlvbnNNZW51PVwibWF0TWVudVwiPlxyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY29tcG9zZSgpXCI+XHJcbiAgICA8bWF0LWljb24+YnVpbGQ8L21hdC1pY29uPkNvbXBvbmlcclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImhlbHAoKVwiPlxyXG4gICAgPG1hdC1pY29uPmhlbHA8L21hdC1pY29uPkNvbWUgdXNhcmUgbGEgcmljZXJjYSBpbiB0ZXN0byBsaWJlcm9cclxuICA8L2J1dHRvbj5cclxuPC9tYXQtbWVudT4iXX0=
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9zZWFyY2gtZGlhbG9nL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsK0NBQStDLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwSCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMs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SUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdFLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUs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d0JBQzNCLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQixzQkFBc0I7d0JBQ3RCLFlBQVk7cUJBQ2I7OEJBR3NCLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDWCxJQUFJO3NCQUFiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSLCBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UsIE1hdERpYWxvZ0NvbnRlbnQsIE1hdERpYWxvZ1RpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0RGl2aWRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXInO1xyXG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHtcclxuICBDbGlwcGVyQXV0aG9ycyxcclxuICBDbGlwcGVyQ2hhbm5lbHMsIENsaXBwZXJNb2R1bGUsXHJcbiAgQ2xpcHBlclJlZ2lvbnMsXHJcbiAgQ2xpcHBlclNlYXJjaFBhcmFtcyxcclxuICBDbGlwcGVyU2VhcmNoVXRpbHMsIENsaXBwZXJTZWN0b3JUeXBlcywgQ2xpcHBlclNlY3RvcnMsIENsaXBwZXJTZXJ2aWNlLCBTZWN0b3JJbmZvXHJcbn0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jbGlwcGVyLmNvbW1vbic7XHJcbmltcG9ydCB7IERhdGVJbnRlcnZhbCwgRGF0ZUludGVydmFsQ2hhbmdlRGlyZWN0aXZlLCBOYW1lVmFsdWVJdGVtLCBTYWZlSHRtbFBpcGUsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvdWknO1xyXG5pbXBvcnQgeyBDaGlwc1NlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbic7XHJcbmltcG9ydCB7IEV4dGVuZGVkTW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2V4dGVuZGVkJztcclxuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dC9mbGV4JztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZyZWUtdGV4dC1oZWxwL3NlYXJjaC1mcmVlLXRleHQtaGVscC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZnJlZS10ZXh0LXF1ZXJ5LWJ1aWxkZXIvc2VhcmNoLWZyZWUtdGV4dC1xdWVyeS1idWlsZGVyLmNvbXBvbmVudCc7XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDbGlwcGVyU2VhcmNoRGlhbG9nRGF0YSBleHRlbmRzIENsaXBwZXJTZWFyY2hQYXJhbXMge1xyXG4gIGRpc3BsYXlNb2RlPzogJ2xhd3MnIHwgJ25ld3MnIHwgJ21vZHVsZScgfCAnc2ltcGxlJztcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgaG9zdDogeyAnQmluZCc6IFN5c3RlbVV0aWxzLmdlbmVyYXRlVVVJRCgpIH0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSXHJcbiAgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE1hdERpYWxvZ1RpdGxlLFxyXG4gICAgTWF0RGlhbG9nQ29udGVudCxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgRmxleE1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgTWF0T3B0aW9uTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBFeHRlbmRlZE1vZHVsZSxcclxuICAgIE1hdERhdGVwaWNrZXJNb2R1bGUsXHJcbiAgICBEYXRlSW50ZXJ2YWxDaGFuZ2VEaXJlY3RpdmUsXHJcbiAgICBNYXREaWFsb2dBY3Rpb25zLFxyXG4gICAgTWF0RGlhbG9nQ2xvc2UsXHJcbiAgICBNYXREaWFsb2dUaXRsZSxcclxuICAgIE1hdERpdmlkZXJNb2R1bGUsXHJcbiAgICBNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcclxuICAgIENoaXBzU2VsZWN0b3JDb21wb25lbnQsXHJcbiAgICBTYWZlSHRtbFBpcGUsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJTZWFyY2hEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnb2tCdXR0b24nKSBva0J1dHRvbiE6IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gIEBPdXRwdXQoKSBkb25lID0gbmV3IEV2ZW50RW1pdHRlcjxDbGlwcGVyU2VhcmNoUGFyYW1zPigpO1xyXG5cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIGNsaXBwZXJTZXJ2aWNlID0gaW5qZWN0KENsaXBwZXJTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIGRpYWxvZ0RhdGE6IENsaXBwZXJTZWFyY2hEaWFsb2dEYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgPz8geyBkaXNwbGF5TW9kZTogJ3NpbXBsZScgfTtcclxuICBwcm90ZWN0ZWQgcGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zID0ge1xyXG4gICAgY2hhbm5lbHM6IFsuLi5DbGlwcGVyQ2hhbm5lbHNdLFxyXG4gICAgY291bnQ6IDE1XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kdWxlc0VudW06IHR5cGVvZiBDbGlwcGVyTW9kdWxlID0gQ2xpcHBlck1vZHVsZTtcclxuICBwcm90ZWN0ZWQgc2VjdG9yczogU2VjdG9ySW5mb1tdID0gQ2xpcHBlclNlY3RvcnMuZmlsdGVyKChuKSA9PiBuLmdyb3VwID09PSAnUycpLm1hcCgobikgPT4ge1xyXG4gICAgcmV0dXJuIHsgbmFtZTogbi5zaG9ydE5hbWUgPz8gbi5uYW1lLCB2YWx1ZTogbi52YWx1ZSB9O1xyXG4gIH0pO1xyXG4gIHByb3RlY3RlZCBpc0xhd3MgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gXCJsYXdzXCIgfHxcclxuICAgICAgKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gXCJtb2R1bGVcIiAmJiB0aGlzLmRpYWxvZ0RhdGEubW9kdWxlID09PSBDbGlwcGVyTW9kdWxlLk5vcm1hdGl2YVZpZ2VudGUpIHx8XHJcbiAgICAgICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibW9kdWxlXCIgJiYgdGhpcy5kaWFsb2dEYXRhLm1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5HYXp6ZXR0ZUJvbGxldHRpbmlFRm9udGlEaXZlcnNlKSk7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgaXNOZXdzID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibmV3c1wiIHx8XHJcbiAgICAgICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibW9kdWxlXCIgJiYgdGhpcy5kaWFsb2dEYXRhLm1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5OZXdzKSB8fFxyXG4gICAgICAodGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm1vZHVsZVwiICYmIHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuQXBwcm9mb25kaW1lbnRpKSk7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgaXNNb2R1bGUgPSAobW9kdWxlOiBDbGlwcGVyTW9kdWxlKTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm1vZHVsZVwiICYmIHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUgPT09IG1vZHVsZTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGhhc1JlZ2lvbnMgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gKHRoaXMucGFyYW1zLnNlY3RvcnM/LmZpbHRlcihuID0+IG4udmFsdWUgPT09ICdMUicpLmxlbmd0aCA/PyAwKSA+IDA7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgaGFzQXV0aG9yT3JUeXBlID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyYW1zLnNlY3RvcnM/Lmxlbmd0aCA9PT0gMSAmJiB0aGlzLmlzTGF3cygpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIHJlZ2lvbnM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdID0gWy4uLkNsaXBwZXJSZWdpb25zXTtcclxuICBwcm90ZWN0ZWQgY2hhbm5lbHM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdID0gWy4uLkNsaXBwZXJDaGFubmVsc107XHJcbiAgcHJvdGVjdGVkIHNvdXJjZXM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdIHwgbnVsbCA9IFtdO1xyXG4gIHByb3RlY3RlZCBhdXRob3JzOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSB8IG51bGwgPSBbXTtcclxuICBwcm90ZWN0ZWQgdHlwZXM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdIHwgbnVsbCA9IFtdO1xyXG4gIHByb3RlY3RlZCB0b3BpY3M6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdIHwgbnVsbCA9IFtdO1xyXG4gIGludGVydmFsOiBEYXRlSW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKCk7XHJcbiAgc291cmNlSW50ZXJ2YWw6IERhdGVJbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwoKTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhKSB7XHJcbiAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09ICdzaW1wbGUnKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRpdGxlT25seSA9IHRoaXMuZGlhbG9nRGF0YS50aXRsZU9ubHk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMubnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLm51bWJlcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy55ZWFyID0gdGhpcy5kaWFsb2dEYXRhLnllYXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuZnJvbURhdGUgPSB0aGlzLmRpYWxvZ0RhdGEuZnJvbURhdGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnRvRGF0ZTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5mcm9tRGF0ZSwgdGhpcy5wYXJhbXMudG9EYXRlKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTGF3cygpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRpdGxlT25seSA9IHRoaXMuZGlhbG9nRGF0YS50aXRsZU9ubHk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMubnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLm51bWJlcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy55ZWFyID0gdGhpcy5kaWFsb2dEYXRhLnllYXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuZnJvbURhdGUgPSB0aGlzLmRpYWxvZ0RhdGEuZnJvbURhdGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnRvRGF0ZTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5mcm9tRGF0ZSwgdGhpcy5wYXJhbXMudG9EYXRlKTtcclxuICAgICAgICB0aGlzLnBhcmFtcy5zb3VyY2UgPSB0aGlzLmRpYWxvZ0RhdGEuc291cmNlO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNvdXJjZU51bWJlciA9IHRoaXMuZGlhbG9nRGF0YS5zb3VyY2VOdW1iZXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlWWVhciA9IHRoaXMuZGlhbG9nRGF0YS5zb3VyY2VZZWFyO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNvdXJjZUZyb21EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnNvdXJjZUZyb21EYXRlO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNvdXJjZVRvRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5zb3VyY2VUb0RhdGU7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VJbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwodGhpcy5wYXJhbXMuc291cmNlRnJvbURhdGUsIHRoaXMucGFyYW1zLnNvdXJjZVRvRGF0ZSk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc2VjdG9ycyA9IHRoaXMuZGlhbG9nRGF0YS5zZWN0b3JzO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLmF1dGhvcnMgPSB0aGlzLmRpYWxvZ0RhdGEuYXV0aG9ycztcclxuICAgICAgICB0aGlzLnBhcmFtcy50eXBlID0gdGhpcy5kaWFsb2dEYXRhLnR5cGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudG9waWMgPSB0aGlzLmRpYWxvZ0RhdGEudG9waWM7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHkgPSB0aGlzLmRpYWxvZ0RhdGEuc2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc05ld3MoKSkge1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRleHQgPSB0aGlzLmRpYWxvZ0RhdGEudGV4dDtcclxuICAgICAgICB0aGlzLnBhcmFtcy50aXRsZU9ubHkgPSB0aGlzLmRpYWxvZ0RhdGEudGl0bGVPbmx5O1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnllYXIgPSB0aGlzLmRpYWxvZ0RhdGEueWVhcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5mcm9tRGF0ZTtcclxuICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKHRoaXMucGFyYW1zLmZyb21EYXRlLCB0aGlzLnBhcmFtcy50b0RhdGUpO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNlY3RvcnMgPSB0aGlzLmRpYWxvZ0RhdGEuc2VjdG9ycztcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09ICdtb2R1bGUnKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmRpYWxvZ0RhdGEubW9kdWxlKSB7XHJcbiAgICAgICAgICBjYXNlIENsaXBwZXJNb2R1bGUuR2l1cmlzcHJ1ZGVuemE6XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnRleHQgPSB0aGlzLmRpYWxvZ0RhdGEudGV4dDtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMudGl0bGVPbmx5ID0gdGhpcy5kaWFsb2dEYXRhLnRpdGxlT25seTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMubnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLm51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMueWVhciA9IHRoaXMuZGlhbG9nRGF0YS55ZWFyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5mcm9tRGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnRvRGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwodGhpcy5wYXJhbXMuZnJvbURhdGUsIHRoaXMucGFyYW1zLnRvRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnNlY3RvcnMgPSB0aGlzLmRpYWxvZ0RhdGEuc2VjdG9ycztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIENsaXBwZXJNb2R1bGUuTW9kaWZpY2hlQWJyb2dhemlvbmlFUmludmlpOlxyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VSZWFzb24gPSB0aGlzLmRpYWxvZ0RhdGEuY2hhbmdlUmVhc29uO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkTnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLmNoYW5nZWROdW1iZXI7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmNoYW5nZWRZZWFyID0gdGhpcy5kaWFsb2dEYXRhLmNoYW5nZWRZZWFyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkVGl0bGUgPSB0aGlzLmRpYWxvZ0RhdGEuY2hhbmdlZFRpdGxlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5tb2RpZmllck51bWJlciA9IHRoaXMuZGlhbG9nRGF0YS5tb2RpZmllck51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJZZWFyID0gdGhpcy5kaWFsb2dEYXRhLm1vZGlmaWVyWWVhcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJUaXRsZSA9IHRoaXMuZGlhbG9nRGF0YS5tb2RpZmllclRpdGxlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5zZWN0b3JzID0gdGhpcy5kaWFsb2dEYXRhLnNlY3RvcnM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50aXRsZU9ubHkgPSB0aGlzLmRpYWxvZ0RhdGEudGl0bGVPbmx5O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy55ZWFyID0gdGhpcy5kaWFsb2dEYXRhLnllYXI7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmZyb21EYXRlID0gdGhpcy5kaWFsb2dEYXRhLmZyb21EYXRlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgICAgICB0aGlzLmludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5mcm9tRGF0ZSwgdGhpcy5wYXJhbXMudG9EYXRlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzTGF3cygpKSB7XHJcbiAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbikgcmV0dXJuO1xyXG4gICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmdldFRvcGljcygpXHJcbiAgICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuICAgICAgICAgICAgci52YWx1ZS5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgKG4udmFsdWUubWF0Y2goLy4vZykgfHwgW10pLmZvckVhY2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZSArPSAnJm5ic3A7Jm5ic3A7JztcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBuYW1lICs9IG4udmFsdWUgKyAnIC0gJyArIG4ubmFtZTtcclxuICAgICAgICAgICAgICBuLnRpdGxlID0gbmFtZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMudG9waWNzID0gci52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmhhc0F1dGhvck9yVHlwZSgpKSB7XHJcbiAgICAgICAgdGhpcy5zZWN0b3JzQ2hhbmdlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBvdGhlciBsaXN0cyB3aGVuIHNlY3RvcnMgY2hhbmdlc1xyXG4gICAqL1xyXG4gIHNlY3RvcnNDaGFuZ2VkKCkge1xyXG4gICAgLy8gUmVzZXQgYXV0aG9ycyBhbmQgdHlwZXNcclxuICAgIHRoaXMucGFyYW1zLmF1dGhvcnMgPSBbXTtcclxuICAgIHRoaXMucGFyYW1zLnR5cGUgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuaGFzQXV0aG9yT3JUeXBlKCkpIHtcclxuICAgICAgdGhpcy5hdXRob3JzID0gW107XHJcbiAgICAgIENsaXBwZXJBdXRob3JzLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChuLnNlY3RvcklkID09PSB0aGlzLnBhcmFtcy5zZWN0b3JzWzBdKSB0aGlzLmF1dGhvcnMucHVzaChuKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudHlwZXMgPSBbXTtcclxuICAgICAgQ2xpcHBlclNlY3RvclR5cGVzLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChuLnBhcmVudFZhbHVlID09PSB0aGlzLnBhcmFtcy5zZWN0b3JzWzBdKSB0aGlzLnR5cGVzLnB1c2gobik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodGhpcy50eXBlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgIHRoaXMudHlwZXMgPSBbLi4uQ2xpcHBlclNlY3RvclR5cGVzXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgc2VhcmNoXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGNsZWFyKCkge1xyXG4gICAgQ2xpcHBlclNlYXJjaFV0aWxzLmNsZWFyKHRoaXMucGFyYW1zKTtcclxuICAgIHRoaXMuaW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc291cmNlSW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc2VjdG9yc0NoYW5nZWQoKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICogU2hvdyBmcmVlIHRleHQgaGVscFxyXG4gKi9cclxuICBwcm90ZWN0ZWQgaGVscCgpIHtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hGcmVlVGV4dEhlbHBDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnaW5mb3JtYXppb25pIHJpY2VyY2EnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzgwMHB4JyxcclxuICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICAvKipcclxuICAgKiBDb21wb3NlIGEgZnJlZSB0ZXh0IHNlYXJjaCBxdWVyeVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjb21wb3NlKCkge1xyXG4gICAgY29uc3QgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hGcmVlVGV4dFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdjb3N0cnVpc2NpIHJpY2VyY2EnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzYwMHB4JyxcclxuICAgICAgd2lkdGg6ICc5OSUnXHJcbiAgICB9KTtcclxuICAgIGQuY29tcG9uZW50SW5zdGFuY2UuZG9uZVxyXG4gICAgICAuc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gci5xdWVyeTtcclxuICAgICAgICAvLyBGaW5pc2hlZFxyXG4gICAgICAgIGQuY2xvc2UoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJtaXQgc2VhcmNoXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9rKCkge1xyXG4gICAgdGhpcy5va0J1dHRvbi5mb2N1cygpO1xyXG4gICAgaWYgKHRoaXMucGFyYW1zLnRleHQpIHtcclxuICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IENsaXBwZXJTZWFyY2hVdGlscy5ub3JtYWxpemVUZXh0UXVlcnkodGhpcy5wYXJhbXMudGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xyXG4gICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuaW50ZXJ2YWwuZnJvbTtcclxuICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5pbnRlcnZhbC50bztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNvdXJjZUludGVydmFsKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLnNvdXJjZUZyb21EYXRlID0gdGhpcy5zb3VyY2VJbnRlcnZhbC5mcm9tO1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2VUb0RhdGUgPSB0aGlzLnNvdXJjZUludGVydmFsLnRvO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kb25lLmVtaXQodGhpcy5wYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIENoZWNrIGlmIGEgYmxvY2sgb2YgZXhwYW5kYWJsZSBvcHRpb25zIGhhcyBhIGZpbHRlciBvblxyXG4gKiBAcGFyYW0gYmxvY2sgOiB0aGUgYmxvY2sgaWRcclxuICogQHJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBhIHZhbHVlIGlzIHNldFxyXG4gKi9cclxuICBoYXNGaWx0ZXIoYmxvY2s6ICdzb3VyY2UnIHwgJ290aGVyJyB8ICdtb2RpZmllcicpOiBib29sZWFuIHtcclxuICAgIGlmIChibG9jayA9PT0gJ3NvdXJjZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnNvdXJjZU51bWJlciAhPSBudWxsIHx8XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlWWVhciAhPSBudWxsIHx8XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlICE9IG51bGwgfHxcclxuICAgICAgICB0aGlzLnNvdXJjZUludGVydmFsLmZyb20gIT0gbnVsbDtcclxuICAgIH0gZWxzZSBpZiAoYmxvY2sgPT09ICdvdGhlcicpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzTW9kdWxlKENsaXBwZXJNb2R1bGUuTW9kaWZpY2hlQWJyb2dhemlvbmlFUmludmlpKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtcy5zb3VyY2VOdW1iZXIgIT0gbnVsbCB8fFxyXG4gICAgICAgICAgdGhpcy5wYXJhbXMuYXV0aG9yICE9IG51bGwgfHxcclxuICAgICAgICAgIHRoaXMucGFyYW1zLnR5cGUgIT0gbnVsbCB8fFxyXG4gICAgICAgICAgdGhpcy5wYXJhbXMudG9waWMgIT0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMuY2hhbmdlUmVhc29uICE9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoYmxvY2sgPT09ICdtb2RpZmllcicpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLm1vZGlmaWVyTnVtYmVyICE9IG51bGwgfHxcclxuICAgICAgICB0aGlzLnBhcmFtcy5tb2RpZmllclllYXIgIT0gbnVsbCB8fFxyXG4gICAgICAgIHRoaXMucGFyYW1zLm1vZGlmaWVyVGl0bGUgIT0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxoMiBtYXQtZGlhbG9nLXRpdGxlPlJpY2VyY2E8L2gyPlxyXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cclxuICA8Zm9ybSBuYW1lPVwiZm9ybVwiICNmPVwibmdGb3JtXCIgKGtleXVwLkVudGVyKT1cIiFmLmZvcm0uaW52YWxpZCA/IG9rKCkgOiBudWxsXCIgbm92YWxpZGF0ZT5cclxuICAgIDxtYXQtYWNjb3JkaW9uIG11bHRpIGRpc3BsYXlNb2RlPVwiZmxhdFwiPlxyXG4gICAgICBAaWYoaXNMYXdzKCkgfHwgaXNNb2R1bGUobW9kdWxlc0VudW0uTW9kaWZpY2hlQWJyb2dhemlvbmlFUmludmlpKSkge1xyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBleHBhbmRlZD1cInRydWVcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowIFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIFNldHRvcmlcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGNoaXBzLXNlbGVjdG9yIFsobmdNb2RlbCldPVwicGFyYW1zLnNlY3RvcnNcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIG5hbWU9XCJzZWN0b3JzXCIgbGFiZWw9XCJTZXR0b3JpXCJcclxuICAgICAgICAgIFtvcHRpb25zXT1cInNlY3RvcnNcIiAoY2hhbmdlZCk9XCJzZWN0b3JzQ2hhbmdlZCgpXCIgLz5cclxuICAgICAgICBAaWYoaGFzUmVnaW9ucygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICA8bWF0LWRpdmlkZXIgc3R5bGU9XCJwYWRkaW5nLXRvcDogOHB4OyBtYXJnaW4tdG9wOjhweFwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGNoaXBzLXNlbGVjdG9yIG1vZGU9XCJjb2xsYXBzZWRcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5hdXRob3JzXCIgW211bHRpcGxlXT1cInRydWVcIiBuYW1lPVwiYXV0aG9yc1wiXHJcbiAgICAgICAgICBsYWJlbD1cIlR1dHRlIGxlIHJlZ2lvbmlcIiBbb3B0aW9uc109XCJyZWdpb25zXCIgLz5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgfSBAZWxzZSBpZihpc05ld3MoKSkge1xyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBleHBhbmRlZD1cInRydWVcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowIFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIFRpcG9sb2dpYVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8Y2hpcHMtc2VsZWN0b3IgWyhuZ01vZGVsKV09XCJwYXJhbXMuc2VjdG9yc1wiIFttdWx0aXBsZV09XCJ0cnVlXCIgbmFtZT1cInNlY3RvcnNcIiBsYWJlbD1cIlRpcG9sb2dpYVwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJzZWN0b3JzXCIgLz5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICB9XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGV4cGFuZGVkPVwidHJ1ZVwiIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejAgXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgRG9jdW1lbnRvXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgICAgICAgIEBpZiAoaXNMYXdzKCkgfHwgaXNNb2R1bGUobW9kdWxlc0VudW0uR2l1cmlzcHJ1ZGVuemEpKSB7XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtZXJvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0ICNmaWx0ZXJCeU51bWJlcj1cIm1hdElucHV0XCIgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiMTBcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5udW1iZXJcIiBuYW1lPVwibnVtYmVyXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5udW1iZXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLm51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhIaWRlLnhzIGZ4RmxleD1cIjM5XCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIxNzUwXCIgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiNFwiIFsobmdNb2RlbCldPVwicGFyYW1zLnllYXJcIiBuYW1lPVwieWVhclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMueWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMueWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBAaWYgKGlzTGF3cygpIHx8ICFpc01vZHVsZShtb2R1bGVzRW51bS5TY2FkZW56ZUVTZWduYWxhemlvbmkpKSB7XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+SW50ZXJ2YWxsbyBkaSBwdWJibGljYXppb25lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbcmFuZ2VQaWNrZXJdPVwicGlja2VyMVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGUgWyhuZ01vZGVsKV09XCJpbnRlcnZhbC5mcm9tXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJpbnRlcnZhbFwiICNyYW5nZUZyb20xPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwicmFuZ2VGcm9tMVwiIHBsYWNlaG9sZGVyPVwiRGEgZGF0YVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIFsobmdNb2RlbCldPVwiaW50ZXJ2YWwudG9cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cImludGVydmFsXCIgW2VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICNyYW5nZVRvMT1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VUbzFcIiBwbGFjZWhvbGRlcj1cIkEgZGF0YVwiPlxyXG4gICAgICAgICAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxyXG4gICAgICAgICAgICBAaWYgKGludGVydmFsLmZyb20gfHwgaW50ZXJ2YWwudG8pIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJpbnRlcnZhbC5jbGVhcigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXIxXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcjE+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XHJcbiAgICAgICAgICAgIEBpZiAocmFuZ2VGcm9tMS5pbnZhbGlkIHx8IHJhbmdlVG8xLmludmFsaWQpIHtcclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5JbnRlcnZhbGxvIG5vbiB2YWxpZG8uPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+VGVzdG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjIwMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLnRleHRcIiBuYW1lPVwidGV4dFwiIC8+XHJcbiAgICAgICAgICAgIEBpZiAocGFyYW1zLnRleHQpIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMudGV4dCA9IG51bGxcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCBtYXRUb29sdGlwPVwiT3B6aW9uaVwiIGFyaWEtbGFiZWw9XCJPcHppb25pXCJcclxuICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwidGV4dE9wdGlvbnNNZW51XCI+PG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cInBhcmFtcy50aXRsZU9ubHlcIiBuYW1lPVwidGl0bGVPbmx5XCI+Q2VyY2Egc29sbyBuZWxcclxuICAgICAgICAgICAgICAgIHRpdG9sbzwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIEBpZihpc0xhd3MoKSkge1xyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6MTBweFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwicGFyYW1zLnNob3dDb21tZW50ZWREb2N1bWVudHNPbmx5XCIgbmFtZT1cInNob3dDb21tZW50ZWREb2N1bWVudHNPbmx5XCI+TW9zdHJhXHJcbiAgICAgICAgICAgICAgICBzb2xvIG5vcm1lIGNvbiBjb21tZW50aTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIEBpZihpc0xhd3MoKSkge1xyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiaGFzRmlsdGVyKCdzb3VyY2UnKVwiIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejAgXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgRm9udGVcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bWVybzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBtYXhsZW5ndGg9XCIxMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLnNvdXJjZU51bWJlclwiIG5hbWU9XCJzb3VyY2VOdW1iZXJcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLnNvdXJjZU51bWJlcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuc291cmNlTnVtYmVyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEhpZGUueHMgZnhGbGV4PVwiMzlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjE3NTBcIiBtYXRJbnB1dCBtYXhsZW5ndGg9XCI0XCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuc291cmNlWWVhclwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwic291cmNlWWVhclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuc291cmNlWWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuc291cmNlWWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+SW50ZXJ2YWxsbyBkaSBwdWJibGljYXppb25lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbcmFuZ2VQaWNrZXJdPVwicGlja2VyMlwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGUgWyhuZ01vZGVsKV09XCJzb3VyY2VJbnRlcnZhbC5mcm9tXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJzb3VyY2VJbnRlcnZhbFwiXHJcbiAgICAgICAgICAgICAgICAjcmFuZ2VGcm9tMj1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VGcm9tMlwiIHBsYWNlaG9sZGVyPVwiRGEgZGF0YVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIFsobmdNb2RlbCldPVwic291cmNlSW50ZXJ2YWwudG9cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cInNvdXJjZUludGVydmFsXCIgW2VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICNyYW5nZVRvMj1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VUbzJcIiBwbGFjZWhvbGRlcj1cIkEgZGF0YVwiPlxyXG4gICAgICAgICAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxyXG4gICAgICAgICAgICBAaWYgKHNvdXJjZUludGVydmFsLmZyb20gfHwgc291cmNlSW50ZXJ2YWwudG8pIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzb3VyY2VJbnRlcnZhbC5jbGVhcigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXIyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcjI+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XHJcbiAgICAgICAgICAgIEBpZiAocmFuZ2VGcm9tMi5pbnZhbGlkIHx8IHJhbmdlVG8yLmludmFsaWQpIHtcclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5JbnRlcnZhbGxvIG5vbiB2YWxpZG8uPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy5zb3VyY2VcIiBuYW1lPVwic291cmNlXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAocyBvZiBzb3VyY2VzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwicy52YWx1ZVwiIFttYXRUb29sdGlwXT1cInMubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3tzLm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJoYXNGaWx0ZXIoJ290aGVyJylcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgQWx0cmUgb3B6aW9uaVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICBAaWYoaXNMYXdzKCkpIHtcclxuICAgICAgICAgIEBpZighaGFzUmVnaW9ucygpKSB7XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+QXV0b3JlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLmF1dGhvclwiIG5hbWU9XCJhdXRob3JcIj5cclxuICAgICAgICAgICAgICBAZm9yIChhIG9mIGF1dGhvcnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJhLnZhbHVlXCIgW21hdFRvb2x0aXBdPVwiYS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICB7e2EubmFtZX19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRvY3VtZW50bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy50eXBlXCIgbmFtZT1cInR5cGVcIj5cclxuICAgICAgICAgICAgICBAZm9yICh0IG9mIHR5cGVzOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC52YWx1ZVwiIFttYXRUb29sdGlwXT1cInQubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3t0Lm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+QXJnb21lbnRvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnRvcGljXCIgbmFtZT1cInRvcGljXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAodCBvZiB0b3BpY3M7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0LnZhbHVlXCIgW21hdFRvb2x0aXBdPVwidC5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICB7e3QubmFtZX19XHJcbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG5cclxuICAgICAgfSBAZWxzZSBpZihpc01vZHVsZShtb2R1bGVzRW51bS5Nb2RpZmljaGVBYnJvZ2F6aW9uaUVSaW52aWkpKSB7XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGV4cGFuZGVkIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejAgXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgRG9jdW1lbnRvIG1vZGlmaWNhdG9cclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bWVybzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBtYXhsZW5ndGg9XCIxMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLmNoYW5nZWROdW1iZXJcIiBuYW1lPVwiY2hhbmdlZE51bWJlclwiXHJcbiAgICAgICAgICAgICAgICAjZmlsdGVyQnlDaGFuZ2VOdW1iZXI9XCJtYXRJbnB1dFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuY2hhbmdlZE51bWJlcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuY2hhbmdlZE51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhIaWRlLnhzIGZ4RmxleD1cIjM5XCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIxNzUwXCIgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiNFwiIFsobmdNb2RlbCldPVwicGFyYW1zLmNoYW5nZWRZZWFyXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJjaGFuZ2VkWWVhclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuY2hhbmdlZFllYXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLmNoYW5nZWRZZWFyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXRvbG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjIwMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLmNoYW5nZWRUaXRsZVwiIG5hbWU9XCJjaGFuZ2VkVGl0bGVcIiAvPlxyXG4gICAgICAgICAgICBAaWYgKHBhcmFtcy5jaGFuZ2VkVGl0bGUpIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuY2hhbmdlZFRpdGxlID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFtleHBhbmRlZF09XCJoYXNGaWx0ZXIoJ21vZGlmaWVyJylcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowIFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIERvY3VtZW50byBtb2RpZmljYW50ZVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtZXJvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjEwXCIgWyhuZ01vZGVsKV09XCJwYXJhbXMubW9kaWZpZXJOdW1iZXJcIiBuYW1lPVwibW9kaWZpZXJOdW1iZXJcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLmNoYW5nZWROdW1iZXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLm1vZGlmaWVyTnVtYmVyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEhpZGUueHMgZnhGbGV4PVwiMzlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjE3NTBcIiBtYXRJbnB1dCBtYXhsZW5ndGg9XCI0XCIgWyhuZ01vZGVsKV09XCJwYXJhbXMubW9kaWZpZXJZZWFyXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJtb2RpZmllclllYXJcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLm1vZGlmaWVyWWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMubW9kaWZpZXJZZWFyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXRvbG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjIwMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLm1vZGlmaWVyVGl0bGVcIiBuYW1lPVwibW9kaWZpZXJUaXRsZVwiIC8+XHJcbiAgICAgICAgICAgIEBpZiAocGFyYW1zLm1vZGlmaWVyVGl0bGUpIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMubW9kaWZpZXJUaXRsZSA9IG51bGxcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiaGFzRmlsdGVyKCdvdGhlcicpXCIgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIEFsdHJlIG9wemlvbmlcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPk1vdGl2bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy5jaGFuZ2VSZWFzb25cIiBuYW1lPVwiY2hhbmdlUmVhc29uXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgfVxyXG4gICAgPC9tYXQtYWNjb3JkaW9uPlxyXG4gIDwvZm9ybT5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjMwXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gKGNsaWNrKT1cImNsZWFyKClcIiBjb2xvcj1cInByaW1hcnlcIj5QdWxpc2NpPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZnhGbGV4PVwiNzBcIiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICNva0J1dHRvbiBbZGlzYWJsZWRdPVwiZi5mb3JtLmludmFsaWRcIiAoY2xpY2spPVwib2soKVwiPlRyb3ZhPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCI+Q2hpdWRpPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxtYXQtbWVudSAjdGV4dE9wdGlvbnNNZW51PVwibWF0TWVudVwiPlxyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY29tcG9zZSgpXCI+XHJcbiAgICA8bWF0LWljb24+YnVpbGQ8L21hdC1pY29uPkNvbXBvbmlcclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImhlbHAoKVwiPlxyXG4gICAgPG1hdC1pY29uPmhlbHA8L21hdC1pY29uPkNvbWUgdXNhcmUgbGEgcmljZXJjYSBpbiB0ZXN0byBsaWJlcm9cclxuICA8L2J1dHRvbj5cclxuPC9tYXQtbWVudT4iXX0=