@provoly/dashboard 0.20.4 → 0.20.6
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.
- package/dataset/components/dataset-detail/dataset-detail.component.d.ts +2 -1
- package/dataset/i18n/en.translations.d.ts +2 -1
- package/dataset/i18n/fr.translations.d.ts +2 -1
- package/dataset/style/_o-pry-dataset-card.scss +0 -1
- package/dataset/style/_o-pry-dataset-detail.scss +2 -53
- package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +3 -3
- package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +3 -3
- package/esm2022/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.mjs +3 -3
- package/esm2022/admin/components/admin-menu/admin-menu.component.mjs +3 -3
- package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +20 -4
- package/esm2022/dataset/i18n/en.translations.mjs +3 -2
- package/esm2022/dataset/i18n/fr.translations.mjs +3 -2
- package/esm2022/dataset/style/css.component.mjs +2 -2
- package/esm2022/filters/autocomplete/autocomplete.component.mjs +16 -10
- package/esm2022/lib/core/components/about/about.component.mjs +3 -3
- package/esm2022/lib/core/components/base-menu/base-menu.component.mjs +3 -3
- package/esm2022/lib/core/components/select/select.component.mjs +42 -13
- package/esm2022/lib/core/i18n/en.translations.mjs +1 -2
- package/esm2022/lib/core/i18n/fr.translations.mjs +1 -2
- package/esm2022/lib/core/model/display-options.interface.mjs +2 -2
- package/esm2022/lib/core/model/item.interface.mjs +1 -1
- package/esm2022/lib/core/store/class/class.actions.mjs +1 -4
- package/esm2022/lib/core/store/class/class.effects.mjs +1 -4
- package/esm2022/lib/core/store/class/class.interface.mjs +1 -1
- package/esm2022/lib/core/store/class/class.reducer.mjs +3 -13
- package/esm2022/lib/core/store/class/class.selectors.mjs +1 -3
- package/esm2022/lib/core/store/class/class.service.mjs +1 -9
- package/esm2022/lib/core/store/config/config.selectors.mjs +1 -3
- package/esm2022/lib/core/store/config/config.service.mjs +4 -7
- package/esm2022/lib/dashboard/item-utils.mjs +4 -4
- package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +3 -3
- package/esm2022/presentation/components/presentation.component.mjs +3 -3
- package/esm2022/presentation/components/title-presentation/title-presentation.component.mjs +11 -21
- package/esm2022/presentation/style/css.component.mjs +2 -2
- package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +3 -3
- package/esm2022/restitution/i18n/en.translations.mjs +2 -2
- package/esm2022/restitution/style/css.component.mjs +2 -2
- package/esm2022/search/i18n/en.translations.mjs +2 -1
- package/esm2022/search/i18n/fr.translations.mjs +2 -1
- package/esm2022/toolbox/components/filter-settings/filter-settings.component.mjs +3 -7
- package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +2 -2
- package/fesm2022/provoly-dashboard-admin.mjs +8 -8
- package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-dataset.mjs +25 -7
- package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-filters-autocomplete.mjs +15 -9
- package/fesm2022/provoly-dashboard-filters-autocomplete.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +14 -24
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-restitution.mjs +5 -5
- package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-search.mjs +2 -0
- package/fesm2022/provoly-dashboard-search.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-toolbox.mjs +2 -6
- package/fesm2022/provoly-dashboard-toolbox.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +57 -61
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/filters/autocomplete/autocomplete.component.d.ts +1 -0
- package/lib/core/components/select/select.component.d.ts +2 -1
- package/lib/core/i18n/en.translations.d.ts +0 -1
- package/lib/core/i18n/fr.translations.d.ts +0 -1
- package/lib/core/model/item.interface.d.ts +1 -1
- package/lib/core/store/class/class.actions.d.ts +1 -12
- package/lib/core/store/class/class.effects.d.ts +0 -5
- package/lib/core/store/class/class.interface.d.ts +0 -6
- package/lib/core/store/class/class.reducer.d.ts +2 -3
- package/lib/core/store/class/class.selectors.d.ts +0 -1
- package/lib/core/store/class/class.service.d.ts +1 -5
- package/lib/core/store/config/config.selectors.d.ts +0 -1
- package/package.json +7 -13
- package/presentation/components/title-presentation/title-presentation.component.d.ts +3 -5
- package/presentation/style/_o-pry-presentation.scss +1 -48
- package/restitution/i18n/en.translations.d.ts +1 -1
- package/restitution/style/_o-restitution.scss +11 -14
- package/search/i18n/en.translations.d.ts +1 -0
- package/search/i18n/fr.translations.d.ts +1 -0
- package/styles/base/_utils.scss +4 -0
- package/styles/components/_a-tooltip.scss +25 -18
- package/styles/components/_m-info-icon.scss +16 -0
- package/styles/components/_m-presentation-title.scss +14 -0
- package/styles/components/_o-about.scss +2 -24
- package/styles/main.scss +2 -0
- package/styles-theme/components-theme/_o-pry-dataset.theme.scss +0 -8
- package/styles-theme/components-theme/_o-pry-presentation.theme.scss +1 -1
- package/styles-theme/components-theme/_o-restitution.theme.scss +10 -0
- package/esm2022/supervision/components/supervision-business-data/supervision-business-data.component.mjs +0 -34
- package/esm2022/supervision/components/supervision-flow/supervision-flow.component.mjs +0 -33
- package/esm2022/supervision/components/supervision-infrastructures/supervision-infrastructures.component.mjs +0 -51
- package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors-select/supervision-integration-errors-select.component.mjs +0 -27
- package/esm2022/supervision/components/supervision-integration-errors/supervision-integration-errors.component.mjs +0 -100
- package/esm2022/supervision/components/supervision-layout/supervision-layout.component.mjs +0 -47
- package/esm2022/supervision/components/supervision-menu/supervision-menu.component.mjs +0 -32
- package/esm2022/supervision/components/supervision-title/supervision-title.component.mjs +0 -24
- package/esm2022/supervision/components/supervision.component.mjs +0 -19
- package/esm2022/supervision/i18n/en.translations.mjs +0 -58
- package/esm2022/supervision/i18n/fr.translations.mjs +0 -58
- package/esm2022/supervision/provoly-dashboard-supervision.mjs +0 -5
- package/esm2022/supervision/public-api.mjs +0 -2
- package/esm2022/supervision/store/supervision-api.model.mjs +0 -2
- package/esm2022/supervision/store/supervision.actions.mjs +0 -33
- package/esm2022/supervision/store/supervision.effects.mjs +0 -60
- package/esm2022/supervision/store/supervision.reducer.mjs +0 -111
- package/esm2022/supervision/store/supervision.selectors.mjs +0 -35
- package/esm2022/supervision/store/supervision.service.mjs +0 -54
- package/esm2022/supervision/supervision-routing.module.mjs +0 -96
- package/esm2022/supervision/supervision.module.mjs +0 -96
- package/fesm2022/provoly-dashboard-supervision.mjs +0 -861
- package/fesm2022/provoly-dashboard-supervision.mjs.map +0 -1
- package/supervision/components/supervision-business-data/supervision-business-data.component.d.ts +0 -14
- package/supervision/components/supervision-flow/supervision-flow.component.d.ts +0 -14
- package/supervision/components/supervision-infrastructures/supervision-infrastructures.component.d.ts +0 -18
- package/supervision/components/supervision-integration-errors/supervision-integration-errors-select/supervision-integration-errors-select.component.d.ts +0 -12
- package/supervision/components/supervision-integration-errors/supervision-integration-errors.component.d.ts +0 -29
- package/supervision/components/supervision-layout/supervision-layout.component.d.ts +0 -21
- package/supervision/components/supervision-menu/supervision-menu.component.d.ts +0 -13
- package/supervision/components/supervision-title/supervision-title.component.d.ts +0 -11
- package/supervision/components/supervision.component.d.ts +0 -9
- package/supervision/i18n/en.translations.d.ts +0 -57
- package/supervision/i18n/fr.translations.d.ts +0 -57
- package/supervision/index.d.ts +0 -5
- package/supervision/public-api.d.ts +0 -1
- package/supervision/store/supervision-api.model.d.ts +0 -36
- package/supervision/store/supervision.actions.d.ts +0 -121
- package/supervision/store/supervision.effects.d.ts +0 -51
- package/supervision/store/supervision.reducer.d.ts +0 -22
- package/supervision/store/supervision.selectors.d.ts +0 -18
- package/supervision/store/supervision.service.d.ts +0 -19
- package/supervision/supervision-routing.module.d.ts +0 -7
- package/supervision/supervision.module.d.ts +0 -25
|
@@ -118,10 +118,6 @@ export class PryFilterSettingsComponent extends ToolboxActionComponent {
|
|
|
118
118
|
case 'text':
|
|
119
119
|
return attributes.filter((attr) => [FieldType.STRING, FieldType.KEYWORD].includes(attr.type));
|
|
120
120
|
default:
|
|
121
|
-
if (this.selectedAttribute$.value.length > 0) {
|
|
122
|
-
const attributeType = attributes.find((attr) => attr.id === this.selectedAttribute$.value[0])?.type;
|
|
123
|
-
return attributes.filter((attr) => attr.type === attributeType);
|
|
124
|
-
}
|
|
125
121
|
return attributes;
|
|
126
122
|
}
|
|
127
123
|
}
|
|
@@ -222,11 +218,11 @@ export class PryFilterSettingsComponent extends ToolboxActionComponent {
|
|
|
222
218
|
});
|
|
223
219
|
}
|
|
224
220
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PryFilterSettingsComponent, deps: [{ token: i1.Store }, { token: i2.Overlay }, { token: i0.ViewContainerRef }, { token: i3.FilterFactoryService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
225
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PryFilterSettingsComponent, selector: "pry-filter-settings", inputs: { label: "label" }, viewQueries: [{ propertyName: "templateSettings", first: true, predicate: ["settings"], descendants: true, read: TemplateRef }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<pry-toolbox-css></pry-toolbox-css>\n<div class=\"save-manifest-container\">\n <div style=\"display: none\">\n <ng-template #container></ng-template>\n </div>\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary -size-md\"\n [disabled]=\"(attributes$ | async)?.length === 0\"\n (click)=\"toggleSettings()\"\n aria-haspopup=\"dialog\"\n >\n <ng-container *ngIf=\"label\">{{ '@pry.filters.label' | i18n }}</ng-container>\n </button>\n</div>\n\n<ng-template #settings>\n <div class=\"o-filters\">\n <div class=\"o-filters__header\">\n <ng-container *ngIf=\"currentStep === FilterSteps.LIST\">\n <h2>{{ '@pry.filters.label' | i18n }}</h2>\n </ng-container>\n <ng-container *ngIf=\"currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION\">\n <div class=\"u-display-flex -row -align-center\">\n <button (click)=\"goBack()\" type=\"button\" class=\"back-button\">\n <pry-icon iconSvg=\"chevron_right\"></pry-icon>\n </button>\n <h2>\n {{\n (currentStep === FilterSteps.CREATION ? '@pry.filters.creation.create' : '@pry.filters.creation.update')\n | i18n\n }}\n </h2>\n </div>\n </ng-container>\n <button (click)=\"toggleSettings()\" type=\"button\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <ng-container *ngIf=\"currentStep === FilterSteps.LIST\">\n <div class=\"o-filters__content\">\n <div *ngIf=\"(attributes$ | async)?.length === 0; else attributesExists\" class=\"a-table-wrapper\"></div>\n <ng-template #attributesExists>\n <table *ngIf=\"filters.length > 0; else noFilters\" class=\"a-table\">\n <tbody cdkDropList [cdkDropListData]=\"filters\" (cdkDropListDropped)=\"drop($event)\">\n <tr *ngFor=\"let filter of filters\" class=\"o-filters__filter\" cdkDrag>\n <td>\n <span>{{ filter.name }}</span>\n </td>\n <td>\n <span>{{ getFilterAttributes(filter, 3) }}</span>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"deleteFilter(filter.id)\">\n {{ '@pry.action.delete' | i18n }}\n </button>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"goToEdition(filter)\">\n {{ '@pry.filters.list.modify' | i18n }}\n </button>\n </td>\n <td cdkDragHandle>\n <pry-icon iconSvg=\"drag_indicator\"></pry-icon>\n </td>\n </tr>\n </tbody>\n </table>\n <ng-template #noFilters>\n <span class=\"o-filters__no-filters\">{{ '@pry.filters.noFilters' | i18n }}</span>\n </ng-template>\n <button (click)=\"goToCreation()\" class=\"a-btn a-btn--primary\">{{ '@pry.filters.list.add' | i18n }}</button>\n </ng-template>\n </div>\n </ng-container>\n <ng-container *ngIf=\"currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION\">\n <div class=\"o-filters__content\">\n <div class=\"m-form-label-field\">\n <label for=\"filterName\" class=\"a-label\">{{ '@pry.filters.creation.name' | i18n }}</label>\n <input id=\"filterName\" class=\"a-form-field\" type=\"text\" [(ngModel)]=\"filter.name\" />\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"filterType\" class=\"a-label\">{{ '@pry.filters.creation.type' | i18n }}</label>\n <pry-select\n id=\"filterType\"\n [placeholder]=\"'@pry.filters.creation.type' | i18n\"\n [items]=\"types$ | async\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [(ngModel)]=\"filter.type\"\n (ngModelChange)=\"updateFilterType($event)\"\n >\n </pry-select>\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'date'\" class=\"m-form-label-field u-display-flex -row\">\n <label for=\"date-range\" class=\"a-label\">{{ '@pry.filters.creation.dateRange' | i18n }}</label>\n <pry-checkbox\n id=\"date-range\"\n [(ngModel)]=\"filter.hasDateRange\"\n (ngModelChange)=\"this.currentOperators$.next(getOperators())\"\n />\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'list'\" class=\"m-form-label-field\">\n <label for=\"possibleValues\" class=\"a-label\">{{ '@pry.filters.creation.values' | i18n }}</label>\n <input\n id=\"possibleValues\"\n class=\"a-form-field\"\n type=\"text\"\n [(ngModel)]=\"filter.possibleValues\"\n placeholder=\"valeur1, valeur2, valeur3\"\n />\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'autocomplete'\" class=\"m-form-label-field\">\n <label for=\"limit\" class=\"a-label\">{{ '@pry.filters.creation.limit' | i18n }}</label>\n <input id=\"limit\" class=\"a-form-field\" type=\"number\" min=\"0\" max=\"50\" [(ngModel)]=\"filter.limit\" />\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"attributes\" class=\"a-label\">{{ '@pry.filters.creation.attributes' | i18n }}</label>\n <pry-select\n id=\"attributes\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [items]=\"attributes$ | async\"\n [ngModel]=\"filter.attributes\"\n (ngModelChange)=\"selectAttribute($event)\"\n [placeholder]=\"'@pry.filters.creation.attributes' | i18n\"\n [autocomplete]=\"true\"\n bindLabel=\"label\"\n >\n </pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"operations\" class=\"a-label\">{{ '@pry.filters.attributes.operator' | i18n }}</label>\n <pry-select\n id=\"operations\"\n [items]=\"currentOperators$ | async\"\n [(ngModel)]=\"filter.operator\"\n [placeholder]=\"'@pry.filters.attributes.operator' | i18n\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [disabled]=\"(currentFilterComponentType$ | async) === 'list'\"\n >\n </pry-select>\n </div>\n <button\n class=\"a-btn a-btn--primary\"\n (click)=\"submitFilter()\"\n [disabled]=\"!(filter.name && filter.type && filter.attributes.length !== 0 && filter.operator)\"\n type=\"submit\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </ng-container>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "elementRef"], outputs: ["searched", "cleared"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i6.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i8.PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
|
|
221
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PryFilterSettingsComponent, selector: "pry-filter-settings", inputs: { label: "label" }, viewQueries: [{ propertyName: "templateSettings", first: true, predicate: ["settings"], descendants: true, read: TemplateRef }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<pry-toolbox-css></pry-toolbox-css>\n<div class=\"save-manifest-container\">\n <div style=\"display: none\">\n <ng-template #container></ng-template>\n </div>\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary -size-md\"\n [disabled]=\"(attributes$ | async)?.length === 0\"\n (click)=\"toggleSettings()\"\n aria-haspopup=\"dialog\"\n >\n <ng-container *ngIf=\"label\">{{ '@pry.filters.label' | i18n }}</ng-container>\n </button>\n</div>\n\n<ng-template #settings>\n <div class=\"o-filters\">\n <div class=\"o-filters__header\">\n <ng-container *ngIf=\"currentStep === FilterSteps.LIST\">\n <h2>{{ '@pry.filters.label' | i18n }}</h2>\n </ng-container>\n <ng-container *ngIf=\"currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION\">\n <div class=\"u-display-flex -row -align-center\">\n <button (click)=\"goBack()\" type=\"button\" class=\"back-button\">\n <pry-icon iconSvg=\"chevron_right\"></pry-icon>\n </button>\n <h2>\n {{\n (currentStep === FilterSteps.CREATION ? '@pry.filters.creation.create' : '@pry.filters.creation.update')\n | i18n\n }}\n </h2>\n </div>\n </ng-container>\n <button (click)=\"toggleSettings()\" type=\"button\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <ng-container *ngIf=\"currentStep === FilterSteps.LIST\">\n <div class=\"o-filters__content\">\n <div *ngIf=\"(attributes$ | async)?.length === 0; else attributesExists\" class=\"a-table-wrapper\"></div>\n <ng-template #attributesExists>\n <table *ngIf=\"filters.length > 0; else noFilters\" class=\"a-table\">\n <tbody cdkDropList [cdkDropListData]=\"filters\" (cdkDropListDropped)=\"drop($event)\">\n <tr *ngFor=\"let filter of filters\" class=\"o-filters__filter\" cdkDrag>\n <td>\n <span>{{ filter.name }}</span>\n </td>\n <td>\n <span>{{ getFilterAttributes(filter, 3) }}</span>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"deleteFilter(filter.id)\">\n {{ '@pry.action.delete' | i18n }}\n </button>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"goToEdition(filter)\">\n {{ '@pry.filters.list.modify' | i18n }}\n </button>\n </td>\n <td cdkDragHandle>\n <pry-icon iconSvg=\"drag_indicator\"></pry-icon>\n </td>\n </tr>\n </tbody>\n </table>\n <ng-template #noFilters>\n <span class=\"o-filters__no-filters\">{{ '@pry.filters.noFilters' | i18n }}</span>\n </ng-template>\n <button (click)=\"goToCreation()\" class=\"a-btn a-btn--primary\">{{ '@pry.filters.list.add' | i18n }}</button>\n </ng-template>\n </div>\n </ng-container>\n <ng-container *ngIf=\"currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION\">\n <div class=\"o-filters__content\">\n <div class=\"m-form-label-field\">\n <label for=\"filterName\" class=\"a-label\">{{ '@pry.filters.creation.name' | i18n }}</label>\n <input id=\"filterName\" class=\"a-form-field\" type=\"text\" [(ngModel)]=\"filter.name\" />\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"filterType\" class=\"a-label\">{{ '@pry.filters.creation.type' | i18n }}</label>\n <pry-select\n id=\"filterType\"\n [placeholder]=\"'@pry.filters.creation.type' | i18n\"\n [items]=\"types$ | async\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [(ngModel)]=\"filter.type\"\n (ngModelChange)=\"updateFilterType($event)\"\n >\n </pry-select>\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'date'\" class=\"m-form-label-field u-display-flex -row\">\n <label for=\"date-range\" class=\"a-label\">{{ '@pry.filters.creation.dateRange' | i18n }}</label>\n <pry-checkbox\n id=\"date-range\"\n [(ngModel)]=\"filter.hasDateRange\"\n (ngModelChange)=\"this.currentOperators$.next(getOperators())\"\n />\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'list'\" class=\"m-form-label-field\">\n <label for=\"possibleValues\" class=\"a-label\">{{ '@pry.filters.creation.values' | i18n }}</label>\n <input\n id=\"possibleValues\"\n class=\"a-form-field\"\n type=\"text\"\n [(ngModel)]=\"filter.possibleValues\"\n placeholder=\"valeur1, valeur2, valeur3\"\n />\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'autocomplete'\" class=\"m-form-label-field\">\n <label for=\"limit\" class=\"a-label\">{{ '@pry.filters.creation.limit' | i18n }}</label>\n <input id=\"limit\" class=\"a-form-field\" type=\"number\" min=\"0\" max=\"50\" [(ngModel)]=\"filter.limit\" />\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"attributes\" class=\"a-label\">{{ '@pry.filters.creation.attributes' | i18n }}</label>\n <pry-select\n id=\"attributes\"\n [multiple]=\"true\"\n [clearable]=\"true\"\n [closeOnSelect]=\"false\"\n [items]=\"attributes$ | async\"\n [ngModel]=\"filter.attributes\"\n (ngModelChange)=\"selectAttribute($event)\"\n [placeholder]=\"'@pry.filters.creation.attributes' | i18n\"\n bindLabel=\"label\"\n >\n </pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"operations\" class=\"a-label\">{{ '@pry.filters.attributes.operator' | i18n }}</label>\n <pry-select\n id=\"operations\"\n [items]=\"currentOperators$ | async\"\n [(ngModel)]=\"filter.operator\"\n [placeholder]=\"'@pry.filters.attributes.operator' | i18n\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [disabled]=\"(currentFilterComponentType$ | async) === 'list'\"\n >\n </pry-select>\n </div>\n <button\n class=\"a-btn a-btn--primary\"\n (click)=\"submitFilter()\"\n [disabled]=\"!(filter.name && filter.type && filter.attributes.length !== 0 && filter.operator)\"\n type=\"submit\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </ng-container>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "elementRef"], outputs: ["searched", "cleared"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i6.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "directive", type: i7.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i7.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i7.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i8.PrySelectGridLayoutCssComponent, selector: "pry-toolbox-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.I18nPipe, name: "i18n" }] }); }
|
|
226
222
|
}
|
|
227
223
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PryFilterSettingsComponent, decorators: [{
|
|
228
224
|
type: Component,
|
|
229
|
-
args: [{ selector: 'pry-filter-settings', template: "<pry-toolbox-css></pry-toolbox-css>\n<div class=\"save-manifest-container\">\n <div style=\"display: none\">\n <ng-template #container></ng-template>\n </div>\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary -size-md\"\n [disabled]=\"(attributes$ | async)?.length === 0\"\n (click)=\"toggleSettings()\"\n aria-haspopup=\"dialog\"\n >\n <ng-container *ngIf=\"label\">{{ '@pry.filters.label' | i18n }}</ng-container>\n </button>\n</div>\n\n<ng-template #settings>\n <div class=\"o-filters\">\n <div class=\"o-filters__header\">\n <ng-container *ngIf=\"currentStep === FilterSteps.LIST\">\n <h2>{{ '@pry.filters.label' | i18n }}</h2>\n </ng-container>\n <ng-container *ngIf=\"currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION\">\n <div class=\"u-display-flex -row -align-center\">\n <button (click)=\"goBack()\" type=\"button\" class=\"back-button\">\n <pry-icon iconSvg=\"chevron_right\"></pry-icon>\n </button>\n <h2>\n {{\n (currentStep === FilterSteps.CREATION ? '@pry.filters.creation.create' : '@pry.filters.creation.update')\n | i18n\n }}\n </h2>\n </div>\n </ng-container>\n <button (click)=\"toggleSettings()\" type=\"button\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <ng-container *ngIf=\"currentStep === FilterSteps.LIST\">\n <div class=\"o-filters__content\">\n <div *ngIf=\"(attributes$ | async)?.length === 0; else attributesExists\" class=\"a-table-wrapper\"></div>\n <ng-template #attributesExists>\n <table *ngIf=\"filters.length > 0; else noFilters\" class=\"a-table\">\n <tbody cdkDropList [cdkDropListData]=\"filters\" (cdkDropListDropped)=\"drop($event)\">\n <tr *ngFor=\"let filter of filters\" class=\"o-filters__filter\" cdkDrag>\n <td>\n <span>{{ filter.name }}</span>\n </td>\n <td>\n <span>{{ getFilterAttributes(filter, 3) }}</span>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"deleteFilter(filter.id)\">\n {{ '@pry.action.delete' | i18n }}\n </button>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"goToEdition(filter)\">\n {{ '@pry.filters.list.modify' | i18n }}\n </button>\n </td>\n <td cdkDragHandle>\n <pry-icon iconSvg=\"drag_indicator\"></pry-icon>\n </td>\n </tr>\n </tbody>\n </table>\n <ng-template #noFilters>\n <span class=\"o-filters__no-filters\">{{ '@pry.filters.noFilters' | i18n }}</span>\n </ng-template>\n <button (click)=\"goToCreation()\" class=\"a-btn a-btn--primary\">{{ '@pry.filters.list.add' | i18n }}</button>\n </ng-template>\n </div>\n </ng-container>\n <ng-container *ngIf=\"currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION\">\n <div class=\"o-filters__content\">\n <div class=\"m-form-label-field\">\n <label for=\"filterName\" class=\"a-label\">{{ '@pry.filters.creation.name' | i18n }}</label>\n <input id=\"filterName\" class=\"a-form-field\" type=\"text\" [(ngModel)]=\"filter.name\" />\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"filterType\" class=\"a-label\">{{ '@pry.filters.creation.type' | i18n }}</label>\n <pry-select\n id=\"filterType\"\n [placeholder]=\"'@pry.filters.creation.type' | i18n\"\n [items]=\"types$ | async\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [(ngModel)]=\"filter.type\"\n (ngModelChange)=\"updateFilterType($event)\"\n >\n </pry-select>\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'date'\" class=\"m-form-label-field u-display-flex -row\">\n <label for=\"date-range\" class=\"a-label\">{{ '@pry.filters.creation.dateRange' | i18n }}</label>\n <pry-checkbox\n id=\"date-range\"\n [(ngModel)]=\"filter.hasDateRange\"\n (ngModelChange)=\"this.currentOperators$.next(getOperators())\"\n />\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'list'\" class=\"m-form-label-field\">\n <label for=\"possibleValues\" class=\"a-label\">{{ '@pry.filters.creation.values' | i18n }}</label>\n <input\n id=\"possibleValues\"\n class=\"a-form-field\"\n type=\"text\"\n [(ngModel)]=\"filter.possibleValues\"\n placeholder=\"valeur1, valeur2, valeur3\"\n />\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'autocomplete'\" class=\"m-form-label-field\">\n <label for=\"limit\" class=\"a-label\">{{ '@pry.filters.creation.limit' | i18n }}</label>\n <input id=\"limit\" class=\"a-form-field\" type=\"number\" min=\"0\" max=\"50\" [(ngModel)]=\"filter.limit\" />\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"attributes\" class=\"a-label\">{{ '@pry.filters.creation.attributes' | i18n }}</label>\n <pry-select\n id=\"attributes\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [items]=\"attributes$ | async\"\n [ngModel]=\"filter.attributes\"\n (ngModelChange)=\"selectAttribute($event)\"\n [placeholder]=\"'@pry.filters.creation.attributes' | i18n\"\n
|
|
225
|
+
args: [{ selector: 'pry-filter-settings', template: "<pry-toolbox-css></pry-toolbox-css>\n<div class=\"save-manifest-container\">\n <div style=\"display: none\">\n <ng-template #container></ng-template>\n </div>\n <button\n type=\"button\"\n class=\"a-btn a-btn--secondary -size-md\"\n [disabled]=\"(attributes$ | async)?.length === 0\"\n (click)=\"toggleSettings()\"\n aria-haspopup=\"dialog\"\n >\n <ng-container *ngIf=\"label\">{{ '@pry.filters.label' | i18n }}</ng-container>\n </button>\n</div>\n\n<ng-template #settings>\n <div class=\"o-filters\">\n <div class=\"o-filters__header\">\n <ng-container *ngIf=\"currentStep === FilterSteps.LIST\">\n <h2>{{ '@pry.filters.label' | i18n }}</h2>\n </ng-container>\n <ng-container *ngIf=\"currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION\">\n <div class=\"u-display-flex -row -align-center\">\n <button (click)=\"goBack()\" type=\"button\" class=\"back-button\">\n <pry-icon iconSvg=\"chevron_right\"></pry-icon>\n </button>\n <h2>\n {{\n (currentStep === FilterSteps.CREATION ? '@pry.filters.creation.create' : '@pry.filters.creation.update')\n | i18n\n }}\n </h2>\n </div>\n </ng-container>\n <button (click)=\"toggleSettings()\" type=\"button\">\n <pry-icon iconSvg=\"close\"></pry-icon>\n </button>\n </div>\n <ng-container *ngIf=\"currentStep === FilterSteps.LIST\">\n <div class=\"o-filters__content\">\n <div *ngIf=\"(attributes$ | async)?.length === 0; else attributesExists\" class=\"a-table-wrapper\"></div>\n <ng-template #attributesExists>\n <table *ngIf=\"filters.length > 0; else noFilters\" class=\"a-table\">\n <tbody cdkDropList [cdkDropListData]=\"filters\" (cdkDropListDropped)=\"drop($event)\">\n <tr *ngFor=\"let filter of filters\" class=\"o-filters__filter\" cdkDrag>\n <td>\n <span>{{ filter.name }}</span>\n </td>\n <td>\n <span>{{ getFilterAttributes(filter, 3) }}</span>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"deleteFilter(filter.id)\">\n {{ '@pry.action.delete' | i18n }}\n </button>\n </td>\n <td>\n <button type=\"button\" class=\"a-btn a-btn--primary\" (click)=\"goToEdition(filter)\">\n {{ '@pry.filters.list.modify' | i18n }}\n </button>\n </td>\n <td cdkDragHandle>\n <pry-icon iconSvg=\"drag_indicator\"></pry-icon>\n </td>\n </tr>\n </tbody>\n </table>\n <ng-template #noFilters>\n <span class=\"o-filters__no-filters\">{{ '@pry.filters.noFilters' | i18n }}</span>\n </ng-template>\n <button (click)=\"goToCreation()\" class=\"a-btn a-btn--primary\">{{ '@pry.filters.list.add' | i18n }}</button>\n </ng-template>\n </div>\n </ng-container>\n <ng-container *ngIf=\"currentStep === FilterSteps.CREATION || currentStep === FilterSteps.EDITION\">\n <div class=\"o-filters__content\">\n <div class=\"m-form-label-field\">\n <label for=\"filterName\" class=\"a-label\">{{ '@pry.filters.creation.name' | i18n }}</label>\n <input id=\"filterName\" class=\"a-form-field\" type=\"text\" [(ngModel)]=\"filter.name\" />\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"filterType\" class=\"a-label\">{{ '@pry.filters.creation.type' | i18n }}</label>\n <pry-select\n id=\"filterType\"\n [placeholder]=\"'@pry.filters.creation.type' | i18n\"\n [items]=\"types$ | async\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [(ngModel)]=\"filter.type\"\n (ngModelChange)=\"updateFilterType($event)\"\n >\n </pry-select>\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'date'\" class=\"m-form-label-field u-display-flex -row\">\n <label for=\"date-range\" class=\"a-label\">{{ '@pry.filters.creation.dateRange' | i18n }}</label>\n <pry-checkbox\n id=\"date-range\"\n [(ngModel)]=\"filter.hasDateRange\"\n (ngModelChange)=\"this.currentOperators$.next(getOperators())\"\n />\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'list'\" class=\"m-form-label-field\">\n <label for=\"possibleValues\" class=\"a-label\">{{ '@pry.filters.creation.values' | i18n }}</label>\n <input\n id=\"possibleValues\"\n class=\"a-form-field\"\n type=\"text\"\n [(ngModel)]=\"filter.possibleValues\"\n placeholder=\"valeur1, valeur2, valeur3\"\n />\n </div>\n <div *ngIf=\"(currentFilterComponentType$ | async) === 'autocomplete'\" class=\"m-form-label-field\">\n <label for=\"limit\" class=\"a-label\">{{ '@pry.filters.creation.limit' | i18n }}</label>\n <input id=\"limit\" class=\"a-form-field\" type=\"number\" min=\"0\" max=\"50\" [(ngModel)]=\"filter.limit\" />\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"attributes\" class=\"a-label\">{{ '@pry.filters.creation.attributes' | i18n }}</label>\n <pry-select\n id=\"attributes\"\n [multiple]=\"true\"\n [clearable]=\"true\"\n [closeOnSelect]=\"false\"\n [items]=\"attributes$ | async\"\n [ngModel]=\"filter.attributes\"\n (ngModelChange)=\"selectAttribute($event)\"\n [placeholder]=\"'@pry.filters.creation.attributes' | i18n\"\n bindLabel=\"label\"\n >\n </pry-select>\n </div>\n <div class=\"m-form-label-field\">\n <label for=\"operations\" class=\"a-label\">{{ '@pry.filters.attributes.operator' | i18n }}</label>\n <pry-select\n id=\"operations\"\n [items]=\"currentOperators$ | async\"\n [(ngModel)]=\"filter.operator\"\n [placeholder]=\"'@pry.filters.attributes.operator' | i18n\"\n bindLabel=\"label\"\n bindValue=\"value\"\n [disabled]=\"(currentFilterComponentType$ | async) === 'list'\"\n >\n </pry-select>\n </div>\n <button\n class=\"a-btn a-btn--primary\"\n (click)=\"submitFilter()\"\n [disabled]=\"!(filter.name && filter.type && filter.attributes.length !== 0 && filter.operator)\"\n type=\"submit\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </ng-container>\n </div>\n</ng-template>\n" }]
|
|
230
226
|
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Overlay }, { type: i0.ViewContainerRef }, { type: i3.FilterFactoryService }, { type: i0.Injector }]; }, propDecorators: { label: [{
|
|
231
227
|
type: Input
|
|
232
228
|
}], templateSettings: [{
|
|
@@ -236,4 +232,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
236
232
|
type: ViewChild,
|
|
237
233
|
args: ['container', { read: ViewContainerRef }]
|
|
238
234
|
}] } });
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3Rvb2xib3gvY29tcG9uZW50cy9maWx0ZXItc2V0dGluZ3MvZmlsdGVyLXNldHRpbmdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3Rvb2xib3gvY29tcG9uZW50cy9maWx0ZXItc2V0dGluZ3MvZmlsdGVyLXNldHRpbmdzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQVksS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckcsT0FBTyxFQUVMLGNBQWMsRUFDZCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUVsQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLFNBQVMsRUFLVCxlQUFlLEVBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7Ozs7O0FBRXBGLE1BQU0sQ0FBTixJQUFZLFdBSVg7QUFKRCxXQUFZ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QUFjO29CQUNqQixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0M7b0JBQ0UsT0FBTyxRQUFRLENBQUM7YUFDbkI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBdFBVLDBCQUEwQjttR0FBMUIsMEJBQTBCLGdMQUVOLFdBQVcsaUdBK0JWLGdCQUFnQixvREM3RWxELDB6TkE0SkE7OzRGRGhIYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0UscUJBQXFCOzJNQUl0QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ3dDLGdCQUFnQjtzQkFBN0QsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQStCUSxTQUFTO3NCQUE1RCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQ2xhc3MsXG4gIENsYXNzU2VsZWN0b3JzLFxuICBDb25maWdBY3Rpb25zLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFTb3VyY2UsXG4gIERhdGFTb3VyY2VTZWxlY3RvcnMsXG4gIEZpZWxkU2VsZWN0b3JzLFxuICBGaWVsZFR5cGUsXG4gIEZpbHRlcixcbiAgRmlsdGVyRmFjdG9yeVNlcnZpY2UsXG4gIEdsb2JhbE1hbmlmZXN0LFxuICBNb25vQ2xhc3NTZWFyY2hQYXlsb2FkLFxuICBOYW1lZFF1ZXJ5VHlwZXNcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBUb29sYm94QWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vdG9vbGJveC1hY3Rpb24vdG9vbGJveC1hY3Rpb24uY29tcG9uZW50JztcblxuZXhwb3J0IGVudW0gRmlsdGVyU3RlcHMge1xuICBMSVNUID0gJ2xpc3QnLFxuICBDUkVBVElPTiA9ICdjcmVhdGlvbicsXG4gIEVESVRJT04gPSAnZWRpdGlvbidcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRyaWJ1dGUge1xuICBpZDogc3RyaW5nO1xuICB0ZWNobmljYWxOYW1lOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRhdGFzb3VyY2U6IHN0cmluZztcbiAgdHlwZTogRmllbGRUeXBlO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktZmlsdGVyLXNldHRpbmdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUHJ5RmlsdGVyU2V0dGluZ3NDb21wb25lbnQgZXh0ZW5kcyBUb29sYm94QWN0aW9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgbGFiZWwgPSB0cnVlO1xuICBAVmlld0NoaWxkKCdzZXR0aW5ncycsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgdGVtcGxhdGVTZXR0aW5ncyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIG92ZXJsYXlSZWZTZXR0aW5ncz86IE92ZXJsYXlSZWY7XG4gIHNldHRpbmdzT3BlbmVkOiBib29sZWFuID0gZmFsc2U7XG4gIG1hbmlmZXN0JDogT2JzZXJ2YWJsZTxHbG9iYWxNYW5pZmVzdD47XG4gIGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gIHR5cGVzJDogT2JzZXJ2YWJsZTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdPjtcbiAgY3VycmVudEZpbHRlckNvbXBvbmVudFR5cGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gIGN1cnJlbnRTdGVwOiBGaWx0ZXJTdGVwcyA9IEZpbHRlclN0ZXBzLkxJU1Q7XG4gIHN0ZXBzID0gRmlsdGVyU3RlcHM7XG4gIGZpbHRlcjogRmlsdGVyID0ge1xuICAgIGlkOiB2NCgpLFxuICAgIG5hbWU6ICcnLFxuICAgIHR5cGU6ICcnLFxuICAgIGF0dHJpYnV0ZXM6IFtdXG4gIH07XG4gIGRhdGFzb3VyY2UkOiBPYnNlcnZhYmxlPGFueT47XG4gIG9wZXJhdG9ycyA9IFtcbiAgICB7IGxhYmVsOiAnQHByeS5zZWFyY2gub3BlcmF0b3IuZXF1YWxzU3RyaW5nJywgdmFsdWU6ICdFUVVBTFMnIH0sXG4gICAgeyBsYWJlbDogJ0Bwcnkuc2VhcmNoLm9wZXJhdG9yLm5vdEVxdWFsc1N0cmluZycsIHZhbHVlOiAnTk9UX0VRVUFMUycgfSxcbiAgICB7IGxhYmVsOiAnQHByeS5zZWFyY2gub3BlcmF0b3IuY29udGFpbnMnLCB2YWx1ZTogJ0NPTlRBSU5TJyB9LFxuICAgIHsgbGFiZWw6ICdAcHJ5LnNlYXJjaC5vcGVyYXRvci5zdGFydFdpdGgnLCB2YWx1ZTogJ1NUQVJUX1dJVEgnIH0sXG4gICAgeyBsYWJlbDogJ0Bwcnkuc2VhcmNoLm9wZXJhdG9yLmVuZFdpdGgnLCB2YWx1ZTogJ0VORF9XSVRIJyB9LFxuICAgIHsgbGFiZWw6ICdAcHJ5LnNlYXJjaC5vcGVyYXRvci5ncmVhdGVyVGhhbk51bWJlcicsIHZhbHVlOiAnR1JFQVRFUl9USEFOJyB9LFxuICAgIHsgbGFiZWw6ICdAcHJ5LnNlYXJjaC5vcGVyYXRvci5sb3dlclRoYW5OdW1iZXInLCB2YWx1ZTogJ0xPV0VSX1RIQU4nIH0sXG4gICAgeyBsYWJlbDogJ0Bwcnkuc2VhcmNoLm9wZXJhdG9yLmlubmVyQm91bmRzRGF0ZScsIHZhbHVlOiAnSU5TSURFJyB9LFxuICAgIHsgbGFiZWw6ICdAcHJ5LnNlYXJjaC5vcGVyYXRvci5vdXRlckJvdW5kc0RhdGUnLCB2YWx1ZTogJ09VVFNJREUnIH1cbiAgXTtcbiAgY3VycmVudE9wZXJhdG9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMub3BlcmF0b3JzKTtcbiAgY2xhc3NlczogQ2xhc3NbXSA9IFtdO1xuICBhdHRyaWJ1dGVzJDogT2JzZXJ2YWJsZTx7IGlkOiBzdHJpbmc7IHRlY2huaWNhbE5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZzsgZGF0YXNvdXJjZTogc3RyaW5nOyB0eXBlOiBzdHJpbmcgfVtdPjtcbiAgc2VsZWN0ZWRBdHRyaWJ1dGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4odGhpcy5maWx0ZXIuYXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGF0dHIuaWQpKTtcbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGNvbnRhaW5lciE6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBmaWx0ZXJGYWN0b3J5U2VydmljZTogRmlsdGVyRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUpO1xuICAgIHRoaXMubWFuaWZlc3QkID0gc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5nbG9iYWxNYW5pZmVzdCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMubWFuaWZlc3QkLnN1YnNjcmliZSgobWFuaWZlc3QpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJzID0gbWFuaWZlc3QuZmlsdGVycyA/IFsuLi5tYW5pZmVzdC5maWx0ZXJzXSA6IFtdO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5kYXRhc291cmNlJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5nZXREYXRhU291cmNlcyksXG4gICAgICBzdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLm5hbWVkUXVlcmllc1VzZXMpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2RhdGFTb3VyY2VzLCBkYXRhU291cmNlc1VzZWRdKSA9PlxuICAgICAgICBPYmplY3Qua2V5cyhkYXRhU291cmNlc1VzZWQpLm1hcCgoaWQpID0+ICh7XG4gICAgICAgICAgbGFiZWw6IGRhdGFTb3VyY2VzLmZpbmQoKGRhdGFTb3VyY2UpID0+IGRhdGFTb3VyY2UuaWQgPT09IGlkKT8ubmFtZSxcbiAgICAgICAgICB2YWx1ZTogaWRcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMudHlwZXMkID0gdGhpcy5maWx0ZXJGYWN0b3J5U2VydmljZS50eXBlcyQucGlwZShcbiAgICAgIG1hcCgodHlwZXMpID0+XG4gICAgICAgIHR5cGVzLm1hcCgodHlwZSkgPT4gKHtcbiAgICAgICAgICBsYWJlbDogJ0BwcnkuZmlsdGVycy50eXBlcy4nICsgdHlwZSxcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuY3VycmVudEZpbHRlckNvbXBvbmVudFR5cGUkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudE9wZXJhdG9ycyQubmV4dCh0aGlzLmdldE9wZXJhdG9ycygpKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYXR0cmlidXRlcyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmdldERhdGFTb3VyY2VzKSxcbiAgICAgIHN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMubmFtZWRRdWVyaWVzVXNlcyksXG4gICAgICBzdG9yZS5zZWxlY3QoQ2xhc3NTZWxlY3RvcnMuY2xhc3NlcyksXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJDb21wb25lbnRUeXBlJFxuICAgIF0pLnBpcGUoXG4gICAgICB3aXRoTGF0ZXN0RnJvbShzdG9yZS5zZWxlY3QoRmllbGRTZWxlY3RvcnMuZmllbGRzKSksXG4gICAgICBtYXAoKFtbZGF0YVNvdXJjZXMsIGN1cnJlbnREYXRhU291cmNlcywgY2xhc3NlcywgY29tcG9uZW50VHlwZV0sIGZpZWxkc10pID0+IHtcbiAgICAgICAgbGV0IGRhdGFTb3VyY2VzSW5QcmVzID0gZGF0YVNvdXJjZXMuZmlsdGVyKChkYXRhU291cmNlKSA9PlxuICAgICAgICAgIE9iamVjdC5rZXlzKGN1cnJlbnREYXRhU291cmNlcykuaW5jbHVkZXMoZGF0YVNvdXJjZS5pZCkgPyBkYXRhU291cmNlIDogZmFsc2VcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlczogQXR0cmlidXRlW10gPSBbXTtcbiAgICAgICAgZGF0YVNvdXJjZXNJblByZXMuZm9yRWFjaCgoZGF0YVNvdXJjZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNsYXp6ID0gdGhpcy5nZXREYXRhc291cmNlQ2xhc3MoZGF0YVNvdXJjZSwgY2xhc3Nlcyk7XG4gICAgICAgICAgY2xheno/LmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgYXR0cmlidXRlcy5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6IGF0dHIuaWQsXG4gICAgICAgICAgICAgIHRlY2huaWNhbE5hbWU6IGF0dHIudGVjaG5pY2FsTmFtZSxcbiAgICAgICAgICAgICAgbGFiZWw6IFthdHRyLm5hbWUsIGRhdGFTb3VyY2UubmFtZSwgY2xhenoubmFtZV0uam9pbignIC8gJyksXG4gICAgICAgICAgICAgIGRhdGFzb3VyY2U6IGRhdGFTb3VyY2UuaWQsXG4gICAgICAgICAgICAgIHR5cGU6IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQpPy50eXBlID8/IEZpZWxkVHlwZS5TVFJJTkdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyQXR0cmlidXRlcyhjb21wb25lbnRUeXBlLCBhdHRyaWJ1dGVzKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldERhdGFzb3VyY2VDbGFzcyhkYXRhU291cmNlOiBEYXRhU291cmNlLCBjbGFzc2VzOiBDbGFzc1tdKTogQ2xhc3MgfCB1bmRlZmluZWQge1xuICAgIGxldCBjbGF6ejogQ2xhc3MgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICBjbGF6eiA9IGNsYXNzZXMuZmluZCgoY2xhenopID0+IGNsYXp6LmlkID09PSBkYXRhU291cmNlLm9DbGFzcyk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGRhdGFTb3VyY2Uuc291cmNlVHlwZSA9PT0gJ25hbWVkUXVlcnknICYmXG4gICAgICBkYXRhU291cmNlLnJlcXVlc3QgJiZcbiAgICAgIGRhdGFTb3VyY2UucmVxdWVzdC50eXBlID09PSBOYW1lZFF1ZXJ5VHlwZXMuTU9OT19DTEFTU1xuICAgICkge1xuICAgICAgY2xhenogPSBjbGFzc2VzLmZpbmQoKGNsYXp6KSA9PiBjbGF6ei5pZCA9PT0gKGRhdGFTb3VyY2UucmVxdWVzdCBhcyBNb25vQ2xhc3NTZWFyY2hQYXlsb2FkKS5vQ2xhc3MpO1xuICAgIH1cbiAgICByZXR1cm4gY2xheno7XG4gIH1cblxuICBmaWx0ZXJBdHRyaWJ1dGVzKGNvbXBvbmVudFR5cGU6IHN0cmluZywgYXR0cmlidXRlczogQXR0cmlidXRlW10pOiBBdHRyaWJ1dGVbXSB7XG4gICAgc3dpdGNoIChjb21wb25lbnRUeXBlKSB7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZXMuZmlsdGVyKChhdHRyKSA9PiBhdHRyLnR5cGUgPT09IEZpZWxkVHlwZS5JTlNUQU5UKTtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLmZpbHRlcigoYXR0cikgPT4gW0ZpZWxkVHlwZS5JTlRFR0VSLCBGaWVsZFR5cGUuREVDSU1BTCwgRmllbGRUeXBlLkxPTkddLmluY2x1ZGVzKGF0dHIudHlwZSkpO1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLmZpbHRlcigoYXR0cikgPT4gW0ZpZWxkVHlwZS5TVFJJTkcsIEZpZWxkVHlwZS5LRVlXT1JEXS5pbmNsdWRlcyhhdHRyLnR5cGUpKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0cmlidXRlJC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlVHlwZSA9IGF0dHJpYnV0ZXMuZmluZCgoYXR0cikgPT4gYXR0ci5pZCA9PT0gdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSQudmFsdWVbMF0pPy50eXBlO1xuICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLmZpbHRlcigoYXR0cikgPT4gYXR0ci50eXBlID09PSBhdHRyaWJ1dGVUeXBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9XG4gIH1cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxGaWx0ZXJbXT4pIHtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5maWx0ZXJzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICB9XG5cbiAgdG9nZ2xlU2V0dGluZ3MoKSB7XG4gICAgdGhpcy5zZXR0aW5nc09wZW5lZCA9ICF0aGlzLnNldHRpbmdzT3BlbmVkO1xuICAgIGlmICh0aGlzLnNldHRpbmdzT3BlbmVkKSB7XG4gICAgICB0aGlzLm9wZW5TZXR0aW5ncygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWZTZXR0aW5ncz8uZGlzcG9zZSgpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmU2V0dGluZ3MgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSB9KSk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2V0RmlsdGVycyh7IGZpbHRlcnM6IHRoaXMuZmlsdGVycyB9KSk7XG4gICAgICB0aGlzLmdvQmFjaygpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5TZXR0aW5ncygpIHtcbiAgICB0aGlzLm92ZXJsYXlSZWZTZXR0aW5ncyA9IHRoaXMub3ZlcmxheS5jcmVhdGUoXG4gICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBwYW5lbENsYXNzOiBbJ28tbW9kYWwtd3JhcHBlcicsICdvLXNlbGVjdC1ncmlkLWxheW91dC1tb2RhbC13cmFwcGVyJ10sXG4gICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCdcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuYWRkaW5nT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgfSkpO1xuICAgIHRoaXMub3ZlcmxheVJlZlNldHRpbmdzLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZ29CYWNrKCk7XG4gICAgICB0aGlzLnRvZ2dsZVNldHRpbmdzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5vdmVybGF5UmVmU2V0dGluZ3MuYXR0YWNoKG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRlbXBsYXRlU2V0dGluZ3MsIHRoaXMudmlld0NvbnRhaW5lclJlZikpO1xuICB9XG5cbiAgdXBkYXRlRmlsdGVyVHlwZSgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyLnR5cGUgPSAkZXZlbnQ7XG4gICAgdGhpcy5maWx0ZXIub3BlcmF0b3IgPSAkZXZlbnQgPT09ICdsaXN0JyA/ICdFUVVBTFMnIDogdGhpcy5maWx0ZXIub3BlcmF0b3I7XG4gICAgaWYgKHRoaXMuZmlsdGVyLnR5cGUgIT09ICcnICYmIHRoaXMuY29udGFpbmVyKSB7XG4gICAgICBsZXQgY29tcG9uZW50ID0gdGhpcy5maWx0ZXJGYWN0b3J5U2VydmljZS5nZW5lcmF0ZUZpbHRlcih0aGlzLmZpbHRlci50eXBlLCB0aGlzLmluamVjdG9yLCB0aGlzLmNvbnRhaW5lcik7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICBjb21wb25lbnQuc3Vic2NyaWJlKChjb21wb25lbnRSZWYpID0+IHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJDb21wb25lbnRUeXBlJC5uZXh0KGNvbXBvbmVudFJlZi5pbnN0YW5jZS50eXBlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyLmxpbWl0ID0gdGhpcy5maWx0ZXIudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgPyB0aGlzLmZpbHRlci5saW1pdCA/PyAxMCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEZpbHRlckF0dHJpYnV0ZXMoZmlsdGVyOiBGaWx0ZXIsIGF0dHJDb3VudDogbnVtYmVyKSB7XG4gICAgYXR0ckNvdW50ID0gYXR0ckNvdW50IDw9IGZpbHRlci5hdHRyaWJ1dGVzLmxlbmd0aCA/IGF0dHJDb3VudCA6IGZpbHRlci5hdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICByZXR1cm4gZmlsdGVyLmF0dHJpYnV0ZXNcbiAgICAgIC5tYXAoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSlcbiAgICAgIC5zbGljZSgwLCBhdHRyQ291bnQpXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIGdvQmFjaygpIHtcbiAgICB0aGlzLmZpbHRlciA9IHtcbiAgICAgIGlkOiB2NCgpLFxuICAgICAgbmFtZTogJycsXG4gICAgICB0eXBlOiAnJyxcbiAgICAgIGF0dHJpYnV0ZXM6IFtdXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRTdGVwID0gRmlsdGVyU3RlcHMuTElTVDtcbiAgfVxuXG4gIGdvVG9FZGl0aW9uKGZpbHRlcjogRmlsdGVyKSB7XG4gICAgdGhpcy5maWx0ZXIgPSB7IC4uLmZpbHRlciB9O1xuICAgIHRoaXMuY3VycmVudFN0ZXAgPSBGaWx0ZXJTdGVwcy5FRElUSU9OO1xuICB9XG5cbiAgZ29Ub0NyZWF0aW9uKCkge1xuICAgIHRoaXMuY3VycmVudEZpbHRlckNvbXBvbmVudFR5cGUkLm5leHQoJycpO1xuICAgIHRoaXMuY3VycmVudFN0ZXAgPSBGaWx0ZXJTdGVwcy5DUkVBVElPTjtcbiAgfVxuXG4gIHN1Ym1pdEZpbHRlcigpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMudXBkYXRlRmlsdGVycyh7IGZpbHRlcjogdGhpcy5maWx0ZXIgfSkpO1xuICAgIHRoaXMuZ29CYWNrKCk7XG4gIH1cblxuICBzZWxlY3RBdHRyaWJ1dGUoJGV2ZW50OiBBdHRyaWJ1dGVbXSkge1xuICAgIHRoaXMuZmlsdGVyLmF0dHJpYnV0ZXMgPSAkZXZlbnQ7XG4gICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSQubmV4dCgkZXZlbnQubWFwKChhdHRyKSA9PiBhdHRyLmlkKSk7XG4gIH1cblxuICBkZWxldGVGaWx0ZXIoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5yZW1vdmVGaWx0ZXIoeyBpZCB9KSk7XG4gIH1cblxuICBnZXRPcGVyYXRvcnMoKTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSB7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JzLmZpbHRlcigob3BlcmF0b3IpID0+IHtcbiAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50RmlsdGVyQ29tcG9uZW50VHlwZSQudmFsdWUpIHtcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyLmhhc0RhdGVSYW5nZVxuICAgICAgICAgICAgPyBbJ0lOU0lERScsICdPVVRTSURFJ10uaW5jbHVkZXMob3BlcmF0b3IudmFsdWUpXG4gICAgICAgICAgICA6IFsnRVFVQUxTJywgJ05PVF9FUVVBTFMnLCAnR1JFQVRFUl9USEFOJywgJ0xPV0VSX1RIQU4nXS5pbmNsdWRlcyhvcGVyYXRvci52YWx1ZSk7XG4gICAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICAgIHJldHVybiBbJ0VRVUFMUyddLmluY2x1ZGVzKG9wZXJhdG9yLnZhbHVlKTtcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICByZXR1cm4gWydFUVVBTFMnLCAnTk9UX0VRVUFMUycsICdHUkVBVEVSX1RIQU4nLCAnTE9XRVJfVEhBTiddLmluY2x1ZGVzKG9wZXJhdG9yLnZhbHVlKTtcbiAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgcmV0dXJuIFsnQ09OVEFJTlMnLCAnRVFVQUxTJywgJ05PVF9FUVVBTFMnLCAnU1RBUlRfV0lUSCcsICdFTkRfV0lUSCddLmluY2x1ZGVzKG9wZXJhdG9yLnZhbHVlKTtcbiAgICAgICAgY2FzZSAnYXV0b2NvbXBsZXRlJzpcbiAgICAgICAgICByZXR1cm4gWydFUVVBTFMnXS5pbmNsdWRlcyhvcGVyYXRvci52YWx1ZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG9wZXJhdG9yO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEZpbHRlclN0ZXBzID0gRmlsdGVyU3RlcHM7XG59XG4iLCI8cHJ5LXRvb2xib3gtY3NzPjwvcHJ5LXRvb2xib3gtY3NzPlxuPGRpdiBjbGFzcz1cInNhdmUtbWFuaWZlc3QtY29udGFpbmVyXCI+XG4gIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgPG5nLXRlbXBsYXRlICNjb250YWluZXI+PC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnkgLXNpemUtbWRcIlxuICAgIFtkaXNhYmxlZF09XCIoYXR0cmlidXRlcyQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMFwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZVNldHRpbmdzKClcIlxuICAgIGFyaWEtaGFzcG9wdXA9XCJkaWFsb2dcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxhYmVsXCI+e3sgJ0BwcnkuZmlsdGVycy5sYWJlbCcgfCBpMThuIH19PC9uZy1jb250YWluZXI+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2V0dGluZ3M+XG4gIDxkaXYgY2xhc3M9XCJvLWZpbHRlcnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1maWx0ZXJzX19oZWFkZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50U3RlcCA9PT0gRmlsdGVyU3RlcHMuTElTVFwiPlxuICAgICAgICA8aDI+e3sgJ0BwcnkuZmlsdGVycy5sYWJlbCcgfCBpMThuIH19PC9oMj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRTdGVwID09PSBGaWx0ZXJTdGVwcy5DUkVBVElPTiB8fCBjdXJyZW50U3RlcCA9PT0gRmlsdGVyU3RlcHMuRURJVElPTlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLXJvdyAtYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZ29CYWNrKClcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJiYWNrLWJ1dHRvblwiPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjaGV2cm9uX3JpZ2h0XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8aDI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAoY3VycmVudFN0ZXAgPT09IEZpbHRlclN0ZXBzLkNSRUFUSU9OID8gJ0BwcnkuZmlsdGVycy5jcmVhdGlvbi5jcmVhdGUnIDogJ0BwcnkuZmlsdGVycy5jcmVhdGlvbi51cGRhdGUnKVxuICAgICAgICAgICAgICAgIHwgaTE4blxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2gyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlU2V0dGluZ3MoKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiPjwvcHJ5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFN0ZXAgPT09IEZpbHRlclN0ZXBzLkxJU1RcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWZpbHRlcnNfX2NvbnRlbnRcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIihhdHRyaWJ1dGVzJCB8IGFzeW5jKT8ubGVuZ3RoID09PSAwOyBlbHNlIGF0dHJpYnV0ZXNFeGlzdHNcIiBjbGFzcz1cImEtdGFibGUtd3JhcHBlclwiPjwvZGl2PlxuICAgICAgICA8bmctdGVtcGxhdGUgI2F0dHJpYnV0ZXNFeGlzdHM+XG4gICAgICAgICAgPHRhYmxlICpuZ0lmPVwiZmlsdGVycy5sZW5ndGggPiAwOyBlbHNlIG5vRmlsdGVyc1wiIGNsYXNzPVwiYS10YWJsZVwiPlxuICAgICAgICAgICAgPHRib2R5IGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwiZmlsdGVyc1wiIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGZpbHRlcnNcIiBjbGFzcz1cIm8tZmlsdGVyc19fZmlsdGVyXCIgY2RrRHJhZz5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBmaWx0ZXIubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldEZpbHRlckF0dHJpYnV0ZXMoZmlsdGVyLCAzKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIiAoY2xpY2spPVwiZGVsZXRlRmlsdGVyKGZpbHRlci5pZClcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0BwcnkuYWN0aW9uLmRlbGV0ZScgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIiAoY2xpY2spPVwiZ29Ub0VkaXRpb24oZmlsdGVyKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQHByeS5maWx0ZXJzLmxpc3QubW9kaWZ5JyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNka0RyYWdIYW5kbGU+XG4gICAgICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImRyYWdfaW5kaWNhdG9yXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9GaWx0ZXJzPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvLWZpbHRlcnNfX25vLWZpbHRlcnNcIj57eyAnQHByeS5maWx0ZXJzLm5vRmlsdGVycycgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZ29Ub0NyZWF0aW9uKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+e3sgJ0BwcnkuZmlsdGVycy5saXN0LmFkZCcgfCBpMThuIH19PC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFN0ZXAgPT09IEZpbHRlclN0ZXBzLkNSRUFUSU9OIHx8IGN1cnJlbnRTdGVwID09PSBGaWx0ZXJTdGVwcy5FRElUSU9OXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1maWx0ZXJzX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZmlsdGVyTmFtZVwiIGNsYXNzPVwiYS1sYWJlbFwiPnt7ICdAcHJ5LmZpbHRlcnMuY3JlYXRpb24ubmFtZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgaWQ9XCJmaWx0ZXJOYW1lXCIgY2xhc3M9XCJhLWZvcm0tZmllbGRcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiZmlsdGVyLm5hbWVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmaWx0ZXJUeXBlXCIgY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZmlsdGVycy5jcmVhdGlvbi50eXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICBpZD1cImZpbHRlclR5cGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAcHJ5LmZpbHRlcnMuY3JlYXRpb24udHlwZScgfCBpMThuXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJ0eXBlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlci50eXBlXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUZpbHRlclR5cGUoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvcHJ5LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIoY3VycmVudEZpbHRlckNvbXBvbmVudFR5cGUkIHwgYXN5bmMpID09PSAnZGF0ZSdcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCB1LWRpc3BsYXktZmxleCAtcm93XCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImRhdGUtcmFuZ2VcIiBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5maWx0ZXJzLmNyZWF0aW9uLmRhdGVSYW5nZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICBpZD1cImRhdGUtcmFuZ2VcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXIuaGFzRGF0ZVJhbmdlXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRoaXMuY3VycmVudE9wZXJhdG9ycyQubmV4dChnZXRPcGVyYXRvcnMoKSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiKGN1cnJlbnRGaWx0ZXJDb21wb25lbnRUeXBlJCB8IGFzeW5jKSA9PT0gJ2xpc3QnXCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwicG9zc2libGVWYWx1ZXNcIiBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5maWx0ZXJzLmNyZWF0aW9uLnZhbHVlcycgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicG9zc2libGVWYWx1ZXNcIlxuICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXIucG9zc2libGVWYWx1ZXNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ2YWxldXIxLCB2YWxldXIyLCB2YWxldXIzXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIihjdXJyZW50RmlsdGVyQ29tcG9uZW50VHlwZSQgfCBhc3luYykgPT09ICdhdXRvY29tcGxldGUnXCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwibGltaXRcIiBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5maWx0ZXJzLmNyZWF0aW9uLmxpbWl0JyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCBpZD1cImxpbWl0XCIgY2xhc3M9XCJhLWZvcm0tZmllbGRcIiB0eXBlPVwibnVtYmVyXCIgbWluPVwiMFwiIG1heD1cIjUwXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXIubGltaXRcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdHRyaWJ1dGVzXCIgY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZmlsdGVycy5jcmVhdGlvbi5hdHRyaWJ1dGVzJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICBpZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2Nsb3NlT25TZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2l0ZW1zXT1cImF0dHJpYnV0ZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyLmF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0QXR0cmlidXRlKCRldmVudClcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAcHJ5LmZpbHRlcnMuY3JlYXRpb24uYXR0cmlidXRlcycgfCBpMThuXCJcbiAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvcHJ5LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwib3BlcmF0aW9uc1wiIGNsYXNzPVwiYS1sYWJlbFwiPnt7ICdAcHJ5LmZpbHRlcnMuYXR0cmlidXRlcy5vcGVyYXRvcicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJvcGVyYXRpb25zXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJjdXJyZW50T3BlcmF0b3JzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyLm9wZXJhdG9yXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQHByeS5maWx0ZXJzLmF0dHJpYnV0ZXMub3BlcmF0b3InIHwgaTE4blwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGN1cnJlbnRGaWx0ZXJDb21wb25lbnRUeXBlJCB8IGFzeW5jKSA9PT0gJ2xpc3QnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIlxuICAgICAgICAgIChjbGljayk9XCJzdWJtaXRGaWx0ZXIoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiEoZmlsdGVyLm5hbWUgJiYgZmlsdGVyLnR5cGUgJiYgZmlsdGVyLmF0dHJpYnV0ZXMubGVuZ3RoICE9PSAwICYmIGZpbHRlci5vcGVyYXRvcilcIlxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC52YWxpZGF0ZScgfCBpMThuIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3Rvb2xib3gvY29tcG9uZW50cy9maWx0ZXItc2V0dGluZ3MvZmlsdGVyLXNldHRpbmdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3Rvb2xib3gvY29tcG9uZW50cy9maWx0ZXItc2V0dGluZ3MvZmlsdGVyLXNldHRpbmdzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQVcsYUFBYSxFQUFjLE1BQU0sc0JBQXNCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQVksS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckcsT0FBTyxFQUVMLGNBQWMsRUFDZCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUVsQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLFNBQVMsRUFLVCxlQUFlLEVBQ2hCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDOzs7Ozs7Ozs7O0FBRXBGLE1BQU0sQ0FBTixJQUFZLFdBSVg7QUFKRCxXQUFZ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QUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkErQlEsU0FBUztzQkFBNUQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5Q29uZmlnLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29uZmlnQWN0aW9ucyxcbiAgRGFzaGJvYXJkQWN0aW9ucyxcbiAgRGFzaGJvYXJkU2VsZWN0b3JzLFxuICBEYXRhU291cmNlLFxuICBEYXRhU291cmNlU2VsZWN0b3JzLFxuICBGaWVsZFNlbGVjdG9ycyxcbiAgRmllbGRUeXBlLFxuICBGaWx0ZXIsXG4gIEZpbHRlckZhY3RvcnlTZXJ2aWNlLFxuICBHbG9iYWxNYW5pZmVzdCxcbiAgTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCxcbiAgTmFtZWRRdWVyeVR5cGVzXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgd2l0aExhdGVzdEZyb20gfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyB2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgVG9vbGJveEFjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3Rvb2xib3gtYWN0aW9uL3Rvb2xib3gtYWN0aW9uLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBlbnVtIEZpbHRlclN0ZXBzIHtcbiAgTElTVCA9ICdsaXN0JyxcbiAgQ1JFQVRJT04gPSAnY3JlYXRpb24nLFxuICBFRElUSU9OID0gJ2VkaXRpb24nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXR0cmlidXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgdGVjaG5pY2FsTmFtZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBkYXRhc291cmNlOiBzdHJpbmc7XG4gIHR5cGU6IEZpZWxkVHlwZTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWZpbHRlci1zZXR0aW5ncycsXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeUZpbHRlclNldHRpbmdzQ29tcG9uZW50IGV4dGVuZHMgVG9vbGJveEFjdGlvbkNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGxhYmVsID0gdHJ1ZTtcbiAgQFZpZXdDaGlsZCgnc2V0dGluZ3MnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHRlbXBsYXRlU2V0dGluZ3MhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBvdmVybGF5UmVmU2V0dGluZ3M/OiBPdmVybGF5UmVmO1xuICBzZXR0aW5nc09wZW5lZDogYm9vbGVhbiA9IGZhbHNlO1xuICBtYW5pZmVzdCQ6IE9ic2VydmFibGU8R2xvYmFsTWFuaWZlc3Q+O1xuICBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuICB0eXBlcyQ6IE9ic2VydmFibGU8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXT47XG4gIGN1cnJlbnRGaWx0ZXJDb21wb25lbnRUeXBlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuICBjdXJyZW50U3RlcDogRmlsdGVyU3RlcHMgPSBGaWx0ZXJTdGVwcy5MSVNUO1xuICBzdGVwcyA9IEZpbHRlclN0ZXBzO1xuICBmaWx0ZXI6IEZpbHRlciA9IHtcbiAgICBpZDogdjQoKSxcbiAgICBuYW1lOiAnJyxcbiAgICB0eXBlOiAnJyxcbiAgICBhdHRyaWJ1dGVzOiBbXVxuICB9O1xuICBkYXRhc291cmNlJDogT2JzZXJ2YWJsZTxhbnk+O1xuICBvcGVyYXRvcnMgPSBbXG4gICAgeyBsYWJlbDogJ0Bwcnkuc2VhcmNoLm9wZXJhdG9yLmVxdWFsc1N0cmluZycsIHZhbHVlOiAnRVFVQUxTJyB9LFxuICAgIHsgbGFiZWw6ICdAcHJ5LnNlYXJjaC5vcGVyYXRvci5ub3RFcXVhbHNTdHJpbmcnLCB2YWx1ZTogJ05PVF9FUVVBTFMnIH0sXG4gICAgeyBsYWJlbDogJ0Bwcnkuc2VhcmNoLm9wZXJhdG9yLmNvbnRhaW5zJywgdmFsdWU6ICdDT05UQUlOUycgfSxcbiAgICB7IGxhYmVsOiAnQHByeS5zZWFyY2gub3BlcmF0b3Iuc3RhcnRXaXRoJywgdmFsdWU6ICdTVEFSVF9XSVRIJyB9LFxuICAgIHsgbGFiZWw6ICdAcHJ5LnNlYXJjaC5vcGVyYXRvci5lbmRXaXRoJywgdmFsdWU6ICdFTkRfV0lUSCcgfSxcbiAgICB7IGxhYmVsOiAnQHByeS5zZWFyY2gub3BlcmF0b3IuZ3JlYXRlclRoYW5OdW1iZXInLCB2YWx1ZTogJ0dSRUFURVJfVEhBTicgfSxcbiAgICB7IGxhYmVsOiAnQHByeS5zZWFyY2gub3BlcmF0b3IubG93ZXJUaGFuTnVtYmVyJywgdmFsdWU6ICdMT1dFUl9USEFOJyB9LFxuICAgIHsgbGFiZWw6ICdAcHJ5LnNlYXJjaC5vcGVyYXRvci5pbm5lckJvdW5kc0RhdGUnLCB2YWx1ZTogJ0lOU0lERScgfSxcbiAgICB7IGxhYmVsOiAnQHByeS5zZWFyY2gub3BlcmF0b3Iub3V0ZXJCb3VuZHNEYXRlJywgdmFsdWU6ICdPVVRTSURFJyB9XG4gIF07XG4gIGN1cnJlbnRPcGVyYXRvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLm9wZXJhdG9ycyk7XG4gIGNsYXNzZXM6IENsYXNzW10gPSBbXTtcbiAgYXR0cmlidXRlcyQ6IE9ic2VydmFibGU8eyBpZDogc3RyaW5nOyB0ZWNobmljYWxOYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGRhdGFzb3VyY2U6IHN0cmluZzsgdHlwZTogc3RyaW5nIH1bXT47XG4gIHNlbGVjdGVkQXR0cmlidXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KHRoaXMuZmlsdGVyLmF0dHJpYnV0ZXMubWFwKChhdHRyKSA9PiBhdHRyLmlkKSk7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBjb250YWluZXIhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgZmlsdGVyRmFjdG9yeVNlcnZpY2U6IEZpbHRlckZhY3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge1xuICAgIHN1cGVyKHN0b3JlKTtcbiAgICB0aGlzLm1hbmlmZXN0JCA9IHN0b3JlLnNlbGVjdChEYXNoYm9hcmRTZWxlY3RvcnMuZ2xvYmFsTWFuaWZlc3QpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm1hbmlmZXN0JC5zdWJzY3JpYmUoKG1hbmlmZXN0KSA9PiB7XG4gICAgICAgIHRoaXMuZmlsdGVycyA9IG1hbmlmZXN0LmZpbHRlcnMgPyBbLi4ubWFuaWZlc3QuZmlsdGVyc10gOiBbXTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuZGF0YXNvdXJjZSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZ2V0RGF0YVNvdXJjZXMpLFxuICAgICAgc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5uYW1lZFF1ZXJpZXNVc2VzKVxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtkYXRhU291cmNlcywgZGF0YVNvdXJjZXNVc2VkXSkgPT5cbiAgICAgICAgT2JqZWN0LmtleXMoZGF0YVNvdXJjZXNVc2VkKS5tYXAoKGlkKSA9PiAoe1xuICAgICAgICAgIGxhYmVsOiBkYXRhU291cmNlcy5maW5kKChkYXRhU291cmNlKSA9PiBkYXRhU291cmNlLmlkID09PSBpZCk/Lm5hbWUsXG4gICAgICAgICAgdmFsdWU6IGlkXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnR5cGVzJCA9IHRoaXMuZmlsdGVyRmFjdG9yeVNlcnZpY2UudHlwZXMkLnBpcGUoXG4gICAgICBtYXAoKHR5cGVzKSA9PlxuICAgICAgICB0eXBlcy5tYXAoKHR5cGUpID0+ICh7XG4gICAgICAgICAgbGFiZWw6ICdAcHJ5LmZpbHRlcnMudHlwZXMuJyArIHR5cGUsXG4gICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgfSkpXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJDb21wb25lbnRUeXBlJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcGVyYXRvcnMkLm5leHQodGhpcy5nZXRPcGVyYXRvcnMoKSk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmF0dHJpYnV0ZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICBzdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5nZXREYXRhU291cmNlcyksXG4gICAgICBzdG9yZS5zZWxlY3QoRGFzaGJvYXJkU2VsZWN0b3JzLm5hbWVkUXVlcmllc1VzZXMpLFxuICAgICAgc3RvcmUuc2VsZWN0KENsYXNzU2VsZWN0b3JzLmNsYXNzZXMpLFxuICAgICAgdGhpcy5jdXJyZW50RmlsdGVyQ29tcG9uZW50VHlwZSRcbiAgICBdKS5waXBlKFxuICAgICAgd2l0aExhdGVzdEZyb20oc3RvcmUuc2VsZWN0KEZpZWxkU2VsZWN0b3JzLmZpZWxkcykpLFxuICAgICAgbWFwKChbW2RhdGFTb3VyY2VzLCBjdXJyZW50RGF0YVNvdXJjZXMsIGNsYXNzZXMsIGNvbXBvbmVudFR5cGVdLCBmaWVsZHNdKSA9PiB7XG4gICAgICAgIGxldCBkYXRhU291cmNlc0luUHJlcyA9IGRhdGFTb3VyY2VzLmZpbHRlcigoZGF0YVNvdXJjZSkgPT5cbiAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50RGF0YVNvdXJjZXMpLmluY2x1ZGVzKGRhdGFTb3VyY2UuaWQpID8gZGF0YVNvdXJjZSA6IGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdID0gW107XG4gICAgICAgIGRhdGFTb3VyY2VzSW5QcmVzLmZvckVhY2goKGRhdGFTb3VyY2UpID0+IHtcbiAgICAgICAgICBjb25zdCBjbGF6eiA9IHRoaXMuZ2V0RGF0YXNvdXJjZUNsYXNzKGRhdGFTb3VyY2UsIGNsYXNzZXMpO1xuICAgICAgICAgIGNsYXp6Py5hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXMucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBhdHRyLmlkLFxuICAgICAgICAgICAgICB0ZWNobmljYWxOYW1lOiBhdHRyLnRlY2huaWNhbE5hbWUsXG4gICAgICAgICAgICAgIGxhYmVsOiBbYXR0ci5uYW1lLCBkYXRhU291cmNlLm5hbWUsIGNsYXp6Lm5hbWVdLmpvaW4oJyAvICcpLFxuICAgICAgICAgICAgICBkYXRhc291cmNlOiBkYXRhU291cmNlLmlkLFxuICAgICAgICAgICAgICB0eXBlOiBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyLmZpZWxkKT8udHlwZSA/PyBGaWVsZFR5cGUuU1RSSU5HXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckF0dHJpYnV0ZXMoY29tcG9uZW50VHlwZSwgYXR0cmlidXRlcyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBnZXREYXRhc291cmNlQ2xhc3MoZGF0YVNvdXJjZTogRGF0YVNvdXJjZSwgY2xhc3NlczogQ2xhc3NbXSk6IENsYXNzIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgY2xheno6IENsYXNzIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChkYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICdkYXRhc2V0Jykge1xuICAgICAgY2xhenogPSBjbGFzc2VzLmZpbmQoKGNsYXp6KSA9PiBjbGF6ei5pZCA9PT0gZGF0YVNvdXJjZS5vQ2xhc3MpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBkYXRhU291cmNlLnNvdXJjZVR5cGUgPT09ICduYW1lZFF1ZXJ5JyAmJlxuICAgICAgZGF0YVNvdXJjZS5yZXF1ZXN0ICYmXG4gICAgICBkYXRhU291cmNlLnJlcXVlc3QudHlwZSA9PT0gTmFtZWRRdWVyeVR5cGVzLk1PTk9fQ0xBU1NcbiAgICApIHtcbiAgICAgIGNsYXp6ID0gY2xhc3Nlcy5maW5kKChjbGF6eikgPT4gY2xhenouaWQgPT09IChkYXRhU291cmNlLnJlcXVlc3QgYXMgTW9ub0NsYXNzU2VhcmNoUGF5bG9hZCkub0NsYXNzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXp6O1xuICB9XG5cbiAgZmlsdGVyQXR0cmlidXRlcyhjb21wb25lbnRUeXBlOiBzdHJpbmcsIGF0dHJpYnV0ZXM6IEF0dHJpYnV0ZVtdKTogQXR0cmlidXRlW10ge1xuICAgIHN3aXRjaCAoY29tcG9uZW50VHlwZSkge1xuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVzLmZpbHRlcigoYXR0cikgPT4gYXR0ci50eXBlID09PSBGaWVsZFR5cGUuSU5TVEFOVCk7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5maWx0ZXIoKGF0dHIpID0+IFtGaWVsZFR5cGUuSU5URUdFUiwgRmllbGRUeXBlLkRFQ0lNQUwsIEZpZWxkVHlwZS5MT05HXS5pbmNsdWRlcyhhdHRyLnR5cGUpKTtcbiAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICByZXR1cm4gYXR0cmlidXRlcy5maWx0ZXIoKGF0dHIpID0+IFtGaWVsZFR5cGUuU1RSSU5HLCBGaWVsZFR5cGUuS0VZV09SRF0uaW5jbHVkZXMoYXR0ci50eXBlKSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9XG4gIH1cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxGaWx0ZXJbXT4pIHtcbiAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5maWx0ZXJzLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICB9XG5cbiAgdG9nZ2xlU2V0dGluZ3MoKSB7XG4gICAgdGhpcy5zZXR0aW5nc09wZW5lZCA9ICF0aGlzLnNldHRpbmdzT3BlbmVkO1xuICAgIGlmICh0aGlzLnNldHRpbmdzT3BlbmVkKSB7XG4gICAgICB0aGlzLm9wZW5TZXR0aW5ncygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWZTZXR0aW5ncz8uZGlzcG9zZSgpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmU2V0dGluZ3MgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuY2xvc2VPdmVybGF5KHsgaWQ6IHRoaXMuY29uc3RydWN0b3IubmFtZSB9KSk7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2V0RmlsdGVycyh7IGZpbHRlcnM6IHRoaXMuZmlsdGVycyB9KSk7XG4gICAgICB0aGlzLmdvQmFjaygpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5TZXR0aW5ncygpIHtcbiAgICB0aGlzLm92ZXJsYXlSZWZTZXR0aW5ncyA9IHRoaXMub3ZlcmxheS5jcmVhdGUoXG4gICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBwYW5lbENsYXNzOiBbJ28tbW9kYWwtd3JhcHBlcicsICdvLXNlbGVjdC1ncmlkLWxheW91dC1tb2RhbC13cmFwcGVyJ10sXG4gICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcCdcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKENvbmZpZ0FjdGlvbnMuYWRkaW5nT3ZlcmxheSh7IGlkOiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgfSkpO1xuICAgIHRoaXMub3ZlcmxheVJlZlNldHRpbmdzLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZ29CYWNrKCk7XG4gICAgICB0aGlzLnRvZ2dsZVNldHRpbmdzKCk7XG4gICAgfSk7XG4gICAgdGhpcy5vdmVybGF5UmVmU2V0dGluZ3MuYXR0YWNoKG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRlbXBsYXRlU2V0dGluZ3MsIHRoaXMudmlld0NvbnRhaW5lclJlZikpO1xuICB9XG5cbiAgdXBkYXRlRmlsdGVyVHlwZSgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsdGVyLnR5cGUgPSAkZXZlbnQ7XG4gICAgdGhpcy5maWx0ZXIub3BlcmF0b3IgPSAkZXZlbnQgPT09ICdsaXN0JyA/ICdFUVVBTFMnIDogdGhpcy5maWx0ZXIub3BlcmF0b3I7XG4gICAgaWYgKHRoaXMuZmlsdGVyLnR5cGUgIT09ICcnICYmIHRoaXMuY29udGFpbmVyKSB7XG4gICAgICBsZXQgY29tcG9uZW50ID0gdGhpcy5maWx0ZXJGYWN0b3J5U2VydmljZS5nZW5lcmF0ZUZpbHRlcih0aGlzLmZpbHRlci50eXBlLCB0aGlzLmluamVjdG9yLCB0aGlzLmNvbnRhaW5lcik7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICBjb21wb25lbnQuc3Vic2NyaWJlKChjb21wb25lbnRSZWYpID0+IHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRGaWx0ZXJDb21wb25lbnRUeXBlJC5uZXh0KGNvbXBvbmVudFJlZi5pbnN0YW5jZS50eXBlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZmlsdGVyLmxpbWl0ID0gdGhpcy5maWx0ZXIudHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgPyB0aGlzLmZpbHRlci5saW1pdCA/PyAxMCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldEZpbHRlckF0dHJpYnV0ZXMoZmlsdGVyOiBGaWx0ZXIsIGF0dHJDb3VudDogbnVtYmVyKSB7XG4gICAgYXR0ckNvdW50ID0gYXR0ckNvdW50IDw9IGZpbHRlci5hdHRyaWJ1dGVzLmxlbmd0aCA/IGF0dHJDb3VudCA6IGZpbHRlci5hdHRyaWJ1dGVzLmxlbmd0aDtcbiAgICByZXR1cm4gZmlsdGVyLmF0dHJpYnV0ZXNcbiAgICAgIC5tYXAoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSlcbiAgICAgIC5zbGljZSgwLCBhdHRyQ291bnQpXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIGdvQmFjaygpIHtcbiAgICB0aGlzLmZpbHRlciA9IHtcbiAgICAgIGlkOiB2NCgpLFxuICAgICAgbmFtZTogJycsXG4gICAgICB0eXBlOiAnJyxcbiAgICAgIGF0dHJpYnV0ZXM6IFtdXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRTdGVwID0gRmlsdGVyU3RlcHMuTElTVDtcbiAgfVxuXG4gIGdvVG9FZGl0aW9uKGZpbHRlcjogRmlsdGVyKSB7XG4gICAgdGhpcy5maWx0ZXIgPSB7IC4uLmZpbHRlciB9O1xuICAgIHRoaXMuY3VycmVudFN0ZXAgPSBGaWx0ZXJTdGVwcy5FRElUSU9OO1xuICB9XG5cbiAgZ29Ub0NyZWF0aW9uKCkge1xuICAgIHRoaXMuY3VycmVudEZpbHRlckNvbXBvbmVudFR5cGUkLm5leHQoJycpO1xuICAgIHRoaXMuY3VycmVudFN0ZXAgPSBGaWx0ZXJTdGVwcy5DUkVBVElPTjtcbiAgfVxuXG4gIHN1Ym1pdEZpbHRlcigpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMudXBkYXRlRmlsdGVycyh7IGZpbHRlcjogdGhpcy5maWx0ZXIgfSkpO1xuICAgIHRoaXMuZ29CYWNrKCk7XG4gIH1cblxuICBzZWxlY3RBdHRyaWJ1dGUoJGV2ZW50OiBBdHRyaWJ1dGVbXSkge1xuICAgIHRoaXMuZmlsdGVyLmF0dHJpYnV0ZXMgPSAkZXZlbnQ7XG4gICAgdGhpcy5zZWxlY3RlZEF0dHJpYnV0ZSQubmV4dCgkZXZlbnQubWFwKChhdHRyKSA9PiBhdHRyLmlkKSk7XG4gIH1cblxuICBkZWxldGVGaWx0ZXIoaWQ6IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5yZW1vdmVGaWx0ZXIoeyBpZCB9KSk7XG4gIH1cblxuICBnZXRPcGVyYXRvcnMoKTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSB7XG4gICAgcmV0dXJuIHRoaXMub3BlcmF0b3JzLmZpbHRlcigob3BlcmF0b3IpID0+IHtcbiAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50RmlsdGVyQ29tcG9uZW50VHlwZSQudmFsdWUpIHtcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyLmhhc0RhdGVSYW5nZVxuICAgICAgICAgICAgPyBbJ0lOU0lERScsICdPVVRTSURFJ10uaW5jbHVkZXMob3BlcmF0b3IudmFsdWUpXG4gICAgICAgICAgICA6IFsnRVFVQUxTJywgJ05PVF9FUVVBTFMnLCAnR1JFQVRFUl9USEFOJywgJ0xPV0VSX1RIQU4nXS5pbmNsdWRlcyhvcGVyYXRvci52YWx1ZSk7XG4gICAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICAgIHJldHVybiBbJ0VRVUFMUyddLmluY2x1ZGVzKG9wZXJhdG9yLnZhbHVlKTtcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICByZXR1cm4gWydFUVVBTFMnLCAnTk9UX0VRVUFMUycsICdHUkVBVEVSX1RIQU4nLCAnTE9XRVJfVEhBTiddLmluY2x1ZGVzKG9wZXJhdG9yLnZhbHVlKTtcbiAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgICAgcmV0dXJuIFsnQ09OVEFJTlMnLCAnRVFVQUxTJywgJ05PVF9FUVVBTFMnLCAnU1RBUlRfV0lUSCcsICdFTkRfV0lUSCddLmluY2x1ZGVzKG9wZXJhdG9yLnZhbHVlKTtcbiAgICAgICAgY2FzZSAnYXV0b2NvbXBsZXRlJzpcbiAgICAgICAgICByZXR1cm4gWydFUVVBTFMnXS5pbmNsdWRlcyhvcGVyYXRvci52YWx1ZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG9wZXJhdG9yO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEZpbHRlclN0ZXBzID0gRmlsdGVyU3RlcHM7XG59XG4iLCI8cHJ5LXRvb2xib3gtY3NzPjwvcHJ5LXRvb2xib3gtY3NzPlxuPGRpdiBjbGFzcz1cInNhdmUtbWFuaWZlc3QtY29udGFpbmVyXCI+XG4gIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgPG5nLXRlbXBsYXRlICNjb250YWluZXI+PC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxidXR0b25cbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnkgLXNpemUtbWRcIlxuICAgIFtkaXNhYmxlZF09XCIoYXR0cmlidXRlcyQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMFwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZVNldHRpbmdzKClcIlxuICAgIGFyaWEtaGFzcG9wdXA9XCJkaWFsb2dcIlxuICA+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxhYmVsXCI+e3sgJ0BwcnkuZmlsdGVycy5sYWJlbCcgfCBpMThuIH19PC9uZy1jb250YWluZXI+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjc2V0dGluZ3M+XG4gIDxkaXYgY2xhc3M9XCJvLWZpbHRlcnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1maWx0ZXJzX19oZWFkZXJcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50U3RlcCA9PT0gRmlsdGVyU3RlcHMuTElTVFwiPlxuICAgICAgICA8aDI+e3sgJ0BwcnkuZmlsdGVycy5sYWJlbCcgfCBpMThuIH19PC9oMj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1cnJlbnRTdGVwID09PSBGaWx0ZXJTdGVwcy5DUkVBVElPTiB8fCBjdXJyZW50U3RlcCA9PT0gRmlsdGVyU3RlcHMuRURJVElPTlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLXJvdyAtYWxpZ24tY2VudGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZ29CYWNrKClcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJiYWNrLWJ1dHRvblwiPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjaGV2cm9uX3JpZ2h0XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8aDI+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAoY3VycmVudFN0ZXAgPT09IEZpbHRlclN0ZXBzLkNSRUFUSU9OID8gJ0BwcnkuZmlsdGVycy5jcmVhdGlvbi5jcmVhdGUnIDogJ0BwcnkuZmlsdGVycy5jcmVhdGlvbi51cGRhdGUnKVxuICAgICAgICAgICAgICAgIHwgaTE4blxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2gyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlU2V0dGluZ3MoKVwiIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiPjwvcHJ5LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFN0ZXAgPT09IEZpbHRlclN0ZXBzLkxJU1RcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLWZpbHRlcnNfX2NvbnRlbnRcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIihhdHRyaWJ1dGVzJCB8IGFzeW5jKT8ubGVuZ3RoID09PSAwOyBlbHNlIGF0dHJpYnV0ZXNFeGlzdHNcIiBjbGFzcz1cImEtdGFibGUtd3JhcHBlclwiPjwvZGl2PlxuICAgICAgICA8bmctdGVtcGxhdGUgI2F0dHJpYnV0ZXNFeGlzdHM+XG4gICAgICAgICAgPHRhYmxlICpuZ0lmPVwiZmlsdGVycy5sZW5ndGggPiAwOyBlbHNlIG5vRmlsdGVyc1wiIGNsYXNzPVwiYS10YWJsZVwiPlxuICAgICAgICAgICAgPHRib2R5IGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwiZmlsdGVyc1wiIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGZpbHRlcnNcIiBjbGFzcz1cIm8tZmlsdGVyc19fZmlsdGVyXCIgY2RrRHJhZz5cbiAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBmaWx0ZXIubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGdldEZpbHRlckF0dHJpYnV0ZXMoZmlsdGVyLCAzKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIiAoY2xpY2spPVwiZGVsZXRlRmlsdGVyKGZpbHRlci5pZClcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0BwcnkuYWN0aW9uLmRlbGV0ZScgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIiAoY2xpY2spPVwiZ29Ub0VkaXRpb24oZmlsdGVyKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnQHByeS5maWx0ZXJzLmxpc3QubW9kaWZ5JyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkIGNka0RyYWdIYW5kbGU+XG4gICAgICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImRyYWdfaW5kaWNhdG9yXCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9GaWx0ZXJzPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvLWZpbHRlcnNfX25vLWZpbHRlcnNcIj57eyAnQHByeS5maWx0ZXJzLm5vRmlsdGVycycgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZ29Ub0NyZWF0aW9uKClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCI+e3sgJ0BwcnkuZmlsdGVycy5saXN0LmFkZCcgfCBpMThuIH19PC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFN0ZXAgPT09IEZpbHRlclN0ZXBzLkNSRUFUSU9OIHx8IGN1cnJlbnRTdGVwID09PSBGaWx0ZXJTdGVwcy5FRElUSU9OXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1maWx0ZXJzX19jb250ZW50XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiZmlsdGVyTmFtZVwiIGNsYXNzPVwiYS1sYWJlbFwiPnt7ICdAcHJ5LmZpbHRlcnMuY3JlYXRpb24ubmFtZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgaWQ9XCJmaWx0ZXJOYW1lXCIgY2xhc3M9XCJhLWZvcm0tZmllbGRcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiZmlsdGVyLm5hbWVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmaWx0ZXJUeXBlXCIgY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZmlsdGVycy5jcmVhdGlvbi50eXBlJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICBpZD1cImZpbHRlclR5cGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAcHJ5LmZpbHRlcnMuY3JlYXRpb24udHlwZScgfCBpMThuXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJ0eXBlcyQgfCBhc3luY1wiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlci50eXBlXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUZpbHRlclR5cGUoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvcHJ5LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIoY3VycmVudEZpbHRlckNvbXBvbmVudFR5cGUkIHwgYXN5bmMpID09PSAnZGF0ZSdcIiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZCB1LWRpc3BsYXktZmxleCAtcm93XCI+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImRhdGUtcmFuZ2VcIiBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5maWx0ZXJzLmNyZWF0aW9uLmRhdGVSYW5nZScgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LWNoZWNrYm94XG4gICAgICAgICAgICBpZD1cImRhdGUtcmFuZ2VcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXIuaGFzRGF0ZVJhbmdlXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInRoaXMuY3VycmVudE9wZXJhdG9ycyQubmV4dChnZXRPcGVyYXRvcnMoKSlcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiKGN1cnJlbnRGaWx0ZXJDb21wb25lbnRUeXBlJCB8IGFzeW5jKSA9PT0gJ2xpc3QnXCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwicG9zc2libGVWYWx1ZXNcIiBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5maWx0ZXJzLmNyZWF0aW9uLnZhbHVlcycgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwicG9zc2libGVWYWx1ZXNcIlxuICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXIucG9zc2libGVWYWx1ZXNcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ2YWxldXIxLCB2YWxldXIyLCB2YWxldXIzXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIihjdXJyZW50RmlsdGVyQ29tcG9uZW50VHlwZSQgfCBhc3luYykgPT09ICdhdXRvY29tcGxldGUnXCIgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwibGltaXRcIiBjbGFzcz1cImEtbGFiZWxcIj57eyAnQHByeS5maWx0ZXJzLmNyZWF0aW9uLmxpbWl0JyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dCBpZD1cImxpbWl0XCIgY2xhc3M9XCJhLWZvcm0tZmllbGRcIiB0eXBlPVwibnVtYmVyXCIgbWluPVwiMFwiIG1heD1cIjUwXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXIubGltaXRcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJhdHRyaWJ1dGVzXCIgY2xhc3M9XCJhLWxhYmVsXCI+e3sgJ0BwcnkuZmlsdGVycy5jcmVhdGlvbi5hdHRyaWJ1dGVzJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICBpZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtjbG9zZU9uU2VsZWN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJhdHRyaWJ1dGVzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlci5hdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdEF0dHJpYnV0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQHByeS5maWx0ZXJzLmNyZWF0aW9uLmF0dHJpYnV0ZXMnIHwgaTE4blwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvcHJ5LXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwib3BlcmF0aW9uc1wiIGNsYXNzPVwiYS1sYWJlbFwiPnt7ICdAcHJ5LmZpbHRlcnMuYXR0cmlidXRlcy5vcGVyYXRvcicgfCBpMThuIH19PC9sYWJlbD5cbiAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgaWQ9XCJvcGVyYXRpb25zXCJcbiAgICAgICAgICAgIFtpdGVtc109XCJjdXJyZW50T3BlcmF0b3JzJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyLm9wZXJhdG9yXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQHByeS5maWx0ZXJzLmF0dHJpYnV0ZXMub3BlcmF0b3InIHwgaTE4blwiXG4gICAgICAgICAgICBiaW5kTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICBiaW5kVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiKGN1cnJlbnRGaWx0ZXJDb21wb25lbnRUeXBlJCB8IGFzeW5jKSA9PT0gJ2xpc3QnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9wcnktc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIlxuICAgICAgICAgIChjbGljayk9XCJzdWJtaXRGaWx0ZXIoKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiEoZmlsdGVyLm5hbWUgJiYgZmlsdGVyLnR5cGUgJiYgZmlsdGVyLmF0dHJpYnV0ZXMubGVuZ3RoICE9PSAwICYmIGZpbHRlci5vcGVyYXRvcilcIlxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC52YWxpZGF0ZScgfCBpMThuIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -239,7 +239,7 @@ export class WidgetMapUtils {
|
|
|
239
239
|
if (value.type === 'MULTI') {
|
|
240
240
|
value = value.values[0];
|
|
241
241
|
}
|
|
242
|
-
if (
|
|
242
|
+
if (value.visible === false) {
|
|
243
243
|
console.warn(`Geometry not visible for item ${item.id}`);
|
|
244
244
|
return;
|
|
245
245
|
}
|
|
@@ -295,4 +295,4 @@ export class WidgetMapUtils {
|
|
|
295
295
|
static { this.DEFAULT_MAP_CENTER = [2.2827217347381525, 48.864706031557716]; }
|
|
296
296
|
static { this.BACKGROUND_ORDER = 9999; }
|
|
297
297
|
}
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LW1hcC91dGlscy93aWRnZXQtbWFwLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxrQkFBa0IsRUFFbEIsU0FBUyxFQUdULFNBQVMsRUFRVixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQU8sTUFBTSxJQUFJLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVMsTUFBTSxTQUFTLENBQUM7QUFFcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxhQUFhLEVBQWtCLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxNQUFNLE9BQU8sY0FBYztJQUN6QixNQUFNLENBQUMseUJBQXlCLENBQzlCLEtBQTRCLEVBQzVCLFNBQW9CLEVBQ3BCLGtCQUEyQixFQUMzQixNQUFlO1FBRWYsSUFDRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUN6RyxLQUFLLENBQUMsSUFBSSxDQUNYO1lBQ0QsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsa0JBQWtCO1lBQ3BCLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQzdCO1lBQ0EsTUFBTSxhQUFhLEdBQUcsS0FHUyxDQUFDO1lBRWhDLE1BQU0sT0FBTyxHQUFH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YUFDNUIsb0NBQStCLEdBQUcsS0FBSyxDQUFDO2FBQ3hDLHFCQUFnQixHQUFHLENBQUMsQ0FBQzthQUNyQix1QkFBa0IsR0FBRyxFQUFFLENBQUM7YUFDeEIscUJBQWdCLEdBQUcsRUFBRSxDQUFDO2FBQ3RCLHVCQUFrQixHQUFHLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQzthQUU5RCxxQkFBZ0IsR0FBRyxJQUFJLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZ2dyZWdhdGlvblJlc3VsdCxcbiAgQXR0cmlidXRlLFxuICBDbGFzcyxcbiAgREVGQVVMVF9QUk9KRUNUSU9OLFxuICBGaWVsZCxcbiAgRmllbGRUeXBlLFxuICBHZXRDYXBhYmlsaXRpZXNSZXNwb25zZSxcbiAgSXRlbSxcbiAgSXRlbVV0aWxzLFxuICBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldEJ1YmJsZUxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0SGVhdE1hcExheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnMsXG4gIFJlbGF0aW9uLFxuICBSZXN1bHRTZXRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IEZlYXR1cmUsIE1hcCB9IGZyb20gJ29sJztcbmltcG9ydCB7IENpcmNsZSwgTGluZVN0cmluZywgUG9pbnQgfSBmcm9tICdvbC9nZW9tJztcbmltcG9ydCB7IFN0eWxlIH0gZnJvbSAnb2wvc3R5bGUnO1xuaW1wb3J0IHsgV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vY29tcG9uZW50L3dpZGdldC1tYXAtbGF5ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXQgYXMgZ2V0UHJvamVjdGlvbiwgUHJvamVjdGlvbkxpa2UsIHRyYW5zZm9ybSB9IGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IHsgR2VvSlNPTiB9IGZyb20gJ29sL2Zvcm1hdCc7XG5pbXBvcnQgeyBYTUxVdGlscyB9IGZyb20gJy4veG1sLXV0aWxzLmNsYXNzJztcblxuZXhwb3J0IGNsYXNzIFdpZGdldE1hcFV0aWxzIHtcbiAgc3RhdGljIHBvcHVsYXRlTG9jYXRpb25BdHRyaWJ1dGUoXG4gICAgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICBjbGFzc2VzTm90RmlsdGVyZWQ6IENsYXNzW10sXG4gICAgZmllbGRzOiBGaWVsZFtdXG4gICkge1xuICAgIGlmIChcbiAgICAgIFsnaGVhdG1hcCcsICdtYXJrZXInLCAnYnViYmxlJywgJ3BvaW50JywgJ2xpbmUnLCAncG9seWdvbicsICdtdWx0aS1saW5lJywgJ211bHRpLXBvbHlnb24nLCAnYXV0byddLmluY2x1ZGVzKFxuICAgICAgICBsYXllci50eXBlXG4gICAgICApICYmXG4gICAgICAhIXJlc3VsdFNldCAmJlxuICAgICAgISFjbGFzc2VzTm90RmlsdGVyZWQgJiZcbiAgICAgIGNsYXNzZXNOb3RGaWx0ZXJlZC5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBjb25zdCBzcGVjaWZpY0xheWVyID0gbGF5ZXIgYXNcbiAgICAgICAgfCBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zXG4gICAgICAgIHwgTWFwV2lkZ2V0TWFya2VyTGF5ZXJPcHRpb25zXG4gICAgICAgIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zO1xuXG4gICAgICBjb25zdCBjbGFzc2VzID0gY2xhc3Nlc05vdEZpbHRlcmVkLmZpbHRlcihcbiAgICAgICAgKGNsKSA9PiBzcGVjaWZpY0xheWVyLmNsYXNzZXM/LmluY2x1ZGVzKGNsLmlkKSB8fCAhc3BlY2lmaWNMYXllci5jbGFzc2VzIHx8IHNwZWNpZmljTGF5ZXIuY2xhc3Nlcy5sZW5ndGggPT09IDBcbiAgICAgICk7XG5cbiAgICAgIGlmICghc3BlY2lmaWNMYXllci5hdHRyaWJ1dGUpIHtcbiAgICAgICAgLy8gTm8gbG9jYXRpb24gYXR0cmlidXRlIGF2YWlsYWJsZSwgdGhlbiB0cnkgdG8gZ3Vlc3Mgb25lIHRoYXQgd2lsbCBiZSBva1xuXG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gV2lkZ2V0TWFwVXRpbHMuZ2VvbWV0cnlGb3JMYXllcihsYXllcik7XG5cbiAgICAgICAgbGV0IGNhbmRpZGF0ZXMgPSBbXSBhcyB7XG4gICAgICAgICAgYXR0cjogQXR0cmlidXRlO1xuICAgICAgICAgIGZpZWxkOiBGaWVsZCB8IHVuZGVmaW5lZDtcbiAgICAgICAgfVtdO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgLy8gQmFzZWQgb24gaXRlbXMgdGhhdCB3ZSBoYXZlIHRvIGRpc3BsYXlcblxuICAgICAgICAgIGNhbmRpZGF0ZXMgPSBPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpXG4gICAgICAgICAgICAubWFwKChrZXkpID0+ICh7IGl0ZW1zOiByZXN1bHRTZXQuaXRlbXNba2V5XSwgb0NsYXNzOiBjbGFzc2VzLmZpbmQoKGNsKSA9PiBjbC5pZCA9PT0ga2V5KSB9KSlcbiAgICAgICAgICAgIC5tYXAoKHsgaXRlbXMsIG9DbGFzcyB9KSA9PlxuICAgICAgICAgICAgICAob0NsYXNzID8/IHsgYXR0cmlidXRlczogW10gfSkuYXR0cmlidXRlc1xuICAgICAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+ICh7IGF0dHIsIGZpZWxkOiBmaWVsZHMuZmluZCgoZikgPT4gZi5pZCA9PT0gYXR0ci5maWVsZCkgfSkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoYXR0cikgPT4gYXR0ci5maWVsZD8udHlwZSA9PT0gZ2VvbWV0cnkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBpdGVtcyB0byBkaXNwbGF5LCBzbyBhbGxvdyBhbGwgY29ycmVzcG9uZGluZyBnZW9tZXRyeSBmaWVsZHNcbiAgICAgICAgICBjYW5kaWRhdGVzID0gY2xhc3Nlc05vdEZpbHRlcmVkXG4gICAgICAgICAgICAubWFwKChjbGF6eikgPT4gY2xhenouYXR0cmlidXRlcylcbiAgICAgICAgICAgIC5mbGF0KClcbiAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+ICh7IGF0dHIsIGZpZWxkOiBmaWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLmlkID09PSBhdHRyLmZpZWxkKSB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgYXR0ciwgZmllbGQgfSkgPT4gZmllbGQ/LnR5cGUgPT09IGdlb21ldHJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzcGVjaWZpY0xheWVyLmF0dHJpYnV0ZSA9IGNhbmRpZGF0ZXNbMF0uYXR0ci50ZWNobmljYWxOYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHBvcHVsYXRlSW50ZW5zaXR5QXR0cmlidXRlKFxuICAgIGxheWVyOiBNYXBXaWRnZXRMYXllck9wdGlvbnMsXG4gICAgcmVzdWx0U2V0OiBSZXN1bHRTZXQsXG4gICAgY2xhc3Nlc05vdEZpbHRlcmVkOiBDbGFzc1tdLFxuICAgIGZpZWxkczogRmllbGRbXVxuICApIHtcbiAgICBpZiAoXG4gICAgICBbJ2hlYXRtYXAnLCAnYnViYmxlJ10uaW5jbHVkZXMobGF5ZXIudHlwZSkgJiZcbiAgICAgICEhcmVzdWx0U2V0ICYmXG4gICAgICAhIWNsYXNzZXNOb3RGaWx0ZXJlZCAmJlxuICAgICAgY2xhc3Nlc05vdEZpbHRlcmVkLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IHNwZWNpZmljTGF5ZXIgPSBsYXllciBhcyBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zIHwgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zO1xuXG4gICAgICBjb25zdCBjbGFzc2VzID0gY2xhc3Nlc05vdEZpbHRlcmVkLmZpbHRlcihcbiAgICAgICAgKGNsKSA9PlxuICAgICAgICAgIChzcGVjaWZpY0xheWVyLmNsYXNzZXM/LmluY2x1ZGVzKGNsLmlkKSB8fCAhc3BlY2lmaWNMYXllci5jbGFzc2VzIHx8IHNwZWNpZmljTGF5ZXIuY2xhc3Nlcy5sZW5ndGggPT09IDApICYmXG4gICAgICAgICAgY2wuYXR0cmlidXRlcy5maW5kKChhdHRyKSA9PiBhdHRyLnRlY2huaWNhbE5hbWUgPT09IChzcGVjaWZpY0xheWVyPy5hdHRyaWJ1dGUgPz8gW10pKVxuICAgICAgKTtcblxuICAgICAgaWYgKCFzcGVjaWZpY0xheWVyLmludGVuc2l0eUF0dHJpYnV0ZSkge1xuICAgICAgICAvLyBObyBpbnRlbnNpdHkgYXR0cmlidXRlIGF2YWlsYWJsZSwgdGhlbiB0YWtlIHRoZSBtYXhpbXVtIGludGVuc2l0eSBtYXRjaGluZyBhdHRyaWJ1dGVcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlc0RyeSA9IE9iamVjdC5rZXlzKHJlc3VsdFNldC5pdGVtcylcbiAgICAgICAgICAubWFwKChrZXkpID0+ICh7IGl0ZW1zOiByZXN1bHRTZXQuaXRlbXNba2V5XSwgb0NsYXNzOiBjbGFzc2VzLmZpbmQoKGNsKSA9PiBjbC5pZCA9PT0ga2V5KSB9KSlcbiAgICAgICAgICAubWFwKCh7IGl0ZW1zLCBvQ2xhc3MgfSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChvQ2xhc3MgPz8geyBhdHRyaWJ1dGVzOiBbXSB9KS5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+ICh7IGF0dHIsIGZpZWxkOiBmaWVsZHMuZmluZCgoZikgPT4gZi5pZCA9PT0gYXR0ci5maWVsZCkgfSkpXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGF0dHIpID0+IGF0dHIuZmllbGQ/LnR5cGUgPT09IEZpZWxkVHlwZS5ERUNJTUFMIHx8IGF0dHIuZmllbGQ/LnR5cGUgPT09IEZpZWxkVHlwZS5JTlRFR0VSKVxuICAgICAgICAgICAgICAubWFwKChhdHRyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0clZhbHVlcyA9IEl0ZW1VdGlscy5wZXJ0aW5lbnRWYWx1ZShpdGVtcywgYXR0ci5hdHRyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgbWluOiBNYXRoLm1pbiguLi5hdHRyVmFsdWVzKSxcbiAgICAgICAgICAgICAgICAgIG1heDogTWF0aC5tYXgoLi4uYXR0clZhbHVlcyksXG4gICAgICAgICAgICAgICAgICB0ZWNobmljYWxOYW1lOiBhdHRyLmF0dHIudGVjaG5pY2FsTmFtZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnJlZHVjZSgocCwgYykgPT4gWy4uLnAsIC4uLmNdLCBbXSlcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYi5tYXggLSBhLm1heCk7XG5cbiAgICAgICAgaWYgKGNhbmRpZGF0ZXNEcnkubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwZWNpZmljTGF5ZXIuaW50ZW5zaXR5QXR0cmlidXRlID0gY2FuZGlkYXRlc0RyeVswXS50ZWNobmljYWxOYW1lO1xuICAgICAgICAgIHNwZWNpZmljTGF5ZXIuaW50ZW5zaXR5QXNjID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRGZWF0dXJlRnJvbUl0ZW0oXG4gICAgcHJvamVjdGlvbjogUHJvamVjdGlvbkxpa2UsXG4gICAgaXRlbTogSXRlbSxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgbG9jYXRpb25BdHRyaWJ1dGU6IEF0dHJpYnV0ZSxcbiAgICBpY29uU3R5bGU/OiBTdHlsZSxcbiAgICBzZWxlY3RlZEljb25TdHlsZT86IFN0eWxlXG4gICkge1xuICAgIHJldHVybiBuZXcgRmVhdHVyZSh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgdHlwZSxcbiAgICAgIGdlb21ldHJ5OiBXaWRnZXRNYXBVdGlscy5yZWFkR2VvbWV0cnkocHJvamVjdGlvbiwgaXRlbSwgJ3BvaW50JywgbG9jYXRpb25BdHRyaWJ1dGUpID8/IHVuZGVmaW5lZCxcbiAgICAgIGNsYXNzaWNTdHlsZTogaWNvblN0eWxlID8/IG51bGwsXG4gICAgICBzZWxlY3RlZFN0eWxlOiBzZWxlY3RlZEljb25TdHlsZSA/PyBudWxsXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0Q2lyY2xlRmVhdHVyZUZyb21JdGVtKFxuICAgIHByb2plY3Rpb246IFByb2plY3Rpb25MaWtlLFxuICAgIGl0ZW06IEl0ZW0sXG4gICAgbG9jYXRpb25BdHRyaWJ1dGU6IEF0dHJpYnV0ZSxcbiAgICByYWRpdXM6IG51bWJlcixcbiAgICBpY29uU3R5bGU6IFN0eWxlLFxuICAgIHNlbGVjdGVkSWNvblN0eWxlOiBTdHlsZVxuICApIHtcbiAgICByZXR1cm4gbmV3IEZlYXR1cmUoe1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGdlb21ldHJ5OiBuZXcgQ2lyY2xlKFxuICAgICAgICAoV2lkZ2V0TWFwVXRpbHMucmVhZEdlb21ldHJ5KHByb2plY3Rpb24sIGl0ZW0sICdwb2ludCcsIGxvY2F0aW9uQXR0cmlidXRlKSBhcyBQb2ludCkuZ2V0Q29vcmRpbmF0ZXMoKSxcbiAgICAgICAgcmFkaXVzXG4gICAgICApLFxuICAgICAgY2xhc3NpY1N0eWxlOiBpY29uU3R5bGUsXG4gICAgICBzZWxlY3RlZFN0eWxlOiBzZWxlY3RlZEljb25TdHlsZSxcbiAgICAgIHR5cGU6ICdidWJibGUnXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0TGlua0ZlYXR1cmUocmVsYXRpb246IFJlbGF0aW9uLCBmZWF0dXJlU291cmNlOiBGZWF0dXJlPFBvaW50PiwgZmVhdHVyZURlc3RpbmF0aW9uOiBGZWF0dXJlPFBvaW50Pikge1xuICAgIHJldHVybiBuZXcgRmVhdHVyZSh7XG4gICAgICAuLi5yZWxhdGlvbixcbiAgICAgIGdlb21ldHJ5OiBuZXcgTGluZVN0cmluZyhbXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZmVhdHVyZVNvdXJjZS5nZXRHZW9tZXRyeSgpPy5nZXRDb29yZGluYXRlcygpID8/IGZlYXR1cmVTb3VyY2UuZ2V0R2VvbWV0cnkoKT8uZ2V0Q2VudGVyKCkgPz8gWzAsIDBdLFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGZlYXR1cmVEZXN0aW5hdGlvbi5nZXRHZW9tZXRyeSgpPy5nZXRDb29yZGluYXRlcygpID8/IGZlYXR1cmVEZXN0aW5hdGlvbi5nZXRHZW9tZXRyeSgpPy5nZXRDZW50ZXIoKSA/PyBbMCwgMF1cbiAgICAgIF0pLFxuICAgICAgc291cmNlOiBmZWF0dXJlU291cmNlLFxuICAgICAgZGVzdGluYXRpb246IGZlYXR1cmVEZXN0aW5hdGlvbixcbiAgICAgIHR5cGU6ICdsaW5rJ1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldE1hcEFzUG5nKG1hcDogTWFwKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbWFwLm9uY2UoJ3JlbmRlcmNvbXBsZXRlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBtYXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IG1hcC5nZXRTaXplKCkgfHwgWzEwMCwgMTAwXTtcbiAgICAgICAgbWFwQ2FudmFzLndpZHRoID0gc2l6ZVswXTtcbiAgICAgICAgbWFwQ2FudmFzLmhlaWdodCA9IHNpemVbMV07XG4gICAgICAgIGNvbnN0IG1hcENvbnRleHQgPSBtYXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnKSB8fCAobnVsbCBhcyB1bmtub3duIGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLm9sLWxheWVyIGNhbnZhcywgY2FudmFzLm9sLWxheWVyJyksIChjYW52YXMpID0+IHtcbiAgICAgICAgICBpZiAoY2FudmFzLndpZHRoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgb3BhY2l0eSA9IGNhbnZhcy5wYXJlbnROb2RlLnN0eWxlLm9wYWNpdHkgfHwgY2FudmFzLnN0eWxlLm9wYWNpdHk7XG4gICAgICAgICAgICBtYXBDb250ZXh0Lmdsb2JhbEFscGhhID0gb3BhY2l0eSA9PT0gJycgPyAxIDogTnVtYmVyKG9wYWNpdHkpO1xuXG4gICAgICAgICAgICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBjYW52YXMucGFyZW50Tm9kZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgICAgIG1hcENvbnRleHQuZmlsbFN0eWxlID0gYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgICBtYXBDb250ZXh0LmZpbGxSZWN0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBtYXRyaXg7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm0gPSBjYW52YXMuc3R5bGUudHJhbnNmb3JtO1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAvLyBHZXQgdGhlIHRyYW5zZm9ybSBwYXJhbWV0ZXJzIGZyb20gdGhlIHN0eWxlJ3MgdHJhbnNmb3JtIG1hdHJpeFxuICAgICAgICAgICAgICBtYXRyaXggPSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAubWF0Y2goL15tYXRyaXhcXCgoW14oXSopXFwpJC8pWzFdXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAubWFwKE51bWJlcik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtYXRyaXggPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VGbG9hdChjYW52YXMuc3R5bGUud2lkdGgpIC8gY2FudmFzLndpZHRoLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGNhbnZhcy5zdHlsZS5oZWlnaHQpIC8gY2FudmFzLmhlaWdodCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0gdG8gdGhlIGV4cG9ydCBtYXAgY29udGV4dFxuICAgICAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnByb3RvdHlwZS5zZXRUcmFuc2Zvcm0uYXBwbHkobWFwQ29udGV4dCwgbWF0cml4KTtcbiAgICAgICAgICAgIG1hcENvbnRleHQuZHJhd0ltYWdlKGNhbnZhcywgMCwgMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWFwQ29udGV4dC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgICAgIHJlc29sdmUobWFwQ2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJykpO1xuICAgICAgfSk7XG4gICAgICBtYXAucmVuZGVyU3luYygpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGV4cG9ydE1hcEFzSW1hZ2UobWFwOiBNYXAsIGZpbGVuYW1lOiBzdHJpbmcpIHtcbiAgICBXaWRnZXRNYXBVdGlscy5nZXRNYXBBc1BuZyhtYXApLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICBsaW5rLmhyZWYgPSBkYXRhO1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdlb21ldHJ5Rm9yTGF5ZXIobGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChsYXllci50eXBlKSB7XG4gICAgICBjYXNlICdtYXJrZXInOlxuICAgICAgY2FzZSAnaGVhdG1hcCc6XG4gICAgICBjYXNlICdidWJibGUnOlxuICAgICAgY2FzZSAncG9pbnQnOlxuICAgICAgICByZXR1cm4gRmllbGRUeXBlLlBPSU5UO1xuICAgICAgY2FzZSAnbGluZSc6XG4gICAgICAgIHJldHVybiBGaWVsZFR5cGUuTElORTtcbiAgICAgIGNhc2UgJ3BvbHlnb24nOlxuICAgICAgICByZXR1cm4gRmllbGRUeXBlLlBPTFlHT047XG4gICAgICBjYXNlICdtdWx0aS1saW5lJzpcbiAgICAgICAgcmV0dXJuIEZpZWxkVHlwZS5NVUxUSUxJTkU7XG4gICAgICBjYXNlICdtdWx0aS1wb2x5Z29uJzpcbiAgICAgICAgcmV0dXJuIEZpZWxkVHlwZS5NVUxUSVBPTFlHT047XG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgICAgcmV0dXJuIFdpZGdldE1hcFV0aWxzLmdlb21ldHJ5Rm9yTGF5ZXIoe1xuICAgICAgICAgIHR5cGU6IFdpZGdldE1hcExheWVyU2VydmljZS50cmFuc2xhdGVGaWVsZFR5cGVUb0xheWVyVHlwZShsYXllci5zdWJUeXBlKVxuICAgICAgICB9IGFzIE1hcFdpZGdldExheWVyT3B0aW9ucyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gRmllbGRUeXBlLlBPSU5UO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3NpZ25MYXllcnNPcmRlcihfbGF5ZXJzOiBNYXBXaWRnZXRMYXllck9wdGlvbnNbXSkge1xuICAgIGNvbnN0IGxheWVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoX2xheWVycykpIGFzIE1hcFdpZGdldExheWVyT3B0aW9uc1tdO1xuXG4gICAgbGF5ZXJzLnNvcnQoKGwxLCBsMikgPT4gKGwyLmJhY2tncm91bmQgPyAwIDogMSkgLSAobDEuYmFja2dyb3VuZCA/IDAgOiAxKSk7XG5cbiAgICAvLyBBc3NpZ24gc3VyZSB0aGluZ3NcbiAgICBsYXllcnMuZm9yRWFjaCgobGF5ZXIsIGluZGV4KSA9PiB7XG4gICAgICBpZiAobGF5ZXIuYmFja2dyb3VuZCkge1xuICAgICAgICBsYXllci5vcmRlciA9IFdpZGdldE1hcFV0aWxzLkJBQ0tHUk9VTkRfT1JERVI7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggPT09IDAgJiYgIWxheWVyLm9yZGVyKSB7XG4gICAgICAgIGxheWVyLm9yZGVyID0gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxheWVycy5mb3JFYWNoKChsYXllciwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChsYXllci5vcmRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBbZGlzdGFuY2VUb0ZpcnN0UHJldmlvdXNPcmRlciwgZGlzdGFuY2VUb0ZpcnN0TmV4dE9yZGVyXSA9IFtcbiAgICAgICAgICBsYXllcnNcbiAgICAgICAgICAgIC5zbGljZSgwLCBpbmRleClcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5maW5kSW5kZXgoKGVsZW1lbnQpID0+IGVsZW1lbnQub3JkZXIgIT09IHVuZGVmaW5lZCkgKyAxLFxuICAgICAgICAgIGxheWVycy5zbGljZShpbmRleCArIDEpLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC5vcmRlciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBdO1xuXG4gICAgICAgIGxldCBbcHJldmlvdXNPcmRlckluZGV4LCBuZXh0T3JkZXJJbmRleF0gPSBbXG4gICAgICAgICAgZGlzdGFuY2VUb0ZpcnN0UHJldmlvdXNPcmRlciA+IC0xID8gaW5kZXggLSBkaXN0YW5jZVRvRmlyc3RQcmV2aW91c09yZGVyIDogMCxcbiAgICAgICAgICBkaXN0YW5jZVRvRmlyc3ROZXh0T3JkZXIgKyBpbmRleCArIDFcbiAgICAgICAgXTtcbiAgICAgICAgbGV0IFtwcmV2aW91c09yZGVyLCBuZXh0T3JkZXJdID0gW1xuICAgICAgICAgIGRpc3RhbmNlVG9GaXJzdFByZXZpb3VzT3JkZXIgPiAtMSA/IGxheWVyc1twcmV2aW91c09yZGVySW5kZXhdLm9yZGVyISA6IDAsXG4gICAgICAgICAgZGlzdGFuY2VUb0ZpcnN0TmV4dE9yZGVyID4gLTEgPyBsYXllcnNbbmV4dE9yZGVySW5kZXhdLm9yZGVyISA6IC0xXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKG5leHRPcmRlciA+IDAgJiYgbmV4dE9yZGVyIDwgcHJldmlvdXNPcmRlcikge1xuICAgICAgICAgIGNvbnN0IG5ld09yZGVyID0gcHJldmlvdXNPcmRlciArIChuZXh0T3JkZXJJbmRleCAtIHByZXZpb3VzT3JkZXJJbmRleCk7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYHRoZSBvcmRlciBwcm9wZXJ0eSBvZiBsYXllciBubyAke2luZGV4ICsgMn0gd2FzIHByZXNldCBidXQgZG9lc24ndCBmb2xsb3cgdGhlIG9yZGVyIG9mIHRoZSBvdGhlciBsYXllcnNgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXh0T3JkZXIgPSBuZXdPcmRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0T3JkZXIgPiAwKSB7XG4gICAgICAgICAgbGV0IHJlbGF0aXZlSW5kZXggPSBpbmRleCAtIHByZXZpb3VzT3JkZXJJbmRleDtcbiAgICAgICAgICBsYXllci5vcmRlciA9XG4gICAgICAgICAgICBwcmV2aW91c09yZGVyICsgKChuZXh0T3JkZXIgLSBwcmV2aW91c09yZGVyKSAvIChuZXh0T3JkZXJJbmRleCAtIHByZXZpb3VzT3JkZXJJbmRleCkpICogcmVsYXRpdmVJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsYXllci5vcmRlciA9IHByZXZpb3VzT3JkZXIgKyBkaXN0YW5jZVRvRmlyc3RQcmV2aW91c09yZGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGF5ZXJzLnNvcnQoKGwxLCBsMikgPT4gKGwxLm9yZGVyID8/IDEpIC0gKGwyLm9yZGVyISA/PyAxKSk7XG4gIH1cblxuICBzdGF0aWMgcmVhZEdlb21ldHJ5PFQgZXh0ZW5kcyAncG9pbnQnIHwgJ2xpbmUnIHwgJ211bHRpLWxpbmUnIHwgJ3BvbHlnb24nIHwgJ211bHRpLXBvbHlnb24nPihcbiAgICBwcm9qZWN0aW9uOiBQcm9qZWN0aW9uTGlrZSxcbiAgICBpdGVtOiBJdGVtLFxuICAgIHR5cGU6IFQsXG4gICAgYXR0cmlidXRlOiBBdHRyaWJ1dGUgfCB1bmRlZmluZWRcbiAgKSB7XG4gICAgaWYgKCFhdHRyaWJ1dGUpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IGl0ZW0uYXR0cmlidXRlc1thdHRyaWJ1dGUudGVjaG5pY2FsTmFtZV07XG4gICAgaWYgKHZhbHVlLnR5cGUgPT09ICdNVUxUSScpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUudmFsdWVzWzBdO1xuICAgIH1cblxuICAgIGlmICghdmFsdWUudmlzaWJsZSkge1xuICAgICAgY29uc29sZS53YXJuKGBHZW9tZXRyeSBub3QgdmlzaWJsZSBmb3IgaXRlbSAke2l0ZW0uaWR9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGdlb21ldHJ5O1xuICAgIHRyeSB7XG4gICAgICBnZW9tZXRyeSA9IG5ldyBHZW9KU09OKCkucmVhZEdlb21ldHJ5KHZhbHVlLnZhbHVlIGFzIGFueSwge1xuICAgICAgICBmZWF0dXJlUHJvamVjdGlvbjogcHJvamVjdGlvblxuICAgICAgfSkgYXMgR2VvbWV0cnk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKCdlcnJvciByZWFkaW5nIEdlb21ldHJ5JywgdmFsdWUudmFsdWUsIGUpO1xuICAgIH1cblxuICAgIHJldHVybiBnZW9tZXRyeTtcbiAgfVxuXG4gIHN0YXRpYyBwcm9qZWN0RXh0ZW50QWdncmVnYXRpb25SZXNwb25zZShcbiAgICBmaWVsZDogRmllbGQsXG4gICAgZXh0ZW50UmVzcG9uc2U6IEFnZ3JlZ2F0aW9uUmVzdWx0LFxuICAgIGxheWVyOiBNYXBHZW9TZXJ2ZXJMYXllck9wdGlvbnMsXG4gICAgd21zQ2FwYWJpbGl0aWVzOiB7IFtwOiBzdHJpbmddOiBHZXRDYXBhYmlsaXRpZXNSZXNwb25zZSB8IG51bGwgfSB8IHVuZGVmaW5lZCxcbiAgICBtYXA6IE1hcFxuICApIHtcbiAgICBjb25zdCBwcm9qQm94ID0gZ2V0UHJvamVjdGlvbihmaWVsZCEuY3JzID8/IERFRkFVTFRfUFJPSkVDVElPTik7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBleHRlbnRSZXNwb25zZS52YWx1ZXMgYXMge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgdG9wX2xlZnQ6IHtcbiAgICAgICAgICBsb246IHN0cmluZztcbiAgICAgICAgICBsYXQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgICAgYm90dG9tX3JpZ2h0OiB7XG4gICAgICAgICAgbG9uOiBzdHJpbmc7XG4gICAgICAgICAgbGF0OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH1bXTtcbiAgICBpZiAoXG4gICAgICBwcm9qQm94ICYmXG4gICAgICByZXNwb25zZS5sZW5ndGggPiAwICYmXG4gICAgICByZXNwb25zZVswXS52YWx1ZSAmJlxuICAgICAgcmVzcG9uc2VbMF0udmFsdWUudG9wX2xlZnQgJiZcbiAgICAgIHJlc3BvbnNlWzBdLnZhbHVlLnRvcF9sZWZ0LmxhdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICByZXNwb25zZVswXS52YWx1ZS50b3BfbGVmdC5sb24gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVzcG9uc2VbMF0udmFsdWUuYm90dG9tX3JpZ2h0ICYmXG4gICAgICByZXNwb25zZVswXS52YWx1ZS5ib3R0b21fcmlnaHQubGF0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHJlc3BvbnNlWzBdLnZhbHVlLmJvdHRvbV9yaWdodC5sb24gIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0YXNvdXJjZTogbGF5ZXIuZGF0YXNvdXJjZUlkLFxuICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgIGV4dGVudDogW1xuICAgICAgICAgIHRyYW5zZm9ybShcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICBleHRlbnRSZXNwb25zZS52YWx1ZXNbMF0gYXMge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZWZ0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb246IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICkudmFsdWUudG9wX2xlZnQubG9uXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgZXh0ZW50UmVzcG9uc2UudmFsdWVzWzBdIGFzIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0b3BfbGVmdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGF0OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnZhbHVlLnRvcF9sZWZ0LmxhdFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcHJvakJveCxcbiAgICAgICAgICAgIG1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB0cmFuc2Zvcm0oXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgZXh0ZW50UmVzcG9uc2UudmFsdWVzWzBdIGFzIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICBib3R0b21fcmlnaHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvbjogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKS52YWx1ZS5ib3R0b21fcmlnaHQubG9uXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgZXh0ZW50UmVzcG9uc2UudmFsdWVzWzBdIGFzIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICBib3R0b21fcmlnaHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhdDogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKS52YWx1ZS5ib3R0b21fcmlnaHQubGF0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwcm9qQm94LFxuICAgICAgICAgICAgbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKClcbiAgICAgICAgICApXG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFzb3VyY2U6IGxheWVyLmRhdGFzb3VyY2VJZCxcbiAgICAgIGV4dGVudDogWE1MVXRpbHMuZ2V0TGF5ZXJFeHRlbnQobGF5ZXIucGFyYW1MYXllciwgbWFwLCB3bXNDYXBhYmlsaXRpZXMhW2xheWVyLnVybF0/LmRvYykgPz8gW10sXG4gICAgICBlcnJvcjogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIERFRkFVTFRfSEVBVE1BUF9SQURJVVMgPSAyNTtcbiAgc3RhdGljIERFRkFVTFRfUkFESVVTX0lOVEVOU0lUWV9GQUNUT1IgPSAxMDAwMDtcbiAgc3RhdGljIERFRkFVTFRfWk9PTV9NSU4gPSAzO1xuICBzdGF0aWMgREVGQVVMVF9aT09NX1NUQVJUID0gMTA7XG4gIHN0YXRpYyBERUZBVUxUX1pPT01fTUFYID0gMTg7XG4gIHN0YXRpYyBERUZBVUxUX01BUF9DRU5URVIgPSBbMi4yODI3MjE3MzQ3MzgxNTI1LCA0OC44NjQ3MDYwMzE1NTc3MTZdO1xuXG4gIHN0YXRpYyBCQUNLR1JPVU5EX09SREVSID0gOTk5OTtcbn1cbiJdfQ==
|
|
298
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LW1hcC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LW1hcC91dGlscy93aWRnZXQtbWFwLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJTCxrQkFBa0IsRUFFbEIsU0FBUyxFQUdULFNBQVMsRUFRVixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxPQUFPLEVBQU8sTUFBTSxJQUFJLENBQUM7QUFDbEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVMsTUFBTSxTQUFTLENBQUM7QUFFcEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxhQUFhLEVBQWtCLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU3QyxNQUFNLE9BQU8sY0FBYztJQUN6QixNQUFNLENBQUMseUJBQXlCLENBQzlCLEtBQTRCLEVBQzVCLFNBQW9CLEVBQ3BCLGtCQUEyQixFQUMzQixNQUFlO1FBRWYsSUFDRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUN6RyxLQUFLLENBQUMsSUFBSSxDQUNYO1lBQ0QsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsa0JBQWtCO1lBQ3BCLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQzdCO1lBQ0EsTUFBTSxhQUFhLEdBQUcsS0FHUyxDQUFDO1lBRWhDLE1BQU0sT0FBTyxHQUFH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Q0FBQzthQUM1QixvQ0FBK0IsR0FBRyxLQUFLLENBQUM7YUFDeEMscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO2FBQ3JCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQzthQUN4QixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7YUFDdEIsdUJBQWtCLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2FBRTlELHFCQUFnQixHQUFHLElBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uUmVzdWx0LFxuICBBdHRyaWJ1dGUsXG4gIENsYXNzLFxuICBERUZBVUxUX1BST0pFQ1RJT04sXG4gIEZpZWxkLFxuICBGaWVsZFR5cGUsXG4gIEdldENhcGFiaWxpdGllc1Jlc3BvbnNlLFxuICBJdGVtLFxuICBJdGVtVXRpbHMsXG4gIE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyxcbiAgTWFwV2lkZ2V0QnViYmxlTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRIZWF0TWFwTGF5ZXJPcHRpb25zLFxuICBNYXBXaWRnZXRMYXllck9wdGlvbnMsXG4gIE1hcFdpZGdldE1hcmtlckxheWVyT3B0aW9ucyxcbiAgUmVsYXRpb24sXG4gIFJlc3VsdFNldFxufSBmcm9tICdAcHJvdm9seS9kYXNoYm9hcmQnO1xuaW1wb3J0IHsgRmVhdHVyZSwgTWFwIH0gZnJvbSAnb2wnO1xuaW1wb3J0IHsgQ2lyY2xlLCBMaW5lU3RyaW5nLCBQb2ludCB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgU3R5bGUgfSBmcm9tICdvbC9zdHlsZSc7XG5pbXBvcnQgeyBXaWRnZXRNYXBMYXllclNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnQvd2lkZ2V0LW1hcC1sYXllci5zZXJ2aWNlJztcbmltcG9ydCB7IGdldCBhcyBnZXRQcm9qZWN0aW9uLCBQcm9qZWN0aW9uTGlrZSwgdHJhbnNmb3JtIH0gZnJvbSAnb2wvcHJvaic7XG5pbXBvcnQgR2VvbWV0cnkgZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeSc7XG5pbXBvcnQgeyBHZW9KU09OIH0gZnJvbSAnb2wvZm9ybWF0JztcbmltcG9ydCB7IFhNTFV0aWxzIH0gZnJvbSAnLi94bWwtdXRpbHMuY2xhc3MnO1xuXG5leHBvcnQgY2xhc3MgV2lkZ2V0TWFwVXRpbHMge1xuICBzdGF0aWMgcG9wdWxhdGVMb2NhdGlvbkF0dHJpYnV0ZShcbiAgICBsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zLFxuICAgIHJlc3VsdFNldDogUmVzdWx0U2V0LFxuICAgIGNsYXNzZXNOb3RGaWx0ZXJlZDogQ2xhc3NbXSxcbiAgICBmaWVsZHM6IEZpZWxkW11cbiAgKSB7XG4gICAgaWYgKFxuICAgICAgWydoZWF0bWFwJywgJ21hcmtlcicsICdidWJibGUnLCAncG9pbnQnLCAnbGluZScsICdwb2x5Z29uJywgJ211bHRpLWxpbmUnLCAnbXVsdGktcG9seWdvbicsICdhdXRvJ10uaW5jbHVkZXMoXG4gICAgICAgIGxheWVyLnR5cGVcbiAgICAgICkgJiZcbiAgICAgICEhcmVzdWx0U2V0ICYmXG4gICAgICAhIWNsYXNzZXNOb3RGaWx0ZXJlZCAmJlxuICAgICAgY2xhc3Nlc05vdEZpbHRlcmVkLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIGNvbnN0IHNwZWNpZmljTGF5ZXIgPSBsYXllciBhc1xuICAgICAgICB8IE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnNcbiAgICAgICAgfCBNYXBXaWRnZXRNYXJrZXJMYXllck9wdGlvbnNcbiAgICAgICAgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc2VzTm90RmlsdGVyZWQuZmlsdGVyKFxuICAgICAgICAoY2wpID0+IHNwZWNpZmljTGF5ZXIuY2xhc3Nlcz8uaW5jbHVkZXMoY2wuaWQpIHx8ICFzcGVjaWZpY0xheWVyLmNsYXNzZXMgfHwgc3BlY2lmaWNMYXllci5jbGFzc2VzLmxlbmd0aCA9PT0gMFxuICAgICAgKTtcblxuICAgICAgaWYgKCFzcGVjaWZpY0xheWVyLmF0dHJpYnV0ZSkge1xuICAgICAgICAvLyBObyBsb2NhdGlvbiBhdHRyaWJ1dGUgYXZhaWxhYmxlLCB0aGVuIHRyeSB0byBndWVzcyBvbmUgdGhhdCB3aWxsIGJlIG9rXG5cbiAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBXaWRnZXRNYXBVdGlscy5nZW9tZXRyeUZvckxheWVyKGxheWVyKTtcblxuICAgICAgICBsZXQgY2FuZGlkYXRlcyA9IFtdIGFzIHtcbiAgICAgICAgICBhdHRyOiBBdHRyaWJ1dGU7XG4gICAgICAgICAgZmllbGQ6IEZpZWxkIHwgdW5kZWZpbmVkO1xuICAgICAgICB9W107XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXN1bHRTZXQuaXRlbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyBCYXNlZCBvbiBpdGVtcyB0aGF0IHdlIGhhdmUgdG8gZGlzcGxheVxuXG4gICAgICAgICAgY2FuZGlkYXRlcyA9IE9iamVjdC5rZXlzKHJlc3VsdFNldC5pdGVtcylcbiAgICAgICAgICAgIC5tYXAoKGtleSkgPT4gKHsgaXRlbXM6IHJlc3VsdFNldC5pdGVtc1trZXldLCBvQ2xhc3M6IGNsYXNzZXMuZmluZCgoY2wpID0+IGNsLmlkID09PSBrZXkpIH0pKVxuICAgICAgICAgICAgLm1hcCgoeyBpdGVtcywgb0NsYXNzIH0pID0+XG4gICAgICAgICAgICAgIChvQ2xhc3MgPz8geyBhdHRyaWJ1dGVzOiBbXSB9KS5hdHRyaWJ1dGVzXG4gICAgICAgICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHsgYXR0ciwgZmllbGQ6IGZpZWxkcy5maW5kKChmKSA9PiBmLmlkID09PSBhdHRyLmZpZWxkKSB9KSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChhdHRyKSA9PiBhdHRyLmZpZWxkPy50eXBlID09PSBnZW9tZXRyeSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHAsIGMpID0+IFsuLi5wLCAuLi5jXSwgW10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IGl0ZW1zIHRvIGRpc3BsYXksIHNvIGFsbG93IGFsbCBjb3JyZXNwb25kaW5nIGdlb21ldHJ5IGZpZWxkc1xuICAgICAgICAgIGNhbmRpZGF0ZXMgPSBjbGFzc2VzTm90RmlsdGVyZWRcbiAgICAgICAgICAgIC5tYXAoKGNsYXp6KSA9PiBjbGF6ei5hdHRyaWJ1dGVzKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHsgYXR0ciwgZmllbGQ6IGZpZWxkcy5maW5kKChmaWVsZCkgPT4gZmllbGQuaWQgPT09IGF0dHIuZmllbGQpIH0pKVxuICAgICAgICAgICAgLmZpbHRlcigoeyBhdHRyLCBmaWVsZCB9KSA9PiBmaWVsZD8udHlwZSA9PT0gZ2VvbWV0cnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNwZWNpZmljTGF5ZXIuYXR0cmlidXRlID0gY2FuZGlkYXRlc1swXS5hdHRyLnRlY2huaWNhbE5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgcG9wdWxhdGVJbnRlbnNpdHlBdHRyaWJ1dGUoXG4gICAgbGF5ZXI6IE1hcFdpZGdldExheWVyT3B0aW9ucyxcbiAgICByZXN1bHRTZXQ6IFJlc3VsdFNldCxcbiAgICBjbGFzc2VzTm90RmlsdGVyZWQ6IENsYXNzW10sXG4gICAgZmllbGRzOiBGaWVsZFtdXG4gICkge1xuICAgIGlmIChcbiAgICAgIFsnaGVhdG1hcCcsICdidWJibGUnXS5pbmNsdWRlcyhsYXllci50eXBlKSAmJlxuICAgICAgISFyZXN1bHRTZXQgJiZcbiAgICAgICEhY2xhc3Nlc05vdEZpbHRlcmVkICYmXG4gICAgICBjbGFzc2VzTm90RmlsdGVyZWQubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgY29uc3Qgc3BlY2lmaWNMYXllciA9IGxheWVyIGFzIE1hcFdpZGdldEhlYXRNYXBMYXllck9wdGlvbnMgfCBNYXBXaWRnZXRCdWJibGVMYXllck9wdGlvbnM7XG5cbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc2VzTm90RmlsdGVyZWQuZmlsdGVyKFxuICAgICAgICAoY2wpID0+XG4gICAgICAgICAgKHNwZWNpZmljTGF5ZXIuY2xhc3Nlcz8uaW5jbHVkZXMoY2wuaWQpIHx8ICFzcGVjaWZpY0xheWVyLmNsYXNzZXMgfHwgc3BlY2lmaWNMYXllci5jbGFzc2VzLmxlbmd0aCA9PT0gMCkgJiZcbiAgICAgICAgICBjbC5hdHRyaWJ1dGVzLmZpbmQoKGF0dHIpID0+IGF0dHIudGVjaG5pY2FsTmFtZSA9PT0gKHNwZWNpZmljTGF5ZXI/LmF0dHJpYnV0ZSA/PyBbXSkpXG4gICAgICApO1xuXG4gICAgICBpZiAoIXNwZWNpZmljTGF5ZXIuaW50ZW5zaXR5QXR0cmlidXRlKSB7XG4gICAgICAgIC8vIE5vIGludGVuc2l0eSBhdHRyaWJ1dGUgYXZhaWxhYmxlLCB0aGVuIHRha2UgdGhlIG1heGltdW0gaW50ZW5zaXR5IG1hdGNoaW5nIGF0dHJpYnV0ZVxuICAgICAgICBjb25zdCBjYW5kaWRhdGVzRHJ5ID0gT2JqZWN0LmtleXMocmVzdWx0U2V0Lml0ZW1zKVxuICAgICAgICAgIC5tYXAoKGtleSkgPT4gKHsgaXRlbXM6IHJlc3VsdFNldC5pdGVtc1trZXldLCBvQ2xhc3M6IGNsYXNzZXMuZmluZCgoY2wpID0+IGNsLmlkID09PSBrZXkpIH0pKVxuICAgICAgICAgIC5tYXAoKHsgaXRlbXMsIG9DbGFzcyB9KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKG9DbGFzcyA/PyB7IGF0dHJpYnV0ZXM6IFtdIH0pLmF0dHJpYnV0ZXNcbiAgICAgICAgICAgICAgLm1hcCgoYXR0cikgPT4gKHsgYXR0ciwgZmllbGQ6IGZpZWxkcy5maW5kKChmKSA9PiBmLmlkID09PSBhdHRyLmZpZWxkKSB9KSlcbiAgICAgICAgICAgICAgLmZpbHRlcigoYXR0cikgPT4gYXR0ci5maWVsZD8udHlwZSA9PT0gRmllbGRUeXBlLkRFQ0lNQUwgfHwgYXR0ci5maWVsZD8udHlwZSA9PT0gRmllbGRUeXBlLklOVEVHRVIpXG4gICAgICAgICAgICAgIC5tYXAoKGF0dHIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyVmFsdWVzID0gSXRlbVV0aWxzLnBlcnRpbmVudFZhbHVlKGl0ZW1zLCBhdHRyLmF0dHIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBtaW46IE1hdGgubWluKC4uLmF0dHJWYWx1ZXMpLFxuICAgICAgICAgICAgICAgICAgbWF4OiBNYXRoLm1heCguLi5hdHRyVmFsdWVzKSxcbiAgICAgICAgICAgICAgICAgIHRlY2huaWNhbE5hbWU6IGF0dHIuYXR0ci50ZWNobmljYWxOYW1lXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAucmVkdWNlKChwLCBjKSA9PiBbLi4ucCwgLi4uY10sIFtdKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLm1heCAtIGEubWF4KTtcblxuICAgICAgICBpZiAoY2FuZGlkYXRlc0RyeS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc3BlY2lmaWNMYXllci5pbnRlbnNpdHlBdHRyaWJ1dGUgPSBjYW5kaWRhdGVzRHJ5WzBdLnRlY2huaWNhbE5hbWU7XG4gICAgICAgICAgc3BlY2lmaWNMYXllci5pbnRlbnNpdHlBc2MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEZlYXR1cmVGcm9tSXRlbShcbiAgICBwcm9qZWN0aW9uOiBQcm9qZWN0aW9uTGlrZSxcbiAgICBpdGVtOiBJdGVtLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBsb2NhdGlvbkF0dHJpYnV0ZTogQXR0cmlidXRlLFxuICAgIGljb25TdHlsZT86IFN0eWxlLFxuICAgIHNlbGVjdGVkSWNvblN0eWxlPzogU3R5bGVcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBGZWF0dXJlKHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICB0eXBlLFxuICAgICAgZ2VvbWV0cnk6IFdpZGdldE1hcFV0aWxzLnJlYWRHZW9tZXRyeShwcm9qZWN0aW9uLCBpdGVtLCAncG9pbnQnLCBsb2NhdGlvbkF0dHJpYnV0ZSkgPz8gdW5kZWZpbmVkLFxuICAgICAgY2xhc3NpY1N0eWxlOiBpY29uU3R5bGUgPz8gbnVsbCxcbiAgICAgIHNlbGVjdGVkU3R5bGU6IHNlbGVjdGVkSWNvblN0eWxlID8/IG51bGxcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRDaXJjbGVGZWF0dXJlRnJvbUl0ZW0oXG4gICAgcHJvamVjdGlvbjogUHJvamVjdGlvbkxpa2UsXG4gICAgaXRlbTogSXRlbSxcbiAgICBsb2NhdGlvbkF0dHJpYnV0ZTogQXR0cmlidXRlLFxuICAgIHJhZGl1czogbnVtYmVyLFxuICAgIGljb25TdHlsZTogU3R5bGUsXG4gICAgc2VsZWN0ZWRJY29uU3R5bGU6IFN0eWxlXG4gICkge1xuICAgIHJldHVybiBuZXcgRmVhdHVyZSh7XG4gICAgICAuLi5pdGVtLFxuICAgICAgZ2VvbWV0cnk6IG5ldyBDaXJjbGUoXG4gICAgICAgIChXaWRnZXRNYXBVdGlscy5yZWFkR2VvbWV0cnkocHJvamVjdGlvbiwgaXRlbSwgJ3BvaW50JywgbG9jYXRpb25BdHRyaWJ1dGUpIGFzIFBvaW50KS5nZXRDb29yZGluYXRlcygpLFxuICAgICAgICByYWRpdXNcbiAgICAgICksXG4gICAgICBjbGFzc2ljU3R5bGU6IGljb25TdHlsZSxcbiAgICAgIHNlbGVjdGVkU3R5bGU6IHNlbGVjdGVkSWNvblN0eWxlLFxuICAgICAgdHlwZTogJ2J1YmJsZSdcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRMaW5rRmVhdHVyZShyZWxhdGlvbjogUmVsYXRpb24sIGZlYXR1cmVTb3VyY2U6IEZlYXR1cmU8UG9pbnQ+LCBmZWF0dXJlRGVzdGluYXRpb246IEZlYXR1cmU8UG9pbnQ+KSB7XG4gICAgcmV0dXJuIG5ldyBGZWF0dXJlKHtcbiAgICAgIC4uLnJlbGF0aW9uLFxuICAgICAgZ2VvbWV0cnk6IG5ldyBMaW5lU3RyaW5nKFtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBmZWF0dXJlU291cmNlLmdldEdlb21ldHJ5KCk/LmdldENvb3JkaW5hdGVzKCkgPz8gZmVhdHVyZVNvdXJjZS5nZXRHZW9tZXRyeSgpPy5nZXRDZW50ZXIoKSA/PyBbMCwgMF0sXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZmVhdHVyZURlc3RpbmF0aW9uLmdldEdlb21ldHJ5KCk/LmdldENvb3JkaW5hdGVzKCkgPz8gZmVhdHVyZURlc3RpbmF0aW9uLmdldEdlb21ldHJ5KCk/LmdldENlbnRlcigpID8/IFswLCAwXVxuICAgICAgXSksXG4gICAgICBzb3VyY2U6IGZlYXR1cmVTb3VyY2UsXG4gICAgICBkZXN0aW5hdGlvbjogZmVhdHVyZURlc3RpbmF0aW9uLFxuICAgICAgdHlwZTogJ2xpbmsnXG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0TWFwQXNQbmcobWFwOiBNYXApIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBtYXAub25jZSgncmVuZGVyY29tcGxldGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IG1hcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICBjb25zdCBzaXplID0gbWFwLmdldFNpemUoKSB8fCBbMTAwLCAxMDBdO1xuICAgICAgICBtYXBDYW52YXMud2lkdGggPSBzaXplWzBdO1xuICAgICAgICBtYXBDYW52YXMuaGVpZ2h0ID0gc2l6ZVsxXTtcbiAgICAgICAgY29uc3QgbWFwQ29udGV4dCA9IG1hcENhbnZhcy5nZXRDb250ZXh0KCcyZCcpIHx8IChudWxsIGFzIHVua25vd24gYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcub2wtbGF5ZXIgY2FudmFzLCBjYW52YXMub2wtbGF5ZXInKSwgKGNhbnZhcykgPT4ge1xuICAgICAgICAgIGlmIChjYW52YXMud2lkdGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBvcGFjaXR5ID0gY2FudmFzLnBhcmVudE5vZGUuc3R5bGUub3BhY2l0eSB8fCBjYW52YXMuc3R5bGUub3BhY2l0eTtcbiAgICAgICAgICAgIG1hcENvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcGFjaXR5ID09PSAnJyA/IDEgOiBOdW1iZXIob3BhY2l0eSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IGNhbnZhcy5wYXJlbnROb2RlLnN0eWxlLmJhY2tncm91bmRDb2xvcjtcbiAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICAgICAgbWFwQ29udGV4dC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgICAgICAgICAgIG1hcENvbnRleHQuZmlsbFJlY3QoMCwgMCwgY2FudmFzLndpZHRoLCBjYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IG1hdHJpeDtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGNhbnZhcy5zdHlsZS50cmFuc2Zvcm07XG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgIC8vIEdldCB0aGUgdHJhbnNmb3JtIHBhcmFtZXRlcnMgZnJvbSB0aGUgc3R5bGUncyB0cmFuc2Zvcm0gbWF0cml4XG4gICAgICAgICAgICAgIG1hdHJpeCA9IHRyYW5zZm9ybVxuICAgICAgICAgICAgICAgIC5tYXRjaCgvXm1hdHJpeFxcKChbXihdKilcXCkkLylbMV1cbiAgICAgICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgICAgIC5tYXAoTnVtYmVyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1hdHJpeCA9IFtcbiAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KGNhbnZhcy5zdHlsZS53aWR0aCkgLyBjYW52YXMud2lkdGgsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoY2FudmFzLnN0eWxlLmhlaWdodCkgLyBjYW52YXMuaGVpZ2h0LFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9ybSB0byB0aGUgZXhwb3J0IG1hcCBjb250ZXh0XG4gICAgICAgICAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQucHJvdG90eXBlLnNldFRyYW5zZm9ybS5hcHBseShtYXBDb250ZXh0LCBtYXRyaXgpO1xuICAgICAgICAgICAgbWFwQ29udGV4dC5kcmF3SW1hZ2UoY2FudmFzLCAwLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtYXBDb250ZXh0Lmdsb2JhbEFscGhhID0gMTtcbiAgICAgICAgcmVzb2x2ZShtYXBDYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgICB9KTtcbiAgICAgIG1hcC5yZW5kZXJTeW5jKCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZXhwb3J0TWFwQXNJbWFnZShtYXA6IE1hcCwgZmlsZW5hbWU6IHN0cmluZykge1xuICAgIFdpZGdldE1hcFV0aWxzLmdldE1hcEFzUG5nKG1hcCkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGxpbmsuaHJlZiA9IGRhdGE7XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2VvbWV0cnlGb3JMYXllcihsYXllcjogTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKGxheWVyLnR5cGUpIHtcbiAgICAgIGNhc2UgJ21hcmtlcic6XG4gICAgICBjYXNlICdoZWF0bWFwJzpcbiAgICAgIGNhc2UgJ2J1YmJsZSc6XG4gICAgICBjYXNlICdwb2ludCc6XG4gICAgICAgIHJldHVybiBGaWVsZFR5cGUuUE9JTlQ7XG4gICAgICBjYXNlICdsaW5lJzpcbiAgICAgICAgcmV0dXJuIEZpZWxkVHlwZS5MSU5FO1xuICAgICAgY2FzZSAncG9seWdvbic6XG4gICAgICAgIHJldHVybiBGaWVsZFR5cGUuUE9MWUdPTjtcbiAgICAgIGNhc2UgJ211bHRpLWxpbmUnOlxuICAgICAgICByZXR1cm4gRmllbGRUeXBlLk1VTFRJTElORTtcbiAgICAgIGNhc2UgJ211bHRpLXBvbHlnb24nOlxuICAgICAgICByZXR1cm4gRmllbGRUeXBlLk1VTFRJUE9MWUdPTjtcbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgICByZXR1cm4gV2lkZ2V0TWFwVXRpbHMuZ2VvbWV0cnlGb3JMYXllcih7XG4gICAgICAgICAgdHlwZTogV2lkZ2V0TWFwTGF5ZXJTZXJ2aWNlLnRyYW5zbGF0ZUZpZWxkVHlwZVRvTGF5ZXJUeXBlKGxheWVyLnN1YlR5cGUpXG4gICAgICAgIH0gYXMgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBGaWVsZFR5cGUuUE9JTlQ7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzc2lnbkxheWVyc09yZGVyKF9sYXllcnM6IE1hcFdpZGdldExheWVyT3B0aW9uc1tdKSB7XG4gICAgY29uc3QgbGF5ZXJzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShfbGF5ZXJzKSkgYXMgTWFwV2lkZ2V0TGF5ZXJPcHRpb25zW107XG5cbiAgICBsYXllcnMuc29ydCgobDEsIGwyKSA9PiAobDIuYmFja2dyb3VuZCA/IDAgOiAxKSAtIChsMS5iYWNrZ3JvdW5kID8gMCA6IDEpKTtcblxuICAgIC8vIEFzc2lnbiBzdXJlIHRoaW5nc1xuICAgIGxheWVycy5mb3JFYWNoKChsYXllciwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChsYXllci5iYWNrZ3JvdW5kKSB7XG4gICAgICAgIGxheWVyLm9yZGVyID0gV2lkZ2V0TWFwVXRpbHMuQkFDS0dST1VORF9PUkRFUjtcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCA9PT0gMCAmJiAhbGF5ZXIub3JkZXIpIHtcbiAgICAgICAgbGF5ZXIub3JkZXIgPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGF5ZXJzLmZvckVhY2goKGxheWVyLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGxheWVyLm9yZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IFtkaXN0YW5jZVRvRmlyc3RQcmV2aW91c09yZGVyLCBkaXN0YW5jZVRvRmlyc3ROZXh0T3JkZXJdID0gW1xuICAgICAgICAgIGxheWVyc1xuICAgICAgICAgICAgLnNsaWNlKDAsIGluZGV4KVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLmZpbmRJbmRleCgoZWxlbWVudCkgPT4gZWxlbWVudC5vcmRlciAhPT0gdW5kZWZpbmVkKSArIDEsXG4gICAgICAgICAgbGF5ZXJzLnNsaWNlKGluZGV4ICsgMSkuZmluZEluZGV4KChlbGVtZW50KSA9PiBlbGVtZW50Lm9yZGVyICE9PSB1bmRlZmluZWQpXG4gICAgICAgIF07XG5cbiAgICAgICAgbGV0IFtwcmV2aW91c09yZGVySW5kZXgsIG5leHRPcmRlckluZGV4XSA9IFtcbiAgICAgICAgICBkaXN0YW5jZVRvRmlyc3RQcmV2aW91c09yZGVyID4gLTEgPyBpbmRleCAtIGRpc3RhbmNlVG9GaXJzdFByZXZpb3VzT3JkZXIgOiAwLFxuICAgICAgICAgIGRpc3RhbmNlVG9GaXJzdE5leHRPcmRlciArIGluZGV4ICsgMVxuICAgICAgICBdO1xuICAgICAgICBsZXQgW3ByZXZpb3VzT3JkZXIsIG5leHRPcmRlcl0gPSBbXG4gICAgICAgICAgZGlzdGFuY2VUb0ZpcnN0UHJldmlvdXNPcmRlciA+IC0xID8gbGF5ZXJzW3ByZXZpb3VzT3JkZXJJbmRleF0ub3JkZXIhIDogMCxcbiAgICAgICAgICBkaXN0YW5jZVRvRmlyc3ROZXh0T3JkZXIgPiAtMSA/IGxheWVyc1tuZXh0T3JkZXJJbmRleF0ub3JkZXIhIDogLTFcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAobmV4dE9yZGVyID4gMCAmJiBuZXh0T3JkZXIgPCBwcmV2aW91c09yZGVyKSB7XG4gICAgICAgICAgY29uc3QgbmV3T3JkZXIgPSBwcmV2aW91c09yZGVyICsgKG5leHRPcmRlckluZGV4IC0gcHJldmlvdXNPcmRlckluZGV4KTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgdGhlIG9yZGVyIHByb3BlcnR5IG9mIGxheWVyIG5vICR7aW5kZXggKyAyfSB3YXMgcHJlc2V0IGJ1dCBkb2Vzbid0IGZvbGxvdyB0aGUgb3JkZXIgb2YgdGhlIG90aGVyIGxheWVyc2BcbiAgICAgICAgICApO1xuICAgICAgICAgIG5leHRPcmRlciA9IG5ld09yZGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5leHRPcmRlciA+IDApIHtcbiAgICAgICAgICBsZXQgcmVsYXRpdmVJbmRleCA9IGluZGV4IC0gcHJldmlvdXNPcmRlckluZGV4O1xuICAgICAgICAgIGxheWVyLm9yZGVyID1cbiAgICAgICAgICAgIHByZXZpb3VzT3JkZXIgKyAoKG5leHRPcmRlciAtIHByZXZpb3VzT3JkZXIpIC8gKG5leHRPcmRlckluZGV4IC0gcHJldmlvdXNPcmRlckluZGV4KSkgKiByZWxhdGl2ZUluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxheWVyLm9yZGVyID0gcHJldmlvdXNPcmRlciArIGRpc3RhbmNlVG9GaXJzdFByZXZpb3VzT3JkZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYXllcnMuc29ydCgobDEsIGwyKSA9PiAobDEub3JkZXIgPz8gMSkgLSAobDIub3JkZXIhID8/IDEpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWFkR2VvbWV0cnk8VCBleHRlbmRzICdwb2ludCcgfCAnbGluZScgfCAnbXVsdGktbGluZScgfCAncG9seWdvbicgfCAnbXVsdGktcG9seWdvbic+KFxuICAgIHByb2plY3Rpb246IFByb2plY3Rpb25MaWtlLFxuICAgIGl0ZW06IEl0ZW0sXG4gICAgdHlwZTogVCxcbiAgICBhdHRyaWJ1dGU6IEF0dHJpYnV0ZSB8IHVuZGVmaW5lZFxuICApIHtcbiAgICBpZiAoIWF0dHJpYnV0ZSkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gaXRlbS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZS50ZWNobmljYWxOYW1lXTtcbiAgICBpZiAodmFsdWUudHlwZSA9PT0gJ01VTFRJJykge1xuICAgICAgdmFsdWUgPSB2YWx1ZS52YWx1ZXNbMF07XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYEdlb21ldHJ5IG5vdCB2aXNpYmxlIGZvciBpdGVtICR7aXRlbS5pZH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZ2VvbWV0cnk7XG4gICAgdHJ5IHtcbiAgICAgIGdlb21ldHJ5ID0gbmV3IEdlb0pTT04oKS5yZWFkR2VvbWV0cnkodmFsdWUudmFsdWUgYXMgYW55LCB7XG4gICAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiBwcm9qZWN0aW9uXG4gICAgICB9KSBhcyBHZW9tZXRyeTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2Vycm9yIHJlYWRpbmcgR2VvbWV0cnknLCB2YWx1ZS52YWx1ZSwgZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdlb21ldHJ5O1xuICB9XG5cbiAgc3RhdGljIHByb2plY3RFeHRlbnRBZ2dyZWdhdGlvblJlc3BvbnNlKFxuICAgIGZpZWxkOiBGaWVsZCxcbiAgICBleHRlbnRSZXNwb25zZTogQWdncmVnYXRpb25SZXN1bHQsXG4gICAgbGF5ZXI6IE1hcEdlb1NlcnZlckxheWVyT3B0aW9ucyxcbiAgICB3bXNDYXBhYmlsaXRpZXM6IHsgW3A6IHN0cmluZ106IEdldENhcGFiaWxpdGllc1Jlc3BvbnNlIHwgbnVsbCB9IHwgdW5kZWZpbmVkLFxuICAgIG1hcDogTWFwXG4gICkge1xuICAgIGNvbnN0IHByb2pCb3ggPSBnZXRQcm9qZWN0aW9uKGZpZWxkIS5jcnMgPz8gREVGQVVMVF9QUk9KRUNUSU9OKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGV4dGVudFJlc3BvbnNlLnZhbHVlcyBhcyB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICB0b3BfbGVmdDoge1xuICAgICAgICAgIGxvbjogc3RyaW5nO1xuICAgICAgICAgIGxhdDogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgICBib3R0b21fcmlnaHQ6IHtcbiAgICAgICAgICBsb246IHN0cmluZztcbiAgICAgICAgICBsYXQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfVtdO1xuICAgIGlmIChcbiAgICAgIHByb2pCb3ggJiZcbiAgICAgIHJlc3BvbnNlLmxlbmd0aCA+IDAgJiZcbiAgICAgIHJlc3BvbnNlWzBdLnZhbHVlICYmXG4gICAgICByZXNwb25zZVswXS52YWx1ZS50b3BfbGVmdCAmJlxuICAgICAgcmVzcG9uc2VbMF0udmFsdWUudG9wX2xlZnQubGF0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHJlc3BvbnNlWzBdLnZhbHVlLnRvcF9sZWZ0LmxvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICByZXNwb25zZVswXS52YWx1ZS5ib3R0b21fcmlnaHQgJiZcbiAgICAgIHJlc3BvbnNlWzBdLnZhbHVlLmJvdHRvbV9yaWdodC5sYXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcmVzcG9uc2VbMF0udmFsdWUuYm90dG9tX3JpZ2h0LmxvbiAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRhc291cmNlOiBsYXllci5kYXRhc291cmNlSWQsXG4gICAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgICAgZXh0ZW50OiBbXG4gICAgICAgICAgdHJhbnNmb3JtKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgIGV4dGVudFJlc3BvbnNlLnZhbHVlc1swXSBhcyB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdG9wX2xlZnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvbjogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKS52YWx1ZS50b3BfbGVmdC5sb25cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICBleHRlbnRSZXNwb25zZS52YWx1ZXNbMF0gYXMge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZWZ0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXQ6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICkudmFsdWUudG9wX2xlZnQubGF0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwcm9qQm94LFxuICAgICAgICAgICAgbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKClcbiAgICAgICAgICApLFxuICAgICAgICAgIHRyYW5zZm9ybShcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICBleHRlbnRSZXNwb25zZS52YWx1ZXNbMF0gYXMge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbV9yaWdodDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG9uOiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnZhbHVlLmJvdHRvbV9yaWdodC5sb25cbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICBleHRlbnRSZXNwb25zZS52YWx1ZXNbMF0gYXMge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbV9yaWdodDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGF0OiBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApLnZhbHVlLmJvdHRvbV9yaWdodC5sYXRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHByb2pCb3gsXG4gICAgICAgICAgICBtYXAuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKVxuICAgICAgICAgIClcbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YXNvdXJjZTogbGF5ZXIuZGF0YXNvdXJjZUlkLFxuICAgICAgZXh0ZW50OiBYTUxVdGlscy5nZXRMYXllckV4dGVudChsYXllci5wYXJhbUxheWVyLCBtYXAsIHdtc0NhcGFiaWxpdGllcyFbbGF5ZXIudXJsXT8uZG9jKSA/PyBbXSxcbiAgICAgIGVycm9yOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgREVGQVVMVF9IRUFUTUFQX1JBRElVUyA9IDI1O1xuICBzdGF0aWMgREVGQVVMVF9SQURJVVNfSU5URU5TSVRZX0ZBQ1RPUiA9IDEwMDAwO1xuICBzdGF0aWMgREVGQVVMVF9aT09NX01JTiA9IDM7XG4gIHN0YXRpYyBERUZBVUxUX1pPT01fU1RBUlQgPSAxMDtcbiAgc3RhdGljIERFRkFVTFRfWk9PTV9NQVggPSAxODtcbiAgc3RhdGljIERFRkFVTFRfTUFQX0NFTlRFUiA9IFsyLjI4MjcyMTczNDczODE1MjUsIDQ4Ljg2NDcwNjAzMTU1NzcxNl07XG5cbiAgc3RhdGljIEJBQ0tHUk9VTkRfT1JERVIgPSA5OTk5O1xufVxuIl19
|