@provoly/dashboard 0.13.2 → 0.13.3
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/i18n/en.translations.d.ts +9 -0
- package/dataset/i18n/fr.translations.d.ts +9 -0
- package/dataset/style/_o-pry-dataset-detail.scss +35 -1
- package/dataset/style/_o-pry-dataset.scss +2 -1
- package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +3 -3
- package/esm2022/dataset/i18n/en.translations.mjs +10 -1
- package/esm2022/dataset/i18n/fr.translations.mjs +10 -1
- package/esm2022/dataset/style/css.component.mjs +2 -2
- package/esm2022/lib/core/components/modal-status/modal-status.component.mjs +3 -3
- package/esm2022/lib/core/i18n/en.translations.mjs +2 -1
- package/esm2022/lib/core/i18n/fr.translations.mjs +2 -1
- package/esm2022/lib/core/model/dataset.interface.mjs +1 -1
- package/esm2022/lib/dashboard/components/widgets/base-widget.component.mjs +4 -1
- package/esm2022/lib/dashboard/components/widgets/settings/settings.component.mjs +19 -4
- package/esm2022/presentation/style/css.component.mjs +2 -2
- package/esm2022/restitution/style/css.component.mjs +2 -2
- package/esm2022/widgets/widget-aggregated-chart/component/widget-aggregated-chart.component.mjs +3 -3
- package/esm2022/widgets/widget-chart/component/widget-chart.component.mjs +3 -3
- package/esm2022/widgets/widget-graph/component/widget-graph.component.mjs +3 -3
- package/esm2022/widgets/widget-iframe/component/widget-iframe.component.mjs +7 -5
- package/esm2022/widgets/widget-map/component/widget-map.component.mjs +3 -3
- package/esm2022/widgets/widget-table/component/widget-table.component.mjs +3 -3
- package/esm2022/widgets/widget-tile/component/widget-tile.component.mjs +3 -3
- package/fesm2022/provoly-dashboard-dataset.mjs +22 -4
- package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-presentation.mjs +2 -2
- package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-restitution.mjs +2 -2
- package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-aggregated-chart.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-chart.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-graph.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-iframe.mjs +6 -4
- package/fesm2022/provoly-dashboard-widgets-widget-iframe.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-table.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
- package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs +2 -2
- package/fesm2022/provoly-dashboard-widgets-widget-tile.mjs.map +1 -1
- package/fesm2022/provoly-dashboard.mjs +41 -5
- package/fesm2022/provoly-dashboard.mjs.map +1 -1
- package/lib/core/components/modal-status/modal-status.component.d.ts +1 -1
- package/lib/core/i18n/en.translations.d.ts +1 -0
- package/lib/core/i18n/fr.translations.d.ts +1 -0
- package/lib/core/model/dataset.interface.d.ts +1 -1
- package/lib/dashboard/components/widgets/base-widget.component.d.ts +1 -0
- package/lib/dashboard/components/widgets/settings/settings.component.d.ts +10 -3
- package/package.json +31 -31
- package/presentation/style/_o-pry-presentation.scss +1 -2
- package/styles-theme/components-theme/_o-pry-dataset.theme.scss +6 -6
- package/styles-theme/main-theme.scss +1 -0
- package/widgets/widget-iframe/component/widget-iframe.component.d.ts +2 -0
|
@@ -433,11 +433,11 @@ export class WidgetGraphComponent extends DataWidgetComponent {
|
|
|
433
433
|
});
|
|
434
434
|
}
|
|
435
435
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetGraphComponent, deps: [{ token: i1.Store }, { token: i2.TooltipFactoryService }, { token: i2.PryI18nService }, { token: i2.SymbolService }, { token: i3.DomSanitizer }, { token: i0.ElementRef }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
436
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetGraphComponent, selector: "pry-widget-graph", viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<pry-widget-force-graph-css></pry-widget-force-graph-css>\n<div class=\"o-widget o-widget--graph\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"graph_layout\">{{ '@pry.widget.graph.layout' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLayout($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"layouts\"\n [ngModel]=\"optionsCopy!.layout\"\n bindLabel=\"key\"\n bindValue=\"key\"\n id=\"graph_layout\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-range\n [ngModel]=\"optionsCopy!.nodeRadius\"\n (ngModelChange)=\"changeNodeRadius($event)\"\n labelTranslate=\"@pry.widget.graph.nodeRadius\"\n min=\"10\"\n max=\"200\"\n ></pry-range>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"no-result\" *ngIf=\"(allItemsWithImages$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.graph.empty' | i18n }}</span>\n </div>\n <div class=\"m-btn-group -selection-choice\" [style.transform]=\"bottomLeft$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('move')\"\n [class.-selected]=\"mode === 'move'\"\n [pryTooltip]=\"infoTooltipMove\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipMove_widgetMap\"\n >\n <pry-icon iconSvg=\"move\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('rectangle')\"\n [class.-selected]=\"mode === 'rectangle'\"\n [pryTooltip]=\"infoTooltipRect\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipRect_widgetMap\"\n >\n <pry-icon iconSvg=\"rectangle\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </button>\n </div>\n\n <canvas\n #canvas\n class=\"o-widget--graph__canvas\"\n (mousemove)=\"onMouseMove($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseUp($event, true)\"\n (contextmenu)=\"contextMenu($event)\"\n ></canvas>\n\n <div class=\"selection-rectangle\" #selectionRectangle></div>\n\n <div\n class=\"m-tooltip m-tooltip--popup noevent\"\n [style.display]=\"(tooltip$ | async)?.display ? 'block' : 'none'\"\n [style.left.px]=\"((tooltip$ | async)?.x ?? 0) + 50\"\n [style.top.px]=\"((tooltip$ | async)?.y ?? 0) + 50\"\n >\n <div #tooltip></div>\n </div>\n</div>\n\n<ng-template #infoTooltipMove>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipMove_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipRect>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipRect_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["saveTriggered"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i2.PryTooltipDirective, selector: "[pryTooltip]", inputs: ["pryTooltip", "styleReversed", "pryTooltipContext", "pryTooltipPosition", "pryTooltipShowDelay"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i6.PryWidgetForceGraphCssComponent, selector: "pry-widget-force-graph-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
436
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetGraphComponent, selector: "pry-widget-graph", viewQueries: [{ propertyName: "canvas", first: true, predicate: ["canvas"], descendants: true }, { propertyName: "tooltip", first: true, predicate: ["tooltip"], descendants: true, read: ViewContainerRef }], usesInheritance: true, ngImport: i0, template: "<pry-widget-force-graph-css></pry-widget-force-graph-css>\n<div class=\"o-widget o-widget--graph\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"graph_layout\">{{ '@pry.widget.graph.layout' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLayout($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"layouts\"\n [ngModel]=\"optionsCopy!.layout\"\n bindLabel=\"key\"\n bindValue=\"key\"\n id=\"graph_layout\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-range\n [ngModel]=\"optionsCopy!.nodeRadius\"\n (ngModelChange)=\"changeNodeRadius($event)\"\n labelTranslate=\"@pry.widget.graph.nodeRadius\"\n min=\"10\"\n max=\"200\"\n ></pry-range>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"no-result\" *ngIf=\"(allItemsWithImages$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.graph.empty' | i18n }}</span>\n </div>\n <div class=\"m-btn-group -selection-choice\" [style.transform]=\"bottomLeft$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('move')\"\n [class.-selected]=\"mode === 'move'\"\n [pryTooltip]=\"infoTooltipMove\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipMove_widgetMap\"\n >\n <pry-icon iconSvg=\"move\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('rectangle')\"\n [class.-selected]=\"mode === 'rectangle'\"\n [pryTooltip]=\"infoTooltipRect\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipRect_widgetMap\"\n >\n <pry-icon iconSvg=\"rectangle\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </button>\n </div>\n\n <canvas\n #canvas\n class=\"o-widget--graph__canvas\"\n (mousemove)=\"onMouseMove($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseUp($event, true)\"\n (contextmenu)=\"contextMenu($event)\"\n ></canvas>\n\n <div class=\"selection-rectangle\" #selectionRectangle></div>\n\n <div\n class=\"m-tooltip m-tooltip--popup noevent\"\n [style.display]=\"(tooltip$ | async)?.display ? 'block' : 'none'\"\n [style.left.px]=\"((tooltip$ | async)?.x ?? 0) + 50\"\n [style.top.px]=\"((tooltip$ | async)?.y ?? 0) + 50\"\n >\n <div #tooltip></div>\n </div>\n</div>\n\n<ng-template #infoTooltipMove>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipMove_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipRect>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipRect_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["saveTriggered", "changeTitle"] }, { kind: "component", type: i2.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i2.PrySelectComponent, selector: "pry-select", inputs: ["labelTranslate", "baseTranslate", "translationFn", "translationFnArgs", "clearable", "multiple", "multipleClearRight", "placeholder", "isForm", "required", "name", "readonly", "items", "itemsAsOption", "bindData", "bindValue", "bindLabel", "bindIcon", "iconSize", "templateLabel", "templateOption", "autocomplete"] }, { kind: "component", type: i2.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "directive", type: i2.PryTooltipDirective, selector: "[pryTooltip]", inputs: ["pryTooltip", "styleReversed", "pryTooltipContext", "pryTooltipPosition", "pryTooltipShowDelay"] }, { kind: "component", type: i2.PryRangeComponent, selector: "pry-range", inputs: ["min", "max", "step", "disabled", "labelTranslate"] }, { kind: "component", type: i6.PryWidgetForceGraphCssComponent, selector: "pry-widget-force-graph-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
437
437
|
}
|
|
438
438
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetGraphComponent, decorators: [{
|
|
439
439
|
type: Component,
|
|
440
|
-
args: [{ selector: 'pry-widget-graph', changeDetection: ChangeDetectionStrategy.OnPush, template: "<pry-widget-force-graph-css></pry-widget-force-graph-css>\n<div class=\"o-widget o-widget--graph\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"graph_layout\">{{ '@pry.widget.graph.layout' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLayout($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"layouts\"\n [ngModel]=\"optionsCopy!.layout\"\n bindLabel=\"key\"\n bindValue=\"key\"\n id=\"graph_layout\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-range\n [ngModel]=\"optionsCopy!.nodeRadius\"\n (ngModelChange)=\"changeNodeRadius($event)\"\n labelTranslate=\"@pry.widget.graph.nodeRadius\"\n min=\"10\"\n max=\"200\"\n ></pry-range>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"no-result\" *ngIf=\"(allItemsWithImages$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.graph.empty' | i18n }}</span>\n </div>\n <div class=\"m-btn-group -selection-choice\" [style.transform]=\"bottomLeft$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('move')\"\n [class.-selected]=\"mode === 'move'\"\n [pryTooltip]=\"infoTooltipMove\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipMove_widgetMap\"\n >\n <pry-icon iconSvg=\"move\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('rectangle')\"\n [class.-selected]=\"mode === 'rectangle'\"\n [pryTooltip]=\"infoTooltipRect\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipRect_widgetMap\"\n >\n <pry-icon iconSvg=\"rectangle\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </button>\n </div>\n\n <canvas\n #canvas\n class=\"o-widget--graph__canvas\"\n (mousemove)=\"onMouseMove($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseUp($event, true)\"\n (contextmenu)=\"contextMenu($event)\"\n ></canvas>\n\n <div class=\"selection-rectangle\" #selectionRectangle></div>\n\n <div\n class=\"m-tooltip m-tooltip--popup noevent\"\n [style.display]=\"(tooltip$ | async)?.display ? 'block' : 'none'\"\n [style.left.px]=\"((tooltip$ | async)?.x ?? 0) + 50\"\n [style.top.px]=\"((tooltip$ | async)?.y ?? 0) + 50\"\n >\n <div #tooltip></div>\n </div>\n</div>\n\n<ng-template #infoTooltipMove>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipMove_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipRect>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipRect_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </div>\n</ng-template>\n" }]
|
|
440
|
+
args: [{ selector: 'pry-widget-graph', changeDetection: ChangeDetectionStrategy.OnPush, template: "<pry-widget-force-graph-css></pry-widget-force-graph-css>\n<div class=\"o-widget o-widget--graph\">\n <pry-widget-header\n [datasourceIds]=\"(datasourceIds$ | async) ?? []\"\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n #header\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"graph_layout\">{{ '@pry.widget.graph.layout' | i18n }}</label>\n <pry-select\n (ngModelChange)=\"changeLayout($event)\"\n [itemsAsOption]=\"true\"\n [items]=\"layouts\"\n [ngModel]=\"optionsCopy!.layout\"\n bindLabel=\"key\"\n bindValue=\"key\"\n id=\"graph_layout\"\n class=\"a-pry-select\"\n ></pry-select>\n </div>\n\n <div class=\"m-form-label-field\">\n <pry-range\n [ngModel]=\"optionsCopy!.nodeRadius\"\n (ngModelChange)=\"changeNodeRadius($event)\"\n labelTranslate=\"@pry.widget.graph.nodeRadius\"\n min=\"10\"\n max=\"200\"\n ></pry-range>\n </div>\n </pry-settings>\n </pry-widget-header>\n <div class=\"no-result\" *ngIf=\"(allItemsWithImages$ | async)?.length === 0\">\n <img\n class=\"no-result__search\"\n src=\"../../../assets/svgs/pry_recherche_pas_de_resultat.svg\"\n alt=\"{{ '@pry.widget.table.empty' | i18n }}\"\n aria-hidden=\"true\"\n />\n <span class=\"no-result__text\">{{ '@pry.widget.graph.empty' | i18n }}</span>\n </div>\n <div class=\"m-btn-group -selection-choice\" [style.transform]=\"bottomLeft$ | async\">\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('move')\"\n [class.-selected]=\"mode === 'move'\"\n [pryTooltip]=\"infoTooltipMove\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipMove_widgetMap\"\n >\n <pry-icon iconSvg=\"move\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </button>\n\n <button\n type=\"button\"\n class=\"a-btn a-btn--icon-only\"\n (click)=\"changeMode('rectangle')\"\n [class.-selected]=\"mode === 'rectangle'\"\n [pryTooltip]=\"infoTooltipRect\"\n pryTooltipPosition=\"bottom\"\n aria-describedby=\"infoTooltipRect_widgetMap\"\n >\n <pry-icon iconSvg=\"rectangle\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </button>\n </div>\n\n <canvas\n #canvas\n class=\"o-widget--graph__canvas\"\n (mousemove)=\"onMouseMove($event)\"\n (mousedown)=\"onMouseDown($event)\"\n (mouseup)=\"onMouseUp($event)\"\n (mouseleave)=\"onMouseUp($event, true)\"\n (contextmenu)=\"contextMenu($event)\"\n ></canvas>\n\n <div class=\"selection-rectangle\" #selectionRectangle></div>\n\n <div\n class=\"m-tooltip m-tooltip--popup noevent\"\n [style.display]=\"(tooltip$ | async)?.display ? 'block' : 'none'\"\n [style.left.px]=\"((tooltip$ | async)?.x ?? 0) + 50\"\n [style.top.px]=\"((tooltip$ | async)?.y ?? 0) + 50\"\n >\n <div #tooltip></div>\n </div>\n</div>\n\n<ng-template #infoTooltipMove>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipMove_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.move' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #infoTooltipRect>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltipRect_widgetMap\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.graph.rectangle' | i18n }}</span>\n </div>\n</ng-template>\n" }]
|
|
441
441
|
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.TooltipFactoryService }, { type: i2.PryI18nService }, { type: i2.SymbolService }, { type: i3.DomSanitizer }, { type: i0.ElementRef }, { type: i0.Injector }]; }, propDecorators: { canvas: [{
|
|
442
442
|
type: ViewChild,
|
|
443
443
|
args: ['canvas']
|
|
@@ -445,4 +445,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
|
|
|
445
445
|
type: ViewChild,
|
|
446
446
|
args: ['tooltip', { read: ViewContainerRef }]
|
|
447
447
|
}] } });
|
|
448
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWdyYXBoL2NvbXBvbmVudC93aWRnZXQtZ3JhcGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtZ3JhcGgvY29tcG9uZW50L3dpZGdldC1ncmFwaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFJVCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFFTCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBS25CLG9CQUFvQixFQUNwQixzQkFBc0IsRUFHdEIsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNoSCxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixhQUFhLEVBQ2IsS0FBSyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osR0FBRyxFQUNILFFBQVEsRUFFUixPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7O0FBTzdELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxtQkFBbUI7SUFnQzNELFlBQ0UsS0FBaUIsRUFDVCxxQkFBNEMsRUFDNUMsZ0JBQWdDLEVBQ2hDLGFBQTRCLEVBQzVCLFNBQXVCLEVBQy9CLEVBQWMsRUFDTixTQUFtQjtRQUUzQixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBUFQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdCO1FBQ2hDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFFdkIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQTlCN0IsWUFBTyxHQUFvQyxJQUFJLENBQUM7UUFHaEQsaUJBQVksR0FBYyxFQUFFLENBQUM7UUFDN0IscUJBQWdCLEdBQWMsRUFBRSxDQUFDO1FBRWpDLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQztZQUM3QixDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1lBQ0osSUFBSSxFQUFFLElBQTBCO1lBQ2hDLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBQ0gsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUUxQixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMsVUFBSyxHQUFHLElBQUksT0FBTyxFQUFjLENBQUM7UUFDbEMsU0FBSSxHQUF5QixNQUFNLENBQUM7UUFFcEMsV0FBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLHNCQUFpQixHQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3QyxZQUFPLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELGNBQVMsR0FBWSxLQUFLLENBQUM7UUFhekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2pDLEdBQUcsQ0FDRCxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ1gsQ0FBQztZQUNDLGVBQWUsRUFBRSxNQUFNO1lBQ3ZCLGlCQUFpQixFQUFFLEdBQUc7WUFDdEIsZUFBZSxFQUFFLEdBQUc7WUFDcEIsaUJBQWlCLEVBQUUsT0FBTztZQUMxQixlQUFlLEVBQUUsTUFBTTtZQUN2QixlQUFlLEVBQUUsR0FBRztZQUNwQixpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLFVBQVUsRUFBRSxFQUFFO1lBQ2QsTUFBTSxFQUFFLFFBQVE7WUFDaEIsR0FBRyxRQUFRLENBQUMsT0FBTztTQUNwQixDQUF1QixDQUMzQixDQUNGLENBQUM7UUFFRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUN2QixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQXdCLEVBQUUsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDMUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUNULEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFxQixDQUFDLEVBQzVHLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ1gsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDNUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUM1QyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNqQixJQUFJLENBQ0YsSUFBSSxPQUFPLENBQTZDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQ3JGLE9BQU8sQ0FDTCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDeEIsSUFBSTtnQkFDSixLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQzthQUNyQixDQUFDLENBQUMsQ0FDSixDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUNGLENBQ0YsQ0FBQztRQUVGLGFBQWEsQ0FBQztZQUNaLElBQUksQ0FBQyxtQkFBbUI7WUFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDL0MsSUFBSSxDQUFDLFNBQVM7WUFDZCxJQUFJLENBQUMsUUFBUTtZQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JHLElBQUksQ0FBQyxZQUFZO1NBQ2xCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRTtZQUM3RSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRCxLQUFLLEVBQUUsR0FBRztnQkFDVixJQUFJLEVBQUUsYUFBYSxDQUFDLElBQUk7Z0JBQ3hCLEVBQUUsRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pCLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSztnQkFDMUIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDMUQsQ0FBQyxDQUFjLENBQUM7WUFFakIsTUFBTSxZQUFZLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNqQyxZQUFZLENBQUMsR0FBRyxHQUFHLGdDQUFnQyxDQUFDO1lBRXBELHlCQUF5QjtZQUN6QixTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO3dCQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO3dCQUMvQixJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUU7d0JBQ2hFLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTTt3QkFDbkIsS0FBSyxFQUFFLFlBQVk7d0JBQ25CLFFBQVEsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3BELENBQUMsQ0FBQztpQkFDSjtnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUN2RSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzt3QkFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTt3QkFDL0IsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO3dCQUNyRSxFQUFFLEVBQUUsUUFBUSxDQUFDLFdBQVc7d0JBQ3hCLEtBQUssRUFBRSxZQUFZO3dCQUNuQixRQUFRLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN6RCxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ2xGLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDdkYsUUFBUTthQUNULENBQUMsQ0FBYyxDQUFDO1lBRWpCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUN4QjtZQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUMzRyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3pGLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQWdCLENBQUM7WUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNyQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksU0FBUyxFQUFFO29CQUNiLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztpQkFDbEQ7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUVoRixJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM1RSxHQUFHLENBQ0QsQ0FBQyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFLENBQ3hCLCtCQUErQixhQUFhLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQ3pGLEVBQ0QsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUNWLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQTJCLEVBQUUsSUFBc0I7UUFDaEUsUUFBUSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ3RCLEtBQUssUUFBUTtnQkFDWCxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRixLQUFLLE9BQU8sQ0FBQztZQUNiO2dCQUNFLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7cUJBQ3RDLEtBQUssQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLENBQUM7cUJBQ2hDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7cUJBQ3BCLEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUM7cUJBQ3BCLEtBQUssQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQ3RELEtBQUssQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0Q7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUMxRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztJQUNySCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFUSxXQUFXO1FBQ2xCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBMEI7UUFDbkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFXO1FBQ3RCLElBQUksQ0FBQyxXQUFZLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNwQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsTUFBVztRQUMxQixJQUFJLENBQUMsV0FBWSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7SUFDeEMsQ0FBQztJQUVEOztPQUVHO0lBRUgsSUFBSSxDQUFDLElBQXNCLEVBQUUsT0FBMkIsRUFBRSxhQUE2QjtRQUNyRixPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsZUFBZTtnQkFDZixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFL0MsZ0JBQWdCO2dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFFdkIsZ0JBQWdCO2dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUV2Qix3Q0FBd0M7Z0JBQ3hDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ3hCO2FBQ0Y7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFFbkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFckUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFTyxTQUFTLENBQUMsT0FBMkI7UUFDM0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztZQUNyRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDaEcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2QsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ3BDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNwQyxPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQzFCLENBQUMsRUFDRCxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFDWCxLQUFLLENBQ04sQ0FBQztnQkFDRixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzVHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDOUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQ1YsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQzdELENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUM3RCxPQUFPLENBQUMsVUFBVSxFQUNsQixPQUFPLENBQUMsVUFBVSxDQUNuQixDQUFDO2FBQ0g7U0FDRjtJQUNILENBQUM7SUFFTyxTQUFTLENBQUMsT0FBMkIsRUFBRSxhQUE2QjtRQUMxRSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1lBQ3JELEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RGLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3pGLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxJQUFJLFVBQVUsRUFBRTtvQkFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQ3hCLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDaEQsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUNoRCxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2pELENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2hELENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FDakQsQ0FBQztvQkFDRixNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFVBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzdHLFFBQVE7b0JBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FDWixDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQ2pELENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxPQUFPLEVBQ1AsT0FBTyxHQUFHLENBQUMsRUFDWCxLQUFLLEdBQUcsR0FBRyxDQUNaLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVyxFQUFFLFVBQVcsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzlHLFFBQVE7b0JBQ1IsSUFBSSxDQUFDLFNBQVMsQ0FDWixDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDM0MsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQzNDLE9BQU8sRUFDUCxPQUFPLEVBQ1AsS0FBSyxDQUNOLENBQUM7aUJBQ0g7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVPLHdCQUF3QixDQUM5QixJQUFhLEVBQ2IsVUFBbUIsRUFDbkIsYUFBNkIsRUFDN0IsT0FBMkI7UUFFM0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqRSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBRXRCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRU8sWUFBWSxDQUNsQixJQUFhLEVBQ2IsVUFBbUIsRUFDbkIsVUFBbUIsRUFDbkIsYUFBNkIsRUFDN0IsT0FBMkI7UUFFM0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekYsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqSCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDL0MsU0FBUyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDdEI7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6RixDQUFDO0lBRU8sUUFBUSxDQUNkLE9BQWUsRUFDZixPQUFlLEVBQ2YsS0FBYSxFQUNiLGFBQW9CLEVBQ3BCLE9BQTJCLEVBQzNCLElBQWEsRUFDYixTQUFpQjtRQUVqQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1lBQ2xDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO1lBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FBQyxFQUFFLElBQUksSUFBSSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0csSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztZQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN4QjtRQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFTyxTQUFTLENBQUMsT0FBZSxFQUFFLE9BQWUsRUFBRSxPQUFlLEVBQUUsT0FBZSxFQUFFLEtBQWE7UUFDakcsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNoQixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFFbkIscUdBQXFHO1lBQ3JHLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQzVDLE9BQU8sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBRTVDLGlGQUFpRjtZQUNqRixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDakIsT0FBTyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUNqRCxPQUFPLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ2xELENBQUM7WUFFRixnRUFBZ0U7WUFDaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ2pCLE9BQU8sR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFDakQsT0FBTyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUNsRCxDQUFDO1lBRUYsa0dBQWtHO1lBQ2xHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDakIsT0FBTyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUNqRCxPQUFPLEdBQUcsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ2xELENBQUM7WUFFRiwrQkFBK0I7WUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUVILFdBQVcsQ0FBQyxNQUFrQjtRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRztnQkFDaEIsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQy9DLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFO2FBQzlDLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWtCO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUN0QjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsTUFBa0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0Q7YUFBTTtZQUNMLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFVBQVcsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoRSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO29CQUN4QixJQUFJLENBQUMsaUJBQWlCLEdBQUc7d0JBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUMvQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDaEQsQ0FBQztpQkFDSDthQUNGO1lBQ0QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO1FBRUQsNEJBQTRCO1FBQzVCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFrQixFQUFFLEtBQUssR0FBRyxLQUFLO1FBQ3pDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsTUFBTSxLQUFLLE9BQU8sRUFBRTt3QkFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO3dCQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7cUJBQzVCO2lCQUNGO3FCQUFNO29CQUNMLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7d0JBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVyxDQUFDLENBQUM7d0JBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUM3RixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7cUJBQ2hCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUNqQztpQkFDRjthQUNGO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUN2Rzt5QkFBTTt3QkFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUN2RjtpQkFDRjthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNuQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFrQjtRQUM1QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRTtZQUN2QyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FDakIsa0JBQWtCLENBQUMsSUFBSSxDQUFDO29CQUN0QixNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUN4QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87b0JBQ3ZCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDdkIsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtvQkFDM0csSUFBSSxFQUFFLE9BQU87aUJBQ2QsQ0FBQyxDQUNILENBQUM7YUFDSDtTQUNGO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBRUgsU0FBUyxDQUFDLE1BQWtCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQzdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDUCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQXlFO1FBQ2pHLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUM3QixDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtZQUMzQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO1lBQzNDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUk7WUFDM0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUM5QyxDQUFDO0lBQ0osQ0FBQztJQUVRLE9BQU87UUFDZCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBdGtCVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwwTkFNRCxnQkFBZ0Isb0RDekRoRCw2N0hBa0hBOzsyRkQvRGEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGtCQUFrQixtQkFFWCx1QkFBdUIsQ0FBQyxNQUFNO29RQU8xQixNQUFNO3NCQUExQixTQUFTO3VCQUFDLFFBQVE7Z0JBQytCLE9BQU87c0JBQXhELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29udGV4dE1lbnVBY3Rpb25zLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgSXRlbSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFJlbGF0aW9uVHlwZSxcbiAgUmVsYXRpb25UeXBlc0FjdGlvbnMsXG4gIFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMsXG4gIFN5bWJvbFNlcnZpY2UsXG4gIFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGZvcmNlQ2VudGVyLCBmb3JjZUNvbGxpZGUsIGZvcmNlTGluaywgZm9yY2VNYW55Qm9keSwgZm9yY2VTaW11bGF0aW9uLCBmb3JjZVgsIGZvcmNlWSB9IGZyb20gJ2QzLWZvcmNlJztcbmltcG9ydCB7XG4gIGF1ZGl0VGltZSxcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWxheSxcbiAgZmlsdGVyLFxuICBmcm9tLFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0XG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHJ5TGluaywgUHJ5Tm9kZSB9IGZyb20gJy4uL2xheW91dC9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBzaW1wbGVTaW11bGF0aW9uIH0gZnJvbSAnLi4vbGF5b3V0L3NpbXBsZS5mdW5jdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtZ3JhcGgnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0R3JhcGhDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8R3JhcGhXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9ucyE6IEdyYXBoV2lkZ2V0T3B0aW9ucztcbiAgb3B0aW9uc0NvcHk/OiBHcmFwaFdpZGdldE9wdGlvbnM7XG4gIHNlbGVjdGVkSWRzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycpIGNhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0b29sdGlwJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHRvb2x0aXAhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgdmlld1NpemUkOiBPYnNlcnZhYmxlPFtudW1iZXIsIG51bWJlcl0+O1xuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcbiAgc2ltdWxhdGlvbiE6IGFueTtcbiAgYWxsSXRlbXNXaXRoSW1hZ2VzJDogT2JzZXJ2YWJsZTx7IGl0ZW06IEl0ZW07IGltYWdlOiBIVE1MQ2FudmFzRWxlbWVudCB9W10+O1xuICBpdGVtc0FzTm9kZXM6IFByeU5vZGVbXSA9IFtdO1xuICByZWxhdGlvbnNBc0xpbmtzOiBQcnlMaW5rW10gPSBbXTtcbiAgZHJhZ2dlZE5vZGU/OiBQcnlOb2RlO1xuICB0b29sdGlwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICBpdGVtOiBudWxsIGFzIHVua25vd24gYXMgUHJ5Tm9kZSxcbiAgICBkaXNwbGF5OiBmYWxzZVxuICB9KTtcbiAgZHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0UmVjdD86IHsgc3RhcnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTsgZW5kOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfTtcbiAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10gPSBbXTtcbiAgbW92ZSQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuICBtb2RlOiAnbW92ZScgfCAncmVjdGFuZ2xlJyA9ICdtb3ZlJztcbiAgYm90dG9tTGVmdCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgb2Zmc2V0ID0gWzAsIDBdO1xuICBhZGRpdGlvbm5hbE9mZnNldDogW251bWJlciwgbnVtYmVyXSA9IFswLCAwXTtcbiAgbGF5b3V0cyA9IFt7IGtleTogJ3NpbXBsZScgfSwgeyBrZXk6ICdmb3JjZScgfV07XG4gIG1vdXNlRG93bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHN5bWJvbFNlcnZpY2U6IFN5bWJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcblxuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUmVsYXRpb25UeXBlc0FjdGlvbnMubG9hZCgpKTtcbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG1hbmlmZXN0KSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICBsaW5rU3Ryb2tlQ29sb3I6ICcjOTk5JyxcbiAgICAgICAgICAgIGxpbmtTdHJva2VPcGFjaXR5OiAwLjYsXG4gICAgICAgICAgICBsaW5rU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIGxpbmtTdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICAgICAgbm9kZVN0cm9rZUNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICBub2RlU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIG5vZGVTdHJva2VPcGFjaXR5OiAxLFxuICAgICAgICAgICAgbm9kZVJhZGl1czogMjUsXG4gICAgICAgICAgICBsYXlvdXQ6ICdzaW1wbGUnLFxuICAgICAgICAgICAgLi4ubWFuaWZlc3Qub3B0aW9uc1xuICAgICAgICAgIH0pIGFzIEdyYXBoV2lkZ2V0T3B0aW9uc1xuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJC5waXBlKGZpbHRlcigob3B0KSA9PiAhIW9wdCkpLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0geyAuLi4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSkgYXMgR3JhcGhXaWRnZXRPcHRpb25zKSB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy52aWV3U2l6ZSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSkucGlwZShcbiAgICAgIGRlbGF5KDEwKSxcbiAgICAgIG1hcCgoW3NpemUsIGhlYWRlcl0pID0+IFtzaXplLndpZHRoLCBzaXplLmhlaWdodCAtIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCA6IDApXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICAgIHRhcCgoc2l6ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LndpZHRoID0gc2l6ZVswXTtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmhlaWdodCA9IHNpemVbMV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWxsSXRlbXNXaXRoSW1hZ2VzJCA9IHRoaXMuYWxsSXRlbXMkLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoaXRlbXMpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgbmV3IFByb21pc2U8eyBpdGVtOiBJdGVtOyBpbWFnZTogSFRNTENhbnZhc0VsZW1lbnQgfVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLmFsbChpdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2woaXRlbSkpKS50aGVuKChjYW52YXNlcykgPT5cbiAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICBpbWFnZTogY2FudmFzZXNbaWR4XVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFsbEl0ZW1zV2l0aEltYWdlcyQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQucGlwZShtYXAoKHJzKSA9PiBycy5yZWxhdGlvbnMpKSxcbiAgICAgIHRoaXMudmlld1NpemUkLFxuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMucmVsYXRpb25zVHlwZXMpLnBpcGUodGFwKChydCkgPT4gKHRoaXMucmVsYXRpb25UeXBlcyA9IHJ0KSkpLFxuICAgICAgdGhpcy5zZWxlY3RlZElkcyRcbiAgICBdKS5zdWJzY3JpYmUoKFtpdGVtcywgcmVsYXRpb25zLCBzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzLCBzZWxlY3RlZElkc10pID0+IHtcbiAgICAgIHRoaXMuaXRlbXNBc05vZGVzID0gaXRlbXMubWFwKChpdGVtV2l0aEltYWdlLCBpZHgpID0+ICh7XG4gICAgICAgIGluZGV4OiBpZHgsXG4gICAgICAgIGl0ZW06IGl0ZW1XaXRoSW1hZ2UuaXRlbSxcbiAgICAgICAgaWQ6IGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCxcbiAgICAgICAgaW1hZ2U6IGl0ZW1XaXRoSW1hZ2UuaW1hZ2UsXG4gICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZElkcy5pbmRleE9mKGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCkgPiAtMVxuICAgICAgfSkpIGFzIFByeU5vZGVbXTtcblxuICAgICAgY29uc3QgdW5rbm93bkltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICB1bmtub3duSW1hZ2Uuc3JjID0gJy9hc3NldHMvc3Zncy9xdWVzdGlvbi1saW5lLnN2Zyc7XG5cbiAgICAgIC8vIENvbXBsZXRlIG1pc3Npbmcgbm9kZXNcbiAgICAgIHJlbGF0aW9ucy5mb3JFYWNoKChyZWxhdGlvbikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLnNvdXJjZSkpIHtcbiAgICAgICAgICB0aGlzLml0ZW1zQXNOb2Rlcy5wdXNoKHtcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLml0ZW1zQXNOb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgICBpdGVtOiB7IGlkOiByZWxhdGlvbi5zb3VyY2UsIG9DbGFzczogJ3Vua25vd24nLCBhdHRyaWJ1dGVzOiB7fSB9LFxuICAgICAgICAgICAgaWQ6IHJlbGF0aW9uLnNvdXJjZSxcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5zb3VyY2UpID4gLTFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLmRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgIHRoaXMuaXRlbXNBc05vZGVzLnB1c2goe1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaXRlbXNBc05vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW06IHsgaWQ6IHJlbGF0aW9uLmRlc3RpbmF0aW9uLCBvQ2xhc3M6ICd1bmtub3duJywgYXR0cmlidXRlczoge30gfSxcbiAgICAgICAgICAgIGlkOiByZWxhdGlvbi5kZXN0aW5hdGlvbixcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5kZXN0aW5hdGlvbikgPiAtMVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWxhdGlvbnNBc0xpbmtzID0gcmVsYXRpb25zLm1hcCgocmVsYXRpb24pID0+ICh7XG4gICAgICAgIHNvdXJjZTogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uc291cmNlKT8uaW5kZXggPz8gLTEsXG4gICAgICAgIHRhcmdldDogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uZGVzdGluYXRpb24pPy5pbmRleCA/PyAtMSxcbiAgICAgICAgcmVsYXRpb25cbiAgICAgIH0pKSBhcyBQcnlMaW5rW107XG5cbiAgICAgIGlmICh0aGlzLnNpbXVsYXRpb24pIHtcbiAgICAgICAgdGhpcy5zaW11bGF0aW9uLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zaW11bGF0aW9uID0gdGhpcy5pbml0U2ltdWxhdGlvbihvcHRpb25zLCBzaXplKS5vbigndGljaycsIHRoaXMuZHJhdyhzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50b29sdGlwJC5waXBlKGZpbHRlcigodG9vbHRpcCkgPT4gISF0b29sdGlwICYmICEhdG9vbHRpcC5pdGVtKSkuc3Vic2NyaWJlKCh0b29sdGlwKSA9PiB7XG4gICAgICAgIGxldCB0eXBlID0gdG9vbHRpcC5pdGVtLml0ZW0ub0NsYXNzIGFzIHN0cmluZztcbiAgICAgICAgdGhpcy50b29sdGlwLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCQgPSB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZS5nZW5lcmF0ZVRvb2x0aXAodHlwZSwgdGhpcy5faW5qZWN0b3IsIHRoaXMudG9vbHRpcCk7XG4gICAgICAgIGNvbXBvbmVudCQuc3Vic2NyaWJlKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdG9vbHRpcC5pdGVtLml0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubW92ZSQucGlwZShhdWRpdFRpbWUoMzApKS5zdWJzY3JpYmUoKCRldmVudCkgPT4gdGhpcy5tb3ZlQ2FsbGJhY2soJGV2ZW50KSk7XG5cbiAgICB0aGlzLmJvdHRvbUxlZnQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJCwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbc2l6ZSwgZGlzcGxheUhlYWRlcl0pID0+XG4gICAgICAgICAgYHRyYW5zbGF0ZSgxMHB4ICxjYWxjKDEzcHggLSAke2Rpc3BsYXlIZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCArICdweCcgOiAnMHB4J30pKWBcbiAgICAgICksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuICB9XG5cbiAgaW5pdFNpbXVsYXRpb24ob3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zLCBzaXplOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgc3dpdGNoIChvcHRpb25zLmxheW91dCkge1xuICAgICAgY2FzZSAnc2ltcGxlJzpcbiAgICAgICAgcmV0dXJuIHNpbXBsZVNpbXVsYXRpb24odGhpcy5pdGVtc0FzTm9kZXMsIHRoaXMucmVsYXRpb25zQXNMaW5rcywgb3B0aW9ucywgc2l6ZSk7XG4gICAgICBjYXNlICdmb3JjZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9yY2VTaW11bGF0aW9uKHRoaXMuaXRlbXNBc05vZGVzKVxuICAgICAgICAgIC5mb3JjZSgnY2hhcmdlJywgZm9yY2VNYW55Qm9keSgpKVxuICAgICAgICAgIC5mb3JjZSgnbGluaycsIGZvcmNlTGluayh0aGlzLnJlbGF0aW9uc0FzTGlua3MpLmRpc3RhbmNlKDUwKS5zdHJlbmd0aCgwLjEpKVxuICAgICAgICAgIC5mb3JjZSgneCcsIGZvcmNlWCgpKVxuICAgICAgICAgIC5mb3JjZSgneScsIGZvcmNlWSgpKVxuICAgICAgICAgIC5mb3JjZSgnY29sbGlkZScsIGZvcmNlQ29sbGlkZShvcHRpb25zLm5vZGVSYWRpdXMgKiAzKSlcbiAgICAgICAgICAuZm9yY2UoJ2NlbnRlcicsIGZvcmNlQ2VudGVyKHNpemVbMF0gLyAyLCBzaXplWzFdIC8gMikpO1xuICAgIH1cbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmRyYXcoW3RoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGgsIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuaGVpZ2h0XSwgdGhpcy5vcHRpb25zLCB0aGlzLnJlbGF0aW9uVHlwZXMpKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5zaW11bGF0aW9uKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU1vZGUobW9kZTogJ21vdmUnIHwgJ3JlY3RhbmdsZScpIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICB9XG5cbiAgY2hhbmdlTGF5b3V0KCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weSEubGF5b3V0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlTm9kZVJhZGl1cygkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkhLm5vZGVSYWRpdXMgPSAkZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogRHJhd2luZyB0aGluZ3NcbiAgICovXG5cbiAgZHJhdyhzaXplOiBbbnVtYmVyLCBudW1iZXJdLCBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMsIHJlbGF0aW9uVHlwZXM6IFJlbGF0aW9uVHlwZVtdKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgLy8gQ2xlYXIgY2FudmFzXG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgc2l6ZVswXSwgc2l6ZVsxXSk7XG5cbiAgICAgICAgLy8gRHJhd2luZyBsaW5rc1xuICAgICAgICB0aGlzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgICB0aGlzLmRyYXdMaW5rcyhvcHRpb25zLCByZWxhdGlvblR5cGVzKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc3RvcmUoKTtcblxuICAgICAgICAvLyBEcmF3aW5nIG5vZGVzXG4gICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgIHRoaXMuZHJhd05vZGVzKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuXG4gICAgICAgIC8vIERyYXdpbmcgc2VsZWN0aW9uIHJlY3RhbmdsZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0UmVjdCkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgdGhpcy5kcmF3U2VsZWN0aW9uUmVjdCgpO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3U2VsZWN0aW9uUmVjdCgpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuc2VsZWN0UmVjdCAmJiB0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJyNiY2RjZGEnO1xuXG4gICAgICBjb25zdCBtaW5YID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LngsIHRoaXMuc2VsZWN0UmVjdC5lbmQueCk7XG4gICAgICBjb25zdCBtaW5ZID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnksIHRoaXMuc2VsZWN0UmVjdC5lbmQueSk7XG4gICAgICBjb25zdCBkWCA9IE1hdGguYWJzKHRoaXMuc2VsZWN0UmVjdC5zdGFydC54IC0gdGhpcy5zZWxlY3RSZWN0LmVuZC54KTtcbiAgICAgIGNvbnN0IGRZID0gTWF0aC5hYnModGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnkgLSB0aGlzLnNlbGVjdFJlY3QuZW5kLnkpO1xuXG4gICAgICB0aGlzLmNvbnRleHQucmVjdChtaW5YLCBtaW5ZLCBkWCwgZFkpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYXdOb2RlcyhvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLm5vZGVTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbm9kZV0gb2YgdGhpcy5pdGVtc0FzTm9kZXMuZW50cmllcygpKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbygobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgIHRoaXMuY29udGV4dC5hcmMoXG4gICAgICAgICAgKG5vZGUueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICBvcHRpb25zLm5vZGVSYWRpdXMgLyAyICsgOCxcbiAgICAgICAgICAwLFxuICAgICAgICAgIDIgKiBNYXRoLlBJLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgbm9kZS5pbWFnZSxcbiAgICAgICAgICAobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gLSBvcHRpb25zLm5vZGVSYWRpdXMgLyAyLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIG9wdGlvbnMubm9kZVJhZGl1cyAvIDIsXG4gICAgICAgICAgb3B0aW9ucy5ub2RlUmFkaXVzLFxuICAgICAgICAgIG9wdGlvbnMubm9kZVJhZGl1c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd0xpbmtzKG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucywgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10pIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLmxpbmtTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbGlua10gb2YgdGhpcy5yZWxhdGlvbnNBc0xpbmtzLmVudHJpZXMoKSkge1xuICAgICAgICB0aGlzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLml0ZW1zQXNOb2Rlcy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBsaW5rLnJlbGF0aW9uLnNvdXJjZSk7XG4gICAgICAgIGxldCB0YXJnZXROb2RlID0gdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbGluay5yZWxhdGlvbi5kZXN0aW5hdGlvbik7XG4gICAgICAgIGlmIChsaW5rLnNvdXJjZSA9PT0gbGluay50YXJnZXQgJiYgdGFyZ2V0Tm9kZSkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5tb3ZlVG8oKHNvdXJjZU5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSAtIDEwICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueSA/PyAwKSAtIDYwICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy54ID8/IDApIC0gMTAgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy55ID8/IDApICsgMjAgKyB0aGlzLmdsb2JhbE9mZnNldFsxXVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3U2VsZlJlbGF0aW9uVGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHJlbGF0aW9uVHlwZXMsIG9wdGlvbnMpO1xuICAgICAgICAgIC8vIGFycm93XG4gICAgICAgICAgdGhpcy5kcmF3QXJyb3coXG4gICAgICAgICAgICAodGFyZ2V0Tm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIG1pZGRsZVgsXG4gICAgICAgICAgICBtaWRkbGVZICsgMyxcbiAgICAgICAgICAgIGFuZ2xlIC0gMTAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnRleHQubW92ZVRvKChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChzb3VyY2VOb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0pO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3VGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHRhcmdldE5vZGUhLCByZWxhdGlvblR5cGVzLCBvcHRpb25zKTtcbiAgICAgICAgICAvLyBhcnJvd1xuICAgICAgICAgIHRoaXMuZHJhd0Fycm93KFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgICh0YXJnZXROb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICBtaWRkbGVYLFxuICAgICAgICAgICAgbWlkZGxlWSxcbiAgICAgICAgICAgIGFuZ2xlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd1NlbGZSZWxhdGlvblRleHRMaW5rKFxuICAgIGxpbms6IFByeUxpbmssXG4gICAgc291cmNlTm9kZTogUHJ5Tm9kZSxcbiAgICByZWxhdGlvblR5cGVzOiBSZWxhdGlvblR5cGVbXSxcbiAgICBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgbWlkZGxlWCA9IChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gKyA0NTtcbiAgICBjb25zdCBtaWRkbGVZID0gKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIDIwO1xuICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIoc291cmNlTm9kZT8ueSA/PyAwLCBzb3VyY2VOb2RlPy54ID8/IDApO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcblxuICAgIHJldHVybiB0aGlzLmRyYXdUZXh0KG1pZGRsZVgsIG1pZGRsZVksIGFuZ2xlLCByZWxhdGlvblR5cGVzLCBvcHRpb25zLCBsaW5rLCBkcmF3QW5nbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3VGV4dExpbmsoXG4gICAgbGluazogUHJ5TGluayxcbiAgICBzb3VyY2VOb2RlOiBQcnlOb2RlLFxuICAgIHRhcmdldE5vZGU6IFByeU5vZGUsXG4gICAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10sXG4gICAgb3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IG1pZGRsZVggPSAoKHNvdXJjZU5vZGU/LnggPz8gMCkgKyAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkgLyAyICsgdGhpcy5nbG9iYWxPZmZzZXRbMF07XG4gICAgY29uc3QgbWlkZGxlWSA9ICgoc291cmNlTm9kZT8ueSA/PyAwKSArICh0YXJnZXROb2RlPy55ID8/IDApKSAvIDIgKyB0aGlzLmdsb2JhbE9mZnNldFsxXTtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKCh0YXJnZXROb2RlPy55ID8/IDApIC0gKHNvdXJjZU5vZGU/LnkgPz8gMCksICh0YXJnZXROb2RlPy54ID8/IDApIC0gKHNvdXJjZU5vZGU/LnggPz8gMCkpO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICBpZiAoKHNvdXJjZU5vZGU/LnggPz8gMCkgPiAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkge1xuICAgICAgICBkcmF3QW5nbGUgKz0gTWF0aC5QSTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kcmF3VGV4dChtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSwgcmVsYXRpb25UeXBlcywgb3B0aW9ucywgbGluaywgZHJhd0FuZ2xlKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd1RleHQoXG4gICAgbWlkZGxlWDogbnVtYmVyLFxuICAgIG1pZGRsZVk6IG51bWJlcixcbiAgICBhbmdsZTogbnVtYmVyLFxuICAgIHJlbGF0aW9uVHlwZXM6IGFueVtdLFxuICAgIG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgICBsaW5rOiBQcnlMaW5rLFxuICAgIGRyYXdBbmdsZTogbnVtYmVyXG4gICkge1xuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dC5mb250ID0gJzEwcHggVWJ1bnR1JztcbiAgICAgIGNvbnN0IHJlbGF0aW9uVHlwZSA9IGxpbmsucmVsYXRpb24ucmVsYXRpb25UeXBlO1xuICAgICAgdGhpcy5jb250ZXh0LnNhdmUoKTtcbiAgICAgIHRoaXMuY29udGV4dC50cmFuc2xhdGUobWlkZGxlWCwgbWlkZGxlWSk7XG4gICAgICB0aGlzLmNvbnRleHQucm90YXRlKGRyYXdBbmdsZSk7XG4gICAgICB0aGlzLmNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQocmVsYXRpb25UeXBlcy5maW5kKChyZWxUKSA9PiByZWxULmlkID09PSByZWxhdGlvblR5cGUpPy5uYW1lID8/IHJlbGF0aW9uVHlwZSwgMCwgLTcpO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5saW5rU3Ryb2tlQ29sb3I7XG4gICAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gb3B0aW9ucy5saW5rU3Ryb2tlV2lkdGg7XG4gICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuICAgIH1cbiAgICByZXR1cm4geyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3QXJyb3codGFyZ2V0WDogbnVtYmVyLCB0YXJnZXRZOiBudW1iZXIsIG1pZGRsZVg6IG51bWJlciwgbWlkZGxlWTogbnVtYmVyLCBhbmdsZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgY29uc3Qgd2lkdGggPSAxO1xuICAgICAgY29uc3QgaGVhZGxlbiA9IDEwO1xuXG4gICAgICAvLyBUaGlzIG1ha2VzIGl0IHNvIHRoZSBlbmQgb2YgdGhlIGFycm93IGhlYWQgaXMgbG9jYXRlZCBhdCB0b3gsIHRveSwgZG9uJ3QgYXNrIHdoZXJlIDEuMTUgY29tZXMgZnJvbVxuICAgICAgdGFyZ2V0WCAtPSBNYXRoLmNvcyhhbmdsZSkgKiAod2lkdGggKiAxLjE1KTtcbiAgICAgIHRhcmdldFkgLT0gTWF0aC5zaW4oYW5nbGUpICogKHdpZHRoICogMS4xNSk7XG5cbiAgICAgIC8vc3RhcnRpbmcgYSBuZXcgcGF0aCBmcm9tIHRoZSBoZWFkIG9mIHRoZSBhcnJvdyB0byBvbmUgb2YgdGhlIHNpZGVzIG9mIHRoZSBwb2ludFxuICAgICAgdGhpcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbyhtaWRkbGVYLCBtaWRkbGVZKTtcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgLSBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgLSBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IG9mIHRoZSBhcnJvdywgdG8gdGhlIG90aGVyIHNpZGUgcG9pbnRcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgKyBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IGJhY2sgdG8gdGhlIHRpcCBvZiB0aGUgYXJyb3csIGFuZCB0aGVuIGFnYWluIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIHBvaW50XG4gICAgICB0aGlzLmNvbnRleHQubGluZVRvKG1pZGRsZVgsIG1pZGRsZVkpO1xuICAgICAgdGhpcy5jb250ZXh0LmxpbmVUbyhcbiAgICAgICAgbWlkZGxlWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA3KSxcbiAgICAgICAgbWlkZGxlWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA3KVxuICAgICAgKTtcblxuICAgICAgLy9kcmF3cyB0aGUgcGF0aHMgY3JlYXRlZCBhYm92ZVxuICAgICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZSgpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW91c2UgTWFuYWdlbWVudFxuICAgKi9cblxuICBvbk1vdXNlRG93bigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgdGhpcy5kcmFnZ2VkTm9kZSA9IG5vZGVzWzBdO1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gdGhpcy5kcmFnZ2VkTm9kZS54O1xuICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IHRoaXMuZHJhZ2dlZE5vZGUueTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RSZWN0ID0ge1xuICAgICAgICBzdGFydDogeyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSxcbiAgICAgICAgZW5kOiB7IHg6ICRldmVudC5vZmZzZXRYLCB5OiAkZXZlbnQub2Zmc2V0WSB9XG4gICAgICB9O1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICAgIHRoaXMubW91c2VEb3duID0gdHJ1ZTtcbiAgfVxuXG4gIG9uTW91c2VNb3ZlKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMubW92ZSQubmV4dCgkZXZlbnQpO1xuICAgIGlmICh0aGlzLm1vdXNlRG93bikge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbW92ZUNhbGxiYWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gJGV2ZW50Lm9mZnNldFggLSB0aGlzLmdsb2JhbE9mZnNldFswXTtcbiAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnkgPSAkZXZlbnQub2Zmc2V0WSAtIHRoaXMuZ2xvYmFsT2Zmc2V0WzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RSZWN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0UmVjdCEuZW5kID0geyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfTtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ21vdmUnKSB7XG4gICAgICAgICAgdGhpcy5hZGRpdGlvbm5hbE9mZnNldCA9IFtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVjdC5lbmQueCAtIHRoaXMuc2VsZWN0UmVjdC5zdGFydC54LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSZWN0LmVuZC55IC0gdGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnlcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICAvLyBkaXNwbGF5IHRvb2x0aXAgZm9yIG5vZGVzXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmZpbmROb2RlcygkZXZlbnQpO1xuICAgIHRoaXMudG9vbHRpcCQubmV4dCh7IGl0ZW06IG5vZGVzWzBdLCBkaXNwbGF5OiBub2Rlcy5sZW5ndGggPiAwLCB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSk7XG4gIH1cblxuICBvbk1vdXNlVXAoJGV2ZW50OiBNb3VzZUV2ZW50LCBsZWF2ZSA9IGZhbHNlKSB7XG4gICAgaWYgKCRldmVudC5idXR0b24gIT09IDIpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICAgICAgdGhpcy5zaW11bGF0aW9uLmFscGhhVGFyZ2V0KDApO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5Py5sYXlvdXQgPT09ICdmb3JjZScpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnggPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzSW5TaGFwZWQodGhpcy5zZWxlY3RSZWN0ISk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0TWFueSh7IGlkczogbm9kZXMubWFwKChub2RlKSA9PiBub2RlLml0ZW0uaWQpIH0pKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCA9IFsuLi50aGlzLmdsb2JhbE9mZnNldF07XG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFsZWF2ZSkge1xuICAgICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5maW5kTm9kZXMoJGV2ZW50KTtcbiAgICAgICAgICBpZiAobm9kZXNbMF0/Lml0ZW0/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0KHsgaWQ6IG5vZGVzWzBdPy5pdGVtPy5pZCwgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdCh7IGlkOiAnJywgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tb2RlID0gJ21vdmUnO1xuICAgIHRoaXMuc2VsZWN0UmVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRyYWdnZWROb2RlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGdsb2JhbE9mZnNldCgpIHtcbiAgICByZXR1cm4gW3RoaXMub2Zmc2V0WzBdICsgdGhpcy5hZGRpdGlvbm5hbE9mZnNldFswXSwgdGhpcy5vZmZzZXRbMV0gKyB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0WzFdXTtcbiAgfVxuXG4gIGNvbnRleHRNZW51KCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLm1hbmlmZXN0LmNvbnRleHRNZW51ICE9PSBmYWxzZSkge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXNbMF0uaXRlbSkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIENvbnRleHRNZW51QWN0aW9ucy5vcGVuKHtcbiAgICAgICAgICAgIGl0ZW1JZDogbm9kZXNbMF0uaXRlbS5pZCxcbiAgICAgICAgICAgIGNsaWVudFg6ICRldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgY2xpZW50WTogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICByZXN1bHRTZXQ6IEFycmF5LmlzQXJyYXkodGhpcy5tYW5pZmVzdC5kYXRhc291cmNlKSA/IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZVswXSA6IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGZyb206ICdncmFwaCdcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uTW91c2VVcCgkZXZlbnQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRpbmcgTm9kZXNcbiAgICovXG5cbiAgZmluZE5vZGVzKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1zQXNOb2Rlcy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT5cbiAgICAgICAgTWF0aC5wb3coKGl0ZW0ueCA/PyAwKSAtICRldmVudC5vZmZzZXRYICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIDIpICtcbiAgICAgICAgICBNYXRoLnBvdygoaXRlbS55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0gLSAkZXZlbnQub2Zmc2V0WSwgMikgPFxuICAgICAgICBNYXRoLnBvdyh0aGlzLm9wdGlvbnMubm9kZVJhZGl1cyAvIDIgKyA4LCAyKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmROb2Rlc0luU2hhcGVkKHNoYXBlOiB7IHN0YXJ0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07IGVuZDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IH0pOiBQcnlOb2RlW10ge1xuICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbihzaGFwZS5zdGFydC54LCBzaGFwZS5lbmQueCk7XG4gICAgY29uc3QgbWF4WCA9IE1hdGgubWF4KHNoYXBlLnN0YXJ0LngsIHNoYXBlLmVuZC54KTtcbiAgICBjb25zdCBtaW5ZID0gTWF0aC5taW4oc2hhcGUuc3RhcnQueSwgc2hhcGUuZW5kLnkpO1xuICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heChzaGFwZS5zdGFydC55LCBzaGFwZS5lbmQueSk7XG5cbiAgICByZXR1cm4gdGhpcy5pdGVtc0FzTm9kZXMuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+XG4gICAgICAgIChpdGVtLnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSA+IG1pblggJiZcbiAgICAgICAgKGl0ZW0ueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdIDwgbWF4WCAmJlxuICAgICAgICAoaXRlbS55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0gPiBtaW5ZICYmXG4gICAgICAgIChpdGVtLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSA8IG1heFlcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LWZvcmNlLWdyYXBoLWNzcz48L3ByeS13aWRnZXQtZm9yY2UtZ3JhcGgtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1ncmFwaFwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgICNoZWFkZXJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImdyYXBoX2xheW91dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5sYXlvdXQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGF5b3V0KCRldmVudClcIlxuICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgIFtpdGVtc109XCJsYXlvdXRzXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weSEubGF5b3V0XCJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJrZXlcIlxuICAgICAgICAgIGJpbmRWYWx1ZT1cImtleVwiXG4gICAgICAgICAgaWQ9XCJncmFwaF9sYXlvdXRcIlxuICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weSEubm9kZVJhZGl1c1wiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTm9kZVJhZGl1cygkZXZlbnQpXCJcbiAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmdyYXBoLm5vZGVSYWRpdXNcIlxuICAgICAgICAgIG1pbj1cIjEwXCJcbiAgICAgICAgICBtYXg9XCIyMDBcIlxuICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdFwiICpuZ0lmPVwiKGFsbEl0ZW1zV2l0aEltYWdlcyQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMFwiPlxuICAgIDxpbWdcbiAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC50YWJsZS5lbXB0eScgfCBpMThuIH19XCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgLz5cbiAgICA8c3BhbiBjbGFzcz1cIm5vLXJlc3VsdF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5lbXB0eScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwIC1zZWxlY3Rpb24tY2hvaWNlXCIgW3N0eWxlLnRyYW5zZm9ybV09XCJib3R0b21MZWZ0JCB8IGFzeW5jXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoJ21vdmUnKVwiXG4gICAgICBbY2xhc3MuLXNlbGVjdGVkXT1cIm1vZGUgPT09ICdtb3ZlJ1wiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcE1vdmVcIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcE1vdmVfd2lkZ2V0TWFwXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIm1vdmVcIj48L3ByeS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5tb3ZlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgncmVjdGFuZ2xlJylcIlxuICAgICAgW2NsYXNzLi1zZWxlY3RlZF09XCJtb2RlID09PSAncmVjdGFuZ2xlJ1wiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcFJlY3RcIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcFJlY3Rfd2lkZ2V0TWFwXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInJlY3RhbmdsZVwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLnJlY3RhbmdsZScgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8Y2FudmFzXG4gICAgI2NhbnZhc1xuICAgIGNsYXNzPVwiby13aWRnZXQtLWdyYXBoX19jYW52YXNcIlxuICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoJGV2ZW50KVwiXG4gICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoJGV2ZW50KVwiXG4gICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZVVwKCRldmVudCwgdHJ1ZSlcIlxuICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQpXCJcbiAgPjwvY2FudmFzPlxuXG4gIDxkaXYgY2xhc3M9XCJzZWxlY3Rpb24tcmVjdGFuZ2xlXCIgI3NlbGVjdGlvblJlY3RhbmdsZT48L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJtLXRvb2x0aXAgbS10b29sdGlwLS1wb3B1cCBub2V2ZW50XCJcbiAgICBbc3R5bGUuZGlzcGxheV09XCIodG9vbHRpcCQgfCBhc3luYyk/LmRpc3BsYXkgPyAnYmxvY2snIDogJ25vbmUnXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCIoKHRvb2x0aXAkIHwgYXN5bmMpPy54ID8/IDApICsgNTBcIlxuICAgIFtzdHlsZS50b3AucHhdPVwiKCh0b29sdGlwJCB8IGFzeW5jKT8ueSA/PyAwKSArIDUwXCJcbiAgPlxuICAgIDxkaXYgI3Rvb2x0aXA+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaW5mb1Rvb2x0aXBNb3ZlPlxuICA8ZGl2IGNsYXNzPVwibS10b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIiBpZD1cImluZm9Ub29sdGlwTW92ZV93aWRnZXRNYXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm0tdG9vbHRpcF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5tb3ZlJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcFJlY3Q+XG4gIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiIGlkPVwiaW5mb1Rvb2x0aXBSZWN0X3dpZGdldE1hcFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibS10b29sdGlwX190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLnJlY3RhbmdsZScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
448
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL3dpZGdldHMvd2lkZ2V0LWdyYXBoL2NvbXBvbmVudC93aWRnZXQtZ3JhcGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtZ3JhcGgvY29tcG9uZW50L3dpZGdldC1ncmFwaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFJVCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFFTCxjQUFjLEVBQ2Qsa0JBQWtCLEVBQ2xCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBS25CLG9CQUFvQixFQUNwQixzQkFBc0IsRUFHdEIsb0JBQW9CLEVBQ3JCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNoSCxPQUFPLEVBQ0wsU0FBUyxFQUNULGVBQWUsRUFDZixhQUFhLEVBQ2IsS0FBSyxFQUNMLE1BQU0sRUFDTixJQUFJLEVBQ0osR0FBRyxFQUNILFFBQVEsRUFFUixPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7O0FBTzdELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxtQkFBbUI7SUFnQzNELFlBQ0UsS0FBaUIsRUFDVCxx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QUFDLFFBQVE7Z0JBQytCLE9BQU87c0JBQXhELFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7XG4gIENsYXNzLFxuICBDbGFzc1NlbGVjdG9ycyxcbiAgQ29udGV4dE1lbnVBY3Rpb25zLFxuICBEYXNoYm9hcmRBY3Rpb25zLFxuICBEYXNoYm9hcmRTZWxlY3RvcnMsXG4gIERhdGFXaWRnZXRDb21wb25lbnQsXG4gIEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgSXRlbSxcbiAgUHJ5STE4blNlcnZpY2UsXG4gIFJlbGF0aW9uVHlwZSxcbiAgUmVsYXRpb25UeXBlc0FjdGlvbnMsXG4gIFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMsXG4gIFN5bWJvbFNlcnZpY2UsXG4gIFRvb2x0aXBGYWN0b3J5U2VydmljZSxcbiAgV0lER0VUX0hFQURFUl9IRUlHSFRcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGZvcmNlQ2VudGVyLCBmb3JjZUNvbGxpZGUsIGZvcmNlTGluaywgZm9yY2VNYW55Qm9keSwgZm9yY2VTaW11bGF0aW9uLCBmb3JjZVgsIGZvcmNlWSB9IGZyb20gJ2QzLWZvcmNlJztcbmltcG9ydCB7XG4gIGF1ZGl0VGltZSxcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWxheSxcbiAgZmlsdGVyLFxuICBmcm9tLFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0XG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHJ5TGluaywgUHJ5Tm9kZSB9IGZyb20gJy4uL2xheW91dC9ub2RlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBzaW1wbGVTaW11bGF0aW9uIH0gZnJvbSAnLi4vbGF5b3V0L3NpbXBsZS5mdW5jdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtZ3JhcGgnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWdyYXBoLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0R3JhcGhDb21wb25lbnQgZXh0ZW5kcyBEYXRhV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgb3B0aW9ucyQ6IE9ic2VydmFibGU8R3JhcGhXaWRnZXRPcHRpb25zPjtcbiAgb3B0aW9ucyE6IEdyYXBoV2lkZ2V0T3B0aW9ucztcbiAgb3B0aW9uc0NvcHk/OiBHcmFwaFdpZGdldE9wdGlvbnM7XG4gIHNlbGVjdGVkSWRzJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIEBWaWV3Q2hpbGQoJ2NhbnZhcycpIGNhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0b29sdGlwJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHRvb2x0aXAhOiBWaWV3Q29udGFpbmVyUmVmO1xuICBjbGFzc2VzJDogT2JzZXJ2YWJsZTxDbGFzc1tdPjtcbiAgdmlld1NpemUkOiBPYnNlcnZhYmxlPFtudW1iZXIsIG51bWJlcl0+O1xuICBjb250ZXh0OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsID0gbnVsbDtcbiAgc2ltdWxhdGlvbiE6IGFueTtcbiAgYWxsSXRlbXNXaXRoSW1hZ2VzJDogT2JzZXJ2YWJsZTx7IGl0ZW06IEl0ZW07IGltYWdlOiBIVE1MQ2FudmFzRWxlbWVudCB9W10+O1xuICBpdGVtc0FzTm9kZXM6IFByeU5vZGVbXSA9IFtdO1xuICByZWxhdGlvbnNBc0xpbmtzOiBQcnlMaW5rW10gPSBbXTtcbiAgZHJhZ2dlZE5vZGU/OiBQcnlOb2RlO1xuICB0b29sdGlwJCA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe1xuICAgIHg6IDAsXG4gICAgeTogMCxcbiAgICBpdGVtOiBudWxsIGFzIHVua25vd24gYXMgUHJ5Tm9kZSxcbiAgICBkaXNwbGF5OiBmYWxzZVxuICB9KTtcbiAgZHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc2VsZWN0UmVjdD86IHsgc3RhcnQ6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfTsgZW5kOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfTtcbiAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10gPSBbXTtcbiAgbW92ZSQgPSBuZXcgU3ViamVjdDxNb3VzZUV2ZW50PigpO1xuICBtb2RlOiAnbW92ZScgfCAncmVjdGFuZ2xlJyA9ICdtb3ZlJztcbiAgYm90dG9tTGVmdCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgb2Zmc2V0ID0gWzAsIDBdO1xuICBhZGRpdGlvbm5hbE9mZnNldDogW251bWJlciwgbnVtYmVyXSA9IFswLCAwXTtcbiAgbGF5b3V0cyA9IFt7IGtleTogJ3NpbXBsZScgfSwgeyBrZXk6ICdmb3JjZScgfV07XG4gIG1vdXNlRG93bjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHN0b3JlOiBTdG9yZTxhbnk+LFxuICAgIHByaXZhdGUgdG9vbHRpcEZhY3RvcnlTZXJ2aWNlOiBUb29sdGlwRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHN5bWJvbFNlcnZpY2U6IFN5bWJvbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcblxuICAgIHRoaXMuY2xhc3NlcyQgPSB0aGlzLnN0b3JlLnNlbGVjdChDbGFzc1NlbGVjdG9ycy5jbGFzc2VzKTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhc2hib2FyZFNlbGVjdG9ycy5zZWxlY3RlZEl0ZW1JZHMpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goUmVsYXRpb25UeXBlc0FjdGlvbnMubG9hZCgpKTtcbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKG1hbmlmZXN0KSA9PlxuICAgICAgICAgICh7XG4gICAgICAgICAgICBsaW5rU3Ryb2tlQ29sb3I6ICcjOTk5JyxcbiAgICAgICAgICAgIGxpbmtTdHJva2VPcGFjaXR5OiAwLjYsXG4gICAgICAgICAgICBsaW5rU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIGxpbmtTdHJva2VMaW5lY2FwOiAncm91bmQnLFxuICAgICAgICAgICAgbm9kZVN0cm9rZUNvbG9yOiAnI2ZmZicsXG4gICAgICAgICAgICBub2RlU3Ryb2tlV2lkdGg6IDEuNSxcbiAgICAgICAgICAgIG5vZGVTdHJva2VPcGFjaXR5OiAxLFxuICAgICAgICAgICAgbm9kZVJhZGl1czogMjUsXG4gICAgICAgICAgICBsYXlvdXQ6ICdzaW1wbGUnLFxuICAgICAgICAgICAgLi4ubWFuaWZlc3Qub3B0aW9uc1xuICAgICAgICAgIH0pIGFzIEdyYXBoV2lkZ2V0T3B0aW9uc1xuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5vcHRpb25zJC5waXBlKGZpbHRlcigob3B0KSA9PiAhIW9wdCkpLnN1YnNjcmliZSgob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLm9wdGlvbnNDb3B5ID0geyAuLi4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcHRpb25zKSkgYXMgR3JhcGhXaWRnZXRPcHRpb25zKSB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy52aWV3U2l6ZSQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLndpZGdldFNpemUkLCB0aGlzLmRpc3BsYXlIZWFkZXIkXSkucGlwZShcbiAgICAgIGRlbGF5KDEwKSxcbiAgICAgIG1hcCgoW3NpemUsIGhlYWRlcl0pID0+IFtzaXplLndpZHRoLCBzaXplLmhlaWdodCAtIChoZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCA6IDApXSBhcyBbbnVtYmVyLCBudW1iZXJdKSxcbiAgICAgIHRhcCgoc2l6ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jYW52YXMpIHtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LndpZHRoID0gc2l6ZVswXTtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5uYXRpdmVFbGVtZW50LmhlaWdodCA9IHNpemVbMV07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMuYWxsSXRlbXNXaXRoSW1hZ2VzJCA9IHRoaXMuYWxsSXRlbXMkLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoaXRlbXMpID0+XG4gICAgICAgIGZyb20oXG4gICAgICAgICAgbmV3IFByb21pc2U8eyBpdGVtOiBJdGVtOyBpbWFnZTogSFRNTENhbnZhc0VsZW1lbnQgfVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBQcm9taXNlLmFsbChpdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMuc3ltYm9sU2VydmljZS5nZXRTeW1ib2woaXRlbSkpKS50aGVuKChjYW52YXNlcykgPT5cbiAgICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW0sIGlkeCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICBpbWFnZTogY2FudmFzZXNbaWR4XVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLmFsbEl0ZW1zV2l0aEltYWdlcyQsXG4gICAgICB0aGlzLnJlc3VsdFNldCQucGlwZShtYXAoKHJzKSA9PiBycy5yZWxhdGlvbnMpKSxcbiAgICAgIHRoaXMudmlld1NpemUkLFxuICAgICAgdGhpcy5vcHRpb25zJCxcbiAgICAgIHRoaXMuc3RvcmUuc2VsZWN0KFJlbGF0aW9uVHlwZXNTZWxlY3RvcnMucmVsYXRpb25zVHlwZXMpLnBpcGUodGFwKChydCkgPT4gKHRoaXMucmVsYXRpb25UeXBlcyA9IHJ0KSkpLFxuICAgICAgdGhpcy5zZWxlY3RlZElkcyRcbiAgICBdKS5zdWJzY3JpYmUoKFtpdGVtcywgcmVsYXRpb25zLCBzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzLCBzZWxlY3RlZElkc10pID0+IHtcbiAgICAgIHRoaXMuaXRlbXNBc05vZGVzID0gaXRlbXMubWFwKChpdGVtV2l0aEltYWdlLCBpZHgpID0+ICh7XG4gICAgICAgIGluZGV4OiBpZHgsXG4gICAgICAgIGl0ZW06IGl0ZW1XaXRoSW1hZ2UuaXRlbSxcbiAgICAgICAgaWQ6IGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCxcbiAgICAgICAgaW1hZ2U6IGl0ZW1XaXRoSW1hZ2UuaW1hZ2UsXG4gICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZElkcy5pbmRleE9mKGl0ZW1XaXRoSW1hZ2UuaXRlbS5pZCkgPiAtMVxuICAgICAgfSkpIGFzIFByeU5vZGVbXTtcblxuICAgICAgY29uc3QgdW5rbm93bkltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICB1bmtub3duSW1hZ2Uuc3JjID0gJy9hc3NldHMvc3Zncy9xdWVzdGlvbi1saW5lLnN2Zyc7XG5cbiAgICAgIC8vIENvbXBsZXRlIG1pc3Npbmcgbm9kZXNcbiAgICAgIHJlbGF0aW9ucy5mb3JFYWNoKChyZWxhdGlvbikgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLnNvdXJjZSkpIHtcbiAgICAgICAgICB0aGlzLml0ZW1zQXNOb2Rlcy5wdXNoKHtcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLml0ZW1zQXNOb2Rlcy5sZW5ndGgsXG4gICAgICAgICAgICBpdGVtOiB7IGlkOiByZWxhdGlvbi5zb3VyY2UsIG9DbGFzczogJ3Vua25vd24nLCBhdHRyaWJ1dGVzOiB7fSB9LFxuICAgICAgICAgICAgaWQ6IHJlbGF0aW9uLnNvdXJjZSxcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5zb3VyY2UpID4gLTFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXRlbXNBc05vZGVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHJlbGF0aW9uLmRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgIHRoaXMuaXRlbXNBc05vZGVzLnB1c2goe1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaXRlbXNBc05vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW06IHsgaWQ6IHJlbGF0aW9uLmRlc3RpbmF0aW9uLCBvQ2xhc3M6ICd1bmtub3duJywgYXR0cmlidXRlczoge30gfSxcbiAgICAgICAgICAgIGlkOiByZWxhdGlvbi5kZXN0aW5hdGlvbixcbiAgICAgICAgICAgIGltYWdlOiB1bmtub3duSW1hZ2UsXG4gICAgICAgICAgICBzZWxlY3RlZDogc2VsZWN0ZWRJZHMuaW5kZXhPZihyZWxhdGlvbi5kZXN0aW5hdGlvbikgPiAtMVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5yZWxhdGlvbnNBc0xpbmtzID0gcmVsYXRpb25zLm1hcCgocmVsYXRpb24pID0+ICh7XG4gICAgICAgIHNvdXJjZTogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uc291cmNlKT8uaW5kZXggPz8gLTEsXG4gICAgICAgIHRhcmdldDogdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gcmVsYXRpb24uZGVzdGluYXRpb24pPy5pbmRleCA/PyAtMSxcbiAgICAgICAgcmVsYXRpb25cbiAgICAgIH0pKSBhcyBQcnlMaW5rW107XG5cbiAgICAgIGlmICh0aGlzLnNpbXVsYXRpb24pIHtcbiAgICAgICAgdGhpcy5zaW11bGF0aW9uLnN0b3AoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zaW11bGF0aW9uID0gdGhpcy5pbml0U2ltdWxhdGlvbihvcHRpb25zLCBzaXplKS5vbigndGljaycsIHRoaXMuZHJhdyhzaXplLCBvcHRpb25zLCByZWxhdGlvblR5cGVzKSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50b29sdGlwJC5waXBlKGZpbHRlcigodG9vbHRpcCkgPT4gISF0b29sdGlwICYmICEhdG9vbHRpcC5pdGVtKSkuc3Vic2NyaWJlKCh0b29sdGlwKSA9PiB7XG4gICAgICAgIGxldCB0eXBlID0gdG9vbHRpcC5pdGVtLml0ZW0ub0NsYXNzIGFzIHN0cmluZztcbiAgICAgICAgdGhpcy50b29sdGlwLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCQgPSB0aGlzLnRvb2x0aXBGYWN0b3J5U2VydmljZS5nZW5lcmF0ZVRvb2x0aXAodHlwZSwgdGhpcy5faW5qZWN0b3IsIHRoaXMudG9vbHRpcCk7XG4gICAgICAgIGNvbXBvbmVudCQuc3Vic2NyaWJlKChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuaW5zdGFuY2UuZGF0YS5pdGVtID0gdG9vbHRpcC5pdGVtLml0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMubW92ZSQucGlwZShhdWRpdFRpbWUoMzApKS5zdWJzY3JpYmUoKCRldmVudCkgPT4gdGhpcy5tb3ZlQ2FsbGJhY2soJGV2ZW50KSk7XG5cbiAgICB0aGlzLmJvdHRvbUxlZnQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJCwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbc2l6ZSwgZGlzcGxheUhlYWRlcl0pID0+XG4gICAgICAgICAgYHRyYW5zbGF0ZSgxMHB4ICxjYWxjKDEzcHggLSAke2Rpc3BsYXlIZWFkZXIgPyBXSURHRVRfSEVBREVSX0hFSUdIVCArICdweCcgOiAnMHB4J30pKWBcbiAgICAgICksXG4gICAgICBkZWxheSgxMClcbiAgICApO1xuICB9XG5cbiAgaW5pdFNpbXVsYXRpb24ob3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zLCBzaXplOiBbbnVtYmVyLCBudW1iZXJdKSB7XG4gICAgc3dpdGNoIChvcHRpb25zLmxheW91dCkge1xuICAgICAgY2FzZSAnc2ltcGxlJzpcbiAgICAgICAgcmV0dXJuIHNpbXBsZVNpbXVsYXRpb24odGhpcy5pdGVtc0FzTm9kZXMsIHRoaXMucmVsYXRpb25zQXNMaW5rcywgb3B0aW9ucywgc2l6ZSk7XG4gICAgICBjYXNlICdmb3JjZSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZm9yY2VTaW11bGF0aW9uKHRoaXMuaXRlbXNBc05vZGVzKVxuICAgICAgICAgIC5mb3JjZSgnY2hhcmdlJywgZm9yY2VNYW55Qm9keSgpKVxuICAgICAgICAgIC5mb3JjZSgnbGluaycsIGZvcmNlTGluayh0aGlzLnJlbGF0aW9uc0FzTGlua3MpLmRpc3RhbmNlKDUwKS5zdHJlbmd0aCgwLjEpKVxuICAgICAgICAgIC5mb3JjZSgneCcsIGZvcmNlWCgpKVxuICAgICAgICAgIC5mb3JjZSgneScsIGZvcmNlWSgpKVxuICAgICAgICAgIC5mb3JjZSgnY29sbGlkZScsIGZvcmNlQ29sbGlkZShvcHRpb25zLm5vZGVSYWRpdXMgKiAzKSlcbiAgICAgICAgICAuZm9yY2UoJ2NlbnRlcicsIGZvcmNlQ2VudGVyKHNpemVbMF0gLyAyLCBzaXplWzFdIC8gMikpO1xuICAgIH1cbiAgfVxuXG4gIGVtaXRNYW5pZmVzdCgpIHtcbiAgICB0aGlzLm1hbmlmZXN0TW9kaWZpZWQuZW1pdCh7XG4gICAgICB3aWRnZXRJbmRleDogdGhpcy53aWRnZXRJbmRleCxcbiAgICAgIG1hbmlmZXN0OiB7IC4uLnRoaXMubWFuaWZlc3QsIG9wdGlvbnM6IHRoaXMub3B0aW9uc0NvcHkgfVxuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLmRyYXcoW3RoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQud2lkdGgsIHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQuaGVpZ2h0XSwgdGhpcy5vcHRpb25zLCB0aGlzLnJlbGF0aW9uVHlwZXMpKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0ID0gdGhpcy5jYW52YXMubmF0aXZlRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICBpZiAodGhpcy5zaW11bGF0aW9uKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGNoYW5nZU1vZGUobW9kZTogJ21vdmUnIHwgJ3JlY3RhbmdsZScpIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICB9XG5cbiAgY2hhbmdlTGF5b3V0KCRldmVudDogYW55KSB7XG4gICAgdGhpcy5vcHRpb25zQ29weSEubGF5b3V0ID0gJGV2ZW50O1xuICB9XG5cbiAgY2hhbmdlTm9kZVJhZGl1cygkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMub3B0aW9uc0NvcHkhLm5vZGVSYWRpdXMgPSAkZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogRHJhd2luZyB0aGluZ3NcbiAgICovXG5cbiAgZHJhdyhzaXplOiBbbnVtYmVyLCBudW1iZXJdLCBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMsIHJlbGF0aW9uVHlwZXM6IFJlbGF0aW9uVHlwZVtdKSB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgICAgLy8gQ2xlYXIgY2FudmFzXG4gICAgICAgIHRoaXMuY29udGV4dC5jbGVhclJlY3QoMCwgMCwgc2l6ZVswXSwgc2l6ZVsxXSk7XG5cbiAgICAgICAgLy8gRHJhd2luZyBsaW5rc1xuICAgICAgICB0aGlzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgICB0aGlzLmRyYXdMaW5rcyhvcHRpb25zLCByZWxhdGlvblR5cGVzKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnJlc3RvcmUoKTtcblxuICAgICAgICAvLyBEcmF3aW5nIG5vZGVzXG4gICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgIHRoaXMuZHJhd05vZGVzKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuXG4gICAgICAgIC8vIERyYXdpbmcgc2VsZWN0aW9uIHJlY3RhbmdsZSBpZiBuZWVkZWRcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0UmVjdCkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgICAgdGhpcy5kcmF3U2VsZWN0aW9uUmVjdCgpO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3U2VsZWN0aW9uUmVjdCgpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuc2VsZWN0UmVjdCAmJiB0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFN0eWxlID0gJyNiY2RjZGEnO1xuXG4gICAgICBjb25zdCBtaW5YID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LngsIHRoaXMuc2VsZWN0UmVjdC5lbmQueCk7XG4gICAgICBjb25zdCBtaW5ZID0gTWF0aC5taW4odGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnksIHRoaXMuc2VsZWN0UmVjdC5lbmQueSk7XG4gICAgICBjb25zdCBkWCA9IE1hdGguYWJzKHRoaXMuc2VsZWN0UmVjdC5zdGFydC54IC0gdGhpcy5zZWxlY3RSZWN0LmVuZC54KTtcbiAgICAgIGNvbnN0IGRZID0gTWF0aC5hYnModGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnkgLSB0aGlzLnNlbGVjdFJlY3QuZW5kLnkpO1xuXG4gICAgICB0aGlzLmNvbnRleHQucmVjdChtaW5YLCBtaW5ZLCBkWCwgZFkpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRyYXdOb2RlcyhvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLm5vZGVTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbm9kZV0gb2YgdGhpcy5pdGVtc0FzTm9kZXMuZW50cmllcygpKSB7XG4gICAgICAgIHRoaXMuY29udGV4dC5iZWdpblBhdGgoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbygobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgIHRoaXMuY29udGV4dC5hcmMoXG4gICAgICAgICAgKG5vZGUueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICBvcHRpb25zLm5vZGVSYWRpdXMgLyAyICsgOCxcbiAgICAgICAgICAwLFxuICAgICAgICAgIDIgKiBNYXRoLlBJLFxuICAgICAgICAgIGZhbHNlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlU3R5bGUgPSBub2RlLnNlbGVjdGVkID8gJyM1NjlhOWMnIDogbm9kZS5pdGVtLm9DbGFzcyA9PT0gJ3Vua25vd24nID8gJyNlMmE3YTcnIDogJyNlY2VkZjQnO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kcmF3SW1hZ2UoXG4gICAgICAgICAgbm9kZS5pbWFnZSxcbiAgICAgICAgICAobm9kZS54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gLSBvcHRpb25zLm5vZGVSYWRpdXMgLyAyLFxuICAgICAgICAgIChub2RlLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIG9wdGlvbnMubm9kZVJhZGl1cyAvIDIsXG4gICAgICAgICAgb3B0aW9ucy5ub2RlUmFkaXVzLFxuICAgICAgICAgIG9wdGlvbnMubm9kZVJhZGl1c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd0xpbmtzKG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucywgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10pIHtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcHRpb25zLmxpbmtTdHJva2VPcGFjaXR5O1xuICAgICAgZm9yIChjb25zdCBbaSwgbGlua10gb2YgdGhpcy5yZWxhdGlvbnNBc0xpbmtzLmVudHJpZXMoKSkge1xuICAgICAgICB0aGlzLmNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZU5vZGUgPSB0aGlzLml0ZW1zQXNOb2Rlcy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBsaW5rLnJlbGF0aW9uLnNvdXJjZSk7XG4gICAgICAgIGxldCB0YXJnZXROb2RlID0gdGhpcy5pdGVtc0FzTm9kZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbGluay5yZWxhdGlvbi5kZXN0aW5hdGlvbik7XG4gICAgICAgIGlmIChsaW5rLnNvdXJjZSA9PT0gbGluay50YXJnZXQgJiYgdGFyZ2V0Tm9kZSkge1xuICAgICAgICAgIHRoaXMuY29udGV4dC5tb3ZlVG8oKHNvdXJjZU5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgdGhpcy5jb250ZXh0LmJlemllckN1cnZlVG8oXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSAtIDEwICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueSA/PyAwKSAtIDYwICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICAoc291cmNlTm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy54ID8/IDApIC0gMTAgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgIChzb3VyY2VOb2RlPy55ID8/IDApICsgMjAgKyB0aGlzLmdsb2JhbE9mZnNldFsxXVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3U2VsZlJlbGF0aW9uVGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHJlbGF0aW9uVHlwZXMsIG9wdGlvbnMpO1xuICAgICAgICAgIC8vIGFycm93XG4gICAgICAgICAgdGhpcy5kcmF3QXJyb3coXG4gICAgICAgICAgICAodGFyZ2V0Tm9kZT8ueCA/PyAwKSArIDEyMCArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdLFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSxcbiAgICAgICAgICAgIG1pZGRsZVgsXG4gICAgICAgICAgICBtaWRkbGVZICsgMyxcbiAgICAgICAgICAgIGFuZ2xlIC0gMTAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnRleHQubW92ZVRvKChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIChzb3VyY2VOb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0pO1xuICAgICAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSwgKHRhcmdldE5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSk7XG4gICAgICAgICAgY29uc3QgeyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9ID0gdGhpcy5kcmF3VGV4dExpbmsobGluaywgc291cmNlTm9kZSEsIHRhcmdldE5vZGUhLCByZWxhdGlvblR5cGVzLCBvcHRpb25zKTtcbiAgICAgICAgICAvLyBhcnJvd1xuICAgICAgICAgIHRoaXMuZHJhd0Fycm93KFxuICAgICAgICAgICAgKHRhcmdldE5vZGU/LnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSxcbiAgICAgICAgICAgICh0YXJnZXROb2RlPy55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0sXG4gICAgICAgICAgICBtaWRkbGVYLFxuICAgICAgICAgICAgbWlkZGxlWSxcbiAgICAgICAgICAgIGFuZ2xlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZHJhd1NlbGZSZWxhdGlvblRleHRMaW5rKFxuICAgIGxpbms6IFByeUxpbmssXG4gICAgc291cmNlTm9kZTogUHJ5Tm9kZSxcbiAgICByZWxhdGlvblR5cGVzOiBSZWxhdGlvblR5cGVbXSxcbiAgICBvcHRpb25zOiBHcmFwaFdpZGdldE9wdGlvbnNcbiAgKSB7XG4gICAgY29uc3QgbWlkZGxlWCA9IChzb3VyY2VOb2RlPy54ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0gKyA0NTtcbiAgICBjb25zdCBtaWRkbGVZID0gKHNvdXJjZU5vZGU/LnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSAtIDIwO1xuICAgIGxldCBhbmdsZSA9IE1hdGguYXRhbjIoc291cmNlTm9kZT8ueSA/PyAwLCBzb3VyY2VOb2RlPy54ID8/IDApO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcblxuICAgIHJldHVybiB0aGlzLmRyYXdUZXh0KG1pZGRsZVgsIG1pZGRsZVksIGFuZ2xlLCByZWxhdGlvblR5cGVzLCBvcHRpb25zLCBsaW5rLCBkcmF3QW5nbGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3VGV4dExpbmsoXG4gICAgbGluazogUHJ5TGluayxcbiAgICBzb3VyY2VOb2RlOiBQcnlOb2RlLFxuICAgIHRhcmdldE5vZGU6IFByeU5vZGUsXG4gICAgcmVsYXRpb25UeXBlczogUmVsYXRpb25UeXBlW10sXG4gICAgb3B0aW9uczogR3JhcGhXaWRnZXRPcHRpb25zXG4gICkge1xuICAgIGNvbnN0IG1pZGRsZVggPSAoKHNvdXJjZU5vZGU/LnggPz8gMCkgKyAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkgLyAyICsgdGhpcy5nbG9iYWxPZmZzZXRbMF07XG4gICAgY29uc3QgbWlkZGxlWSA9ICgoc291cmNlTm9kZT8ueSA/PyAwKSArICh0YXJnZXROb2RlPy55ID8/IDApKSAvIDIgKyB0aGlzLmdsb2JhbE9mZnNldFsxXTtcbiAgICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKCh0YXJnZXROb2RlPy55ID8/IDApIC0gKHNvdXJjZU5vZGU/LnkgPz8gMCksICh0YXJnZXROb2RlPy54ID8/IDApIC0gKHNvdXJjZU5vZGU/LnggPz8gMCkpO1xuICAgIGxldCBkcmF3QW5nbGUgPSBhbmdsZTtcbiAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICBpZiAoKHNvdXJjZU5vZGU/LnggPz8gMCkgPiAodGFyZ2V0Tm9kZT8ueCA/PyAwKSkge1xuICAgICAgICBkcmF3QW5nbGUgKz0gTWF0aC5QSTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kcmF3VGV4dChtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSwgcmVsYXRpb25UeXBlcywgb3B0aW9ucywgbGluaywgZHJhd0FuZ2xlKTtcbiAgfVxuXG4gIHByaXZhdGUgZHJhd1RleHQoXG4gICAgbWlkZGxlWDogbnVtYmVyLFxuICAgIG1pZGRsZVk6IG51bWJlcixcbiAgICBhbmdsZTogbnVtYmVyLFxuICAgIHJlbGF0aW9uVHlwZXM6IGFueVtdLFxuICAgIG9wdGlvbnM6IEdyYXBoV2lkZ2V0T3B0aW9ucyxcbiAgICBsaW5rOiBQcnlMaW5rLFxuICAgIGRyYXdBbmdsZTogbnVtYmVyXG4gICkge1xuICAgIGlmICh0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dC5mb250ID0gJzEwcHggVWJ1bnR1JztcbiAgICAgIGNvbnN0IHJlbGF0aW9uVHlwZSA9IGxpbmsucmVsYXRpb24ucmVsYXRpb25UeXBlO1xuICAgICAgdGhpcy5jb250ZXh0LnNhdmUoKTtcbiAgICAgIHRoaXMuY29udGV4dC50cmFuc2xhdGUobWlkZGxlWCwgbWlkZGxlWSk7XG4gICAgICB0aGlzLmNvbnRleHQucm90YXRlKGRyYXdBbmdsZSk7XG4gICAgICB0aGlzLmNvbnRleHQudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICB0aGlzLmNvbnRleHQuZmlsbFRleHQocmVsYXRpb25UeXBlcy5maW5kKChyZWxUKSA9PiByZWxULmlkID09PSByZWxhdGlvblR5cGUpPy5uYW1lID8/IHJlbGF0aW9uVHlwZSwgMCwgLTcpO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5saW5rU3Ryb2tlQ29sb3I7XG4gICAgICB0aGlzLmNvbnRleHQubGluZVdpZHRoID0gb3B0aW9ucy5saW5rU3Ryb2tlV2lkdGg7XG4gICAgICB0aGlzLmNvbnRleHQuc3Ryb2tlKCk7XG4gICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuICAgIH1cbiAgICByZXR1cm4geyBtaWRkbGVYLCBtaWRkbGVZLCBhbmdsZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkcmF3QXJyb3codGFyZ2V0WDogbnVtYmVyLCB0YXJnZXRZOiBudW1iZXIsIG1pZGRsZVg6IG51bWJlciwgbWlkZGxlWTogbnVtYmVyLCBhbmdsZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgY29uc3Qgd2lkdGggPSAxO1xuICAgICAgY29uc3QgaGVhZGxlbiA9IDEwO1xuXG4gICAgICAvLyBUaGlzIG1ha2VzIGl0IHNvIHRoZSBlbmQgb2YgdGhlIGFycm93IGhlYWQgaXMgbG9jYXRlZCBhdCB0b3gsIHRveSwgZG9uJ3QgYXNrIHdoZXJlIDEuMTUgY29tZXMgZnJvbVxuICAgICAgdGFyZ2V0WCAtPSBNYXRoLmNvcyhhbmdsZSkgKiAod2lkdGggKiAxLjE1KTtcbiAgICAgIHRhcmdldFkgLT0gTWF0aC5zaW4oYW5nbGUpICogKHdpZHRoICogMS4xNSk7XG5cbiAgICAgIC8vc3RhcnRpbmcgYSBuZXcgcGF0aCBmcm9tIHRoZSBoZWFkIG9mIHRoZSBhcnJvdyB0byBvbmUgb2YgdGhlIHNpZGVzIG9mIHRoZSBwb2ludFxuICAgICAgdGhpcy5jb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgdGhpcy5jb250ZXh0Lm1vdmVUbyhtaWRkbGVYLCBtaWRkbGVZKTtcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgLSBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgLSBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IG9mIHRoZSBhcnJvdywgdG8gdGhlIG90aGVyIHNpZGUgcG9pbnRcbiAgICAgIHRoaXMuY29udGV4dC5saW5lVG8oXG4gICAgICAgIG1pZGRsZVggLSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJIC8gNyksXG4gICAgICAgIG1pZGRsZVkgLSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUgKyBNYXRoLlBJIC8gNylcbiAgICAgICk7XG5cbiAgICAgIC8vcGF0aCBmcm9tIHRoZSBzaWRlIHBvaW50IGJhY2sgdG8gdGhlIHRpcCBvZiB0aGUgYXJyb3csIGFuZCB0aGVuIGFnYWluIHRvIHRoZSBvcHBvc2l0ZSBzaWRlIHBvaW50XG4gICAgICB0aGlzLmNvbnRleHQubGluZVRvKG1pZGRsZVgsIG1pZGRsZVkpO1xuICAgICAgdGhpcy5jb250ZXh0LmxpbmVUbyhcbiAgICAgICAgbWlkZGxlWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA3KSxcbiAgICAgICAgbWlkZGxlWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA3KVxuICAgICAgKTtcblxuICAgICAgLy9kcmF3cyB0aGUgcGF0aHMgY3JlYXRlZCBhYm92ZVxuICAgICAgdGhpcy5jb250ZXh0LmxpbmVXaWR0aCA9IHdpZHRoO1xuICAgICAgdGhpcy5jb250ZXh0LnN0cm9rZSgpO1xuICAgICAgdGhpcy5jb250ZXh0LmZpbGwoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW91c2UgTWFuYWdlbWVudFxuICAgKi9cblxuICBvbk1vdXNlRG93bigkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgdGhpcy5kcmFnZ2VkTm9kZSA9IG5vZGVzWzBdO1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLnNpbXVsYXRpb24uYWxwaGFUYXJnZXQoMC4zKS5yZXN0YXJ0KCk7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gdGhpcy5kcmFnZ2VkTm9kZS54O1xuICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IHRoaXMuZHJhZ2dlZE5vZGUueTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RSZWN0ID0ge1xuICAgICAgICBzdGFydDogeyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSxcbiAgICAgICAgZW5kOiB7IHg6ICRldmVudC5vZmZzZXRYLCB5OiAkZXZlbnQub2Zmc2V0WSB9XG4gICAgICB9O1xuICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICAgIHRoaXMubW91c2VEb3duID0gdHJ1ZTtcbiAgfVxuXG4gIG9uTW91c2VNb3ZlKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMubW92ZSQubmV4dCgkZXZlbnQpO1xuICAgIGlmICh0aGlzLm1vdXNlRG93bikge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbW92ZUNhbGxiYWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICB0aGlzLmRyYWdnZWROb2RlLmZ4ID0gJGV2ZW50Lm9mZnNldFggLSB0aGlzLmdsb2JhbE9mZnNldFswXTtcbiAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnkgPSAkZXZlbnQub2Zmc2V0WSAtIHRoaXMuZ2xvYmFsT2Zmc2V0WzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RSZWN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0UmVjdCEuZW5kID0geyB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfTtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ21vdmUnKSB7XG4gICAgICAgICAgdGhpcy5hZGRpdGlvbm5hbE9mZnNldCA9IFtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVjdC5lbmQueCAtIHRoaXMuc2VsZWN0UmVjdC5zdGFydC54LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RSZWN0LmVuZC55IC0gdGhpcy5zZWxlY3RSZWN0LnN0YXJ0LnlcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICAvLyBkaXNwbGF5IHRvb2x0aXAgZm9yIG5vZGVzXG4gICAgY29uc3Qgbm9kZXMgPSB0aGlzLmZpbmROb2RlcygkZXZlbnQpO1xuICAgIHRoaXMudG9vbHRpcCQubmV4dCh7IGl0ZW06IG5vZGVzWzBdLCBkaXNwbGF5OiBub2Rlcy5sZW5ndGggPiAwLCB4OiAkZXZlbnQub2Zmc2V0WCwgeTogJGV2ZW50Lm9mZnNldFkgfSk7XG4gIH1cblxuICBvbk1vdXNlVXAoJGV2ZW50OiBNb3VzZUV2ZW50LCBsZWF2ZSA9IGZhbHNlKSB7XG4gICAgaWYgKCRldmVudC5idXR0b24gIT09IDIpIHtcbiAgICAgIGlmICh0aGlzLmRyYWdnaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdnZWROb2RlKSB7XG4gICAgICAgICAgdGhpcy5zaW11bGF0aW9uLmFscGhhVGFyZ2V0KDApO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNDb3B5Py5sYXlvdXQgPT09ICdmb3JjZScpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dlZE5vZGUuZnggPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2VkTm9kZS5meSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdyZWN0YW5nbGUnKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzSW5TaGFwZWQodGhpcy5zZWxlY3RSZWN0ISk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0TWFueSh7IGlkczogbm9kZXMubWFwKChub2RlKSA9PiBub2RlLml0ZW0uaWQpIH0pKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9mZnNldCA9IFsuLi50aGlzLmdsb2JhbE9mZnNldF07XG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0ID0gWzAsIDBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFsZWF2ZSkge1xuICAgICAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy5maW5kTm9kZXMoJGV2ZW50KTtcbiAgICAgICAgICBpZiAobm9kZXNbMF0/Lml0ZW0/LmlkKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhc2hib2FyZEFjdGlvbnMuc2VsZWN0KHsgaWQ6IG5vZGVzWzBdPy5pdGVtPy5pZCwgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXNoYm9hcmRBY3Rpb25zLnNlbGVjdCh7IGlkOiAnJywgY3VtdWxhdGl2ZTogJGV2ZW50LnNoaWZ0S2V5IH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5tb2RlID0gJ21vdmUnO1xuICAgIHRoaXMuc2VsZWN0UmVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRyYWdnZWROb2RlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1vdXNlRG93biA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGdsb2JhbE9mZnNldCgpIHtcbiAgICByZXR1cm4gW3RoaXMub2Zmc2V0WzBdICsgdGhpcy5hZGRpdGlvbm5hbE9mZnNldFswXSwgdGhpcy5vZmZzZXRbMV0gKyB0aGlzLmFkZGl0aW9ubmFsT2Zmc2V0WzFdXTtcbiAgfVxuXG4gIGNvbnRleHRNZW51KCRldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLm1hbmlmZXN0LmNvbnRleHRNZW51ICE9PSBmYWxzZSkge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMuZmluZE5vZGVzKCRldmVudCk7XG4gICAgICBpZiAobm9kZXNbMF0gJiYgbm9kZXNbMF0uaXRlbSkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIENvbnRleHRNZW51QWN0aW9ucy5vcGVuKHtcbiAgICAgICAgICAgIGl0ZW1JZDogbm9kZXNbMF0uaXRlbS5pZCxcbiAgICAgICAgICAgIGNsaWVudFg6ICRldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgY2xpZW50WTogJGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICByZXN1bHRTZXQ6IEFycmF5LmlzQXJyYXkodGhpcy5tYW5pZmVzdC5kYXRhc291cmNlKSA/IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZVswXSA6IHRoaXMubWFuaWZlc3QuZGF0YXNvdXJjZSxcbiAgICAgICAgICAgIGZyb206ICdncmFwaCdcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9uTW91c2VVcCgkZXZlbnQsIHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRpbmcgTm9kZXNcbiAgICovXG5cbiAgZmluZE5vZGVzKCRldmVudDogTW91c2VFdmVudCkge1xuICAgIHJldHVybiB0aGlzLml0ZW1zQXNOb2Rlcy5maWx0ZXIoXG4gICAgICAoaXRlbSkgPT5cbiAgICAgICAgTWF0aC5wb3coKGl0ZW0ueCA/PyAwKSAtICRldmVudC5vZmZzZXRYICsgdGhpcy5nbG9iYWxPZmZzZXRbMF0sIDIpICtcbiAgICAgICAgICBNYXRoLnBvdygoaXRlbS55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0gLSAkZXZlbnQub2Zmc2V0WSwgMikgPFxuICAgICAgICBNYXRoLnBvdyh0aGlzLm9wdGlvbnMubm9kZVJhZGl1cyAvIDIgKyA4LCAyKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZpbmROb2Rlc0luU2hhcGVkKHNoYXBlOiB7IHN0YXJ0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH07IGVuZDogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9IH0pOiBQcnlOb2RlW10ge1xuICAgIGNvbnN0IG1pblggPSBNYXRoLm1pbihzaGFwZS5zdGFydC54LCBzaGFwZS5lbmQueCk7XG4gICAgY29uc3QgbWF4WCA9IE1hdGgubWF4KHNoYXBlLnN0YXJ0LngsIHNoYXBlLmVuZC54KTtcbiAgICBjb25zdCBtaW5ZID0gTWF0aC5taW4oc2hhcGUuc3RhcnQueSwgc2hhcGUuZW5kLnkpO1xuICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heChzaGFwZS5zdGFydC55LCBzaGFwZS5lbmQueSk7XG5cbiAgICByZXR1cm4gdGhpcy5pdGVtc0FzTm9kZXMuZmlsdGVyKFxuICAgICAgKGl0ZW0pID0+XG4gICAgICAgIChpdGVtLnggPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFswXSA+IG1pblggJiZcbiAgICAgICAgKGl0ZW0ueCA/PyAwKSArIHRoaXMuZ2xvYmFsT2Zmc2V0WzBdIDwgbWF4WCAmJlxuICAgICAgICAoaXRlbS55ID8/IDApICsgdGhpcy5nbG9iYWxPZmZzZXRbMV0gPiBtaW5ZICYmXG4gICAgICAgIChpdGVtLnkgPz8gMCkgKyB0aGlzLmdsb2JhbE9mZnNldFsxXSA8IG1heFlcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgdG9JbWFnZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXNvbHZlKHRoaXMuY2FudmFzLm5hdGl2ZUVsZW1lbnQudG9EYXRhVVJMKCdpbWFnZS9wbmcnKSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LWZvcmNlLWdyYXBoLWNzcz48L3ByeS13aWRnZXQtZm9yY2UtZ3JhcGgtY3NzPlxuPGRpdiBjbGFzcz1cIm8td2lkZ2V0IG8td2lkZ2V0LS1ncmFwaFwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICBbZGF0YXNvdXJjZUlkc109XCIoZGF0YXNvdXJjZUlkcyQgfCBhc3luYykgPz8gW11cIlxuICAgICpuZ0lmPVwiZGlzcGxheUhlYWRlciQgfCBhc3luY1wiXG4gICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICBbbWFuaWZlc3RdPVwibWFuaWZlc3RcIlxuICAgIChtYW5pZmVzdE1vZGlmaWVkKT1cIm1hbmlmZXN0TW9kaWZpZWQuZW1pdCgkZXZlbnQpXCJcbiAgICBbaGVhZGVyT3B0aW9uc109XCIoZGlzcGxheUhlYWRlciQgfCBhc3luYykgPz8ge31cIlxuICAgICNoZWFkZXJcbiAgPlxuICAgIDxwcnktc2V0dGluZ3NcbiAgICAgIChzYXZlVHJpZ2dlcmVkKT1cImVtaXRNYW5pZmVzdCgpXCJcbiAgICAgIChjaGFuZ2VUaXRsZSk9XCJjaGFuZ2VXaWRnZXRUaXRsZSgkZXZlbnQpXCJcbiAgICAgIFtoZWFkZXJQcmVzZW50XT1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW3dpZGdldEluZGV4XT1cIndpZGdldEluZGV4XCJcbiAgICAgIFtoZWFkZXJdPVwiaGVhZGVyXCJcbiAgICAgIFtvcGVuJF09XCJvcGVuJFwiXG4gICAgICBjbGFzcz1cIm8tc2V0dGluZ3NcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGZvcj1cImdyYXBoX2xheW91dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5sYXlvdXQnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTGF5b3V0KCRldmVudClcIlxuICAgICAgICAgIFtpdGVtc0FzT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgIFtpdGVtc109XCJsYXlvdXRzXCJcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weSEubGF5b3V0XCJcbiAgICAgICAgICBiaW5kTGFiZWw9XCJrZXlcIlxuICAgICAgICAgIGJpbmRWYWx1ZT1cImtleVwiXG4gICAgICAgICAgaWQ9XCJncmFwaF9sYXlvdXRcIlxuICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgICAgIDxwcnktcmFuZ2VcbiAgICAgICAgICBbbmdNb2RlbF09XCJvcHRpb25zQ29weSEubm9kZVJhZGl1c1wiXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlTm9kZVJhZGl1cygkZXZlbnQpXCJcbiAgICAgICAgICBsYWJlbFRyYW5zbGF0ZT1cIkBwcnkud2lkZ2V0LmdyYXBoLm5vZGVSYWRpdXNcIlxuICAgICAgICAgIG1pbj1cIjEwXCJcbiAgICAgICAgICBtYXg9XCIyMDBcIlxuICAgICAgICA+PC9wcnktcmFuZ2U+XG4gICAgICA8L2Rpdj5cbiAgICA8L3ByeS1zZXR0aW5ncz5cbiAgPC9wcnktd2lkZ2V0LWhlYWRlcj5cbiAgPGRpdiBjbGFzcz1cIm5vLXJlc3VsdFwiICpuZ0lmPVwiKGFsbEl0ZW1zV2l0aEltYWdlcyQgfCBhc3luYyk/Lmxlbmd0aCA9PT0gMFwiPlxuICAgIDxpbWdcbiAgICAgIGNsYXNzPVwibm8tcmVzdWx0X19zZWFyY2hcIlxuICAgICAgc3JjPVwiLi4vLi4vLi4vYXNzZXRzL3N2Z3MvcHJ5X3JlY2hlcmNoZV9wYXNfZGVfcmVzdWx0YXQuc3ZnXCJcbiAgICAgIGFsdD1cInt7ICdAcHJ5LndpZGdldC50YWJsZS5lbXB0eScgfCBpMThuIH19XCJcbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgLz5cbiAgICA8c3BhbiBjbGFzcz1cIm5vLXJlc3VsdF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5lbXB0eScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm0tYnRuLWdyb3VwIC1zZWxlY3Rpb24tY2hvaWNlXCIgW3N0eWxlLnRyYW5zZm9ybV09XCJib3R0b21MZWZ0JCB8IGFzeW5jXCI+XG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1pY29uLW9ubHlcIlxuICAgICAgKGNsaWNrKT1cImNoYW5nZU1vZGUoJ21vdmUnKVwiXG4gICAgICBbY2xhc3MuLXNlbGVjdGVkXT1cIm1vZGUgPT09ICdtb3ZlJ1wiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcE1vdmVcIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcE1vdmVfd2lkZ2V0TWFwXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cIm1vdmVcIj48L3ByeS1pY29uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ1LXZpc3VhbGx5LWhpZGRlblwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5tb3ZlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgPC9idXR0b24+XG5cbiAgICA8YnV0dG9uXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLWljb24tb25seVwiXG4gICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgncmVjdGFuZ2xlJylcIlxuICAgICAgW2NsYXNzLi1zZWxlY3RlZF09XCJtb2RlID09PSAncmVjdGFuZ2xlJ1wiXG4gICAgICBbcHJ5VG9vbHRpcF09XCJpbmZvVG9vbHRpcFJlY3RcIlxuICAgICAgcHJ5VG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCJcbiAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJpbmZvVG9vbHRpcFJlY3Rfd2lkZ2V0TWFwXCJcbiAgICA+XG4gICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInJlY3RhbmdsZVwiPjwvcHJ5LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInUtdmlzdWFsbHktaGlkZGVuXCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLnJlY3RhbmdsZScgfCBpMThuIH19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8Y2FudmFzXG4gICAgI2NhbnZhc1xuICAgIGNsYXNzPVwiby13aWRnZXQtLWdyYXBoX19jYW52YXNcIlxuICAgIChtb3VzZW1vdmUpPVwib25Nb3VzZU1vdmUoJGV2ZW50KVwiXG4gICAgKG1vdXNlZG93bik9XCJvbk1vdXNlRG93bigkZXZlbnQpXCJcbiAgICAobW91c2V1cCk9XCJvbk1vdXNlVXAoJGV2ZW50KVwiXG4gICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZVVwKCRldmVudCwgdHJ1ZSlcIlxuICAgIChjb250ZXh0bWVudSk9XCJjb250ZXh0TWVudSgkZXZlbnQpXCJcbiAgPjwvY2FudmFzPlxuXG4gIDxkaXYgY2xhc3M9XCJzZWxlY3Rpb24tcmVjdGFuZ2xlXCIgI3NlbGVjdGlvblJlY3RhbmdsZT48L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJtLXRvb2x0aXAgbS10b29sdGlwLS1wb3B1cCBub2V2ZW50XCJcbiAgICBbc3R5bGUuZGlzcGxheV09XCIodG9vbHRpcCQgfCBhc3luYyk/LmRpc3BsYXkgPyAnYmxvY2snIDogJ25vbmUnXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCIoKHRvb2x0aXAkIHwgYXN5bmMpPy54ID8/IDApICsgNTBcIlxuICAgIFtzdHlsZS50b3AucHhdPVwiKCh0b29sdGlwJCB8IGFzeW5jKT8ueSA/PyAwKSArIDUwXCJcbiAgPlxuICAgIDxkaXYgI3Rvb2x0aXA+PC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjaW5mb1Rvb2x0aXBNb3ZlPlxuICA8ZGl2IGNsYXNzPVwibS10b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIiBpZD1cImluZm9Ub29sdGlwTW92ZV93aWRnZXRNYXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm0tdG9vbHRpcF9fdGV4dFwiPnt7ICdAcHJ5LndpZGdldC5ncmFwaC5tb3ZlJyB8IGkxOG4gfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbmZvVG9vbHRpcFJlY3Q+XG4gIDxkaXYgY2xhc3M9XCJtLXRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiIGlkPVwiaW5mb1Rvb2x0aXBSZWN0X3dpZGdldE1hcFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibS10b29sdGlwX190ZXh0XCI+e3sgJ0Bwcnkud2lkZ2V0LmdyYXBoLnJlY3RhbmdsZScgfCBpMThuIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Component, ViewChild } from '@angular/core';
|
|
2
|
-
import { BaseWidgetComponent } from '@provoly/dashboard';
|
|
3
|
-
import { combineLatest, fromEvent, map } from 'rxjs';
|
|
2
|
+
import { BaseWidgetComponent, WIDGET_HEADER_HEIGHT } from '@provoly/dashboard';
|
|
3
|
+
import { combineLatest, debounceTime, delay, fromEvent, map } from 'rxjs';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@ngrx/store";
|
|
6
6
|
import * as i2 from "@angular/platform-browser";
|
|
@@ -14,8 +14,10 @@ export class WidgetIframeComponent extends BaseWidgetComponent {
|
|
|
14
14
|
this.domSanitizer = domSanitizer;
|
|
15
15
|
this.iframeMessagingService = iframeMessagingService;
|
|
16
16
|
this.optionsCopy = {};
|
|
17
|
+
this.WIDGET_HEADER_HEIGHT = WIDGET_HEADER_HEIGHT;
|
|
17
18
|
this.options$ = this.manifest$.pipe(map((manifest) => ({ src: '', ...manifest.options })));
|
|
18
19
|
this.src$ = this.options$.pipe(map((options) => !!options && !!options.src ? domSanitizer.bypassSecurityTrustResourceUrl(options.src) : undefined));
|
|
20
|
+
this.height$ = combineLatest([this.widgetSize$.pipe(debounceTime(100)), this.displayHeader$]).pipe(map(([size, display]) => (size.height ?? 100) - (display ? WIDGET_HEADER_HEIGHT : 0)), delay(10));
|
|
19
21
|
this.subscriptions.add(this.options$.subscribe((options) => (this.optionsCopy = JSON.parse(JSON.stringify(options)))));
|
|
20
22
|
this.subscriptions.add(combineLatest([fromEvent(window, 'message'), this.options$]).subscribe(([$event, options]) => {
|
|
21
23
|
const event = $event;
|
|
@@ -41,13 +43,13 @@ export class WidgetIframeComponent extends BaseWidgetComponent {
|
|
|
41
43
|
});
|
|
42
44
|
}
|
|
43
45
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetIframeComponent, deps: [{ token: i1.Store }, { token: i2.DomSanitizer }, { token: i3.IframeMessagingService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
44
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetIframeComponent, selector: "pry-widget-iframe", viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframe"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-iframe-css></pry-widget-iframe-css>\n<div class=\"o-widget--iframe\">\n <
|
|
46
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: WidgetIframeComponent, selector: "pry-widget-iframe", viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframe"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<pry-widget-iframe-css></pry-widget-iframe-css>\n<div class=\"o-widget o-widget--iframe\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"iframe_src\">{{ '@pry.widget.iframe.label' | i18n }}</label>\n <input\n class=\"a-form-field\"\n id=\"iframe_src\"\n type=\"text\"\n [value]=\"optionsCopy.src\"\n (input)=\"changeSrc($event)\"\n />\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <ng-container *ngIf=\"src$ | async as src\">\n <div [style.height.px]=\"height$ | async\">\n <iframe [src]=\"src\" #iframe></iframe>\n </div>\n </ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.SettingsComponent, selector: "pry-settings", inputs: ["widgetIndex", "isDisable", "headerPresent", "open$", "header"], outputs: ["saveTriggered", "changeTitle"] }, { kind: "component", type: i5.PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: ["manifest", "additionalOptions", "headerOptions", "displayCount", "datasourceIds", "widgetIndex"], outputs: ["manifestModified"] }, { kind: "component", type: i6.PryWidgetIframeCssComponent, selector: "pry-widget-iframe-css" }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.I18nPipe, name: "i18n" }] }); }
|
|
45
47
|
}
|
|
46
48
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WidgetIframeComponent, decorators: [{
|
|
47
49
|
type: Component,
|
|
48
|
-
args: [{ selector: 'pry-widget-iframe', template: "<pry-widget-iframe-css></pry-widget-iframe-css>\n<div class=\"o-widget--iframe\">\n <
|
|
50
|
+
args: [{ selector: 'pry-widget-iframe', template: "<pry-widget-iframe-css></pry-widget-iframe-css>\n<div class=\"o-widget o-widget--iframe\">\n <pry-widget-header\n *ngIf=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [manifest]=\"manifest\"\n (manifestModified)=\"manifestModified.emit($event)\"\n #header\n [headerOptions]=\"(displayHeader$ | async) ?? {}\"\n >\n <pry-settings\n (saveTriggered)=\"emitManifest()\"\n (changeTitle)=\"changeWidgetTitle($event)\"\n [headerPresent]=\"displayHeader$ | async\"\n [widgetIndex]=\"widgetIndex\"\n [header]=\"header\"\n [open$]=\"open$\"\n class=\"o-settings\"\n >\n <div class=\"o-settings__fields\">\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"iframe_src\">{{ '@pry.widget.iframe.label' | i18n }}</label>\n <input\n class=\"a-form-field\"\n id=\"iframe_src\"\n type=\"text\"\n [value]=\"optionsCopy.src\"\n (input)=\"changeSrc($event)\"\n />\n </div>\n </div>\n </pry-settings>\n </pry-widget-header>\n <ng-container *ngIf=\"src$ | async as src\">\n <div [style.height.px]=\"height$ | async\">\n <iframe [src]=\"src\" #iframe></iframe>\n </div>\n </ng-container>\n</div>\n" }]
|
|
49
51
|
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.DomSanitizer }, { type: i3.IframeMessagingService }, { type: i0.ElementRef }]; }, propDecorators: { iframe: [{
|
|
50
52
|
type: ViewChild,
|
|
51
53
|
args: ['iframe']
|
|
52
54
|
}] } });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWlmcmFtZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC93aWRnZXRzL3dpZGdldC1pZnJhbWUvY29tcG9uZW50L3dpZGdldC1pZnJhbWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvd2lkZ2V0cy93aWRnZXQtaWZyYW1lL2NvbXBvbmVudC93aWRnZXQtaWZyYW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBdUIsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFRdEYsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG1CQUFtQjtJQVE1RCxZQUNFLEtBQWlCLEVBQ1QsWUFBMEIsRUFDMUIsc0JBQThDLEVBQ3RELEVBQWM7UUFFZCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBSlQsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQVB4RCxnQkFBVyxHQUF3QixFQUFFLENBQUM7UUFDdEMseUJBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFVMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBMEIsQ0FBQSxDQUFDLENBQUMsQ0FBQztRQUNsSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUM1QixHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNkLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyw4QkFBOEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDbEcsQ0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2hHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNyRixLQUFLLENBQUMsRUFBRSxDQUFDLENBQ1YsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDL0YsQ0FBQztRQUVGLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUNwQixhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDM0YsTUFBTSxLQUFLLEdBQUcsTUFBOEIsQ0FBQztZQUM3QyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtnQkFDaEMsd0NBQXdDO2dCQUN4QyxPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDekQsb0NBQW9DO2dCQUNwQyxPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN6RixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFhO1FBQ3JCLGFBQWE7UUFDYixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztJQUNwRCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDekIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUMxRCxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTNEVSxxQkFBcUI7a0dBQXJCLHFCQUFxQixrTENabEMsNndDQXVDQTs7MkZEM0JhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxtQkFBbUI7cUxBU1IsTUFBTTtzQkFBMUIsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZVJlc291cmNlVXJsIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IEJhc2VXaWRnZXRDb21wb25lbnQsIElmcmFtZVdpZGdldE9wdGlvbnMsIFdJREdFVF9IRUFERVJfSEVJR0hUIH0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZGVsYXksIGZyb21FdmVudCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQcnlJZnJhbWVNZXNzYWdlVHlwZSB9IGZyb20gJy4uL21lc3NhZ2luZy9pZnJhbWUtbWVzc2FnZS10eXBlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZnJhbWVNZXNzYWdpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vbWVzc2FnaW5nL2lmcmFtZS1tZXNzYWdpbmcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS13aWRnZXQtaWZyYW1lJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3dpZGdldC1pZnJhbWUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldElmcmFtZUNvbXBvbmVudCBleHRlbmRzIEJhc2VXaWRnZXRDb21wb25lbnQge1xuICBvcHRpb25zJDogT2JzZXJ2YWJsZTxJZnJhbWVXaWRnZXRPcHRpb25zPjtcbiAgc3JjJDogT2JzZXJ2YWJsZTxTYWZlUmVzb3VyY2VVcmwgfCB1bmRlZmluZWQ+O1xuICBoZWlnaHQkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIG9wdGlvbnNDb3B5OiBJZnJhbWVXaWRnZXRPcHRpb25zID0ge307XG4gIFdJREdFVF9IRUFERVJfSEVJR0hUID0gV0lER0VUX0hFQURFUl9IRUlHSFQ7XG4gIEBWaWV3Q2hpbGQoJ2lmcmFtZScpIGlmcmFtZT86IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc3RvcmU6IFN0b3JlPGFueT4sXG4gICAgcHJpdmF0ZSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGlmcmFtZU1lc3NhZ2luZ1NlcnZpY2U6IElmcmFtZU1lc3NhZ2luZ1NlcnZpY2UsXG4gICAgZWw6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgc3VwZXIoc3RvcmUsIGVsKTtcbiAgICB0aGlzLm9wdGlvbnMkID0gdGhpcy5tYW5pZmVzdCQucGlwZShtYXAoKG1hbmlmZXN0KSA9PiAoeyBzcmM6ICcnLCAuLi5tYW5pZmVzdC5vcHRpb25zIH0gYXMgSWZyYW1lV2lkZ2V0T3B0aW9ucykpKTtcbiAgICB0aGlzLnNyYyQgPSB0aGlzLm9wdGlvbnMkLnBpcGUoXG4gICAgICBtYXAoKG9wdGlvbnMpID0+XG4gICAgICAgICEhb3B0aW9ucyAmJiAhIW9wdGlvbnMuc3JjID8gZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChvcHRpb25zLnNyYykgOiB1bmRlZmluZWRcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5oZWlnaHQkID0gY29tYmluZUxhdGVzdChbdGhpcy53aWRnZXRTaXplJC5waXBlKGRlYm91bmNlVGltZSgxMDApKSwgdGhpcy5kaXNwbGF5SGVhZGVyJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzaXplLCBkaXNwbGF5XSkgPT4gKHNpemUuaGVpZ2h0ID8/IDEwMCkgLSAoZGlzcGxheSA/IFdJREdFVF9IRUFERVJfSEVJR0hUIDogMCkpLFxuICAgICAgZGVsYXkoMTApXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLm9wdGlvbnMkLnN1YnNjcmliZSgob3B0aW9ucykgPT4gKHRoaXMub3B0aW9uc0NvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKSkpXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBjb21iaW5lTGF0ZXN0KFtmcm9tRXZlbnQod2luZG93LCAnbWVzc2FnZScpLCB0aGlzLm9wdGlvbnMkXSkuc3Vic2NyaWJlKChbJGV2ZW50LCBvcHRpb25zXSkgPT4ge1xuICAgICAgICBjb25zdCBldmVudCA9ICRldmVudCBhcyBQcnlJZnJhbWVNZXNzYWdlVHlwZTtcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEudGFyZ2V0ICE9PSAnQHByeScpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgYWxsIG5vbiBwcnkgZm9ybWF0dGVkIHJlcXVlc3RzXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnNyYyB8fCAhb3B0aW9ucy5zcmMuc3RhcnRzV2l0aChldmVudC5vcmlnaW4pKSB7XG4gICAgICAgICAgLy8gaWdub3JlIGRlbWFuZHMgZnJvbSBvdGhlciBkb21haW5zXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pZnJhbWVNZXNzYWdpbmdTZXJ2aWNlLnJlY2VpdmVkKGV2ZW50LCB0aGlzLmlmcmFtZT8ubmF0aXZlRWxlbWVudD8uY29udGVudFdpbmRvdyk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBjaGFuZ2VTcmMoJGV2ZW50OiBFdmVudCkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLm9wdGlvbnNDb3B5LnNyYyA9ICRldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgZW1pdE1hbmlmZXN0KCkge1xuICAgIHRoaXMubWFuaWZlc3RNb2RpZmllZC5lbWl0KHtcbiAgICAgIHdpZGdldEluZGV4OiB0aGlzLndpZGdldEluZGV4LFxuICAgICAgbWFuaWZlc3Q6IHsgLi4udGhpcy5tYW5pZmVzdCwgb3B0aW9uczogdGhpcy5vcHRpb25zQ29weSB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxwcnktd2lkZ2V0LWlmcmFtZS1jc3M+PC9wcnktd2lkZ2V0LWlmcmFtZS1jc3M+XG48ZGl2IGNsYXNzPVwiby13aWRnZXQgby13aWRnZXQtLWlmcmFtZVwiPlxuICA8cHJ5LXdpZGdldC1oZWFkZXJcbiAgICAqbmdJZj1cImRpc3BsYXlIZWFkZXIkIHwgYXN5bmNcIlxuICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgW21hbmlmZXN0XT1cIm1hbmlmZXN0XCJcbiAgICAobWFuaWZlc3RNb2RpZmllZCk9XCJtYW5pZmVzdE1vZGlmaWVkLmVtaXQoJGV2ZW50KVwiXG4gICAgI2hlYWRlclxuICAgIFtoZWFkZXJPcHRpb25zXT1cIihkaXNwbGF5SGVhZGVyJCB8IGFzeW5jKSA/PyB7fVwiXG4gID5cbiAgICA8cHJ5LXNldHRpbmdzXG4gICAgICAoc2F2ZVRyaWdnZXJlZCk9XCJlbWl0TWFuaWZlc3QoKVwiXG4gICAgICAoY2hhbmdlVGl0bGUpPVwiY2hhbmdlV2lkZ2V0VGl0bGUoJGV2ZW50KVwiXG4gICAgICBbaGVhZGVyUHJlc2VudF09XCJkaXNwbGF5SGVhZGVyJCB8IGFzeW5jXCJcbiAgICAgIFt3aWRnZXRJbmRleF09XCJ3aWRnZXRJbmRleFwiXG4gICAgICBbaGVhZGVyXT1cImhlYWRlclwiXG4gICAgICBbb3BlbiRdPVwib3BlbiRcIlxuICAgICAgY2xhc3M9XCJvLXNldHRpbmdzXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1zZXR0aW5nc19fZmllbGRzXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgZm9yPVwiaWZyYW1lX3NyY1wiPnt7ICdAcHJ5LndpZGdldC5pZnJhbWUubGFiZWwnIHwgaTE4biB9fTwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICBpZD1cImlmcmFtZV9zcmNcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbnNDb3B5LnNyY1wiXG4gICAgICAgICAgICAoaW5wdXQpPVwiY2hhbmdlU3JjKCRldmVudClcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9wcnktc2V0dGluZ3M+XG4gIDwvcHJ5LXdpZGdldC1oZWFkZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzcmMkIHwgYXN5bmMgYXMgc3JjXCI+XG4gICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImhlaWdodCQgfCBhc3luY1wiPlxuICAgICAgPGlmcmFtZSBbc3JjXT1cInNyY1wiICNpZnJhbWU+PC9pZnJhbWU+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|