@meshmakers/shared-ui 2.0.2303-3003 → 2.0.2304-13002

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/esm2020/lib/confirmation-dialog/confirmation-dialog.module.mjs +4 -4
  2. package/esm2020/lib/confirmation-dialog/confirmation-window/confirmation-window.component.mjs +3 -3
  3. package/esm2020/lib/confirmation-dialog/services/confirmation.service.mjs +3 -3
  4. package/esm2020/lib/ia-shared-ui/ia-autocomplete-input/ia-autocomplete-input.mjs +5 -5
  5. package/esm2020/lib/ia-shared-ui/ia-entity-select-input/ia-entity-select-input.component.mjs +5 -5
  6. package/esm2020/lib/ia-shared-ui/ia-multiple-entity-select-input/ia-multiple-entity-select-input.component.mjs +285 -0
  7. package/esm2020/lib/ia-shared-ui/ia-notification-bar/ia-notification-bar.component.mjs +3 -3
  8. package/esm2020/lib/ia-shared-ui/ia-shared-ui.module.mjs +31 -9
  9. package/esm2020/lib/ia-shared-ui/message-details/message-details.component.mjs +3 -3
  10. package/esm2020/lib/progress-notifier/progress-notifier.module.mjs +4 -4
  11. package/esm2020/lib/progress-notifier/progress-window/progress-window.component.mjs +3 -3
  12. package/esm2020/lib/progress-notifier/services/progress-notifier.service.mjs +3 -3
  13. package/esm2020/public-api.mjs +2 -1
  14. package/fesm2015/meshmakers-shared-ui.mjs +336 -43
  15. package/fesm2015/meshmakers-shared-ui.mjs.map +1 -1
  16. package/fesm2020/meshmakers-shared-ui.mjs +335 -43
  17. package/fesm2020/meshmakers-shared-ui.mjs.map +1 -1
  18. package/lib/confirmation-dialog/confirmation-window/confirmation-window.component.d.ts +1 -1
  19. package/lib/ia-shared-ui/ia-autocomplete-input/ia-autocomplete-input.d.ts +1 -1
  20. package/lib/ia-shared-ui/ia-entity-select-input/ia-entity-select-input.component.d.ts +1 -1
  21. package/lib/ia-shared-ui/ia-multiple-entity-select-input/ia-multiple-entity-select-input.component.d.ts +73 -0
  22. package/lib/ia-shared-ui/ia-notification-bar/ia-notification-bar.component.d.ts +1 -1
  23. package/lib/ia-shared-ui/ia-shared-ui.module.d.ts +13 -10
  24. package/lib/ia-shared-ui/message-details/message-details.component.d.ts +1 -1
  25. package/lib/progress-notifier/progress-window/progress-window.component.d.ts +1 -1
  26. package/package.json +2 -2
  27. package/public-api.d.ts +1 -0
@@ -16,16 +16,16 @@ export class ConfirmationDialogModule {
16
16
  };
17
17
  }
18
18
  }
19
- ConfirmationDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
- ConfirmationDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationDialogModule, declarations: [ConfirmationWindowComponent], imports: [CommonModule,
19
+ ConfirmationDialogModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ConfirmationDialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
+ ConfirmationDialogModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.3", ngImport: i0, type: ConfirmationDialogModule, declarations: [ConfirmationWindowComponent], imports: [CommonModule,
21
21
  MatDialogModule,
22
22
  FlexLayoutModule,
23
23
  MatButtonModule] });
24
- ConfirmationDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationDialogModule, imports: [CommonModule,
24
+ ConfirmationDialogModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ConfirmationDialogModule, imports: [CommonModule,
25
25
  MatDialogModule,
26
26
  FlexLayoutModule,
27
27
  MatButtonModule] });
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationDialogModule, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ConfirmationDialogModule, decorators: [{
29
29
  type: NgModule,
30
30
  args: [{
31
31
  declarations: [ConfirmationWindowComponent],
@@ -53,9 +53,9 @@ export class ConfirmationWindowComponent {
53
53
  });
54
54
  }
55
55
  }
56
- ConfirmationWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationWindowComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
57
- ConfirmationWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: ConfirmationWindowComponent, selector: "lib-shared-ui-confirmation-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\r\n<div mat-dialog-content>{{data.message}}</div>\r\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\r\n <button (click)=\"onButton1()\" color=\"primary\" mat-button>{{button1Text}}</button>\r\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-button>{{button2Text}}</button>\r\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-button>{{button3Text}}</button>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.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: "component", type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationWindowComponent, decorators: [{
56
+ ConfirmationWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ConfirmationWindowComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
57
+ ConfirmationWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: ConfirmationWindowComponent, selector: "lib-shared-ui-confirmation-window", ngImport: i0, template: "<h1 mat-dialog-title>{{data.title}}</h1>\r\n<div mat-dialog-content>{{data.message}}</div>\r\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\r\n <button (click)=\"onButton1()\" color=\"primary\" mat-button>{{button1Text}}</button>\r\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-button>{{button2Text}}</button>\r\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-button>{{button3Text}}</button>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.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: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ConfirmationWindowComponent, decorators: [{
59
59
  type: Component,
60
60
  args: [{ selector: 'lib-shared-ui-confirmation-window', template: "<h1 mat-dialog-title>{{data.title}}</h1>\r\n<div mat-dialog-content>{{data.message}}</div>\r\n<div fxLayoutAlign=\"end\" mat-dialog-actions>\r\n <button (click)=\"onButton1()\" color=\"primary\" mat-button>{{button1Text}}</button>\r\n <button (click)=\"onButton2()\" *ngIf=\"button2Text\" mat-button>{{button2Text}}</button>\r\n <button (click)=\"onButton3()\" *ngIf=\"button3Text\" mat-button>{{button3Text}}</button>\r\n</div>\r\n" }]
61
61
  }], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
@@ -57,9 +57,9 @@ export class ConfirmationService {
57
57
  return dialogRef.afterClosed().pipe(map(value => value.result == ButtonTypes.Ok));
58
58
  }
59
59
  }
60
- ConfirmationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
61
- ConfirmationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationService, providedIn: 'root' });
62
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: ConfirmationService, decorators: [{
60
+ ConfirmationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ConfirmationService, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Injectable });
61
+ ConfirmationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ConfirmationService, providedIn: 'root' });
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: ConfirmationService, decorators: [{
63
63
  type: Injectable,
64
64
  args: [{
65
65
  providedIn: 'root'
@@ -200,8 +200,8 @@ export class IaAutocompleteInput {
200
200
  }
201
201
  }
202
202
  IaAutocompleteInput.nextId = 0;
203
- IaAutocompleteInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaAutocompleteInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
204
- IaAutocompleteInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: IaAutocompleteInput, selector: "ia-autocomplete", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
203
+ IaAutocompleteInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: IaAutocompleteInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
204
+ IaAutocompleteInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: IaAutocompleteInput, selector: "ia-autocomplete", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
205
205
  {
206
206
  provide: NG_VALUE_ACCESSOR,
207
207
  useExisting: forwardRef(() => IaAutocompleteInput),
@@ -216,8 +216,8 @@ IaAutocompleteInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
216
216
  useExisting: forwardRef(() => IaAutocompleteInput),
217
217
  multi: true
218
218
  }
219
- ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\r\n [placeholder]=\"placeholder\" matInput>\r\n<mat-autocomplete #auto=\"matAutocomplete\"\r\n (closed)=\"onAutoCompleteClosed()\" (optionActivated)=\"onOptionActivated($event)\"\r\n (optionSelected)=\"onOptionSelected($event)\">\r\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\r\n <mat-spinner diameter=\"50\"></mat-spinner>\r\n </mat-option>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <mat-option *ngFor=\"let str of filteredStrings\" [value]=\"str\">\r\n {{str}}\r\n </mat-option>\r\n </ng-container>\r\n</mat-autocomplete>\r\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i5.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: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
220
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaAutocompleteInput, decorators: [{
219
+ ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\r\n [placeholder]=\"placeholder\" matInput>\r\n<mat-autocomplete #auto=\"matAutocomplete\"\r\n (closed)=\"onAutoCompleteClosed()\" (optionActivated)=\"onOptionActivated($event)\"\r\n (optionSelected)=\"onOptionSelected($event)\">\r\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\r\n <mat-spinner diameter=\"50\"></mat-spinner>\r\n </mat-option>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <mat-option *ngFor=\"let str of filteredStrings\" [value]=\"str\">\r\n {{str}}\r\n </mat-option>\r\n </ng-container>\r\n</mat-autocomplete>\r\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i5.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: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: IaAutocompleteInput, decorators: [{
221
221
  type: Component,
222
222
  args: [{ selector: 'ia-autocomplete', host: {
223
223
  '[id]': 'id',
@@ -260,4 +260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImpor
260
260
  type: HostBinding,
261
261
  args: ['class.floating']
262
262
  }] } });
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWEtYXV0b2NvbXBsZXRlLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtdWkvc3JjL2xpYi9pYS1zaGFyZWQtdWkvaWEtYXV0b2NvbXBsZXRlLWlucHV0L2lhLWF1dG9jb21wbGV0ZS1pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lc2htYWtlcnMvc2hhcmVkLXVpL3NyYy9saWIvaWEtc2hhcmVkLXVpL2lhLWF1dG9jb21wbGV0ZS1pbnB1dC9pYS1hdXRvY29tcGxldGUtaW5wdXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUVYLEtBQUssRUFHTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUdMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLFNBQVMsRUFHVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHekUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBNkI3QixNQUFNLE9BQU8sbUJBQW1CO0lBa0I5QixZQUFtQixLQUFpQixFQUFVLFFBQWtCLEVBQVUsRUFBZ0I7UUFBdkUsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFjO1FBWm5GLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FB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QUFPLEVBQUUsbUJBQW1CO1lBQzVCLFdBQVcsRUFBRSxtQkFBbUI7U0FDakM7UUFDRDtZQUNFLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDbEQsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGLCtIQ3ZESCx5dEJBY0E7MkZEMkNhLG1CQUFtQjtrQkF6Qi9CLFNBQVM7K0JBQ0UsaUJBQWlCLFFBR3JCO3dCQUNKLE1BQU0sRUFBRSxJQUFJO3dCQUNaLHlCQUF5QixFQUFFLGFBQWE7cUJBQ3pDLGFBQ1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcscUJBQXFCO3lCQUNqQzt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO21KQWE4QixFQUFFO3NCQUFoQyxXQUFXO2dCQUdnQixVQUFVO3NCQUFyQyxTQUFTO3VCQUFDLE9BQU87Z0JBQzRCLFdBQVc7c0JBQXhELFdBQVc7dUJBQUMsdUJBQXVCO2dCQXNCekIsVUFBVTtzQkFEcEIsS0FBSztnQkFRSyxRQUFRO3NCQURsQixLQUFLO2dCQWNLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBYUssUUFBUTtzQkFEbEIsS0FBSztnQkFjSyxNQUFNO3NCQURoQixLQUFLO2dCQStCSyxnQkFBZ0I7c0JBRDFCLFdBQVc7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRG9DaGVjayxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TWF0Rm9ybUZpZWxkQ29udHJvbH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgTkdfVkFMSURBVE9SUyxcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxuICBOZ0NvbnRyb2wsXHJcbiAgVmFsaWRhdGlvbkVycm9ycyxcclxuICBWYWxpZGF0b3JcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtjb2VyY2VCb29sZWFuUHJvcGVydHl9IGZyb20gXCJAYW5ndWxhci9jZGsvY29lcmNpb25cIjtcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlQWN0aXZhdGVkRXZlbnQsIE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnR9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGVcIjtcclxuaW1wb3J0IHtNYXRJbnB1dH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2lucHV0XCI7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtGb2N1c01vbml0b3J9IGZyb20gXCJAYW5ndWxhci9jZGsvYTExeVwiO1xyXG5pbXBvcnQge0F1dG9Db21wbGV0ZURhdGFTb3VyY2V9IGZyb20gXCJAbWVzaG1ha2Vycy9zaGFyZWQtc2VydmljZXNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWEtYXV0b2NvbXBsZXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaWEtYXV0b2NvbXBsZXRlLWlucHV0Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lhLWF1dG9jb21wbGV0ZS1pbnB1dC5jc3MnXSxcclxuICBob3N0OiB7XHJcbiAgICAnW2lkXSc6ICdpZCcsXHJcbiAgICAnW2F0dHIuYXJpYS1kZXNjcmliZWRieV0nOiAnZGVzY3JpYmVkQnknXHJcbiAgfSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElhQXV0b2NvbXBsZXRlSW5wdXQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCxcclxuICAgICAgdXNlRXhpc3Rpbmc6IElhQXV0b2NvbXBsZXRlSW5wdXRcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElhQXV0b2NvbXBsZXRlSW5wdXQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIElhQXV0b2NvbXBsZXRlSW5wdXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgRG9DaGVjaywgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE1hdEZvcm1GaWVsZENvbnRyb2w8YW55PiwgVmFsaWRhdG9yIHtcclxuXHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlYXJjaEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcclxuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuO1xyXG4gIHB1YmxpYyBmaWx0ZXJlZFN0cmluZ3M6IHN0cmluZ1tdID0gW107XHJcbiAgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sO1xyXG4gIHB1YmxpYyBlcnJvclN0YXRlOiBib29sZWFuO1xyXG4gIHB1YmxpYyBmb2N1c2VkOiBib29sZWFuO1xyXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIEBIb3N0QmluZGluZygpIHB1YmxpYyByZWFkb25seSBpZCA9IGBpYS1hdXRvY29tcGxldGUtJHtJYUF1dG9jb21wbGV0ZUlucHV0Lm5leHRJZCsrfWA7XHJcbiAgcHVibGljIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkU3RyaW5nOiBzdHJpbmc7XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBwcml2YXRlIGlucHV0RmllbGQ6IE1hdElucHV0O1xyXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgcHJpdmF0ZSBkZXNjcmliZWRCeSA9ICcnO1xyXG4gIHByaXZhdGUgYWN0aXZhdGVkVmFsdWU6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGVsUmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBmbTogRm9jdXNNb25pdG9yKSB7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgIGZtLm1vbml0b3IoZWxSZWYubmF0aXZlRWxlbWVudCwgdHJ1ZSkuc3Vic2NyaWJlKG9yaWdpbiA9PiB7XHJcbiAgICAgIHRoaXMuZm9jdXNlZCA9ICEhb3JpZ2luO1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RhdGFTb3VyY2U6IEF1dG9Db21wbGV0ZURhdGFTb3VyY2U7XHJcblxyXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEF1dG9Db21wbGV0ZURhdGFTb3VyY2UpIHtcclxuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQoZGlzKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShkaXMpO1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnNlYXJjaEZvcm1Db250cm9sLmRpc2FibGUoKSA6IHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHBsaCkge1xyXG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGg7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHJlcXVpcmVkKHJlcSkge1xyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcclxuICAgIHRoaXMuaW5wdXRGaWVsZC5yZXF1aXJlZCA9IHRoaXMuX3JlcXVpcmVkO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlZml4OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBwcmVmaXgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wcmVmaXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHByZWZpeCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX3ByZWZpeCkge1xyXG4gICAgICB0aGlzLl9wcmVmaXggPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFN0cmluZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9zZWxlY3RlZFN0cmluZykge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFN0cmluZyA9IHZhbHVlO1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3NlbGVjdGVkU3RyaW5nKTtcclxuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBlbXB0eSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5zZWFyY2hGb3JtQ29udHJvbC52YWx1ZTtcclxuICAgIHJldHVybiAhISFuO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mbG9hdGluZycpXHJcbiAgcHVibGljIGdldCBzaG91bGRMYWJlbEZsb2F0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5uZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgcHJlZml4IGRlZmluZWQsIHVzdWFsbHkgdGhpcyBpcyB1c2VkIGZvciBhIGNvZGUgc2Nhbm5lci5cclxuICAgIC8vIFRoZSBnb2FsIGlzIHRvIHNlbGVjdCB0aGUgZW50aXR5IGluIGRpcmVjdCB3YXkuXHJcbiAgICBpZiAodGhpcy5fcHJlZml4KSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2xcclxuICAgICAgICAudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSxcclxuICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5zdGFydHNXaXRoKHRoaXMuX3ByZWZpeCkpLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMudmFsdWUgPSBudWxsKSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmlzTG9hZGluZyA9IHRydWUpLFxyXG4gICAgICAgICAgbWFwKHZhbHVlID0+IHRoaXMuX2RhdGFTb3VyY2Uub25QcmVwcm9jZXNzU2VhcmNoU3RyaW5nKHZhbHVlKSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdGhpcy5fZGF0YVNvdXJjZS5vbkZpbHRlcih2YWx1ZSkpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUocmVzdWx0U2V0ID0+IHtcclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0U2V0Lmxpc3QubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSByZXN1bHRTZXRbMF07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IHJlc3VsdFNldC5saXN0O1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnBhdGNoVmFsdWUocmVzdWx0U2V0LnNlYXJjaFRlcm0sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgd2hlbiBzZWFyY2ggYnkgaHVtYW4uXHJcbiAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sXHJcbiAgICAgIC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXHJcbiAgICAgICAgdGFwKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFN0cmluZ3MgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApLFxyXG4gICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPSBudWxsICYmIHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID49IDEpLFxyXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmlzTG9hZGluZyA9IHRydWUpLFxyXG4gICAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLl9kYXRhU291cmNlLm9uUHJlcHJvY2Vzc1NlYXJjaFN0cmluZyh2YWx1ZSkpLFxyXG4gICAgICAgIHRhcCh2YWx1ZSA9PiB0aGlzLnZhbHVlID0gdmFsdWUpLFxyXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB0aGlzLl9kYXRhU291cmNlLm9uRmlsdGVyKHZhbHVlKSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdFNldCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IHJlc3VsdFNldC5saXN0O1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHJlc3VsdFNldC5zZWFyY2hUZXJtLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5lcnJvclN0YXRlID0gdGhpcy5uZ0NvbnRyb2wuaW52YWxpZCAmJiB0aGlzLm5nQ29udHJvbC50b3VjaGVkO1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IFtdO1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5yZXNldChudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1cygpIHtcclxuICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25PcHRpb25TZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcclxuICAgIHRoaXMuZmlsdGVyZWRTdHJpbmdzID0gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25PcHRpb25BY3RpdmF0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZUFjdGl2YXRlZEV2ZW50KSB7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFZhbHVlID0gZXZlbnQub3B0aW9uPy52YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkF1dG9Db21wbGV0ZUNsb3NlZCgpIHtcclxuXHJcbiAgICBpZiAodGhpcy5hY3RpdmF0ZWRWYWx1ZSkge1xyXG5cclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuYWN0aXZhdGVkVmFsdWU7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVmFsdWUgPSBudWxsO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRm9jdXNPdXQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuZmlsdGVyZWRTdHJpbmdzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLmFjdGl2YXRlZFZhbHVlID0gdGhpcy5maWx0ZXJlZFN0cmluZ3NbMF07XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmZpbHRlcmVkU3RyaW5nc1swXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblRvdWNoZWQoKSB7XHJcblxyXG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIHRoaXMudmFsdWUgPSBvYmo7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNvbnRhaW5lckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gJ2lucHV0Jykge1xyXG4gICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXNjcmliZWRCeSA9IGlkcy5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb246IGFueSA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHNlbGVjdGlvbiA9PT0gJ3N0cmluZycgJiYgKDxzdHJpbmc+c2VsZWN0aW9uKS5sZW5ndGggPCAxKSB7XHJcbiAgICAgIHJldHVybiB7aW5jb3JyZWN0OiB0cnVlfTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHtcclxuICB9O1xyXG59XHJcbiIsIjxpbnB1dCAjaW5wdXQgKGJsdXIpPVwib25Ub3VjaGVkKClcIiAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaEZvcm1Db250cm9sXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcclxuICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIG1hdElucHV0PlxyXG48bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbG9zZWQpPVwib25BdXRvQ29tcGxldGVDbG9zZWQoKVwiIChvcHRpb25BY3RpdmF0ZWQpPVwib25PcHRpb25BY3RpdmF0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJvbk9wdGlvblNlbGVjdGVkKCRldmVudClcIj5cclxuICA8bWF0LW9wdGlvbiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwiaXMtbG9hZGluZ1wiPlxyXG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxyXG4gIDwvbWF0LW9wdGlvbj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxyXG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN0ciBvZiBmaWx0ZXJlZFN0cmluZ3NcIiBbdmFsdWVdPVwic3RyXCI+XHJcbiAgICAgIHt7c3RyfX1cclxuICAgIDwvbWF0LW9wdGlvbj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4iXX0=
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWEtYXV0b2NvbXBsZXRlLWlucHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtdWkvc3JjL2xpYi9pYS1zaGFyZWQtdWkvaWEtYXV0b2NvbXBsZXRlLWlucHV0L2lhLWF1dG9jb21wbGV0ZS1pbnB1dC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lc2htYWtlcnMvc2hhcmVkLXVpL3NyYy9saWIvaWEtc2hhcmVkLXVpL2lhLWF1dG9jb21wbGV0ZS1pbnB1dC9pYS1hdXRvY29tcGxldGUtaW5wdXQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUVYLEtBQUssRUFHTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDakUsT0FBTyxFQUdMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLFNBQVMsRUFHVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHekUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7O0FBNkI3QixNQUFNLE9BQU8sbUJBQW1CO0lBa0I5QixZQUFtQixLQUFpQixFQUFVLFFBQWtCLEVBQVUsRUFBZ0I7UUFBdkUsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFjO1FBWm5GLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FB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QUFPLEVBQUUsbUJBQW1CO1lBQzVCLFdBQVcsRUFBRSxtQkFBbUI7U0FDakM7UUFDRDtZQUNFLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDbEQsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGLCtIQ3ZESCx5dEJBY0E7MkZEMkNhLG1CQUFtQjtrQkF6Qi9CLFNBQVM7K0JBQ0UsaUJBQWlCLFFBR3JCO3dCQUNKLE1BQU0sRUFBRSxJQUFJO3dCQUNaLHlCQUF5QixFQUFFLGFBQWE7cUJBQ3pDLGFBQ1U7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxtQkFBbUI7NEJBQzVCLFdBQVcscUJBQXFCO3lCQUNqQzt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO21KQWE4QixFQUFFO3NCQUFoQyxXQUFXO2dCQUdnQixVQUFVO3NCQUFyQyxTQUFTO3VCQUFDLE9BQU87Z0JBQzRCLFdBQVc7c0JBQXhELFdBQVc7dUJBQUMsdUJBQXVCO2dCQXNCekIsVUFBVTtzQkFEcEIsS0FBSztnQkFRSyxRQUFRO3NCQURsQixLQUFLO2dCQWNLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBYUssUUFBUTtzQkFEbEIsS0FBSztnQkFjSyxNQUFNO3NCQURoQixLQUFLO2dCQStCSyxnQkFBZ0I7c0JBRDFCLFdBQVc7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRG9DaGVjayxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TWF0Rm9ybUZpZWxkQ29udHJvbH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgTkdfVkFMSURBVE9SUyxcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxuICBOZ0NvbnRyb2wsXHJcbiAgVmFsaWRhdGlvbkVycm9ycyxcclxuICBWYWxpZGF0b3JcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHtjb2VyY2VCb29sZWFuUHJvcGVydHl9IGZyb20gXCJAYW5ndWxhci9jZGsvY29lcmNpb25cIjtcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7TWF0QXV0b2NvbXBsZXRlQWN0aXZhdGVkRXZlbnQsIE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnR9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGVcIjtcclxuaW1wb3J0IHtNYXRJbnB1dH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2lucHV0XCI7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtGb2N1c01vbml0b3J9IGZyb20gXCJAYW5ndWxhci9jZGsvYTExeVwiO1xyXG5pbXBvcnQge0F1dG9Db21wbGV0ZURhdGFTb3VyY2V9IGZyb20gXCJAbWVzaG1ha2Vycy9zaGFyZWQtc2VydmljZXNcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWEtYXV0b2NvbXBsZXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaWEtYXV0b2NvbXBsZXRlLWlucHV0Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2lhLWF1dG9jb21wbGV0ZS1pbnB1dC5jc3MnXSxcclxuICBob3N0OiB7XHJcbiAgICAnW2lkXSc6ICdpZCcsXHJcbiAgICAnW2F0dHIuYXJpYS1kZXNjcmliZWRieV0nOiAnZGVzY3JpYmVkQnknXHJcbiAgfSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElhQXV0b2NvbXBsZXRlSW5wdXQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCxcclxuICAgICAgdXNlRXhpc3Rpbmc6IElhQXV0b2NvbXBsZXRlSW5wdXRcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IElhQXV0b2NvbXBsZXRlSW5wdXQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIElhQXV0b2NvbXBsZXRlSW5wdXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgRG9DaGVjaywgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE1hdEZvcm1GaWVsZENvbnRyb2w8YW55PiwgVmFsaWRhdG9yIHtcclxuXHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlYXJjaEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcclxuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuO1xyXG4gIHB1YmxpYyBmaWx0ZXJlZFN0cmluZ3M6IHN0cmluZ1tdID0gW107XHJcbiAgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sO1xyXG4gIHB1YmxpYyBlcnJvclN0YXRlOiBib29sZWFuO1xyXG4gIHB1YmxpYyBmb2N1c2VkOiBib29sZWFuO1xyXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIEBIb3N0QmluZGluZygpIHB1YmxpYyByZWFkb25seSBpZCA9IGBpYS1hdXRvY29tcGxldGUtJHtJYUF1dG9jb21wbGV0ZUlucHV0Lm5leHRJZCsrfWA7XHJcbiAgcHVibGljIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkU3RyaW5nOiBzdHJpbmc7XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXQnKSBwcml2YXRlIGlucHV0RmllbGQ6IE1hdElucHV0O1xyXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgcHJpdmF0ZSBkZXNjcmliZWRCeSA9ICcnO1xyXG4gIHByaXZhdGUgYWN0aXZhdGVkVmFsdWU6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IocHVibGljIGVsUmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBmbTogRm9jdXNNb25pdG9yKSB7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuX2Rpc2FibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuICAgIGZtLm1vbml0b3IoZWxSZWYubmF0aXZlRWxlbWVudCwgdHJ1ZSkuc3Vic2NyaWJlKG9yaWdpbiA9PiB7XHJcbiAgICAgIHRoaXMuZm9jdXNlZCA9ICEhb3JpZ2luO1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RhdGFTb3VyY2U6IEF1dG9Db21wbGV0ZURhdGFTb3VyY2U7XHJcblxyXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEF1dG9Db21wbGV0ZURhdGFTb3VyY2UpIHtcclxuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQoZGlzKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShkaXMpO1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnNlYXJjaEZvcm1Db250cm9sLmRpc2FibGUoKSA6IHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHBsaCkge1xyXG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGg7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHJlcXVpcmVkKHJlcSkge1xyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcclxuICAgIHRoaXMuaW5wdXRGaWVsZC5yZXF1aXJlZCA9IHRoaXMuX3JlcXVpcmVkO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlZml4OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBwcmVmaXgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wcmVmaXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHByZWZpeCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX3ByZWZpeCkge1xyXG4gICAgICB0aGlzLl9wcmVmaXggPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFN0cmluZztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9zZWxlY3RlZFN0cmluZykge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFN0cmluZyA9IHZhbHVlO1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3NlbGVjdGVkU3RyaW5nKTtcclxuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBlbXB0eSgpIHtcclxuICAgIGxldCBuID0gdGhpcy5zZWFyY2hGb3JtQ29udHJvbC52YWx1ZTtcclxuICAgIHJldHVybiAhISFuO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mbG9hdGluZycpXHJcbiAgcHVibGljIGdldCBzaG91bGRMYWJlbEZsb2F0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZCB8fCAhdGhpcy5lbXB0eTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5uZ0NvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgcHJlZml4IGRlZmluZWQsIHVzdWFsbHkgdGhpcyBpcyB1c2VkIGZvciBhIGNvZGUgc2Nhbm5lci5cclxuICAgIC8vIFRoZSBnb2FsIGlzIHRvIHNlbGVjdCB0aGUgZW50aXR5IGluIGRpcmVjdCB3YXkuXHJcbiAgICBpZiAodGhpcy5fcHJlZml4KSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybUNvbnRyb2xcclxuICAgICAgICAudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSxcclxuICAgICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZS5zdGFydHNXaXRoKHRoaXMuX3ByZWZpeCkpLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMudmFsdWUgPSBudWxsKSxcclxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmlzTG9hZGluZyA9IHRydWUpLFxyXG4gICAgICAgICAgbWFwKHZhbHVlID0+IHRoaXMuX2RhdGFTb3VyY2Uub25QcmVwcm9jZXNzU2VhcmNoU3RyaW5nKHZhbHVlKSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdGhpcy5fZGF0YVNvdXJjZS5vbkZpbHRlcih2YWx1ZSkpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUocmVzdWx0U2V0ID0+IHtcclxuXHJcbiAgICAgICAgICBpZiAocmVzdWx0U2V0Lmxpc3QubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSByZXN1bHRTZXRbMF07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IHJlc3VsdFNldC5saXN0O1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnBhdGNoVmFsdWUocmVzdWx0U2V0LnNlYXJjaFRlcm0sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgd2hlbiBzZWFyY2ggYnkgaHVtYW4uXHJcbiAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sXHJcbiAgICAgIC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXHJcbiAgICAgICAgdGFwKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFN0cmluZ3MgPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApLFxyXG4gICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPSBudWxsICYmIHZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID49IDEpLFxyXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmlzTG9hZGluZyA9IHRydWUpLFxyXG4gICAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLl9kYXRhU291cmNlLm9uUHJlcHJvY2Vzc1NlYXJjaFN0cmluZyh2YWx1ZSkpLFxyXG4gICAgICAgIHRhcCh2YWx1ZSA9PiB0aGlzLnZhbHVlID0gdmFsdWUpLFxyXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB0aGlzLl9kYXRhU291cmNlLm9uRmlsdGVyKHZhbHVlKSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdFNldCA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IHJlc3VsdFNldC5saXN0O1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHJlc3VsdFNldC5zZWFyY2hUZXJtLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5lcnJvclN0YXRlID0gdGhpcy5uZ0NvbnRyb2wuaW52YWxpZCAmJiB0aGlzLm5nQ29udHJvbC50b3VjaGVkO1xyXG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXIoKSB7XHJcbiAgICB0aGlzLmZpbHRlcmVkU3RyaW5ncyA9IFtdO1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5yZXNldChudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1cygpIHtcclxuICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25PcHRpb25TZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcclxuICAgIHRoaXMuZmlsdGVyZWRTdHJpbmdzID0gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25PcHRpb25BY3RpdmF0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZUFjdGl2YXRlZEV2ZW50KSB7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFZhbHVlID0gZXZlbnQub3B0aW9uPy52YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkF1dG9Db21wbGV0ZUNsb3NlZCgpIHtcclxuXHJcbiAgICBpZiAodGhpcy5hY3RpdmF0ZWRWYWx1ZSkge1xyXG5cclxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuYWN0aXZhdGVkVmFsdWU7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVmFsdWUgPSBudWxsO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCgpIHtcclxuICAgIHRoaXMudmFsdWUgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRm9jdXNPdXQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuZmlsdGVyZWRTdHJpbmdzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLmFjdGl2YXRlZFZhbHVlID0gdGhpcy5maWx0ZXJlZFN0cmluZ3NbMF07XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmZpbHRlcmVkU3RyaW5nc1swXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblRvdWNoZWQoKSB7XHJcblxyXG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIHRoaXMudmFsdWUgPSBvYmo7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNvbnRhaW5lckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT0gJ2lucHV0Jykge1xyXG4gICAgICB0aGlzLmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXNjcmliZWRCeSA9IGlkcy5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb246IGFueSA9IGNvbnRyb2wudmFsdWU7XHJcbiAgICBpZiAodHlwZW9mIHNlbGVjdGlvbiA9PT0gJ3N0cmluZycgJiYgKDxzdHJpbmc+c2VsZWN0aW9uKS5sZW5ndGggPCAxKSB7XHJcbiAgICAgIHJldHVybiB7aW5jb3JyZWN0OiB0cnVlfTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHtcclxuICB9O1xyXG59XHJcbiIsIjxpbnB1dCAjaW5wdXQgKGJsdXIpPVwib25Ub3VjaGVkKClcIiAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCIgW2Zvcm1Db250cm9sXT1cInNlYXJjaEZvcm1Db250cm9sXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcclxuICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIG1hdElucHV0PlxyXG48bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbG9zZWQpPVwib25BdXRvQ29tcGxldGVDbG9zZWQoKVwiIChvcHRpb25BY3RpdmF0ZWQpPVwib25PcHRpb25BY3RpdmF0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJvbk9wdGlvblNlbGVjdGVkKCRldmVudClcIj5cclxuICA8bWF0LW9wdGlvbiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwiaXMtbG9hZGluZ1wiPlxyXG4gICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxyXG4gIDwvbWF0LW9wdGlvbj5cclxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxyXG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN0ciBvZiBmaWx0ZXJlZFN0cmluZ3NcIiBbdmFsdWVdPVwic3RyXCI+XHJcbiAgICAgIHt7c3RyfX1cclxuICAgIDwvbWF0LW9wdGlvbj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4iXX0=
@@ -201,8 +201,8 @@ export class IaEntitySelectInput {
201
201
  }
202
202
  }
203
203
  IaEntitySelectInput.nextId = 0;
204
- IaEntitySelectInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaEntitySelectInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
205
- IaEntitySelectInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.2", type: IaEntitySelectInput, selector: "ia-entity-select", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
204
+ IaEntitySelectInput.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: IaEntitySelectInput, deps: [{ token: i0.ElementRef }, { token: i0.Injector }, { token: i1.FocusMonitor }], target: i0.ɵɵFactoryTarget.Component });
205
+ IaEntitySelectInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.3", type: IaEntitySelectInput, selector: "ia-entity-select", inputs: { dataSource: "dataSource", disabled: "disabled", placeholder: "placeholder", required: "required", prefix: "prefix" }, host: { properties: { "id": "this.id", "attr.aria-describedby": "this.describedBy", "class.floating": "this.shouldLabelFloat" } }, providers: [
206
206
  {
207
207
  provide: NG_VALUE_ACCESSOR,
208
208
  useExisting: forwardRef(() => IaEntitySelectInput),
@@ -217,8 +217,8 @@ IaEntitySelectInput.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
217
217
  useExisting: forwardRef(() => IaEntitySelectInput),
218
218
  multi: true
219
219
  }
220
- ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\r\n [placeholder]=\"placeholder\" matInput>\r\n<mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\r\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\r\n [displayWith]=\"dataSource.onDisplayEntity\">\r\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\r\n <mat-spinner diameter=\"50\"></mat-spinner>\r\n </mat-option>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\r\n {{dataSource.onDisplayEntity(entity)}}\r\n </mat-option>\r\n </ng-container>\r\n</mat-autocomplete>\r\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i5.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: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
221
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImport: i0, type: IaEntitySelectInput, decorators: [{
220
+ ], viewQueries: [{ propertyName: "inputField", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<input #input (blur)=\"onTouched()\" (focusout)=\"onFocusOut()\" [formControl]=\"searchFormControl\" [matAutocomplete]=\"auto\"\r\n [placeholder]=\"placeholder\" matInput>\r\n<mat-autocomplete #auto=\"matAutocomplete\" (closed)=\"onEntityClosed()\"\r\n (optionActivated)=\"onEntityActivated($event)\" (optionSelected)=\"onEntitySelected($event)\"\r\n [displayWith]=\"dataSource.onDisplayEntity\">\r\n <mat-option *ngIf=\"isLoading\" class=\"is-loading\">\r\n <mat-spinner diameter=\"50\"></mat-spinner>\r\n </mat-option>\r\n <ng-container *ngIf=\"!isLoading\">\r\n <mat-option *ngFor=\"let entity of filteredEntities\" [value]=\"entity\">\r\n {{dataSource.onDisplayEntity(entity)}}\r\n </mat-option>\r\n </ng-container>\r\n</mat-autocomplete>\r\n", styles: ["span{opacity:0;transition:opacity .2s}:host.floating span{opacity:1}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i3.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i5.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: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
221
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.3", ngImport: i0, type: IaEntitySelectInput, decorators: [{
222
222
  type: Component,
223
223
  args: [{ selector: 'ia-entity-select', host: {
224
224
  '[id]': 'id',
@@ -261,4 +261,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.2", ngImpor
261
261
  type: HostBinding,
262
262
  args: ['class.floating']
263
263
  }] } });
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWEtZW50aXR5LXNlbGVjdC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC11aS9zcmMvbGliL2lhLXNoYXJlZC11aS9pYS1lbnRpdHktc2VsZWN0LWlucHV0L2lhLWVudGl0eS1zZWxlY3QtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtdWkvc3JjL2xpYi9pYS1zaGFyZWQtdWkvaWEtZW50aXR5LXNlbGVjdC1pbnB1dC9pYS1lbnRpdHktc2VsZWN0LWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBRVgsS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsV0FBVyxFQUNYLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsU0FBUyxFQUdWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFHakUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7OztBQTJCNUQsTUFBTSxPQUFPLG1CQUFtQjtJQWlCOUIsWUFBbUIsS0FBaUIsRUFBVSxRQUFrQixFQUFVLEVBQWdCO1FBQXZFLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQVpu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RUFBRSxJQUFJO1NBQ1o7S0FDRiwrSEN2REgsc3lCQWNBOzJGRDJDYSxtQkFBbUI7a0JBekIvQixTQUFTOytCQUNFLGtCQUFrQixRQUd0Qjt3QkFDSixNQUFNLEVBQUUsSUFBSTt3QkFDWix5QkFBeUIsRUFBRSxhQUFhO3FCQUN6QyxhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLHFCQUFxQjt5QkFDakM7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjttSkFZOEIsRUFBRTtzQkFBaEMsV0FBVztnQkFHZ0IsVUFBVTtzQkFBckMsU0FBUzt1QkFBQyxPQUFPO2dCQUM0QixXQUFXO3NCQUF4RCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFzQnpCLFVBQVU7c0JBRHBCLEtBQUs7Z0JBUUssUUFBUTtzQkFEbEIsS0FBSztnQkFjSyxXQUFXO3NCQURyQixLQUFLO2dCQWFLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBY0ssTUFBTTtzQkFEaEIsS0FBSztnQkE0QkssZ0JBQWdCO3NCQUQxQixXQUFXO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIERvQ2hlY2ssXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBGb3JtQ29udHJvbCxcclxuICBOR19WQUxJREFUT1JTLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIE5nQ29udHJvbCxcclxuICBWYWxpZGF0aW9uRXJyb3JzLFxyXG4gIFZhbGlkYXRvclxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge01hdEZvcm1GaWVsZENvbnRyb2x9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XHJcbmltcG9ydCB7TWF0SW5wdXR9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dFwiO1xyXG5pbXBvcnQge0VudGl0eVNlbGVjdERhdGFTb3VyY2V9IGZyb20gXCJAbWVzaG1ha2Vycy9zaGFyZWQtc2VydmljZXNcIjtcclxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge0ZvY3VzTW9uaXRvcn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9hMTF5XCI7XHJcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHN3aXRjaE1hcCwgdGFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVBY3RpdmF0ZWRFdmVudCwgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZVwiO1xyXG5pbXBvcnQge2NvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2VyY2lvblwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpYS1lbnRpdHktc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaWEtZW50aXR5LXNlbGVjdC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaWEtZW50aXR5LXNlbGVjdC1pbnB1dC5jb21wb25lbnQuY3NzJ10sXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tpZF0nOiAnaWQnLFxyXG4gICAgJ1thdHRyLmFyaWEtZGVzY3JpYmVkYnldJzogJ2Rlc2NyaWJlZEJ5J1xyXG4gIH0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJYUVudGl0eVNlbGVjdElucHV0KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBJYUVudGl0eVNlbGVjdElucHV0XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJYUVudGl0eVNlbGVjdElucHV0KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJYUVudGl0eVNlbGVjdElucHV0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBNYXRGb3JtRmllbGRDb250cm9sPGFueT4sIFZhbGlkYXRvciB7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlYXJjaEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcclxuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuO1xyXG4gIHB1YmxpYyBmaWx0ZXJlZEVudGl0aWVzOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbDtcclxuICBwdWJsaWMgZXJyb3JTdGF0ZTogYm9vbGVhbjtcclxuICBwdWJsaWMgZm9jdXNlZDogYm9vbGVhbjtcclxuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBASG9zdEJpbmRpbmcoKSBwdWJsaWMgcmVhZG9ubHkgaWQgPSBgaWEtZW50aXR5LXNlbGVjdC0ke0lhRW50aXR5U2VsZWN0SW5wdXQubmV4dElkKyt9YDtcclxuICBwdWJsaWMgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRFbnRpdHk6IGFueTtcclxuICBAVmlld0NoaWxkKCdpbnB1dCcpIHByaXZhdGUgaW5wdXRGaWVsZDogTWF0SW5wdXQ7XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKSBwcml2YXRlIGRlc2NyaWJlZEJ5ID0gJyc7XHJcbiAgcHJpdmF0ZSBhY3RpdmF0ZWRWYWx1ZTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLCBwcml2YXRlIGZtOiBGb2N1c01vbml0b3IpIHtcclxuXHJcbiAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgZm0ubW9uaXRvcihlbFJlZi5uYXRpdmVFbGVtZW50LCB0cnVlKS5zdWJzY3JpYmUob3JpZ2luID0+IHtcclxuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogRW50aXR5U2VsZWN0RGF0YVNvdXJjZTxhbnk+O1xyXG5cclxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBkYXRhU291cmNlKHZhbHVlOiBFbnRpdHlTZWxlY3REYXRhU291cmNlPGFueT4pIHtcclxuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQoZGlzKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShkaXMpO1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnNlYXJjaEZvcm1Db250cm9sLmRpc2FibGUoKSA6IHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHBsaCkge1xyXG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGg7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHJlcXVpcmVkKHJlcSkge1xyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcclxuICAgIHRoaXMuaW5wdXRGaWVsZC5yZXF1aXJlZCA9IHRoaXMuX3JlcXVpcmVkO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlZml4OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBwcmVmaXgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wcmVmaXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHByZWZpeCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX3ByZWZpeCkge1xyXG4gICAgICB0aGlzLl9wcmVmaXggPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEVudGl0eTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9zZWxlY3RlZEVudGl0eSkge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGVtcHR5KCkge1xyXG4gICAgbGV0IG4gPSB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgcmV0dXJuICEhIW47XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJylcclxuICBwdWJsaWMgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBwcmVmaXggZGVmaW5lZCwgdXN1YWxseSB0aGlzIGlzIHVzZWQgZm9yIGEgY29kZSBzY2FubmVyLlxyXG4gICAgLy8gVGhlIGdvYWwgaXMgdG8gc2VsZWN0IHRoZSBlbnRpdHkgaW4gZGlyZWN0IHdheS5cclxuICAgIGlmICh0aGlzLl9wcmVmaXgpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbFxyXG4gICAgICAgIC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxyXG4gICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpLFxyXG4gICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlLnN0YXJ0c1dpdGgodGhpcy5fcHJlZml4KSksXHJcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy52YWx1ZSA9IG51bGwpLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuaXNMb2FkaW5nID0gdHJ1ZSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdGhpcy5fZGF0YVNvdXJjZS5vbkZpbHRlcih2YWx1ZS5yZXBsYWNlKHRoaXMuX3ByZWZpeCwgXCJcIikudHJpbSgpKSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZShyZXN1bHRTZXQgPT4ge1xyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHRTZXQubGlzdC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHJlc3VsdFNldC5saXN0WzBdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEVudGl0aWVzID0gcmVzdWx0U2V0Lmxpc3Q7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgd2hlbiBzZWFyY2ggYnkgaHVtYW4uXHJcbiAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sXHJcbiAgICAgIC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXHJcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuZmlsdGVyZWRFbnRpdGllcyA9IFtdKSxcclxuICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyksXHJcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0VmFsdWUobnVsbCkpLFxyXG4gICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCA+PSAzKSxcclxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5pc0xvYWRpbmcgPSB0cnVlKSxcclxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdGhpcy5fZGF0YVNvdXJjZS5vbkZpbHRlcih2YWx1ZSkpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShyZXN1bHRTZXQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEVudGl0aWVzID0gcmVzdWx0U2V0Lmxpc3Q7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcclxuICAgIHRoaXMuZm0uc3RvcE1vbml0b3JpbmcodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLmVycm9yU3RhdGUgPSB0aGlzLm5nQ29udHJvbC5pbnZhbGlkICYmIHRoaXMubmdDb250cm9sLnRvdWNoZWQ7XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhcigpIHtcclxuICAgIHRoaXMuZmlsdGVyZWRFbnRpdGllcyA9IFtdO1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5yZXNldChudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1cygpIHtcclxuICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25FbnRpdHlTZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcclxuICAgIHRoaXMuZmlsdGVyZWRFbnRpdGllcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRW50aXR5QWN0aXZhdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVBY3RpdmF0ZWRFdmVudCkge1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRWYWx1ZSA9IGV2ZW50Lm9wdGlvbj8udmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25FbnRpdHlDbG9zZWQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZhdGVkVmFsdWUpIHtcclxuXHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmFjdGl2YXRlZFZhbHVlO1xyXG4gICAgICB0aGlzLmFjdGl2YXRlZFZhbHVlID0gbnVsbDtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkZvY3VzT3V0KCkge1xyXG5cclxuICAgIGlmICh0aGlzLmZpbHRlcmVkRW50aXRpZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVmFsdWUgPSB0aGlzLmZpbHRlcmVkRW50aXRpZXNbMF07XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmZpbHRlcmVkRW50aXRpZXNbMF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Ub3VjaGVkKCkge1xyXG5cclxuICAgIHRoaXMuX29uVG91Y2hlZCgpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Db250YWluZXJDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCkudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICdpbnB1dCcpIHtcclxuICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnkgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgaWYgKHR5cGVvZiBzZWxlY3Rpb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB7aW5jb3JyZWN0OiB0cnVlfTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fc2VsZWN0ZWRFbnRpdHkpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRFbnRpdHkgPSB2YWx1ZTtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3NlbGVjdGVkRW50aXR5KTtcclxuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGlucHV0ICNpbnB1dCAoYmx1cik9XCJvblRvdWNoZWQoKVwiIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KClcIiBbZm9ybUNvbnRyb2xdPVwic2VhcmNoRm9ybUNvbnRyb2xcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxyXG4gICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgbWF0SW5wdXQ+XHJcbjxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKGNsb3NlZCk9XCJvbkVudGl0eUNsb3NlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgKG9wdGlvbkFjdGl2YXRlZCk9XCJvbkVudGl0eUFjdGl2YXRlZCgkZXZlbnQpXCIgKG9wdGlvblNlbGVjdGVkKT1cIm9uRW50aXR5U2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJkYXRhU291cmNlLm9uRGlzcGxheUVudGl0eVwiPlxyXG4gIDxtYXQtb3B0aW9uICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJpcy1sb2FkaW5nXCI+XHJcbiAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgPC9tYXQtb3B0aW9uPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XHJcbiAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZW50aXR5IG9mIGZpbHRlcmVkRW50aXRpZXNcIiBbdmFsdWVdPVwiZW50aXR5XCI+XHJcbiAgICAgIHt7ZGF0YVNvdXJjZS5vbkRpc3BsYXlFbnRpdHkoZW50aXR5KX19XHJcbiAgICA8L21hdC1vcHRpb24+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbWF0LWF1dG9jb21wbGV0ZT5cclxuIl19
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWEtZW50aXR5LXNlbGVjdC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXNobWFrZXJzL3NoYXJlZC11aS9zcmMvbGliL2lhLXNoYXJlZC11aS9pYS1lbnRpdHktc2VsZWN0LWlucHV0L2lhLWVudGl0eS1zZWxlY3QtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWVzaG1ha2Vycy9zaGFyZWQtdWkvc3JjL2xpYi9pYS1zaGFyZWQtdWkvaWEtZW50aXR5LXNlbGVjdC1pbnB1dC9pYS1lbnRpdHktc2VsZWN0LWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBRVgsS0FBSyxFQUdMLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsV0FBVyxFQUNYLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsU0FBUyxFQUdWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFHakUsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7OztBQTJCNUQsTUFBTSxPQUFPLG1CQUFtQjtJQWlCOUIsWUFBbUIsS0FBaUIsRUFBVSxRQUFrQixFQUFVLEVBQWdCO1FBQXZFLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQVUsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQVpuRixxQkFBZ0IsR0FBVSxFQUFFLENBQUM7UUFJcEIsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ3BCLE9BQUUsR0FBRyxvQkFBb0IsbUJBQW1CLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUNoRixnQkFBVyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBR2xCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBMEJ2RCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBeUJsQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBK0xsQixxQkFBZ0IsR0FBRyxDQUFDLENBQU0sRUFBRSxFQUFFO1FBQ3RDLENBQUMsQ0FBQztRQUVNLGVBQVUsR0FBRyxHQUFHLEVBQUU7UUFDMUIsQ0FBQyxDQUFDO1FBalBBLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBSUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFDVyxVQUFVLENBQUMsS0FBa0M7UUFDdEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUlELElBQ1csUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsUUFBUSxDQUFDLEdBQUc7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNwRixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFJRCxJQUNXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLFdBQVcsQ0FBQyxHQUFHO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUlELElBQ1csUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsUUFBUSxDQUFDLEdBQUc7UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUlELElBQ1csTUFBTTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBVyxNQUFNLENBQUMsS0FBYTtRQUM3QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxLQUFLLENBQUMsS0FBVTtRQUN6QixJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQ3JDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQ1csZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO1lBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUNyQztRQUVELDhEQUE4RDtRQUM5RCxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxpQkFBaUI7aUJBQ25CLFlBQVk7aUJBQ1osSUFBSSxDQUNILFlBQVksQ0FBQyxHQUFHLENBQUMsRUFDakIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLEVBQzFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQy9DLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUM1QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFDaEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDdEY7aUJBQ0EsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUVyQixJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztpQkFDeEM7Z0JBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFFekIsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsaUJBQWlCO2FBQ25CLFlBQVk7YUFDWixJQUFJLENBQ0gsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQyxFQUNyQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsRUFDMUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFDOUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFDN0MsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQ2hDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3JEO2FBQ0EsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ25CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsQ0FDRixDQUFDO0lBQ04sQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztZQUNuRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQW1DO1FBQ3pELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRU0saUJBQWlCLENBQUMsS0FBb0M7UUFDM0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztJQUM1QyxDQUFDO0lBRU0sY0FBYztRQUVuQixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFFdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBRTVCO0lBQ0gsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRU0sVUFBVTtRQUVmLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDO0lBRU0sU0FBUztRQUVkLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFPO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEVBQU87UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxHQUFRO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUM3QixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBaUI7UUFDdkMsSUFBSyxLQUFLLENBQUMsTUFBa0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxFQUFFO1lBQzlELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO0lBQ0gsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEdBQWE7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBd0I7UUFDL0IsTUFBTSxTQUFTLEdBQVEsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNyQyxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUNqQyxPQUFPLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBUU8sUUFBUSxDQUFDLEtBQVU7UUFDekIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDOztBQTNRYywwQkFBTSxHQUFHLENBQUMsQ0FBQztnSEFGZixtQkFBbUI7b0dBQW5CLG1CQUFtQiw4U0FqQm5CO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsaUJBQWlCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7WUFDbEQsS0FBSyxFQUFFLElBQUk7U0FDWjtRQUNEO1lBQ0UsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixXQUFXLEVBQUUsbUJBQW1CO1NBQ2pDO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsYUFBYTtZQUN0QixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQ2xELEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRiwrSEN2REgsc3lCQWNBOzJGRDJDYSxtQkFBbUI7a0JBekIvQixTQUFTOytCQUNFLGtCQUFrQixRQUd0Qjt3QkFDSixNQUFNLEVBQUUsSUFBSTt3QkFDWix5QkFBeUIsRUFBRSxhQUFhO3FCQUN6QyxhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLHFCQUFxQjt5QkFDakM7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjttSkFZOEIsRUFBRTtzQkFBaEMsV0FBVztnQkFHZ0IsVUFBVTtzQkFBckMsU0FBUzt1QkFBQyxPQUFPO2dCQUM0QixXQUFXO3NCQUF4RCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFzQnpCLFVBQVU7c0JBRHBCLEtBQUs7Z0JBUUssUUFBUTtzQkFEbEIsS0FBSztnQkFjSyxXQUFXO3NCQURyQixLQUFLO2dCQWFLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBY0ssTUFBTTtzQkFEaEIsS0FBSztnQkE0QkssZ0JBQWdCO3NCQUQxQixXQUFXO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIERvQ2hlY2ssXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBIb3N0QmluZGluZyxcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICBGb3JtQ29udHJvbCxcclxuICBOR19WQUxJREFUT1JTLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIE5nQ29udHJvbCxcclxuICBWYWxpZGF0aW9uRXJyb3JzLFxyXG4gIFZhbGlkYXRvclxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQge01hdEZvcm1GaWVsZENvbnRyb2x9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkXCI7XHJcbmltcG9ydCB7TWF0SW5wdXR9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dFwiO1xyXG5pbXBvcnQge0VudGl0eVNlbGVjdERhdGFTb3VyY2V9IGZyb20gXCJAbWVzaG1ha2Vycy9zaGFyZWQtc2VydmljZXNcIjtcclxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge0ZvY3VzTW9uaXRvcn0gZnJvbSBcIkBhbmd1bGFyL2Nkay9hMTF5XCI7XHJcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBmaWx0ZXIsIHN3aXRjaE1hcCwgdGFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtNYXRBdXRvY29tcGxldGVBY3RpdmF0ZWRFdmVudCwgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZVwiO1xyXG5pbXBvcnQge2NvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2VyY2lvblwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpYS1lbnRpdHktc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaWEtZW50aXR5LXNlbGVjdC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaWEtZW50aXR5LXNlbGVjdC1pbnB1dC5jb21wb25lbnQuY3NzJ10sXHJcbiAgaG9zdDoge1xyXG4gICAgJ1tpZF0nOiAnaWQnLFxyXG4gICAgJ1thdHRyLmFyaWEtZGVzY3JpYmVkYnldJzogJ2Rlc2NyaWJlZEJ5J1xyXG4gIH0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJYUVudGl0eVNlbGVjdElucHV0KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBJYUVudGl0eVNlbGVjdElucHV0XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJYUVudGl0eVNlbGVjdElucHV0KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJYUVudGl0eVNlbGVjdElucHV0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIERvQ2hlY2ssIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBNYXRGb3JtRmllbGRDb250cm9sPGFueT4sIFZhbGlkYXRvciB7XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XHJcbiAgcHVibGljIHJlYWRvbmx5IHNlYXJjaEZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcclxuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuO1xyXG4gIHB1YmxpYyBmaWx0ZXJlZEVudGl0aWVzOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbDtcclxuICBwdWJsaWMgZXJyb3JTdGF0ZTogYm9vbGVhbjtcclxuICBwdWJsaWMgZm9jdXNlZDogYm9vbGVhbjtcclxuICBwdWJsaWMgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBASG9zdEJpbmRpbmcoKSBwdWJsaWMgcmVhZG9ubHkgaWQgPSBgaWEtZW50aXR5LXNlbGVjdC0ke0lhRW50aXR5U2VsZWN0SW5wdXQubmV4dElkKyt9YDtcclxuICBwdWJsaWMgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRFbnRpdHk6IGFueTtcclxuICBAVmlld0NoaWxkKCdpbnB1dCcpIHByaXZhdGUgaW5wdXRGaWVsZDogTWF0SW5wdXQ7XHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKSBwcml2YXRlIGRlc2NyaWJlZEJ5ID0gJyc7XHJcbiAgcHJpdmF0ZSBhY3RpdmF0ZWRWYWx1ZTogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLCBwcml2YXRlIGZtOiBGb2N1c01vbml0b3IpIHtcclxuXHJcbiAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgZm0ubW9uaXRvcihlbFJlZi5uYXRpdmVFbGVtZW50LCB0cnVlKS5zdWJzY3JpYmUob3JpZ2luID0+IHtcclxuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogRW50aXR5U2VsZWN0RGF0YVNvdXJjZTxhbnk+O1xyXG5cclxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBkYXRhU291cmNlKHZhbHVlOiBFbnRpdHlTZWxlY3REYXRhU291cmNlPGFueT4pIHtcclxuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkaXNhYmxlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQoZGlzKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShkaXMpO1xyXG4gICAgdGhpcy5fZGlzYWJsZWQgPyB0aGlzLnNlYXJjaEZvcm1Db250cm9sLmRpc2FibGUoKSA6IHRoaXMuc2VhcmNoRm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHBsaCkge1xyXG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGg7XHJcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHJlcXVpcmVkKHJlcSkge1xyXG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcclxuICAgIHRoaXMuaW5wdXRGaWVsZC5yZXF1aXJlZCA9IHRoaXMuX3JlcXVpcmVkO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJlZml4OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBwcmVmaXgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9wcmVmaXg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHByZWZpeCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX3ByZWZpeCkge1xyXG4gICAgICB0aGlzLl9wcmVmaXggPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEVudGl0eTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl9zZWxlY3RlZEVudGl0eSkge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGVtcHR5KCkge1xyXG4gICAgbGV0IG4gPSB0aGlzLnNlYXJjaEZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgcmV0dXJuICEhIW47XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJylcclxuICBwdWJsaWMgZ2V0IHNob3VsZExhYmVsRmxvYXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb2N1c2VkIHx8ICF0aGlzLmVtcHR5O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBwcmVmaXggZGVmaW5lZCwgdXN1YWxseSB0aGlzIGlzIHVzZWQgZm9yIGEgY29kZSBzY2FubmVyLlxyXG4gICAgLy8gVGhlIGdvYWwgaXMgdG8gc2VsZWN0IHRoZSBlbnRpdHkgaW4gZGlyZWN0IHdheS5cclxuICAgIGlmICh0aGlzLl9wcmVmaXgpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbFxyXG4gICAgICAgIC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxyXG4gICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpLFxyXG4gICAgICAgICAgZmlsdGVyKHZhbHVlID0+IHZhbHVlLnN0YXJ0c1dpdGgodGhpcy5fcHJlZml4KSksXHJcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy52YWx1ZSA9IG51bGwpLFxyXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuaXNMb2FkaW5nID0gdHJ1ZSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdGhpcy5fZGF0YVNvdXJjZS5vbkZpbHRlcih2YWx1ZS5yZXBsYWNlKHRoaXMuX3ByZWZpeCwgXCJcIikudHJpbSgpKSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZShyZXN1bHRTZXQgPT4ge1xyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHRTZXQubGlzdC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHJlc3VsdFNldC5saXN0WzBdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZEVudGl0aWVzID0gcmVzdWx0U2V0Lmxpc3Q7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBpcyB0aGUgc2VhcmNoIGZ1bmN0aW9uYWxpdHkgd2hlbiBzZWFyY2ggYnkgaHVtYW4uXHJcbiAgICB0aGlzLnNlYXJjaEZvcm1Db250cm9sXHJcbiAgICAgIC52YWx1ZUNoYW5nZXNcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXHJcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuZmlsdGVyZWRFbnRpdGllcyA9IFtdKSxcclxuICAgICAgICBmaWx0ZXIodmFsdWUgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyksXHJcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0VmFsdWUobnVsbCkpLFxyXG4gICAgICAgIGZpbHRlcih2YWx1ZSA9PiB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCA+PSAzKSxcclxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5pc0xvYWRpbmcgPSB0cnVlKSxcclxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdGhpcy5fZGF0YVNvdXJjZS5vbkZpbHRlcih2YWx1ZSkpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShyZXN1bHRTZXQgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZEVudGl0aWVzID0gcmVzdWx0U2V0Lmxpc3Q7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcclxuICAgIHRoaXMuZm0uc3RvcE1vbml0b3JpbmcodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLmVycm9yU3RhdGUgPSB0aGlzLm5nQ29udHJvbC5pbnZhbGlkICYmIHRoaXMubmdDb250cm9sLnRvdWNoZWQ7XHJcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhcigpIHtcclxuICAgIHRoaXMuZmlsdGVyZWRFbnRpdGllcyA9IFtdO1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtQ29udHJvbC5yZXNldChudWxsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1cygpIHtcclxuICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25FbnRpdHlTZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xyXG4gICAgdGhpcy52YWx1ZSA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcclxuICAgIHRoaXMuZmlsdGVyZWRFbnRpdGllcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRW50aXR5QWN0aXZhdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVBY3RpdmF0ZWRFdmVudCkge1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRWYWx1ZSA9IGV2ZW50Lm9wdGlvbj8udmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25FbnRpdHlDbG9zZWQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZhdGVkVmFsdWUpIHtcclxuXHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmFjdGl2YXRlZFZhbHVlO1xyXG4gICAgICB0aGlzLmFjdGl2YXRlZFZhbHVlID0gbnVsbDtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXQoKSB7XHJcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkZvY3VzT3V0KCkge1xyXG5cclxuICAgIGlmICh0aGlzLmZpbHRlcmVkRW50aXRpZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkVmFsdWUgPSB0aGlzLmZpbHRlcmVkRW50aXRpZXNbMF07XHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmZpbHRlcmVkRW50aXRpZXNbMF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Ub3VjaGVkKCkge1xyXG5cclxuICAgIHRoaXMuX29uVG91Y2hlZCgpO1xyXG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25Db250YWluZXJDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCkudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9ICdpbnB1dCcpIHtcclxuICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uOiBhbnkgPSBjb250cm9sLnZhbHVlO1xyXG4gICAgaWYgKHR5cGVvZiBzZWxlY3Rpb24gPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB7aW5jb3JyZWN0OiB0cnVlfTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4ge1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgX29uVG91Y2hlZCA9ICgpID0+IHtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHNldFZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fc2VsZWN0ZWRFbnRpdHkpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRFbnRpdHkgPSB2YWx1ZTtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3NlbGVjdGVkRW50aXR5KTtcclxuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiPGlucHV0ICNpbnB1dCAoYmx1cik9XCJvblRvdWNoZWQoKVwiIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KClcIiBbZm9ybUNvbnRyb2xdPVwic2VhcmNoRm9ybUNvbnRyb2xcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxyXG4gICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgbWF0SW5wdXQ+XHJcbjxtYXQtYXV0b2NvbXBsZXRlICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKGNsb3NlZCk9XCJvbkVudGl0eUNsb3NlZCgpXCJcclxuICAgICAgICAgICAgICAgICAgKG9wdGlvbkFjdGl2YXRlZCk9XCJvbkVudGl0eUFjdGl2YXRlZCgkZXZlbnQpXCIgKG9wdGlvblNlbGVjdGVkKT1cIm9uRW50aXR5U2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJkYXRhU291cmNlLm9uRGlzcGxheUVudGl0eVwiPlxyXG4gIDxtYXQtb3B0aW9uICpuZ0lmPVwiaXNMb2FkaW5nXCIgY2xhc3M9XCJpcy1sb2FkaW5nXCI+XHJcbiAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgPC9tYXQtb3B0aW9uPlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XHJcbiAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZW50aXR5IG9mIGZpbHRlcmVkRW50aXRpZXNcIiBbdmFsdWVdPVwiZW50aXR5XCI+XHJcbiAgICAgIHt7ZGF0YVNvdXJjZS5vbkRpc3BsYXlFbnRpdHkoZW50aXR5KX19XHJcbiAgICA8L21hdC1vcHRpb24+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbWF0LWF1dG9jb21wbGV0ZT5cclxuIl19