igniteui-angular 13.1.0-beta.0 → 13.1.0-beta.1
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/esm2020/lib/grids/pivot-grid/pivot-data-selector.component.mjs +20 -17
- package/esm2020/lib/grids/pivot-grid/pivot-grid.component.mjs +20 -7
- package/esm2020/lib/grids/pivot-grid/pivot-grid.module.mjs +6 -4
- package/fesm2015/igniteui-angular.mjs +23 -10
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +23 -10
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/grids/pivot-grid/pivot-grid.component.d.ts +1 -0
- package/lib/grids/pivot-grid/pivot-grid.module.d.ts +3 -1
- package/package.json +1 -1
|
@@ -9,21 +9,24 @@ import { PivotUtil } from './pivot-util';
|
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "../../input-group/input-group.component";
|
|
11
11
|
import * as i2 from "../../icon/icon.component";
|
|
12
|
-
import * as i3 from "../../
|
|
13
|
-
import * as i4 from "../../
|
|
14
|
-
import * as i5 from "../../
|
|
15
|
-
import * as i6 from "../../
|
|
16
|
-
import * as i7 from "../../expansion-panel/expansion-panel
|
|
17
|
-
import * as i8 from "../../
|
|
18
|
-
import * as i9 from "../../
|
|
19
|
-
import * as i10 from "../../
|
|
20
|
-
import * as i11 from "../../
|
|
21
|
-
import * as i12 from "
|
|
22
|
-
import * as i13 from "../../directives/
|
|
23
|
-
import * as i14 from "../../
|
|
24
|
-
import * as i15 from "
|
|
25
|
-
import * as i16 from "../../drop-
|
|
26
|
-
import * as i17 from "
|
|
12
|
+
import * as i3 from "../../list/list.component";
|
|
13
|
+
import * as i4 from "../../list/list-item.component";
|
|
14
|
+
import * as i5 from "../../checkbox/checkbox.component";
|
|
15
|
+
import * as i6 from "../../accordion/accordion.component";
|
|
16
|
+
import * as i7 from "../../expansion-panel/expansion-panel.component";
|
|
17
|
+
import * as i8 from "../../expansion-panel/expansion-panel-header.component";
|
|
18
|
+
import * as i9 from "../../chips/chip.component";
|
|
19
|
+
import * as i10 from "../../expansion-panel/expansion-panel-body.component";
|
|
20
|
+
import * as i11 from "../../drop-down/drop-down.component";
|
|
21
|
+
import * as i12 from "../../drop-down/drop-down-item.component";
|
|
22
|
+
import * as i13 from "../../directives/prefix/prefix.directive";
|
|
23
|
+
import * as i14 from "../../directives/input/input.directive";
|
|
24
|
+
import * as i15 from "@angular/common";
|
|
25
|
+
import * as i16 from "../../directives/drag-drop/drag-drop.directive";
|
|
26
|
+
import * as i17 from "../../expansion-panel/expansion-panel.directives";
|
|
27
|
+
import * as i18 from "../../directives/for-of/for_of.directive";
|
|
28
|
+
import * as i19 from "../../drop-down/drop-down-navigation.directive";
|
|
29
|
+
import * as i20 from "./pivot-grid.pipes";
|
|
27
30
|
export class IgxPivotDataSelectorComponent {
|
|
28
31
|
constructor(renderer, cdr) {
|
|
29
32
|
this.renderer = renderer;
|
|
@@ -372,7 +375,7 @@ export class IgxPivotDataSelectorComponent {
|
|
|
372
375
|
}
|
|
373
376
|
}
|
|
374
377
|
IgxPivotDataSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IgxPivotDataSelectorComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
375
|
-
IgxPivotDataSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: IgxPivotDataSelectorComponent, selector: "igx-pivot-data-selector", inputs: { grid: "grid" }, host: { properties: { "class.igx-pivot-data-selector": "this.cssClass" } }, ngImport: i0, template: "<div class=\"igx-pivot-data-selector__filter\">\n <igx-input-group type=\"box\" [displayDensity]=\"displayDensity\">\n <igx-icon igxPrefix>search</igx-icon>\n <input\n #input\n igxInput\n tabindex=\"0\"\n placeholder=\"Search\"\n autocomplete=\"off\"\n />\n </igx-input-group>\n <igx-list [displayDensity]=\"displayDensity\">\n <igx-list-item\n *ngFor=\"\n let item of dims\n | filterPivotItems: input.value:grid.pipeTrigger\n \"\n [id]=\"item.memberName\"\n >\n <igx-checkbox\n [aria-labelledby]=\"item.memberName\"\n [disableRipple]=\"true\"\n [checked]=\"item.enabled\"\n (click)=\"toggleItem(item)\"\n ></igx-checkbox>\n <span>{{ item.memberName }}</span>\n </igx-list-item>\n <igx-list-item\n *ngFor=\"\n let item of values\n | filterPivotItems: input.value:grid.pipeTrigger\n \"\n [id]=\"item.member\"\n >\n <igx-checkbox\n [aria-labelledby]=\"item.member\"\n [disableRipple]=\"true\"\n [checked]=\"item.enabled\"\n (click)=\"toggleItem(item)\"\n ></igx-checkbox>\n <span>{{ item.displayName || item.member }}</span>\n </igx-list-item>\n </igx-list>\n</div>\n\n<igx-accordion>\n <igx-expansion-panel\n [animationSettings]=\"animationSettings\"\n [collapsed]=\"false\"\n *ngFor=\"let panel of _panels\"\n >\n <igx-expansion-panel-header\n iconPosition=\"left\"\n [disabled]=\"false\"\n igxDrop\n (enter)=\"onPanelEntry($event, panel.name)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n >\n <igx-expansion-panel-title class=\"igx-pivot-data-selector__header\">\n <h6 class=\"igx-pivot-data-selector__header-title\">\n {{ grid.resourceStrings[panel.i18n] }}\n </h6>\n <div class=\"igx-pivot-data-selector__header-extra\">\n <igx-icon>{{ panel.icon }}</igx-icon>\n <igx-chip>{{ this.grid[panel.dataKey].length }}</igx-chip>\n </div>\n </igx-expansion-panel-title>\n </igx-expansion-panel-header>\n <igx-expansion-panel-body\n igxDrop\n (enter)=\"onPanelEntry($event, panel.name)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n >\n <igx-list\n *ngIf=\"this.grid[panel.dataKey].length > 0\"\n [displayDensity]=\"displayDensity\"\n >\n <igx-list-item\n igxDrop\n [igxDrag]=\"{ gridID: grid.id, selectorChannels: panel.dragChannels }\"\n [ghostTemplate]=\"itemGhost\"\n (ghostCreate)=\"ghostCreated($event, item[panel.itemKey])\"\n (over)=\"onItemDragOver($event)\"\n (leave)=\"onItemDragLeave($event)\"\n (dragMove)=\"onItemDragMove($event)\"\n (dragEnd)=\"onItemDragEnd($event)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n *igxFor=\"\n let item of this.grid[panel.dataKey];\n scrollOrientation: 'vertical';\n let index\n \"\n [id]=\"item[panel.itemKey]\"\n >\n <div class=\"igx-pivot-data-selector__item\">\n <div\n class=\"igx-pivot-data-selector__item-start\"\n (click)=\"onItemSort($event, item, panel.type)\"\n [class.igx-pivot-data-selector__action-sort]=\"\n panel.sortable\n \"\n >\n <div class=\"igx-pivot-data-selector__item-text\">\n <span *ngIf=\"panel.type === null\">{{\n item.aggregate.key\n }}</span>\n <span *ngIf=\"panel.type === null\">(</span>\n <span>{{ item[panel.displayKey] || item[panel.itemKey] }}</span>\n <span *ngIf=\"panel.type === null\">)</span>\n </div>\n <igx-icon\n class=\"igx-pivot-data-selector__action-sort\"\n *ngIf=\"panel.sortable && item.sortDirection\"\n >\n {{\n item.sortDirection < 2\n ? \"arrow_upward\"\n : \"arrow_downward\"\n }}\n </igx-icon>\n </div>\n <div class=\"igx-pivot-data-selector__item-end\">\n <igx-icon\n class=\"igx-pivot-data-selector__action-filter\"\n *ngIf=\"panel.type !== null\"\n (pointerdown)=\"\n onFilteringIconPointerDown($event)\n \"\n (click)=\"onFilteringIconClick($event, item)\"\n >filter_list\n </igx-icon>\n <igx-icon\n class=\"igx-pivot-data-selector__action-summary\"\n *ngIf=\"panel.type === null\"\n (click)=\"onSummaryClick($event, item, dropdown)\"\n [igxDropDownItemNavigation]=\"dropdown\"\n >\n functions\n </igx-icon>\n <igx-icon\n igxDragHandle\n class=\"igx-pivot-data-selector__action-move\"\n *ngIf=\"panel.dragChannels.length > 0\"\n >drag_handle</igx-icon\n >\n </div>\n </div>\n </igx-list-item>\n </igx-list>\n <div\n class=\"igx-pivot-data-selector__empty\"\n *ngIf=\"this.grid[panel.dataKey].length === 0\"\n >\n {{ grid.resourceStrings.igx_grid_pivot_selector_panel_empty }}\n </div>\n </igx-expansion-panel-body>\n </igx-expansion-panel>\n</igx-accordion>\n\n<igx-drop-down #dropdown (selectionChanging)=\"onAggregationChange($event)\">\n <igx-drop-down-item\n *ngFor=\"let item of aggregateList\"\n [selected]=\"isSelected(item)\"\n [value]=\"item\"\n >\n {{ item.label }}\n </igx-drop-down-item>\n</igx-drop-down>\n\n<ng-template #itemGhost>\n <div\n class=\"igx-pivot-data-selector__item-ghost\"\n [style.width.px]=\"ghostWidth\"\n [class.igx-pivot-data-selector__item-ghost--no-drop]=\"!dropAllowed\"\n >\n <div class=\"igx-pivot-data-selector__item-ghost-text\">\n <igx-icon>unfold_more</igx-icon>\n <span>{{ ghostText }}</span>\n </div>\n <igx-icon>drag_handle</igx-icon>\n </div>\n</ng-template>\n", components: [{ type: i1.IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { type: i2.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { type: i3.IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }, { type: i4.IgxExpansionPanelComponent, selector: "igx-expansion-panel", inputs: ["animationSettings", "id", "collapsed"], outputs: ["collapsedChange", "contentCollapsing", "contentCollapsed", "contentExpanding", "contentExpanded"] }, { type: i5.IgxExpansionPanelHeaderComponent, selector: "igx-expansion-panel-header", inputs: ["lv", "role", "iconPosition", "disabled"], outputs: ["interaction"] }, { type: i6.IgxChipComponent, selector: "igx-chip", inputs: ["id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { type: i7.IgxExpansionPanelBodyComponent, selector: "igx-expansion-panel-body", inputs: ["role", "label", "labelledBy"] }, { type: i8.IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus"], outputs: ["opening", "opened", "closing", "closed"] }, { type: i9.IgxDropDownItemComponent, selector: "igx-drop-down-item" }], directives: [{ type: i10.IgxPrefixDirective, selector: "igx-prefix,[igxPrefix]" }, { type: i11.IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i13.IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { type: i14.IgxExpansionPanelTitleDirective, selector: "igx-expansion-panel-title" }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i15.IgxForOfDirective, selector: "[igxFor][igxForOf]", inputs: ["igxForOf", "igxForSizePropName", "igxForScrollOrientation", "igxForScrollContainer", "igxForContainerSize", "igxForItemSize", "igxForTotalItemCount", "igxForTrackBy"], outputs: ["chunkLoad", "scrollbarVisibilityChanged", "contentSizeChange", "dataChanged", "beforeViewDestroyed", "chunkPreload"] }, { type: i13.IgxDragDirective, selector: "[igxDrag]", inputs: ["igxDrag", "dragTolerance", "dragDirection", "dragChannel", "ghost", "ghostClass", "ghostTemplate", "ghostHost", "ghostOffsetX", "ghostOffsetY"], outputs: ["dragStart", "dragMove", "dragEnd", "dragClick", "ghostCreate", "ghostDestroy", "transitioned"], exportAs: ["drag"] }, { type: i16.IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { type: i13.IgxDragHandleDirective, selector: "[igxDragHandle]" }], pipes: { "filterPivotItems": i17.IgxFilterPivotItemsPipe } });
|
|
378
|
+
IgxPivotDataSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: IgxPivotDataSelectorComponent, selector: "igx-pivot-data-selector", inputs: { grid: "grid" }, host: { properties: { "class.igx-pivot-data-selector": "this.cssClass" } }, ngImport: i0, template: "<div class=\"igx-pivot-data-selector__filter\">\n <igx-input-group type=\"box\" [displayDensity]=\"displayDensity\">\n <igx-icon igxPrefix>search</igx-icon>\n <input\n #input\n igxInput\n tabindex=\"0\"\n placeholder=\"Search\"\n autocomplete=\"off\"\n />\n </igx-input-group>\n <igx-list [displayDensity]=\"displayDensity\">\n <igx-list-item\n *ngFor=\"\n let item of dims\n | filterPivotItems: input.value:grid.pipeTrigger\n \"\n [id]=\"item.memberName\"\n >\n <igx-checkbox\n [aria-labelledby]=\"item.memberName\"\n [disableRipple]=\"true\"\n [checked]=\"item.enabled\"\n (click)=\"toggleItem(item)\"\n ></igx-checkbox>\n <span>{{ item.memberName }}</span>\n </igx-list-item>\n <igx-list-item\n *ngFor=\"\n let item of values\n | filterPivotItems: input.value:grid.pipeTrigger\n \"\n [id]=\"item.member\"\n >\n <igx-checkbox\n [aria-labelledby]=\"item.member\"\n [disableRipple]=\"true\"\n [checked]=\"item.enabled\"\n (click)=\"toggleItem(item)\"\n ></igx-checkbox>\n <span>{{ item.displayName || item.member }}</span>\n </igx-list-item>\n </igx-list>\n</div>\n\n<igx-accordion>\n <igx-expansion-panel\n [animationSettings]=\"animationSettings\"\n [collapsed]=\"false\"\n *ngFor=\"let panel of _panels\"\n >\n <igx-expansion-panel-header\n iconPosition=\"left\"\n [disabled]=\"false\"\n igxDrop\n (enter)=\"onPanelEntry($event, panel.name)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n >\n <igx-expansion-panel-title class=\"igx-pivot-data-selector__header\">\n <h6 class=\"igx-pivot-data-selector__header-title\">\n {{ grid.resourceStrings[panel.i18n] }}\n </h6>\n <div class=\"igx-pivot-data-selector__header-extra\">\n <igx-icon>{{ panel.icon }}</igx-icon>\n <igx-chip>{{ this.grid[panel.dataKey].length }}</igx-chip>\n </div>\n </igx-expansion-panel-title>\n </igx-expansion-panel-header>\n <igx-expansion-panel-body\n igxDrop\n (enter)=\"onPanelEntry($event, panel.name)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n >\n <igx-list\n *ngIf=\"this.grid[panel.dataKey].length > 0\"\n [displayDensity]=\"displayDensity\"\n >\n <igx-list-item\n igxDrop\n [igxDrag]=\"{ gridID: grid.id, selectorChannels: panel.dragChannels }\"\n [ghostTemplate]=\"itemGhost\"\n (ghostCreate)=\"ghostCreated($event, item[panel.itemKey])\"\n (over)=\"onItemDragOver($event)\"\n (leave)=\"onItemDragLeave($event)\"\n (dragMove)=\"onItemDragMove($event)\"\n (dragEnd)=\"onItemDragEnd($event)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n *igxFor=\"\n let item of this.grid[panel.dataKey];\n scrollOrientation: 'vertical';\n let index\n \"\n [id]=\"item[panel.itemKey]\"\n >\n <div class=\"igx-pivot-data-selector__item\">\n <div\n class=\"igx-pivot-data-selector__item-start\"\n (click)=\"onItemSort($event, item, panel.type)\"\n [class.igx-pivot-data-selector__action-sort]=\"\n panel.sortable\n \"\n >\n <div class=\"igx-pivot-data-selector__item-text\">\n <span *ngIf=\"panel.type === null\">{{\n item.aggregate.key\n }}</span>\n <span *ngIf=\"panel.type === null\">(</span>\n <span>{{ item[panel.displayKey] || item[panel.itemKey] }}</span>\n <span *ngIf=\"panel.type === null\">)</span>\n </div>\n <igx-icon\n class=\"igx-pivot-data-selector__action-sort\"\n *ngIf=\"panel.sortable && item.sortDirection\"\n >\n {{\n item.sortDirection < 2\n ? \"arrow_upward\"\n : \"arrow_downward\"\n }}\n </igx-icon>\n </div>\n <div class=\"igx-pivot-data-selector__item-end\">\n <igx-icon\n class=\"igx-pivot-data-selector__action-filter\"\n *ngIf=\"panel.type !== null\"\n (pointerdown)=\"\n onFilteringIconPointerDown($event)\n \"\n (click)=\"onFilteringIconClick($event, item)\"\n >filter_list\n </igx-icon>\n <igx-icon\n class=\"igx-pivot-data-selector__action-summary\"\n *ngIf=\"panel.type === null\"\n (click)=\"onSummaryClick($event, item, dropdown)\"\n [igxDropDownItemNavigation]=\"dropdown\"\n >\n functions\n </igx-icon>\n <igx-icon\n igxDragHandle\n class=\"igx-pivot-data-selector__action-move\"\n *ngIf=\"panel.dragChannels.length > 0\"\n >drag_handle</igx-icon\n >\n </div>\n </div>\n </igx-list-item>\n </igx-list>\n <div\n class=\"igx-pivot-data-selector__empty\"\n *ngIf=\"this.grid[panel.dataKey].length === 0\"\n >\n {{ grid.resourceStrings.igx_grid_pivot_selector_panel_empty }}\n </div>\n </igx-expansion-panel-body>\n </igx-expansion-panel>\n</igx-accordion>\n\n<igx-drop-down #dropdown (selectionChanging)=\"onAggregationChange($event)\">\n <igx-drop-down-item\n *ngFor=\"let item of aggregateList\"\n [selected]=\"isSelected(item)\"\n [value]=\"item\"\n >\n {{ item.label }}\n </igx-drop-down-item>\n</igx-drop-down>\n\n<ng-template #itemGhost>\n <div\n class=\"igx-pivot-data-selector__item-ghost\"\n [style.width.px]=\"ghostWidth\"\n [class.igx-pivot-data-selector__item-ghost--no-drop]=\"!dropAllowed\"\n >\n <div class=\"igx-pivot-data-selector__item-ghost-text\">\n <igx-icon>unfold_more</igx-icon>\n <span>{{ ghostText }}</span>\n </div>\n <igx-icon>drag_handle</igx-icon>\n </div>\n</ng-template>\n", components: [{ type: i1.IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { type: i2.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }, { type: i3.IgxListComponent, selector: "igx-list", inputs: ["panEndTriggeringThreshold", "id", "allowLeftPanning", "allowRightPanning", "isLoading", "resourceStrings"], outputs: ["leftPan", "rightPan", "startPan", "endPan", "resetPan", "panStateChange", "itemClicked"] }, { type: i4.IgxListItemComponent, selector: "igx-list-item", inputs: ["isHeader", "hidden", "index"] }, { type: i5.IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }, { type: i6.IgxAccordionComponent, selector: "igx-accordion", inputs: ["id", "animationSettings", "singleBranchExpand"], outputs: ["panelExpanding", "panelExpanded", "panelCollapsing", "panelCollapsed"] }, { type: i7.IgxExpansionPanelComponent, selector: "igx-expansion-panel", inputs: ["animationSettings", "id", "collapsed"], outputs: ["collapsedChange", "contentCollapsing", "contentCollapsed", "contentExpanding", "contentExpanded"] }, { type: i8.IgxExpansionPanelHeaderComponent, selector: "igx-expansion-panel-header", inputs: ["lv", "role", "iconPosition", "disabled"], outputs: ["interaction"] }, { type: i9.IgxChipComponent, selector: "igx-chip", inputs: ["id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { type: i10.IgxExpansionPanelBodyComponent, selector: "igx-expansion-panel-body", inputs: ["role", "label", "labelledBy"] }, { type: i11.IgxDropDownComponent, selector: "igx-drop-down", inputs: ["allowItemsFocus"], outputs: ["opening", "opened", "closing", "closed"] }, { type: i12.IgxDropDownItemComponent, selector: "igx-drop-down-item" }], directives: [{ type: i13.IgxPrefixDirective, selector: "igx-prefix,[igxPrefix]" }, { type: i14.IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { type: i15.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i16.IgxDropDirective, selector: "[igxDrop]", inputs: ["igxDrop", "dropChannel", "dropStrategy"], outputs: ["enter", "over", "leave", "dropped"], exportAs: ["drop"] }, { type: i17.IgxExpansionPanelTitleDirective, selector: "igx-expansion-panel-title" }, { type: i15.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i18.IgxForOfDirective, selector: "[igxFor][igxForOf]", inputs: ["igxForOf", "igxForSizePropName", "igxForScrollOrientation", "igxForScrollContainer", "igxForContainerSize", "igxForItemSize", "igxForTotalItemCount", "igxForTrackBy"], outputs: ["chunkLoad", "scrollbarVisibilityChanged", "contentSizeChange", "dataChanged", "beforeViewDestroyed", "chunkPreload"] }, { type: i16.IgxDragDirective, selector: "[igxDrag]", inputs: ["igxDrag", "dragTolerance", "dragDirection", "dragChannel", "ghost", "ghostClass", "ghostTemplate", "ghostHost", "ghostOffsetX", "ghostOffsetY"], outputs: ["dragStart", "dragMove", "dragEnd", "dragClick", "ghostCreate", "ghostDestroy", "transitioned"], exportAs: ["drag"] }, { type: i19.IgxDropDownItemNavigationDirective, selector: "[igxDropDownItemNavigation]", inputs: ["igxDropDownItemNavigation"] }, { type: i16.IgxDragHandleDirective, selector: "[igxDragHandle]" }], pipes: { "filterPivotItems": i20.IgxFilterPivotItemsPipe } });
|
|
376
379
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: IgxPivotDataSelectorComponent, decorators: [{
|
|
377
380
|
type: Component,
|
|
378
381
|
args: [{ selector: "igx-pivot-data-selector", template: "<div class=\"igx-pivot-data-selector__filter\">\n <igx-input-group type=\"box\" [displayDensity]=\"displayDensity\">\n <igx-icon igxPrefix>search</igx-icon>\n <input\n #input\n igxInput\n tabindex=\"0\"\n placeholder=\"Search\"\n autocomplete=\"off\"\n />\n </igx-input-group>\n <igx-list [displayDensity]=\"displayDensity\">\n <igx-list-item\n *ngFor=\"\n let item of dims\n | filterPivotItems: input.value:grid.pipeTrigger\n \"\n [id]=\"item.memberName\"\n >\n <igx-checkbox\n [aria-labelledby]=\"item.memberName\"\n [disableRipple]=\"true\"\n [checked]=\"item.enabled\"\n (click)=\"toggleItem(item)\"\n ></igx-checkbox>\n <span>{{ item.memberName }}</span>\n </igx-list-item>\n <igx-list-item\n *ngFor=\"\n let item of values\n | filterPivotItems: input.value:grid.pipeTrigger\n \"\n [id]=\"item.member\"\n >\n <igx-checkbox\n [aria-labelledby]=\"item.member\"\n [disableRipple]=\"true\"\n [checked]=\"item.enabled\"\n (click)=\"toggleItem(item)\"\n ></igx-checkbox>\n <span>{{ item.displayName || item.member }}</span>\n </igx-list-item>\n </igx-list>\n</div>\n\n<igx-accordion>\n <igx-expansion-panel\n [animationSettings]=\"animationSettings\"\n [collapsed]=\"false\"\n *ngFor=\"let panel of _panels\"\n >\n <igx-expansion-panel-header\n iconPosition=\"left\"\n [disabled]=\"false\"\n igxDrop\n (enter)=\"onPanelEntry($event, panel.name)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n >\n <igx-expansion-panel-title class=\"igx-pivot-data-selector__header\">\n <h6 class=\"igx-pivot-data-selector__header-title\">\n {{ grid.resourceStrings[panel.i18n] }}\n </h6>\n <div class=\"igx-pivot-data-selector__header-extra\">\n <igx-icon>{{ panel.icon }}</igx-icon>\n <igx-chip>{{ this.grid[panel.dataKey].length }}</igx-chip>\n </div>\n </igx-expansion-panel-title>\n </igx-expansion-panel-header>\n <igx-expansion-panel-body\n igxDrop\n (enter)=\"onPanelEntry($event, panel.name)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n >\n <igx-list\n *ngIf=\"this.grid[panel.dataKey].length > 0\"\n [displayDensity]=\"displayDensity\"\n >\n <igx-list-item\n igxDrop\n [igxDrag]=\"{ gridID: grid.id, selectorChannels: panel.dragChannels }\"\n [ghostTemplate]=\"itemGhost\"\n (ghostCreate)=\"ghostCreated($event, item[panel.itemKey])\"\n (over)=\"onItemDragOver($event)\"\n (leave)=\"onItemDragLeave($event)\"\n (dragMove)=\"onItemDragMove($event)\"\n (dragEnd)=\"onItemDragEnd($event)\"\n (dropped)=\"onItemDropped($event, panel.type)\"\n *igxFor=\"\n let item of this.grid[panel.dataKey];\n scrollOrientation: 'vertical';\n let index\n \"\n [id]=\"item[panel.itemKey]\"\n >\n <div class=\"igx-pivot-data-selector__item\">\n <div\n class=\"igx-pivot-data-selector__item-start\"\n (click)=\"onItemSort($event, item, panel.type)\"\n [class.igx-pivot-data-selector__action-sort]=\"\n panel.sortable\n \"\n >\n <div class=\"igx-pivot-data-selector__item-text\">\n <span *ngIf=\"panel.type === null\">{{\n item.aggregate.key\n }}</span>\n <span *ngIf=\"panel.type === null\">(</span>\n <span>{{ item[panel.displayKey] || item[panel.itemKey] }}</span>\n <span *ngIf=\"panel.type === null\">)</span>\n </div>\n <igx-icon\n class=\"igx-pivot-data-selector__action-sort\"\n *ngIf=\"panel.sortable && item.sortDirection\"\n >\n {{\n item.sortDirection < 2\n ? \"arrow_upward\"\n : \"arrow_downward\"\n }}\n </igx-icon>\n </div>\n <div class=\"igx-pivot-data-selector__item-end\">\n <igx-icon\n class=\"igx-pivot-data-selector__action-filter\"\n *ngIf=\"panel.type !== null\"\n (pointerdown)=\"\n onFilteringIconPointerDown($event)\n \"\n (click)=\"onFilteringIconClick($event, item)\"\n >filter_list\n </igx-icon>\n <igx-icon\n class=\"igx-pivot-data-selector__action-summary\"\n *ngIf=\"panel.type === null\"\n (click)=\"onSummaryClick($event, item, dropdown)\"\n [igxDropDownItemNavigation]=\"dropdown\"\n >\n functions\n </igx-icon>\n <igx-icon\n igxDragHandle\n class=\"igx-pivot-data-selector__action-move\"\n *ngIf=\"panel.dragChannels.length > 0\"\n >drag_handle</igx-icon\n >\n </div>\n </div>\n </igx-list-item>\n </igx-list>\n <div\n class=\"igx-pivot-data-selector__empty\"\n *ngIf=\"this.grid[panel.dataKey].length === 0\"\n >\n {{ grid.resourceStrings.igx_grid_pivot_selector_panel_empty }}\n </div>\n </igx-expansion-panel-body>\n </igx-expansion-panel>\n</igx-accordion>\n\n<igx-drop-down #dropdown (selectionChanging)=\"onAggregationChange($event)\">\n <igx-drop-down-item\n *ngFor=\"let item of aggregateList\"\n [selected]=\"isSelected(item)\"\n [value]=\"item\"\n >\n {{ item.label }}\n </igx-drop-down-item>\n</igx-drop-down>\n\n<ng-template #itemGhost>\n <div\n class=\"igx-pivot-data-selector__item-ghost\"\n [style.width.px]=\"ghostWidth\"\n [class.igx-pivot-data-selector__item-ghost--no-drop]=\"!dropAllowed\"\n >\n <div class=\"igx-pivot-data-selector__item-ghost-text\">\n <igx-icon>unfold_more</igx-icon>\n <span>{{ ghostText }}</span>\n </div>\n <igx-icon>drag_handle</igx-icon>\n </div>\n</ng-template>\n" }]
|
|
@@ -382,4 +385,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
382
385
|
}], grid: [{
|
|
383
386
|
type: Input
|
|
384
387
|
}] } });
|
|
385
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZGF0YS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1kYXRhLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWRhdGEtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFFSCxTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFFUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQVMxRSxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUdwQixpQkFBaUIsRUFDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQU9uQyxPQUFPLEVBSUgsa0JBQWtCLEVBQ3JCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCekMsTUFBTSxPQUFPLDZCQUE2QjtJQWlEdEMsWUFBb0IsUUFBbUIsRUFBVSxHQUFzQjtRQUFuRCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEvQy9ELGVBQVUsR0FBRyxDQUFDLENBQUM7UUFHaEIsYUFBUSxHQUFHLHlCQUF5QixDQUFDO1FB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bEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQ3JCLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFDakMsZ0JBQWdCLENBQ25CLENBQUM7U0FDTDtJQUNMLENBQUM7OzBIQXpjUSw2QkFBNkI7OEdBQTdCLDZCQUE2QixxS0MxRDFDLHlvUEFzTEE7MkZENUhhLDZCQUE2QjtrQkFKekMsU0FBUzsrQkFDSSx5QkFBeUI7Z0lBUTVCLFFBQVE7c0JBRGQsV0FBVzt1QkFBQywrQkFBK0I7Z0JBeUdqQyxJQUFJO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VBbmltYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgUmVuZGVyZXIyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZmFkZUluLCBmYWRlT3V0IH0gZnJvbSBcIi4uLy4uL2FuaW1hdGlvbnMvZmFkZVwiO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tIFwiLi4vLi4vY29yZS9kaXNwbGF5RGVuc2l0eVwiO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRhdGFUeXBlIH0gZnJvbSBcIi4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWxcIjtcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tIFwiLi4vLi4vZGF0YS1vcGVyYXRpb25zL3NvcnRpbmctc3RyYXRlZ3lcIjtcbmltcG9ydCB7XG4gICAgSURyYWdCYXNlRXZlbnRBcmdzLFxuICAgIElEcmFnR2hvc3RCYXNlRXZlbnRBcmdzLFxuICAgIElEcm9wQmFzZUV2ZW50QXJncyxcbiAgICBJRHJvcERyb3BwZWRFdmVudEFyZ3Ncbn0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZHJhZy1kcm9wL2RyYWctZHJvcC5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IElTZWxlY3Rpb25FdmVudEFyZ3MgfSBmcm9tIFwiLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21tb25cIjtcbmltcG9ydCB7IElneERyb3BEb3duQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50XCI7XG5pbXBvcnQge1xuICAgIEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksXG4gICAgQXV0b1Bvc2l0aW9uU3RyYXRlZ3ksXG4gICAgT3ZlcmxheVNldHRpbmdzLFxuICAgIFBvc2l0aW9uU2V0dGluZ3MsXG4gICAgVmVydGljYWxBbGlnbm1lbnRcbn0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3B1YmxpY19hcGlcIjtcbmltcG9ydCB7IENvbHVtblR5cGUsIFBpdm90R3JpZFR5cGUgfSBmcm9tIFwiLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlXCI7XG5pbXBvcnQge1xuICAgIElneFBpdm90QWdncmVnYXRlLFxuICAgIElneFBpdm90RGF0ZUFnZ3JlZ2F0ZSxcbiAgICBJZ3hQaXZvdFRpbWVBZ2dyZWdhdGVcbn0gZnJvbSBcIi4vcGl2b3QtZ3JpZC1hZ2dyZWdhdGVcIjtcbmltcG9ydCB7XG4gICAgSVBpdm90QWdncmVnYXRvcixcbiAgICBJUGl2b3REaW1lbnNpb24sXG4gICAgSVBpdm90VmFsdWUsXG4gICAgUGl2b3REaW1lbnNpb25UeXBlXG59IGZyb20gXCIuL3Bpdm90LWdyaWQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBQaXZvdFV0aWwgfSBmcm9tICcuL3Bpdm90LXV0aWwnO1xuXG5pbnRlcmZhY2UgSURhdGFTZWxlY3RvclBhbmVsIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaTE4bjogc3RyaW5nO1xuICAgIHR5cGU/OiBQaXZvdERpbWVuc2lvblR5cGU7XG4gICAgZGF0YUtleTogc3RyaW5nO1xuICAgIGljb246IHN0cmluZztcbiAgICBpdGVtS2V5OiBzdHJpbmc7XG4gICAgZGlzcGxheUtleT86IHN0cmluZztcbiAgICBzb3J0YWJsZTogYm9vbGVhbjtcbiAgICBkcmFnQ2hhbm5lbHM6IHN0cmluZ1tdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvclwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vcGl2b3QtZGF0YS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbFwiLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdERhdGFTZWxlY3RvckNvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBfZ3JpZDogUGl2b3RHcmlkVHlwZTtcbiAgICBwcml2YXRlIF9kcm9wRGVsdGEgPSAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JcIilcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSBcImlneC1waXZvdC1kYXRhLXNlbGVjdG9yXCI7XG4gICAgcHVibGljIGRpbWVuc2lvbnM6IElQaXZvdERpbWVuc2lvbltdO1xuXG4gICAgcHJpdmF0ZSBfc3ViTWVudVBvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICBjbG9zZUFuaW1hdGlvbjogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICBwcml2YXRlIF9zdWJNZW51T3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogbmV3IEF1dG9Qb3NpdGlvblN0cmF0ZWd5KFxuICAgICAgICAgICAgdGhpcy5fc3ViTWVudVBvc2l0aW9uU2V0dGluZ3NcbiAgICAgICAgKSxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgfTtcbiAgICBwdWJsaWMgYW5pbWF0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlQW5pbWF0aW9uOiB1c2VBbmltYXRpb24oZmFkZU91dCwge1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IFwiMG1zXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgb3BlbkFuaW1hdGlvbjogdXNlQW5pbWF0aW9uKGZhZGVJbiwge1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IFwiMG1zXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGFnZ3JlZ2F0ZUxpc3Q6IElQaXZvdEFnZ3JlZ2F0b3JbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB2YWx1ZTogSVBpdm90VmFsdWU7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdob3N0VGV4dDogc3RyaW5nO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnaG9zdFdpZHRoOiBudW1iZXI7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGRyb3BBbGxvd2VkOiBib29sZWFuO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBkaW1zOiBJUGl2b3REaW1lbnNpb25bXTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgdmFsdWVzOiBJUGl2b3RWYWx1ZVtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBfcGFuZWxzOiBJRGF0YVNlbGVjdG9yUGFuZWxbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJGaWx0ZXJzXCIsXG4gICAgICAgICAgICBpMThuOiAnaWd4X2dyaWRfcGl2b3Rfc2VsZWN0b3JfZmlsdGVycycsXG4gICAgICAgICAgICB0eXBlOiBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyLFxuICAgICAgICAgICAgZGF0YUtleTogXCJmaWx0ZXJEaW1lbnNpb25zXCIsXG4gICAgICAgICAgICBpY29uOiBcImZpbHRlcl9saXN0XCIsXG4gICAgICAgICAgICBpdGVtS2V5OiBcIm1lbWJlck5hbWVcIixcbiAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRyYWdDaGFubmVsczogW1wiRmlsdGVyc1wiLCBcIkNvbHVtbnNcIiwgXCJSb3dzXCJdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkNvbHVtbnNcIixcbiAgICAgICAgICAgIGkxOG46ICdpZ3hfZ3JpZF9waXZvdF9zZWxlY3Rvcl9jb2x1bW5zJyxcbiAgICAgICAgICAgIHR5cGU6IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4sXG4gICAgICAgICAgICBkYXRhS2V5OiBcImNvbHVtbkRpbWVuc2lvbnNcIixcbiAgICAgICAgICAgIGljb246IFwidmlld19jb2x1bW5cIixcbiAgICAgICAgICAgIGl0ZW1LZXk6IFwibWVtYmVyTmFtZVwiLFxuICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICBkcmFnQ2hhbm5lbHM6IFtcIkZpbHRlcnNcIiwgXCJDb2x1bW5zXCIsIFwiUm93c1wiXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJSb3dzXCIsXG4gICAgICAgICAgICBpMThuOiAnaWd4X2dyaWRfcGl2b3Rfc2VsZWN0b3Jfcm93cycsXG4gICAgICAgICAgICB0eXBlOiBQaXZvdERpbWVuc2lvblR5cGUuUm93LFxuICAgICAgICAgICAgZGF0YUtleTogXCJyb3dEaW1lbnNpb25zXCIsXG4gICAgICAgICAgICBpY29uOiBcInRhYmxlX3Jvd3NcIixcbiAgICAgICAgICAgIGl0ZW1LZXk6IFwibWVtYmVyTmFtZVwiLFxuICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICBkcmFnQ2hhbm5lbHM6IFtcIkZpbHRlcnNcIiwgXCJDb2x1bW5zXCIsIFwiUm93c1wiXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJWYWx1ZXNcIixcbiAgICAgICAgICAgIGkxOG46ICdpZ3hfZ3JpZF9waXZvdF9zZWxlY3Rvcl92YWx1ZXMnLFxuICAgICAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgICAgIGRhdGFLZXk6IFwidmFsdWVzXCIsXG4gICAgICAgICAgICBpY29uOiBcImZ1bmN0aW9uc1wiLFxuICAgICAgICAgICAgaXRlbUtleTogXCJtZW1iZXJcIixcbiAgICAgICAgICAgIGRpc3BsYXlLZXk6ICdkaXNwbGF5TmFtZScsXG4gICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBkcmFnQ2hhbm5lbHM6IFtcIlZhbHVlc1wiXSxcbiAgICAgICAgfSxcbiAgICBdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlEZW5zaXR5KCk6IERpc3BsYXlEZW5zaXR5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZD8uZGlzcGxheURlbnNpdHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgZ3JpZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZ3JpZCh2YWx1ZTogUGl2b3RHcmlkVHlwZSkge1xuICAgICAgICB0aGlzLl9ncmlkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZGltcyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2dyaWQucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnMsXG4gICAgICAgICAgICAuLi50aGlzLl9ncmlkLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzLFxuICAgICAgICAgICAgLi4udGhpcy5fZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycyxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLl9ncmlkLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ3JpZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGdyaWQoKTogUGl2b3RHcmlkVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtU29ydChcbiAgICAgICAgXzogRXZlbnQsXG4gICAgICAgIGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLFxuICAgICAgICBkaW1lbnNpb25UeXBlOiBQaXZvdERpbWVuc2lvblR5cGVcbiAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuX3BhbmVscy5maW5kKFxuICAgICAgICAgICAgICAgIChwYW5lbDogSURhdGFTZWxlY3RvclBhbmVsKSA9PiBwYW5lbC50eXBlID09PSBkaW1lbnNpb25UeXBlXG4gICAgICAgICAgICApLnNvcnRhYmxlXG4gICAgICAgIClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoIWRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBkaW1lbnNpb24uc29ydERpcmVjdGlvbiA9IFNvcnRpbmdEaXJlY3Rpb24uTm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uID1cbiAgICAgICAgICAgIGRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uICsgMSA+IFNvcnRpbmdEaXJlY3Rpb24uRGVzY1xuICAgICAgICAgICAgICAgID8gU29ydGluZ0RpcmVjdGlvbi5Ob25lXG4gICAgICAgICAgICAgICAgOiBkaW1lbnNpb24uc29ydERpcmVjdGlvbiArIDE7XG4gICAgICAgIC8vIGFwcGx5IHNhbWUgc29ydCBkaXJlY3Rpb24gdG8gY2hpbGRyZW4uXG4gICAgICAgIGxldCBkaW0gPSBkaW1lbnNpb247XG5cbiAgICAgICAgd2hpbGUgKGRpbS5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICBkaW0uY2hpbGRMZXZlbC5zb3J0RGlyZWN0aW9uID0gZGltZW5zaW9uLnNvcnREaXJlY3Rpb247XG4gICAgICAgICAgICBkaW0gPSBkaW0uY2hpbGRMZXZlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmdyaWQuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIGlmIChkaW1lbnNpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uRmlsdGVyaW5nSWNvblBvaW50ZXJEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZpbHRlcmluZ0ljb25DbGljayhldmVudDogTW91c2VFdmVudCwgZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IGRpbSA9IGRpbWVuc2lvbjtcbiAgICAgICAgbGV0IGNvbDogQ29sdW1uVHlwZTtcblxuICAgICAgICB3aGlsZSAoZGltKSB7XG4gICAgICAgICAgICBjb2wgPSB0aGlzLmdyaWQuZGltZW5zaW9uRGF0YUNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAoeCkgPT4geC5maWVsZCA9PT0gZGltLm1lbWJlck5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY29sKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpbSA9IGRpbS5jaGlsZExldmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UudG9nZ2xlRmlsdGVyRHJvcGRvd24oZXZlbnQudGFyZ2V0LCBjb2wpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9uU3RhdGUoZGltZW5zaW9uVHlwZTogUGl2b3REaW1lbnNpb25UeXBlKSB7XG4gICAgICAgIHN3aXRjaCAoZGltZW5zaW9uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuUm93OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93RGltZW5zaW9ucztcbiAgICAgICAgICAgIGNhc2UgUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNvbHVtbkRpbWVuc2lvbnM7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5maWx0ZXJEaW1lbnNpb25zO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbW92ZVZhbHVlSXRlbShpdGVtSWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGlvbiA9IHRoaXMuZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzO1xuICAgICAgICBjb25zdCB2YWx1ZUluZGV4ID1cbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uLmZpbmRJbmRleCgoeCkgPT4geC5tZW1iZXIgPT09IGl0ZW1JZCkgIT09IC0xXG4gICAgICAgICAgICAgICAgPyBhZ2dyZWdhdGlvbj8uZmluZEluZGV4KCh4KSA9PiB4Lm1lbWJlciA9PT0gaXRlbUlkKVxuICAgICAgICAgICAgICAgIDogYWdncmVnYXRpb24ubGVuZ3RoO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZUluZGV4ID1cbiAgICAgICAgICAgIHZhbHVlSW5kZXggKyB0aGlzLl9kcm9wRGVsdGEgPCAwID8gMCA6IHZhbHVlSW5kZXggKyB0aGlzLl9kcm9wRGVsdGE7XG5cbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25JdGVtID0gYWdncmVnYXRpb24uZmluZChcbiAgICAgICAgICAgICh4KSA9PiB4Lm1lbWJlciA9PT0gaXRlbUlkIHx8IHguZGlzcGxheU5hbWUgPT09IGl0ZW1JZFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChhZ2dyZWdhdGlvbkl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5tb3ZlVmFsdWUoYWdncmVnYXRpb25JdGVtLCBuZXdWYWx1ZUluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC52YWx1ZXNDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkl0ZW1Ecm9wcGVkKFxuICAgICAgICBldmVudDogSURyb3BEcm9wcGVkRXZlbnRBcmdzLFxuICAgICAgICBkaW1lbnNpb25UeXBlOiBQaXZvdERpbWVuc2lvblR5cGVcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLmRyb3BBbGxvd2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLmdyaWQuZ2V0RGltZW5zaW9uc0J5VHlwZShkaW1lbnNpb25UeXBlKTtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uU3RhdGUgPSB0aGlzLmdldERpbWVuc2lvblN0YXRlKGRpbWVuc2lvblR5cGUpO1xuICAgICAgICBjb25zdCBpdGVtSWQgPSBldmVudC5kcmFnLmVsZW1lbnQubmF0aXZlRWxlbWVudC5pZDtcbiAgICAgICAgY29uc3QgdGFyZ2V0SWQgPSBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbkl0ZW0gPSBkaW1lbnNpb24/LmZpbmQoKHgpID0+IHgubWVtYmVyTmFtZSA9PT0gaXRlbUlkKTtcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID1cbiAgICAgICAgICAgIGRpbWVuc2lvbj8uZmluZEluZGV4KCh4KSA9PiB4Py5tZW1iZXJOYW1lID09PSBpdGVtSWQpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gZGltZW5zaW9uPy5maW5kSW5kZXgoKHgpID0+IHgubWVtYmVyTmFtZSA9PT0gaXRlbUlkKVxuICAgICAgICAgICAgICAgIDogZGltZW5zaW9uPy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLnJvd3NcbiAgICAgICAgICAgIC5jb25jYXQodGhpcy5ncmlkLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zKVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLmZpbHRlcnMpXG4gICAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB4ICYmIHgubWVtYmVyTmFtZSA9PT0gaXRlbUlkKTtcblxuICAgICAgICBjb25zdCByZW9yZGVyID1cbiAgICAgICAgICAgIGRpbWVuc2lvblN0YXRlPy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0ubWVtYmVyTmFtZSA9PT0gaXRlbUlkKSAhPT1cbiAgICAgICAgICAgIC0xO1xuXG4gICAgICAgIGxldCB0YXJnZXRJbmRleCA9XG4gICAgICAgICAgICB0YXJnZXRJZCAhPT0gXCJcIlxuICAgICAgICAgICAgICAgID8gZGltZW5zaW9uPy5maW5kSW5kZXgoKHgpID0+IHgubWVtYmVyTmFtZSA9PT0gdGFyZ2V0SWQpXG4gICAgICAgICAgICAgICAgOiBkaW1lbnNpb24/Lmxlbmd0aDtcblxuICAgICAgICBpZiAoIWRpbWVuc2lvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVmFsdWVJdGVtKGl0ZW1JZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVvcmRlcikge1xuICAgICAgICAgICAgdGFyZ2V0SW5kZXggPVxuICAgICAgICAgICAgICAgIGl0ZW1JbmRleCArIHRoaXMuX2Ryb3BEZWx0YSA8IDBcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogaXRlbUluZGV4ICsgdGhpcy5fZHJvcERlbHRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpbWVuc2lvbkl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5tb3ZlRGltZW5zaW9uKGRpbWVuc2lvbkl0ZW0sIGRpbWVuc2lvblR5cGUsIHRhcmdldEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RpbSA9IGRpbWVuc2lvbnMuZmluZCgoeCkgPT4geC5tZW1iZXJOYW1lID09PSBpdGVtSWQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm1vdmVEaW1lbnNpb24obmV3RGltLCBkaW1lbnNpb25UeXBlLCB0YXJnZXRJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZGltZW5zaW9uc0NoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IGRpbWVuc2lvbixcbiAgICAgICAgICAgIGRpbWVuc2lvbkNvbGxlY3Rpb25UeXBlOiBkaW1lbnNpb25UeXBlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZURyb3BEb3duKFxuICAgICAgICB2YWx1ZTogSVBpdm90VmFsdWUsXG4gICAgICAgIGRyb3Bkb3duOiBJZ3hEcm9wRG93bkNvbXBvbmVudFxuICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGRyb3Bkb3duLndpZHRoID0gXCIyMDBweFwiO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUxpc3QgPSBQaXZvdFV0aWwuZ2V0QWdncmVnYXRlTGlzdCh2YWx1ZSwgdGhpcy5ncmlkKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBkcm9wZG93bi5vcGVuKHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdW1tYXJ5Q2xpY2soXG4gICAgICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgICAgICB2YWx1ZTogSVBpdm90VmFsdWUsXG4gICAgICAgIGRyb3Bkb3duOiBJZ3hEcm9wRG93bkNvbXBvbmVudFxuICAgICkge1xuICAgICAgICB0aGlzLl9zdWJNZW51T3ZlcmxheVNldHRpbmdzLnRhcmdldCA9XG4gICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGlmIChkcm9wZG93bi5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRHJvcERvd24odmFsdWUsIGRyb3Bkb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNsb3NlIGZvciBwcmV2aW91cyBjaGlwXG4gICAgICAgICAgICBkcm9wZG93bi5jbG9zZSgpO1xuICAgICAgICAgICAgZHJvcGRvd24uY2xvc2VkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURyb3BEb3duKHZhbHVlLCBkcm9wZG93bik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25BZ2dyZWdhdGlvbkNoYW5nZShldmVudDogSVNlbGVjdGlvbkV2ZW50QXJncykge1xuICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZChldmVudC5uZXdTZWxlY3Rpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLmFnZ3JlZ2F0ZSA9IGV2ZW50Lm5ld1NlbGVjdGlvbi52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5waXBlVHJpZ2dlcisrO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTZWxlY3RlZCh2YWw6IElQaXZvdEFnZ3JlZ2F0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuYWdncmVnYXRlLmtleSA9PT0gdmFsLmtleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdob3N0Q3JlYXRlZChldmVudDogSURyYWdHaG9zdEJhc2VFdmVudEFyZ3MsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aDogaXRlbVdpZHRoIH0gPVxuICAgICAgICAgICAgZXZlbnQub3duZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLmdob3N0V2lkdGggPSBpdGVtV2lkdGg7XG4gICAgICAgIHRoaXMuZ2hvc3RUZXh0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBcInBvc2l0aW9uXCIsXG4gICAgICAgICAgICBcImFic29sdXRlXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIFwidmlzaWJpbGl0eVwiLFxuICAgICAgICAgICAgXCJoaWRkZW5cIlxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlSXRlbShpdGVtOiBJUGl2b3REaW1lbnNpb24gfCBJUGl2b3RWYWx1ZSkge1xuICAgICAgICBpZiAoaXRlbSBhcyBJUGl2b3RWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRvZ2dsZVZhbHVlKGl0ZW0gYXMgSVBpdm90VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0gYXMgSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQudG9nZ2xlRGltZW5zaW9uKGl0ZW0gYXMgSVBpdm90RGltZW5zaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25QYW5lbEVudHJ5KGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MsIHBhbmVsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kcm9wQWxsb3dlZCA9IGV2ZW50LmRyYWdEYXRhLmdyaWRJRCA9PT0gdGhpcy5ncmlkLmlkICYmIGV2ZW50LmRyYWdEYXRhLnNlbGVjdG9yQ2hhbm5lbHM/LnNvbWUoXG4gICAgICAgICAgICAoY2hhbm5lbDogc3RyaW5nKSA9PiBjaGFubmVsID09PSBwYW5lbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtRHJhZ01vdmUoZXZlbnQ6IElEcmFnQmFzZUV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBjbGllbnRSZWN0ID1cbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5fZHJvcERlbHRhID0gTWF0aC5yb3VuZChcbiAgICAgICAgICAgIChldmVudC5wYWdlWSAtIGV2ZW50LnN0YXJ0WSkgLyBjbGllbnRSZWN0LmhlaWdodFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtRHJhZ0VuZChldmVudDogSURyYWdCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBcInBvc2l0aW9uXCIsXG4gICAgICAgICAgICBcInN0YXRpY1wiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBcInZpc2liaWxpdHlcIixcbiAgICAgICAgICAgIFwidmlzaWJsZVwiXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkl0ZW1EcmFnT3ZlcihldmVudDogSURyb3BCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3BBbGxvd2VkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICBcImlneC1kcmFnLS1wdXNoXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uSXRlbURyYWdMZWF2ZShldmVudDogSURyb3BCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3BBbGxvd2VkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICBcImlneC1kcmFnLS1wdXNoXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2ZpbHRlclwiPlxuICAgIDxpZ3gtaW5wdXQtZ3JvdXAgdHlwZT1cImJveFwiIFtkaXNwbGF5RGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiPlxuICAgICAgICA8aWd4LWljb24gaWd4UHJlZml4PnNlYXJjaDwvaWd4LWljb24+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICBpZ3hJbnB1dFxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIC8+XG4gICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgPGlneC1saXN0IFtkaXNwbGF5RGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiPlxuICAgICAgICA8aWd4LWxpc3QtaXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgZGltc1xuICAgICAgICAgICAgICAgICAgICB8IGZpbHRlclBpdm90SXRlbXM6IGlucHV0LnZhbHVlOmdyaWQucGlwZVRyaWdnZXJcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbaWRdPVwiaXRlbS5tZW1iZXJOYW1lXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlneC1jaGVja2JveFxuICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsbGVkYnldPVwiaXRlbS5tZW1iZXJOYW1lXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtLmVuYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVJdGVtKGl0ZW0pXCJcbiAgICAgICAgICAgID48L2lneC1jaGVja2JveD5cbiAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0ubWVtYmVyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9pZ3gtbGlzdC1pdGVtPlxuICAgICAgICA8aWd4LWxpc3QtaXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgIHwgZmlsdGVyUGl2b3RJdGVtczogaW5wdXQudmFsdWU6Z3JpZC5waXBlVHJpZ2dlclxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtpZF09XCJpdGVtLm1lbWJlclwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbGxlZGJ5XT1cIml0ZW0ubWVtYmVyXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtLmVuYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVJdGVtKGl0ZW0pXCJcbiAgICAgICAgICAgID48L2lneC1jaGVja2JveD5cbiAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0uZGlzcGxheU5hbWUgfHwgaXRlbS5tZW1iZXIgfX08L3NwYW4+XG4gICAgICAgIDwvaWd4LWxpc3QtaXRlbT5cbiAgICA8L2lneC1saXN0PlxuPC9kaXY+XG5cbjxpZ3gtYWNjb3JkaW9uPlxuICAgIDxpZ3gtZXhwYW5zaW9uLXBhbmVsXG4gICAgICAgIFthbmltYXRpb25TZXR0aW5nc109XCJhbmltYXRpb25TZXR0aW5nc1wiXG4gICAgICAgIFtjb2xsYXBzZWRdPVwiZmFsc2VcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgX3BhbmVsc1wiXG4gICAgPlxuICAgICAgICA8aWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJcbiAgICAgICAgICAgIGljb25Qb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgIGlneERyb3BcbiAgICAgICAgICAgIChlbnRlcik9XCJvblBhbmVsRW50cnkoJGV2ZW50LCBwYW5lbC5uYW1lKVwiXG4gICAgICAgICAgICAoZHJvcHBlZCk9XCJvbkl0ZW1Ecm9wcGVkKCRldmVudCwgcGFuZWwudHlwZSlcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWV4cGFuc2lvbi1wYW5lbC10aXRsZSBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9faGVhZGVyLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdyaWQucmVzb3VyY2VTdHJpbmdzW3BhbmVsLmkxOG5dIH19XG4gICAgICAgICAgICAgICAgPC9oNj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2hlYWRlci1leHRyYVwiPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24+e3sgcGFuZWwuaWNvbiB9fTwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcD57eyB0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV0ubGVuZ3RoIH19PC9pZ3gtY2hpcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaWd4LWV4cGFuc2lvbi1wYW5lbC10aXRsZT5cbiAgICAgICAgPC9pZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPGlneC1leHBhbnNpb24tcGFuZWwtYm9keVxuICAgICAgICAgICAgaWd4RHJvcFxuICAgICAgICAgICAgKGVudGVyKT1cIm9uUGFuZWxFbnRyeSgkZXZlbnQsIHBhbmVsLm5hbWUpXCJcbiAgICAgICAgICAgIChkcm9wcGVkKT1cIm9uSXRlbURyb3BwZWQoJGV2ZW50LCBwYW5lbC50eXBlKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtbGlzdFxuICAgICAgICAgICAgICAgICpuZ0lmPVwidGhpcy5ncmlkW3BhbmVsLmRhdGFLZXldLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlneC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgaWd4RHJvcFxuICAgICAgICAgICAgICAgICAgICBbaWd4RHJhZ109XCJ7IGdyaWRJRDogZ3JpZC5pZCwgc2VsZWN0b3JDaGFubmVsczogcGFuZWwuZHJhZ0NoYW5uZWxzIH1cIlxuICAgICAgICAgICAgICAgICAgICBbZ2hvc3RUZW1wbGF0ZV09XCJpdGVtR2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICAoZ2hvc3RDcmVhdGUpPVwiZ2hvc3RDcmVhdGVkKCRldmVudCwgaXRlbVtwYW5lbC5pdGVtS2V5XSlcIlxuICAgICAgICAgICAgICAgICAgICAob3Zlcik9XCJvbkl0ZW1EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGxlYXZlKT1cIm9uSXRlbURyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRyYWdNb3ZlKT1cIm9uSXRlbURyYWdNb3ZlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZHJhZ0VuZCk9XCJvbkl0ZW1EcmFnRW5kKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZHJvcHBlZCk9XCJvbkl0ZW1Ecm9wcGVkKCRldmVudCwgcGFuZWwudHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAqaWd4Rm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiB0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxPcmllbnRhdGlvbjogJ3ZlcnRpY2FsJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleFxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaXRlbVtwYW5lbC5pdGVtS2V5XVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19pdGVtLXN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtU29ydCgkZXZlbnQsIGl0ZW0sIHBhbmVsLnR5cGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2FjdGlvbi1zb3J0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5zb3J0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19pdGVtLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYW5lbC50eXBlID09PSBudWxsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uYWdncmVnYXRlLmtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYW5lbC50eXBlID09PSBudWxsXCI+KDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbVtwYW5lbC5kaXNwbGF5S2V5XSB8fCBpdGVtW3BhbmVsLml0ZW1LZXldIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBhbmVsLnR5cGUgPT09IG51bGxcIj4pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19hY3Rpb24tc29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGFuZWwuc29ydGFibGUgJiYgaXRlbS5zb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNvcnREaXJlY3Rpb24gPCAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImFycm93X3Vwd2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImFycm93X2Rvd253YXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW0tZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2FjdGlvbi1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBhbmVsLnR5cGUgIT09IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZpbHRlcmluZ0ljb25Qb2ludGVyRG93bigkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZpbHRlcmluZ0ljb25DbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPmZpbHRlcl9saXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9fYWN0aW9uLXN1bW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBhbmVsLnR5cGUgPT09IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdW1tYXJ5Q2xpY2soJGV2ZW50LCBpdGVtLCBkcm9wZG93bilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbl09XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ3hEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2FjdGlvbi1tb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYW5lbC5kcmFnQ2hhbm5lbHMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5kcmFnX2hhbmRsZTwvaWd4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9pZ3gtbGlzdC1pdGVtPlxuICAgICAgICAgICAgPC9pZ3gtbGlzdD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19lbXB0eVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV0ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waXZvdF9zZWxlY3Rvcl9wYW5lbF9lbXB0eSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaWd4LWV4cGFuc2lvbi1wYW5lbC1ib2R5PlxuICAgIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbjwvaWd4LWFjY29yZGlvbj5cblxuPGlneC1kcm9wLWRvd24gI2Ryb3Bkb3duIChzZWxlY3Rpb25DaGFuZ2luZyk9XCJvbkFnZ3JlZ2F0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICA8aWd4LWRyb3AtZG93bi1pdGVtXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFnZ3JlZ2F0ZUxpc3RcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChpdGVtKVwiXG4gICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICA+XG4gICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICA8L2lneC1kcm9wLWRvd24taXRlbT5cbjwvaWd4LWRyb3AtZG93bj5cblxuPG5nLXRlbXBsYXRlICNpdGVtR2hvc3Q+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19pdGVtLWdob3N0XCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdob3N0V2lkdGhcIlxuICAgICAgICBbY2xhc3MuaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW0tZ2hvc3QtLW5vLWRyb3BdPVwiIWRyb3BBbGxvd2VkXCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9faXRlbS1naG9zdC10ZXh0XCI+XG4gICAgICAgICAgICA8aWd4LWljb24+dW5mb2xkX21vcmU8L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgZ2hvc3RUZXh0IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlneC1pY29uPmRyYWdfaGFuZGxlPC9pZ3gtaWNvbj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
388
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3QtZGF0YS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1kYXRhLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LWRhdGEtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFFSCxTQUFTLEVBQ1QsV0FBVyxFQUNYLEtBQUssRUFFUixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUd4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQVMxRSxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUdwQixpQkFBaUIsRUFDcEIsTUFBTSwyQkFBMkIsQ0FBQztBQU9uQyxPQUFPLEVBSUgsa0JBQWtCLEVBQ3JCLE1BQU0sd0JBQXdCLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCekMsTUFBTSxPQUFPLDZCQUE2QjtJQWlEdEMsWUFBb0IsUUFBbUIsRUFBVSxHQUFzQjtRQUFuRCxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEvQy9ELGVBQVUsR0FBRyxDQUFDLENBQUM7UUFHaEIsYUFBUSxHQUFHLHlCQUF5QixDQUFD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WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQ3JCLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFDakMsZ0JBQWdCLENBQ25CLENBQUM7U0FDTDtJQUNMLENBQUM7OzBIQXpjUSw2QkFBNkI7OEdBQTdCLDZCQUE2QixxS0MxRDFDLHlvUEFzTEE7MkZENUhhLDZCQUE2QjtrQkFKekMsU0FBUzsrQkFDSSx5QkFBeUI7Z0lBUTVCLFFBQVE7c0JBRGQsV0FBVzt1QkFBQywrQkFBK0I7Z0JBeUdqQyxJQUFJO3NCQURkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VBbmltYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgUmVuZGVyZXIyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgZmFkZUluLCBmYWRlT3V0IH0gZnJvbSBcIi4uLy4uL2FuaW1hdGlvbnMvZmFkZVwiO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHkgfSBmcm9tIFwiLi4vLi4vY29yZS9kaXNwbGF5RGVuc2l0eVwiO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRhdGFUeXBlIH0gZnJvbSBcIi4uLy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWxcIjtcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tIFwiLi4vLi4vZGF0YS1vcGVyYXRpb25zL3NvcnRpbmctc3RyYXRlZ3lcIjtcbmltcG9ydCB7XG4gICAgSURyYWdCYXNlRXZlbnRBcmdzLFxuICAgIElEcmFnR2hvc3RCYXNlRXZlbnRBcmdzLFxuICAgIElEcm9wQmFzZUV2ZW50QXJncyxcbiAgICBJRHJvcERyb3BwZWRFdmVudEFyZ3Ncbn0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZHJhZy1kcm9wL2RyYWctZHJvcC5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IElTZWxlY3Rpb25FdmVudEFyZ3MgfSBmcm9tIFwiLi4vLi4vZHJvcC1kb3duL2Ryb3AtZG93bi5jb21tb25cIjtcbmltcG9ydCB7IElneERyb3BEb3duQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50XCI7XG5pbXBvcnQge1xuICAgIEFic29sdXRlU2Nyb2xsU3RyYXRlZ3ksXG4gICAgQXV0b1Bvc2l0aW9uU3RyYXRlZ3ksXG4gICAgT3ZlcmxheVNldHRpbmdzLFxuICAgIFBvc2l0aW9uU2V0dGluZ3MsXG4gICAgVmVydGljYWxBbGlnbm1lbnRcbn0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3B1YmxpY19hcGlcIjtcbmltcG9ydCB7IENvbHVtblR5cGUsIFBpdm90R3JpZFR5cGUgfSBmcm9tIFwiLi4vY29tbW9uL2dyaWQuaW50ZXJmYWNlXCI7XG5pbXBvcnQge1xuICAgIElneFBpdm90QWdncmVnYXRlLFxuICAgIElneFBpdm90RGF0ZUFnZ3JlZ2F0ZSxcbiAgICBJZ3hQaXZvdFRpbWVBZ2dyZWdhdGVcbn0gZnJvbSBcIi4vcGl2b3QtZ3JpZC1hZ2dyZWdhdGVcIjtcbmltcG9ydCB7XG4gICAgSVBpdm90QWdncmVnYXRvcixcbiAgICBJUGl2b3REaW1lbnNpb24sXG4gICAgSVBpdm90VmFsdWUsXG4gICAgUGl2b3REaW1lbnNpb25UeXBlXG59IGZyb20gXCIuL3Bpdm90LWdyaWQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBQaXZvdFV0aWwgfSBmcm9tICcuL3Bpdm90LXV0aWwnO1xuXG5pbnRlcmZhY2UgSURhdGFTZWxlY3RvclBhbmVsIHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgaTE4bjogc3RyaW5nO1xuICAgIHR5cGU/OiBQaXZvdERpbWVuc2lvblR5cGU7XG4gICAgZGF0YUtleTogc3RyaW5nO1xuICAgIGljb246IHN0cmluZztcbiAgICBpdGVtS2V5OiBzdHJpbmc7XG4gICAgZGlzcGxheUtleT86IHN0cmluZztcbiAgICBzb3J0YWJsZTogYm9vbGVhbjtcbiAgICBkcmFnQ2hhbm5lbHM6IHN0cmluZ1tdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3RvclwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vcGl2b3QtZGF0YS1zZWxlY3Rvci5jb21wb25lbnQuaHRtbFwiLFxufSlcbmV4cG9ydCBjbGFzcyBJZ3hQaXZvdERhdGFTZWxlY3RvckNvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBfZ3JpZDogUGl2b3RHcmlkVHlwZTtcbiAgICBwcml2YXRlIF9kcm9wRGVsdGEgPSAwO1xuXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JcIilcbiAgICBwdWJsaWMgY3NzQ2xhc3MgPSBcImlneC1waXZvdC1kYXRhLXNlbGVjdG9yXCI7XG4gICAgcHVibGljIGRpbWVuc2lvbnM6IElQaXZvdERpbWVuc2lvbltdO1xuXG4gICAgcHJpdmF0ZSBfc3ViTWVudVBvc2l0aW9uU2V0dGluZ3M6IFBvc2l0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIHZlcnRpY2FsU3RhcnRQb2ludDogVmVydGljYWxBbGlnbm1lbnQuQm90dG9tLFxuICAgICAgICBjbG9zZUFuaW1hdGlvbjogdW5kZWZpbmVkLFxuICAgIH07XG5cbiAgICBwcml2YXRlIF9zdWJNZW51T3ZlcmxheVNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlT25PdXRzaWRlQ2xpY2s6IHRydWUsXG4gICAgICAgIG1vZGFsOiBmYWxzZSxcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogbmV3IEF1dG9Qb3NpdGlvblN0cmF0ZWd5KFxuICAgICAgICAgICAgdGhpcy5fc3ViTWVudVBvc2l0aW9uU2V0dGluZ3NcbiAgICAgICAgKSxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgfTtcbiAgICBwdWJsaWMgYW5pbWF0aW9uU2V0dGluZ3MgPSB7XG4gICAgICAgIGNsb3NlQW5pbWF0aW9uOiB1c2VBbmltYXRpb24oZmFkZU91dCwge1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IFwiMG1zXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgb3BlbkFuaW1hdGlvbjogdXNlQW5pbWF0aW9uKGZhZGVJbiwge1xuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb246IFwiMG1zXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGFnZ3JlZ2F0ZUxpc3Q6IElQaXZvdEFnZ3JlZ2F0b3JbXSA9IFtdO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB2YWx1ZTogSVBpdm90VmFsdWU7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdob3N0VGV4dDogc3RyaW5nO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnaG9zdFdpZHRoOiBudW1iZXI7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGRyb3BBbGxvd2VkOiBib29sZWFuO1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBkaW1zOiBJUGl2b3REaW1lbnNpb25bXTtcbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgdmFsdWVzOiBJUGl2b3RWYWx1ZVtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBfcGFuZWxzOiBJRGF0YVNlbGVjdG9yUGFuZWxbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJGaWx0ZXJzXCIsXG4gICAgICAgICAgICBpMThuOiAnaWd4X2dyaWRfcGl2b3Rfc2VsZWN0b3JfZmlsdGVycycsXG4gICAgICAgICAgICB0eXBlOiBQaXZvdERpbWVuc2lvblR5cGUuRmlsdGVyLFxuICAgICAgICAgICAgZGF0YUtleTogXCJmaWx0ZXJEaW1lbnNpb25zXCIsXG4gICAgICAgICAgICBpY29uOiBcImZpbHRlcl9saXN0XCIsXG4gICAgICAgICAgICBpdGVtS2V5OiBcIm1lbWJlck5hbWVcIixcbiAgICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGRyYWdDaGFubmVsczogW1wiRmlsdGVyc1wiLCBcIkNvbHVtbnNcIiwgXCJSb3dzXCJdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkNvbHVtbnNcIixcbiAgICAgICAgICAgIGkxOG46ICdpZ3hfZ3JpZF9waXZvdF9zZWxlY3Rvcl9jb2x1bW5zJyxcbiAgICAgICAgICAgIHR5cGU6IFBpdm90RGltZW5zaW9uVHlwZS5Db2x1bW4sXG4gICAgICAgICAgICBkYXRhS2V5OiBcImNvbHVtbkRpbWVuc2lvbnNcIixcbiAgICAgICAgICAgIGljb246IFwidmlld19jb2x1bW5cIixcbiAgICAgICAgICAgIGl0ZW1LZXk6IFwibWVtYmVyTmFtZVwiLFxuICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICBkcmFnQ2hhbm5lbHM6IFtcIkZpbHRlcnNcIiwgXCJDb2x1bW5zXCIsIFwiUm93c1wiXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJSb3dzXCIsXG4gICAgICAgICAgICBpMThuOiAnaWd4X2dyaWRfcGl2b3Rfc2VsZWN0b3Jfcm93cycsXG4gICAgICAgICAgICB0eXBlOiBQaXZvdERpbWVuc2lvblR5cGUuUm93LFxuICAgICAgICAgICAgZGF0YUtleTogXCJyb3dEaW1lbnNpb25zXCIsXG4gICAgICAgICAgICBpY29uOiBcInRhYmxlX3Jvd3NcIixcbiAgICAgICAgICAgIGl0ZW1LZXk6IFwibWVtYmVyTmFtZVwiLFxuICAgICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgICAgICBkcmFnQ2hhbm5lbHM6IFtcIkZpbHRlcnNcIiwgXCJDb2x1bW5zXCIsIFwiUm93c1wiXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJWYWx1ZXNcIixcbiAgICAgICAgICAgIGkxOG46ICdpZ3hfZ3JpZF9waXZvdF9zZWxlY3Rvcl92YWx1ZXMnLFxuICAgICAgICAgICAgdHlwZTogbnVsbCxcbiAgICAgICAgICAgIGRhdGFLZXk6IFwidmFsdWVzXCIsXG4gICAgICAgICAgICBpY29uOiBcImZ1bmN0aW9uc1wiLFxuICAgICAgICAgICAgaXRlbUtleTogXCJtZW1iZXJcIixcbiAgICAgICAgICAgIGRpc3BsYXlLZXk6ICdkaXNwbGF5TmFtZScsXG4gICAgICAgICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICBkcmFnQ2hhbm5lbHM6IFtcIlZhbHVlc1wiXSxcbiAgICAgICAgfSxcbiAgICBdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlEZW5zaXR5KCk6IERpc3BsYXlEZW5zaXR5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZD8uZGlzcGxheURlbnNpdHk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0cyB0aGUgZ3JpZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZ3JpZCh2YWx1ZTogUGl2b3RHcmlkVHlwZSkge1xuICAgICAgICB0aGlzLl9ncmlkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZGltcyA9IFtcbiAgICAgICAgICAgIC4uLnRoaXMuX2dyaWQucGl2b3RDb25maWd1cmF0aW9uLmNvbHVtbnMsXG4gICAgICAgICAgICAuLi50aGlzLl9ncmlkLnBpdm90Q29uZmlndXJhdGlvbi5yb3dzLFxuICAgICAgICAgICAgLi4udGhpcy5fZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24uZmlsdGVycyxcbiAgICAgICAgXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB0aGlzLl9ncmlkLnBpdm90Q29uZmlndXJhdGlvbi52YWx1ZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZ3JpZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGdyaWQoKTogUGl2b3RHcmlkVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtU29ydChcbiAgICAgICAgXzogRXZlbnQsXG4gICAgICAgIGRpbWVuc2lvbjogSVBpdm90RGltZW5zaW9uLFxuICAgICAgICBkaW1lbnNpb25UeXBlOiBQaXZvdERpbWVuc2lvblR5cGVcbiAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMuX3BhbmVscy5maW5kKFxuICAgICAgICAgICAgICAgIChwYW5lbDogSURhdGFTZWxlY3RvclBhbmVsKSA9PiBwYW5lbC50eXBlID09PSBkaW1lbnNpb25UeXBlXG4gICAgICAgICAgICApLnNvcnRhYmxlXG4gICAgICAgIClcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBpZiAoIWRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBkaW1lbnNpb24uc29ydERpcmVjdGlvbiA9IFNvcnRpbmdEaXJlY3Rpb24uTm9uZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uID1cbiAgICAgICAgICAgIGRpbWVuc2lvbi5zb3J0RGlyZWN0aW9uICsgMSA+IFNvcnRpbmdEaXJlY3Rpb24uRGVzY1xuICAgICAgICAgICAgICAgID8gU29ydGluZ0RpcmVjdGlvbi5Ob25lXG4gICAgICAgICAgICAgICAgOiBkaW1lbnNpb24uc29ydERpcmVjdGlvbiArIDE7XG4gICAgICAgIC8vIGFwcGx5IHNhbWUgc29ydCBkaXJlY3Rpb24gdG8gY2hpbGRyZW4uXG4gICAgICAgIGxldCBkaW0gPSBkaW1lbnNpb247XG5cbiAgICAgICAgd2hpbGUgKGRpbS5jaGlsZExldmVsKSB7XG4gICAgICAgICAgICBkaW0uY2hpbGRMZXZlbC5zb3J0RGlyZWN0aW9uID0gZGltZW5zaW9uLnNvcnREaXJlY3Rpb247XG4gICAgICAgICAgICBkaW0gPSBkaW0uY2hpbGRMZXZlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3JpZC5waXBlVHJpZ2dlcisrO1xuICAgICAgICB0aGlzLmdyaWQuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIGlmIChkaW1lbnNpb25UeXBlID09PSBQaXZvdERpbWVuc2lvblR5cGUuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2V0dXBDb2x1bW5zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uRmlsdGVyaW5nSWNvblBvaW50ZXJEb3duKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZpbHRlcmluZ0ljb25DbGljayhldmVudDogTW91c2VFdmVudCwgZGltZW5zaW9uOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgbGV0IGRpbSA9IGRpbWVuc2lvbjtcbiAgICAgICAgbGV0IGNvbDogQ29sdW1uVHlwZTtcblxuICAgICAgICB3aGlsZSAoZGltKSB7XG4gICAgICAgICAgICBjb2wgPSB0aGlzLmdyaWQuZGltZW5zaW9uRGF0YUNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgICAoeCkgPT4geC5maWVsZCA9PT0gZGltLm1lbWJlck5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY29sKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpbSA9IGRpbS5jaGlsZExldmVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UudG9nZ2xlRmlsdGVyRHJvcGRvd24oZXZlbnQudGFyZ2V0LCBjb2wpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0RGltZW5zaW9uU3RhdGUoZGltZW5zaW9uVHlwZTogUGl2b3REaW1lbnNpb25UeXBlKSB7XG4gICAgICAgIHN3aXRjaCAoZGltZW5zaW9uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBQaXZvdERpbWVuc2lvblR5cGUuUm93OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQucm93RGltZW5zaW9ucztcbiAgICAgICAgICAgIGNhc2UgUGl2b3REaW1lbnNpb25UeXBlLkNvbHVtbjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmNvbHVtbkRpbWVuc2lvbnM7XG4gICAgICAgICAgICBjYXNlIFBpdm90RGltZW5zaW9uVHlwZS5GaWx0ZXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5maWx0ZXJEaW1lbnNpb25zO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgbW92ZVZhbHVlSXRlbShpdGVtSWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBhZ2dyZWdhdGlvbiA9IHRoaXMuZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzO1xuICAgICAgICBjb25zdCB2YWx1ZUluZGV4ID1cbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uLmZpbmRJbmRleCgoeCkgPT4geC5tZW1iZXIgPT09IGl0ZW1JZCkgIT09IC0xXG4gICAgICAgICAgICAgICAgPyBhZ2dyZWdhdGlvbj8uZmluZEluZGV4KCh4KSA9PiB4Lm1lbWJlciA9PT0gaXRlbUlkKVxuICAgICAgICAgICAgICAgIDogYWdncmVnYXRpb24ubGVuZ3RoO1xuICAgICAgICBjb25zdCBuZXdWYWx1ZUluZGV4ID1cbiAgICAgICAgICAgIHZhbHVlSW5kZXggKyB0aGlzLl9kcm9wRGVsdGEgPCAwID8gMCA6IHZhbHVlSW5kZXggKyB0aGlzLl9kcm9wRGVsdGE7XG5cbiAgICAgICAgY29uc3QgYWdncmVnYXRpb25JdGVtID0gYWdncmVnYXRpb24uZmluZChcbiAgICAgICAgICAgICh4KSA9PiB4Lm1lbWJlciA9PT0gaXRlbUlkIHx8IHguZGlzcGxheU5hbWUgPT09IGl0ZW1JZFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChhZ2dyZWdhdGlvbkl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5tb3ZlVmFsdWUoYWdncmVnYXRpb25JdGVtLCBuZXdWYWx1ZUluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC52YWx1ZXNDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLnZhbHVlcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkl0ZW1Ecm9wcGVkKFxuICAgICAgICBldmVudDogSURyb3BEcm9wcGVkRXZlbnRBcmdzLFxuICAgICAgICBkaW1lbnNpb25UeXBlOiBQaXZvdERpbWVuc2lvblR5cGVcbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLmRyb3BBbGxvd2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLmdyaWQuZ2V0RGltZW5zaW9uc0J5VHlwZShkaW1lbnNpb25UeXBlKTtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uU3RhdGUgPSB0aGlzLmdldERpbWVuc2lvblN0YXRlKGRpbWVuc2lvblR5cGUpO1xuICAgICAgICBjb25zdCBpdGVtSWQgPSBldmVudC5kcmFnLmVsZW1lbnQubmF0aXZlRWxlbWVudC5pZDtcbiAgICAgICAgY29uc3QgdGFyZ2V0SWQgPSBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaWQ7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbkl0ZW0gPSBkaW1lbnNpb24/LmZpbmQoKHgpID0+IHgubWVtYmVyTmFtZSA9PT0gaXRlbUlkKTtcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID1cbiAgICAgICAgICAgIGRpbWVuc2lvbj8uZmluZEluZGV4KCh4KSA9PiB4Py5tZW1iZXJOYW1lID09PSBpdGVtSWQpICE9PSAtMVxuICAgICAgICAgICAgICAgID8gZGltZW5zaW9uPy5maW5kSW5kZXgoKHgpID0+IHgubWVtYmVyTmFtZSA9PT0gaXRlbUlkKVxuICAgICAgICAgICAgICAgIDogZGltZW5zaW9uPy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLnJvd3NcbiAgICAgICAgICAgIC5jb25jYXQodGhpcy5ncmlkLnBpdm90Q29uZmlndXJhdGlvbi5jb2x1bW5zKVxuICAgICAgICAgICAgLmNvbmNhdCh0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLmZpbHRlcnMpXG4gICAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB4ICYmIHgubWVtYmVyTmFtZSA9PT0gaXRlbUlkKTtcblxuICAgICAgICBjb25zdCByZW9yZGVyID1cbiAgICAgICAgICAgIGRpbWVuc2lvblN0YXRlPy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0ubWVtYmVyTmFtZSA9PT0gaXRlbUlkKSAhPT1cbiAgICAgICAgICAgIC0xO1xuXG4gICAgICAgIGxldCB0YXJnZXRJbmRleCA9XG4gICAgICAgICAgICB0YXJnZXRJZCAhPT0gXCJcIlxuICAgICAgICAgICAgICAgID8gZGltZW5zaW9uPy5maW5kSW5kZXgoKHgpID0+IHgubWVtYmVyTmFtZSA9PT0gdGFyZ2V0SWQpXG4gICAgICAgICAgICAgICAgOiBkaW1lbnNpb24/Lmxlbmd0aDtcblxuICAgICAgICBpZiAoIWRpbWVuc2lvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVmFsdWVJdGVtKGl0ZW1JZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVvcmRlcikge1xuICAgICAgICAgICAgdGFyZ2V0SW5kZXggPVxuICAgICAgICAgICAgICAgIGl0ZW1JbmRleCArIHRoaXMuX2Ryb3BEZWx0YSA8IDBcbiAgICAgICAgICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICAgICAgICAgIDogaXRlbUluZGV4ICsgdGhpcy5fZHJvcERlbHRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpbWVuc2lvbkl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5tb3ZlRGltZW5zaW9uKGRpbWVuc2lvbkl0ZW0sIGRpbWVuc2lvblR5cGUsIHRhcmdldEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RpbSA9IGRpbWVuc2lvbnMuZmluZCgoeCkgPT4geC5tZW1iZXJOYW1lID09PSBpdGVtSWQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLm1vdmVEaW1lbnNpb24obmV3RGltLCBkaW1lbnNpb25UeXBlLCB0YXJnZXRJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmdyaWQuZGltZW5zaW9uc0NoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGRpbWVuc2lvbnM6IGRpbWVuc2lvbixcbiAgICAgICAgICAgIGRpbWVuc2lvbkNvbGxlY3Rpb25UeXBlOiBkaW1lbnNpb25UeXBlLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZURyb3BEb3duKFxuICAgICAgICB2YWx1ZTogSVBpdm90VmFsdWUsXG4gICAgICAgIGRyb3Bkb3duOiBJZ3hEcm9wRG93bkNvbXBvbmVudFxuICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIGRyb3Bkb3duLndpZHRoID0gXCIyMDBweFwiO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUxpc3QgPSBQaXZvdFV0aWwuZ2V0QWdncmVnYXRlTGlzdCh2YWx1ZSwgdGhpcy5ncmlkKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICBkcm9wZG93bi5vcGVuKHRoaXMuX3N1Yk1lbnVPdmVybGF5U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdW1tYXJ5Q2xpY2soXG4gICAgICAgIGV2ZW50OiBNb3VzZUV2ZW50LFxuICAgICAgICB2YWx1ZTogSVBpdm90VmFsdWUsXG4gICAgICAgIGRyb3Bkb3duOiBJZ3hEcm9wRG93bkNvbXBvbmVudFxuICAgICkge1xuICAgICAgICB0aGlzLl9zdWJNZW51T3ZlcmxheVNldHRpbmdzLnRhcmdldCA9XG4gICAgICAgICAgICBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGlmIChkcm9wZG93bi5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRHJvcERvd24odmFsdWUsIGRyb3Bkb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNsb3NlIGZvciBwcmV2aW91cyBjaGlwXG4gICAgICAgICAgICBkcm9wZG93bi5jbG9zZSgpO1xuICAgICAgICAgICAgZHJvcGRvd24uY2xvc2VkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURyb3BEb3duKHZhbHVlLCBkcm9wZG93bik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25BZ2dyZWdhdGlvbkNoYW5nZShldmVudDogSVNlbGVjdGlvbkV2ZW50QXJncykge1xuICAgICAgICBpZiAoIXRoaXMuaXNTZWxlY3RlZChldmVudC5uZXdTZWxlY3Rpb24udmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLmFnZ3JlZ2F0ZSA9IGV2ZW50Lm5ld1NlbGVjdGlvbi52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5waXBlVHJpZ2dlcisrO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTZWxlY3RlZCh2YWw6IElQaXZvdEFnZ3JlZ2F0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUuYWdncmVnYXRlLmtleSA9PT0gdmFsLmtleTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdob3N0Q3JlYXRlZChldmVudDogSURyYWdHaG9zdEJhc2VFdmVudEFyZ3MsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aDogaXRlbVdpZHRoIH0gPVxuICAgICAgICAgICAgZXZlbnQub3duZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aGlzLmdob3N0V2lkdGggPSBpdGVtV2lkdGg7XG4gICAgICAgIHRoaXMuZ2hvc3RUZXh0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBcInBvc2l0aW9uXCIsXG4gICAgICAgICAgICBcImFic29sdXRlXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIFwidmlzaWJpbGl0eVwiLFxuICAgICAgICAgICAgXCJoaWRkZW5cIlxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlSXRlbShpdGVtOiBJUGl2b3REaW1lbnNpb24gfCBJUGl2b3RWYWx1ZSkge1xuICAgICAgICBpZiAoaXRlbSBhcyBJUGl2b3RWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRvZ2dsZVZhbHVlKGl0ZW0gYXMgSVBpdm90VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0gYXMgSVBpdm90RGltZW5zaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQudG9nZ2xlRGltZW5zaW9uKGl0ZW0gYXMgSVBpdm90RGltZW5zaW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25QYW5lbEVudHJ5KGV2ZW50OiBJRHJvcEJhc2VFdmVudEFyZ3MsIHBhbmVsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5kcm9wQWxsb3dlZCA9IGV2ZW50LmRyYWdEYXRhLmdyaWRJRCA9PT0gdGhpcy5ncmlkLmlkICYmIGV2ZW50LmRyYWdEYXRhLnNlbGVjdG9yQ2hhbm5lbHM/LnNvbWUoXG4gICAgICAgICAgICAoY2hhbm5lbDogc3RyaW5nKSA9PiBjaGFubmVsID09PSBwYW5lbFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtRHJhZ01vdmUoZXZlbnQ6IElEcmFnQmFzZUV2ZW50QXJncykge1xuICAgICAgICBjb25zdCBjbGllbnRSZWN0ID1cbiAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgdGhpcy5fZHJvcERlbHRhID0gTWF0aC5yb3VuZChcbiAgICAgICAgICAgIChldmVudC5wYWdlWSAtIGV2ZW50LnN0YXJ0WSkgLyBjbGllbnRSZWN0LmhlaWdodFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JdGVtRHJhZ0VuZChldmVudDogSURyYWdCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBcInBvc2l0aW9uXCIsXG4gICAgICAgICAgICBcInN0YXRpY1wiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgICAgICBldmVudC5vd25lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBcInZpc2liaWxpdHlcIixcbiAgICAgICAgICAgIFwidmlzaWJsZVwiXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBvbkl0ZW1EcmFnT3ZlcihldmVudDogSURyb3BCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3BBbGxvd2VkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKFxuICAgICAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICBcImlneC1kcmFnLS1wdXNoXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG9uSXRlbURyYWdMZWF2ZShldmVudDogSURyb3BCYXNlRXZlbnRBcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmRyb3BBbGxvd2VkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKFxuICAgICAgICAgICAgICAgIGV2ZW50Lm93bmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgICBcImlneC1kcmFnLS1wdXNoXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2ZpbHRlclwiPlxuICAgIDxpZ3gtaW5wdXQtZ3JvdXAgdHlwZT1cImJveFwiIFtkaXNwbGF5RGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiPlxuICAgICAgICA8aWd4LWljb24gaWd4UHJlZml4PnNlYXJjaDwvaWd4LWljb24+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICBpZ3hJbnB1dFxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIC8+XG4gICAgPC9pZ3gtaW5wdXQtZ3JvdXA+XG4gICAgPGlneC1saXN0IFtkaXNwbGF5RGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiPlxuICAgICAgICA8aWd4LWxpc3QtaXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgZGltc1xuICAgICAgICAgICAgICAgICAgICB8IGZpbHRlclBpdm90SXRlbXM6IGlucHV0LnZhbHVlOmdyaWQucGlwZVRyaWdnZXJcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbaWRdPVwiaXRlbS5tZW1iZXJOYW1lXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlneC1jaGVja2JveFxuICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsbGVkYnldPVwiaXRlbS5tZW1iZXJOYW1lXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtLmVuYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVJdGVtKGl0ZW0pXCJcbiAgICAgICAgICAgID48L2lneC1jaGVja2JveD5cbiAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0ubWVtYmVyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9pZ3gtbGlzdC1pdGVtPlxuICAgICAgICA8aWd4LWxpc3QtaXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgdmFsdWVzXG4gICAgICAgICAgICAgICAgICAgIHwgZmlsdGVyUGl2b3RJdGVtczogaW5wdXQudmFsdWU6Z3JpZC5waXBlVHJpZ2dlclxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIFtpZF09XCJpdGVtLm1lbWJlclwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbGxlZGJ5XT1cIml0ZW0ubWVtYmVyXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtLmVuYWJsZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVJdGVtKGl0ZW0pXCJcbiAgICAgICAgICAgID48L2lneC1jaGVja2JveD5cbiAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0uZGlzcGxheU5hbWUgfHwgaXRlbS5tZW1iZXIgfX08L3NwYW4+XG4gICAgICAgIDwvaWd4LWxpc3QtaXRlbT5cbiAgICA8L2lneC1saXN0PlxuPC9kaXY+XG5cbjxpZ3gtYWNjb3JkaW9uPlxuICAgIDxpZ3gtZXhwYW5zaW9uLXBhbmVsXG4gICAgICAgIFthbmltYXRpb25TZXR0aW5nc109XCJhbmltYXRpb25TZXR0aW5nc1wiXG4gICAgICAgIFtjb2xsYXBzZWRdPVwiZmFsc2VcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgX3BhbmVsc1wiXG4gICAgPlxuICAgICAgICA8aWd4LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJcbiAgICAgICAgICAgIGljb25Qb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgIGlneERyb3BcbiAgICAgICAgICAgIChlbnRlcik9XCJvblBhbmVsRW50cnkoJGV2ZW50LCBwYW5lbC5uYW1lKVwiXG4gICAgICAgICAgICAoZHJvcHBlZCk9XCJvbkl0ZW1Ecm9wcGVkKCRldmVudCwgcGFuZWwudHlwZSlcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aWd4LWV4cGFuc2lvbi1wYW5lbC10aXRsZSBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9faGVhZGVyLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdyaWQucmVzb3VyY2VTdHJpbmdzW3BhbmVsLmkxOG5dIH19XG4gICAgICAgICAgICAgICAgPC9oNj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2hlYWRlci1leHRyYVwiPlxuICAgICAgICAgICAgICAgICAgICA8aWd4LWljb24+e3sgcGFuZWwuaWNvbiB9fTwvaWd4LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxpZ3gtY2hpcD57eyB0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV0ubGVuZ3RoIH19PC9pZ3gtY2hpcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvaWd4LWV4cGFuc2lvbi1wYW5lbC10aXRsZT5cbiAgICAgICAgPC9pZ3gtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPGlneC1leHBhbnNpb24tcGFuZWwtYm9keVxuICAgICAgICAgICAgaWd4RHJvcFxuICAgICAgICAgICAgKGVudGVyKT1cIm9uUGFuZWxFbnRyeSgkZXZlbnQsIHBhbmVsLm5hbWUpXCJcbiAgICAgICAgICAgIChkcm9wcGVkKT1cIm9uSXRlbURyb3BwZWQoJGV2ZW50LCBwYW5lbC50eXBlKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtbGlzdFxuICAgICAgICAgICAgICAgICpuZ0lmPVwidGhpcy5ncmlkW3BhbmVsLmRhdGFLZXldLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5RGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGlneC1saXN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgaWd4RHJvcFxuICAgICAgICAgICAgICAgICAgICBbaWd4RHJhZ109XCJ7IGdyaWRJRDogZ3JpZC5pZCwgc2VsZWN0b3JDaGFubmVsczogcGFuZWwuZHJhZ0NoYW5uZWxzIH1cIlxuICAgICAgICAgICAgICAgICAgICBbZ2hvc3RUZW1wbGF0ZV09XCJpdGVtR2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICAoZ2hvc3RDcmVhdGUpPVwiZ2hvc3RDcmVhdGVkKCRldmVudCwgaXRlbVtwYW5lbC5pdGVtS2V5XSlcIlxuICAgICAgICAgICAgICAgICAgICAob3Zlcik9XCJvbkl0ZW1EcmFnT3ZlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGxlYXZlKT1cIm9uSXRlbURyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRyYWdNb3ZlKT1cIm9uSXRlbURyYWdNb3ZlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZHJhZ0VuZCk9XCJvbkl0ZW1EcmFnRW5kKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoZHJvcHBlZCk9XCJvbkl0ZW1Ecm9wcGVkKCRldmVudCwgcGFuZWwudHlwZSlcIlxuICAgICAgICAgICAgICAgICAgICAqaWd4Rm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiB0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxPcmllbnRhdGlvbjogJ3ZlcnRpY2FsJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleFxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaXRlbVtwYW5lbC5pdGVtS2V5XVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19pdGVtLXN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtU29ydCgkZXZlbnQsIGl0ZW0sIHBhbmVsLnR5cGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2FjdGlvbi1zb3J0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5zb3J0YWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19pdGVtLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYW5lbC50eXBlID09PSBudWxsXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uYWdncmVnYXRlLmtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJwYW5lbC50eXBlID09PSBudWxsXCI+KDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbVtwYW5lbC5kaXNwbGF5S2V5XSB8fCBpdGVtW3BhbmVsLml0ZW1LZXldIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBhbmVsLnR5cGUgPT09IG51bGxcIj4pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19hY3Rpb24tc29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGFuZWwuc29ydGFibGUgJiYgaXRlbS5zb3J0RGlyZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNvcnREaXJlY3Rpb24gPCAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImFycm93X3Vwd2FyZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImFycm93X2Rvd253YXJkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW0tZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlneC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2FjdGlvbi1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBhbmVsLnR5cGUgIT09IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZpbHRlcmluZ0ljb25Qb2ludGVyRG93bigkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZpbHRlcmluZ0ljb25DbGljaygkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPmZpbHRlcl9saXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aWd4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9fYWN0aW9uLXN1bW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInBhbmVsLnR5cGUgPT09IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TdW1tYXJ5Q2xpY2soJGV2ZW50LCBpdGVtLCBkcm9wZG93bilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbl09XCJkcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpZ3gtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ3hEcmFnSGFuZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2FjdGlvbi1tb3ZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwYW5lbC5kcmFnQ2hhbm5lbHMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5kcmFnX2hhbmRsZTwvaWd4LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9pZ3gtbGlzdC1pdGVtPlxuICAgICAgICAgICAgPC9pZ3gtbGlzdD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19lbXB0eVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLmdyaWRbcGFuZWwuZGF0YUtleV0ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBncmlkLnJlc291cmNlU3RyaW5ncy5pZ3hfZ3JpZF9waXZvdF9zZWxlY3Rvcl9wYW5lbF9lbXB0eSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvaWd4LWV4cGFuc2lvbi1wYW5lbC1ib2R5PlxuICAgIDwvaWd4LWV4cGFuc2lvbi1wYW5lbD5cbjwvaWd4LWFjY29yZGlvbj5cblxuPGlneC1kcm9wLWRvd24gI2Ryb3Bkb3duIChzZWxlY3Rpb25DaGFuZ2luZyk9XCJvbkFnZ3JlZ2F0aW9uQ2hhbmdlKCRldmVudClcIj5cbiAgICA8aWd4LWRyb3AtZG93bi1pdGVtXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFnZ3JlZ2F0ZUxpc3RcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwiaXNTZWxlY3RlZChpdGVtKVwiXG4gICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICA+XG4gICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICA8L2lneC1kcm9wLWRvd24taXRlbT5cbjwvaWd4LWRyb3AtZG93bj5cblxuPG5nLXRlbXBsYXRlICNpdGVtR2hvc3Q+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImlneC1waXZvdC1kYXRhLXNlbGVjdG9yX19pdGVtLWdob3N0XCJcbiAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImdob3N0V2lkdGhcIlxuICAgICAgICBbY2xhc3MuaWd4LXBpdm90LWRhdGEtc2VsZWN0b3JfX2l0ZW0tZ2hvc3QtLW5vLWRyb3BdPVwiIWRyb3BBbGxvd2VkXCJcbiAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtcGl2b3QtZGF0YS1zZWxlY3Rvcl9faXRlbS1naG9zdC10ZXh0XCI+XG4gICAgICAgICAgICA8aWd4LWljb24+dW5mb2xkX21vcmU8L2lneC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgZ2hvc3RUZXh0IH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlneC1pY29uPmRyYWdfaGFuZGxlPC9pZ3gtaWNvbj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|