ngx-edu-sharing-metaqs2 0.9.19 → 0.9.20

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.
@@ -2,6 +2,7 @@ import { Component, Input, Output } from '@angular/core';
2
2
  import { FormControl, ReactiveFormsModule } from '@angular/forms';
3
3
  import { MatFormField, MatLabel } from '@angular/material/form-field';
4
4
  import { MatOption, MatSelect } from '@angular/material/select';
5
+ import { NgForOf } from '@angular/common';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/forms";
7
8
  /**
@@ -18,12 +19,15 @@ export class QualityMatrixFilterComponent {
18
19
  this.multiple = true;
19
20
  this.changedFilters = this.inputFormControl.valueChanges;
20
21
  }
22
+ optionIdent(_index, option) {
23
+ return option.id;
24
+ }
21
25
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QualityMatrixFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
22
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: QualityMatrixFilterComponent, isStandalone: true, selector: "lib-qm-filter", inputs: { options: "options", inputFormControl: "inputFormControl", label: "label", multiple: "multiple" }, outputs: { changedFilters: "changedFilters" }, ngImport: i0, template: "<mat-form-field appearance=\"outline\">\n <mat-label>Filter by {{ label }}</mat-label>\n <mat-select\n [multiple]=\"multiple\"\n [formControl]=\"inputFormControl\"\n >\n @for( option of options ; track option.id ) {\n <mat-option [value]=\"option.id\"> {{ option.label }} </mat-option>\n }\n </mat-select>\n</mat-form-field>", styles: [":host ::ng-deep>mat-form-field>.mat-mdc-form-field-subscript-wrapper{display:none}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }] }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QualityMatrixFilterComponent, isStandalone: true, selector: "lib-qm-filter", inputs: { options: "options", inputFormControl: "inputFormControl", label: "label", multiple: "multiple" }, outputs: { changedFilters: "changedFilters" }, ngImport: i0, template: "<mat-form-field appearance=\"outline\">\n <mat-label>Filter by {{ label }}</mat-label>\n <mat-select\n [multiple]=\"multiple\"\n [formControl]=\"inputFormControl\"\n >\n <mat-option *ngFor=\"let option of options; trackBy: optionIdent \" [value]=\"option.id\"> {{ option.label }} </mat-option>\n\n </mat-select>\n</mat-form-field>\n", styles: [":host ::ng-deep>mat-form-field>.mat-mdc-form-field-subscript-wrapper{display:none}\n"], dependencies: [{ kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
23
27
  }
24
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QualityMatrixFilterComponent, decorators: [{
25
29
  type: Component,
26
- args: [{ selector: 'lib-qm-filter', standalone: true, imports: [MatFormField, MatSelect, ReactiveFormsModule, MatOption, MatLabel], template: "<mat-form-field appearance=\"outline\">\n <mat-label>Filter by {{ label }}</mat-label>\n <mat-select\n [multiple]=\"multiple\"\n [formControl]=\"inputFormControl\"\n >\n @for( option of options ; track option.id ) {\n <mat-option [value]=\"option.id\"> {{ option.label }} </mat-option>\n }\n </mat-select>\n</mat-form-field>", styles: [":host ::ng-deep>mat-form-field>.mat-mdc-form-field-subscript-wrapper{display:none}\n"] }]
30
+ args: [{ selector: 'lib-qm-filter', standalone: true, imports: [MatFormField, MatSelect, ReactiveFormsModule, MatOption, MatLabel, NgForOf], template: "<mat-form-field appearance=\"outline\">\n <mat-label>Filter by {{ label }}</mat-label>\n <mat-select\n [multiple]=\"multiple\"\n [formControl]=\"inputFormControl\"\n >\n <mat-option *ngFor=\"let option of options; trackBy: optionIdent \" [value]=\"option.id\"> {{ option.label }} </mat-option>\n\n </mat-select>\n</mat-form-field>\n", styles: [":host ::ng-deep>mat-form-field>.mat-mdc-form-field-subscript-wrapper{display:none}\n"] }]
27
31
  }], propDecorators: { options: [{
28
32
  type: Input
29
33
  }],
@@ -37,4 +41,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
37
41
  }], changedFilters: [{
38
42
  type: Output
39
43
  }] } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eS1tYXRyaXgtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9xdWFsaXR5LW1hdHJpeC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL3F1YWxpdHktbWF0cml4LWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7O0FBR2hFOzs7Ozs7O0dBT0c7QUFRSCxNQUFNLE9BQU8sNEJBQTRCO0lBUHpDO1FBWUUscUJBQWdCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUlyQyxhQUFRLEdBQVksSUFBSSxDQUFDO1FBRXpCLG1CQUFjLEdBQW9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7S0FDdEU7K0dBWlksNEJBQTRCO21HQUE1Qiw0QkFBNEIsb09DdEJ6QywyVkFVaUIsOElEVUwsWUFBWSw0TEFBRSxTQUFTLHVlQUFFLG1CQUFtQiwwVEFBRSxTQUFTLHFKQUFFLFFBQVE7OzRGQUVoRSw0QkFBNEI7a0JBUHhDLFNBQVM7K0JBQ0UsZUFBZSxjQUdiLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQzs4QkFJNUUsT0FBTztzQkFETixLQUFLOztRQUdOLDJGQUEyRjtRQUMzRixnQkFBZ0I7c0JBRmYsS0FBSztnQkFJTixLQUFLO3NCQURKLEtBQUs7Z0JBR04sUUFBUTtzQkFEUCxLQUFLO2dCQUdOLGNBQWM7c0JBRGIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGaWx0ZXJWYWx1ZSB9IGZyb20gJy4uLy4uL2phdmEtYXBpJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZCwgTWF0TGFiZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdE9wdGlvbiwgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCB3cmFwcyBhIG1hdC1zZWxlY3QuXG4gKiBJdCdzIG9wdGlvbnMgYXJlIHBvcHVsYXRhdGVkIGZyb20gdGhlIFtvcHRpb25zXSBASW5wdXRcbiAqIFRoZSBsYWJlbCBpcyBwb3B1bGF0ZWQgZnJvbSB0aGUgW2xhYmVsXSBASW5wdXRcbiAqXG4gKiBZb3UgbWF5IGVpdGhlciBwcm92aWRlIGEgRm9ybUNvbnRyb2wgKCB3aGljaCB5b3UgYXJlIHRyYWNraW5nIClcbiAqIG9yIHlvdSBjYW4gc3Vic2NyaWJlIHRvIHRoZSAoY2hhbmdlZEZpbHRlcnMpIG91dHB1dC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXFtLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWFsaXR5LW1hdHJpeC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcXVhbGl0eS1tYXRyaXgtZmlsdGVyLmNvbXBvbmVudC5zY3NzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW01hdEZvcm1GaWVsZCwgTWF0U2VsZWN0LCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBNYXRPcHRpb24sIE1hdExhYmVsXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVhbGl0eU1hdHJpeEZpbHRlckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIG9wdGlvbnM6IEZpbHRlclZhbHVlW10gfCB1bmRlZmluZWQgfCBudWxsO1xuICBASW5wdXQoKVxuICAvL211c3Qgbm90IGJlIG5hbWVkIFwiZm9ybUNvbnRyb2xcIiBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSB0byBpbXBsZW1lbnQgQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgaW5wdXRGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBASW5wdXQoKVxuICBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBtdWx0aXBsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBPdXRwdXQoKVxuICBjaGFuZ2VkRmlsdGVyczogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5pbnB1dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcztcbn1cbiIsIjxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICA8bWF0LWxhYmVsPkZpbHRlciBieSB7eyBsYWJlbCB9fTwvbWF0LWxhYmVsPlxuICA8bWF0LXNlbGVjdFxuICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgW2Zvcm1Db250cm9sXT1cImlucHV0Rm9ybUNvbnRyb2xcIlxuICA+XG4gICAgQGZvciggb3B0aW9uIG9mIG9wdGlvbnMgOyB0cmFjayBvcHRpb24uaWQgKSB7XG4gICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwib3B0aW9uLmlkXCI+IHt7IG9wdGlvbi5sYWJlbCB9fSA8L21hdC1vcHRpb24+XG4gICAgfVxuICA8L21hdC1zZWxlY3Q+XG48L21hdC1mb3JtLWZpZWxkPiJdfQ==
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eS1tYXRyaXgtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL2ZpbHRlci9xdWFsaXR5LW1hdHJpeC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZmlsdGVyL3F1YWxpdHktbWF0cml4LWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUUxQzs7Ozs7OztHQU9HO0FBUUgsTUFBTSxPQUFPLDRCQUE0QjtJQVB6QztRQVlFLHFCQUFnQixHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7UUFJckMsYUFBUSxHQUFZLElBQUksQ0FBQztRQUV6QixtQkFBYyxHQUFvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDO0tBSXRFO0lBSEMsV0FBVyxDQUFDLE1BQWMsRUFBRSxNQUFtQjtRQUM3QyxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUM7SUFDbkIsQ0FBQzsrR0FkVSw0QkFBNEI7bUdBQTVCLDRCQUE0QixvT0N2QnpDLDhWQVVBLDhJRFdZLFlBQVksNExBQUUsU0FBUyx1ZUFBRSxtQkFBbUIsMFRBQUUsU0FBUyxxSkFBRSxRQUFRLHNEQUFFLE9BQU87OzRGQUV6RSw0QkFBNEI7a0JBUHhDLFNBQVM7K0JBQ0UsZUFBZSxjQUdiLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUM7OEJBSXJGLE9BQU87c0JBRE4sS0FBSzs7UUFHTiwyRkFBMkY7UUFDM0YsZ0JBQWdCO3NCQUZmLEtBQUs7Z0JBSU4sS0FBSztzQkFESixLQUFLO2dCQUdOLFFBQVE7c0JBRFAsS0FBSztnQkFHTixjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmlsdGVyVmFsdWUgfSBmcm9tICcuLi8uLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdExhYmVsIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRPcHRpb24sIE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ0Zvck9mIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCB3cmFwcyBhIG1hdC1zZWxlY3QuXG4gKiBJdCdzIG9wdGlvbnMgYXJlIHBvcHVsYXRhdGVkIGZyb20gdGhlIFtvcHRpb25zXSBASW5wdXRcbiAqIFRoZSBsYWJlbCBpcyBwb3B1bGF0ZWQgZnJvbSB0aGUgW2xhYmVsXSBASW5wdXRcbiAqXG4gKiBZb3UgbWF5IGVpdGhlciBwcm92aWRlIGEgRm9ybUNvbnRyb2wgKCB3aGljaCB5b3UgYXJlIHRyYWNraW5nIClcbiAqIG9yIHlvdSBjYW4gc3Vic2NyaWJlIHRvIHRoZSAoY2hhbmdlZEZpbHRlcnMpIG91dHB1dC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXFtLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9xdWFsaXR5LW1hdHJpeC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vcXVhbGl0eS1tYXRyaXgtZmlsdGVyLmNvbXBvbmVudC5zY3NzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW01hdEZvcm1GaWVsZCwgTWF0U2VsZWN0LCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBNYXRPcHRpb24sIE1hdExhYmVsLCBOZ0Zvck9mXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVhbGl0eU1hdHJpeEZpbHRlckNvbXBvbmVudCB7XG4gIEBJbnB1dCgpXG4gIG9wdGlvbnM6IEZpbHRlclZhbHVlW10gfCB1bmRlZmluZWQgfCBudWxsO1xuICBASW5wdXQoKVxuICAvL211c3Qgbm90IGJlIG5hbWVkIFwiZm9ybUNvbnRyb2xcIiBvdGhlcndpc2Ugd2Ugd291bGQgaGF2ZSB0byBpbXBsZW1lbnQgQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgaW5wdXRGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICBASW5wdXQoKVxuICBsYWJlbDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBtdWx0aXBsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBPdXRwdXQoKVxuICBjaGFuZ2VkRmlsdGVyczogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5pbnB1dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcztcbiAgb3B0aW9uSWRlbnQoX2luZGV4OiBudW1iZXIsIG9wdGlvbjogRmlsdGVyVmFsdWUpIHtcbiAgICByZXR1cm4gb3B0aW9uLmlkO1xuICB9XG59XG4iLCI8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgPG1hdC1sYWJlbD5GaWx0ZXIgYnkge3sgbGFiZWwgfX08L21hdC1sYWJlbD5cbiAgPG1hdC1zZWxlY3RcbiAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgIFtmb3JtQ29udHJvbF09XCJpbnB1dEZvcm1Db250cm9sXCJcbiAgPlxuICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBvcHRpb25zOyB0cmFja0J5OiBvcHRpb25JZGVudCBcIiAgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiPiB7eyBvcHRpb24ubGFiZWwgfX0gPC9tYXQtb3B0aW9uPlxuXG4gIDwvbWF0LXNlbGVjdD5cbjwvbWF0LWZvcm0tZmllbGQ+XG4iXX0=
@@ -48,6 +48,9 @@ export class QualityMatrixComponent {
48
48
  this.onLoadedDataChanges();
49
49
  //this.loadDataWithCurrentlySelectedFilters();
50
50
  }
51
+ filterIdent(_index, item) {
52
+ return item.key;
53
+ }
51
54
  get qualityMatrix() {
52
55
  return this.recentQualityMatrix$.value;
53
56
  }
@@ -227,10 +230,10 @@ export class QualityMatrixComponent {
227
230
  return slices;
228
231
  }
229
232
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QualityMatrixComponent, deps: [{ token: i1.MetaApiService }, { token: i2.EditorialLinkService }], target: i0.ɵɵFactoryTarget.Component }); }
230
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: QualityMatrixComponent, selector: "app-quality-matrix-v2", ngImport: i0, template: "<mat-card appearance=\"raised\">\n <mat-card-header>\n <mat-card-title>\n Qualit\u00E4tsmetrik: Metadatenvollst\u00E4ndigkeit von Quellen{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n @for( filter of categoryControls.controls | keyvalue ; track filter.key ) {\n <lib-qm-filter\n [options]=\"categoryFilterValues.get(filter.key)\"\n [inputFormControl]=\"filter.value\"\n [label] = \"'filter.' + filter.key | translate\"></lib-qm-filter>\n }@empty {\n <lib-qm-filter\n aria-disabled=\"true\"\n [label]=\"'Filter'\"></lib-qm-filter>\n }\n </mat-card-content>\n <mat-card-actions align=\"end\">\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"onlySourcesWithMaterial\" id=\"onlySourcesWithMaterial\" >\n show only sources with material\n </mat-slide-toggle>\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"showHistoricalData\" id=\"showHistoricalData\" >\n show historical data\n </mat-slide-toggle>\n <button\n mat-icon-button\n color=\"primary\"\n [disabled]=\"isLoading\"\n (click)=\"refresh()\"\n matTooltip=\"Aktualisiere den IST-Stand\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-actions>\n</mat-card>\n@if (showHistoricalData.value) {\n <lib-datepicker [disabled]=\"isLoading()\" [inputGroup]=\"range\" ></lib-datepicker>\n\n}\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef>Issue Type</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n {{\"quality_matrix.\" + row.meta.label | translate }}\n </td>\n </ng-container>\n <!-- one column for the source -->\n <ng-container *ngFor=\"let col of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_source'\">\n <th [attr.colspan]=\"showHistoricalData.value?2:1\" mat-header-cell *matHeaderCellDef matTooltip=\"{{col.altLabel}}\" >{{col.label}}</th>\n </ng-container>\n <!-- /source -->\n <!-- current Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_current'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\" >{{ range.controls.end.value?.toLocaleString(DateTime.DATE_SHORT) }} <br>({{column.total}})</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">\n @if ( column.total > 0) {\n <a class=\"chart-container\" (click)=\"openEditLink( column.label, row.meta.label)\">\n <div >\n <app-donut-chart [data]=\"getDonutSlices(row, column)\" [borderSize]=\"25\"></app-donut-chart>\n </div>\n </a>\n\n } @else {\n <div>-</div>\n }\n </td>\n </ng-container>\n <!-- /current Data Columns -->\n @if (showHistoricalData.value) {\n <!-- past Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_past'\">\n <th class=\"historic-data-cell\" mat-header-cell *matHeaderCellDef>{{ range.controls.start.value?.toLocaleString(DateTime.DATE_SHORT) }}<br>{{ getPastColumn(column.id)?.total }}</th>\n <td class=\"historic-data-cell\" mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getTrend(row, column) as trend\">\n <span [ngClass]=\"trend.trend\"><mat-icon aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" />{{trend.delta}}</span>\n </ng-container>\n\n </td>\n </ng-container>\n <!-- /past Data Columns -->\n }\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat( sourceColumns); sticky: true;\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"allDataColumns; sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(allDataColumns)\"></tr>\n </table>\n</mat-card>\n", styles: ["mat-card-actions>mat-slide-toggle{margin-left:20px}.row{flex-grow:1;display:flex;align-items:center}table{width:100%;overflow-y:auto}table .scroll{flex-grow:1;overflow-y:auto}.cell{flex:1}.mat-mdc-cell{padding-top:5px}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;text-align:center}.mat-mdc-cell a.chart-container,.mat-mdc-header-cell a.chart-container{display:flex;justify-content:center}.mat-mdc-cell .trending_up,.mat-mdc-header-cell .trending_up{color:#4abeff}.mat-mdc-cell .trending_down,.mat-mdc-header-cell .trending_down{color:#c20808}.recent-data-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-header-cell-label{color:#000;padding-left:30px;padding-right:30px;justify-content:left;border-bottom:1px solid #e4e4e4;font-style:normal;font-weight:500;font-size:110%;background:#ddf0fb;text-align:left}.mat-header-cell-label>div{display:flex;font-weight:700;font-style:normal;justify-content:left}.mat-header-cell-small{padding-left:5px;padding-right:5px;justify-content:left;font-style:normal;font-weight:400;font-size:105%;background:#ddf0fb;border-top:1px solid #e4e4e4;border-bottom:1px solid #e4e4e4}.mat-mdc-cell a{cursor:pointer;display:flex;align-items:center;justify-content:left}.mat-mdc-cell a>mat-icon{padding-right:5px;font-size:22px;height:20px;opacity:.75}.mat-mdc-cell a>mat-icon:hover,.mat-mdc-cell a>mat-icon:focus{text-decoration:none}.mat-mdc-cell .number{display:flex;height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header-sum{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;border-right:5px solid #bdbdbd}.mat-mdc-card{width:100%;box-shadow:none}.mat-mdc-card ::ng-deep mat-card-header{align-items:center}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.mat-mdc-card .source-header{font-style:normal;font-weight:400;font-size:20px;height:30px;width:60%}.mat-mdc-card .source-header .robot-explanation{font-size:15px}.mat-mdc-card .scroll{flex-grow:1;overflow-y:auto}.mat-header-cell-scope{color:#545454}.mat-mdc-header-row{height:70px;max-height:70px;min-height:56px}:host{overflow:auto}:host ::ng-deep thead{border:10px solid #ff0000;position:relative;z-index:1}.mat-cell-level-1{padding-left:20px!important}.mat-cell-level-2{padding-left:40px!important}.mat-cell-level-3{padding-left:60px!important}.mat-cell-level-4{padding-left:80px!important}.mat-cell-level-5{padding-left:100px!important}.mat-cell-level-6{padding-left:120px!important}.mat-cell-level-7{padding-left:140px!important}.mat-cell-level-8{padding-left:160px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i4.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i8.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i8.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i8.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i8.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i8.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i8.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i8.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i8.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i8.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.QualityMatrixFilterComponent, selector: "lib-qm-filter", inputs: ["options", "inputFormControl", "label", "multiple"], outputs: ["changedFilters"] }, { kind: "component", type: i12.DatepickerComponent, selector: "lib-datepicker", inputs: ["disabled", "inputGroup"] }, { kind: "component", type: i13.DonutChartComponent, selector: "app-donut-chart", inputs: ["radius", "viewBox", "borderSize", "strokeWidth", "data"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); }
233
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: QualityMatrixComponent, selector: "app-quality-matrix-v2", ngImport: i0, template: "<mat-card appearance=\"raised\">\n <mat-card-header>\n <mat-card-title>\n Qualit\u00E4tsmetrik: Metadatenvollst\u00E4ndigkeit von Quellen{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <lib-qm-filter\n *ngFor=\"let filter of categoryControls.controls | keyvalue; trackBy: filterIdent\"\n [options]=\"categoryFilterValues.get(filter.key)\"\n [inputFormControl]=\"filter.value\"\n [label] = \"'filter.' + filter.key | translate\"></lib-qm-filter>\n </mat-card-content>\n <mat-card-actions align=\"end\">\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"onlySourcesWithMaterial\" id=\"onlySourcesWithMaterial\" >\n show only sources with material\n </mat-slide-toggle>\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"showHistoricalData\" id=\"showHistoricalData\" >\n show historical data\n </mat-slide-toggle>\n <button\n mat-icon-button\n color=\"primary\"\n [disabled]=\"isLoading\"\n (click)=\"refresh()\"\n matTooltip=\"Aktualisiere den IST-Stand\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-actions>\n</mat-card>\n<lib-datepicker *ngIf=\"showHistoricalData.value\" [disabled]=\"isLoading()\" [inputGroup]=\"range\" ></lib-datepicker>\n\n\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef>Issue Type</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n {{\"quality_matrix.\" + row.meta.label | translate }}\n </td>\n </ng-container>\n <!-- one column for the source -->\n <ng-container *ngFor=\"let col of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_source'\">\n <th [attr.colspan]=\"showHistoricalData.value?2:1\" mat-header-cell *matHeaderCellDef matTooltip=\"{{col.altLabel}}\" >{{col.label}}</th>\n </ng-container>\n <!-- /source -->\n <!-- current Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_current'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\" >{{ range.controls.end.value?.toLocaleString(DateTime.DATE_SHORT) }} <br>({{column.total}})</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">\n <a *ngIf=\"column.total > 0 else emptyDiv\" class=\"chart-container\" (click)=\"openEditLink( column.label, row.meta.label)\">\n <div >\n <app-donut-chart [data]=\"getDonutSlices(row, column)\" [borderSize]=\"25\"></app-donut-chart>\n </div>\n </a>\n <ng-template #emptyDiv>\n <div>-</div>\n </ng-template>\n </td>\n </ng-container>\n <!-- /current Data Columns -->\n <!-- past Data Columns -->\n <ng-container *ngIf=\"showHistoricalData.value\">\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_past'\">\n <th class=\"historic-data-cell\" mat-header-cell\n *matHeaderCellDef>{{ range.controls.start.value?.toLocaleString(DateTime.DATE_SHORT) }}\n <br>{{ getPastColumn(column.id)?.total }}\n </th>\n <td class=\"historic-data-cell\" mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getTrend(row, column) as trend\">\n <span [ngClass]=\"trend.trend\">\n <mat-icon aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" />\n {{ trend.delta }}\n </span>\n </ng-container>\n\n </td>\n </ng-container>\n </ng-container>\n <!-- /past Data Columns -->\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat( sourceColumns); sticky: true;\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"allDataColumns; sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(allDataColumns)\"></tr>\n </table>\n</mat-card>\n", styles: ["mat-card-actions>mat-slide-toggle{margin-left:20px}.row{flex-grow:1;display:flex;align-items:center}table{width:100%;overflow-y:auto}table .scroll{flex-grow:1;overflow-y:auto}.cell{flex:1}.mat-mdc-cell{padding-top:5px}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;text-align:center}.mat-mdc-cell a.chart-container,.mat-mdc-header-cell a.chart-container{display:flex;justify-content:center}.mat-mdc-cell .trending_up,.mat-mdc-header-cell .trending_up{color:#4abeff}.mat-mdc-cell .trending_down,.mat-mdc-header-cell .trending_down{color:#c20808}.recent-data-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-header-cell-label{color:#000;padding-left:30px;padding-right:30px;justify-content:left;border-bottom:1px solid #e4e4e4;font-style:normal;font-weight:500;font-size:110%;background:#ddf0fb;text-align:left}.mat-header-cell-label>div{display:flex;font-weight:700;font-style:normal;justify-content:left}.mat-header-cell-small{padding-left:5px;padding-right:5px;justify-content:left;font-style:normal;font-weight:400;font-size:105%;background:#ddf0fb;border-top:1px solid #e4e4e4;border-bottom:1px solid #e4e4e4}.mat-mdc-cell a{cursor:pointer;display:flex;align-items:center;justify-content:left}.mat-mdc-cell a>mat-icon{padding-right:5px;font-size:22px;height:20px;opacity:.75}.mat-mdc-cell a>mat-icon:hover,.mat-mdc-cell a>mat-icon:focus{text-decoration:none}.mat-mdc-cell .number{display:flex;height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header-sum{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;border-right:5px solid #bdbdbd}.mat-mdc-card{width:100%;box-shadow:none}.mat-mdc-card ::ng-deep mat-card-header{align-items:center}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.mat-mdc-card .source-header{font-style:normal;font-weight:400;font-size:20px;height:30px;width:60%}.mat-mdc-card .source-header .robot-explanation{font-size:15px}.mat-mdc-card .scroll{flex-grow:1;overflow-y:auto}.mat-header-cell-scope{color:#545454}.mat-mdc-header-row{height:70px;max-height:70px;min-height:56px}:host{overflow:auto}:host ::ng-deep thead{border:10px solid #ff0000;position:relative;z-index:1}.mat-cell-level-1{padding-left:20px!important}.mat-cell-level-2{padding-left:40px!important}.mat-cell-level-3{padding-left:60px!important}.mat-cell-level-4{padding-left:80px!important}.mat-cell-level-5{padding-left:100px!important}.mat-cell-level-6{padding-left:120px!important}.mat-cell-level-7{padding-left:140px!important}.mat-cell-level-8{padding-left:160px!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i4.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i4.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i8.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i8.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i8.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i8.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i8.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i8.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i8.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i8.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i8.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.QualityMatrixFilterComponent, selector: "lib-qm-filter", inputs: ["options", "inputFormControl", "label", "multiple"], outputs: ["changedFilters"] }, { kind: "component", type: i12.DatepickerComponent, selector: "lib-datepicker", inputs: ["disabled", "inputGroup"] }, { kind: "component", type: i13.DonutChartComponent, selector: "app-donut-chart", inputs: ["radius", "viewBox", "borderSize", "strokeWidth", "data"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); }
231
234
  }
232
235
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QualityMatrixComponent, decorators: [{
233
236
  type: Component,
234
- args: [{ selector: 'app-quality-matrix-v2', template: "<mat-card appearance=\"raised\">\n <mat-card-header>\n <mat-card-title>\n Qualit\u00E4tsmetrik: Metadatenvollst\u00E4ndigkeit von Quellen{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n @for( filter of categoryControls.controls | keyvalue ; track filter.key ) {\n <lib-qm-filter\n [options]=\"categoryFilterValues.get(filter.key)\"\n [inputFormControl]=\"filter.value\"\n [label] = \"'filter.' + filter.key | translate\"></lib-qm-filter>\n }@empty {\n <lib-qm-filter\n aria-disabled=\"true\"\n [label]=\"'Filter'\"></lib-qm-filter>\n }\n </mat-card-content>\n <mat-card-actions align=\"end\">\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"onlySourcesWithMaterial\" id=\"onlySourcesWithMaterial\" >\n show only sources with material\n </mat-slide-toggle>\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"showHistoricalData\" id=\"showHistoricalData\" >\n show historical data\n </mat-slide-toggle>\n <button\n mat-icon-button\n color=\"primary\"\n [disabled]=\"isLoading\"\n (click)=\"refresh()\"\n matTooltip=\"Aktualisiere den IST-Stand\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-actions>\n</mat-card>\n@if (showHistoricalData.value) {\n <lib-datepicker [disabled]=\"isLoading()\" [inputGroup]=\"range\" ></lib-datepicker>\n\n}\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef>Issue Type</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n {{\"quality_matrix.\" + row.meta.label | translate }}\n </td>\n </ng-container>\n <!-- one column for the source -->\n <ng-container *ngFor=\"let col of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_source'\">\n <th [attr.colspan]=\"showHistoricalData.value?2:1\" mat-header-cell *matHeaderCellDef matTooltip=\"{{col.altLabel}}\" >{{col.label}}</th>\n </ng-container>\n <!-- /source -->\n <!-- current Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_current'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\" >{{ range.controls.end.value?.toLocaleString(DateTime.DATE_SHORT) }} <br>({{column.total}})</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">\n @if ( column.total > 0) {\n <a class=\"chart-container\" (click)=\"openEditLink( column.label, row.meta.label)\">\n <div >\n <app-donut-chart [data]=\"getDonutSlices(row, column)\" [borderSize]=\"25\"></app-donut-chart>\n </div>\n </a>\n\n } @else {\n <div>-</div>\n }\n </td>\n </ng-container>\n <!-- /current Data Columns -->\n @if (showHistoricalData.value) {\n <!-- past Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_past'\">\n <th class=\"historic-data-cell\" mat-header-cell *matHeaderCellDef>{{ range.controls.start.value?.toLocaleString(DateTime.DATE_SHORT) }}<br>{{ getPastColumn(column.id)?.total }}</th>\n <td class=\"historic-data-cell\" mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getTrend(row, column) as trend\">\n <span [ngClass]=\"trend.trend\"><mat-icon aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" />{{trend.delta}}</span>\n </ng-container>\n\n </td>\n </ng-container>\n <!-- /past Data Columns -->\n }\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat( sourceColumns); sticky: true;\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"allDataColumns; sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(allDataColumns)\"></tr>\n </table>\n</mat-card>\n", styles: ["mat-card-actions>mat-slide-toggle{margin-left:20px}.row{flex-grow:1;display:flex;align-items:center}table{width:100%;overflow-y:auto}table .scroll{flex-grow:1;overflow-y:auto}.cell{flex:1}.mat-mdc-cell{padding-top:5px}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;text-align:center}.mat-mdc-cell a.chart-container,.mat-mdc-header-cell a.chart-container{display:flex;justify-content:center}.mat-mdc-cell .trending_up,.mat-mdc-header-cell .trending_up{color:#4abeff}.mat-mdc-cell .trending_down,.mat-mdc-header-cell .trending_down{color:#c20808}.recent-data-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-header-cell-label{color:#000;padding-left:30px;padding-right:30px;justify-content:left;border-bottom:1px solid #e4e4e4;font-style:normal;font-weight:500;font-size:110%;background:#ddf0fb;text-align:left}.mat-header-cell-label>div{display:flex;font-weight:700;font-style:normal;justify-content:left}.mat-header-cell-small{padding-left:5px;padding-right:5px;justify-content:left;font-style:normal;font-weight:400;font-size:105%;background:#ddf0fb;border-top:1px solid #e4e4e4;border-bottom:1px solid #e4e4e4}.mat-mdc-cell a{cursor:pointer;display:flex;align-items:center;justify-content:left}.mat-mdc-cell a>mat-icon{padding-right:5px;font-size:22px;height:20px;opacity:.75}.mat-mdc-cell a>mat-icon:hover,.mat-mdc-cell a>mat-icon:focus{text-decoration:none}.mat-mdc-cell .number{display:flex;height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header-sum{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;border-right:5px solid #bdbdbd}.mat-mdc-card{width:100%;box-shadow:none}.mat-mdc-card ::ng-deep mat-card-header{align-items:center}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.mat-mdc-card .source-header{font-style:normal;font-weight:400;font-size:20px;height:30px;width:60%}.mat-mdc-card .source-header .robot-explanation{font-size:15px}.mat-mdc-card .scroll{flex-grow:1;overflow-y:auto}.mat-header-cell-scope{color:#545454}.mat-mdc-header-row{height:70px;max-height:70px;min-height:56px}:host{overflow:auto}:host ::ng-deep thead{border:10px solid #ff0000;position:relative;z-index:1}.mat-cell-level-1{padding-left:20px!important}.mat-cell-level-2{padding-left:40px!important}.mat-cell-level-3{padding-left:60px!important}.mat-cell-level-4{padding-left:80px!important}.mat-cell-level-5{padding-left:100px!important}.mat-cell-level-6{padding-left:120px!important}.mat-cell-level-7{padding-left:140px!important}.mat-cell-level-8{padding-left:160px!important}\n"] }]
237
+ args: [{ selector: 'app-quality-matrix-v2', template: "<mat-card appearance=\"raised\">\n <mat-card-header>\n <mat-card-title>\n Qualit\u00E4tsmetrik: Metadatenvollst\u00E4ndigkeit von Quellen{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <lib-qm-filter\n *ngFor=\"let filter of categoryControls.controls | keyvalue; trackBy: filterIdent\"\n [options]=\"categoryFilterValues.get(filter.key)\"\n [inputFormControl]=\"filter.value\"\n [label] = \"'filter.' + filter.key | translate\"></lib-qm-filter>\n </mat-card-content>\n <mat-card-actions align=\"end\">\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"onlySourcesWithMaterial\" id=\"onlySourcesWithMaterial\" >\n show only sources with material\n </mat-slide-toggle>\n <mat-slide-toggle [disabled]=\"isLoading()\" labelPosition=\"before\" [formControl]=\"showHistoricalData\" id=\"showHistoricalData\" >\n show historical data\n </mat-slide-toggle>\n <button\n mat-icon-button\n color=\"primary\"\n [disabled]=\"isLoading\"\n (click)=\"refresh()\"\n matTooltip=\"Aktualisiere den IST-Stand\"\n matTooltipShowDelay=\"500\"\n >\n <mat-icon>refresh</mat-icon>\n </button>\n </mat-card-actions>\n</mat-card>\n<lib-datepicker *ngIf=\"showHistoricalData.value\" [disabled]=\"isLoading()\" [inputGroup]=\"range\" ></lib-datepicker>\n\n\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\" class=\"quality-matrix\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th rowspan=\"2\" mat-header-cell *matHeaderCellDef>Issue Type</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n {{\"quality_matrix.\" + row.meta.label | translate }}\n </td>\n </ng-container>\n <!-- one column for the source -->\n <ng-container *ngFor=\"let col of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"col.id + '_source'\">\n <th [attr.colspan]=\"showHistoricalData.value?2:1\" mat-header-cell *matHeaderCellDef matTooltip=\"{{col.altLabel}}\" >{{col.label}}</th>\n </ng-container>\n <!-- /source -->\n <!-- current Data Columns -->\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_current'\">\n <th class=\"recent-data-cell\" mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\" >{{ range.controls.end.value?.toLocaleString(DateTime.DATE_SHORT) }} <br>({{column.total}})</th>\n <td class=\"recent-data-cell\" mat-cell *matCellDef=\"let row\">\n <a *ngIf=\"column.total > 0 else emptyDiv\" class=\"chart-container\" (click)=\"openEditLink( column.label, row.meta.label)\">\n <div >\n <app-donut-chart [data]=\"getDonutSlices(row, column)\" [borderSize]=\"25\"></app-donut-chart>\n </div>\n </a>\n <ng-template #emptyDiv>\n <div>-</div>\n </ng-template>\n </td>\n </ng-container>\n <!-- /current Data Columns -->\n <!-- past Data Columns -->\n <ng-container *ngIf=\"showHistoricalData.value\">\n <ng-container *ngFor=\"let column of filteredColumns; trackBy:columnIdent\" [matColumnDef]=\"column.id + '_past'\">\n <th class=\"historic-data-cell\" mat-header-cell\n *matHeaderCellDef>{{ range.controls.start.value?.toLocaleString(DateTime.DATE_SHORT) }}\n <br>{{ getPastColumn(column.id)?.total }}\n </th>\n <td class=\"historic-data-cell\" mat-cell *matCellDef=\"let row\">\n <ng-container *ngIf=\"getTrend(row, column) as trend\">\n <span [ngClass]=\"trend.trend\">\n <mat-icon aria-hidden=\"false\" [attr.aria-label]=\"trend.trend\" [fontIcon]=\"trend.trend!\" />\n {{ trend.delta }}\n </span>\n </ng-container>\n\n </td>\n </ng-container>\n </ng-container>\n <!-- /past Data Columns -->\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat( sourceColumns); sticky: true;\"></tr>\n <tr mat-header-row *matHeaderRowDef=\"allDataColumns; sticky: true;\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(allDataColumns)\"></tr>\n </table>\n</mat-card>\n", styles: ["mat-card-actions>mat-slide-toggle{margin-left:20px}.row{flex-grow:1;display:flex;align-items:center}table{width:100%;overflow-y:auto}table .scroll{flex-grow:1;overflow-y:auto}.cell{flex:1}.mat-mdc-cell{padding-top:5px}.mat-mdc-cell,.mat-mdc-header-cell{padding-left:5px;text-align:center}.mat-mdc-cell a.chart-container,.mat-mdc-header-cell a.chart-container{display:flex;justify-content:center}.mat-mdc-cell .trending_up,.mat-mdc-header-cell .trending_up{color:#4abeff}.mat-mdc-cell .trending_down,.mat-mdc-header-cell .trending_down{color:#c20808}.recent-data-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-header-cell-label{color:#000;padding-left:30px;padding-right:30px;justify-content:left;border-bottom:1px solid #e4e4e4;font-style:normal;font-weight:500;font-size:110%;background:#ddf0fb;text-align:left}.mat-header-cell-label>div{display:flex;font-weight:700;font-style:normal;justify-content:left}.mat-header-cell-small{padding-left:5px;padding-right:5px;justify-content:left;font-style:normal;font-weight:400;font-size:105%;background:#ddf0fb;border-top:1px solid #e4e4e4;border-bottom:1px solid #e4e4e4}.mat-mdc-cell a{cursor:pointer;display:flex;align-items:center;justify-content:left}.mat-mdc-cell a>mat-icon{padding-right:5px;font-size:22px;height:20px;opacity:.75}.mat-mdc-cell a>mat-icon:hover,.mat-mdc-cell a>mat-icon:focus{text-decoration:none}.mat-mdc-cell .number{display:flex;height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;padding-left:15px}.mat-mdc-cell .row-header-sum{display:flex;height:47px;max-height:47px;justify-content:left;align-items:center;border-right:5px solid #bdbdbd}.mat-mdc-card{width:100%;box-shadow:none}.mat-mdc-card ::ng-deep mat-card-header{align-items:center}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text{flex-grow:1;margin:0}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title{padding-top:20px;font-size:120%}.mat-mdc-card ::ng-deep mat-card-header .mat-card-header-text mat-card-title .count{font-size:80%;color:#888}.mat-mdc-card .source-header{font-style:normal;font-weight:400;font-size:20px;height:30px;width:60%}.mat-mdc-card .source-header .robot-explanation{font-size:15px}.mat-mdc-card .scroll{flex-grow:1;overflow-y:auto}.mat-header-cell-scope{color:#545454}.mat-mdc-header-row{height:70px;max-height:70px;min-height:56px}:host{overflow:auto}:host ::ng-deep thead{border:10px solid #ff0000;position:relative;z-index:1}.mat-cell-level-1{padding-left:20px!important}.mat-cell-level-2{padding-left:40px!important}.mat-cell-level-3{padding-left:60px!important}.mat-cell-level-4{padding-left:80px!important}.mat-cell-level-5{padding-left:100px!important}.mat-cell-level-6{padding-left:120px!important}.mat-cell-level-7{padding-left:140px!important}.mat-cell-level-8{padding-left:160px!important}\n"] }]
235
238
  }], ctorParameters: () => [{ type: i1.MetaApiService }, { type: i2.EditorialLinkService }] });
236
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eV9tYXRyaXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWFsaXR5LW1hdHJpeC9xdWFsaXR5X21hdHJpeC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3F1YWxpdHktbWF0cml4L3F1YWxpdHktbWF0cml4Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBU2pDLE1BQU0sT0FBTyxzQkFBc0I7SUFrQmpDLFlBQTZCLE9BQXVCLEVBQW1CLFdBQWlDO1FBQTNFLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQW1CLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtRQWpCeEcsb0JBQWUsR0FBMEIsRUFBRSxDQUFDO1FBQzVDLHFCQUFnQixHQUFrQixFQUFFLENBQUM7UUFDckMsdUJBQWtCLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLDRCQUF1QixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUzRSxjQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLHlCQUFvQixHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzdELHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBbUIsQ0FBQyxDQUFDO1FBQ3RHLHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUF1QixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBbUIsQ0FBQyxDQUFDO1FBQzNHLFVBQUssR0FHVCxJQUFJLFNBQVMsQ0FBQztZQUNqQixLQUFLLEVBQUUsSUFBSSxXQUFXLEVBQUU7WUFDeEIsR0FBRyxFQUFFLElBQUksV0FBVyxFQUFFO1NBQ3ZCLENBQUMsQ0FBQztRQWtPZ0IsYUFBUSxHQUFHLFFBQVEsQ0FBQztRQS9OckMsK0VBQStFO1FBQy9FLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQix3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDbEcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQiw4Q0FBOEM7SUFDaEQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksY0FBYztRQUNoQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRU8sZ0NBQWdDLENBQUMsUUFBd0I7UUFDL0QsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbkUscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDckYsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDaEUsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDMUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxZQUFZLENBQUMsRUFBRSxLQUFNLEVBQUU7b0JBQ2hHLElBQUksRUFBRSxLQUFLO2lCQUNaLENBQUMsQ0FBQztnQkFDSCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxFQUFFLEtBQU0sRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRyx3REFBd0Q7Z0JBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBVyxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtvQkFDMUYsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxXQUFXLENBQVcsT0FBTyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMvRyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxPQUFPO2FBQ1Qsa0JBQWtCLEVBQUU7YUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO29CQUN6RixTQUFTLEVBQUUsS0FBSztpQkFDakIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQzNCLE1BQU0sQ0FBQyxLQUFLLEVBQ1osTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzlCLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FDSCxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZO2FBQy9CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzFCLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFTyxtQkFBbUI7UUFDekIsSUFBSSxDQUFDLG9CQUFvQjthQUN0QixJQUFJLENBQ0gsa0JBQWtCLEVBQUUsRUFDcEIsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQzNCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ3JGO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNyQyxNQUFNLElBQUksR0FBYSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNSLEtBQUssRUFBRSxNQUFNO2dCQUNiLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3ZHLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFTyxjQUFjO1FBQ3BCLE1BQU0sSUFBSSxHQUFhLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3JELElBQUksQ0FBQyxJQUFJLENBQUM7WUFDUixLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQ3JHLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixNQUFNLElBQUksR0FBYSxFQUFFLENBQUM7UUFDMUIsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUUsSUFBSSxhQUFhLEdBQWtCLEVBQUUsQ0FBQztZQUN0QyxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQzVCLGFBQWEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sb0NBQW9DO1FBQzFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLFFBQVEsQ0FBQztZQUNQLE1BQU0sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUU7U0FDakMsQ0FBQzthQUNDLElBQUksQ0FDSCxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWMsRUFBRSxLQUFhO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyw4Q0FBOEMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRUQsK0VBQStFO0lBQy9FLFdBQVcsQ0FBQyxNQUFjLEVBQUUsR0FBd0I7UUFDbEQsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsb0NBQW9DLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWdCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBcUIsRUFBRSxNQUEyQjtRQUN6RCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0MsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUM5QixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN0QixDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSztnQkFDckQsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FDcEUsQ0FBQztZQUVGLE1BQU0sS0FBSyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDMUYsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMxQixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsR0FBcUIsRUFBRSxNQUEyQjtRQUMvRCxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLG9CQUFvQixHQUFHLENBQUMsQ0FBQztRQUM3QiwwRUFBMEU7UUFFMUUsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLGtCQUFrQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pGLG9CQUFvQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDekQsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDN0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLEdBQUcsaUJBQWlCLENBQUM7UUFDeEUsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUNuRixNQUFNLE1BQU0sR0FBRztZQUNiO2dCQUNFLEVBQUUsRUFBRSxDQUFDO2dCQUNMLE9BQU8sRUFBRSxJQUFJO2dCQUNiLEtBQUssRUFBRSxTQUFTO2dCQUNoQixLQUFLLEVBQUUsR0FBRyxJQUFJLE9BQU8sWUFBWSxHQUFHO2FBQ3JDO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsT0FBTyxFQUFFLG9CQUFvQjtnQkFDN0IsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLEtBQUssRUFBRSxHQUFHLG9CQUFvQixPQUFPLGlCQUFpQixHQUFHO2FBQzFEO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLEtBQUssRUFBRSxHQUFHLGtCQUFrQixPQUFPLGVBQWUsR0FBRzthQUN0RDtTQUNGLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOytHQWpQVSxzQkFBc0I7bUdBQXRCLHNCQUFzQiw2RENqQm5DLDQ3SUFpR0E7OzRGRGhGYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZpbmFsaXplLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZXRhQXBpU2VydmljZSB9IGZyb20gJy4uLy4uL21ldGEtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgUXVhbGl0eU1hdHJpeCwgUXVhbGl0eU1hdHJpeEhlYWRlciwgUXVhbGl0eU1hdHJpeFJvdyB9IGZyb20gJy4uLy4uL2phdmEtYXBpJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1SZWNvcmQgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBFZGl0b3JpYWxMaW5rU2VydmljZSB9IGZyb20gJy4uL2VkaXRvcmlhbC1saW5rLXNlcnZpY2UvZWRpdG9yaWFsLWxpbmsuc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gJ2x1eG9uJztcbmltcG9ydCB7IERvbnV0U2xpY2UgfSBmcm9tICcuLi9kb251dC1jaGFydC9kb251dC1jaGFydC5tb2RlbCc7XG5pbXBvcnQgeyBGaWx0ZXIsIEZpbHRlclZhbHVlIH0gZnJvbSAnLi4vLi4vamF2YS1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtcXVhbGl0eS1tYXRyaXgtdjInLFxuICB0ZW1wbGF0ZVVybDogJy4vcXVhbGl0eS1tYXRyaXguaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1YWxpdHlfbWF0cml4LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVhbGl0eU1hdHJpeENvbXBvbmVudCB7XG4gIGZpbHRlcmVkQ29sdW1uczogUXVhbGl0eU1hdHJpeEhlYWRlcltdID0gW107XG4gIGRhdGF0YWJsZUNvbHVtbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgc2hvd0hpc3RvcmljYWxEYXRhID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZhbHNlLCBkaXNhYmxlZDogdHJ1ZSB9KTtcbiAgb25seVNvdXJjZXNXaXRoTWF0ZXJpYWwgPSBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogdHJ1ZSwgZGlzYWJsZWQ6IHRydWUgfSk7XG4gIGNhdGVnb3J5Q29udHJvbHM6IEZvcm1SZWNvcmQ8Rm9ybUNvbnRyb2w8c3RyaW5nW10+PjtcbiAgaXNMb2FkaW5nID0gc2lnbmFsKHRydWUpO1xuICByZWFkb25seSBjYXRlZ29yeUZpbHRlclZhbHVlczogTWFwPHN0cmluZywgRmlsdGVyVmFsdWVbXT4gPSBuZXcgTWFwKCk7XG4gIHJlYWRvbmx5IHJlY2VudFF1YWxpdHlNYXRyaXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWFsaXR5TWF0cml4Pih7IGNvbHVtbnM6IFtdLCByb3dzOiBbXSB9IGFzIFF1YWxpdHlNYXRyaXgpO1xuICByZWFkb25seSBwYXN0UXVhbGl0eU1hdHJpeCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1YWxpdHlNYXRyaXggfCBudWxsPih7IGNvbHVtbnM6IFtdLCByb3dzOiBbXSB9IGFzIFF1YWxpdHlNYXRyaXgpO1xuICByZWFkb25seSByYW5nZTogRm9ybUdyb3VwPHtcbiAgICBzdGFydDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+O1xuICAgIGVuZDogRm9ybUNvbnRyb2w8RGF0ZVRpbWU8Ym9vbGVhbj4+O1xuICB9PiA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXJ0OiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICBlbmQ6IG5ldyBGb3JtQ29udHJvbCgpLFxuICB9KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG1ldGFBcGk6IE1ldGFBcGlTZXJ2aWNlLCBwcml2YXRlIHJlYWRvbmx5IGxpbmtTZXJ2aWNlOiBFZGl0b3JpYWxMaW5rU2VydmljZSkge1xuICAgIC8vIGEgRm9ybVJlY29yZCBoYXMgdG8gYmUgaW5pdGlhbGl6ZWQgd2l0aCBvbmUgc291cmNlIHRvIGRldGVybWluZSBpdHMgdHlwZSA6LShcbiAgICB0aGlzLmNhdGVnb3J5Q29udHJvbHMgPSBuZXcgRm9ybVJlY29yZCh7IGR1bW15OiBuZXcgRm9ybUNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSkgfSk7XG4gICAgdGhpcy5jYXRlZ29yeUNvbnRyb2xzLnJlbW92ZUNvbnRyb2woJ2R1bW15JywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMucmVnaXN0ZXJDYXRlZ29yeUZpbHRlcnMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyRGF0ZVJhbmdlRmlsdGVyKCk7XG4gICAgLy8gVE9ETzogY29uc2lkZXIgYSByZWdpc3RlcigpIGZ1bmN0aW9uc1xuICAgIHRoaXMub25seVNvdXJjZXNXaXRoTWF0ZXJpYWwudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgob25seVdpdGhNYXRlcmlhbCkgPT4ge1xuICAgICAgdGhpcy5maWx0ZXJUYWJsZUJ5U291cmNlc1dpdGhNYXRlcmlhbChvbmx5V2l0aE1hdGVyaWFsKTtcbiAgICB9KTtcbiAgICB0aGlzLm9uTG9hZGVkRGF0YUNoYW5nZXMoKTtcbiAgICAvL3RoaXMubG9hZERhdGFXaXRoQ3VycmVudGx5U2VsZWN0ZWRGaWx0ZXJzKCk7XG4gIH1cblxuICBnZXQgcXVhbGl0eU1hdHJpeCgpOiBRdWFsaXR5TWF0cml4IHtcbiAgICByZXR1cm4gdGhpcy5yZWNlbnRRdWFsaXR5TWF0cml4JC52YWx1ZTtcbiAgfVxuXG4gIGdldCBzb3VyY2VDb2x1bW5zKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhdGFibGVDb2x1bW5zLm1hcCgoYykgPT4gYyArICdfc291cmNlJyk7XG4gIH1cblxuICBnZXQgY3VycmVudENvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGF0YWJsZUNvbHVtbnMubWFwKChjKSA9PiBjICsgJ19jdXJyZW50Jyk7XG4gIH1cblxuICBnZXQgcGFzdENvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGF0YWJsZUNvbHVtbnMubWFwKChjKSA9PiBjICsgJ19wYXN0Jyk7XG4gIH1cblxuICBnZXQgYWxsRGF0YUNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLnNob3dIaXN0b3JpY2FsRGF0YS52YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFzdENvbHVtbnMuZmxhdE1hcCgoZSwgaSkgPT4gW2UsIHRoaXMuY3VycmVudENvbHVtbnNbaV1dKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudENvbHVtbnM7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlclRhYmxlQnlTb3VyY2VzV2l0aE1hdGVyaWFsKG9ubHlXaXRoOiBib29sZWFuIHwgbnVsbCkge1xuICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkLnZhbHVlLmNvbHVtbnMuc2xpY2UoKTtcbiAgICAvLyBhdm9pZCBmaWx0ZXJpbmcgd2hlbiBub3QgbmVjZXNzYXJ5XG4gICAgdGhpcy5maWx0ZXJlZENvbHVtbnMgPSBvbmx5V2l0aCA/IGFsbENvbHVtbnMuZmlsdGVyKChjKSA9PiBjLnRvdGFsID4gMCkgOiBhbGxDb2x1bW5zO1xuICAgIHRoaXMuZGF0YXRhYmxlQ29sdW1ucyA9IHRoaXMuZmlsdGVyZWRDb2x1bW5zLm1hcCgoYykgPT4gYy5pZCk7XG4gIH1cblxuICByZWdpc3RlckRhdGVSYW5nZUZpbHRlcigpIHtcbiAgICB0aGlzLnJhbmdlLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5sb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKTtcbiAgICB9KTtcbiAgICB0aGlzLm1ldGFBcGkuZ2V0VGltZXJhbmdlRmlsdGVyKCkuc3Vic2NyaWJlKChyYW5nZUZpbHRlcikgPT4ge1xuICAgICAgaWYgKHJhbmdlRmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZVN0YXJ0Jyk/LmxhYmVsISwge1xuICAgICAgICAgIHpvbmU6ICd1dGMnLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IERhdGVUaW1lLmZyb21JU08ocmFuZ2VGaWx0ZXIudmFsdWVzLmZpbmQoKHYpID0+IHYuaWQgPT09ICdyYW5nZUVuZCcpPy5sYWJlbCEsIHsgem9uZTogJ3V0YycgfSk7XG4gICAgICAgIC8vdG9nZ2xlIHRoZSBlbWl0RXZlbnQgdG8gaW5pdGlhbGx5IGxvYWQgdGhlIGRhdGEgb3Igbm90XG4gICAgICAgIHRoaXMucmFuZ2Uuc2V0Q29udHJvbCgnc3RhcnQnLCBuZXcgRm9ybUNvbnRyb2w8RGF0ZVRpbWU+KHN0YXJ0RGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwge1xuICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJhbmdlLnNldENvbnRyb2woJ2VuZCcsIG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZT4oZW5kRGF0ZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KSwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyQ2F0ZWdvcnlGaWx0ZXJzKCkge1xuICAgIHRoaXMubWV0YUFwaVxuICAgICAgLmdldENhdGVnb3J5RmlsdGVycygpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoZmlsdGVycykgPT4ge1xuICAgICAgICBmaWx0ZXJzLmZvckVhY2goKGZpbHRlcikgPT4ge1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy5hZGRDb250cm9sKGZpbHRlci5maWVsZCwgbmV3IEZvcm1Db250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7XG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2F0ZWdvcnlGaWx0ZXJWYWx1ZXMuc2V0KFxuICAgICAgICAgICAgZmlsdGVyLmZpZWxkLFxuICAgICAgICAgICAgZmlsdGVyLnZhbHVlcy50b1NvcnRlZCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Mb2FkZWREYXRhQ2hhbmdlcygpIHtcbiAgICB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIGZpbHRlcigocW0pID0+IHFtICE9PSBudWxsKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuZmlsdGVyVGFibGVCeVNvdXJjZXNXaXRoTWF0ZXJpYWwodGhpcy5vbmx5U291cmNlc1dpdGhNYXRlcmlhbC52YWx1ZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRm9yU3RhcnQoKTogT2JzZXJ2YWJsZTxRdWFsaXR5TWF0cml4IHwgbnVsbD4ge1xuICAgIGlmICh0aGlzLnJhbmdlLmNvbnRyb2xzLnN0YXJ0Py52YWx1ZSkge1xuICAgICAgY29uc3QgYm9keTogRmlsdGVyW10gPSB0aGlzLmdldEN1cnJlbnRGaWx0ZXJWYWx1ZXMoKTtcbiAgICAgIGJvZHkucHVzaCh7XG4gICAgICAgIGZpZWxkOiAnYXNPZicsXG4gICAgICAgIHZhbHVlczogW3sgaWQ6IHRoaXMucmFuZ2UuY29udHJvbHMuc3RhcnQudmFsdWUudG9JU08oeyBpbmNsdWRlT2Zmc2V0OiBmYWxzZSB9KSBhcyBzdHJpbmcsIGxhYmVsOiAnJyB9XSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRoaXMubWV0YUFwaS5nZXRRdWFsaXR5TWF0cml4V2l0aEZpbHRlcnNWMihib2R5KS5waXBlKHRha2UoMSkpO1xuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhRm9yRW5kKCk6IE9ic2VydmFibGU8UXVhbGl0eU1hdHJpeD4ge1xuICAgIGNvbnN0IGJvZHk6IEZpbHRlcltdID0gdGhpcy5nZXRDdXJyZW50RmlsdGVyVmFsdWVzKCk7XG4gICAgYm9keS5wdXNoKHtcbiAgICAgIGZpZWxkOiAnYXNPZicsXG4gICAgICB2YWx1ZXM6IFt7IGlkOiB0aGlzLnJhbmdlLmNvbnRyb2xzLmVuZC52YWx1ZS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIGFzIHN0cmluZywgbGFiZWw6ICcnIH1dLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLm1ldGFBcGkuZ2V0UXVhbGl0eU1hdHJpeFdpdGhGaWx0ZXJzVjIoYm9keSkucGlwZSh0YWtlKDEpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudEZpbHRlclZhbHVlcygpOiBGaWx0ZXJbXSB7XG4gICAgY29uc3QgYm9keTogRmlsdGVyW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtmaWVsZCwgdmFsdWVzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmNhdGVnb3J5Q29udHJvbHMudmFsdWUpKSB7XG4gICAgICBsZXQgcmVxdWVzdFZhbHVlczogRmlsdGVyVmFsdWVbXSA9IFtdO1xuICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlcXVlc3RWYWx1ZXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4gKHsgaWQ6IHZhbHVlLCBsYWJlbDogJycgfSkpO1xuICAgICAgICBib2R5LnB1c2goeyBmaWVsZCwgdmFsdWVzOiByZXF1ZXN0VmFsdWVzIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGFXaXRoQ3VycmVudGx5U2VsZWN0ZWRGaWx0ZXJzKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICBmb3JrSm9pbih7XG4gICAgICBwYXN0UW06IHRoaXMubG9hZERhdGFGb3JTdGFydCgpLFxuICAgICAgY3VycmVudFFtOiB0aGlzLmxvYWREYXRhRm9yRW5kKCksXG4gICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoeyBwYXN0UW06IF8sIGN1cnJlbnRRbSB9KSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhdGFibGVDb2x1bW5zID0gY3VycmVudFFtLmNvbHVtbnMuZmlsdGVyKChjKSA9PiBjLmxldmVsICE9PSAwKS5tYXAoKGMpID0+IGMuaWQpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBwYXN0UW0sIGN1cnJlbnRRbSB9KSA9PiB7XG4gICAgICAgIHRoaXMucmVjZW50UXVhbGl0eU1hdHJpeCQubmV4dChjdXJyZW50UW0pO1xuICAgICAgICB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC5uZXh0KHBhc3RRbSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG9wZW5FZGl0TGluayhzb3VyY2U6IHN0cmluZywgaXNzdWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmxpbmtTZXJ2aWNlLm9wZW5CeVJlcGxpY2F0aW9uc291cmNlQW5kSXNzdWVUeXBlV2l0aEZpbHRlcnMoc291cmNlLCBpc3N1ZSwgdGhpcy5jYXRlZ29yeUNvbnRyb2xzLnZhbHVlKTtcbiAgfVxuXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy84MzYxI2lzc3VlY29tbWVudC0zNDU4MDQ5NTRcbiAgY29sdW1uSWRlbnQoX2luZGV4OiBudW1iZXIsIGNvbDogUXVhbGl0eU1hdHJpeEhlYWRlcikge1xuICAgIHJldHVybiBjb2wuaWQ7XG4gIH1cblxuICBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vb3Igc2hvdWxkIHdlIHJlc2V0IGFsbCBGaWx0ZXI/XG4gICAgdGhpcy5sb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKTtcbiAgfVxuXG4gIGdldFBhc3RDb2x1bW4oY29sdW1uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZT8uY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09PSBjb2x1bW5JZCk7XG4gIH1cblxuICBnZXRUcmVuZChyb3c6IFF1YWxpdHlNYXRyaXhSb3csIGNvbHVtbjogUXVhbGl0eU1hdHJpeEhlYWRlcik6IHsgZGVsdGE/OiBudW1iZXI7IHRyZW5kPzogc3RyaW5nIH0ge1xuICAgIGlmICh0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWUuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYXN0X3JvdyA9IHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkPy52YWx1ZS5yb3dzLmZpbmQoKHByKSA9PiBwci5tZXRhLmlkID09IHJvdy5tZXRhLmlkKTtcbiAgICAgIGNvbnN0IHBhc3RfY29sdW1uID0gdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQudmFsdWUuY29sdW1ucy5maW5kKChjKSA9PiBjLmlkID09IGNvbHVtbi5pZCk7XG4gICAgICBpZiAoIXBhc3Rfcm93IHx8ICFwYXN0X2NvbHVtbikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlbHRhID0gTWF0aC5mbG9vcihcbiAgICAgICAgKDEwMCAqIHJvdy5jb3VudHNbY29sdW1uLmlkXS5zdWZmaWNpZW50KSAvIGNvbHVtbi50b3RhbCAtXG4gICAgICAgICAgKDEwMCAqIHBhc3Rfcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQpIC8gcGFzdF9jb2x1bW4udG90YWxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHRyZW5kID0gZGVsdGEgPT09IDAgPyAndHJlbmRpbmdfZmxhdCcgOiBkZWx0YSA8IDAgPyAndHJlbmRpbmdfZG93bicgOiAndHJlbmRpbmdfdXAnO1xuICAgICAgcmV0dXJuIHsgZGVsdGEsIHRyZW5kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH1cblxuICBnZXREb251dFNsaWNlcyhyb3c6IFF1YWxpdHlNYXRyaXhSb3csIGNvbHVtbjogUXVhbGl0eU1hdHJpeEhlYWRlcik6IERvbnV0U2xpY2VbXSB7XG4gICAgbGV0IHN1ZmZpY2llbnRmaWxsUmF0ZSA9IDA7XG4gICAgbGV0IGluc3VmZmljaWVudGZpbGxSYXRlID0gMDtcbiAgICAvL0RlciBXZXJ0IGJlcmVjaG5ldCBzaWNoIGF1cyBkZW0gdG90YWxfY291bnQgLSB3aXRob3V0X2Rlc2NyaXB0aW9uX2NvdW50LlxuXG4gICAgaWYgKGNvbHVtbi50b3RhbCAhPT0gMCkge1xuICAgICAgc3VmZmljaWVudGZpbGxSYXRlID0gTWF0aC5yb3VuZCgoMTAwICogcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQpIC8gY29sdW1uLnRvdGFsKTtcbiAgICAgIGluc3VmZmljaWVudGZpbGxSYXRlID0gTWF0aC5yb3VuZCgoMTAwICogcm93LmNvdW50c1tjb2x1bW4uaWRdLmluc3VmZmljaWVudCkgLyBjb2x1bW4udG90YWwpO1xuICAgIH1cbiAgICBjb25zdCBzdWZmaWNpZW50VG90YWwgPSByb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudDtcbiAgICBjb25zdCBpbnN1ZmZpY2llbnRUb3RhbCA9IHJvdy5jb3VudHNbY29sdW1uLmlkXS5pbnN1ZmZpY2llbnQ7XG4gICAgY29uc3QgbWlzc2luZ1RvdGFsID0gY29sdW1uLnRvdGFsIC0gc3VmZmljaWVudFRvdGFsIC0gaW5zdWZmaWNpZW50VG90YWw7XG4gICAgY29uc3QgcmVzdCA9IDEwMCAtIChzdWZmaWNpZW50ZmlsbFJhdGUgKyBpbnN1ZmZpY2llbnRmaWxsUmF0ZSk7IC8vIGEuay5hLiBcIm1pc3NpbmdcIlxuICAgIGNvbnN0IHNsaWNlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgaWQ6IDMsXG4gICAgICAgIHBlcmNlbnQ6IHJlc3QsXG4gICAgICAgIGNvbG9yOiAnI0Q4RURGQycsXG4gICAgICAgIGxhYmVsOiBgJHtyZXN0fSAlICgke21pc3NpbmdUb3RhbH0pYCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGlkOiAxLFxuICAgICAgICBwZXJjZW50OiBpbnN1ZmZpY2llbnRmaWxsUmF0ZSxcbiAgICAgICAgY29sb3I6ICcjQzIwODA4JyxcbiAgICAgICAgbGFiZWw6IGAke2luc3VmZmljaWVudGZpbGxSYXRlfSAlICgke2luc3VmZmljaWVudFRvdGFsfSlgLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IDIsXG4gICAgICAgIHBlcmNlbnQ6IHN1ZmZpY2llbnRmaWxsUmF0ZSxcbiAgICAgICAgY29sb3I6ICcjNEFCRUZGJyxcbiAgICAgICAgbGFiZWw6IGAke3N1ZmZpY2llbnRmaWxsUmF0ZX0gJSAoJHtzdWZmaWNpZW50VG90YWx9KWAsXG4gICAgICB9LFxuICAgIF07XG4gICAgcmV0dXJuIHNsaWNlcztcbiAgfVxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRGF0ZVRpbWUgPSBEYXRlVGltZTtcbn1cbiIsIjxtYXQtY2FyZCBhcHBlYXJhbmNlPVwicmFpc2VkXCI+XG4gIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgPG1hdC1jYXJkLXRpdGxlPlxuICAgICAgUXVhbGl0w6R0c21ldHJpazogTWV0YWRhdGVudm9sbHN0w6RuZGlna2VpdCB2b24gUXVlbGxlbnt7aXNMb2FkaW5nKCkgPyBcIjogTGFkZSBuZXVlIERhdGVuLlwiIDogXCJcIn19PC9tYXQtY2FyZC10aXRsZVxuICAgID5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIDxtYXQtY2FyZC1jb250ZW50PlxuICAgIEBmb3IoIGZpbHRlciBvZiBjYXRlZ29yeUNvbnRyb2xzLmNvbnRyb2xzIHwga2V5dmFsdWUgIDsgdHJhY2sgZmlsdGVyLmtleSApIHtcbiAgICAgIDxsaWItcW0tZmlsdGVyXG4gICAgICAgIFtvcHRpb25zXT1cImNhdGVnb3J5RmlsdGVyVmFsdWVzLmdldChmaWx0ZXIua2V5KVwiXG4gICAgICAgIFtpbnB1dEZvcm1Db250cm9sXT1cImZpbHRlci52YWx1ZVwiXG4gICAgICAgIFtsYWJlbF0gPSBcIidmaWx0ZXIuJyArIGZpbHRlci5rZXkgfCB0cmFuc2xhdGVcIj48L2xpYi1xbS1maWx0ZXI+XG4gICAgfUBlbXB0eSB7XG4gICAgICA8bGliLXFtLWZpbHRlclxuICAgICAgICBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiXG4gICAgICAgIFtsYWJlbF09XCInRmlsdGVyJ1wiPjwvbGliLXFtLWZpbHRlcj5cbiAgICB9XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPG1hdC1jYXJkLWFjdGlvbnMgYWxpZ249XCJlbmRcIj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nKClcIiBsYWJlbFBvc2l0aW9uPVwiYmVmb3JlXCIgW2Zvcm1Db250cm9sXT1cIm9ubHlTb3VyY2VzV2l0aE1hdGVyaWFsXCIgaWQ9XCJvbmx5U291cmNlc1dpdGhNYXRlcmlhbFwiID5cbiAgICAgIHNob3cgb25seSBzb3VyY2VzIHdpdGggbWF0ZXJpYWxcbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCIgbGFiZWxQb3NpdGlvbj1cImJlZm9yZVwiIFtmb3JtQ29udHJvbF09XCJzaG93SGlzdG9yaWNhbERhdGFcIiBpZD1cInNob3dIaXN0b3JpY2FsRGF0YVwiID5cbiAgICAgIHNob3cgaGlzdG9yaWNhbCBkYXRhXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxidXR0b25cbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdcIlxuICAgICAgKGNsaWNrKT1cInJlZnJlc2goKVwiXG4gICAgICBtYXRUb29sdGlwPVwiQWt0dWFsaXNpZXJlIGRlbiBJU1QtU3RhbmRcIlxuICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPnJlZnJlc2g8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1jYXJkLWFjdGlvbnM+XG48L21hdC1jYXJkPlxuQGlmIChzaG93SGlzdG9yaWNhbERhdGEudmFsdWUpIHtcbiAgPGxpYi1kYXRlcGlja2VyIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiIFtpbnB1dEdyb3VwXT1cInJhbmdlXCIgPjwvbGliLWRhdGVwaWNrZXI+XG5cbn1cbjxtYXQtY2FyZD5cbiAgPHRhYmxlIFtuZ0NsYXNzXT1cInsnd2hpbGUtbG9hZGluZyc6IGlzTG9hZGluZygpfVwiIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJyZWNlbnRRdWFsaXR5TWF0cml4JC52YWx1ZS5yb3dzXCIgY2xhc3M9XCJxdWFsaXR5LW1hdHJpeFwiPlxuICAgIDwhLS0gRGVmaW5lIGNvbHVtbnMgb2YgdGFibGUgLS0+XG4gICAgPCEtLSBSb3cgSGVhZGVyIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInJvdy1oZWFkZXJcIiBzdGlja3k+XG4gICAgICA8dGggcm93c3Bhbj1cIjJcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+SXNzdWUgVHlwZTwvdGg+XG4gICAgICA8dGRcbiAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgbWF0VG9vbHRpcD1cInt7cm93Lm1ldGEuYWx0X2xhYmVsfX1cIlxuICAgICAgICBjbGFzcz1cInJvdy1oZWFkZXIge3snbWF0LWNlbGwtbGV2ZWwtJyArIChyb3cubWV0YS5sZXZlbCsxKX19XCJcbiAgICAgID5cbiAgICAgICAge3tcInF1YWxpdHlfbWF0cml4LlwiICsgcm93Lm1ldGEubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSBvbmUgY29sdW1uIGZvciB0aGUgc291cmNlIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBmaWx0ZXJlZENvbHVtbnM7IHRyYWNrQnk6Y29sdW1uSWRlbnRcIiBbbWF0Q29sdW1uRGVmXT1cImNvbC5pZCArICdfc291cmNlJ1wiPlxuICAgICAgPHRoIFthdHRyLmNvbHNwYW5dPVwic2hvd0hpc3RvcmljYWxEYXRhLnZhbHVlPzI6MVwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXRUb29sdGlwPVwie3tjb2wuYWx0TGFiZWx9fVwiID57e2NvbC5sYWJlbH19PC90aD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIC9zb3VyY2UgLS0+XG4gICAgPCEtLSBjdXJyZW50IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZmlsdGVyZWRDb2x1bW5zOyB0cmFja0J5OmNvbHVtbklkZW50XCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uaWQgKyAnX2N1cnJlbnQnXCI+XG4gICAgICA8dGggY2xhc3M9XCJyZWNlbnQtZGF0YS1jZWxsXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdFRvb2x0aXA9XCJ7e2NvbHVtbi5hbHRMYWJlbH19XCIgPnt7IHJhbmdlLmNvbnRyb2xzLmVuZC52YWx1ZT8udG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9TSE9SVCkgfX0gPGJyPih7e2NvbHVtbi50b3RhbH19KTwvdGg+XG4gICAgICA8dGQgY2xhc3M9XCJyZWNlbnQtZGF0YS1jZWxsXCIgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+XG4gICAgICAgIEBpZiAoIGNvbHVtbi50b3RhbCA+IDApIHtcbiAgICAgICAgICA8YSBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lclwiIChjbGljayk9XCJvcGVuRWRpdExpbmsoIGNvbHVtbi5sYWJlbCwgIHJvdy5tZXRhLmxhYmVsKVwiPlxuICAgICAgICAgICAgPGRpdiA+XG4gICAgICAgICAgICAgIDxhcHAtZG9udXQtY2hhcnQgW2RhdGFdPVwiZ2V0RG9udXRTbGljZXMocm93LCBjb2x1bW4pXCIgW2JvcmRlclNpemVdPVwiMjVcIj48L2FwcC1kb251dC1jaGFydD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvYT5cblxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGRpdj4tPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIC9jdXJyZW50IERhdGEgQ29sdW1ucyAtLT5cbiAgICBAaWYgKHNob3dIaXN0b3JpY2FsRGF0YS52YWx1ZSkge1xuICAgIDwhLS0gcGFzdCBEYXRhIENvbHVtbnMgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGZpbHRlcmVkQ29sdW1uczsgdHJhY2tCeTpjb2x1bW5JZGVudFwiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLmlkICsgJ19wYXN0J1wiPlxuICAgICAgPHRoIGNsYXNzPVwiaGlzdG9yaWMtZGF0YS1jZWxsXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPnt7IHJhbmdlLmNvbnRyb2xzLnN0YXJ0LnZhbHVlPy50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFX1NIT1JUKSB9fTxicj57eyBnZXRQYXN0Q29sdW1uKGNvbHVtbi5pZCk/LnRvdGFsIH19PC90aD5cbiAgICAgIDx0ZCBjbGFzcz1cImhpc3RvcmljLWRhdGEtY2VsbFwiIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VHJlbmQocm93LCBjb2x1bW4pIGFzIHRyZW5kXCI+XG4gICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwidHJlbmQudHJlbmRcIj48bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidHJlbmQudHJlbmRcIiBbZm9udEljb25dPVwidHJlbmQudHJlbmQhXCIgLz57e3RyZW5kLmRlbHRhfX08L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gL3Bhc3QgRGF0YSBDb2x1bW5zIC0tPlxuICAgIH1cbiAgICAgIDwhLS0gR2VuZXJhdGUgYWN0dWFsIHRhYmxlIC0tPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiWydyb3ctaGVhZGVyJ10uY29uY2F0KCBzb3VyY2VDb2x1bW5zKTsgc3RpY2t5OiB0cnVlO1wiPjwvdHI+XG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJhbGxEYXRhQ29sdW1uczsgc3RpY2t5OiB0cnVlO1wiPjwvdHI+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsncm93LWhlYWRlciddLmNvbmNhdChhbGxEYXRhQ29sdW1ucylcIj48L3RyPlxuICA8L3RhYmxlPlxuPC9tYXQtY2FyZD5cbiJdfQ==
239
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbGl0eV9tYXRyaXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1tZXRhLXdpZGdldHMtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWFsaXR5LW1hdHJpeC9xdWFsaXR5X21hdHJpeC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi9jb21wb25lbnRzL3F1YWxpdHktbWF0cml4L3F1YWxpdHktbWF0cml4Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBVWpDLE1BQU0sT0FBTyxzQkFBc0I7SUFrQmpDLFlBQTZCLE9BQXVCLEVBQW1CLFdBQWlDO1FBQTNFLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQW1CLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtRQWpCeEcsb0JBQWUsR0FBMEIsRUFBRSxDQUFDO1FBQzVDLHFCQUFnQixHQUFrQixFQUFFLENBQUM7UUFDckMsdUJBQWtCLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLDRCQUF1QixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUzRSxjQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLHlCQUFvQixHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzdELHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFnQixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBbUIsQ0FBQyxDQUFDO1FBQ3RHLHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUF1QixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBbUIsQ0FBQyxDQUFDO1FBQzNHLFVBQUssR0FHVCxJQUFJLFNBQVMsQ0FBQztZQUNqQixLQUFLLEVBQUUsSUFBSSxXQUFXLEVBQUU7WUFDeEIsR0FBRyxFQUFFLElBQUksV0FBVyxFQUFFO1NBQ3ZCLENBQUMsQ0FBQztRQXNPZ0IsYUFBUSxHQUFHLFFBQVEsQ0FBQztRQW5PckMsK0VBQStFO1FBQy9FLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQix3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUU7WUFDbEcsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQiw4Q0FBOEM7SUFDaEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFjLEVBQUUsSUFBNkM7UUFDdkUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVPLGdDQUFnQyxDQUFDLFFBQXdCO1FBQy9ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25FLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ3JGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzFELElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssWUFBWSxDQUFDLEVBQUUsS0FBTSxFQUFFO29CQUNoRyxJQUFJLEVBQUUsS0FBSztpQkFDWixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxVQUFVLENBQUMsRUFBRSxLQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFDL0csd0RBQXdEO2dCQUN4RCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQVcsU0FBUyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7b0JBQzFGLFNBQVMsRUFBRSxLQUFLO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFXLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDL0csQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsT0FBTzthQUNULGtCQUFrQixFQUFFO2FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNyQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtvQkFDekYsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUMzQixNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUM5QixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWTthQUMvQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMxQixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLElBQUksQ0FBQyxvQkFBb0I7YUFDdEIsSUFBSSxDQUNILGtCQUFrQixFQUFFLEVBQ3BCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUMzQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNyRjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDckMsTUFBTSxJQUFJLEdBQWEsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDUixLQUFLLEVBQUUsTUFBTTtnQkFDYixNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQzthQUN2RyxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLElBQUksR0FBYSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1IsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBVyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUNyRyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDO1FBQzFCLEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFFLElBQUksYUFBYSxHQUFrQixFQUFFLENBQUM7WUFDdEMsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUM1QixhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLG9DQUFvQztRQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixRQUFRLENBQUM7WUFDUCxNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFO1NBQ2pDLENBQUM7YUFDQyxJQUFJLENBQ0gsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO1lBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMxRixDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjLEVBQUUsS0FBYTtRQUN4QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsOENBQThDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckgsQ0FBQztJQUVELCtFQUErRTtJQUMvRSxXQUFXLENBQUMsTUFBYyxFQUFFLEdBQXdCO1FBQ2xELE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFnQjtRQUM1QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQsUUFBUSxDQUFDLEdBQXFCLEVBQUUsTUFBMkI7UUFDekQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzNDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3RixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pGLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDdEIsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUs7Z0JBQ3JELENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQ3BFLENBQUM7WUFFRixNQUFNLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQzFGLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQXFCLEVBQUUsTUFBMkI7UUFDL0QsSUFBSSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFDN0IsMEVBQTBFO1FBRTFFLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QixrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RixvQkFBb0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRixDQUFDO1FBQ0QsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ3pELE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQzdELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxHQUFHLGlCQUFpQixDQUFDO1FBQ3hFLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFDbkYsTUFBTSxNQUFNLEdBQUc7WUFDYjtnQkFDRSxFQUFFLEVBQUUsQ0FBQztnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLEdBQUcsSUFBSSxPQUFPLFlBQVksR0FBRzthQUNyQztZQUNEO2dCQUNFLEVBQUUsRUFBRSxDQUFDO2dCQUNMLE9BQU8sRUFBRSxvQkFBb0I7Z0JBQzdCLEtBQUssRUFBRSxTQUFTO2dCQUNoQixLQUFLLEVBQUUsR0FBRyxvQkFBb0IsT0FBTyxpQkFBaUIsR0FBRzthQUMxRDtZQUNEO2dCQUNFLEVBQUUsRUFBRSxDQUFDO2dCQUNMLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQzNCLEtBQUssRUFBRSxTQUFTO2dCQUNoQixLQUFLLEVBQUUsR0FBRyxrQkFBa0IsT0FBTyxlQUFlLEdBQUc7YUFDdEQ7U0FDRixDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzsrR0FyUFUsc0JBQXNCO21HQUF0QixzQkFBc0IsNkRDbEJuQyw2K0lBZ0dBOzs0RkQ5RWEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaW5hbGl6ZSwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWV0YUFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi9tZXRhLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFF1YWxpdHlNYXRyaXgsIFF1YWxpdHlNYXRyaXhIZWFkZXIsIFF1YWxpdHlNYXRyaXhSb3cgfSBmcm9tICcuLi8uLi9qYXZhLWFwaSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3JtUmVjb3JkIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRWRpdG9yaWFsTGlua1NlcnZpY2UgfSBmcm9tICcuLi9lZGl0b3JpYWwtbGluay1zZXJ2aWNlL2VkaXRvcmlhbC1saW5rLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVRpbWUgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgeyBEb251dFNsaWNlIH0gZnJvbSAnLi4vZG9udXQtY2hhcnQvZG9udXQtY2hhcnQubW9kZWwnO1xuaW1wb3J0IHsgRmlsdGVyLCBGaWx0ZXJWYWx1ZSB9IGZyb20gJy4uLy4uL2phdmEtYXBpJztcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXF1YWxpdHktbWF0cml4LXYyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1YWxpdHktbWF0cml4Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9xdWFsaXR5X21hdHJpeC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFF1YWxpdHlNYXRyaXhDb21wb25lbnQge1xuICBmaWx0ZXJlZENvbHVtbnM6IFF1YWxpdHlNYXRyaXhIZWFkZXJbXSA9IFtdO1xuICBkYXRhdGFibGVDb2x1bW5zOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHNob3dIaXN0b3JpY2FsRGF0YSA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBmYWxzZSwgZGlzYWJsZWQ6IHRydWUgfSk7XG4gIG9ubHlTb3VyY2VzV2l0aE1hdGVyaWFsID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHRydWUsIGRpc2FibGVkOiB0cnVlIH0pO1xuICBjYXRlZ29yeUNvbnRyb2xzOiBGb3JtUmVjb3JkPEZvcm1Db250cm9sPHN0cmluZ1tdPj47XG4gIGlzTG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgcmVhZG9ubHkgY2F0ZWdvcnlGaWx0ZXJWYWx1ZXM6IE1hcDxzdHJpbmcsIEZpbHRlclZhbHVlW10+ID0gbmV3IE1hcCgpO1xuICByZWFkb25seSByZWNlbnRRdWFsaXR5TWF0cml4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVhbGl0eU1hdHJpeD4oeyBjb2x1bW5zOiBbXSwgcm93czogW10gfSBhcyBRdWFsaXR5TWF0cml4KTtcbiAgcmVhZG9ubHkgcGFzdFF1YWxpdHlNYXRyaXgkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxRdWFsaXR5TWF0cml4IHwgbnVsbD4oeyBjb2x1bW5zOiBbXSwgcm93czogW10gfSBhcyBRdWFsaXR5TWF0cml4KTtcbiAgcmVhZG9ubHkgcmFuZ2U6IEZvcm1Hcm91cDx7XG4gICAgc3RhcnQ6IEZvcm1Db250cm9sPERhdGVUaW1lPGJvb2xlYW4+PjtcbiAgICBlbmQ6IEZvcm1Db250cm9sPERhdGVUaW1lPGJvb2xlYW4+PjtcbiAgfT4gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICBzdGFydDogbmV3IEZvcm1Db250cm9sKCksXG4gICAgZW5kOiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBtZXRhQXBpOiBNZXRhQXBpU2VydmljZSwgcHJpdmF0ZSByZWFkb25seSBsaW5rU2VydmljZTogRWRpdG9yaWFsTGlua1NlcnZpY2UpIHtcbiAgICAvLyBhIEZvcm1SZWNvcmQgaGFzIHRvIGJlIGluaXRpYWxpemVkIHdpdGggb25lIHNvdXJjZSB0byBkZXRlcm1pbmUgaXRzIHR5cGUgOi0oXG4gICAgdGhpcy5jYXRlZ29yeUNvbnRyb2xzID0gbmV3IEZvcm1SZWNvcmQoeyBkdW1teTogbmV3IEZvcm1Db250cm9sKFtdLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pIH0pO1xuICAgIHRoaXMuY2F0ZWdvcnlDb250cm9scy5yZW1vdmVDb250cm9sKCdkdW1teScsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLnJlZ2lzdGVyQ2F0ZWdvcnlGaWx0ZXJzKCk7XG4gICAgdGhpcy5yZWdpc3RlckRhdGVSYW5nZUZpbHRlcigpO1xuICAgIC8vIFRPRE86IGNvbnNpZGVyIGEgcmVnaXN0ZXIoKSBmdW5jdGlvbnNcbiAgICB0aGlzLm9ubHlTb3VyY2VzV2l0aE1hdGVyaWFsLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKG9ubHlXaXRoTWF0ZXJpYWwpID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyVGFibGVCeVNvdXJjZXNXaXRoTWF0ZXJpYWwob25seVdpdGhNYXRlcmlhbCk7XG4gICAgfSk7XG4gICAgdGhpcy5vbkxvYWRlZERhdGFDaGFuZ2VzKCk7XG4gICAgLy90aGlzLmxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpO1xuICB9XG5cbiAgZmlsdGVySWRlbnQoX2luZGV4OiBudW1iZXIsIGl0ZW06IEtleVZhbHVlPHN0cmluZywgRm9ybUNvbnRyb2w8c3RyaW5nW10+Pikge1xuICAgIHJldHVybiBpdGVtLmtleTtcbiAgfVxuXG4gIGdldCBxdWFsaXR5TWF0cml4KCk6IFF1YWxpdHlNYXRyaXgge1xuICAgIHJldHVybiB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkLnZhbHVlO1xuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbHVtbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmRhdGF0YWJsZUNvbHVtbnMubWFwKChjKSA9PiBjICsgJ19zb3VyY2UnKTtcbiAgfVxuXG4gIGdldCBjdXJyZW50Q29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXRhYmxlQ29sdW1ucy5tYXAoKGMpID0+IGMgKyAnX2N1cnJlbnQnKTtcbiAgfVxuXG4gIGdldCBwYXN0Q29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YXRhYmxlQ29sdW1ucy5tYXAoKGMpID0+IGMgKyAnX3Bhc3QnKTtcbiAgfVxuXG4gIGdldCBhbGxEYXRhQ29sdW1ucygpOiBzdHJpbmdbXSB7XG4gICAgaWYgKHRoaXMuc2hvd0hpc3RvcmljYWxEYXRhLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXN0Q29sdW1ucy5mbGF0TWFwKChlLCBpKSA9PiBbZSwgdGhpcy5jdXJyZW50Q29sdW1uc1tpXV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Q29sdW1ucztcbiAgfVxuXG4gIHByaXZhdGUgZmlsdGVyVGFibGVCeVNvdXJjZXNXaXRoTWF0ZXJpYWwob25seVdpdGg6IGJvb2xlYW4gfCBudWxsKSB7XG4gICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMucmVjZW50UXVhbGl0eU1hdHJpeCQudmFsdWUuY29sdW1ucy5zbGljZSgpO1xuICAgIC8vIGF2b2lkIGZpbHRlcmluZyB3aGVuIG5vdCBuZWNlc3NhcnlcbiAgICB0aGlzLmZpbHRlcmVkQ29sdW1ucyA9IG9ubHlXaXRoID8gYWxsQ29sdW1ucy5maWx0ZXIoKGMpID0+IGMudG90YWwgPiAwKSA6IGFsbENvbHVtbnM7XG4gICAgdGhpcy5kYXRhdGFibGVDb2x1bW5zID0gdGhpcy5maWx0ZXJlZENvbHVtbnMubWFwKChjKSA9PiBjLmlkKTtcbiAgfVxuXG4gIHJlZ2lzdGVyRGF0ZVJhbmdlRmlsdGVyKCkge1xuICAgIHRoaXMucmFuZ2UudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpO1xuICAgIH0pO1xuICAgIHRoaXMubWV0YUFwaS5nZXRUaW1lcmFuZ2VGaWx0ZXIoKS5zdWJzY3JpYmUoKHJhbmdlRmlsdGVyKSA9PiB7XG4gICAgICBpZiAocmFuZ2VGaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gRGF0ZVRpbWUuZnJvbUlTTyhyYW5nZUZpbHRlci52YWx1ZXMuZmluZCgodikgPT4gdi5pZCA9PT0gJ3JhbmdlU3RhcnQnKT8ubGFiZWwhLCB7XG4gICAgICAgICAgem9uZTogJ3V0YycsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmREYXRlID0gRGF0ZVRpbWUuZnJvbUlTTyhyYW5nZUZpbHRlci52YWx1ZXMuZmluZCgodikgPT4gdi5pZCA9PT0gJ3JhbmdlRW5kJyk/LmxhYmVsISwgeyB6b25lOiAndXRjJyB9KTtcbiAgICAgICAgLy90b2dnbGUgdGhlIGVtaXRFdmVudCB0byBpbml0aWFsbHkgbG9hZCB0aGUgZGF0YSBvciBub3RcbiAgICAgICAgdGhpcy5yYW5nZS5zZXRDb250cm9sKCdzdGFydCcsIG5ldyBGb3JtQ29udHJvbDxEYXRlVGltZT4oc3RhcnREYXRlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7XG4gICAgICAgICAgZW1pdEV2ZW50OiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmFuZ2Uuc2V0Q29udHJvbCgnZW5kJywgbmV3IEZvcm1Db250cm9sPERhdGVUaW1lPihlbmREYXRlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJDYXRlZ29yeUZpbHRlcnMoKSB7XG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0Q2F0ZWdvcnlGaWx0ZXJzKClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKChmaWx0ZXJzKSA9PiB7XG4gICAgICAgIGZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYXRlZ29yeUNvbnRyb2xzLmFkZENvbnRyb2woZmlsdGVyLmZpZWxkLCBuZXcgRm9ybUNvbnRyb2woW10sIHsgbm9uTnVsbGFibGU6IHRydWUgfSksIHtcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jYXRlZ29yeUZpbHRlclZhbHVlcy5zZXQoXG4gICAgICAgICAgICBmaWx0ZXIuZmllbGQsXG4gICAgICAgICAgICBmaWx0ZXIudmFsdWVzLnRvU29ydGVkKChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgdGhpcy5jYXRlZ29yeUNvbnRyb2xzLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubG9hZERhdGFXaXRoQ3VycmVudGx5U2VsZWN0ZWRGaWx0ZXJzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkxvYWRlZERhdGFDaGFuZ2VzKCkge1xuICAgIHRoaXMucmVjZW50UXVhbGl0eU1hdHJpeCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgZmlsdGVyKChxbSkgPT4gcW0gIT09IG51bGwpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5maWx0ZXJUYWJsZUJ5U291cmNlc1dpdGhNYXRlcmlhbCh0aGlzLm9ubHlTb3VyY2VzV2l0aE1hdGVyaWFsLnZhbHVlKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGFGb3JTdGFydCgpOiBPYnNlcnZhYmxlPFF1YWxpdHlNYXRyaXggfCBudWxsPiB7XG4gICAgaWYgKHRoaXMucmFuZ2UuY29udHJvbHMuc3RhcnQ/LnZhbHVlKSB7XG4gICAgICBjb25zdCBib2R5OiBGaWx0ZXJbXSA9IHRoaXMuZ2V0Q3VycmVudEZpbHRlclZhbHVlcygpO1xuICAgICAgYm9keS5wdXNoKHtcbiAgICAgICAgZmllbGQ6ICdhc09mJyxcbiAgICAgICAgdmFsdWVzOiBbeyBpZDogdGhpcy5yYW5nZS5jb250cm9scy5zdGFydC52YWx1ZS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIGFzIHN0cmluZywgbGFiZWw6ICcnIH1dLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhQXBpLmdldFF1YWxpdHlNYXRyaXhXaXRoRmlsdGVyc1YyKGJvZHkpLnBpcGUodGFrZSgxKSk7XG4gICAgfVxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGFGb3JFbmQoKTogT2JzZXJ2YWJsZTxRdWFsaXR5TWF0cml4PiB7XG4gICAgY29uc3QgYm9keTogRmlsdGVyW10gPSB0aGlzLmdldEN1cnJlbnRGaWx0ZXJWYWx1ZXMoKTtcbiAgICBib2R5LnB1c2goe1xuICAgICAgZmllbGQ6ICdhc09mJyxcbiAgICAgIHZhbHVlczogW3sgaWQ6IHRoaXMucmFuZ2UuY29udHJvbHMuZW5kLnZhbHVlLnRvSVNPKHsgaW5jbHVkZU9mZnNldDogZmFsc2UgfSkgYXMgc3RyaW5nLCBsYWJlbDogJycgfV0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMubWV0YUFwaS5nZXRRdWFsaXR5TWF0cml4V2l0aEZpbHRlcnNWMihib2R5KS5waXBlKHRha2UoMSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50RmlsdGVyVmFsdWVzKCk6IEZpbHRlcltdIHtcbiAgICBjb25zdCBib2R5OiBGaWx0ZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2ZpZWxkLCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY2F0ZWdvcnlDb250cm9scy52YWx1ZSkpIHtcbiAgICAgIGxldCByZXF1ZXN0VmFsdWVzOiBGaWx0ZXJWYWx1ZVtdID0gW107XG4gICAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgcmVxdWVzdFZhbHVlcyA9IHZhbHVlcy5tYXAoKHZhbHVlKSA9PiAoeyBpZDogdmFsdWUsIGxhYmVsOiAnJyB9KSk7XG4gICAgICAgIGJvZHkucHVzaCh7IGZpZWxkLCB2YWx1ZXM6IHJlcXVlc3RWYWx1ZXMgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkRGF0YVdpdGhDdXJyZW50bHlTZWxlY3RlZEZpbHRlcnMoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIGZvcmtKb2luKHtcbiAgICAgIHBhc3RRbTogdGhpcy5sb2FkRGF0YUZvclN0YXJ0KCksXG4gICAgICBjdXJyZW50UW06IHRoaXMubG9hZERhdGFGb3JFbmQoKSxcbiAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh7IHBhc3RRbTogXywgY3VycmVudFFtIH0pID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGF0YWJsZUNvbHVtbnMgPSBjdXJyZW50UW0uY29sdW1ucy5maWx0ZXIoKGMpID0+IGMubGV2ZWwgIT09IDApLm1hcCgoYykgPT4gYy5pZCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IHBhc3RRbSwgY3VycmVudFFtIH0pID0+IHtcbiAgICAgICAgdGhpcy5yZWNlbnRRdWFsaXR5TWF0cml4JC5uZXh0KGN1cnJlbnRRbSk7XG4gICAgICAgIHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLm5leHQocGFzdFFtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgb3BlbkVkaXRMaW5rKHNvdXJjZTogc3RyaW5nLCBpc3N1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMubGlua1NlcnZpY2Uub3BlbkJ5UmVwbGljYXRpb25zb3VyY2VBbmRJc3N1ZVR5cGVXaXRoRmlsdGVycyhzb3VyY2UsIGlzc3VlLCB0aGlzLmNhdGVnb3J5Q29udHJvbHMudmFsdWUpO1xuICB9XG5cbiAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzgzNjEjaXNzdWVjb21tZW50LTM0NTgwNDk1NFxuICBjb2x1bW5JZGVudChfaW5kZXg6IG51bWJlciwgY29sOiBRdWFsaXR5TWF0cml4SGVhZGVyKSB7XG4gICAgcmV0dXJuIGNvbC5pZDtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy9vciBzaG91bGQgd2UgcmVzZXQgYWxsIEZpbHRlcj9cbiAgICB0aGlzLmxvYWREYXRhV2l0aEN1cnJlbnRseVNlbGVjdGVkRmlsdGVycygpO1xuICB9XG5cbiAgZ2V0UGFzdENvbHVtbihjb2x1bW5JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLnZhbHVlPy5jb2x1bW5zLmZpbmQoKGMpID0+IGMuaWQgPT09IGNvbHVtbklkKTtcbiAgfVxuXG4gIGdldFRyZW5kKHJvdzogUXVhbGl0eU1hdHJpeFJvdywgY29sdW1uOiBRdWFsaXR5TWF0cml4SGVhZGVyKTogeyBkZWx0YT86IG51bWJlcjsgdHJlbmQ/OiBzdHJpbmcgfSB7XG4gICAgaWYgKHRoaXMucGFzdFF1YWxpdHlNYXRyaXgkLnZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmICh0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZS5jb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhc3Rfcm93ID0gdGhpcy5wYXN0UXVhbGl0eU1hdHJpeCQ/LnZhbHVlLnJvd3MuZmluZCgocHIpID0+IHByLm1ldGEuaWQgPT0gcm93Lm1ldGEuaWQpO1xuICAgICAgY29uc3QgcGFzdF9jb2x1bW4gPSB0aGlzLnBhc3RRdWFsaXR5TWF0cml4JC52YWx1ZS5jb2x1bW5zLmZpbmQoKGMpID0+IGMuaWQgPT0gY29sdW1uLmlkKTtcbiAgICAgIGlmICghcGFzdF9yb3cgfHwgIXBhc3RfY29sdW1uKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVsdGEgPSBNYXRoLmZsb29yKFxuICAgICAgICAoMTAwICogcm93LmNvdW50c1tjb2x1bW4uaWRdLnN1ZmZpY2llbnQpIC8gY29sdW1uLnRvdGFsIC1cbiAgICAgICAgICAoMTAwICogcGFzdF9yb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudCkgLyBwYXN0X2NvbHVtbi50b3RhbFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHJlbmQgPSBkZWx0YSA9PT0gMCA/ICd0cmVuZGluZ19mbGF0JyA6IGRlbHRhIDwgMCA/ICd0cmVuZGluZ19kb3duJyA6ICd0cmVuZGluZ191cCc7XG4gICAgICByZXR1cm4geyBkZWx0YSwgdHJlbmQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldERvbnV0U2xpY2VzKHJvdzogUXVhbGl0eU1hdHJpeFJvdywgY29sdW1uOiBRdWFsaXR5TWF0cml4SGVhZGVyKTogRG9udXRTbGljZVtdIHtcbiAgICBsZXQgc3VmZmljaWVudGZpbGxSYXRlID0gMDtcbiAgICBsZXQgaW5zdWZmaWNpZW50ZmlsbFJhdGUgPSAwO1xuICAgIC8vRGVyIFdlcnQgYmVyZWNobmV0IHNpY2ggYXVzIGRlbSB0b3RhbF9jb3VudCAtIHdpdGhvdXRfZGVzY3JpcHRpb25fY291bnQuXG5cbiAgICBpZiAoY29sdW1uLnRvdGFsICE9PSAwKSB7XG4gICAgICBzdWZmaWNpZW50ZmlsbFJhdGUgPSBNYXRoLnJvdW5kKCgxMDAgKiByb3cuY291bnRzW2NvbHVtbi5pZF0uc3VmZmljaWVudCkgLyBjb2x1bW4udG90YWwpO1xuICAgICAgaW5zdWZmaWNpZW50ZmlsbFJhdGUgPSBNYXRoLnJvdW5kKCgxMDAgKiByb3cuY291bnRzW2NvbHVtbi5pZF0uaW5zdWZmaWNpZW50KSAvIGNvbHVtbi50b3RhbCk7XG4gICAgfVxuICAgIGNvbnN0IHN1ZmZpY2llbnRUb3RhbCA9IHJvdy5jb3VudHNbY29sdW1uLmlkXS5zdWZmaWNpZW50O1xuICAgIGNvbnN0IGluc3VmZmljaWVudFRvdGFsID0gcm93LmNvdW50c1tjb2x1bW4uaWRdLmluc3VmZmljaWVudDtcbiAgICBjb25zdCBtaXNzaW5nVG90YWwgPSBjb2x1bW4udG90YWwgLSBzdWZmaWNpZW50VG90YWwgLSBpbnN1ZmZpY2llbnRUb3RhbDtcbiAgICBjb25zdCByZXN0ID0gMTAwIC0gKHN1ZmZpY2llbnRmaWxsUmF0ZSArIGluc3VmZmljaWVudGZpbGxSYXRlKTsgLy8gYS5rLmEuIFwibWlzc2luZ1wiXG4gICAgY29uc3Qgc2xpY2VzID0gW1xuICAgICAge1xuICAgICAgICBpZDogMyxcbiAgICAgICAgcGVyY2VudDogcmVzdCxcbiAgICAgICAgY29sb3I6ICcjRDhFREZDJyxcbiAgICAgICAgbGFiZWw6IGAke3Jlc3R9ICUgKCR7bWlzc2luZ1RvdGFsfSlgLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6IDEsXG4gICAgICAgIHBlcmNlbnQ6IGluc3VmZmljaWVudGZpbGxSYXRlLFxuICAgICAgICBjb2xvcjogJyNDMjA4MDgnLFxuICAgICAgICBsYWJlbDogYCR7aW5zdWZmaWNpZW50ZmlsbFJhdGV9ICUgKCR7aW5zdWZmaWNpZW50VG90YWx9KWAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpZDogMixcbiAgICAgICAgcGVyY2VudDogc3VmZmljaWVudGZpbGxSYXRlLFxuICAgICAgICBjb2xvcjogJyM0QUJFRkYnLFxuICAgICAgICBsYWJlbDogYCR7c3VmZmljaWVudGZpbGxSYXRlfSAlICgke3N1ZmZpY2llbnRUb3RhbH0pYCxcbiAgICAgIH0sXG4gICAgXTtcbiAgICByZXR1cm4gc2xpY2VzO1xuICB9XG4gIHByb3RlY3RlZCByZWFkb25seSBEYXRlVGltZSA9IERhdGVUaW1lO1xufVxuIiwiPG1hdC1jYXJkIGFwcGVhcmFuY2U9XCJyYWlzZWRcIj5cbiAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICA8bWF0LWNhcmQtdGl0bGU+XG4gICAgICBRdWFsaXTDpHRzbWV0cmlrOiBNZXRhZGF0ZW52b2xsc3TDpG5kaWdrZWl0IHZvbiBRdWVsbGVue3tpc0xvYWRpbmcoKSA/IFwiOiBMYWRlIG5ldWUgRGF0ZW4uXCIgOiBcIlwifX08L21hdC1jYXJkLXRpdGxlXG4gICAgPlxuICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICA8bGliLXFtLWZpbHRlclxuICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGNhdGVnb3J5Q29udHJvbHMuY29udHJvbHMgfCBrZXl2YWx1ZTsgdHJhY2tCeTogZmlsdGVySWRlbnRcIlxuICAgICAgICBbb3B0aW9uc109XCJjYXRlZ29yeUZpbHRlclZhbHVlcy5nZXQoZmlsdGVyLmtleSlcIlxuICAgICAgICBbaW5wdXRGb3JtQ29udHJvbF09XCJmaWx0ZXIudmFsdWVcIlxuICAgICAgICBbbGFiZWxdID0gXCInZmlsdGVyLicgKyBmaWx0ZXIua2V5IHwgdHJhbnNsYXRlXCI+PC9saWItcW0tZmlsdGVyPlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gIDxtYXQtY2FyZC1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgW2Rpc2FibGVkXT1cImlzTG9hZGluZygpXCIgbGFiZWxQb3NpdGlvbj1cImJlZm9yZVwiIFtmb3JtQ29udHJvbF09XCJvbmx5U291cmNlc1dpdGhNYXRlcmlhbFwiIGlkPVwib25seVNvdXJjZXNXaXRoTWF0ZXJpYWxcIiA+XG4gICAgICBzaG93IG9ubHkgc291cmNlcyB3aXRoIG1hdGVyaWFsXG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiIGxhYmVsUG9zaXRpb249XCJiZWZvcmVcIiBbZm9ybUNvbnRyb2xdPVwic2hvd0hpc3RvcmljYWxEYXRhXCIgaWQ9XCJzaG93SGlzdG9yaWNhbERhdGFcIiA+XG4gICAgICBzaG93IGhpc3RvcmljYWwgZGF0YVxuICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8YnV0dG9uXG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCJcbiAgICAgIChjbGljayk9XCJyZWZyZXNoKClcIlxuICAgICAgbWF0VG9vbHRpcD1cIkFrdHVhbGlzaWVyZSBkZW4gSVNULVN0YW5kXCJcbiAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5yZWZyZXNoPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtY2FyZC1hY3Rpb25zPlxuPC9tYXQtY2FyZD5cbjxsaWItZGF0ZXBpY2tlciAqbmdJZj1cInNob3dIaXN0b3JpY2FsRGF0YS52YWx1ZVwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcoKVwiIFtpbnB1dEdyb3VwXT1cInJhbmdlXCIgPjwvbGliLWRhdGVwaWNrZXI+XG5cblxuPG1hdC1jYXJkPlxuICA8dGFibGUgW25nQ2xhc3NdPVwieyd3aGlsZS1sb2FkaW5nJzogaXNMb2FkaW5nKCl9XCIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cInJlY2VudFF1YWxpdHlNYXRyaXgkLnZhbHVlLnJvd3NcIiBjbGFzcz1cInF1YWxpdHktbWF0cml4XCI+XG4gICAgPCEtLSBEZWZpbmUgY29sdW1ucyBvZiB0YWJsZSAtLT5cbiAgICA8IS0tIFJvdyBIZWFkZXIgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicm93LWhlYWRlclwiIHN0aWNreT5cbiAgICAgIDx0aCByb3dzcGFuPVwiMlwiIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5Jc3N1ZSBUeXBlPC90aD5cbiAgICAgIDx0ZFxuICAgICAgICBtYXQtY2VsbFxuICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICBtYXRUb29sdGlwPVwie3tyb3cubWV0YS5hbHRfbGFiZWx9fVwiXG4gICAgICAgIGNsYXNzPVwicm93LWhlYWRlciB7eydtYXQtY2VsbC1sZXZlbC0nICsgKHJvdy5tZXRhLmxldmVsKzEpfX1cIlxuICAgICAgPlxuICAgICAgICB7e1wicXVhbGl0eV9tYXRyaXguXCIgKyByb3cubWV0YS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIG9uZSBjb2x1bW4gZm9yIHRoZSBzb3VyY2UgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIGZpbHRlcmVkQ29sdW1uczsgdHJhY2tCeTpjb2x1bW5JZGVudFwiIFttYXRDb2x1bW5EZWZdPVwiY29sLmlkICsgJ19zb3VyY2UnXCI+XG4gICAgICA8dGggW2F0dHIuY29sc3Bhbl09XCJzaG93SGlzdG9yaWNhbERhdGEudmFsdWU/MjoxXCIgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdFRvb2x0aXA9XCJ7e2NvbC5hbHRMYWJlbH19XCIgPnt7Y29sLmxhYmVsfX08L3RoPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwhLS0gL3NvdXJjZSAtLT5cbiAgICA8IS0tIGN1cnJlbnQgRGF0YSBDb2x1bW5zIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBmaWx0ZXJlZENvbHVtbnM7IHRyYWNrQnk6Y29sdW1uSWRlbnRcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5pZCArICdfY3VycmVudCdcIj5cbiAgICAgIDx0aCBjbGFzcz1cInJlY2VudC1kYXRhLWNlbGxcIiBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0VG9vbHRpcD1cInt7Y29sdW1uLmFsdExhYmVsfX1cIiA+e3sgcmFuZ2UuY29udHJvbHMuZW5kLnZhbHVlPy50b0xvY2FsZVN0cmluZyhEYXRlVGltZS5EQVRFX1NIT1JUKSB9fSA8YnI+KHt7Y29sdW1uLnRvdGFsfX0pPC90aD5cbiAgICAgIDx0ZCBjbGFzcz1cInJlY2VudC1kYXRhLWNlbGxcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICA8YSAqbmdJZj1cImNvbHVtbi50b3RhbCA+IDAgZWxzZSBlbXB0eURpdlwiIGNsYXNzPVwiY2hhcnQtY29udGFpbmVyXCIgKGNsaWNrKT1cIm9wZW5FZGl0TGluayggY29sdW1uLmxhYmVsLCAgcm93Lm1ldGEubGFiZWwpXCI+XG4gICAgICAgICAgICA8ZGl2ID5cbiAgICAgICAgICAgICAgPGFwcC1kb251dC1jaGFydCBbZGF0YV09XCJnZXREb251dFNsaWNlcyhyb3csIGNvbHVtbilcIiBbYm9yZGVyU2l6ZV09XCIyNVwiPjwvYXBwLWRvbnV0LWNoYXJ0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlEaXY+XG4gICAgICAgICAgICA8ZGl2Pi08L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8IS0tIC9jdXJyZW50IERhdGEgQ29sdW1ucyAtLT5cbiAgICA8IS0tIHBhc3QgRGF0YSBDb2x1bW5zIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93SGlzdG9yaWNhbERhdGEudmFsdWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBmaWx0ZXJlZENvbHVtbnM7IHRyYWNrQnk6Y29sdW1uSWRlbnRcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5pZCArICdfcGFzdCdcIj5cbiAgICAgICAgPHRoIGNsYXNzPVwiaGlzdG9yaWMtZGF0YS1jZWxsXCIgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAqbWF0SGVhZGVyQ2VsbERlZj57eyByYW5nZS5jb250cm9scy5zdGFydC52YWx1ZT8udG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9TSE9SVCkgfX1cbiAgICAgICAgICA8YnI+e3sgZ2V0UGFzdENvbHVtbihjb2x1bW4uaWQpPy50b3RhbCB9fVxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgY2xhc3M9XCJoaXN0b3JpYy1kYXRhLWNlbGxcIiBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0VHJlbmQocm93LCBjb2x1bW4pIGFzIHRyZW5kXCI+XG4gICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ0cmVuZC50cmVuZFwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gYXJpYS1oaWRkZW49XCJmYWxzZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidHJlbmQudHJlbmRcIiBbZm9udEljb25dPVwidHJlbmQudHJlbmQhXCIgLz5cbiAgICAgICAgICAgICAge3sgdHJlbmQuZGVsdGEgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCEtLSAvcGFzdCBEYXRhIENvbHVtbnMgLS0+XG5cbiAgICAgIDwhLS0gR2VuZXJhdGUgYWN0dWFsIHRhYmxlIC0tPlxuICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiWydyb3ctaGVhZGVyJ10uY29uY2F0KCBzb3VyY2VDb2x1bW5zKTsgc3RpY2t5OiB0cnVlO1wiPjwvdHI+XG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJhbGxEYXRhQ29sdW1uczsgc3RpY2t5OiB0cnVlO1wiPjwvdHI+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsncm93LWhlYWRlciddLmNvbmNhdChhbGxEYXRhQ29sdW1ucylcIj48L3RyPlxuICA8L3RhYmxlPlxuPC9tYXQtY2FyZD5cbiJdfQ==
@@ -79,10 +79,10 @@ export class TreeCollectionDetailsComponent {
79
79
  return this.linkService.openByCollectionAndIssueType(collectionId, issueType, title);
80
80
  }
81
81
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeCollectionDetailsComponent, deps: [{ token: i1.MetaApiService }, { token: i2.TranslateService }, { token: i3.EditorialLinkService }], target: i0.ɵɵFactoryTarget.Component }); }
82
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TreeCollectionDetailsComponent, selector: "app-tree-collection-details", ngImport: i0, template: "<mat-card>\n <mat-card-header>\n <mat-card-title>\n Qualit\u00E4tsmetrik: Metadatenvollst\u00E4ndigkeit von Sammlungen{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <!-- consider to put the filter in the table header to avoid that it is scrolled out of view-->\n <lib-qm-filter\n aria-disabled=\"true\"\n [label]=\"'Sammlung'\"\n [options]=\"collections$ | async\"\n [multiple]=\"false\"\n [inputFormControl]=\"selectedCollection\"\n >\n </lib-qm-filter>\n\n </mat-card-content>\n</mat-card>\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th mat-header-cell *matHeaderCellDef>Sammlung</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n <a (click)=\"openCollection(row.meta.id)\">\n <mat-icon [svgIcon]=\"row.meta.level === 1 ? 'tree' : 'child'\"></mat-icon>\n {{row.meta.label}}\n </a>\n </td>\n </ng-container>\n\n <!-- Data Columns -->\n <ng-container *ngFor=\"let column of dataColumns\" [matColumnDef]=\"column.id\">\n <th mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\" >{{ \"quality_matrix.\" + column.label | translate }}</th>\n <td mat-cell *matCellDef=\"let row\" matTooltip=\"{{'cell tooltip' //getCellTooltip(row, column.id)}}\">\n @if ( column.id === 'collection_issues' ) {\n {{ translateCollectionIssues(row.counts[column.id]) | async }}\n } @else {\n <a *ngIf=\"row.counts[column.id]\" (click)=\"showMaterialWithIssue(row.meta.id, row.meta.label, column.id)\">\n {{ row.counts[column.id] }}\n </a>\n }\n\n </td>\n </ng-container>\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat(columnIds); sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(columnIds)\"></tr>\n </table>\n</mat-card>\n", styles: ["tr:nth-child(2n){background-color:#e4e4e4}tr:nth-child(2n)>.mat-column-row-header,tr:nth-child(2n) .mat-mdc-cell{border-right-color:#fff}.mat-mdc-cell,.mat-mdc-header-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-mdc-cell mat-icon,.mat-mdc-header-cell mat-icon,.mat-column-row-header mat-icon{color:var(--mat-table-row-item-label-text-color);height:16px;padding-right:5px;font-size:16px}.mat-mdc-header-cell,.mat-mdc-cell{padding-left:5px;text-align:center}.mat-mdc-header-cell a,.mat-mdc-cell a{cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a:hover,.mat-mdc-cell a:hover{text-decoration:underline}.row-header a{text-decoration:none;align-items:center;display:flex}.mat-column-totals_collection.noMaterial{background-color:#fad6da}.mat-column-totals_collection.fewMaterials{background-color:#fff1d6}.mat-cell-level-1{padding-left:20px!important;text-align:left}.mat-cell-level-2{padding-left:40px!important;text-align:left}.mat-cell-level-3{padding-left:60px!important;text-align:left}.mat-cell-level-4{padding-left:80px!important;text-align:left}.mat-cell-level-5{padding-left:100px!important;text-align:left}.mat-cell-level-6{padding-left:120px!important;text-align:left}.mat-cell-level-7{padding-left:140px!important;text-align:left}.mat-cell-level-8{padding-left:160px!important;text-align:left}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i5.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i9.QualityMatrixFilterComponent, selector: "lib-qm-filter", inputs: ["options", "inputFormControl", "label", "multiple"], outputs: ["changedFilters"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
82
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: TreeCollectionDetailsComponent, selector: "app-tree-collection-details", ngImport: i0, template: "<mat-card>\n <mat-card-header>\n <mat-card-title>\n Qualit\u00E4tsmetrik: Metadatenvollst\u00E4ndigkeit von Sammlungen{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <!-- consider to put the filter in the table header to avoid that it is scrolled out of view-->\n <lib-qm-filter\n aria-disabled=\"true\"\n [label]=\"'Sammlung'\"\n [options]=\"collections$ | async\"\n [multiple]=\"false\"\n [inputFormControl]=\"selectedCollection\"\n >\n </lib-qm-filter>\n\n </mat-card-content>\n</mat-card>\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th mat-header-cell *matHeaderCellDef>Sammlung</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n <a (click)=\"openCollection(row.meta.id)\">\n <mat-icon [svgIcon]=\"row.meta.level === 1 ? 'tree' : 'child'\"></mat-icon>\n {{row.meta.label}}\n </a>\n </td>\n </ng-container>\n\n <!-- Data Columns -->\n <ng-container *ngFor=\"let column of dataColumns\" [matColumnDef]=\"column.id\">\n <th mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\" >{{ \"quality_matrix.\" + column.label | translate }}</th>\n <td mat-cell *matCellDef=\"let row\" matTooltip=\"{{'cell tooltip' //getCellTooltip(row, column.id)}}\">\n <ng-container *ngIf=\" column.id === 'collection_issues' else countsWithLinks\">\n {{ translateCollectionIssues(row.counts[column.id]) | async }}\n </ng-container>\n <ng-template #countsWithLinks>\n <a *ngIf=\"row.counts[column.id]\" (click)=\"showMaterialWithIssue(row.meta.id, row.meta.label, column.id)\">\n {{ row.counts[column.id] }}\n </a>\n </ng-template>\n\n\n </td>\n </ng-container>\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat(columnIds); sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(columnIds)\"></tr>\n </table>\n</mat-card>\n", styles: ["tr:nth-child(2n){background-color:#e4e4e4}tr:nth-child(2n)>.mat-column-row-header,tr:nth-child(2n) .mat-mdc-cell{border-right-color:#fff}.mat-mdc-cell,.mat-mdc-header-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-mdc-cell mat-icon,.mat-mdc-header-cell mat-icon,.mat-column-row-header mat-icon{color:var(--mat-table-row-item-label-text-color);height:16px;padding-right:5px;font-size:16px}.mat-mdc-header-cell,.mat-mdc-cell{padding-left:5px;text-align:center}.mat-mdc-header-cell a,.mat-mdc-cell a{cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a:hover,.mat-mdc-cell a:hover{text-decoration:underline}.row-header a{text-decoration:none;align-items:center;display:flex}.mat-column-totals_collection.noMaterial{background-color:#fad6da}.mat-column-totals_collection.fewMaterials{background-color:#fff1d6}.mat-cell-level-1{padding-left:20px!important;text-align:left}.mat-cell-level-2{padding-left:40px!important;text-align:left}.mat-cell-level-3{padding-left:60px!important;text-align:left}.mat-cell-level-4{padding-left:80px!important;text-align:left}.mat-cell-level-5{padding-left:100px!important;text-align:left}.mat-cell-level-6{padding-left:120px!important;text-align:left}.mat-cell-level-7{padding-left:140px!important;text-align:left}.mat-cell-level-8{padding-left:160px!important;text-align:left}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i5.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i5.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i9.QualityMatrixFilterComponent, selector: "lib-qm-filter", inputs: ["options", "inputFormControl", "label", "multiple"], outputs: ["changedFilters"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
83
83
  }
84
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TreeCollectionDetailsComponent, decorators: [{
85
85
  type: Component,
86
- args: [{ selector: 'app-tree-collection-details', template: "<mat-card>\n <mat-card-header>\n <mat-card-title>\n Qualit\u00E4tsmetrik: Metadatenvollst\u00E4ndigkeit von Sammlungen{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <!-- consider to put the filter in the table header to avoid that it is scrolled out of view-->\n <lib-qm-filter\n aria-disabled=\"true\"\n [label]=\"'Sammlung'\"\n [options]=\"collections$ | async\"\n [multiple]=\"false\"\n [inputFormControl]=\"selectedCollection\"\n >\n </lib-qm-filter>\n\n </mat-card-content>\n</mat-card>\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th mat-header-cell *matHeaderCellDef>Sammlung</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n <a (click)=\"openCollection(row.meta.id)\">\n <mat-icon [svgIcon]=\"row.meta.level === 1 ? 'tree' : 'child'\"></mat-icon>\n {{row.meta.label}}\n </a>\n </td>\n </ng-container>\n\n <!-- Data Columns -->\n <ng-container *ngFor=\"let column of dataColumns\" [matColumnDef]=\"column.id\">\n <th mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\" >{{ \"quality_matrix.\" + column.label | translate }}</th>\n <td mat-cell *matCellDef=\"let row\" matTooltip=\"{{'cell tooltip' //getCellTooltip(row, column.id)}}\">\n @if ( column.id === 'collection_issues' ) {\n {{ translateCollectionIssues(row.counts[column.id]) | async }}\n } @else {\n <a *ngIf=\"row.counts[column.id]\" (click)=\"showMaterialWithIssue(row.meta.id, row.meta.label, column.id)\">\n {{ row.counts[column.id] }}\n </a>\n }\n\n </td>\n </ng-container>\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat(columnIds); sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(columnIds)\"></tr>\n </table>\n</mat-card>\n", styles: ["tr:nth-child(2n){background-color:#e4e4e4}tr:nth-child(2n)>.mat-column-row-header,tr:nth-child(2n) .mat-mdc-cell{border-right-color:#fff}.mat-mdc-cell,.mat-mdc-header-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-mdc-cell mat-icon,.mat-mdc-header-cell mat-icon,.mat-column-row-header mat-icon{color:var(--mat-table-row-item-label-text-color);height:16px;padding-right:5px;font-size:16px}.mat-mdc-header-cell,.mat-mdc-cell{padding-left:5px;text-align:center}.mat-mdc-header-cell a,.mat-mdc-cell a{cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a:hover,.mat-mdc-cell a:hover{text-decoration:underline}.row-header a{text-decoration:none;align-items:center;display:flex}.mat-column-totals_collection.noMaterial{background-color:#fad6da}.mat-column-totals_collection.fewMaterials{background-color:#fff1d6}.mat-cell-level-1{padding-left:20px!important;text-align:left}.mat-cell-level-2{padding-left:40px!important;text-align:left}.mat-cell-level-3{padding-left:60px!important;text-align:left}.mat-cell-level-4{padding-left:80px!important;text-align:left}.mat-cell-level-5{padding-left:100px!important;text-align:left}.mat-cell-level-6{padding-left:120px!important;text-align:left}.mat-cell-level-7{padding-left:140px!important;text-align:left}.mat-cell-level-8{padding-left:160px!important;text-align:left}\n"] }]
86
+ args: [{ selector: 'app-tree-collection-details', template: "<mat-card>\n <mat-card-header>\n <mat-card-title>\n Qualit\u00E4tsmetrik: Metadatenvollst\u00E4ndigkeit von Sammlungen{{isLoading() ? \": Lade neue Daten.\" : \"\"}}</mat-card-title\n >\n </mat-card-header>\n <mat-card-content>\n <!-- consider to put the filter in the table header to avoid that it is scrolled out of view-->\n <lib-qm-filter\n aria-disabled=\"true\"\n [label]=\"'Sammlung'\"\n [options]=\"collections$ | async\"\n [multiple]=\"false\"\n [inputFormControl]=\"selectedCollection\"\n >\n </lib-qm-filter>\n\n </mat-card-content>\n</mat-card>\n<mat-card>\n <table [ngClass]=\"{'while-loading': isLoading()}\" mat-table [dataSource]=\"recentQualityMatrix$.value.rows\">\n <!-- Define columns of table -->\n <!-- Row Header Column -->\n <ng-container matColumnDef=\"row-header\" sticky>\n <th mat-header-cell *matHeaderCellDef>Sammlung</th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n matTooltip=\"{{row.meta.alt_label}}\"\n class=\"row-header {{'mat-cell-level-' + (row.meta.level+1)}}\"\n >\n <a (click)=\"openCollection(row.meta.id)\">\n <mat-icon [svgIcon]=\"row.meta.level === 1 ? 'tree' : 'child'\"></mat-icon>\n {{row.meta.label}}\n </a>\n </td>\n </ng-container>\n\n <!-- Data Columns -->\n <ng-container *ngFor=\"let column of dataColumns\" [matColumnDef]=\"column.id\">\n <th mat-header-cell *matHeaderCellDef matTooltip=\"{{column.altLabel}}\" >{{ \"quality_matrix.\" + column.label | translate }}</th>\n <td mat-cell *matCellDef=\"let row\" matTooltip=\"{{'cell tooltip' //getCellTooltip(row, column.id)}}\">\n <ng-container *ngIf=\" column.id === 'collection_issues' else countsWithLinks\">\n {{ translateCollectionIssues(row.counts[column.id]) | async }}\n </ng-container>\n <ng-template #countsWithLinks>\n <a *ngIf=\"row.counts[column.id]\" (click)=\"showMaterialWithIssue(row.meta.id, row.meta.label, column.id)\">\n {{ row.counts[column.id] }}\n </a>\n </ng-template>\n\n\n </td>\n </ng-container>\n\n <!-- Generate actual table -->\n <tr mat-header-row *matHeaderRowDef=\"['row-header'].concat(columnIds); sticky:true\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: ['row-header'].concat(columnIds)\"></tr>\n </table>\n</mat-card>\n", styles: ["tr:nth-child(2n){background-color:#e4e4e4}tr:nth-child(2n)>.mat-column-row-header,tr:nth-child(2n) .mat-mdc-cell{border-right-color:#fff}.mat-mdc-cell,.mat-mdc-header-cell,.mat-column-row-header{border-right:1px solid #e4e4e4}.mat-mdc-cell mat-icon,.mat-mdc-header-cell mat-icon,.mat-column-row-header mat-icon{color:var(--mat-table-row-item-label-text-color);height:16px;padding-right:5px;font-size:16px}.mat-mdc-header-cell,.mat-mdc-cell{padding-left:5px;text-align:center}.mat-mdc-header-cell a,.mat-mdc-cell a{cursor:pointer;text-decoration:underline}.mat-mdc-header-cell a:hover,.mat-mdc-cell a:hover{text-decoration:underline}.row-header a{text-decoration:none;align-items:center;display:flex}.mat-column-totals_collection.noMaterial{background-color:#fad6da}.mat-column-totals_collection.fewMaterials{background-color:#fff1d6}.mat-cell-level-1{padding-left:20px!important;text-align:left}.mat-cell-level-2{padding-left:40px!important;text-align:left}.mat-cell-level-3{padding-left:60px!important;text-align:left}.mat-cell-level-4{padding-left:80px!important;text-align:left}.mat-cell-level-5{padding-left:100px!important;text-align:left}.mat-cell-level-6{padding-left:120px!important;text-align:left}.mat-cell-level-7{padding-left:140px!important;text-align:left}.mat-cell-level-8{padding-left:160px!important;text-align:left}\n"] }]
87
87
  }], ctorParameters: () => [{ type: i1.MetaApiService }, { type: i2.TranslateService }, { type: i3.EditorialLinkService }] });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb2xsZWN0aW9uLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL3RyZWUtY29sbGVjdGlvbi1kZXRhaWxzL3RyZWUtY29sbGVjdGlvbi1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi90cmVlLWNvbGxlY3Rpb24tZGV0YWlscy90cmVlLWNvbGxlY3Rpb24tZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFVN0MsTUFBTSxPQUFPLDhCQUE4QjtJQVF6QyxZQUNtQixPQUF1QixFQUN2QixTQUEyQixFQUMzQixXQUFpQztRQUZqQyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBc0I7UUFWM0MsdUJBQWtCLEdBQUcsSUFBSSxXQUFXLENBQVMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEUsaUJBQVksR0FBbUMsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFtQixFQUFFLE9BQU8sRUFB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SSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBdUIsQ0FBQztRQUMzRixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxjQUFjLENBQUMsRUFBVTtRQUN2QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFlBQW9CLEVBQUUsZUFBdUIsRUFBRSxTQUFpQjtRQUMxRixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZGLE1BQU0sS0FBSyxHQUFHLGVBQWUsR0FBRyxLQUFLLEdBQUcsVUFBVSxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7K0dBbEZVLDhCQUE4QjttR0FBOUIsOEJBQThCLG1FQ2QzQyw2d0VBMERBOzs0RkQ1Q2EsOEJBQThCO2tCQUwxQyxTQUFTOytCQUNFLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgbWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZXRhQXBpU2VydmljZSB9IGZyb20gJy4uL21ldGEtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBFZGl0b3JpYWxMaW5rU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRpdG9yaWFsLWxpbmstc2VydmljZS9lZGl0b3JpYWwtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbHRlclZhbHVlLCBNYXRyaXhXaXRoQ291bnRzLCBRdWFsaXR5TWF0cml4SGVhZGVyIH0gZnJvbSAnLi4vamF2YS1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdHJlZS1jb2xsZWN0aW9uLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS1jb2xsZWN0aW9uLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cmVlLWNvbGxlY3Rpb24tZGV0YWlscy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29sbGVjdGlvbkRldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZWFkb25seSBzZWxlY3RlZENvbGxlY3Rpb24gPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPignJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgY29sbGVjdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8RmlsdGVyVmFsdWVbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbHRlclZhbHVlW10+KFtdKTtcbiAgcmVhZG9ubHkgcmVjZW50UXVhbGl0eU1hdHJpeCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hdHJpeFdpdGhDb3VudHM+KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0pO1xuXG4gIGlzTG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgZGF0YUNvbHVtbnM6IEFycmF5PFF1YWxpdHlNYXRyaXhIZWFkZXI+ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXRhQXBpOiBNZXRhQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpbmtTZXJ2aWNlOiBFZGl0b3JpYWxMaW5rU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Q29sbGVjdGlvbnNGaWx0ZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbGxlY3Rpb25zRmlsdGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGNvbGxlY3Rpb25JZFZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMuZXh0cmFjdENvbGxlY3Rpb25JZEZyb21Wb2NhYlVybChjb2xsZWN0aW9uSWRWYWx1ZSk7XG4gICAgICB0aGlzLmxvYWREYXRhRm9yQ29sbGVjdGlvbihpZCk7XG4gICAgfSk7XG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0Q29sbGVjdGlvbnNGaWx0ZXIoKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNvbGxlY3Rpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHNvcnRlZENvbGxlY3Rpb25zID0gY29sbGVjdGlvbnMuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9ucyQubmV4dChzb3J0ZWRDb2xsZWN0aW9ucyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uLnNldFZhbHVlKHNvcnRlZENvbGxlY3Rpb25zWzBdLmlkKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRGF0YUZvckNvbGxlY3Rpb24oY29sbGVjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0Q29sbGVjdGlvbkNvbXBsZXRlbmVzcyhjb2xsZWN0aW9uSWQpXG4gICAgICAucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHFtKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhQ29sdW1ucyA9IHFtLmNvbHVtbnMubWFwKChjKSA9PiBjKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHFtKSA9PiB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkLm5leHQocW0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdENvbGxlY3Rpb25JZEZyb21Wb2NhYlVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zdWJzdHJpbmcodXJsLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5JZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUNvbHVtbnMubWFwKChjKSA9PiBjLmlkKTtcbiAgfVxuXG4gIGZpbHRlcigpIHtcbiAgICAvL3RoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5zdGF0c0RhdGEuZmlsdGVyKChsKSA9PiBsLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUb2tlbi50b0xvd2VyQ2FzZSgpKSk7XG4gIH1cblxuICB0cmFuc2xhdGVDb2xsZWN0aW9uSXNzdWVzKGVudHJpZXM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKCFlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9mKCcnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxUcmFuc2xhdGlvbnMgPSBmb3JrSm9pbihcbiAgICAgIGVudHJpZXMubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KGBxdWFsaXR5X21hdHJpeC4ke2VudHJ5fWApLnBpcGUodGFrZSgxKSkgYXMgT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBhbGxUcmFuc2xhdGlvbnMucGlwZSh0YWtlKDEpKS5waXBlKG1hcCgodHJhbnNsYXRpb25zKSA9PiB0cmFuc2xhdGlvbnMuam9pbignLCAnKSkpO1xuICB9XG5cbiAgb3BlbkNvbGxlY3Rpb24oaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25JZCA9IHRoaXMuZXh0cmFjdENvbGxlY3Rpb25JZEZyb21Wb2NhYlVybChpZCk7XG4gICAgdGhpcy5saW5rU2VydmljZS5vcGVuQnlDb2xsZWN0aW9uSWQoY29sbGVjdGlvbklkKTtcbiAgfVxuXG4gIGFzeW5jIHNob3dNYXRlcmlhbFdpdGhJc3N1ZShjb2xsZWN0aW9uSWQ6IHN0cmluZywgY29sbGVjdGlvblRpdGVsOiBzdHJpbmcsIGlzc3VlVHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldCgncXVhbGl0eV9tYXRyaXguJyArIGlzc3VlVHlwZSkudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgdGl0bGUgPSBjb2xsZWN0aW9uVGl0ZWwgKyAnIC0gJyArIHRyYW5zbGF0ZWQ7XG4gICAgcmV0dXJuIHRoaXMubGlua1NlcnZpY2Uub3BlbkJ5Q29sbGVjdGlvbkFuZElzc3VlVHlwZShjb2xsZWN0aW9uSWQsIGlzc3VlVHlwZSwgdGl0bGUpO1xuICB9XG59XG4iLCI8bWF0LWNhcmQ+XG4gIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgPG1hdC1jYXJkLXRpdGxlPlxuICAgICAgUXVhbGl0w6R0c21ldHJpazogTWV0YWRhdGVudm9sbHN0w6RuZGlna2VpdCB2b24gU2FtbWx1bmdlbnt7aXNMb2FkaW5nKCkgPyBcIjogTGFkZSBuZXVlIERhdGVuLlwiIDogXCJcIn19PC9tYXQtY2FyZC10aXRsZVxuICAgID5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIDxtYXQtY2FyZC1jb250ZW50PlxuICAgIDwhLS0gY29uc2lkZXIgdG8gcHV0IHRoZSBmaWx0ZXIgaW4gdGhlIHRhYmxlIGhlYWRlciB0byBhdm9pZCB0aGF0IGl0IGlzIHNjcm9sbGVkIG91dCBvZiB2aWV3LS0+XG4gICAgPGxpYi1xbS1maWx0ZXJcbiAgICAgIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIFtsYWJlbF09XCInU2FtbWx1bmcnXCJcbiAgICAgIFtvcHRpb25zXT1cImNvbGxlY3Rpb25zJCB8IGFzeW5jXCJcbiAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICBbaW5wdXRGb3JtQ29udHJvbF09XCJzZWxlY3RlZENvbGxlY3Rpb25cIlxuICAgID5cbiAgICA8L2xpYi1xbS1maWx0ZXI+XG5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD5cbjxtYXQtY2FyZD5cbiAgPHRhYmxlIFtuZ0NsYXNzXT1cInsnd2hpbGUtbG9hZGluZyc6IGlzTG9hZGluZygpfVwiIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJyZWNlbnRRdWFsaXR5TWF0cml4JC52YWx1ZS5yb3dzXCI+XG4gICAgPCEtLSBEZWZpbmUgY29sdW1ucyBvZiB0YWJsZSAtLT5cbiAgICA8IS0tIFJvdyBIZWFkZXIgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicm93LWhlYWRlclwiIHN0aWNreT5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+U2FtbWx1bmc8L3RoPlxuICAgICAgPHRkXG4gICAgICAgIG1hdC1jZWxsXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJ7e3Jvdy5tZXRhLmFsdF9sYWJlbH19XCJcbiAgICAgICAgY2xhc3M9XCJyb3ctaGVhZGVyIHt7J21hdC1jZWxsLWxldmVsLScgKyAocm93Lm1ldGEubGV2ZWwrMSl9fVwiXG4gICAgICA+XG4gICAgICAgIDxhIChjbGljayk9XCJvcGVuQ29sbGVjdGlvbihyb3cubWV0YS5pZClcIj5cbiAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwicm93Lm1ldGEubGV2ZWwgPT09IDEgPyAndHJlZScgOiAnY2hpbGQnXCI+PC9tYXQtaWNvbj5cbiAgICAgICAge3tyb3cubWV0YS5sYWJlbH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGF0YUNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5pZFwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXRUb29sdGlwPVwie3tjb2x1bW4uYWx0TGFiZWx9fVwiID57eyBcInF1YWxpdHlfbWF0cml4LlwiICsgY29sdW1uLmxhYmVsIHwgdHJhbnNsYXRlIH19PC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBtYXRUb29sdGlwPVwie3snY2VsbCB0b29sdGlwJyAvL2dldENlbGxUb29sdGlwKHJvdywgY29sdW1uLmlkKX19XCI+XG4gICAgICAgIEBpZiAoIGNvbHVtbi5pZCA9PT0gJ2NvbGxlY3Rpb25faXNzdWVzJyApICAgIHtcbiAgICAgICAgICB7eyB0cmFuc2xhdGVDb2xsZWN0aW9uSXNzdWVzKHJvdy5jb3VudHNbY29sdW1uLmlkXSkgfCBhc3luYyB9fVxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8YSAqbmdJZj1cInJvdy5jb3VudHNbY29sdW1uLmlkXVwiIChjbGljayk9XCJzaG93TWF0ZXJpYWxXaXRoSXNzdWUocm93Lm1ldGEuaWQsIHJvdy5tZXRhLmxhYmVsLCBjb2x1bW4uaWQpXCI+XG4gICAgICAgICAge3sgcm93LmNvdW50c1tjb2x1bW4uaWRdIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICB9XG5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEdlbmVyYXRlIGFjdHVhbCB0YWJsZSAtLT5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIlsncm93LWhlYWRlciddLmNvbmNhdChjb2x1bW5JZHMpOyBzdGlja3k6dHJ1ZVwiPjwvdHI+XG4gICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsncm93LWhlYWRlciddLmNvbmNhdChjb2x1bW5JZHMpXCI+PC90cj5cbiAgPC90YWJsZT5cbjwvbWF0LWNhcmQ+XG4iXX0=
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb2xsZWN0aW9uLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctbWV0YS13aWRnZXRzLWxpYi9zcmMvbGliL3RyZWUtY29sbGVjdGlvbi1kZXRhaWxzL3RyZWUtY29sbGVjdGlvbi1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLW1ldGEtd2lkZ2V0cy1saWIvc3JjL2xpYi90cmVlLWNvbGxlY3Rpb24tZGV0YWlscy90cmVlLWNvbGxlY3Rpb24tZGV0YWlscy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFVN0MsTUFBTSxPQUFPLDhCQUE4QjtJQVF6QyxZQUNtQixPQUF1QixFQUN2QixTQUEyQixFQUMzQixXQUFpQztRQUZqQyxZQUFPLEdBQVAsT0FBTyxDQUFnQjtRQUN2QixjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBc0I7UUFWM0MsdUJBQWtCLEdBQUcsSUFBSSxXQUFXLENBQVMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDeEUsaUJBQVksR0FBbUMsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFtQixFQUFFLE9BQU8sRUFB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SSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBdUIsQ0FBQztRQUMzRixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxjQUFjLENBQUMsRUFBVTtRQUN2QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFlBQW9CLEVBQUUsZUFBdUIsRUFBRSxTQUFpQjtRQUMxRixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZGLE1BQU0sS0FBSyxHQUFHLGVBQWUsR0FBRyxLQUFLLEdBQUcsVUFBVSxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7K0dBbEZVLDhCQUE4QjttR0FBOUIsOEJBQThCLG1FQ2QzQyw4MkVBNERBOzs0RkQ5Q2EsOEJBQThCO2tCQUwxQyxTQUFTOytCQUNFLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgbWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZXRhQXBpU2VydmljZSB9IGZyb20gJy4uL21ldGEtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBFZGl0b3JpYWxMaW5rU2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRpdG9yaWFsLWxpbmstc2VydmljZS9lZGl0b3JpYWwtbGluay5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbHRlclZhbHVlLCBNYXRyaXhXaXRoQ291bnRzLCBRdWFsaXR5TWF0cml4SGVhZGVyIH0gZnJvbSAnLi4vamF2YS1hcGknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtdHJlZS1jb2xsZWN0aW9uLWRldGFpbHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdHJlZS1jb2xsZWN0aW9uLWRldGFpbHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90cmVlLWNvbGxlY3Rpb24tZGV0YWlscy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUcmVlQ29sbGVjdGlvbkRldGFpbHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICByZWFkb25seSBzZWxlY3RlZENvbGxlY3Rpb24gPSBuZXcgRm9ybUNvbnRyb2w8c3RyaW5nPignJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgY29sbGVjdGlvbnMkOiBCZWhhdmlvclN1YmplY3Q8RmlsdGVyVmFsdWVbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEZpbHRlclZhbHVlW10+KFtdKTtcbiAgcmVhZG9ubHkgcmVjZW50UXVhbGl0eU1hdHJpeCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1hdHJpeFdpdGhDb3VudHM+KHsgY29sdW1uczogW10sIHJvd3M6IFtdIH0pO1xuXG4gIGlzTG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgZGF0YUNvbHVtbnM6IEFycmF5PFF1YWxpdHlNYXRyaXhIZWFkZXI+ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXRhQXBpOiBNZXRhQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxpbmtTZXJ2aWNlOiBFZGl0b3JpYWxMaW5rU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0Q29sbGVjdGlvbnNGaWx0ZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbGxlY3Rpb25zRmlsdGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKGNvbGxlY3Rpb25JZFZhbHVlKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMuZXh0cmFjdENvbGxlY3Rpb25JZEZyb21Wb2NhYlVybChjb2xsZWN0aW9uSWRWYWx1ZSk7XG4gICAgICB0aGlzLmxvYWREYXRhRm9yQ29sbGVjdGlvbihpZCk7XG4gICAgfSk7XG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0Q29sbGVjdGlvbnNGaWx0ZXIoKVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNvbGxlY3Rpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHNvcnRlZENvbGxlY3Rpb25zID0gY29sbGVjdGlvbnMuc29ydCgoYSwgYikgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9ucyQubmV4dChzb3J0ZWRDb2xsZWN0aW9ucyk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uLnNldFZhbHVlKHNvcnRlZENvbGxlY3Rpb25zWzBdLmlkKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkRGF0YUZvckNvbGxlY3Rpb24oY29sbGVjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5tZXRhQXBpXG4gICAgICAuZ2V0Q29sbGVjdGlvbkNvbXBsZXRlbmVzcyhjb2xsZWN0aW9uSWQpXG4gICAgICAucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHFtKSA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhQ29sdW1ucyA9IHFtLmNvbHVtbnMubWFwKChjKSA9PiBjKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHFtKSA9PiB0aGlzLnJlY2VudFF1YWxpdHlNYXRyaXgkLm5leHQocW0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdENvbGxlY3Rpb25JZEZyb21Wb2NhYlVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybC5zdWJzdHJpbmcodXJsLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5JZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUNvbHVtbnMubWFwKChjKSA9PiBjLmlkKTtcbiAgfVxuXG4gIGZpbHRlcigpIHtcbiAgICAvL3RoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5zdGF0c0RhdGEuZmlsdGVyKChsKSA9PiBsLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUb2tlbi50b0xvd2VyQ2FzZSgpKSk7XG4gIH1cblxuICB0cmFuc2xhdGVDb2xsZWN0aW9uSXNzdWVzKGVudHJpZXM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKCFlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9mKCcnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxUcmFuc2xhdGlvbnMgPSBmb3JrSm9pbihcbiAgICAgIGVudHJpZXMubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KGBxdWFsaXR5X21hdHJpeC4ke2VudHJ5fWApLnBpcGUodGFrZSgxKSkgYXMgT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBhbGxUcmFuc2xhdGlvbnMucGlwZSh0YWtlKDEpKS5waXBlKG1hcCgodHJhbnNsYXRpb25zKSA9PiB0cmFuc2xhdGlvbnMuam9pbignLCAnKSkpO1xuICB9XG5cbiAgb3BlbkNvbGxlY3Rpb24oaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25JZCA9IHRoaXMuZXh0cmFjdENvbGxlY3Rpb25JZEZyb21Wb2NhYlVybChpZCk7XG4gICAgdGhpcy5saW5rU2VydmljZS5vcGVuQnlDb2xsZWN0aW9uSWQoY29sbGVjdGlvbklkKTtcbiAgfVxuXG4gIGFzeW5jIHNob3dNYXRlcmlhbFdpdGhJc3N1ZShjb2xsZWN0aW9uSWQ6IHN0cmluZywgY29sbGVjdGlvblRpdGVsOiBzdHJpbmcsIGlzc3VlVHlwZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldCgncXVhbGl0eV9tYXRyaXguJyArIGlzc3VlVHlwZSkudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgdGl0bGUgPSBjb2xsZWN0aW9uVGl0ZWwgKyAnIC0gJyArIHRyYW5zbGF0ZWQ7XG4gICAgcmV0dXJuIHRoaXMubGlua1NlcnZpY2Uub3BlbkJ5Q29sbGVjdGlvbkFuZElzc3VlVHlwZShjb2xsZWN0aW9uSWQsIGlzc3VlVHlwZSwgdGl0bGUpO1xuICB9XG59XG4iLCI8bWF0LWNhcmQ+XG4gIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgPG1hdC1jYXJkLXRpdGxlPlxuICAgICAgUXVhbGl0w6R0c21ldHJpazogTWV0YWRhdGVudm9sbHN0w6RuZGlna2VpdCB2b24gU2FtbWx1bmdlbnt7aXNMb2FkaW5nKCkgPyBcIjogTGFkZSBuZXVlIERhdGVuLlwiIDogXCJcIn19PC9tYXQtY2FyZC10aXRsZVxuICAgID5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gIDxtYXQtY2FyZC1jb250ZW50PlxuICAgIDwhLS0gY29uc2lkZXIgdG8gcHV0IHRoZSBmaWx0ZXIgaW4gdGhlIHRhYmxlIGhlYWRlciB0byBhdm9pZCB0aGF0IGl0IGlzIHNjcm9sbGVkIG91dCBvZiB2aWV3LS0+XG4gICAgPGxpYi1xbS1maWx0ZXJcbiAgICAgIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJcbiAgICAgIFtsYWJlbF09XCInU2FtbWx1bmcnXCJcbiAgICAgIFtvcHRpb25zXT1cImNvbGxlY3Rpb25zJCB8IGFzeW5jXCJcbiAgICAgIFttdWx0aXBsZV09XCJmYWxzZVwiXG4gICAgICBbaW5wdXRGb3JtQ29udHJvbF09XCJzZWxlY3RlZENvbGxlY3Rpb25cIlxuICAgID5cbiAgICA8L2xpYi1xbS1maWx0ZXI+XG5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD5cbjxtYXQtY2FyZD5cbiAgPHRhYmxlIFtuZ0NsYXNzXT1cInsnd2hpbGUtbG9hZGluZyc6IGlzTG9hZGluZygpfVwiIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09XCJyZWNlbnRRdWFsaXR5TWF0cml4JC52YWx1ZS5yb3dzXCI+XG4gICAgPCEtLSBEZWZpbmUgY29sdW1ucyBvZiB0YWJsZSAtLT5cbiAgICA8IS0tIFJvdyBIZWFkZXIgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicm93LWhlYWRlclwiIHN0aWNreT5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+U2FtbWx1bmc8L3RoPlxuICAgICAgPHRkXG4gICAgICAgIG1hdC1jZWxsXG4gICAgICAgICptYXRDZWxsRGVmPVwibGV0IHJvd1wiXG4gICAgICAgIG1hdFRvb2x0aXA9XCJ7e3Jvdy5tZXRhLmFsdF9sYWJlbH19XCJcbiAgICAgICAgY2xhc3M9XCJyb3ctaGVhZGVyIHt7J21hdC1jZWxsLWxldmVsLScgKyAocm93Lm1ldGEubGV2ZWwrMSl9fVwiXG4gICAgICA+XG4gICAgICAgIDxhIChjbGljayk9XCJvcGVuQ29sbGVjdGlvbihyb3cubWV0YS5pZClcIj5cbiAgICAgICAgICA8bWF0LWljb24gW3N2Z0ljb25dPVwicm93Lm1ldGEubGV2ZWwgPT09IDEgPyAndHJlZScgOiAnY2hpbGQnXCI+PC9tYXQtaWNvbj5cbiAgICAgICAge3tyb3cubWV0YS5sYWJlbH19XG4gICAgICAgIDwvYT5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERhdGEgQ29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZGF0YUNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5pZFwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXRUb29sdGlwPVwie3tjb2x1bW4uYWx0TGFiZWx9fVwiID57eyBcInF1YWxpdHlfbWF0cml4LlwiICsgY29sdW1uLmxhYmVsIHwgdHJhbnNsYXRlIH19PC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBtYXRUb29sdGlwPVwie3snY2VsbCB0b29sdGlwJyAvL2dldENlbGxUb29sdGlwKHJvdywgY29sdW1uLmlkKX19XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIgY29sdW1uLmlkID09PSAnY29sbGVjdGlvbl9pc3N1ZXMnIGVsc2UgY291bnRzV2l0aExpbmtzXCI+XG4gICAgICAgICAge3sgdHJhbnNsYXRlQ29sbGVjdGlvbklzc3Vlcyhyb3cuY291bnRzW2NvbHVtbi5pZF0pIHwgYXN5bmMgfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY291bnRzV2l0aExpbmtzPlxuICAgICAgICAgIDxhICpuZ0lmPVwicm93LmNvdW50c1tjb2x1bW4uaWRdXCIgKGNsaWNrKT1cInNob3dNYXRlcmlhbFdpdGhJc3N1ZShyb3cubWV0YS5pZCwgcm93Lm1ldGEubGFiZWwsIGNvbHVtbi5pZClcIj5cbiAgICAgICAgICAgIHt7IHJvdy5jb3VudHNbY29sdW1uLmlkXSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuXG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBHZW5lcmF0ZSBhY3R1YWwgdGFibGUgLS0+XG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJbJ3Jvdy1oZWFkZXInXS5jb25jYXQoY29sdW1uSWRzKTsgc3RpY2t5OnRydWVcIj48L3RyPlxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBbJ3Jvdy1oZWFkZXInXS5jb25jYXQoY29sdW1uSWRzKVwiPjwvdHI+XG4gIDwvdGFibGU+XG48L21hdC1jYXJkPlxuIl19