@smartbit4all/ng-client 4.0.28 → 4.0.30
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/esm2022/lib/smart-grid/smart-grid.component.mjs +48 -4
- package/fesm2022/smartbit4all-ng-client.mjs +1771 -1728
- package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/smart-grid/smart-grid.component.d.ts +7 -3
- package/package.json +1 -1
- package/smartbit4all-ng-client-4.0.30.tgz +0 -0
- package/smartbit4all-ng-client-4.0.28.tgz +0 -0
|
@@ -11,6 +11,7 @@ import { GridSelectionMode, GridSelectionType, GridViewDescriptorKindEnum, } fro
|
|
|
11
11
|
import { TableLayoutDefinerComponent } from './components/table-layout-definer/table-layout-definer.component';
|
|
12
12
|
import { GridUiActionType, SmartLayoutDef } from './models/model';
|
|
13
13
|
import { SmartGridService } from './smart-grid.service';
|
|
14
|
+
import { FilterExpressionOrderByOrderEnum } from '../smart-filter/projects';
|
|
14
15
|
import * as i0 from "@angular/core";
|
|
15
16
|
import * as i1 from "./smart-grid.service";
|
|
16
17
|
import * as i2 from "../component-factory-service/projects";
|
|
@@ -201,7 +202,7 @@ export class SmartGridComponent {
|
|
|
201
202
|
this.smartGrid?.gridModel.view?.orderedColumnNames.map((orderedCol) => {
|
|
202
203
|
this.smartGrid?.gridModel.view?.descriptor?.columns.map((colum) => {
|
|
203
204
|
if (orderedCol === colum.propertyName) {
|
|
204
|
-
this.columns.push(colum
|
|
205
|
+
this.columns.push(colum);
|
|
205
206
|
}
|
|
206
207
|
});
|
|
207
208
|
});
|
|
@@ -784,12 +785,55 @@ export class SmartGridComponent {
|
|
|
784
785
|
});
|
|
785
786
|
this.menu.toggle(event);
|
|
786
787
|
}
|
|
788
|
+
gridSort(event) {
|
|
789
|
+
let orderByList = [];
|
|
790
|
+
event.multiSortMeta?.map((meta, index) => {
|
|
791
|
+
if (this.previousmultiSortMeta && this.previousmultiSortMeta.length > 0) {
|
|
792
|
+
this.previousmultiSortMeta.map((order) => {
|
|
793
|
+
if (meta.field === order.field && order.order != meta.order) {
|
|
794
|
+
switch (order.order) {
|
|
795
|
+
case -1:
|
|
796
|
+
event.multiSortMeta.splice(index, 1);
|
|
797
|
+
break;
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
});
|
|
801
|
+
}
|
|
802
|
+
else {
|
|
803
|
+
this.previousmultiSortMeta = event.multiSortMeta;
|
|
804
|
+
}
|
|
805
|
+
});
|
|
806
|
+
event.multiSortMeta?.map((meta) => {
|
|
807
|
+
orderByList.push({
|
|
808
|
+
propertyName: meta.field,
|
|
809
|
+
order: meta.order === 1
|
|
810
|
+
? FilterExpressionOrderByOrderEnum.ASC
|
|
811
|
+
: meta.order === -1
|
|
812
|
+
? FilterExpressionOrderByOrderEnum.DESC
|
|
813
|
+
: undefined,
|
|
814
|
+
});
|
|
815
|
+
});
|
|
816
|
+
this.service.sort(this.smartGrid, {
|
|
817
|
+
orderByList: orderByList,
|
|
818
|
+
orderedColumnNames: this.smartGrid?.gridModel.view?.orderedColumnNames,
|
|
819
|
+
});
|
|
820
|
+
}
|
|
821
|
+
lazyLoad(event) {
|
|
822
|
+
this.previousmultiSortMeta = [];
|
|
823
|
+
this.smartGrid?.gridModel.view?.orderByList.map((order) => {
|
|
824
|
+
this.previousmultiSortMeta?.push({
|
|
825
|
+
field: order.propertyName,
|
|
826
|
+
order: order.order === FilterExpressionOrderByOrderEnum.ASC ? 1 : -1,
|
|
827
|
+
});
|
|
828
|
+
});
|
|
829
|
+
event.multiSortMeta = this.previousmultiSortMeta;
|
|
830
|
+
}
|
|
787
831
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartGridComponent, deps: [{ token: i1.SmartGridService }, { token: i2.ComponentFactoryService }, { token: i3.MatDialog }, { token: i4.UiActionDescriptorService }, { token: COMPONENT_LIBRARY }, { token: 'gridMenuIcon' }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
788
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartGridComponent, selector: "smart-grid", inputs: { smartGrid: "smartGrid", uuid: "uuid", dev: "dev" }, providers: [SmartGridService], viewQueries: [{ propertyName: "vcRefTable", first: true, predicate: ["table"], descendants: true, read: ViewContainerRef }, { propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if(compLib === componentLibrary.PRIMENG) {\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <p-table #pTable [value]=\"smartGrid.gridModel.page.rows!\">\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{ col }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n <!-- <tr>\r\n <th *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n <p-columnFilter\r\n type=\"text\"\r\n [field]=\"'data.' + col\"\r\n [placeholder]=\"'Search by ' + col\"\r\n [ariaLabel]=\"'Filter ' + col\"\r\n />\r\n </th>\r\n </tr> -->\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr *ngIf=\"row && row.data\">\r\n <td *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n {{ row.data[col] }}\r\n </td>\r\n <td>\r\n <p-button\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n *ngIf=\"row.actions && row.actions.length > 0\"\r\n (onClick)=\"onOptionsClick($event, row)\"\r\n >\r\n <smart-icon icon=\"ellipsis-v\"></smart-icon>\r\n </p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <p-paginator\r\n *ngIf=\"smartGrid.paginator\"\r\n [first]=\"pageIndex!\"\r\n [totalRecords]=\"length!\"\r\n [rows]=\"pageSize\"\r\n [rowsPerPageOptions]=\"pageSizeOptions\"\r\n (onPageChange)=\"onPrimeChangePage($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n />\r\n <p-menu #menu [model]=\"menuButtons\" [popup]=\"true\"> </p-menu>\r\n</div>\r\n}@else {\r\n<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n}\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.primeSmartGrid-container{display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i10.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i10.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i10.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i10.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i10.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { kind: "component", type: i13.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id"] }, { kind: "component", type: i14.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i15.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i16.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i17.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i18.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "component", type: i19.SmartGridCardComponent, selector: "app-smart-grid-card", inputs: ["item", "smartGrid", "onSelect"] }] }); }
|
|
832
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: SmartGridComponent, selector: "smart-grid", inputs: { smartGrid: "smartGrid", uuid: "uuid", dev: "dev" }, providers: [SmartGridService], viewQueries: [{ propertyName: "vcRefTable", first: true, predicate: ["table"], descendants: true, read: ViewContainerRef }, { propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "menu", first: true, predicate: ["menu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if(compLib === componentLibrary.PRIMENG) {\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <p-table\r\n #pTable\r\n [value]=\"smartGrid.gridModel.page.rows!\"\r\n (sortFunction)=\"gridSort($event)\"\r\n [customSort]=\"true\"\r\n [sortMode]=\"'multiple'\"\r\n [lazy]=\"true\"\r\n (onLazyLoad)=\"lazyLoad($event)\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th [pSortableColumn]=\"col.propertyName\" *ngFor=\"let col of columns\">\r\n <p-sortIcon [field]=\"col.propertyName\" />\r\n {{ col.label }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n <!-- <tr>\r\n <th *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n <p-columnFilter\r\n type=\"text\"\r\n [field]=\"'data.' + col\"\r\n [placeholder]=\"'Search by ' + col\"\r\n [ariaLabel]=\"'Filter ' + col\"\r\n />\r\n </th>\r\n </tr> -->\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr *ngIf=\"row && row.data\">\r\n <td *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n {{ row.data[col] }}\r\n </td>\r\n <td>\r\n <p-button\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n *ngIf=\"row.actions && row.actions.length > 0\"\r\n (onClick)=\"onOptionsClick($event, row)\"\r\n >\r\n <smart-icon icon=\"ellipsis-v\"></smart-icon>\r\n </p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <p-paginator\r\n *ngIf=\"smartGrid.paginator\"\r\n [first]=\"pageIndex!\"\r\n [totalRecords]=\"length!\"\r\n [rows]=\"pageSize\"\r\n [rowsPerPageOptions]=\"pageSizeOptions\"\r\n (onPageChange)=\"onPrimeChangePage($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n />\r\n <p-menu #menu [model]=\"menuButtons\" [popup]=\"true\"> </p-menu>\r\n</div>\r\n}@else {\r\n<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n}\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.primeSmartGrid-container{display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i6.SmartIconComponent, selector: "smart-icon", inputs: ["icon", "color"] }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i8.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "component", type: i9.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: i10.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i10.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i10.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i10.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i10.MatTreeNode, selector: "mat-tree-node", inputs: ["disabled", "tabIndex"], exportAs: ["matTreeNode"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.ExpandableSectionComponent, selector: "smart-expandable-section", inputs: ["data", "index"] }, { kind: "component", type: i13.UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: ["uiActionModels", "uiActionDescriptorService", "id"] }, { kind: "component", type: i14.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i15.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i14.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i14.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "component", type: i16.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i17.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "component", type: i18.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "component", type: i19.SmartGridCardComponent, selector: "app-smart-grid-card", inputs: ["item", "smartGrid", "onSelect"] }] }); }
|
|
789
833
|
}
|
|
790
834
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartGridComponent, decorators: [{
|
|
791
835
|
type: Component,
|
|
792
|
-
args: [{ selector: 'smart-grid', providers: [SmartGridService], template: "@if(compLib === componentLibrary.PRIMENG) {\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <p-table
|
|
836
|
+
args: [{ selector: 'smart-grid', providers: [SmartGridService], template: "@if(compLib === componentLibrary.PRIMENG) {\r\n<div *ngIf=\"smartGrid\" class=\"primeSmartGrid-container\">\r\n <p-table\r\n #pTable\r\n [value]=\"smartGrid.gridModel.page.rows!\"\r\n (sortFunction)=\"gridSort($event)\"\r\n [customSort]=\"true\"\r\n [sortMode]=\"'multiple'\"\r\n [lazy]=\"true\"\r\n (onLazyLoad)=\"lazyLoad($event)\"\r\n >\r\n <ng-template pTemplate=\"header\">\r\n <tr>\r\n <th [pSortableColumn]=\"col.propertyName\" *ngFor=\"let col of columns\">\r\n <p-sortIcon [field]=\"col.propertyName\" />\r\n {{ col.label }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n <!-- <tr>\r\n <th *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n <p-columnFilter\r\n type=\"text\"\r\n [field]=\"'data.' + col\"\r\n [placeholder]=\"'Search by ' + col\"\r\n [ariaLabel]=\"'Filter ' + col\"\r\n />\r\n </th>\r\n </tr> -->\r\n </ng-template>\r\n <ng-template pTemplate=\"body\" let-row>\r\n <tr *ngIf=\"row && row.data\">\r\n <td *ngFor=\"let col of smartGrid?.gridModel?.view?.orderedColumnNames\">\r\n {{ row.data[col] }}\r\n </td>\r\n <td>\r\n <p-button\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n *ngIf=\"row.actions && row.actions.length > 0\"\r\n (onClick)=\"onOptionsClick($event, row)\"\r\n >\r\n <smart-icon icon=\"ellipsis-v\"></smart-icon>\r\n </p-button>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n <p-paginator\r\n *ngIf=\"smartGrid.paginator\"\r\n [first]=\"pageIndex!\"\r\n [totalRecords]=\"length!\"\r\n [rows]=\"pageSize\"\r\n [rowsPerPageOptions]=\"pageSizeOptions\"\r\n (onPageChange)=\"onPrimeChangePage($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n />\r\n <p-menu #menu [model]=\"menuButtons\" [popup]=\"true\"> </p-menu>\r\n</div>\r\n}@else {\r\n<div *ngIf=\"smartGrid\" class=\"smartGrid-container\">\r\n <div class=\"smart-grid-toolbar\">\r\n <smart-ui-action-toolbar #toolbar [id]=\"'grid_not_initialized'\"></smart-ui-action-toolbar>\r\n <button\r\n (click)=\"editColumns()\"\r\n mat-mini-fab\r\n color=\"text-primary\"\r\n *ngIf=\"smartGrid.showEditColumns\"\r\n >\r\n <mat-icon aria-hidden=\"false\" aria-label=\"Columns\" class=\"smart-grid-edit-icon\"\r\n >view_columns</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <!-- <div [ngClass]=\"isBlocked ? 'blocked' : ''\"></div> -->\r\n <div class=\"smartGridContent\">\r\n <div>\r\n <div *ngIf=\"smartGrid.showResultCount\">\r\n <div class=\"smartGrid-data-number\">\r\n {{ smartGrid.gridModel.totalRowCount }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"smart-grid-table-container\">\r\n <ng-template #table></ng-template>\r\n </div>\r\n\r\n <div *ngIf=\"smartGrid.layoutDef === layoutDef().EXPANDABLE\">\r\n <smart-expandable-section\r\n #gridExpandableSection\r\n *ngFor=\"let expandableSection of expandableSections\"\r\n [data]=\"expandableSection\"\r\n ></smart-expandable-section>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().CARD\"\r\n class=\"cards-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <app-smart-grid-card\r\n class=\"smartGrid-card-container\"\r\n *ngFor=\"let task of smartGrid.gridModel.page.rows\"\r\n [item]=\"task\"\r\n [smartGrid]=\"smartGrid\"\r\n [onSelect]=\"onSelect.bind(this)\"\r\n ></app-smart-grid-card>\r\n </div>\r\n <div\r\n *ngIf=\"smartGrid.layoutDef === layoutDef().TREE && treeControl\"\r\n class=\"tree-container\"\r\n [ngStyle]=\"{\r\n 'grid-template-columns':\r\n smartGrid.numberOfColumn !== undefined\r\n ? 'repeat(' + smartGrid.numberOfColumn + ', 1fr)'\r\n : ''\r\n }\"\r\n >\r\n <mat-tree [dataSource]=\"treeDataSource!\" [treeControl]=\"treeControl!\">\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node\"\r\n matTreeNodeToggle\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button mat-icon-button disabled class=\"tree-button\"></button>\r\n <mat-checkbox\r\n class=\"checklist-leaf-node\"\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n\r\n <mat-tree-node\r\n *matTreeNodeDef=\"let node; when: hasChild\"\r\n matTreeNodePadding\r\n matTreeNodePaddingIndent=\"24\"\r\n >\r\n <button\r\n mat-icon-button\r\n matTreeNodeToggle\r\n class=\"tree-button\"\r\n [attr.aria-label]=\"'Toggle ' + node.item\"\r\n >\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{ treeControl!.isExpanded(node) ? 'expand_more' : 'chevron_right' }}\r\n </mat-icon>\r\n </button>\r\n <mat-checkbox\r\n [checked]=\"treeChecklistSelection?.isSelected(node)\"\r\n [indeterminate]=\"descendantsPartiallySelected(node)\"\r\n (change)=\"treeNodeSelectionToggle(node)\"\r\n >{{ getTreeItem(node) }}</mat-checkbox\r\n >\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n\r\n <mat-paginator\r\n *ngIf=\"smartGrid.paginator && !treeControl\"\r\n #paginator\r\n [length]=\"length\"\r\n [pageIndex]=\"pageIndex\"\r\n [pageSize]=\"pageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"\r\n (page)=\"onChangePage($event)\"\r\n ></mat-paginator>\r\n</div>\r\n}\r\n", styles: [".smartGrid-container{position:relative;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.primeSmartGrid-container{display:flex;flex-direction:column;gap:1rem}.smartGrid-data-number{padding-bottom:1rem}.cards-container{display:grid;gap:1rem;padding:1rem}.smartGrid-card-container{height:auto;border:1px solid black;border-radius:8px}.smartGrid-container ::ng-deep .mat-form-field-appearance-legacy .mat-form-field-underline{bottom:0}.smartGridContent{width:100%;flex:1;overflow:auto}.blocked{position:absolute;width:calc(100% - 3rem);height:calc(100% - 3rem);z-index:110;background-color:#0003}.smart-grid-table-container{display:flex;flex-direction:column;gap:1rem}.smart-grid-toolbar{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.smart-grid-toolbar smart-ui-action-toolbar{width:100%}.smart-grid-edit-icon{color:var(--light-gray)}.tree-button{width:24px!important;height:24px!important}\n"] }]
|
|
793
837
|
}], ctorParameters: () => [{ type: i1.SmartGridService }, { type: i2.ComponentFactoryService }, { type: i3.MatDialog }, { type: i4.UiActionDescriptorService }, { type: i4.ComponentLibrary, decorators: [{
|
|
794
838
|
type: Inject,
|
|
795
839
|
args: [COMPONENT_LIBRARY]
|
|
@@ -812,4 +856,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
812
856
|
type: ViewChild,
|
|
813
857
|
args: ['menu']
|
|
814
858
|
}] } });
|
|
815
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUlMLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixvQkFBb0IsRUFFcEIsNEJBQTRCLEVBRTVCLDJCQUEyQixFQUMzQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBWSxrQkFBa0IsRUFBc0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUdqQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFHTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLDBCQUEwQixHQUMzQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxnQkFBZ0IsRUFBYSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVXhELE1BQU0sT0FBTyxrQkFBa0I7SUE0QzdCLFlBQ1UsT0FBeUIsRUFDekIsU0FBa0MsRUFDbEMsTUFBaUIsRUFDakIseUJBQW9ELEVBQzFCLE9BQXlCLEVBQzNCLFlBQXFCO1FBTDdDLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUMxQixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBUztRQWpEdkQsaURBQWlEO1FBQ2hDLDJCQUFzQixHQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEUscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDNUIsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBR3hDLFFBQUcsR0FBWSxLQUFLLENBQUM7UUFzQjlCLG9CQUFlLEdBQWEsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBRXhELHFCQUFnQixHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRS9DLHdCQUFtQixHQUFvQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRWpFLDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQUN2QyxjQUFTLEdBQVksSUFBSSxDQUFDO1FBMloxQixhQUFRLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBRTFDLGlCQUFZLEdBQUcsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0YsZ0JBQVcsR0FBRyxDQUFDLElBQWEsRUFBYSxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQzdELElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUcsQ0FBQyxDQUNsRCxDQUFDO2dCQUNGLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQztRQUVGLGFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxTQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNFLGdCQUFXLEdBQUcsQ0FBQyxHQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDM0MsR0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDM0IsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUM7UUF1YkYsU0FBUztRQUNULFlBQU8sR0FBYSxFQUFFLENBQUM7UUF4MUJyQixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDM0MsOERBQThEO1lBQzlELElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7WUFDbkQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2IsbUJBQW1CO1lBQ25CLElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZUFBZTtRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTO1lBQUUsTUFBTSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ2xELE9BQU8sSUFBSSxDQUFDLFVBQVcsQ0FBQyxTQUFVLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixtREFBbUQ7UUFDbkQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVNLFlBQVk7UUFDakIsa0RBQWtEO1FBQ2xELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLEdBQUcsVUFBVSxDQUFDO1lBQzVELElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDTyxLQUFLLENBQUMsTUFBTTtRQUNsQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQztRQUM1QyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO1lBQzFDLElBQUksU0FBUyxDQUFDLGVBQWUsSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDO1lBQ25ELENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztZQUNyRCxDQUFDO1lBQ0QsSUFBSSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDakQsSUFBSSxDQUFDLFNBQVUsQ0FBQyxlQUFlLEdBQUcsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsZUFBZSxDQUFDO1lBQ2pGLENBQUM7WUFDRCxJQUFJLElBQUksR0FBRyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUM7WUFDN0MsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxJQUFJLFNBQVMsQ0FBQztnQkFDZCxJQUFJLElBQUksS0FBSywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDOUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLENBQUM7cUJBQU0sSUFBSSxJQUFJLEtBQUssMEJBQTBCLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3BELFNBQVMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO2dCQUNsQyxDQUFDO3FCQUFNLElBQUksSUFBSSxLQUFLLDBCQUEwQixDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNyRCxTQUFTLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDbEMsQ0FBQztnQkFDRCxJQUFJLFNBQVMsRUFBRSxDQUFDO29CQUNkLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDeEMsQ0FBQztZQUNILENBQUM7WUFDRCxJQUFJLFNBQVMsRUFBRSxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVMsRUFBRSxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDO1lBQ3JELENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0IsMEJBQTBCO1lBQzFCLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDbEMsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7SUFDckMsQ0FBQztJQUVPLEtBQUssQ0FBQyxXQUFXO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsUUFBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVUsQ0FBQztZQUM1RixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBa0IsRUFBRSxFQUFFO2dCQUM1RSxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUU7b0JBQ2hGLElBQUksVUFBVSxLQUFLLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQzt3QkFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNqQyxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFVLENBQUMsSUFBSSxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNyRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixJQUFJLGNBQWMsR0FBUSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBb0IsRUFBRSxFQUFFO2dCQUMvRSxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUNoRCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQzNDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDcEQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUNuRSxTQUFTO2dCQUNQLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxLQUFLLGlCQUFpQixDQUFDLFFBQVE7b0JBQ2pGLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUztvQkFDMUIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkQsSUFBSSxXQUFXLEdBQWlDO2dCQUM5QyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsV0FBVztnQkFDOUIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLFNBQVM7Z0JBQ1QsdUJBQXVCLEVBQUUsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFHO2dCQUN0RCxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxVQUFVO2dCQUN0QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLGlCQUFpQjtnQkFDcEQsSUFBSSxFQUFFLDJCQUEyQixDQUFDLE1BQU07Z0JBQ3hDLFFBQVEsRUFBRSxJQUFJO2dCQUNkLGtCQUFrQixFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLGlCQUFrQjtnQkFDaEUsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO29CQUNoRixPQUFPO3dCQUNMLElBQUksRUFDRixJQUFJLEtBQUssbUJBQW1COzRCQUMxQixDQUFDLENBQUMsb0JBQW9CLENBQUMsU0FBUzs0QkFDaEMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE1BQU07d0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ2pDLElBQUksRUFBRSxJQUFJO3dCQUNWLGdEQUFnRDt3QkFDaEQsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUM1QyxVQUFVO3dCQUNWLE1BQU07d0JBQ04sa0JBQWtCO3dCQUNsQixPQUFPO3dCQUNQLEtBQUs7cUJBQ04sQ0FBQztnQkFDSixDQUFDLENBQUM7YUFDSCxDQUFDO1lBRUYsSUFDRSxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFpQjtnQkFDN0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQzFELENBQUM7Z0JBQ0QsV0FBVyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztnQkFDckYsV0FBVyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUM7WUFDN0YsQ0FBQztZQUVELElBQ0UsSUFBSSxDQUFDLFNBQVUsQ0FBQyxlQUFlO2dCQUMvQixJQUFJLENBQUMsU0FBVSxDQUFDLHlCQUF5QjtnQkFDekMsSUFBSSxDQUFDLFNBQVUsQ0FBQyxZQUFZO2dCQUM1QixJQUFJLENBQUMsU0FBVSxDQUFDLGtCQUFrQixFQUNsQyxDQUFDO2dCQUNELFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25ELFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUVELDZCQUE2QjtZQUM3QixpQ0FBaUM7WUFDakMsc0RBQXNEO1lBQ3RELElBQUk7WUFFSixJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ2xDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUMzQyxXQUFXLENBQUMsc0JBQXNCLEdBQUcsWUFBWSxDQUFDO1lBQ3BELENBQUM7WUFFRCxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDOUIsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDakMsQ0FBQztZQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFRLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDO1lBRTlFLElBQ0UsQ0FBQyxXQUFXLENBQUMsU0FBUztnQkFDdEIsQ0FBQyxXQUFXLENBQUMsaUJBQWlCO2dCQUM5QixhQUFhLEtBQUssaUJBQWlCLENBQUMsSUFBSSxFQUN4QyxDQUFDO2dCQUNELE1BQU0sVUFBVSxHQUFHLGFBQWEsS0FBSyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7Z0JBRWhFLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Z0JBRXJDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUk7cUJBQzVDLElBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO3FCQUNwRCxHQUFHLENBQUMsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRyxDQUFDLENBQUM7Z0JBRTFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzlFLENBQUM7WUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFNLFdBQVcsQ0FBQyxDQUFDO1lBRW5ELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNyQixPQUFPO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUNyRCxJQUFJLENBQUMsVUFBVyxFQUNoQixtQkFBbUIsRUFDbkIsSUFBSSxHQUFHLENBQWMsQ0FBQyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUN4RCxDQUFDO2dCQUVGLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsU0FBUztxQkFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMxRCxTQUFTLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7b0JBQ3RDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXZELFFBQVEsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNyQixLQUFLLFNBQVM7NEJBQ1osTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDOzRCQUNuQyxNQUFNO3dCQUNSLEtBQUssZUFBZSxDQUFDLEdBQUc7NEJBQ3RCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQzs0QkFDcEMsTUFBTTt3QkFDUixLQUFLLGVBQWUsQ0FBQyxJQUFJOzRCQUN2QixNQUFNLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQzs0QkFDekIsTUFBTTtvQkFDVixDQUFDO29CQUVELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUMzRCxDQUFDLGdCQUF5QyxFQUFFLEVBQUUsQ0FDNUMsZ0JBQWdCLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQ3hELENBQUM7b0JBQ0YsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQzVCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN4RSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2hFLENBQUM7eUJBQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDbEIsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUM5QixDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7NEJBQy9DLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSzs0QkFDbkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO3lCQUNsQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFFRCxJQUFJLGNBQWMsR0FBbUI7d0JBQ25DLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFLLENBQUMsV0FBVzt3QkFDeEQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSyxDQUFDLGtCQUFrQjtxQkFDdkUsQ0FBQztvQkFDRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDLENBQUMsQ0FBQztnQkFFTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTztxQkFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMxRCxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTSxNQUFNLENBQUMsS0FBYSxJQUFRLENBQUM7SUFFN0IsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFnQjtRQUN2QyxJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFVLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFVLENBQUMsSUFBSSxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNoRixPQUFPO2dCQUNMLEtBQUssRUFBRSxFQUFFO2dCQUNULGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLGVBQWU7Z0JBQ2hELGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLHdCQUF3QjtnQkFDekQsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLG1CQUFtQjtnQkFDcEQsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsNEJBQTRCO2dCQUN2RCxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE9BQU87SUFDVCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFRLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDO1FBQzlFLE9BQU8sYUFBYSxLQUFLLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztJQUN0RCxDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLENBQUM7SUFDMUMsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGdCQUFnQixDQUN2QyxJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7WUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQVUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUM7UUFDeEMsSUFBSSxhQUFxQyxDQUFDO1FBQzFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixhQUFhLEdBQUcsS0FBSztpQkFDbEIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdEQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDcEQsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEUsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBeUJELFdBQVcsQ0FBQyxHQUFZO1FBQ3RCLElBQUksT0FBTyxHQUF5QixJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUM7UUFDdkYsSUFBSSxJQUFJLEdBQVEsR0FBRyxDQUFDLElBQUssQ0FBQztRQUMxQixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxFQUFHLENBQUM7SUFDakIsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSx1QkFBdUIsQ0FBQyxJQUFhO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDO2dCQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUvRSxJQUFJLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLGFBQWEsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLHdFQUF3RTtZQUN4RSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSTtnQkFDOUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM5QyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUM5QixFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2hELE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFhO1FBQ3BDLElBQUksTUFBTSxHQUFtQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELE9BQU8sTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFhO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksWUFBWSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDO2FBQU0sSUFBSSxDQUFDLFlBQVksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLGFBQWEsQ0FBQyxJQUFhO1FBQ3pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqRSxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDO2dCQUM5QyxPQUFPLFdBQVcsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxzQkFBc0IsQ0FBQyxJQUFhO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDdEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsTUFBTSxlQUFlLEdBQ25CLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUN0QixXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDLHNCQUF1QixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztRQUNMLE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsNEJBQTRCLENBQUMsSUFBYTtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3RELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBdUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDL0IsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlO1FBQzNCLElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO2dCQUNqRSxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FDeEMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSyxDQUFDLENBQ2pFLENBQUM7Z0JBRUYsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQWtCLEVBQUUsRUFBRTt3QkFDNUMsSUFBSSxVQUFVLEdBQ1osTUFBTSxJQUFJLENBQUMsU0FBVSxDQUFDLHlCQUF5QixFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNqRixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7NEJBQ2hCLFVBQVUsR0FBRztnQ0FDWCxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxNQUFNO2dDQUM5QixLQUFLLEVBQUUsU0FBUztnQ0FDaEIsSUFBSSxFQUFFLGtCQUFrQixDQUFDLE1BQU07NkJBQ2hDLENBQUM7d0JBQ0osQ0FBQzt3QkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQzNELENBQUMsQ0FBQyxDQUNILENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUM5RSxDQUFDLFlBQW9CLEVBQUUsRUFBRSxDQUN2QixJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFLLENBQUMsVUFBVyxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQ3ZELENBQUMsYUFBNkIsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksS0FBSyxZQUFZLENBQy9FLENBQ0osQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUxQixJQUFJLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzVCLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBMEIsRUFBNkIsRUFBRTtZQUN0RixJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsV0FBVyxFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FDaEYsQ0FBQyxNQUF3QixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQyxZQUFZLENBQzlFLENBQUM7WUFDRixJQUFJLDJCQUEyQixHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUNqRixDQUFDLGdCQUF5QyxFQUFFLEVBQUUsQ0FDNUMsZ0JBQWdCLENBQUMsWUFBWSxLQUFLLFVBQVcsQ0FBQyxZQUFZLENBQzdELENBQUM7WUFDRixJQUFJLEtBQUssQ0FBQztZQUNWLElBQUksV0FBVyxDQUFDO1lBQ2hCLElBQUksMkJBQTJCLEVBQUUsQ0FBQztnQkFDaEMsS0FBSztvQkFDSCwyQkFBMkIsQ0FBQyxLQUFLLEtBQUssdUJBQXVCLENBQUMsU0FBUyxDQUFDLEdBQUc7d0JBQ3pFLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRzt3QkFDckIsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQzNCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3hELFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FDOUQsQ0FBQyxNQUErQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxLQUFLLFVBQVcsQ0FBQyxZQUFZLENBQ3RGLENBQUM7b0JBQ0YsV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsS0FBSyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDbEUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQ3JDLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFVLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNoRixDQUFDO3FCQUFNLENBQUM7b0JBQ04sS0FBSyxHQUFHLFlBQVksQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLFVBQVUsR0FBRyxpQkFBaUIsRUFBRSxVQUFVLENBQUM7WUFDL0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixJQUNFLFVBQVUsQ0FBQyxTQUFTLEtBQUssMEJBQTBCO29CQUNuRCxVQUFVLENBQUMsU0FBUyxLQUFLLHlCQUF5QixFQUNsRCxDQUFDO29CQUNELElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksaUJBQWlCLENBQUM7b0JBQzVELFVBQVUsR0FBRzt3QkFDWCxJQUFJLEVBQUUsNEJBQTRCLENBQUMsUUFBUTt3QkFDM0MsVUFBVTtxQkFDWCxDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLHFCQUFxQixFQUFFLENBQUM7b0JBQzFELElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDO29CQUN2RCxVQUFVLEdBQUc7d0JBQ1gsSUFBSSxFQUFFLDRCQUE0QixDQUFDLElBQUk7d0JBQ3ZDLFVBQVU7cUJBQ1gsQ0FBQztnQkFDSixDQUFDO3FCQUFNLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO29CQUMxRCxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztvQkFDakQsVUFBVSxHQUFHO3dCQUNYLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxJQUFJO3dCQUN2QyxVQUFVO3FCQUNYLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztvQkFDeEQsVUFBVSxHQUFHO3dCQUNYLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxRQUFRO3FCQUM1QyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTztnQkFDTCxHQUFHLGlCQUFpQjtnQkFDcEIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osWUFBWSxFQUFFLE9BQU8sR0FBRyxVQUFVLENBQUMsWUFBWTtnQkFDL0MsS0FBSztnQkFDTCxXQUFXO2dCQUNYLFVBQVU7Z0JBQ1YsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO2FBQ3hCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxDQUMzRSxDQUFDLFdBQTZCLEVBQUUsRUFBRSxDQUNoQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFvQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDN0YsQ0FBQztRQUVGLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFNBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQW9CLEVBQUUsRUFBRTtnQkFDckUsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDVixLQUFLLEVBQUUsRUFBRTtvQkFDVCxZQUFZLEVBQUUsZ0JBQWdCO29CQUM5QixPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLG9CQUFvQixDQUFDLE1BQU07NEJBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQ2pDLHdEQUF3RDs0QkFDeEQsSUFBSSxFQUFFO2dDQUNKO29DQUNFLElBQUksRUFBRSxZQUFZO2lDQUNuQjs2QkFDRjs0QkFDRCxLQUFLLEVBQUUsU0FBUzs0QkFDaEIsWUFBWSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDekIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQ0FDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQzs0QkFDcEMsQ0FBQyxDQUFDO3lCQUNMO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xGLElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxPQUFPLEVBQUUsZUFBZSxLQUFLLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM3RSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQztnQkFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDVixLQUFLLEVBQUUsRUFBRTtvQkFDVCxZQUFZLEVBQUUsU0FBUztvQkFDdkIsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxJQUFJOzRCQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOzRCQUNqQyxJQUFJLEVBQUUsSUFBSTs0QkFDViwyQkFBMkIsRUFBRSxTQUFTOzRCQUN0QyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQzVDLElBQUksRUFBRSxFQUFFO3lCQUNUO3FCQUNGO29CQUNELFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQWdCO1FBQ3hDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUM5QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUN4QixJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxRQUFTLEVBQ25DLElBQUksQ0FBQyxTQUFVLENBQUMsY0FBYyxFQUM5QixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQ2pCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBVTtRQUN2QyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3hCLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLFFBQVMsRUFDbkMsSUFBSSxDQUFDLFNBQVUsQ0FBQyxjQUFjLEVBQzlCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFDakIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBVyxFQUFFLEdBQVEsRUFBRSxRQUFhO1FBQ3hELElBQUksU0FBbUIsQ0FBQztRQUV4QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFnQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBRUQsU0FBUyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUM1QixJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUNELFNBQVMsQ0FBQyxNQUFNLEdBQUc7WUFDakIsR0FBRyxRQUFRLENBQUMsTUFBTTtZQUNsQixLQUFLLEVBQUUsR0FBRztTQUNYLENBQUM7UUFFRixJQUFJLGFBQWEsR0FBUTtZQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxZQUFZO1lBQzFDLFFBQVEsRUFBRSxTQUFTO1NBQ3BCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLENBQUM7WUFDbkQsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsT0FBUSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBVSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQzlELElBQUksQ0FBQyxTQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDakQsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsY0FBYztZQUN4QyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUU7U0FDZixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsUUFBa0I7UUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsSUFBSSxHQUFHO2dCQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSztnQkFDckIsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUk7Z0JBQzdCLEtBQUssRUFBRSxTQUFTO2FBQ2pCLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLCtCQUErQixDQUFDLFFBQVEsQ0FBQyxVQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLFNBQVM7UUFDZCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRU0sT0FBTyxDQUFDLE9BQWdCO1FBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNNLGFBQWEsQ0FBQyxPQUFnQjtRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxhQUFhLENBQUMsT0FBZ0I7UUFDcEMsSUFBSSxnQkFBc0MsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLENBQUM7WUFDOUMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNyRixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUU3RSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDckMsQ0FBQyxRQUFrQixFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUMvRCxDQUFDO2dCQUNGLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7b0JBQzVDLE9BQU87Z0JBQ1QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBVTtRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUNoRCxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUMzQyxDQUFDO1lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFVLEVBQUUsR0FBSSxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLFNBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFpQjtRQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUV0QixNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsU0FBVSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQ3hCLFdBQW1DLEVBQ25DLGFBQXFDO1FBRXJDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxRQUFRLEdBQWEsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBa0IsRUFBRSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztZQUMxRixJQUFJLFVBQVUsR0FBYSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQzlGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FDckQsSUFBSSxDQUFDLFNBQVUsRUFDZixRQUFRLEVBQ1IsVUFBVSxDQUNYLENBQUM7WUFDRixJQUFJLENBQUMsU0FBVSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxVQUFVLEdBQW9CO1lBQ2hDLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsd0JBQXdCO2FBQ2hDO1lBQ0QsSUFBSSxFQUFFLEVBQUU7WUFDUixlQUFlLEVBQUUsMkJBQTJCO1lBQzVDLHFCQUFxQixFQUFFO2dCQUNyQixNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLGNBQWM7b0JBQzFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJO29CQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87aUJBQ3RCO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBTUQsY0FBYyxDQUFDLEtBQVksRUFBRSxHQUFZO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTtZQUN2QyxJQUFJLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU5RSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDcEIsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksUUFBUSxDQUFDLElBQUk7Z0JBQ25DLElBQUksRUFBRSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDOytHQTc1QlUsa0JBQWtCLDJKQWlEbkIsaUJBQWlCLGFBQ2pCLGNBQWM7bUdBbERiLGtCQUFrQixtR0FGbEIsQ0FBQyxnQkFBZ0IsQ0FBQywwR0FZRCxnQkFBZ0Isc05DdEU5QywydExBdUtBOzs0RkQzR2Esa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLFlBQVksYUFHWCxDQUFDLGdCQUFnQixDQUFDOzswQkFtRDFCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsTUFBTTsyQkFBQyxjQUFjO3lDQTdDZixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBRzBDLFVBQVU7c0JBQXpELFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUt4QixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBKzNCRCxJQUFJO3NCQUF0QixTQUFTO3VCQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NvbnRhaW5lclJlZixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgTWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBTbWFydERpYWxvZ0RhdGEgfSBmcm9tICcuLi9zbWFydC1kaWFsb2cvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBFeHBhbmRhYmxlU2VjdGlvbiB9IGZyb20gJy4uL3NtYXJ0LWV4cGFuZGFibGUtc2VjdGlvbi9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5IH0gZnJvbSAnLi4vc21hcnQtZmlsdGVyLWVkaXRvci9hcGkvbW9kZWwvZmlsdGVyRXhwcmVzc2lvbk9yZGVyQnknO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0VGFibGUsXHJcbiAgU21hcnRUYWJsZUJ1dHRvblR5cGUsXHJcbiAgU21hcnRUYWJsZUhlYWRlcixcclxuICBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLFxyXG4gIFNtYXJ0VGFibGVJbnRlcmZhY2UsXHJcbiAgU21hcnRUYWJsZUludGVyZmFjZVR5cGVFbnVtLFxyXG4gIFNtYXJ0VGFibGVPcmRlcixcclxuICBTbWFydFRhYmxlVHlwZSxcclxuICBTbWFydHRhYmxlQ29tcG9uZW50LFxyXG59IGZyb20gJy4uL3NtYXJ0LXRhYmxlL3Byb2plY3RzJztcclxuaW1wb3J0IHsgVWlBY3Rpb24sIFVpQWN0aW9uQnV0dG9uVHlwZSwgVWlBY3Rpb25EZXNjcmlwdG9yIH0gZnJvbSAnLi4vdmlldy1jb250ZXh0L2FwaSc7XHJcbmltcG9ydCB7XHJcbiAgQ09NUE9ORU5UX0xJQlJBUlksXHJcbiAgQ29tcG9uZW50TGlicmFyeSxcclxuICBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLFxyXG4gIFVpQWN0aW9uVG9vbGJhckNvbXBvbmVudCxcclxufSBmcm9tICcuLi92aWV3LWNvbnRleHQvcHJvamVjdHMnO1xyXG5pbXBvcnQge1xyXG4gIEdyaWRDb2x1bW5NZXRhLFxyXG4gIEdyaWRSb3csXHJcbiAgR3JpZFNlbGVjdGlvbk1vZGUsXHJcbiAgR3JpZFNlbGVjdGlvblR5cGUsXHJcbiAgR3JpZFVwZGF0ZURhdGEsXHJcbiAgR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0sXHJcbn0gZnJvbSAnLi9hcGkvZ3JpZC1hcGknO1xyXG5pbXBvcnQgeyBUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtbGF5b3V0LWRlZmluZXIvdGFibGUtbGF5b3V0LWRlZmluZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgR3JpZFVpQWN0aW9uVHlwZSwgU21hcnRHcmlkLCBTbWFydExheW91dERlZiB9IGZyb20gJy4vbW9kZWxzL21vZGVsJztcclxuaW1wb3J0IHsgU21hcnRHcmlkU2VydmljZSB9IGZyb20gJy4vc21hcnQtZ3JpZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IE1lbnUgfSBmcm9tICdwcmltZW5nL21lbnUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzbWFydC1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnQtZ3JpZC5jb21wb25lbnQuY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbU21hcnRHcmlkU2VydmljZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTbWFydEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XHJcbiAgLy8gcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0UGFnZVNpemU6IG51bWJlciA9IDEwO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbNSwgMTAsIDI1LCA1MF07XHJcbiAgY29tcG9uZW50TGlicmFyeSA9IENvbXBvbmVudExpYnJhcnk7XHJcbiAgcHJpdmF0ZSBfZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBJbnB1dCgpIHNtYXJ0R3JpZD86IFNtYXJ0R3JpZDtcclxuICBASW5wdXQoKSB1dWlkPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRldjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyB0YWJsZVxyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHZjUmVmVGFibGU/OiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIGNvbXBvbmVudFJlZlRhYmxlPzogQ29tcG9uZW50UmVmPFNtYXJ0dGFibGVDb21wb25lbnQ+O1xyXG4gIHNtYXJ0VGFibGUhOiBTbWFydFRhYmxlPEdyaWRSb3c+O1xyXG5cclxuICAvLyB0b29sYmFyXHJcbiAgQFZpZXdDaGlsZCgndG9vbGJhcicpIHRvb2xiYXI/OiBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQ7XHJcblxyXG4gIC8vIGV4cGFuZGFibGVcclxuICAvLyBncmlkRGF0YVxyXG4gIGV4cGFuZGFibGVTZWN0aW9ucz86IEV4cGFuZGFibGVTZWN0aW9uPGFueT5bXTtcclxuXHJcbiAgcGFnZUV2ZW50PzogUGFnZUV2ZW50O1xyXG4gIGRhdGFzb3VyY2U/OiBudWxsO1xyXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xyXG4gIGxlbmd0aD86IG51bWJlcjtcclxuICBwYWdlSW5kZXg/OiBudW1iZXI7XHJcbiAgdmFsdWVzOiBhbnk7XHJcbiAgZ3JpZFRhYmxlITogU21hcnRUYWJsZTxhbnk+O1xyXG5cclxuICBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zO1xyXG5cclxuICBzZWxlY3Rpb25DaGFuZ2VzOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICB1aUFjdGlvbkRlc2NyaXB0b3JzOiBNYXA8c3RyaW5nLCBVaUFjdGlvbkRlc2NyaXB0b3I+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBhZnRlclZpZXdJbml0RXhlY3V0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc0Jsb2NrZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyB0cmVlXHJcbiAgdHJlZUNvbnRyb2w/OiBGbGF0VHJlZUNvbnRyb2w8R3JpZFJvdz47XHJcbiAgdHJlZUZsYXR0ZW5lcj86IE1hdFRyZWVGbGF0dGVuZXI8R3JpZFJvdywgR3JpZFJvdz47XHJcbiAgdHJlZURhdGFTb3VyY2U/OiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8R3JpZFJvdywgR3JpZFJvdz47XHJcbiAgdHJlZUNoZWNrbGlzdFNlbGVjdGlvbj86IFNlbGVjdGlvbk1vZGVsPEdyaWRSb3c+O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2VydmljZTogU21hcnRHcmlkU2VydmljZSxcclxuICAgIHByaXZhdGUgY2ZTZXJ2aWNlOiBDb21wb25lbnRGYWN0b3J5U2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIHVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2U6IFVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KENPTVBPTkVOVF9MSUJSQVJZKSBwdWJsaWMgY29tcExpYjogQ29tcG9uZW50TGlicmFyeSxcclxuICAgIEBJbmplY3QoJ2dyaWRNZW51SWNvbicpIHByaXZhdGUgZ3JpZE1lbnVJY29uPzogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyBjYWxsZWQgYWZ0ZXIgZXZlcnkgc2VydmljZSBjYWxsIChsb2FkLCBzYXZlLCByZWZyZXNoLCBldGMuKVxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbDtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ3NtYXJ0R3JpZCddKSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkID0gY2hhbmdlc1snc21hcnRHcmlkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnNlcnZpY2UucGFnaW5hdG9yID0gdGhpcy5zbWFydEdyaWQ/LnBhZ2luYXRvcjtcclxuICAgICAgdGhpcy5zZXR1cFRvb2xiYXIoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWyd1dWlkJ10pIHtcclxuICAgICAgdGhpcy51dWlkID0gY2hhbmdlc1sndXVpZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXRFeGVjdXRlZCAmJiB0aGlzLnV1aWQgJiYgdGhpcy5zbWFydEdyaWQpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgLy8gZm9yIGRldiBwdXJwb3Nlc1xyXG4gICAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCkge1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsO1xyXG4gICAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy51dWlkICYmIHRoaXMuc21hcnRHcmlkICYmICF0aGlzLmRldikge1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgdGhlIHNlbGVjdGVkIHJvd3Mgb2YgdGhlIHRhYmxlXHJcbiAgICovXHJcbiAgcHVibGljIGdldFNlbGVjdGVkUm93cygpOiBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93PiB7XHJcbiAgICBpZiAoIXRoaXMuc21hcnRUYWJsZS5zZWxlY3Rpb24pIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgcmV0dXJuIHRoaXMuc21hcnRUYWJsZSEuc2VsZWN0aW9uITtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgbWV0aG9kIHNlbmRzIGEgR0VUIHJlcXVlc3QgdG8gdGhlIGdlbmVyaWMgR3JpZEFQSSBhbmQgcmVmcmVzaGVzIHRoZSBwcmVzZW50ZWRcclxuICAgKiBncmlkIHdpdGggdGhlIG5ld2VzdCBvbmUuXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHJlZnJlc2goKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNldHVwVG9vbGJhcigpO1xyXG4gICAgLy8gd2lsbCBjYXVzZSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsQ2hhbmdlZCB0byBmaXJlXHJcbiAgICBpZiAodGhpcy51dWlkKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5sb2FkKHRoaXMudXVpZCwgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXR1cFRvb2xiYXIoKSB7XHJcbiAgICAvLyBjaGVjayBpZiB0b29sYmFyIGlzIGF2YWlsYWJsZSBfYW5kXyBuZWVkIHNldCB1cFxyXG4gICAgaWYgKHRoaXMudG9vbGJhciAmJiB0aGlzLnNtYXJ0R3JpZCkge1xyXG4gICAgICBsZXQgdG9vbGJhcklkID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRJZGVudGlmaWVyICsgJ190b29sYmFyJztcclxuICAgICAgaWYgKHRvb2xiYXJJZCAhPT0gdGhpcy50b29sYmFyLmlkKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyLmlkID0gdG9vbGJhcklkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZ3JpZE1vZGVsID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbDtcclxuICAgIGlmIChncmlkTW9kZWwpIHtcclxuICAgICAgdGhpcy5sZW5ndGggPSBncmlkTW9kZWwudG90YWxSb3dDb3VudDtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IGdyaWRNb2RlbC5wYWdlU2l6ZTtcclxuICAgICAgdGhpcy5wYWdlSW5kZXggPSBncmlkTW9kZWwucGFnZUluZGV4ID8/IDA7XHJcbiAgICAgIGlmIChncmlkTW9kZWwucGFnZVNpemVPcHRpb25zICYmIGdyaWRNb2RlbC5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gZ3JpZE1vZGVsLnBhZ2VTaXplT3B0aW9ucztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucztcclxuICAgICAgfVxyXG4gICAgICBpZiAoZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5zaG93RWRpdENvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuc2hvd0VkaXRDb2x1bW5zID0gZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5zaG93RWRpdENvbHVtbnM7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGtpbmQgPSBncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LmtpbmQ7XHJcbiAgICAgIGlmIChraW5kKSB7XHJcbiAgICAgICAgbGV0IGxheW91dERlZjtcclxuICAgICAgICBpZiAoa2luZCA9PT0gR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0uVEFCTEUpIHtcclxuICAgICAgICAgIGxheW91dERlZiA9IFNtYXJ0TGF5b3V0RGVmLlRBQkxFO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gR3JpZFZpZXdEZXNjcmlwdG9yS2luZEVudW0uVFJFRSkge1xyXG4gICAgICAgICAgbGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuVFJFRTtcclxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLkNBUkRTKSB7XHJcbiAgICAgICAgICBsYXlvdXREZWYgPSBTbWFydExheW91dERlZi5DQVJEO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGF5b3V0RGVmKSB7XHJcbiAgICAgICAgICB0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID0gbGF5b3V0RGVmO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoZ3JpZE1vZGVsPy5wYWdpbmF0b3IgPT09IHRydWUgfHwgZ3JpZE1vZGVsPy5wYWdpbmF0b3IgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnBhZ2luYXRvciA9IGdyaWRNb2RlbC5wYWdpbmF0b3I7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnBhZ2luYXRvciA9IHRoaXMuc21hcnRHcmlkIS5wYWdpbmF0b3I7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0dyaWRNb2RlbCBpcyB1bmRlZmluZWQgaW4gY29tcG9uZW50IScpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmKSB7XHJcbiAgICAgIC8vIGZhbGxiYWNrLCBkZWZhdWx0IFRBQkxFXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPSBTbWFydExheW91dERlZi5UQUJMRTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UQUJMRSkge1xyXG4gICAgICB0aGlzLnJlbmRlclRhYmxlKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLkVYUEFOREFCTEUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJFeHBhbmRhYmxlU2VjdGlvbnMoKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuQ0FSRCkge1xyXG4gICAgICB0aGlzLnJlbmRlckNhcmRzKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLlRSRUUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJUcmVlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclRhYmxlKCkge1xyXG4gICAgdGhpcy52Y1JlZlRhYmxlPy5jbGVhcigpO1xyXG4gICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZSA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyVGFibGUoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmNsZWFyVHJlZSgpO1xyXG4gICAgaWYgKHRoaXMuY29tcExpYiA9PT0gdGhpcy5jb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuICAgICAgdGhpcy5wYWdlSW5kZXggPSB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnBhZ2VTaXplISAqIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwucGFnZUluZGV4ITtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gW107XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8ub3JkZXJlZENvbHVtbk5hbWVzLm1hcCgob3JkZXJlZENvbDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5jb2x1bW5zLm1hcCgoY29sdW06IEdyaWRDb2x1bW5NZXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAob3JkZXJlZENvbCA9PT0gY29sdW0ucHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5wdXNoKGNvbHVtLmxhYmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHRhYmxlUm93ID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCEucGFnZS5yb3dzIS5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4gaXRlbTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghdGFibGVSb3cubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBwbGFjZUhvbGRlclJvdzogYW55ID0ge307XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uY29sdW1ucy5tYXAoKG1ldGE6IEdyaWRDb2x1bW5NZXRhKSA9PiB7XHJcbiAgICAgICAgcGxhY2VIb2xkZXJSb3dbbWV0YS5wcm9wZXJ0eU5hbWVdID0gdW5kZWZpbmVkO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MgPSBbcGxhY2VIb2xkZXJSb3ddO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0YWJsZVR5cGU7XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy50YWJsZVR5cGUpIHtcclxuICAgICAgdGFibGVUeXBlID0gdGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnLnRhYmxlVHlwZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZXJ2aWNlLmdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uVHlwZSkge1xyXG4gICAgICB0YWJsZVR5cGUgPVxyXG4gICAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldy5kZXNjcmlwdG9yLnNlbGVjdGlvblR5cGUgPT09IEdyaWRTZWxlY3Rpb25UeXBlLkNIRUNLQk9YXHJcbiAgICAgICAgICA/IFNtYXJ0VGFibGVUeXBlLkNIRUNLX0JPWFxyXG4gICAgICAgICAgOiBTbWFydFRhYmxlVHlwZS5ST1dfU0VMRUNUO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGFibGVUeXBlID0gU21hcnRUYWJsZVR5cGUuSU5IRVJJVEVEO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UQUJMRSkge1xyXG4gICAgICBsZXQgdGFibGVDb25maWc6IFNtYXJ0VGFibGVJbnRlcmZhY2U8R3JpZFJvdz4gPSB7XHJcbiAgICAgICAgLi4udGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnLFxyXG4gICAgICAgIHRhYmxlUm93czogdGFibGVSb3csXHJcbiAgICAgICAgdGFibGVUeXBlLFxyXG4gICAgICAgIGN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzOiBhd2FpdCB0aGlzLmNvbnN0cnVjdEhlYWRlcigpISxcclxuICAgICAgICBleHBhbmRhYmxlOiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZSxcclxuICAgICAgICBleHBhbmRlZENvbXBvbmVudDogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGVkQ29tcG9uZW50LFxyXG4gICAgICAgIHR5cGU6IFNtYXJ0VGFibGVJbnRlcmZhY2VUeXBlRW51bS5OT1JNQUwsXHJcbiAgICAgICAgc29ydGFibGU6IHRydWUsXHJcbiAgICAgICAgZGVmYXVsdEFjdGlvbkNvZGVzOiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zISxcclxuICAgICAgICBkZWZhdWx0QWN0aW9uczogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9ucz8ubWFwKChjb2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHR5cGU6XHJcbiAgICAgICAgICAgICAgY29kZSA9PT0gJ19hY3Rpb25TZXBhcmF0b3JfJ1xyXG4gICAgICAgICAgICAgICAgPyBTbWFydFRhYmxlQnV0dG9uVHlwZS5TRVBBUkFUT1JcclxuICAgICAgICAgICAgICAgIDogU21hcnRUYWJsZUJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogdGhpcy5leGVjdXRlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgICAgICAgIC8vIGxhYmVsOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IoeyBjb2RlOiBjb2RlIH0pLFxyXG4gICAgICAgICAgICB0cmFuc2xhdG9yOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgLy8gYXJnczogW1xyXG4gICAgICAgICAgICAvLyAgIHtcclxuICAgICAgICAgICAgLy8gICAgIGNvZGU6IGNvZGUsXHJcbiAgICAgICAgICAgIC8vICAgfSxcclxuICAgICAgICAgICAgLy8gXSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSksXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5oaWdobGlnaHRQcm9wZXJ0eSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uaGlnaGxpZ2h0Q2xhc3NcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcuaGlnaGxpZ2h0Q2xhc3MgPSB0aGlzLnNtYXJ0R3JpZC5ncmlkTW9kZWwudmlldy5kZXNjcmlwdG9yLmhpZ2hsaWdodENsYXNzO1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLmhpZ2hsaWdodFByb3BlcnR5ID0gdGhpcy5zbWFydEdyaWQuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5oaWdobGlnaHRQcm9wZXJ0eTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSAmJlxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5zZXJ2aWNlVG9Vc2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uU2VsZWN0aW9uID0gdGhpcy5vblNlbGVjdC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uQWxsU2VsZWN0aW9uID0gdGhpcy5vblNlbGVjdEFsbC5iaW5kKHRoaXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcmVwYXJlZCBmb3Igc2ltcGxlIGNsaWNrc1xyXG4gICAgICAvLyBpZiAoIXRhYmxlQ29uZmlnLm9uUm93Q2xpY2spIHtcclxuICAgICAgLy8gICB0YWJsZUNvbmZpZy5vblJvd0NsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIGlmICghdGFibGVDb25maWcub25Sb3dEb3VibGVDbGljaykge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLm9uUm93RG91YmxlQ2xpY2sgPSB0aGlzLm9uRG91YmxlQ2xpY2suYmluZCh0aGlzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCF0YWJsZUNvbmZpZy5pc1Jvd0Rpc2FibGVkUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcuc2VsZWN0YWJsZVByb3BlcnR5TmFtZSA9ICdzZWxlY3RhYmxlJztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRhYmxlQ29uZmlnLmFzeW5jT25FeHBhbmQpIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5yb3dFeHBhbmRlciA9IHRoaXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlcnZpY2UhLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5zZWxlY3Rpb25Nb2RlO1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgICF0YWJsZUNvbmZpZy5zZWxlY3Rpb24gJiZcclxuICAgICAgICAhdGFibGVDb25maWcuc2VsZWN0aW9uUHJvcGVydHkgJiZcclxuICAgICAgICBzZWxlY3Rpb25Nb2RlICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5OT05FXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBzZWxlY3Rpb25Nb2RlID09PSBHcmlkU2VsZWN0aW9uTW9kZS5NVUxUSVBMRTtcclxuXHJcbiAgICAgICAgdGFibGVDb25maWcuc2VsZWN0aW9uUHJvcGVydHkgPSAnaWQnO1xyXG5cclxuICAgICAgICBjb25zdCBzZWxlY3RlZElkcyA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZVxyXG4gICAgICAgICAgLnJvd3MhLmZpbHRlcigoZ3JpZFJvdzogR3JpZFJvdykgPT4gZ3JpZFJvdy5zZWxlY3RlZClcclxuICAgICAgICAgIC5tYXAoKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuaWQhKTtcclxuXHJcbiAgICAgICAgdGFibGVDb25maWcuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4oaXNNdWx0aXBsZSwgc2VsZWN0ZWRJZHMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNtYXJ0VGFibGUgPSBuZXcgU21hcnRUYWJsZTxhbnk+KHRhYmxlQ29uZmlnKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZlRhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS51cGRhdGVTbWFydFRhYmxlKHRoaXMuc21hcnRUYWJsZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52Y1JlZlRhYmxlPy5jbGVhcigpO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMudmNSZWZUYWJsZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZlRhYmxlID0gdGhpcy5jZlNlcnZpY2UuY3JlYXRlQ29tcG9uZW50KFxyXG4gICAgICAgICAgdGhpcy52Y1JlZlRhYmxlISxcclxuICAgICAgICAgIFNtYXJ0dGFibGVDb21wb25lbnQsXHJcbiAgICAgICAgICBuZXcgTWFwPHN0cmluZywgYW55PihbWydzbWFydFRhYmxlJywgdGhpcy5zbWFydFRhYmxlXV0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2Uuc29ydEV2ZW50XHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS5fZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGhlYWRlci5wcm9wZXJ0eU5hbWUgPSBoZWFkZXIucHJvcGVydHlOYW1lLnN1YnN0cmluZyg1KTtcclxuXHJcbiAgICAgICAgICAgIHN3aXRjaCAoaGVhZGVyLm9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSB1bmRlZmluZWQ6XHJcbiAgICAgICAgICAgICAgICBoZWFkZXIub3JkZXIgPSBTbWFydFRhYmxlT3JkZXIuQVNDO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBTbWFydFRhYmxlT3JkZXIuQVNDOlxyXG4gICAgICAgICAgICAgICAgaGVhZGVyLm9yZGVyID0gU21hcnRUYWJsZU9yZGVyLkRFU0M7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlIFNtYXJ0VGFibGVPcmRlci5ERVNDOlxyXG4gICAgICAgICAgICAgICAgaGVhZGVyLm9yZGVyID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXIgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LmZpbmQoXHJcbiAgICAgICAgICAgICAgKGZpbHRlckV4cHJlc3Npb246IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5KSA9PlxyXG4gICAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbi5wcm9wZXJ0eU5hbWUgPT09IGhlYWRlci5wcm9wZXJ0eU5hbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGZpbHRlciAmJiAhaGVhZGVyLm9yZGVyKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3Py5vcmRlckJ5TGlzdC5pbmRleE9mKGZpbHRlcik7XHJcbiAgICAgICAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3Py5vcmRlckJ5TGlzdC5zcGxpY2UoaW5kZXghLCAxKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIpIHtcclxuICAgICAgICAgICAgICBmaWx0ZXIub3JkZXIgPSBoZWFkZXIub3JkZXI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG9yZGVyOiBoZWFkZXIub3JkZXIsXHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWU6IGhlYWRlci5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBncmlkVXBkYXRlRGF0YTogR3JpZFVwZGF0ZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgb3JkZXJCeUxpc3Q6IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QsXHJcbiAgICAgICAgICAgICAgb3JkZXJlZENvbHVtbk5hbWVzOiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyZWRDb2x1bW5OYW1lcyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLnNvcnQodGhpcy5zbWFydEdyaWQhLCBncmlkVXBkYXRlRGF0YSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZS5pbnN0YW5jZS5zbWFydFRhYmxlLnNlbGVjdGlvbj8uY2hhbmdlZFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlcy5uZXh0KHJvdyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cGFuZChyb3dJZDogbnVtYmVyKTogYW55IHt9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBleHBhbmRBc3luYyhyb3dJbmRleDogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cykge1xyXG4gICAgICBsZXQgcm93ID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3Nbcm93SW5kZXhdO1xyXG4gICAgICBpZiAocm93ICYmIHJvdy5pZCkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNlcnZpY2UuZXhwYW5kKHRoaXMuc21hcnRHcmlkISwgcm93LmlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuc2VydmljZS5leHBhbmQodGhpcy5zbWFydEdyaWQhLCByb3dJbmRleC50b1N0cmluZygpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyRXhwYW5kYWJsZVNlY3Rpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBhbmRhYmxlU2VjdGlvbnMgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsIS5wYWdlLnJvd3MhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgIGhlYWRlckNvbXBvbmVudDogdGhpcy5zbWFydEdyaWQhLmhlYWRlckNvbXBvbmVudCxcclxuICAgICAgICBoZWFkZXJJbnB1dE5hbWU6IHRoaXMuc21hcnRHcmlkIS5oZWFkZXJDb21wb25lbnRJbnB1dE5hbWUsXHJcbiAgICAgICAgaGVhZGVyRGF0YTogaXRlbSxcclxuICAgICAgICBjdXN0b21Db21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRhYmxlQ29tcG9uZW50LFxyXG4gICAgICAgIGlucHV0TmFtZTogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGFibGVDb21wb25lbnRJbnB1dE5hbWUsXHJcbiAgICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJDYXJkcygpOiB2b2lkIHtcclxuICAgIC8vIFRPRE9cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNNdWx0aXBsZVNlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbk1vZGUgPSB0aGlzLnNlcnZpY2UhLmdyaWRNb2RlbC52aWV3Py5kZXNjcmlwdG9yPy5zZWxlY3Rpb25Nb2RlO1xyXG4gICAgcmV0dXJuIHNlbGVjdGlvbk1vZGUgPT09IEdyaWRTZWxlY3Rpb25Nb2RlLk1VTFRJUExFO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclRyZWUoKSB7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy50cmVlRGF0YVNvdXJjZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyVHJlZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xlYXJUYWJsZSgpO1xyXG4gICAgaWYgKCF0aGlzLnRyZWVEYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKFxyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtZXIsXHJcbiAgICAgICAgdGhpcy5nZXRMZXZlbCxcclxuICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZSxcclxuICAgICAgICB0aGlzLmdldENoaWxkcmVuXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEdyaWRSb3c+KHRoaXMuZ2V0TGV2ZWwsIHRoaXMuaXNFeHBhbmRhYmxlKTtcclxuICAgICAgdGhpcy50cmVlRGF0YVNvdXJjZSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UodGhpcy50cmVlQ29udHJvbCwgdGhpcy50cmVlRmxhdHRlbmVyKTtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPEdyaWRSb3c+KHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKTtcclxuICAgIH1cclxuICAgIGxldCBub2RlcyA9IHRoaXMudHJlZUNvbnRyb2w/LmRhdGFOb2RlcztcclxuICAgIGxldCBleHBhbmRlZE5vZGVzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdO1xyXG4gICAgaWYgKG5vZGVzKSB7XHJcbiAgICAgIGV4cGFuZGVkTm9kZXMgPSBub2Rlc1xyXG4gICAgICAgIC5maWx0ZXIoKG5vZGUpID0+IHRoaXMudHJlZUNvbnRyb2w/LmlzRXhwYW5kYWJsZShub2RlKSlcclxuICAgICAgICAuZmlsdGVyKChub2RlKSA9PiB0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGVkKG5vZGUpKVxyXG4gICAgICAgIC5tYXAoKG5vZGUpID0+IG5vZGUuaWQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZXhwYW5kZWROb2RlcyA9IFtdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MhLmZvckVhY2goKHJvdzogYW55KSA9PiAocm93LmxldmVsID0gdW5kZWZpbmVkKSk7XHJcbiAgICB0aGlzLnRyZWVEYXRhU291cmNlLmRhdGEgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyEuZmlsdGVyKChyb3cpID0+ICFyb3cucGFyZW50KTtcclxuICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uY2xlYXIoKTtcclxuICAgIHRoaXMudHJlZUNvbnRyb2w/LmRhdGFOb2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XHJcbiAgICAgIGlmIChub2RlLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uPy5zZWxlY3Qobm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy50cmVlQ29udHJvbD8uY29sbGFwc2VBbGwoKTtcclxuICAgIGV4cGFuZGVkTm9kZXMuZm9yRWFjaCgocm93SWQpID0+IHtcclxuICAgICAgbGV0IHJvdyA9IHRoaXMudHJlZUNvbnRyb2w/LmRhdGFOb2Rlcy5maW5kKChyb3cpID0+IHJvd0lkID09PSByb3cuaWQpO1xyXG4gICAgICBpZiAocm93KSB7XHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbD8uZXhwYW5kKHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGV2ZWwgPSAobm9kZTogYW55KSA9PiBub2RlLmxldmVsID8/IDA7XHJcblxyXG4gIGlzRXhwYW5kYWJsZSA9IChub2RlOiBHcmlkUm93KSA9PiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2UpO1xyXG5cclxuICBnZXRDaGlsZHJlbiA9IChub2RlOiBHcmlkUm93KTogR3JpZFJvd1tdID0+IHtcclxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCByb3dzID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5wYWdlLnJvd3M/LmZpbHRlcigocm93KSA9PlxyXG4gICAgICAgIG5vZGUuY2hpbGRyZW4/LnNvbWUoKGNoaWxkKSA9PiBjaGlsZCA9PT0gcm93LmlkISlcclxuICAgICAgKTtcclxuICAgICAgaWYgKHJvd3MpIHtcclxuICAgICAgICByZXR1cm4gcm93cztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH07XHJcblxyXG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgX25vZGVEYXRhOiBHcmlkUm93KSA9PiB0aGlzLmlzRXhwYW5kYWJsZShfbm9kZURhdGEpO1xyXG5cclxuICB0cmFuc2Zvcm1lciA9IChyb3c6IEdyaWRSb3csIGxldmVsOiBudW1iZXIpID0+IHtcclxuICAgIChyb3cgYXMgYW55KS5sZXZlbCA9IGxldmVsO1xyXG4gICAgcmV0dXJuIHJvdztcclxuICB9O1xyXG5cclxuICBnZXRUcmVlSXRlbShyb3c6IEdyaWRSb3cpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNvbHVtbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXM7XHJcbiAgICBsZXQgZGF0YTogYW55ID0gcm93LmRhdGEhO1xyXG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sKSA9PiBkYXRhW2NvbF0pLmpvaW4oJyAnKTtcclxuICAgIH1cclxuICAgIHJldHVybiByb3cuaWQhO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvZ2dsZSB0aGUgdHJlZU5vZGUgc2VsZWN0aW9uLiBTZWxlY3QvZGVzZWxlY3QgYWxsIHRoZSBkZXNjZW5kYW50cyBub2RlICovXHJcbiAgdHJlZU5vZGVTZWxlY3Rpb25Ub2dnbGUobm9kZTogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHNlbGVjdGlvbkJlZm9yZSA9IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5tYXAoKHJvdykgPT4gcm93LmlkKTtcclxuICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi50b2dnbGUobm9kZSk7XHJcbiAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcclxuICAgICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sIS5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcclxuICAgICAgICA/IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3QoLi4uZGVzY2VuZGFudHMpXHJcbiAgICAgICAgOiB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3QoLi4uZGVzY2VuZGFudHMpO1xyXG4gICAgICB0aGlzLmNoZWNrQWxsUGFyZW50c1NlbGVjdGlvbihub2RlKTtcclxuICAgIH1cclxuICAgIGxldCBzZWxlY3Rpb25BZnRlciA9IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3RlZC5tYXAoKHJvdykgPT4gcm93LmlkKTtcclxuXHJcbiAgICBsZXQgc2VsZWN0ZWRJZHMgPSBzZWxlY3Rpb25BZnRlci5maWx0ZXIoKHMpID0+ICFzZWxlY3Rpb25CZWZvcmUuaW5jbHVkZXMocykpO1xyXG4gICAgbGV0IHVuc2VsZWN0ZWRJZHMgPSBzZWxlY3Rpb25CZWZvcmUuZmlsdGVyKChzKSA9PiAhc2VsZWN0aW9uQWZ0ZXIuaW5jbHVkZXMocykpO1xyXG4gICAgaWYgKHRoaXMuZGV2KSB7XHJcbiAgICAgIC8vIHdoZW4gc2VydmljZSBjYWxsIGlzIGFjdGl2ZSAoIWRldiksIG9uU2VsZWN0IHdpbGwgdG9nZ2xlIHJvdy5zZWxlY3RlZFxyXG4gICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2Uucm93c1xyXG4gICAgICAgID8uZmlsdGVyKChyb3cpID0+IHNlbGVjdGVkSWRzLmluY2x1ZGVzKHJvdy5pZCkpXHJcbiAgICAgICAgLmZvckVhY2goKHJvdykgPT4gKHJvdy5zZWxlY3RlZCA9IHRydWUpKTtcclxuICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3NcclxuICAgICAgICA/LmZpbHRlcigocm93KSA9PiB1bnNlbGVjdGVkSWRzLmluY2x1ZGVzKHJvdy5pZCkpXHJcbiAgICAgICAgLmZvckVhY2goKHJvdykgPT4gKHJvdy5zZWxlY3RlZCA9IGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uU2VsZWN0Um93cyhzZWxlY3RlZElkcywgdW5zZWxlY3RlZElkcyk7XHJcbiAgfVxyXG5cclxuICBjaGVja0FsbFBhcmVudHNTZWxlY3Rpb24obm9kZTogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgbGV0IHBhcmVudDogR3JpZFJvdyB8IG51bGwgPSB0aGlzLmdldFBhcmVudE5vZGUobm9kZSk7XHJcbiAgICB3aGlsZSAocGFyZW50KSB7XHJcbiAgICAgIHRoaXMuY2hlY2tQYXJlbnROb2RlU2VsZWN0aW9uKHBhcmVudCk7XHJcbiAgICAgIHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50Tm9kZShwYXJlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tQYXJlbnROb2RlU2VsZWN0aW9uKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG5vZGVTZWxlY3RlZCA9IHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpO1xyXG4gICAgY29uc3QgZGVzY0FsbFNlbGVjdGVkID0gdGhpcy5kZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGUpO1xyXG4gICAgaWYgKG5vZGVTZWxlY3RlZCAmJiAhZGVzY0FsbFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5kZXNlbGVjdChub2RlKTtcclxuICAgIH0gZWxzZSBpZiAoIW5vZGVTZWxlY3RlZCAmJiBkZXNjQWxsU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLnNlbGVjdChub2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qIEdldCB0aGUgcGFyZW50IG5vZGUgb2YgYSBub2RlICovXHJcbiAgZ2V0UGFyZW50Tm9kZShub2RlOiBHcmlkUm93KTogR3JpZFJvdyB8IG51bGwge1xyXG4gICAgY29uc3QgY3VycmVudExldmVsID0gdGhpcy5nZXRMZXZlbChub2RlKTtcclxuXHJcbiAgICBpZiAoY3VycmVudExldmVsIDwgMSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy50cmVlQ29udHJvbCEuZGF0YU5vZGVzLmluZGV4T2Yobm9kZSkgLSAxO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpID49IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMudHJlZUNvbnRyb2whLmRhdGFOb2Rlc1tpXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmdldExldmVsKGN1cnJlbnROb2RlKSA8IGN1cnJlbnRMZXZlbCkge1xyXG4gICAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciBhbGwgdGhlIGRlc2NlbmRhbnRzIG9mIHRoZSBub2RlIGFyZSBzZWxlY3RlZC4gKi9cclxuICBkZXNjZW5kYW50c0FsbFNlbGVjdGVkKG5vZGU6IEdyaWRSb3cpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbCB8fCAhdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICAgIGNvbnN0IGRlc2NBbGxTZWxlY3RlZCA9XHJcbiAgICAgIGRlc2NlbmRhbnRzLmxlbmd0aCA+IDAgJiZcclxuICAgICAgZGVzY2VuZGFudHMuZXZlcnkoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiEuaXNTZWxlY3RlZChjaGlsZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIGRlc2NBbGxTZWxlY3RlZDtcclxuICB9XHJcblxyXG4gIC8qKiBXaGV0aGVyIHBhcnQgb2YgdGhlIGRlc2NlbmRhbnRzIGFyZSBzZWxlY3RlZCAqL1xyXG4gIGRlc2NlbmRhbnRzUGFydGlhbGx5U2VsZWN0ZWQobm9kZTogR3JpZFJvdyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnRyZWVDb250cm9sIHx8ICF0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGVzY2VuZGFudHMgPSB0aGlzLnRyZWVDb250cm9sLmdldERlc2NlbmRhbnRzKG5vZGUpO1xyXG4gICAgbGV0IHJlc3VsdCA9IGRlc2NlbmRhbnRzLnNvbWUoKGNoaWxkKSA9PiB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24hLmlzU2VsZWN0ZWQoY2hpbGQpKTtcclxuICAgIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSkge1xyXG4gICAgICByZXN1bHQgPSByZXN1bHQgJiYgIXRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGNvbnN0cnVjdEhlYWRlcigpOiBQcm9taXNlPFNtYXJ0VGFibGVIZWFkZXJbXT4ge1xyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzICYmIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzLmxlbmd0aCkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cy5tYXAoYXN5bmMgKGdyaWRSb3c6IEdyaWRSb3cpID0+IHtcclxuICAgICAgICAgIGxldCBuZXdVaUFjdGlvbnMgPSBncmlkUm93LmFjdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgKHVpQWN0aW9uOiBhbnkpID0+ICF0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KHVpQWN0aW9uLmNvZGUhKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBpZiAobmV3VWlBY3Rpb25zKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgIG5ld1VpQWN0aW9ucy5tYXAoYXN5bmMgKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRlc2NyaXB0b3I6IFVpQWN0aW9uRGVzY3JpcHRvciA9XHJcbiAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc21hcnRHcmlkIS51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlPy5nZXRBY3Rpb25EZXNjcmlwdG9yKHVpQWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGlmICghZGVzY3JpcHRvcikge1xyXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1aUFjdGlvbi5jb2RlID8/ICdDT0RFJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFVpQWN0aW9uQnV0dG9uVHlwZS5OT1JNQUwsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuc2V0KHVpQWN0aW9uLmNvZGUhLCBkZXNjcmlwdG9yKTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG9yZWRlcmVkRGVzY0NvbHVtbnMgPSB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyZWRDb2x1bW5OYW1lcy5tYXAoXHJcbiAgICAgIChwcm9wZXJ0eU5hbWU6IHN0cmluZykgPT5cclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLmRlc2NyaXB0b3IhLmNvbHVtbnMhLmZpbmQoXHJcbiAgICAgICAgICAoY29sRGVzY3JpcHRvcjogR3JpZENvbHVtbk1ldGEpID0+IGNvbERlc2NyaXB0b3IucHJvcGVydHlOYW1lID09PSBwcm9wZXJ0eU5hbWVcclxuICAgICAgICApXHJcbiAgICApLmZsYXRNYXAoKGYpID0+IGYgPz8gW10pO1xyXG5cclxuICAgIGxldCBoZWFkZXIgPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgb3JlZGVyZWREZXNjQ29sdW1ucy5tYXAoYXN5bmMgKGRlc2NDb2x1bW46IEdyaWRDb2x1bW5NZXRhKTogUHJvbWlzZTxTbWFydFRhYmxlSGVhZGVyPiA9PiB7XHJcbiAgICAgICAgbGV0IGN1c3RvbVRhYmxlSGVhZGVyID0gdGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmluZChcclxuICAgICAgICAgIChoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IGhlYWRlci5wcm9wZXJ0eU5hbWUgPT09IGRlc2NDb2x1bW4ucHJvcGVydHlOYW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgZmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlJdGVtID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3Py5vcmRlckJ5TGlzdD8uZmluZChcclxuICAgICAgICAgIChmaWx0ZXJFeHByZXNzaW9uOiBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSkgPT5cclxuICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbi5wcm9wZXJ0eU5hbWUgPT09IGRlc2NDb2x1bW4hLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IG9yZGVyO1xyXG4gICAgICAgIGxldCBvcmRlck51bWJlcjtcclxuICAgICAgICBpZiAoZmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlJdGVtKSB7XHJcbiAgICAgICAgICBvcmRlciA9XHJcbiAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbS5vcmRlciA9PT0gRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkuT3JkZXJFbnVtLkFzY1xyXG4gICAgICAgICAgICAgID8gU21hcnRUYWJsZU9yZGVyLkFTQ1xyXG4gICAgICAgICAgICAgIDogU21hcnRUYWJsZU9yZGVyLkRFU0M7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIG9yZGVyTnVtYmVyID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgKGZpbHRlcjogRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkpID0+IGZpbHRlci5wcm9wZXJ0eU5hbWUgPT09IGRlc2NDb2x1bW4hLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBvcmRlck51bWJlcisrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcmlnbmFsTGFiZWwgPSBjdXN0b21UYWJsZUhlYWRlcj8ubGFiZWwgPz8gZGVzY0NvbHVtbi5sYWJlbDtcclxuICAgICAgICBsZXQgbGFiZWwgPSAnJztcclxuICAgICAgICBpZiAoIWRlc2NDb2x1bW4uaGlkZUxhYmVsKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zbWFydEdyaWQhLnRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBhd2FpdCB0aGlzLnNtYXJ0R3JpZCEudHJhbnNsYXRlU2VydmljZT8uZ2V0KG9yaWduYWxMYWJlbCkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsYWJlbCA9IG9yaWduYWxMYWJlbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBwcm9wZXJ0aWVzID0gY3VzdG9tVGFibGVIZWFkZXI/LnByb3BlcnRpZXM7XHJcbiAgICAgICAgaWYgKCFwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS50aW1lLk9mZnNldERhdGVUaW1lJyB8fFxyXG4gICAgICAgICAgICBkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5Mb2NhbERhdGVUaW1lJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlRm9ybWF0ID0gZGVzY0NvbHVtbi50eXBlRm9ybWF0ID8/ICd5eXl5Lk1NLmRkIEg6bW0nO1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuREFURVRJTUUsXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLnRpbWUuTG9jYWxEYXRlJykge1xyXG4gICAgICAgICAgICBsZXQgZGF0ZUZvcm1hdCA9IGRlc2NDb2x1bW4udHlwZUZvcm1hdCA/PyAneXl5eS5NTS5kZCc7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZS5EQVRFLFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS50aW1lLkxvY2FsVGltZScpIHtcclxuICAgICAgICAgICAgbGV0IGRhdGVGb3JtYXQgPSBkZXNjQ29sdW1uLnR5cGVGb3JtYXQgPz8gJ0g6bW0nO1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuVElNRSxcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEubGFuZy5Cb29sZWFuJykge1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuQ0hFQ0tCT1gsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4uY3VzdG9tVGFibGVIZWFkZXIsXHJcbiAgICAgICAgICBsYWJlbDogbGFiZWwsXHJcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdkYXRhLicgKyBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZSxcclxuICAgICAgICAgIG9yZGVyLFxyXG4gICAgICAgICAgb3JkZXJOdW1iZXIsXHJcbiAgICAgICAgICBwcm9wZXJ0aWVzLFxyXG4gICAgICAgICAgc3R5bGU6IGRlc2NDb2x1bW4uc3R5bGUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGNvbXBsZW1lbnQgPSB0aGlzLnNtYXJ0R3JpZCEudGFibGVDb25maWc/LmN1c3RvbVNtYXJ0VGFibGVIZWFkZXJzPy5maWx0ZXIoXHJcbiAgICAgICh0YWJsZUhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT5cclxuICAgICAgICAhaGVhZGVyLnNvbWUoKHRIOiBTbWFydFRhYmxlSGVhZGVyKSA9PiB0SC5wcm9wZXJ0eU5hbWUuaW5jbHVkZXModGFibGVIZWFkZXIucHJvcGVydHlOYW1lKSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGNvbXBsZW1lbnQpIHtcclxuICAgICAgaGVhZGVyLnB1c2goLi4uY29tcGxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5vcHRpb25zPy5zaW1wbGVCdXR0b25zKSB7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5vcHRpb25zLnNpbXBsZUJ1dHRvbnMuZm9yRWFjaCgodWlBY3Rpb25Db2RlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBoZWFkZXIucHVzaCh7XHJcbiAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdzaW1wbGVfYnV0dG9ucycsXHJcbiAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlQnV0dG9uVHlwZS5SQUlTRUQsXHJcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZXhlY3V0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIC8vIGxhYmVsOiB0aGlzLmJ1dHRvblRyYW5zbGF0b3IoeyBjb2RlOiB1aUFjdGlvbkNvZGUgfSksXHJcbiAgICAgICAgICAgICAgYXJnczogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBjb2RlOiB1aUFjdGlvbkNvZGUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgICAgICAgICBzaG93QnV0dG9uSWY6IChyb3c6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIHJvdy5hY3Rpb25zLnNvbWUoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5jb2RlID09PSB1aUFjdGlvbkNvZGU7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGVhZGVyLnNvbWUoKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4gaGVhZGVyLnByb3BlcnR5TmFtZSA9PT0gJ215X21lbnUnKSkge1xyXG4gICAgICBpZiAodGhpcy5zbWFydEdyaWQhLm9wdGlvbnM/LnJvd1VpQWN0aW9uVHlwZSA9PT0gR3JpZFVpQWN0aW9uVHlwZS5QT1BVUF9NRU5VKSB7XHJcbiAgICAgICAgbGV0IGljb24gPSB0aGlzLmdyaWRNZW51SWNvbiA/PyAnbW9yZV92ZXJ0JztcclxuICAgICAgICBoZWFkZXIucHVzaCh7XHJcbiAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdteV9tZW51JyxcclxuICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVCdXR0b25UeXBlLk1FTlUsXHJcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZXhlY3V0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIGljb246IGljb24sXHJcbiAgICAgICAgICAgICAgbWVudUl0ZW1CdXR0b25zUHJvcGVydHlOYW1lOiAnYWN0aW9ucycsXHJcbiAgICAgICAgICAgICAgdHJhbnNsYXRvcjogdGhpcy5idXR0b25UcmFuc2xhdG9yLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgYXJnczogW10sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgaXNTb3J0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaGVhZGVyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG9uQ2hhbmdlUGFnZShldmVudDogUGFnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgb2Zmc2V0ID0gZXZlbnQucGFnZVNpemUgKiBldmVudC5wYWdlSW5kZXg7XHJcbiAgICBsZXQgbGltaXQgPSBldmVudC5wYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnZUluZGV4ID0gZXZlbnQucGFnZUluZGV4O1xyXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLnNldFBhZ2UoXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlld1V1aWQhLFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgIG9mZnNldC50b1N0cmluZygpLFxyXG4gICAgICBsaW1pdC50b1N0cmluZygpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG9uUHJpbWVDaGFuZ2VQYWdlKGV2ZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBvZmZzZXQgPSBldmVudC5maXJzdDtcclxuICAgIGxldCBsaW1pdCA9IGV2ZW50LnJvd3M7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50LmZpcnN0O1xyXG4gICAgYXdhaXQgdGhpcy5zZXJ2aWNlLnNldFBhZ2UoXHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlld1V1aWQhLFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgIG9mZnNldC50b1N0cmluZygpLFxyXG4gICAgICBsaW1pdC50b1N0cmluZygpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlKGFyZ3M6IGFueVtdLCByb3c6IGFueSwgdWlBY3Rpb246IGFueSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IF91aUFjdGlvbjogVWlBY3Rpb247XHJcblxyXG4gICAgaWYgKCF1aUFjdGlvbikge1xyXG4gICAgICB1aUFjdGlvbiA9IHJvdy5hY3Rpb25zLmZpbHRlcigoYWN0aW9uOiBVaUFjdGlvbikgPT4gYWN0aW9uLmNvZGUgPT09IGFyZ3NbMF0uY29kZSlbMF07XHJcbiAgICB9XHJcblxyXG4gICAgX3VpQWN0aW9uID0geyAuLi51aUFjdGlvbiB9O1xyXG4gICAgaWYgKF91aUFjdGlvbi5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBfdWlBY3Rpb24ucGFyYW1zID0ge1xyXG4gICAgICAuLi51aUFjdGlvbi5wYXJhbXMsXHJcbiAgICAgIG1vZGVsOiByb3csXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCB1aUFjdGlvbk1vZGVsOiBhbnkgPSB7XHJcbiAgICAgIHNlcnZpY2VUb1VzZTogdGhpcy5zbWFydEdyaWQhLnNlcnZpY2VUb1VzZSxcclxuICAgICAgdWlBY3Rpb246IF91aUFjdGlvbixcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS5vcHRpb25zPy51aUFjdGlvbk1vZGVsQ2FsbGJhY2spIHtcclxuICAgICAgdWlBY3Rpb25Nb2RlbCA9IHRoaXMuc21hcnRHcmlkIS5vcHRpb25zIS51aUFjdGlvbk1vZGVsQ2FsbGJhY2sodWlBY3Rpb25Nb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uU2VydmljZS51aUFjdGlvbk1vZGVsID0gdWlBY3Rpb25Nb2RlbDtcclxuICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UuZXhlY3V0ZShfdWlBY3Rpb24sIHtcclxuICAgICAgd2lkZ2V0SWQ6IHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcixcclxuICAgICAgbm9kZUlkOiByb3cuaWQsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnV0dG9uVHJhbnNsYXRvcih1aUFjdGlvbjogVWlBY3Rpb24pOiBVaUFjdGlvbkRlc2NyaXB0b3Ige1xyXG4gICAgbGV0IGRlc2MgPSB0aGlzLnVpQWN0aW9uRGVzY3JpcHRvcnMuZ2V0KHVpQWN0aW9uLmNvZGUhKTtcclxuICAgIGlmICghZGVzYykge1xyXG4gICAgICBkZXNjID0ge1xyXG4gICAgICAgIHRpdGxlOiB1aUFjdGlvbi5jb2RlISxcclxuICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuRkxBVCxcclxuICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHVpQWN0aW9uLmRlc2NyaXB0b3IpIHtcclxuICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLm1lcmdlQWN0aW9uRGVzY3JpcHRvckludG9DbGllbnQodWlBY3Rpb24uZGVzY3JpcHRvciEsIGRlc2MpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlc2M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbGF5b3V0RGVmKCk6IHR5cGVvZiBTbWFydExheW91dERlZiB7XHJcbiAgICByZXR1cm4gU21hcnRMYXlvdXREZWY7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2soZ3JpZFJvdyk7XHJcbiAgfVxyXG4gIHB1YmxpYyBvbkRvdWJsZUNsaWNrKGdyaWRSb3c6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIHRoaXMuaGFuZGxlT25DbGljayhncmlkUm93KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlT25DbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBsZXQgZGVmYXVsdFJvd0FjdGlvbjogVWlBY3Rpb24gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAodGhpcy5zZXJ2aWNlLmdyaWRNb2RlbD8uZGVmYXVsdFJvd0FjdGlvbnMpIHtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuc2VydmljZS5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFJvd0FjdGlvbkNvZGUgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zW2luZGV4XTtcclxuXHJcbiAgICAgICAgZGVmYXVsdFJvd0FjdGlvbiA9IGdyaWRSb3cuYWN0aW9ucy5maW5kKFxyXG4gICAgICAgICAgKHVpQWN0aW9uOiBVaUFjdGlvbikgPT4gdWlBY3Rpb24uY29kZSA9PT0gZGVmYXVsdFJvd0FjdGlvbkNvZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChkZWZhdWx0Um93QWN0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLmV4ZWN1dGUoW10sIGdyaWRSb3csIGRlZmF1bHRSb3dBY3Rpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIG9uU2VsZWN0KHJvd0lkOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNCbG9ja2VkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3M/LmZpbmQoXHJcbiAgICAgICAgKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuaWQgPT09IHJvd0lkXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHZpZXdDb250ZXh0Q2hhbmdlID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnNlbGVjdCh0aGlzLnNtYXJ0R3JpZCEsIHJvdyEpO1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBvblNlbGVjdEFsbChzZWxlY3RlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHZpZXdDb250ZXh0Q2hhbmdlID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnNlbGVjdEFsbCh0aGlzLnNtYXJ0R3JpZCEsIHNlbGVjdGVkKTtcclxuICAgIHRoaXMuc21hcnRHcmlkIS52aWV3Q29udGV4dFNlcnZpY2UuaGFuZGxlQ2hhbmdlcyh2aWV3Q29udGV4dENoYW5nZS5jaGFuZ2VzKTtcclxuXHJcbiAgICB0aGlzLnJlZnJlc2goKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25TZWxlY3RSb3dzKFxyXG4gICAgc2VsZWN0ZWRJZHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10sXHJcbiAgICB1bnNlbGVjdGVkSWRzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBzZWxlY3RlZDogc3RyaW5nW10gPSBzZWxlY3RlZElkcy5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gICAgICBsZXQgdW5zZWxlY3RlZDogc3RyaW5nW10gPSB1bnNlbGVjdGVkSWRzLmZpbHRlcigoaXRlbSk6IGl0ZW0gaXMgc3RyaW5nID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XHJcbiAgICAgIGNvbnN0IHZpZXdDb250ZXh0Q2hhbmdlID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnNlbGVjdFJvd3MoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLFxyXG4gICAgICAgIHNlbGVjdGVkLFxyXG4gICAgICAgIHVuc2VsZWN0ZWRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVDaGFuZ2VzKHZpZXdDb250ZXh0Q2hhbmdlLmNoYW5nZXMpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRDb2x1bW5zKCk6IHZvaWQge1xyXG4gICAgbGV0IGRpYWxvZ0RhdGE6IFNtYXJ0RGlhbG9nRGF0YSA9IHtcclxuICAgICAgY29udGVudDoge1xyXG4gICAgICAgIHRpdGxlOiAnT3N6bG9wb2sgdGVzdHJlc3phYsOhc2EnLFxyXG4gICAgICB9LFxyXG4gICAgICBzaXplOiB7fSxcclxuICAgICAgY3VzdG9tQ29tcG9uZW50OiBUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQsXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudElucHV0czoge1xyXG4gICAgICAgIGNvbmZpZzoge1xyXG4gICAgICAgICAgdXVpZDogdGhpcy51dWlkLFxyXG4gICAgICAgICAgaWRlbnRpZmllcjogdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICAgICAgdmlldzogdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC52aWV3LFxyXG4gICAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihUYWJsZUxheW91dERlZmluZXJDb21wb25lbnQsIHsgZGF0YTogZGlhbG9nRGF0YSB9KTtcclxuICB9XHJcblxyXG4gIC8vUFJJTUVOR1xyXG4gIGNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcbiAgbWVudUJ1dHRvbnMhOiBNZW51SXRlbVtdO1xyXG4gIEBWaWV3Q2hpbGQoJ21lbnUnKSBtZW51ITogTWVudTtcclxuICBvbk9wdGlvbnNDbGljayhldmVudDogRXZlbnQsIHJvdzogR3JpZFJvdykge1xyXG4gICAgdGhpcy5tZW51QnV0dG9ucyA9IFtdO1xyXG4gICAgcm93LmFjdGlvbnM/Lm1hcChhc3luYyAodWlBY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBsZXQgZGVzYyA9IGF3YWl0IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZS5nZXRBY3Rpb25EZXNjcmlwdG9yKHVpQWN0aW9uKTtcclxuXHJcbiAgICAgIHRoaXMubWVudUJ1dHRvbnMucHVzaCh7XHJcbiAgICAgICAgbGFiZWw6IGRlc2M/LnRpdGxlID8/IHVpQWN0aW9uLmNvZGUsXHJcbiAgICAgICAgaWNvbjogJycsXHJcbiAgICAgICAgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5leGVjdXRlKFtdLCByb3csIHVpQWN0aW9uKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5tZW51LnRvZ2dsZShldmVudCk7XHJcbiAgfVxyXG59XHJcbiIsIkBpZihjb21wTGliID09PSBjb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuPGRpdiAqbmdJZj1cInNtYXJ0R3JpZFwiIGNsYXNzPVwicHJpbWVTbWFydEdyaWQtY29udGFpbmVyXCI+XHJcbiAgPHAtdGFibGUgI3BUYWJsZSBbdmFsdWVdPVwic21hcnRHcmlkLmdyaWRNb2RlbC5wYWdlLnJvd3MhXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICB7eyBjb2wgfX1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0aD48L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8IS0tICA8dHI+XHJcbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2Ygc21hcnRHcmlkPy5ncmlkTW9kZWw/LnZpZXc/Lm9yZGVyZWRDb2x1bW5OYW1lc1wiPlxyXG4gICAgICAgICAgPHAtY29sdW1uRmlsdGVyXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgW2ZpZWxkXT1cIidkYXRhLicgKyBjb2xcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCBieSAnICsgY29sXCJcclxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInRmlsdGVyICcgKyBjb2xcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L3RyPiAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3c+XHJcbiAgICAgIDx0ciAqbmdJZj1cInJvdyAmJiByb3cuZGF0YVwiPlxyXG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHNtYXJ0R3JpZD8uZ3JpZE1vZGVsPy52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXNcIj5cclxuICAgICAgICAgIHt7IHJvdy5kYXRhW2NvbF0gfX1cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicm93LmFjdGlvbnMgJiYgcm93LmFjdGlvbnMubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uT3B0aW9uc0NsaWNrKCRldmVudCwgcm93KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uIGljb249XCJlbGxpcHNpcy12XCI+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdGFibGU+XHJcbiAgPHAtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cInNtYXJ0R3JpZC5wYWdpbmF0b3JcIlxyXG4gICAgW2ZpcnN0XT1cInBhZ2VJbmRleCFcIlxyXG4gICAgW3RvdGFsUmVjb3Jkc109XCJsZW5ndGghXCJcclxuICAgIFtyb3dzXT1cInBhZ2VTaXplXCJcclxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcclxuICAgIChvblBhZ2VDaGFuZ2UpPVwib25QcmltZUNoYW5nZVBhZ2UoJGV2ZW50KVwiXHJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gIC8+XHJcbiAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwibWVudUJ1dHRvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiPiA8L3AtbWVudT5cclxuPC9kaXY+XHJcbn1AZWxzZSB7XHJcbjxkaXYgKm5nSWY9XCJzbWFydEdyaWRcIiBjbGFzcz1cInNtYXJ0R3JpZC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwic21hcnQtZ3JpZC10b29sYmFyXCI+XHJcbiAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXIgI3Rvb2xiYXIgW2lkXT1cIidncmlkX25vdF9pbml0aWFsaXplZCdcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAoY2xpY2spPVwiZWRpdENvbHVtbnMoKVwiXHJcbiAgICAgIG1hdC1taW5pLWZhYlxyXG4gICAgICBjb2xvcj1cInRleHQtcHJpbWFyeVwiXHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLnNob3dFZGl0Q29sdW1uc1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgYXJpYS1sYWJlbD1cIkNvbHVtbnNcIiBjbGFzcz1cInNtYXJ0LWdyaWQtZWRpdC1pY29uXCJcclxuICAgICAgICA+dmlld19jb2x1bW5zPC9tYXQtaWNvblxyXG4gICAgICA+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwiaXNCbG9ja2VkID8gJ2Jsb2NrZWQnIDogJydcIj48L2Rpdj4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZENvbnRlbnRcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQuc2hvd1Jlc3VsdENvdW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZC1kYXRhLW51bWJlclwiPlxyXG4gICAgICAgICAge3sgc21hcnRHcmlkLmdyaWRNb2RlbC50b3RhbFJvd0NvdW50IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNtYXJ0LWdyaWQtdGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGU+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5FWFBBTkRBQkxFXCI+XHJcbiAgICAgIDxzbWFydC1leHBhbmRhYmxlLXNlY3Rpb25cclxuICAgICAgICAjZ3JpZEV4cGFuZGFibGVTZWN0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGV4cGFuZGFibGVTZWN0aW9uIG9mIGV4cGFuZGFibGVTZWN0aW9uc1wiXHJcbiAgICAgICAgW2RhdGFdPVwiZXhwYW5kYWJsZVNlY3Rpb25cIlxyXG4gICAgICA+PC9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5DQVJEXCJcclxuICAgICAgY2xhc3M9XCJjYXJkcy1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxhcHAtc21hcnQtZ3JpZC1jYXJkXHJcbiAgICAgICAgY2xhc3M9XCJzbWFydEdyaWQtY2FyZC1jb250YWluZXJcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YXNrIG9mIHNtYXJ0R3JpZC5ncmlkTW9kZWwucGFnZS5yb3dzXCJcclxuICAgICAgICBbaXRlbV09XCJ0YXNrXCJcclxuICAgICAgICBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiXHJcbiAgICAgICAgW29uU2VsZWN0XT1cIm9uU2VsZWN0LmJpbmQodGhpcylcIlxyXG4gICAgICA+PC9hcHAtc21hcnQtZ3JpZC1jYXJkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLmxheW91dERlZiA9PT0gbGF5b3V0RGVmKCkuVFJFRSAmJiB0cmVlQ29udHJvbFwiXHJcbiAgICAgIGNsYXNzPVwidHJlZS1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJ0cmVlRGF0YVNvdXJjZSFcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2whXCI+XHJcbiAgICAgICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcclxuICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ0luZGVudD1cIjI0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cInRyZWUtYnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tsaXN0LWxlYWYtbm9kZVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcclxuICAgICAgICAgICAgPnt7IGdldFRyZWVJdGVtKG5vZGUpIH19PC9tYXQtY2hlY2tib3hcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcblxyXG4gICAgICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIlxyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnQ9XCIyNFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcclxuICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgbm9kZS5pdGVtXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPlxyXG4gICAgICAgICAgICAgIHt7IHRyZWVDb250cm9sIS5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0JyB9fVxyXG4gICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGUpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0cmVlTm9kZVNlbGVjdGlvblRvZ2dsZShub2RlKVwiXHJcbiAgICAgICAgICAgID57eyBnZXRUcmVlSXRlbShub2RlKSB9fTwvbWF0LWNoZWNrYm94XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgICA8L21hdC10cmVlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cInNtYXJ0R3JpZC5wYWdpbmF0b3IgJiYgIXRyZWVDb250cm9sXCJcclxuICAgICNwYWdpbmF0b3JcclxuICAgIFtsZW5ndGhdPVwibGVuZ3RoXCJcclxuICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcclxuICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiXHJcbiAgPjwvbWF0LXBhZ2luYXRvcj5cclxuPC9kaXY+XHJcbn1cclxuIl19
|
|
859
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1uZy1jbGllbnQvc3JjL2xpYi9zbWFydC1ncmlkL3NtYXJ0LWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtbmctY2xpZW50L3NyYy9saWIvc21hcnQtZ3JpZC9zbWFydC1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUVMLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUlMLFNBQVMsRUFDVCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDbkcsT0FBTyxFQUNMLFVBQVUsRUFDVixvQkFBb0IsRUFFcEIsNEJBQTRCLEVBRTVCLDJCQUEyQixFQUMzQixlQUFlLEVBQ2YsY0FBYyxFQUNkLG1CQUFtQixHQUNwQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBWSxrQkFBa0IsRUFBc0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RixPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGdCQUFnQixHQUdqQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFHTCxpQkFBaUIsRUFDakIsaUJBQWlCLEVBRWpCLDBCQUEwQixHQUMzQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQy9HLE9BQU8sRUFBRSxnQkFBZ0IsRUFBYSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUl4RCxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUTVFLE1BQU0sT0FBTyxrQkFBa0I7SUE0QzdCLFlBQ1UsT0FBeUIsRUFDekIsU0FBa0MsRUFDbEMsTUFBaUIsRUFDakIseUJBQW9ELEVBQzFCLE9BQXlCLEVBQzNCLFlBQXFCO1FBTDdDLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQ3pCLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDakIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUMxQixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBUztRQWpEdkQsaURBQWlEO1FBQ2hDLDJCQUFzQixHQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEUscUJBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDNUIsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBR3hDLFFBQUcsR0FBWSxLQUFLLENBQUM7UUFzQjlCLG9CQUFlLEdBQWEsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBRXhELHFCQUFnQixHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRS9DLHdCQUFtQixHQUFvQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRWpFLDBCQUFxQixHQUFZLEtBQUssQ0FBQztRQUN2QyxjQUFTLEdBQVksSUFBSSxDQUFDO1FBMloxQixhQUFRLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBRTFDLGlCQUFZLEdBQUcsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFN0YsZ0JBQVcsR0FBRyxDQUFDLElBQWEsRUFBYSxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNsQixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQzdELElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUcsQ0FBQyxDQUNsRCxDQUFDO2dCQUNGLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1QsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQztRQUVGLGFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxTQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNFLGdCQUFXLEdBQUcsQ0FBQyxHQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDM0MsR0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDM0IsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUM7UUF1YkYsU0FBUztRQUNULFlBQU8sR0FBcUIsRUFBRSxDQUFDO1FBeDFCN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzNDLDhEQUE4RDtZQUM5RCxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztZQUNuRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsWUFBWSxDQUFDO1lBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDO1lBQ25ELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDM0MsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLG1CQUFtQjtZQUNuQixJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsQ0FBQztRQUNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWU7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUztZQUFFLE1BQU0sSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxVQUFXLENBQUMsU0FBVSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsT0FBTztRQUNsQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEIsbURBQW1EO1FBQ25ELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFFTSxZQUFZO1FBQ2pCLGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxHQUFHLFVBQVUsQ0FBQztZQUM1RCxJQUFJLFNBQVMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ08sS0FBSyxDQUFDLE1BQU07UUFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7UUFDNUMsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQztZQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztZQUMxQyxJQUFJLFNBQVMsQ0FBQyxlQUFlLElBQUksU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQztZQUNuRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUM7WUFDckQsQ0FBQztZQUNELElBQUksU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxTQUFVLENBQUMsZUFBZSxHQUFHLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGVBQWUsQ0FBQztZQUNqRixDQUFDO1lBQ0QsSUFBSSxJQUFJLEdBQUcsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDO1lBQzdDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxTQUFTLENBQUM7Z0JBQ2QsSUFBSSxJQUFJLEtBQUssMEJBQTBCLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQzlDLFNBQVMsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO2dCQUNuQyxDQUFDO3FCQUFNLElBQUksSUFBSSxLQUFLLDBCQUEwQixDQUFDLElBQUksRUFBRSxDQUFDO29CQUNwRCxTQUFTLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztnQkFDbEMsQ0FBQztxQkFBTSxJQUFJLElBQUksS0FBSywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDckQsU0FBUyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7Z0JBQ2xDLENBQUM7Z0JBQ0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztvQkFDZCxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7Z0JBQ3hDLENBQUM7WUFDSCxDQUFDO1lBQ0QsSUFBSSxTQUFTLEVBQUUsU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLEVBQUUsU0FBUyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQztZQUNyRCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9CLDBCQUEwQjtZQUMxQixJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ2xDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVztRQUN2QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFFBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxTQUFVLENBQUM7WUFDNUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQWtCLEVBQUUsRUFBRTtnQkFDNUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBcUIsRUFBRSxFQUFFO29CQUNoRixJQUFJLFVBQVUsS0FBSyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMzQixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFVLENBQUMsSUFBSSxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNyRSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixJQUFJLGNBQWMsR0FBUSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBb0IsRUFBRSxFQUFFO2dCQUMvRSxjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUNoRCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsSUFBSSxTQUFTLENBQUM7UUFDZCxJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQzNDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDcEQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUNuRSxTQUFTO2dCQUNQLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxLQUFLLGlCQUFpQixDQUFDLFFBQVE7b0JBQ2pGLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUztvQkFDMUIsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdkQsSUFBSSxXQUFXLEdBQWlDO2dCQUM5QyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsV0FBVztnQkFDOUIsU0FBUyxFQUFFLFFBQVE7Z0JBQ25CLFNBQVM7Z0JBQ1QsdUJBQXVCLEVBQUUsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFHO2dCQUN0RCxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxVQUFVO2dCQUN0QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLGlCQUFpQjtnQkFDcEQsSUFBSSxFQUFFLDJCQUEyQixDQUFDLE1BQU07Z0JBQ3hDLFFBQVEsRUFBRSxJQUFJO2dCQUNkLGtCQUFrQixFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLGlCQUFrQjtnQkFDaEUsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQVksRUFBRSxFQUFFO29CQUNoRixPQUFPO3dCQUNMLElBQUksRUFDRixJQUFJLEtBQUssbUJBQW1COzRCQUMxQixDQUFDLENBQUMsb0JBQW9CLENBQUMsU0FBUzs0QkFDaEMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE1BQU07d0JBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ2pDLElBQUksRUFBRSxJQUFJO3dCQUNWLGdEQUFnRDt3QkFDaEQsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUM1QyxVQUFVO3dCQUNWLE1BQU07d0JBQ04sa0JBQWtCO3dCQUNsQixPQUFPO3dCQUNQLEtBQUs7cUJBQ04sQ0FBQztnQkFDSixDQUFDLENBQUM7YUFDSCxDQUFDO1lBRUYsSUFDRSxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGlCQUFpQjtnQkFDN0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQzFELENBQUM7Z0JBQ0QsV0FBVyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQztnQkFDckYsV0FBVyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUM7WUFDN0YsQ0FBQztZQUVELElBQ0UsSUFBSSxDQUFDLFNBQVUsQ0FBQyxlQUFlO2dCQUMvQixJQUFJLENBQUMsU0FBVSxDQUFDLHlCQUF5QjtnQkFDekMsSUFBSSxDQUFDLFNBQVUsQ0FBQyxZQUFZO2dCQUM1QixJQUFJLENBQUMsU0FBVSxDQUFDLGtCQUFrQixFQUNsQyxDQUFDO2dCQUNELFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25ELFdBQVcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUVELDZCQUE2QjtZQUM3QixpQ0FBaUM7WUFDakMsc0RBQXNEO1lBQ3RELElBQUk7WUFFSixJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ2xDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO2dCQUMzQyxXQUFXLENBQUMsc0JBQXNCLEdBQUcsWUFBWSxDQUFDO1lBQ3BELENBQUM7WUFFRCxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDOUIsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDakMsQ0FBQztZQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFRLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDO1lBRTlFLElBQ0UsQ0FBQyxXQUFXLENBQUMsU0FBUztnQkFDdEIsQ0FBQyxXQUFXLENBQUMsaUJBQWlCO2dCQUM5QixhQUFhLEtBQUssaUJBQWlCLENBQUMsSUFBSSxFQUN4QyxDQUFDO2dCQUNELE1BQU0sVUFBVSxHQUFHLGFBQWEsS0FBSyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7Z0JBRWhFLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Z0JBRXJDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUk7cUJBQzVDLElBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO3FCQUNwRCxHQUFHLENBQUMsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRyxDQUFDLENBQUM7Z0JBRTFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxjQUFjLENBQVMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzlFLENBQUM7WUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFNLFdBQVcsQ0FBQyxDQUFDO1lBRW5ELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO2dCQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNyQixPQUFPO2dCQUNULENBQUM7Z0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUNyRCxJQUFJLENBQUMsVUFBVyxFQUNoQixtQkFBbUIsRUFDbkIsSUFBSSxHQUFHLENBQWMsQ0FBQyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUN4RCxDQUFDO2dCQUVGLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsU0FBUztxQkFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMxRCxTQUFTLENBQUMsQ0FBQyxNQUF3QixFQUFFLEVBQUU7b0JBQ3RDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXZELFFBQVEsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNyQixLQUFLLFNBQVM7NEJBQ1osTUFBTSxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDOzRCQUNuQyxNQUFNO3dCQUNSLEtBQUssZUFBZSxDQUFDLEdBQUc7NEJBQ3RCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQzs0QkFDcEMsTUFBTTt3QkFDUixLQUFLLGVBQWUsQ0FBQyxJQUFJOzRCQUN2QixNQUFNLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQzs0QkFDekIsTUFBTTtvQkFDVixDQUFDO29CQUVELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUMzRCxDQUFDLGdCQUF5QyxFQUFFLEVBQUUsQ0FDNUMsZ0JBQWdCLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQyxZQUFZLENBQ3hELENBQUM7b0JBQ0YsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQzVCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUN4RSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2hFLENBQUM7eUJBQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDbEIsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUM5QixDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7NEJBQy9DLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSzs0QkFDbkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO3lCQUNsQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztvQkFFRCxJQUFJLGNBQWMsR0FBbUI7d0JBQ25DLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFLLENBQUMsV0FBVzt3QkFDeEQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSyxDQUFDLGtCQUFrQjtxQkFDdkUsQ0FBQztvQkFDRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO2dCQUNyRCxDQUFDLENBQUMsQ0FBQztnQkFFTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsT0FBTztxQkFDMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUMxRCxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEMsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTSxNQUFNLENBQUMsS0FBYSxJQUFRLENBQUM7SUFFN0IsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFnQjtRQUN2QyxJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN4QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3hELElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVELENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFVLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFVLENBQUMsSUFBSSxDQUFDLElBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNoRixPQUFPO2dCQUNMLEtBQUssRUFBRSxFQUFFO2dCQUNULGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLGVBQWU7Z0JBQ2hELGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLHdCQUF3QjtnQkFDekQsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLG1CQUFtQjtnQkFDcEQsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsNEJBQTRCO2dCQUN2RCxJQUFJLEVBQUUsSUFBSTthQUNYLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxXQUFXO1FBQ2pCLE9BQU87SUFDVCxDQUFDO0lBRU8sbUJBQW1CO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFRLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDO1FBQzlFLE9BQU8sYUFBYSxLQUFLLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztJQUN0RCxDQUFDO0lBRU8sU0FBUztRQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxTQUFTLENBQUM7SUFDMUMsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGdCQUFnQixDQUN2QyxJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsUUFBUSxFQUNiLElBQUksQ0FBQyxZQUFZLEVBQ2pCLElBQUksQ0FBQyxXQUFXLENBQ2pCLENBQUM7WUFDRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN0RixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxjQUFjLENBQVUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUM7UUFDeEMsSUFBSSxhQUFxQyxDQUFDO1FBQzFDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixhQUFhLEdBQUcsS0FBSztpQkFDbEIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdEQsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDcEQsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEUsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBeUJELFdBQVcsQ0FBQyxHQUFZO1FBQ3RCLElBQUksT0FBTyxHQUF5QixJQUFJLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUM7UUFDdkYsSUFBSSxJQUFJLEdBQVEsR0FBRyxDQUFDLElBQUssQ0FBQztRQUMxQixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxFQUFHLENBQUM7SUFDakIsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSx1QkFBdUIsQ0FBQyxJQUFhO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDO2dCQUNwRCxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUUvRSxJQUFJLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLGFBQWEsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLHdFQUF3RTtZQUN4RSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSTtnQkFDOUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUM5QyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUM5QixFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2hELE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFhO1FBQ3BDLElBQUksTUFBTSxHQUFtQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELE9BQU8sTUFBTSxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFhO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksWUFBWSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QyxDQUFDO2FBQU0sSUFBSSxDQUFDLFlBQVksSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLGFBQWEsQ0FBQyxJQUFhO1FBQ3pCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqRSxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkQsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDO2dCQUM5QyxPQUFPLFdBQVcsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELDREQUE0RDtJQUM1RCxzQkFBc0IsQ0FBQyxJQUFhO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDdEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUQsTUFBTSxlQUFlLEdBQ25CLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUN0QixXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDLHNCQUF1QixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztRQUNMLE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsNEJBQTRCLENBQUMsSUFBYTtRQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ3RELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksTUFBTSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBdUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RixJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDL0IsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlO1FBQzNCLElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO2dCQUNqRSxJQUFJLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FDeEMsQ0FBQyxRQUFhLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSyxDQUFDLENBQ2pFLENBQUM7Z0JBRUYsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQWtCLEVBQUUsRUFBRTt3QkFDNUMsSUFBSSxVQUFVLEdBQ1osTUFBTSxJQUFJLENBQUMsU0FBVSxDQUFDLHlCQUF5QixFQUFFLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNqRixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7NEJBQ2hCLFVBQVUsR0FBRztnQ0FDWCxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksSUFBSSxNQUFNO2dDQUM5QixLQUFLLEVBQUUsU0FBUztnQ0FDaEIsSUFBSSxFQUFFLGtCQUFrQixDQUFDLE1BQU07NkJBQ2hDLENBQUM7d0JBQ0osQ0FBQzt3QkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQzNELENBQUMsQ0FBQyxDQUNILENBQUM7Z0JBQ0osQ0FBQztZQUNILENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFLLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUM5RSxDQUFDLFlBQW9CLEVBQUUsRUFBRSxDQUN2QixJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxJQUFLLENBQUMsVUFBVyxDQUFDLE9BQVEsQ0FBQyxJQUFJLENBQ3ZELENBQUMsYUFBNkIsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLFlBQVksS0FBSyxZQUFZLENBQy9FLENBQ0osQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUxQixJQUFJLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQzVCLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBMEIsRUFBNkIsRUFBRTtZQUN0RixJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsV0FBVyxFQUFFLHVCQUF1QixFQUFFLElBQUksQ0FDaEYsQ0FBQyxNQUF3QixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxLQUFLLFVBQVUsQ0FBQyxZQUFZLENBQzlFLENBQUM7WUFDRixJQUFJLDJCQUEyQixHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUNqRixDQUFDLGdCQUF5QyxFQUFFLEVBQUUsQ0FDNUMsZ0JBQWdCLENBQUMsWUFBWSxLQUFLLFVBQVcsQ0FBQyxZQUFZLENBQzdELENBQUM7WUFDRixJQUFJLEtBQUssQ0FBQztZQUNWLElBQUksV0FBVyxDQUFDO1lBQ2hCLElBQUksMkJBQTJCLEVBQUUsQ0FBQztnQkFDaEMsS0FBSztvQkFDSCwyQkFBMkIsQ0FBQyxLQUFLLEtBQUssdUJBQXVCLENBQUMsU0FBUyxDQUFDLEdBQUc7d0JBQ3pFLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRzt3QkFDckIsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQzNCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3hELFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FDOUQsQ0FBQyxNQUErQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWSxLQUFLLFVBQVcsQ0FBQyxZQUFZLENBQ3RGLENBQUM7b0JBQ0YsV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLENBQUM7WUFDSCxDQUFDO1lBQ0QsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsS0FBSyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDbEUsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxJQUFJLENBQUMsU0FBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQ3JDLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFVLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNoRixDQUFDO3FCQUFNLENBQUM7b0JBQ04sS0FBSyxHQUFHLFlBQVksQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7WUFFRCxJQUFJLFVBQVUsR0FBRyxpQkFBaUIsRUFBRSxVQUFVLENBQUM7WUFDL0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNoQixJQUNFLFVBQVUsQ0FBQyxTQUFTLEtBQUssMEJBQTBCO29CQUNuRCxVQUFVLENBQUMsU0FBUyxLQUFLLHlCQUF5QixFQUNsRCxDQUFDO29CQUNELElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksaUJBQWlCLENBQUM7b0JBQzVELFVBQVUsR0FBRzt3QkFDWCxJQUFJLEVBQUUsNEJBQTRCLENBQUMsUUFBUTt3QkFDM0MsVUFBVTtxQkFDWCxDQUFDO2dCQUNKLENBQUM7cUJBQU0sSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLHFCQUFxQixFQUFFLENBQUM7b0JBQzFELElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDO29CQUN2RCxVQUFVLEdBQUc7d0JBQ1gsSUFBSSxFQUFFLDRCQUE0QixDQUFDLElBQUk7d0JBQ3ZDLFVBQVU7cUJBQ1gsQ0FBQztnQkFDSixDQUFDO3FCQUFNLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO29CQUMxRCxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQztvQkFDakQsVUFBVSxHQUFHO3dCQUNYLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxJQUFJO3dCQUN2QyxVQUFVO3FCQUNYLENBQUM7Z0JBQ0osQ0FBQztxQkFBTSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEtBQUssbUJBQW1CLEVBQUUsQ0FBQztvQkFDeEQsVUFBVSxHQUFHO3dCQUNYLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxRQUFRO3FCQUM1QyxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTztnQkFDTCxHQUFHLGlCQUFpQjtnQkFDcEIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osWUFBWSxFQUFFLE9BQU8sR0FBRyxVQUFVLENBQUMsWUFBWTtnQkFDL0MsS0FBSztnQkFDTCxXQUFXO2dCQUNYLFVBQVU7Z0JBQ1YsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO2FBQ3hCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxDQUMzRSxDQUFDLFdBQTZCLEVBQUUsRUFBRSxDQUNoQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFvQixFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDN0YsQ0FBQztRQUVGLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFNBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFlBQW9CLEVBQUUsRUFBRTtnQkFDckUsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDVixLQUFLLEVBQUUsRUFBRTtvQkFDVCxZQUFZLEVBQUUsZ0JBQWdCO29CQUM5QixPQUFPLEVBQUU7d0JBQ1A7NEJBQ0UsSUFBSSxFQUFFLG9CQUFvQixDQUFDLE1BQU07NEJBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQ2pDLHdEQUF3RDs0QkFDeEQsSUFBSSxFQUFFO2dDQUNKO29DQUNFLElBQUksRUFBRSxZQUFZO2lDQUNuQjs2QkFDRjs0QkFDRCxLQUFLLEVBQUUsU0FBUzs0QkFDaEIsWUFBWSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDekIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQ0FDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQzs0QkFDcEMsQ0FBQyxDQUFDO3lCQUNMO3FCQUNGO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksS0FBSyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ2xGLElBQUksSUFBSSxDQUFDLFNBQVUsQ0FBQyxPQUFPLEVBQUUsZUFBZSxLQUFLLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM3RSxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQztnQkFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDVixLQUFLLEVBQUUsRUFBRTtvQkFDVCxZQUFZLEVBQUUsU0FBUztvQkFDdkIsT0FBTyxFQUFFO3dCQUNQOzRCQUNFLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxJQUFJOzRCQUMvQixRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDOzRCQUNqQyxJQUFJLEVBQUUsSUFBSTs0QkFDViwyQkFBMkIsRUFBRSxTQUFTOzRCQUN0QyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQzVDLElBQUksRUFBRSxFQUFFO3lCQUNUO3FCQUNGO29CQUNELFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQWdCO1FBQ3hDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUM5QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNqQyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUN4QixJQUFJLENBQUMsU0FBVSxDQUFDLFNBQVMsQ0FBQyxRQUFTLEVBQ25DLElBQUksQ0FBQyxTQUFVLENBQUMsY0FBYyxFQUM5QixNQUFNLENBQUMsUUFBUSxFQUFFLEVBQ2pCLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBVTtRQUN2QyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQ3hCLElBQUksQ0FBQyxTQUFVLENBQUMsU0FBUyxDQUFDLFFBQVMsRUFDbkMsSUFBSSxDQUFDLFNBQVUsQ0FBQyxjQUFjLEVBQzlCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsRUFDakIsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBVyxFQUFFLEdBQVEsRUFBRSxRQUFhO1FBQ3hELElBQUksU0FBbUIsQ0FBQztRQUV4QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFnQixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBRUQsU0FBUyxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUM1QixJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixPQUFPO1FBQ1QsQ0FBQztRQUNELFNBQVMsQ0FBQyxNQUFNLEdBQUc7WUFDakIsR0FBRyxRQUFRLENBQUMsTUFBTTtZQUNsQixLQUFLLEVBQUUsR0FBRztTQUNYLENBQUM7UUFFRixJQUFJLGFBQWEsR0FBUTtZQUN2QixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVUsQ0FBQyxZQUFZO1lBQzFDLFFBQVEsRUFBRSxTQUFTO1NBQ3BCLENBQUM7UUFFRixJQUFJLElBQUksQ0FBQyxTQUFVLENBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLENBQUM7WUFDbkQsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFVLENBQUMsT0FBUSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFFRCxJQUFJLENBQUMsU0FBVSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQzlELElBQUksQ0FBQyxTQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDakQsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFVLENBQUMsY0FBYztZQUN4QyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUU7U0FDZixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsUUFBa0I7UUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsSUFBSSxHQUFHO2dCQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSztnQkFDckIsSUFBSSxFQUFFLGtCQUFrQixDQUFDLElBQUk7Z0JBQzdCLEtBQUssRUFBRSxTQUFTO2FBQ2pCLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLCtCQUErQixDQUFDLFFBQVEsQ0FBQyxVQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLFNBQVM7UUFDZCxPQUFPLGNBQWMsQ0FBQztJQUN4QixDQUFDO0lBRU0sT0FBTyxDQUFDLE9BQWdCO1FBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUNNLGFBQWEsQ0FBQyxPQUFnQjtRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxhQUFhLENBQUMsT0FBZ0I7UUFDcEMsSUFBSSxnQkFBc0MsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFFLENBQUM7WUFDOUMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUNyRixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUU3RSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDckMsQ0FBQyxRQUFrQixFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG9CQUFvQixDQUMvRCxDQUFDO2dCQUNGLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7b0JBQzVDLE9BQU87Z0JBQ1QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBVTtRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUNoRCxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSyxDQUMzQyxDQUFDO1lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFVLEVBQUUsR0FBSSxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLFNBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pCLENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFpQjtRQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUV0QixNQUFNLGlCQUFpQixHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsU0FBVSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU1RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBQyxZQUFZLENBQ3hCLFdBQW1DLEVBQ25DLGFBQXFDO1FBRXJDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxRQUFRLEdBQWEsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBa0IsRUFBRSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQztZQUMxRixJQUFJLFVBQVUsR0FBYSxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFrQixFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQzlGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FDckQsSUFBSSxDQUFDLFNBQVUsRUFDZixRQUFRLEVBQ1IsVUFBVSxDQUNYLENBQUM7WUFDRixJQUFJLENBQUMsU0FBVSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxVQUFVLEdBQW9CO1lBQ2hDLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsd0JBQXdCO2FBQ2hDO1lBQ0QsSUFBSSxFQUFFLEVBQUU7WUFDUixlQUFlLEVBQUUsMkJBQTJCO1lBQzVDLHFCQUFxQixFQUFFO2dCQUNyQixNQUFNLEVBQUU7b0JBQ04sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBVSxDQUFDLGNBQWM7b0JBQzFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJO29CQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87aUJBQ3RCO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBTUQsY0FBYyxDQUFDLEtBQVksRUFBRSxHQUFZO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFhLEVBQUUsRUFBRTtZQUN2QyxJQUFJLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU5RSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDcEIsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLElBQUksUUFBUSxDQUFDLElBQUk7Z0JBQ25DLElBQUksRUFBRSxFQUFFO2dCQUNSLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ1osSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNsQyxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBR0QsUUFBUSxDQUFDLEtBQWdCO1FBQ3ZCLElBQUksV0FBVyxHQUFtQyxFQUFFLENBQUM7UUFFckQsS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFjLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDekQsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUN2QyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDNUQsUUFBUSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ3BCLEtBQUssQ0FBQyxDQUFDO2dDQUNMLEtBQUssQ0FBQyxhQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztnQ0FDdEMsTUFBTTt3QkFDVixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7WUFDbkQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNmLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSztnQkFDeEIsS0FBSyxFQUNILElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQztvQkFDZCxDQUFDLENBQUMsZ0NBQWdDLENBQUMsR0FBRztvQkFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO3dCQUNuQixDQUFDLENBQUMsZ0NBQWdDLENBQUMsSUFBSTt3QkFDdkMsQ0FBQyxDQUFDLFNBQVM7YUFDaEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBVSxFQUFFO1lBQ2pDLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLGtCQUFrQixFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxrQkFBbUI7U0FDeEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFFBQVEsQ0FBQyxLQUEwQjtRQUNqQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQztnQkFDL0IsS0FBSyxFQUFFLEtBQUssQ0FBQyxZQUFhO2dCQUMxQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssS0FBSyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JFLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsS0FBTSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEQsQ0FBQzsrR0E1OEJVLGtCQUFrQiwySkFpRG5CLGlCQUFpQixhQUNqQixjQUFjO21HQWxEYixrQkFBa0IsbUdBRmxCLENBQUMsZ0JBQWdCLENBQUMsMEdBWUQsZ0JBQWdCLHNOQ3hFOUMsOC9MQWdMQTs7NEZEbEhhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSxZQUFZLGFBR1gsQ0FBQyxnQkFBZ0IsQ0FBQzs7MEJBbUQxQixNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsY0FBYzt5Q0E3Q2YsU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUcwQyxVQUFVO3NCQUF6RCxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFLeEIsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQSszQkQsSUFBSTtzQkFBdEIsU0FBUzt1QkFBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xyXG5pbXBvcnQgeyBGbGF0VHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50UmVmLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFBhZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RyZWUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9jb21wb25lbnQtZmFjdG9yeS1zZXJ2aWNlL3Byb2plY3RzJztcclxuaW1wb3J0IHsgU21hcnREaWFsb2dEYXRhIH0gZnJvbSAnLi4vc21hcnQtZGlhbG9nL3Byb2plY3RzJztcclxuaW1wb3J0IHsgRXhwYW5kYWJsZVNlY3Rpb24gfSBmcm9tICcuLi9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24vcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSB9IGZyb20gJy4uL3NtYXJ0LWZpbHRlci1lZGl0b3IvYXBpL21vZGVsL2ZpbHRlckV4cHJlc3Npb25PcmRlckJ5JztcclxuaW1wb3J0IHtcclxuICBTbWFydFRhYmxlLFxyXG4gIFNtYXJ0VGFibGVCdXR0b25UeXBlLFxyXG4gIFNtYXJ0VGFibGVIZWFkZXIsXHJcbiAgU21hcnRUYWJsZUhlYWRlclByb3BlcnR5VHlwZSxcclxuICBTbWFydFRhYmxlSW50ZXJmYWNlLFxyXG4gIFNtYXJ0VGFibGVJbnRlcmZhY2VUeXBlRW51bSxcclxuICBTbWFydFRhYmxlT3JkZXIsXHJcbiAgU21hcnRUYWJsZVR5cGUsXHJcbiAgU21hcnR0YWJsZUNvbXBvbmVudCxcclxufSBmcm9tICcuLi9zbWFydC10YWJsZS9wcm9qZWN0cyc7XHJcbmltcG9ydCB7IFVpQWN0aW9uLCBVaUFjdGlvbkJ1dHRvblR5cGUsIFVpQWN0aW9uRGVzY3JpcHRvciB9IGZyb20gJy4uL3ZpZXctY29udGV4dC9hcGknO1xyXG5pbXBvcnQge1xyXG4gIENPTVBPTkVOVF9MSUJSQVJZLFxyXG4gIENvbXBvbmVudExpYnJhcnksXHJcbiAgVWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZSxcclxuICBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQsXHJcbn0gZnJvbSAnLi4vdmlldy1jb250ZXh0L3Byb2plY3RzJztcclxuaW1wb3J0IHtcclxuICBHcmlkQ29sdW1uTWV0YSxcclxuICBHcmlkUm93LFxyXG4gIEdyaWRTZWxlY3Rpb25Nb2RlLFxyXG4gIEdyaWRTZWxlY3Rpb25UeXBlLFxyXG4gIEdyaWRVcGRhdGVEYXRhLFxyXG4gIEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLFxyXG59IGZyb20gJy4vYXBpL2dyaWQtYXBpJztcclxuaW1wb3J0IHsgVGFibGVMYXlvdXREZWZpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLWxheW91dC1kZWZpbmVyL3RhYmxlLWxheW91dC1kZWZpbmVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEdyaWRVaUFjdGlvblR5cGUsIFNtYXJ0R3JpZCwgU21hcnRMYXlvdXREZWYgfSBmcm9tICcuL21vZGVscy9tb2RlbCc7XHJcbmltcG9ydCB7IFNtYXJ0R3JpZFNlcnZpY2UgfSBmcm9tICcuL3NtYXJ0LWdyaWQuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBTb3J0RXZlbnQsIFNvcnRNZXRhIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBNZW51IH0gZnJvbSAncHJpbWVuZy9tZW51JztcclxuaW1wb3J0IHsgVGFibGVMYXp5TG9hZEV2ZW50IH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5T3JkZXJFbnVtIH0gZnJvbSAnLi4vc21hcnQtZmlsdGVyL3Byb2plY3RzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc21hcnQtZ3JpZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0LWdyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NtYXJ0LWdyaWQuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW1NtYXJ0R3JpZFNlcnZpY2VdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xyXG4gIC8vIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFBhZ2VTaXplOiBudW1iZXIgPSAxMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gWzUsIDEwLCAyNSwgNTBdO1xyXG4gIGNvbXBvbmVudExpYnJhcnkgPSBDb21wb25lbnRMaWJyYXJ5O1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBASW5wdXQoKSBzbWFydEdyaWQ/OiBTbWFydEdyaWQ7XHJcbiAgQElucHV0KCkgdXVpZD86IHN0cmluZztcclxuICBASW5wdXQoKSBkZXY6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gdGFibGVcclxuICBAVmlld0NoaWxkKCd0YWJsZScsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSB2Y1JlZlRhYmxlPzogVmlld0NvbnRhaW5lclJlZjtcclxuICBjb21wb25lbnRSZWZUYWJsZT86IENvbXBvbmVudFJlZjxTbWFydHRhYmxlQ29tcG9uZW50PjtcclxuICBzbWFydFRhYmxlITogU21hcnRUYWJsZTxHcmlkUm93PjtcclxuXHJcbiAgLy8gdG9vbGJhclxyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXInKSB0b29sYmFyPzogVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50O1xyXG5cclxuICAvLyBleHBhbmRhYmxlXHJcbiAgLy8gZ3JpZERhdGFcclxuICBleHBhbmRhYmxlU2VjdGlvbnM/OiBFeHBhbmRhYmxlU2VjdGlvbjxhbnk+W107XHJcblxyXG4gIHBhZ2VFdmVudD86IFBhZ2VFdmVudDtcclxuICBkYXRhc291cmNlPzogbnVsbDtcclxuICBwYWdlU2l6ZT86IG51bWJlcjtcclxuICBsZW5ndGg/OiBudW1iZXI7XHJcbiAgcGFnZUluZGV4PzogbnVtYmVyO1xyXG4gIHZhbHVlczogYW55O1xyXG4gIGdyaWRUYWJsZSE6IFNtYXJ0VGFibGU8YW55PjtcclxuXHJcbiAgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucztcclxuXHJcbiAgc2VsZWN0aW9uQ2hhbmdlczogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdWlBY3Rpb25EZXNjcmlwdG9yczogTWFwPHN0cmluZywgVWlBY3Rpb25EZXNjcmlwdG9yPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgYWZ0ZXJWaWV3SW5pdEV4ZWN1dGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNCbG9ja2VkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8gdHJlZVxyXG4gIHRyZWVDb250cm9sPzogRmxhdFRyZWVDb250cm9sPEdyaWRSb3c+O1xyXG4gIHRyZWVGbGF0dGVuZXI/OiBNYXRUcmVlRmxhdHRlbmVyPEdyaWRSb3csIEdyaWRSb3c+O1xyXG4gIHRyZWVEYXRhU291cmNlPzogTWF0VHJlZUZsYXREYXRhU291cmNlPEdyaWRSb3csIEdyaWRSb3c+O1xyXG4gIHRyZWVDaGVja2xpc3RTZWxlY3Rpb24/OiBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93PjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IFNtYXJ0R3JpZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNmU2VydmljZTogQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSB1aUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlOiBVaUFjdGlvbkRlc2NyaXB0b3JTZXJ2aWNlLFxyXG4gICAgQEluamVjdChDT01QT05FTlRfTElCUkFSWSkgcHVibGljIGNvbXBMaWI6IENvbXBvbmVudExpYnJhcnksXHJcbiAgICBASW5qZWN0KCdncmlkTWVudUljb24nKSBwcml2YXRlIGdyaWRNZW51SWNvbj86IHN0cmluZ1xyXG4gICkge1xyXG4gICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbENoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgLy8gY2FsbGVkIGFmdGVyIGV2ZXJ5IHNlcnZpY2UgY2FsbCAobG9hZCwgc2F2ZSwgcmVmcmVzaCwgZXRjLilcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWw7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzbWFydEdyaWQnXSkge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCA9IGNoYW5nZXNbJ3NtYXJ0R3JpZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy5zZXJ2aWNlLnBhZ2luYXRvciA9IHRoaXMuc21hcnRHcmlkPy5wYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuc2V0dXBUb29sYmFyKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sndXVpZCddKSB7XHJcbiAgICAgIHRoaXMudXVpZCA9IGNoYW5nZXNbJ3V1aWQnXS5jdXJyZW50VmFsdWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5hZnRlclZpZXdJbml0RXhlY3V0ZWQgJiYgdGhpcy51dWlkICYmIHRoaXMuc21hcnRHcmlkKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGV2KSB7XHJcbiAgICAgIC8vIGZvciBkZXYgcHVycG9zZXNcclxuICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwpIHtcclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbDtcclxuICAgICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudXVpZCAmJiB0aGlzLnNtYXJ0R3JpZCAmJiAhdGhpcy5kZXYpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFmdGVyVmlld0luaXRFeGVjdXRlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHRoZSBzZWxlY3RlZCByb3dzIG9mIHRoZSB0YWJsZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRTZWxlY3RlZFJvd3MoKTogU2VsZWN0aW9uTW9kZWw8R3JpZFJvdz4ge1xyXG4gICAgaWYgKCF0aGlzLnNtYXJ0VGFibGUuc2VsZWN0aW9uKSB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgIHJldHVybiB0aGlzLnNtYXJ0VGFibGUhLnNlbGVjdGlvbiE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIEdFVCByZXF1ZXN0IHRvIHRoZSBnZW5lcmljIEdyaWRBUEkgYW5kIHJlZnJlc2hlcyB0aGUgcHJlc2VudGVkXHJcbiAgICogZ3JpZCB3aXRoIHRoZSBuZXdlc3Qgb25lLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyByZWZyZXNoKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5zZXR1cFRvb2xiYXIoKTtcclxuICAgIC8vIHdpbGwgY2F1c2UgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbENoYW5nZWQgdG8gZmlyZVxyXG4gICAgaWYgKHRoaXMudXVpZCkge1xyXG4gICAgICBhd2FpdCB0aGlzLnNlcnZpY2UubG9hZCh0aGlzLnV1aWQsIHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0dXBUb29sYmFyKCkge1xyXG4gICAgLy8gY2hlY2sgaWYgdG9vbGJhciBpcyBhdmFpbGFibGUgX2FuZF8gbmVlZCBzZXQgdXBcclxuICAgIGlmICh0aGlzLnRvb2xiYXIgJiYgdGhpcy5zbWFydEdyaWQpIHtcclxuICAgICAgbGV0IHRvb2xiYXJJZCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkSWRlbnRpZmllciArICdfdG9vbGJhcic7XHJcbiAgICAgIGlmICh0b29sYmFySWQgIT09IHRoaXMudG9vbGJhci5pZCkge1xyXG4gICAgICAgIHRoaXMudG9vbGJhci5pZCA9IHRvb2xiYXJJZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGdyaWRNb2RlbCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWw7XHJcbiAgICBpZiAoZ3JpZE1vZGVsKSB7XHJcbiAgICAgIHRoaXMubGVuZ3RoID0gZ3JpZE1vZGVsLnRvdGFsUm93Q291bnQ7XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSBncmlkTW9kZWwucGFnZVNpemU7XHJcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gZ3JpZE1vZGVsLnBhZ2VJbmRleCA/PyAwO1xyXG4gICAgICBpZiAoZ3JpZE1vZGVsLnBhZ2VTaXplT3B0aW9ucyAmJiBncmlkTW9kZWwucGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IGdyaWRNb2RlbC5wYWdlU2l6ZU9wdGlvbnM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnNob3dFZGl0Q29sdW1ucyA9IGdyaWRNb2RlbD8udmlldz8uZGVzY3JpcHRvcj8uc2hvd0VkaXRDb2x1bW5zO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBraW5kID0gZ3JpZE1vZGVsPy52aWV3Py5kZXNjcmlwdG9yPy5raW5kO1xyXG4gICAgICBpZiAoa2luZCkge1xyXG4gICAgICAgIGxldCBsYXlvdXREZWY7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLlRBQkxFKSB7XHJcbiAgICAgICAgICBsYXlvdXREZWYgPSBTbWFydExheW91dERlZi5UQUJMRTtcclxuICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT09IEdyaWRWaWV3RGVzY3JpcHRvcktpbmRFbnVtLlRSRUUpIHtcclxuICAgICAgICAgIGxheW91dERlZiA9IFNtYXJ0TGF5b3V0RGVmLlRSRUU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChraW5kID09PSBHcmlkVmlld0Rlc2NyaXB0b3JLaW5kRW51bS5DQVJEUykge1xyXG4gICAgICAgICAgbGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuQ0FSRDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxheW91dERlZikge1xyXG4gICAgICAgICAgdGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9IGxheW91dERlZjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGdyaWRNb2RlbD8ucGFnaW5hdG9yID09PSB0cnVlIHx8IGdyaWRNb2RlbD8ucGFnaW5hdG9yID09PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkIS5wYWdpbmF0b3IgPSBncmlkTW9kZWwucGFnaW5hdG9yO1xyXG4gICAgICAgIHRoaXMuc2VydmljZS5wYWdpbmF0b3IgPSB0aGlzLnNtYXJ0R3JpZCEucGFnaW5hdG9yO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdHcmlkTW9kZWwgaXMgdW5kZWZpbmVkIGluIGNvbXBvbmVudCEnKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5zbWFydEdyaWQhLmxheW91dERlZikge1xyXG4gICAgICAvLyBmYWxsYmFjaywgZGVmYXVsdCBUQUJMRVxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID0gU21hcnRMYXlvdXREZWYuVEFCTEU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVEFCTEUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJUYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5FWFBBTkRBQkxFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyRXhwYW5kYWJsZVNlY3Rpb25zKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc21hcnRHcmlkIS5sYXlvdXREZWYgPT09IFNtYXJ0TGF5b3V0RGVmLkNBUkQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJDYXJkcygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNtYXJ0R3JpZCEubGF5b3V0RGVmID09PSBTbWFydExheW91dERlZi5UUkVFKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyVHJlZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUYWJsZSgpIHtcclxuICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlclRhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jbGVhclRyZWUoKTtcclxuICAgIGlmICh0aGlzLmNvbXBMaWIgPT09IHRoaXMuY29tcG9uZW50TGlicmFyeS5QUklNRU5HKSB7XHJcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5wYWdlU2l6ZSEgKiB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnBhZ2VJbmRleCE7XHJcbiAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/Lm9yZGVyZWRDb2x1bW5OYW1lcy5tYXAoKG9yZGVyZWRDb2w6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uY29sdW1ucy5tYXAoKGNvbHVtOiBHcmlkQ29sdW1uTWV0YSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG9yZGVyZWRDb2wgPT09IGNvbHVtLnByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChjb2x1bSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB0YWJsZVJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwhLnBhZ2Uucm93cyEubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXRhYmxlUm93Lmxlbmd0aCkge1xyXG4gICAgICBsZXQgcGxhY2VIb2xkZXJSb3c6IGFueSA9IHt9O1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmNvbHVtbnMubWFwKChtZXRhOiBHcmlkQ29sdW1uTWV0YSkgPT4ge1xyXG4gICAgICAgIHBsYWNlSG9sZGVyUm93W21ldGEucHJvcGVydHlOYW1lXSA9IHVuZGVmaW5lZDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzID0gW3BsYWNlSG9sZGVyUm93XTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGFibGVUeXBlO1xyXG4gICAgaWYgKHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8udGFibGVUeXBlKSB7XHJcbiAgICAgIHRhYmxlVHlwZSA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZy50YWJsZVR5cGU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWw/LnZpZXc/LmRlc2NyaXB0b3I/LnNlbGVjdGlvblR5cGUpIHtcclxuICAgICAgdGFibGVUeXBlID1cclxuICAgICAgICB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5zZWxlY3Rpb25UeXBlID09PSBHcmlkU2VsZWN0aW9uVHlwZS5DSEVDS0JPWFxyXG4gICAgICAgICAgPyBTbWFydFRhYmxlVHlwZS5DSEVDS19CT1hcclxuICAgICAgICAgIDogU21hcnRUYWJsZVR5cGUuUk9XX1NFTEVDVDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRhYmxlVHlwZSA9IFNtYXJ0VGFibGVUeXBlLklOSEVSSVRFRDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmxheW91dERlZiA9PT0gU21hcnRMYXlvdXREZWYuVEFCTEUpIHtcclxuICAgICAgbGV0IHRhYmxlQ29uZmlnOiBTbWFydFRhYmxlSW50ZXJmYWNlPEdyaWRSb3c+ID0ge1xyXG4gICAgICAgIC4uLnRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZyxcclxuICAgICAgICB0YWJsZVJvd3M6IHRhYmxlUm93LFxyXG4gICAgICAgIHRhYmxlVHlwZSxcclxuICAgICAgICBjdXN0b21TbWFydFRhYmxlSGVhZGVyczogYXdhaXQgdGhpcy5jb25zdHJ1Y3RIZWFkZXIoKSEsXHJcbiAgICAgICAgZXhwYW5kYWJsZTogdGhpcy5zbWFydEdyaWQhLmV4cGFuZGFibGUsXHJcbiAgICAgICAgZXhwYW5kZWRDb21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRlZENvbXBvbmVudCxcclxuICAgICAgICB0eXBlOiBTbWFydFRhYmxlSW50ZXJmYWNlVHlwZUVudW0uTk9STUFMLFxyXG4gICAgICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gICAgICAgIGRlZmF1bHRBY3Rpb25Db2RlczogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9ucyEsXHJcbiAgICAgICAgZGVmYXVsdEFjdGlvbnM6IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwuZGVmYXVsdFJvd0FjdGlvbnM/Lm1hcCgoY29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0eXBlOlxyXG4gICAgICAgICAgICAgIGNvZGUgPT09ICdfYWN0aW9uU2VwYXJhdG9yXydcclxuICAgICAgICAgICAgICAgID8gU21hcnRUYWJsZUJ1dHRvblR5cGUuU0VQQVJBVE9SXHJcbiAgICAgICAgICAgICAgICA6IFNtYXJ0VGFibGVCdXR0b25UeXBlLk5PUk1BTCxcclxuICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuZXhlY3V0ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICAgICAgICAvLyBsYWJlbDogdGhpcy5idXR0b25UcmFuc2xhdG9yKHsgY29kZTogY29kZSB9KSxcclxuICAgICAgICAgICAgdHJhbnNsYXRvcjogdGhpcy5idXR0b25UcmFuc2xhdG9yLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIC8vIGFyZ3M6IFtcclxuICAgICAgICAgICAgLy8gICB7XHJcbiAgICAgICAgICAgIC8vICAgICBjb2RlOiBjb2RlLFxyXG4gICAgICAgICAgICAvLyAgIH0sXHJcbiAgICAgICAgICAgIC8vIF0sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uaGlnaGxpZ2h0UHJvcGVydHkgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZD8uZ3JpZE1vZGVsLnZpZXc/LmRlc2NyaXB0b3I/LmhpZ2hsaWdodENsYXNzXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLmhpZ2hsaWdodENsYXNzID0gdGhpcy5zbWFydEdyaWQuZ3JpZE1vZGVsLnZpZXcuZGVzY3JpcHRvci5oaWdobGlnaHRDbGFzcztcclxuICAgICAgICB0YWJsZUNvbmZpZy5oaWdobGlnaHRQcm9wZXJ0eSA9IHRoaXMuc21hcnRHcmlkLmdyaWRNb2RlbC52aWV3LmRlc2NyaXB0b3IuaGlnaGxpZ2h0UHJvcGVydHk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnVpQWN0aW9uRGVzY3JpcHRvclNlcnZpY2UgJiZcclxuICAgICAgICB0aGlzLnNtYXJ0R3JpZCEuc2VydmljZVRvVXNlICYmXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZVxyXG4gICAgICApIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vblNlbGVjdGlvbiA9IHRoaXMub25TZWxlY3QuYmluZCh0aGlzKTtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vbkFsbFNlbGVjdGlvbiA9IHRoaXMub25TZWxlY3RBbGwuYmluZCh0aGlzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUHJlcGFyZWQgZm9yIHNpbXBsZSBjbGlja3NcclxuICAgICAgLy8gaWYgKCF0YWJsZUNvbmZpZy5vblJvd0NsaWNrKSB7XHJcbiAgICAgIC8vICAgdGFibGVDb25maWcub25Sb3dDbGljayA9IHRoaXMub25DbGljay5iaW5kKHRoaXMpO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICBpZiAoIXRhYmxlQ29uZmlnLm9uUm93RG91YmxlQ2xpY2spIHtcclxuICAgICAgICB0YWJsZUNvbmZpZy5vblJvd0RvdWJsZUNsaWNrID0gdGhpcy5vbkRvdWJsZUNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGFibGVDb25maWcuaXNSb3dEaXNhYmxlZFByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGFibGVQcm9wZXJ0eU5hbWUgPSAnc2VsZWN0YWJsZSc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0YWJsZUNvbmZpZy5hc3luY09uRXhwYW5kKSB7XHJcbiAgICAgICAgdGFibGVDb25maWcucm93RXhwYW5kZXIgPSB0aGlzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZXJ2aWNlIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uTW9kZTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICAhdGFibGVDb25maWcuc2VsZWN0aW9uICYmXHJcbiAgICAgICAgIXRhYmxlQ29uZmlnLnNlbGVjdGlvblByb3BlcnR5ICYmXHJcbiAgICAgICAgc2VsZWN0aW9uTW9kZSAhPT0gR3JpZFNlbGVjdGlvbk1vZGUuTk9ORVxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCBpc011bHRpcGxlID0gc2VsZWN0aW9uTW9kZSA9PT0gR3JpZFNlbGVjdGlvbk1vZGUuTVVMVElQTEU7XHJcblxyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGlvblByb3BlcnR5ID0gJ2lkJztcclxuXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLnBhZ2VcclxuICAgICAgICAgIC5yb3dzIS5maWx0ZXIoKGdyaWRSb3c6IEdyaWRSb3cpID0+IGdyaWRSb3cuc2VsZWN0ZWQpXHJcbiAgICAgICAgICAubWFwKChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LmlkISk7XHJcblxyXG4gICAgICAgIHRhYmxlQ29uZmlnLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+KGlzTXVsdGlwbGUsIHNlbGVjdGVkSWRzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zbWFydFRhYmxlID0gbmV3IFNtYXJ0VGFibGU8YW55Pih0YWJsZUNvbmZpZyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5jb21wb25lbnRSZWZUYWJsZSkge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UudXBkYXRlU21hcnRUYWJsZSh0aGlzLnNtYXJ0VGFibGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudmNSZWZUYWJsZT8uY2xlYXIoKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnZjUmVmVGFibGUpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWZUYWJsZSA9IHRoaXMuY2ZTZXJ2aWNlLmNyZWF0ZUNvbXBvbmVudChcclxuICAgICAgICAgIHRoaXMudmNSZWZUYWJsZSEsXHJcbiAgICAgICAgICBTbWFydHRhYmxlQ29tcG9uZW50LFxyXG4gICAgICAgICAgbmV3IE1hcDxzdHJpbmcsIGFueT4oW1snc21hcnRUYWJsZScsIHRoaXMuc21hcnRUYWJsZV1dKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBzdWJzY3JpcHRpb24gPSB0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLnNvcnRFdmVudFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2UuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGhlYWRlcjogU21hcnRUYWJsZUhlYWRlcikgPT4ge1xyXG4gICAgICAgICAgICBoZWFkZXIucHJvcGVydHlOYW1lID0gaGVhZGVyLnByb3BlcnR5TmFtZS5zdWJzdHJpbmcoNSk7XHJcblxyXG4gICAgICAgICAgICBzd2l0Y2ggKGhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGNhc2UgdW5kZWZpbmVkOlxyXG4gICAgICAgICAgICAgICAgaGVhZGVyLm9yZGVyID0gU21hcnRUYWJsZU9yZGVyLkFTQztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgU21hcnRUYWJsZU9yZGVyLkFTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSBTbWFydFRhYmxlT3JkZXIuREVTQzpcclxuICAgICAgICAgICAgICAgIGhlYWRlci5vcmRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZmlsdGVyID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlckJ5TGlzdC5maW5kKFxyXG4gICAgICAgICAgICAgIChmaWx0ZXJFeHByZXNzaW9uOiBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeSkgPT5cclxuICAgICAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBoZWFkZXIucHJvcGVydHlOYW1lXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgJiYgIWhlYWRlci5vcmRlcikge1xyXG4gICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3QuaW5kZXhPZihmaWx0ZXIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3Quc3BsaWNlKGluZGV4ISwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyLm9yZGVyID0gaGVhZGVyLm9yZGVyO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBvcmRlcjogaGVhZGVyLm9yZGVyLFxyXG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBoZWFkZXIucHJvcGVydHlOYW1lLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZ3JpZFVwZGF0ZURhdGE6IEdyaWRVcGRhdGVEYXRhID0ge1xyXG4gICAgICAgICAgICAgIG9yZGVyQnlMaXN0OiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXchLm9yZGVyQnlMaXN0LFxyXG4gICAgICAgICAgICAgIG9yZGVyZWRDb2x1bW5OYW1lczogdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5zb3J0KHRoaXMuc21hcnRHcmlkISwgZ3JpZFVwZGF0ZURhdGEpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmVGFibGUuaW5zdGFuY2Uuc21hcnRUYWJsZS5zZWxlY3Rpb24/LmNoYW5nZWRcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudFJlZlRhYmxlLmluc3RhbmNlLl9kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZXMubmV4dChyb3cpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBleHBhbmQocm93SWQ6IG51bWJlcik6IGFueSB7fVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZXhwYW5kQXN5bmMocm93SW5kZXg6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MpIHtcclxuICAgICAgbGV0IHJvdyA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzW3Jvd0luZGV4XTtcclxuICAgICAgaWYgKHJvdyAmJiByb3cuaWQpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXJ2aWNlLmV4cGFuZCh0aGlzLnNtYXJ0R3JpZCEsIHJvdy5pZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhd2FpdCB0aGlzLnNlcnZpY2UuZXhwYW5kKHRoaXMuc21hcnRHcmlkISwgcm93SW5kZXgudG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlckV4cGFuZGFibGVTZWN0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kYWJsZVNlY3Rpb25zID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbCEucGFnZS5yb3dzIS5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICBoZWFkZXJDb21wb25lbnQ6IHRoaXMuc21hcnRHcmlkIS5oZWFkZXJDb21wb25lbnQsXHJcbiAgICAgICAgaGVhZGVySW5wdXROYW1lOiB0aGlzLnNtYXJ0R3JpZCEuaGVhZGVyQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGhlYWRlckRhdGE6IGl0ZW0sXHJcbiAgICAgICAgY3VzdG9tQ29tcG9uZW50OiB0aGlzLnNtYXJ0R3JpZCEuZXhwYW5kYWJsZUNvbXBvbmVudCxcclxuICAgICAgICBpbnB1dE5hbWU6IHRoaXMuc21hcnRHcmlkIS5leHBhbmRhYmxlQ29tcG9uZW50SW5wdXROYW1lLFxyXG4gICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyQ2FyZHMoKTogdm9pZCB7XHJcbiAgICAvLyBUT0RPXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGlzTXVsdGlwbGVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZXJ2aWNlIS5ncmlkTW9kZWwudmlldz8uZGVzY3JpcHRvcj8uc2VsZWN0aW9uTW9kZTtcclxuICAgIHJldHVybiBzZWxlY3Rpb25Nb2RlID09PSBHcmlkU2VsZWN0aW9uTW9kZS5NVUxUSVBMRTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJUcmVlKCkge1xyXG4gICAgdGhpcy50cmVlQ29udHJvbCA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudHJlZURhdGFTb3VyY2UgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24gPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbmRlclRyZWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyVGFibGUoKTtcclxuICAgIGlmICghdGhpcy50cmVlRGF0YVNvdXJjZSkge1xyXG4gICAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcihcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVyLFxyXG4gICAgICAgIHRoaXMuZ2V0TGV2ZWwsXHJcbiAgICAgICAgdGhpcy5pc0V4cGFuZGFibGUsXHJcbiAgICAgICAgdGhpcy5nZXRDaGlsZHJlblxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxHcmlkUm93Pih0aGlzLmdldExldmVsLCB0aGlzLmlzRXhwYW5kYWJsZSk7XHJcbiAgICAgIHRoaXMudHJlZURhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxHcmlkUm93Pih0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb24oKSk7XHJcbiAgICB9XHJcbiAgICBsZXQgbm9kZXMgPSB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXM7XHJcbiAgICBsZXQgZXhwYW5kZWROb2RlczogKHN0cmluZyB8IHVuZGVmaW5lZClbXTtcclxuICAgIGlmIChub2Rlcykge1xyXG4gICAgICBleHBhbmRlZE5vZGVzID0gbm9kZXNcclxuICAgICAgICAuZmlsdGVyKChub2RlKSA9PiB0aGlzLnRyZWVDb250cm9sPy5pc0V4cGFuZGFibGUobm9kZSkpXHJcbiAgICAgICAgLmZpbHRlcigobm9kZSkgPT4gdGhpcy50cmVlQ29udHJvbD8uaXNFeHBhbmRlZChub2RlKSlcclxuICAgICAgICAubWFwKChub2RlKSA9PiBub2RlLmlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGV4cGFuZGVkTm9kZXMgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwucGFnZS5yb3dzIS5mb3JFYWNoKChyb3c6IGFueSkgPT4gKHJvdy5sZXZlbCA9IHVuZGVmaW5lZCkpO1xyXG4gICAgdGhpcy50cmVlRGF0YVNvdXJjZS5kYXRhID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MhLmZpbHRlcigocm93KSA9PiAhcm93LnBhcmVudCk7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmNsZWFyKCk7XHJcbiAgICB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xyXG4gICAgICBpZiAobm9kZS5zZWxlY3RlZCkge1xyXG4gICAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbj8uc2VsZWN0KG5vZGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMudHJlZUNvbnRyb2w/LmNvbGxhcHNlQWxsKCk7XHJcbiAgICBleHBhbmRlZE5vZGVzLmZvckVhY2goKHJvd0lkKSA9PiB7XHJcbiAgICAgIGxldCByb3cgPSB0aGlzLnRyZWVDb250cm9sPy5kYXRhTm9kZXMuZmluZCgocm93KSA9PiByb3dJZCA9PT0gcm93LmlkKTtcclxuICAgICAgaWYgKHJvdykge1xyXG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2w/LmV4cGFuZChyb3cpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldExldmVsID0gKG5vZGU6IGFueSkgPT4gbm9kZS5sZXZlbCA/PyAwO1xyXG5cclxuICBpc0V4cGFuZGFibGUgPSAobm9kZTogR3JpZFJvdykgPT4gKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlKTtcclxuXHJcbiAgZ2V0Q2hpbGRyZW4gPSAobm9kZTogR3JpZFJvdyk6IEdyaWRSb3dbXSA9PiB7XHJcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xyXG4gICAgICBsZXQgcm93cyA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwucGFnZS5yb3dzPy5maWx0ZXIoKHJvdykgPT5cclxuICAgICAgICBub2RlLmNoaWxkcmVuPy5zb21lKChjaGlsZCkgPT4gY2hpbGQgPT09IHJvdy5pZCEpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChyb3dzKSB7XHJcbiAgICAgICAgcmV0dXJuIHJvd3M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9O1xyXG5cclxuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIF9ub2RlRGF0YTogR3JpZFJvdykgPT4gdGhpcy5pc0V4cGFuZGFibGUoX25vZGVEYXRhKTtcclxuXHJcbiAgdHJhbnNmb3JtZXIgPSAocm93OiBHcmlkUm93LCBsZXZlbDogbnVtYmVyKSA9PiB7XHJcbiAgICAocm93IGFzIGFueSkubGV2ZWwgPSBsZXZlbDtcclxuICAgIHJldHVybiByb3c7XHJcbiAgfTtcclxuXHJcbiAgZ2V0VHJlZUl0ZW0ocm93OiBHcmlkUm93KTogc3RyaW5nIHtcclxuICAgIGxldCBjb2x1bW5zOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IHRoaXMuc21hcnRHcmlkPy5ncmlkTW9kZWwudmlldz8ub3JkZXJlZENvbHVtbk5hbWVzO1xyXG4gICAgbGV0IGRhdGE6IGFueSA9IHJvdy5kYXRhITtcclxuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKGNvbCkgPT4gZGF0YVtjb2xdKS5qb2luKCcgJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcm93LmlkITtcclxuICB9XHJcblxyXG4gIC8qKiBUb2dnbGUgdGhlIHRyZWVOb2RlIHNlbGVjdGlvbi4gU2VsZWN0L2Rlc2VsZWN0IGFsbCB0aGUgZGVzY2VuZGFudHMgbm9kZSAqL1xyXG4gIHRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBzZWxlY3Rpb25CZWZvcmUgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubWFwKChyb3cpID0+IHJvdy5pZCk7XHJcbiAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24udG9nZ2xlKG5vZGUpO1xyXG4gICAgaWYgKHRoaXMuaXNNdWx0aXBsZVNlbGVjdGlvbigpKSB7XHJcbiAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbCEuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXHJcbiAgICAgICAgPyB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0KC4uLmRlc2NlbmRhbnRzKVxyXG4gICAgICAgIDogdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uLmRlc2VsZWN0KC4uLmRlc2NlbmRhbnRzKTtcclxuICAgICAgdGhpcy5jaGVja0FsbFBhcmVudHNTZWxlY3Rpb24obm9kZSk7XHJcbiAgICB9XHJcbiAgICBsZXQgc2VsZWN0aW9uQWZ0ZXIgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uc2VsZWN0ZWQubWFwKChyb3cpID0+IHJvdy5pZCk7XHJcblxyXG4gICAgbGV0IHNlbGVjdGVkSWRzID0gc2VsZWN0aW9uQWZ0ZXIuZmlsdGVyKChzKSA9PiAhc2VsZWN0aW9uQmVmb3JlLmluY2x1ZGVzKHMpKTtcclxuICAgIGxldCB1bnNlbGVjdGVkSWRzID0gc2VsZWN0aW9uQmVmb3JlLmZpbHRlcigocykgPT4gIXNlbGVjdGlvbkFmdGVyLmluY2x1ZGVzKHMpKTtcclxuICAgIGlmICh0aGlzLmRldikge1xyXG4gICAgICAvLyB3aGVuIHNlcnZpY2UgY2FsbCBpcyBhY3RpdmUgKCFkZXYpLCBvblNlbGVjdCB3aWxsIHRvZ2dsZSByb3cuc2VsZWN0ZWRcclxuICAgICAgdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5wYWdlLnJvd3NcclxuICAgICAgICA/LmZpbHRlcigocm93KSA9PiBzZWxlY3RlZElkcy5pbmNsdWRlcyhyb3cuaWQpKVxyXG4gICAgICAgIC5mb3JFYWNoKChyb3cpID0+IChyb3cuc2VsZWN0ZWQgPSB0cnVlKSk7XHJcbiAgICAgIHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzXHJcbiAgICAgICAgPy5maWx0ZXIoKHJvdykgPT4gdW5zZWxlY3RlZElkcy5pbmNsdWRlcyhyb3cuaWQpKVxyXG4gICAgICAgIC5mb3JFYWNoKChyb3cpID0+IChyb3cuc2VsZWN0ZWQgPSBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblNlbGVjdFJvd3Moc2VsZWN0ZWRJZHMsIHVuc2VsZWN0ZWRJZHMpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tBbGxQYXJlbnRzU2VsZWN0aW9uKG5vZGU6IEdyaWRSb3cpOiB2b2lkIHtcclxuICAgIGxldCBwYXJlbnQ6IEdyaWRSb3cgfCBudWxsID0gdGhpcy5nZXRQYXJlbnROb2RlKG5vZGUpO1xyXG4gICAgd2hpbGUgKHBhcmVudCkge1xyXG4gICAgICB0aGlzLmNoZWNrUGFyZW50Tm9kZVNlbGVjdGlvbihwYXJlbnQpO1xyXG4gICAgICBwYXJlbnQgPSB0aGlzLmdldFBhcmVudE5vZGUocGFyZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoZWNrUGFyZW50Tm9kZVNlbGVjdGlvbihub2RlOiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBub2RlU2VsZWN0ZWQgPSB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uaXNTZWxlY3RlZChub2RlKTtcclxuICAgIGNvbnN0IGRlc2NBbGxTZWxlY3RlZCA9IHRoaXMuZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlKTtcclxuICAgIGlmIChub2RlU2VsZWN0ZWQgJiYgIWRlc2NBbGxTZWxlY3RlZCkge1xyXG4gICAgICB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24uZGVzZWxlY3Qobm9kZSk7XHJcbiAgICB9IGVsc2UgaWYgKCFub2RlU2VsZWN0ZWQgJiYgZGVzY0FsbFNlbGVjdGVkKSB7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbi5zZWxlY3Qobm9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBHZXQgdGhlIHBhcmVudCBub2RlIG9mIGEgbm9kZSAqL1xyXG4gIGdldFBhcmVudE5vZGUobm9kZTogR3JpZFJvdyk6IEdyaWRSb3cgfCBudWxsIHtcclxuICAgIGNvbnN0IGN1cnJlbnRMZXZlbCA9IHRoaXMuZ2V0TGV2ZWwobm9kZSk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDEpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMudHJlZUNvbnRyb2whLmRhdGFOb2Rlcy5pbmRleE9mKG5vZGUpIC0gMTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLnRyZWVDb250cm9sIS5kYXRhTm9kZXNbaV07XHJcblxyXG4gICAgICBpZiAodGhpcy5nZXRMZXZlbChjdXJyZW50Tm9kZSkgPCBjdXJyZW50TGV2ZWwpIHtcclxuICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqIFdoZXRoZXIgYWxsIHRoZSBkZXNjZW5kYW50cyBvZiB0aGUgbm9kZSBhcmUgc2VsZWN0ZWQuICovXHJcbiAgZGVzY2VuZGFudHNBbGxTZWxlY3RlZChub2RlOiBHcmlkUm93KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMudHJlZUNvbnRyb2wgfHwgIXRoaXMudHJlZUNoZWNrbGlzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXNjZW5kYW50cyA9IHRoaXMudHJlZUNvbnRyb2wuZ2V0RGVzY2VuZGFudHMobm9kZSk7XHJcbiAgICBjb25zdCBkZXNjQWxsU2VsZWN0ZWQgPVxyXG4gICAgICBkZXNjZW5kYW50cy5sZW5ndGggPiAwICYmXHJcbiAgICAgIGRlc2NlbmRhbnRzLmV2ZXJ5KChjaGlsZCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyZWVDaGVja2xpc3RTZWxlY3Rpb24hLmlzU2VsZWN0ZWQoY2hpbGQpO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBkZXNjQWxsU2VsZWN0ZWQ7XHJcbiAgfVxyXG5cclxuICAvKiogV2hldGhlciBwYXJ0IG9mIHRoZSBkZXNjZW5kYW50cyBhcmUgc2VsZWN0ZWQgKi9cclxuICBkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGU6IEdyaWRSb3cpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy50cmVlQ29udHJvbCB8fCAhdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gdGhpcy50cmVlQ29udHJvbC5nZXREZXNjZW5kYW50cyhub2RlKTtcclxuICAgIGxldCByZXN1bHQgPSBkZXNjZW5kYW50cy5zb21lKChjaGlsZCkgPT4gdGhpcy50cmVlQ2hlY2tsaXN0U2VsZWN0aW9uIS5pc1NlbGVjdGVkKGNoaWxkKSk7XHJcbiAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uKCkpIHtcclxuICAgICAgcmVzdWx0ID0gcmVzdWx0ICYmICF0aGlzLmRlc2NlbmRhbnRzQWxsU2VsZWN0ZWQobm9kZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjb25zdHJ1Y3RIZWFkZXIoKTogUHJvbWlzZTxTbWFydFRhYmxlSGVhZGVyW10+IHtcclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cyAmJiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnBhZ2Uucm93cy5sZW5ndGgpIHtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC5wYWdlLnJvd3MubWFwKGFzeW5jIChncmlkUm93OiBHcmlkUm93KSA9PiB7XHJcbiAgICAgICAgICBsZXQgbmV3VWlBY3Rpb25zID0gZ3JpZFJvdy5hY3Rpb25zPy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh1aUFjdGlvbjogYW55KSA9PiAhdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgaWYgKG5ld1VpQWN0aW9ucykge1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICBuZXdVaUFjdGlvbnMubWFwKGFzeW5jICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBkZXNjcmlwdG9yOiBVaUFjdGlvbkRlc2NyaXB0b3IgPVxyXG4gICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZT8uZ2V0QWN0aW9uRGVzY3JpcHRvcih1aUFjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdWlBY3Rpb24uY29kZSA/PyAnQ09ERScsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBVaUFjdGlvbkJ1dHRvblR5cGUuTk9STUFMLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLnNldCh1aUFjdGlvbi5jb2RlISwgZGVzY3JpcHRvcik7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBvcmVkZXJlZERlc2NDb2x1bW5zID0gdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5vcmRlcmVkQ29sdW1uTmFtZXMubWFwKFxyXG4gICAgICAocHJvcGVydHlOYW1lOiBzdHJpbmcpID0+XHJcbiAgICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRNb2RlbC52aWV3IS5kZXNjcmlwdG9yIS5jb2x1bW5zIS5maW5kKFxyXG4gICAgICAgICAgKGNvbERlc2NyaXB0b3I6IEdyaWRDb2x1bW5NZXRhKSA9PiBjb2xEZXNjcmlwdG9yLnByb3BlcnR5TmFtZSA9PT0gcHJvcGVydHlOYW1lXHJcbiAgICAgICAgKVxyXG4gICAgKS5mbGF0TWFwKChmKSA9PiBmID8/IFtdKTtcclxuXHJcbiAgICBsZXQgaGVhZGVyID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIG9yZWRlcmVkRGVzY0NvbHVtbnMubWFwKGFzeW5jIChkZXNjQ29sdW1uOiBHcmlkQ29sdW1uTWV0YSk6IFByb21pc2U8U21hcnRUYWJsZUhlYWRlcj4gPT4ge1xyXG4gICAgICAgIGxldCBjdXN0b21UYWJsZUhlYWRlciA9IHRoaXMuc21hcnRHcmlkIS50YWJsZUNvbmZpZz8uY3VzdG9tU21hcnRUYWJsZUhlYWRlcnM/LmZpbmQoXHJcbiAgICAgICAgICAoaGVhZGVyOiBTbWFydFRhYmxlSGVhZGVyKSA9PiBoZWFkZXIucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uLnByb3BlcnR5TmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbSA9IHRoaXMuc21hcnRHcmlkIS5ncmlkTW9kZWwudmlldz8ub3JkZXJCeUxpc3Q/LmZpbmQoXHJcbiAgICAgICAgICAoZmlsdGVyRXhwcmVzc2lvbjogRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnkpID0+XHJcbiAgICAgICAgICAgIGZpbHRlckV4cHJlc3Npb24ucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uIS5wcm9wZXJ0eU5hbWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCBvcmRlcjtcclxuICAgICAgICBsZXQgb3JkZXJOdW1iZXI7XHJcbiAgICAgICAgaWYgKGZpbHRlckV4cHJlc3Npb25PcmRlckJ5SXRlbSkge1xyXG4gICAgICAgICAgb3JkZXIgPVxyXG4gICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9uT3JkZXJCeUl0ZW0ub3JkZXIgPT09IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5Lk9yZGVyRW51bS5Bc2NcclxuICAgICAgICAgICAgICA/IFNtYXJ0VGFibGVPcmRlci5BU0NcclxuICAgICAgICAgICAgICA6IFNtYXJ0VGFibGVPcmRlci5ERVNDO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBvcmRlck51bWJlciA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyEub3JkZXJCeUxpc3QuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgIChmaWx0ZXI6IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5KSA9PiBmaWx0ZXIucHJvcGVydHlOYW1lID09PSBkZXNjQ29sdW1uIS5wcm9wZXJ0eU5hbWVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgb3JkZXJOdW1iZXIrKztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JpZ25hbExhYmVsID0gY3VzdG9tVGFibGVIZWFkZXI/LmxhYmVsID8/IGRlc2NDb2x1bW4ubGFiZWw7XHJcbiAgICAgICAgbGV0IGxhYmVsID0gJyc7XHJcbiAgICAgICAgaWYgKCFkZXNjQ29sdW1uLmhpZGVMYWJlbCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS50cmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGxhYmVsID0gYXdhaXQgdGhpcy5zbWFydEdyaWQhLnRyYW5zbGF0ZVNlcnZpY2U/LmdldChvcmlnbmFsTGFiZWwpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGFiZWwgPSBvcmlnbmFsTGFiZWw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcHJvcGVydGllcyA9IGN1c3RvbVRhYmxlSGVhZGVyPy5wcm9wZXJ0aWVzO1xyXG4gICAgICAgIGlmICghcHJvcGVydGllcykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5PZmZzZXREYXRlVGltZScgfHxcclxuICAgICAgICAgICAgZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLnRpbWUuTG9jYWxEYXRlVGltZSdcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgZGF0ZUZvcm1hdCA9IGRlc2NDb2x1bW4udHlwZUZvcm1hdCA/PyAneXl5eS5NTS5kZCBIOm1tJztcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLkRBVEVUSU1FLFxyXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlc2NDb2x1bW4udHlwZUNsYXNzID09PSAnamF2YS50aW1lLkxvY2FsRGF0ZScpIHtcclxuICAgICAgICAgICAgbGV0IGRhdGVGb3JtYXQgPSBkZXNjQ29sdW1uLnR5cGVGb3JtYXQgPz8gJ3l5eXkuTU0uZGQnO1xyXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xyXG4gICAgICAgICAgICAgIHR5cGU6IFNtYXJ0VGFibGVIZWFkZXJQcm9wZXJ0eVR5cGUuREFURSxcclxuICAgICAgICAgICAgICBkYXRlRm9ybWF0LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChkZXNjQ29sdW1uLnR5cGVDbGFzcyA9PT0gJ2phdmEudGltZS5Mb2NhbFRpbWUnKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRlRm9ybWF0ID0gZGVzY0NvbHVtbi50eXBlRm9ybWF0ID8/ICdIOm1tJztcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLlRJTUUsXHJcbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZGVzY0NvbHVtbi50eXBlQ2xhc3MgPT09ICdqYXZhLmxhbmcuQm9vbGVhbicpIHtcclxuICAgICAgICAgICAgcHJvcGVydGllcyA9IHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlSGVhZGVyUHJvcGVydHlUeXBlLkNIRUNLQk9YLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIC4uLmN1c3RvbVRhYmxlSGVhZGVyLFxyXG4gICAgICAgICAgbGFiZWw6IGxhYmVsLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnZGF0YS4nICsgZGVzY0NvbHVtbi5wcm9wZXJ0eU5hbWUsXHJcbiAgICAgICAgICBvcmRlcixcclxuICAgICAgICAgIG9yZGVyTnVtYmVyLFxyXG4gICAgICAgICAgcHJvcGVydGllcyxcclxuICAgICAgICAgIHN0eWxlOiBkZXNjQ29sdW1uLnN0eWxlLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBjb21wbGVtZW50ID0gdGhpcy5zbWFydEdyaWQhLnRhYmxlQ29uZmlnPy5jdXN0b21TbWFydFRhYmxlSGVhZGVycz8uZmlsdGVyKFxyXG4gICAgICAodGFibGVIZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+XHJcbiAgICAgICAgIWhlYWRlci5zb21lKCh0SDogU21hcnRUYWJsZUhlYWRlcikgPT4gdEgucHJvcGVydHlOYW1lLmluY2x1ZGVzKHRhYmxlSGVhZGVyLnByb3BlcnR5TmFtZSkpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChjb21wbGVtZW50KSB7XHJcbiAgICAgIGhlYWRlci5wdXNoKC4uLmNvbXBsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8uc2ltcGxlQnV0dG9ucykge1xyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucy5zaW1wbGVCdXR0b25zLmZvckVhY2goKHVpQWN0aW9uQ29kZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnc2ltcGxlX2J1dHRvbnMnLFxyXG4gICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogU21hcnRUYWJsZUJ1dHRvblR5cGUuUkFJU0VELFxyXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAvLyBsYWJlbDogdGhpcy5idXR0b25UcmFuc2xhdG9yKHsgY29kZTogdWlBY3Rpb25Db2RlIH0pLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgY29kZTogdWlBY3Rpb25Db2RlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXHJcbiAgICAgICAgICAgICAgc2hvd0J1dHRvbklmOiAocm93OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICByb3cuYWN0aW9ucy5zb21lKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uY29kZSA9PT0gdWlBY3Rpb25Db2RlO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWhlYWRlci5zb21lKChoZWFkZXI6IFNtYXJ0VGFibGVIZWFkZXIpID0+IGhlYWRlci5wcm9wZXJ0eU5hbWUgPT09ICdteV9tZW51JykpIHtcclxuICAgICAgaWYgKHRoaXMuc21hcnRHcmlkIS5vcHRpb25zPy5yb3dVaUFjdGlvblR5cGUgPT09IEdyaWRVaUFjdGlvblR5cGUuUE9QVVBfTUVOVSkge1xyXG4gICAgICAgIGxldCBpY29uID0gdGhpcy5ncmlkTWVudUljb24gPz8gJ21vcmVfdmVydCc7XHJcbiAgICAgICAgaGVhZGVyLnB1c2goe1xyXG4gICAgICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICAgICAgcHJvcGVydHlOYW1lOiAnbXlfbWVudScsXHJcbiAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBTbWFydFRhYmxlQnV0dG9uVHlwZS5NRU5VLFxyXG4gICAgICAgICAgICAgIGNhbGxiYWNrOiB0aGlzLmV4ZWN1dGUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBpY29uOiBpY29uLFxyXG4gICAgICAgICAgICAgIG1lbnVJdGVtQnV0dG9uc1Byb3BlcnR5TmFtZTogJ2FjdGlvbnMnLFxyXG4gICAgICAgICAgICAgIHRyYW5zbGF0b3I6IHRoaXMuYnV0dG9uVHJhbnNsYXRvci5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIGFyZ3M6IFtdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICAgIGlzU29ydGFibGU6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGhlYWRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvbkNoYW5nZVBhZ2UoZXZlbnQ6IFBhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgbGV0IG9mZnNldCA9IGV2ZW50LnBhZ2VTaXplICogZXZlbnQucGFnZUluZGV4O1xyXG4gICAgbGV0IGxpbWl0ID0gZXZlbnQucGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VJbmRleCA9IGV2ZW50LnBhZ2VJbmRleDtcclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5zZXRQYWdlKFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXdVdWlkISxcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBvZmZzZXQudG9TdHJpbmcoKSxcclxuICAgICAgbGltaXQudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvblByaW1lQ2hhbmdlUGFnZShldmVudDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgb2Zmc2V0ID0gZXZlbnQuZmlyc3Q7XHJcbiAgICBsZXQgbGltaXQgPSBldmVudC5yb3dzO1xyXG4gICAgdGhpcy5wYWdlSW5kZXggPSBldmVudC5maXJzdDtcclxuICAgIGF3YWl0IHRoaXMuc2VydmljZS5zZXRQYWdlKFxyXG4gICAgICB0aGlzLnNtYXJ0R3JpZCEuZ3JpZE1vZGVsLnZpZXdVdWlkISxcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLmdyaWRJZGVudGlmaWVyLFxyXG4gICAgICBvZmZzZXQudG9TdHJpbmcoKSxcclxuICAgICAgbGltaXQudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZShhcmdzOiBhbnlbXSwgcm93OiBhbnksIHVpQWN0aW9uOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCBfdWlBY3Rpb246IFVpQWN0aW9uO1xyXG5cclxuICAgIGlmICghdWlBY3Rpb24pIHtcclxuICAgICAgdWlBY3Rpb24gPSByb3cuYWN0aW9ucy5maWx0ZXIoKGFjdGlvbjogVWlBY3Rpb24pID0+IGFjdGlvbi5jb2RlID09PSBhcmdzWzBdLmNvZGUpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIF91aUFjdGlvbiA9IHsgLi4udWlBY3Rpb24gfTtcclxuICAgIGlmIChfdWlBY3Rpb24uZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgX3VpQWN0aW9uLnBhcmFtcyA9IHtcclxuICAgICAgLi4udWlBY3Rpb24ucGFyYW1zLFxyXG4gICAgICBtb2RlbDogcm93LFxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgdWlBY3Rpb25Nb2RlbDogYW55ID0ge1xyXG4gICAgICBzZXJ2aWNlVG9Vc2U6IHRoaXMuc21hcnRHcmlkIS5zZXJ2aWNlVG9Vc2UsXHJcbiAgICAgIHVpQWN0aW9uOiBfdWlBY3Rpb24sXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucz8udWlBY3Rpb25Nb2RlbENhbGxiYWNrKSB7XHJcbiAgICAgIHVpQWN0aW9uTW9kZWwgPSB0aGlzLnNtYXJ0R3JpZCEub3B0aW9ucyEudWlBY3Rpb25Nb2RlbENhbGxiYWNrKHVpQWN0aW9uTW9kZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc21hcnRHcmlkIS51aUFjdGlvblNlcnZpY2UudWlBY3Rpb25Nb2RlbCA9IHVpQWN0aW9uTW9kZWw7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudWlBY3Rpb25TZXJ2aWNlLmV4ZWN1dGUoX3VpQWN0aW9uLCB7XHJcbiAgICAgIHdpZGdldElkOiB0aGlzLnNtYXJ0R3JpZCEuZ3JpZElkZW50aWZpZXIsXHJcbiAgICAgIG5vZGVJZDogcm93LmlkLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1dHRvblRyYW5zbGF0b3IodWlBY3Rpb246IFVpQWN0aW9uKTogVWlBY3Rpb25EZXNjcmlwdG9yIHtcclxuICAgIGxldCBkZXNjID0gdGhpcy51aUFjdGlvbkRlc2NyaXB0b3JzLmdldCh1aUFjdGlvbi5jb2RlISk7XHJcbiAgICBpZiAoIWRlc2MpIHtcclxuICAgICAgZGVzYyA9IHtcclxuICAgICAgICB0aXRsZTogdWlBY3Rpb24uY29kZSEsXHJcbiAgICAgICAgdHlwZTogVWlBY3Rpb25CdXR0b25UeXBlLkZMQVQsXHJcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmICh1aUFjdGlvbi5kZXNjcmlwdG9yKSB7XHJcbiAgICAgIHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZS5tZXJnZUFjdGlvbkRlc2NyaXB0b3JJbnRvQ2xpZW50KHVpQWN0aW9uLmRlc2NyaXB0b3IhLCBkZXNjKTtcclxuICAgIH1cclxuICAgIHJldHVybiBkZXNjO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxheW91dERlZigpOiB0eXBlb2YgU21hcnRMYXlvdXREZWYge1xyXG4gICAgcmV0dXJuIFNtYXJ0TGF5b3V0RGVmO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2xpY2soZ3JpZFJvdzogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgdGhpcy5oYW5kbGVPbkNsaWNrKGdyaWRSb3cpO1xyXG4gIH1cclxuICBwdWJsaWMgb25Eb3VibGVDbGljayhncmlkUm93OiBHcmlkUm93KTogdm9pZCB7XHJcbiAgICB0aGlzLmhhbmRsZU9uQ2xpY2soZ3JpZFJvdyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU9uQ2xpY2soZ3JpZFJvdzogR3JpZFJvdyk6IHZvaWQge1xyXG4gICAgbGV0IGRlZmF1bHRSb3dBY3Rpb246IFVpQWN0aW9uIHwgdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuc2VydmljZS5ncmlkTW9kZWw/LmRlZmF1bHRSb3dBY3Rpb25zKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLnNlcnZpY2UuZ3JpZE1vZGVsLmRlZmF1bHRSb3dBY3Rpb25zLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRSb3dBY3Rpb25Db2RlID0gdGhpcy5zZXJ2aWNlLmdyaWRNb2RlbC5kZWZhdWx0Um93QWN0aW9uc1tpbmRleF07XHJcblxyXG4gICAgICAgIGRlZmF1bHRSb3dBY3Rpb24gPSBncmlkUm93LmFjdGlvbnMuZmluZChcclxuICAgICAgICAgICh1aUFjdGlvbjogVWlBY3Rpb24pID0+IHVpQWN0aW9uLmNvZGUgPT09IGRlZmF1bHRSb3dBY3Rpb25Db2RlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZGVmYXVsdFJvd0FjdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5leGVjdXRlKFtdLCBncmlkUm93LCBkZWZhdWx0Um93QWN0aW9uKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBvblNlbGVjdChyb3dJZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmlzQmxvY2tlZCA9IHRydWU7XHJcbiAgICBpZiAodGhpcy5kZXYpIHtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuc2VydmljZS5ncmlkTW9kZWwucGFnZS5yb3dzPy5maW5kKFxyXG4gICAgICAgIChncmlkUm93OiBHcmlkUm93KSA9PiBncmlkUm93LmlkID09PSByb3dJZFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3QodGhpcy5zbWFydEdyaWQhLCByb3chKTtcclxuICAgICAgdGhpcy5zbWFydEdyaWQhLnZpZXdDb250ZXh0U2VydmljZS5oYW5kbGVDaGFuZ2VzKHZpZXdDb250ZXh0Q2hhbmdlLmNoYW5nZXMpO1xyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb25TZWxlY3RBbGwoc2VsZWN0ZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuaXNCbG9ja2VkID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3RBbGwodGhpcy5zbWFydEdyaWQhLCBzZWxlY3RlZCk7XHJcbiAgICB0aGlzLnNtYXJ0R3JpZCEudmlld0NvbnRleHRTZXJ2aWNlLmhhbmRsZUNoYW5nZXModmlld0NvbnRleHRDaGFuZ2UuY2hhbmdlcyk7XHJcblxyXG4gICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIG9uU2VsZWN0Um93cyhcclxuICAgIHNlbGVjdGVkSWRzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdLFxyXG4gICAgdW5zZWxlY3RlZElkczogKHN0cmluZyB8IHVuZGVmaW5lZClbXVxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5pc0Jsb2NrZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMuZGV2KSB7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgc2VsZWN0ZWQ6IHN0cmluZ1tdID0gc2VsZWN0ZWRJZHMuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBzdHJpbmcgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcclxuICAgICAgbGV0IHVuc2VsZWN0ZWQ6IHN0cmluZ1tdID0gdW5zZWxlY3RlZElkcy5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xyXG4gICAgICBjb25zdCB2aWV3Q29udGV4dENoYW5nZSA9IGF3YWl0IHRoaXMuc2VydmljZS5zZWxlY3RSb3dzKFxyXG4gICAgICAgIHRoaXMuc21hcnRHcmlkISxcclxuICAgICAgICBzZWxlY3RlZCxcclxuICAgICAgICB1bnNlbGVjdGVkXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc21hcnRHcmlkIS52aWV3Q29udGV4dFNlcnZpY2UuaGFuZGxlQ2hhbmdlcyh2aWV3Q29udGV4dENoYW5nZS5jaGFuZ2VzKTtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlZGl0Q29sdW1ucygpOiB2b2lkIHtcclxuICAgIGxldCBkaWFsb2dEYXRhOiBTbWFydERpYWxvZ0RhdGEgPSB7XHJcbiAgICAgIGNvbnRlbnQ6IHtcclxuICAgICAgICB0aXRsZTogJ09zemxvcG9rIHRlc3RyZXN6YWLDoXNhJyxcclxuICAgICAgfSxcclxuICAgICAgc2l6ZToge30sXHJcbiAgICAgIGN1c3RvbUNvbXBvbmVudDogVGFibGVMYXlvdXREZWZpbmVyQ29tcG9uZW50LFxyXG4gICAgICBjdXN0b21Db21wb25lbnRJbnB1dHM6IHtcclxuICAgICAgICBjb25maWc6IHtcclxuICAgICAgICAgIHV1aWQ6IHRoaXMudXVpZCxcclxuICAgICAgICAgIGlkZW50aWZpZXI6IHRoaXMuc21hcnRHcmlkIS5ncmlkSWRlbnRpZmllcixcclxuICAgICAgICAgIHZpZXc6IHRoaXMuc2VydmljZS5ncmlkTW9kZWwudmlldyxcclxuICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZSxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZGlhbG9nLm9wZW4oVGFibGVMYXlvdXREZWZpbmVyQ29tcG9uZW50LCB7IGRhdGE6IGRpYWxvZ0RhdGEgfSk7XHJcbiAgfVxyXG5cclxuICAvL1BSSU1FTkdcclxuICBjb2x1bW5zOiBHcmlkQ29sdW1uTWV0YVtdID0gW107XHJcbiAgbWVudUJ1dHRvbnMhOiBNZW51SXRlbVtdO1xyXG4gIEBWaWV3Q2hpbGQoJ21lbnUnKSBtZW51ITogTWVudTtcclxuICBvbk9wdGlvbnNDbGljayhldmVudDogRXZlbnQsIHJvdzogR3JpZFJvdykge1xyXG4gICAgdGhpcy5tZW51QnV0dG9ucyA9IFtdO1xyXG4gICAgcm93LmFjdGlvbnM/Lm1hcChhc3luYyAodWlBY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBsZXQgZGVzYyA9IGF3YWl0IHRoaXMudWlBY3Rpb25EZXNjcmlwdG9yU2VydmljZS5nZXRBY3Rpb25EZXNjcmlwdG9yKHVpQWN0aW9uKTtcclxuXHJcbiAgICAgIHRoaXMubWVudUJ1dHRvbnMucHVzaCh7XHJcbiAgICAgICAgbGFiZWw6IGRlc2M/LnRpdGxlID8/IHVpQWN0aW9uLmNvZGUsXHJcbiAgICAgICAgaWNvbjogJycsXHJcbiAgICAgICAgY29tbWFuZDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5leGVjdXRlKFtdLCByb3csIHVpQWN0aW9uKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5tZW51LnRvZ2dsZShldmVudCk7XHJcbiAgfVxyXG5cclxuICBwcmV2aW91c211bHRpU29ydE1ldGE/OiBTb3J0TWV0YVtdO1xyXG4gIGdyaWRTb3J0KGV2ZW50OiBTb3J0RXZlbnQpIHtcclxuICAgIGxldCBvcmRlckJ5TGlzdDogQXJyYXk8RmlsdGVyRXhwcmVzc2lvbk9yZGVyQnk+ID0gW107XHJcblxyXG4gICAgZXZlbnQubXVsdGlTb3J0TWV0YT8ubWFwKChtZXRhOiBTb3J0TWV0YSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBpZiAodGhpcy5wcmV2aW91c211bHRpU29ydE1ldGEgJiYgdGhpcy5wcmV2aW91c211bHRpU29ydE1ldGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNtdWx0aVNvcnRNZXRhLm1hcCgob3JkZXIpID0+IHtcclxuICAgICAgICAgIGlmIChtZXRhLmZpZWxkID09PSBvcmRlci5maWVsZCAmJiBvcmRlci5vcmRlciAhPSBtZXRhLm9yZGVyKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3JkZXIub3JkZXIpIHtcclxuICAgICAgICAgICAgICBjYXNlIC0xOlxyXG4gICAgICAgICAgICAgICAgZXZlbnQubXVsdGlTb3J0TWV0YSEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c211bHRpU29ydE1ldGEgPSBldmVudC5tdWx0aVNvcnRNZXRhO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGV2ZW50Lm11bHRpU29ydE1ldGE/Lm1hcCgobWV0YSkgPT4ge1xyXG4gICAgICBvcmRlckJ5TGlzdC5wdXNoKHtcclxuICAgICAgICBwcm9wZXJ0eU5hbWU6IG1ldGEuZmllbGQsXHJcbiAgICAgICAgb3JkZXI6XHJcbiAgICAgICAgICBtZXRhLm9yZGVyID09PSAxXHJcbiAgICAgICAgICAgID8gRmlsdGVyRXhwcmVzc2lvbk9yZGVyQnlPcmRlckVudW0uQVNDXHJcbiAgICAgICAgICAgIDogbWV0YS5vcmRlciA9PT0gLTFcclxuICAgICAgICAgICAgPyBGaWx0ZXJFeHByZXNzaW9uT3JkZXJCeU9yZGVyRW51bS5ERVNDXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VydmljZS5zb3J0KHRoaXMuc21hcnRHcmlkISwge1xyXG4gICAgICBvcmRlckJ5TGlzdDogb3JkZXJCeUxpc3QsXHJcbiAgICAgIG9yZGVyZWRDb2x1bW5OYW1lczogdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXMhLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGxhenlMb2FkKGV2ZW50PzogVGFibGVMYXp5TG9hZEV2ZW50KSB7XHJcbiAgICB0aGlzLnByZXZpb3VzbXVsdGlTb3J0TWV0YSA9IFtdO1xyXG4gICAgdGhpcy5zbWFydEdyaWQ/LmdyaWRNb2RlbC52aWV3Py5vcmRlckJ5TGlzdC5tYXAoKG9yZGVyKSA9PiB7XHJcbiAgICAgIHRoaXMucHJldmlvdXNtdWx0aVNvcnRNZXRhPy5wdXNoKHtcclxuICAgICAgICBmaWVsZDogb3JkZXIucHJvcGVydHlOYW1lISxcclxuICAgICAgICBvcmRlcjogb3JkZXIub3JkZXIgPT09IEZpbHRlckV4cHJlc3Npb25PcmRlckJ5T3JkZXJFbnVtLkFTQyA/IDEgOiAtMSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIGV2ZW50IS5tdWx0aVNvcnRNZXRhID0gdGhpcy5wcmV2aW91c211bHRpU29ydE1ldGE7XHJcbiAgfVxyXG59XHJcbiIsIkBpZihjb21wTGliID09PSBjb21wb25lbnRMaWJyYXJ5LlBSSU1FTkcpIHtcclxuPGRpdiAqbmdJZj1cInNtYXJ0R3JpZFwiIGNsYXNzPVwicHJpbWVTbWFydEdyaWQtY29udGFpbmVyXCI+XHJcbiAgPHAtdGFibGVcclxuICAgICNwVGFibGVcclxuICAgIFt2YWx1ZV09XCJzbWFydEdyaWQuZ3JpZE1vZGVsLnBhZ2Uucm93cyFcIlxyXG4gICAgKHNvcnRGdW5jdGlvbik9XCJncmlkU29ydCgkZXZlbnQpXCJcclxuICAgIFtjdXN0b21Tb3J0XT1cInRydWVcIlxyXG4gICAgW3NvcnRNb2RlXT1cIidtdWx0aXBsZSdcIlxyXG4gICAgW2xhenldPVwidHJ1ZVwiXHJcbiAgICAob25MYXp5TG9hZCk9XCJsYXp5TG9hZCgkZXZlbnQpXCJcclxuICA+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGggW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wucHJvcGVydHlOYW1lXCIgKm5nRm9yPVwibGV0IGNvbCBvZiBjb2x1bW5zXCI+XHJcbiAgICAgICAgICA8cC1zb3J0SWNvbiBbZmllbGRdPVwiY29sLnByb3BlcnR5TmFtZVwiIC8+XHJcbiAgICAgICAgICB7eyBjb2wubGFiZWwgfX1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICAgIDx0aD48L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8IS0tICA8dHI+XHJcbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2Ygc21hcnRHcmlkPy5ncmlkTW9kZWw/LnZpZXc/Lm9yZGVyZWRDb2x1bW5OYW1lc1wiPlxyXG4gICAgICAgICAgPHAtY29sdW1uRmlsdGVyXHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgW2ZpZWxkXT1cIidkYXRhLicgKyBjb2xcIlxyXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlYXJjaCBieSAnICsgY29sXCJcclxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCInRmlsdGVyICcgKyBjb2xcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L3RyPiAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1yb3c+XHJcbiAgICAgIDx0ciAqbmdJZj1cInJvdyAmJiByb3cuZGF0YVwiPlxyXG4gICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIHNtYXJ0R3JpZD8uZ3JpZE1vZGVsPy52aWV3Py5vcmRlcmVkQ29sdW1uTmFtZXNcIj5cclxuICAgICAgICAgIHt7IHJvdy5kYXRhW2NvbF0gfX1cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgIDxwLWJ1dHRvblxyXG4gICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwicm93LmFjdGlvbnMgJiYgcm93LmFjdGlvbnMubGVuZ3RoID4gMFwiXHJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uT3B0aW9uc0NsaWNrKCRldmVudCwgcm93KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uIGljb249XCJlbGxpcHNpcy12XCI+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgPC9wLWJ1dHRvbj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L3AtdGFibGU+XHJcbiAgPHAtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cInNtYXJ0R3JpZC5wYWdpbmF0b3JcIlxyXG4gICAgW2ZpcnN0XT1cInBhZ2VJbmRleCFcIlxyXG4gICAgW3RvdGFsUmVjb3Jkc109XCJsZW5ndGghXCJcclxuICAgIFtyb3dzXT1cInBhZ2VTaXplXCJcclxuICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcclxuICAgIChvblBhZ2VDaGFuZ2UpPVwib25QcmltZUNoYW5nZVBhZ2UoJGV2ZW50KVwiXHJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gIC8+XHJcbiAgPHAtbWVudSAjbWVudSBbbW9kZWxdPVwibWVudUJ1dHRvbnNcIiBbcG9wdXBdPVwidHJ1ZVwiPiA8L3AtbWVudT5cclxuPC9kaXY+XHJcbn1AZWxzZSB7XHJcbjxkaXYgKm5nSWY9XCJzbWFydEdyaWRcIiBjbGFzcz1cInNtYXJ0R3JpZC1jb250YWluZXJcIj5cclxuICA8ZGl2IGNsYXNzPVwic21hcnQtZ3JpZC10b29sYmFyXCI+XHJcbiAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXIgI3Rvb2xiYXIgW2lkXT1cIidncmlkX25vdF9pbml0aWFsaXplZCdcIj48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAoY2xpY2spPVwiZWRpdENvbHVtbnMoKVwiXHJcbiAgICAgIG1hdC1taW5pLWZhYlxyXG4gICAgICBjb2xvcj1cInRleHQtcHJpbWFyeVwiXHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLnNob3dFZGl0Q29sdW1uc1wiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgYXJpYS1sYWJlbD1cIkNvbHVtbnNcIiBjbGFzcz1cInNtYXJ0LWdyaWQtZWRpdC1pY29uXCJcclxuICAgICAgICA+dmlld19jb2x1bW5zPC9tYXQtaWNvblxyXG4gICAgICA+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8IS0tIDxkaXYgW25nQ2xhc3NdPVwiaXNCbG9ja2VkID8gJ2Jsb2NrZWQnIDogJydcIj48L2Rpdj4gLS0+XHJcbiAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZENvbnRlbnRcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQuc2hvd1Jlc3VsdENvdW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNtYXJ0R3JpZC1kYXRhLW51bWJlclwiPlxyXG4gICAgICAgICAge3sgc21hcnRHcmlkLmdyaWRNb2RlbC50b3RhbFJvd0NvdW50IH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInNtYXJ0LWdyaWQtdGFibGUtY29udGFpbmVyXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGU+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5FWFBBTkRBQkxFXCI+XHJcbiAgICAgIDxzbWFydC1leHBhbmRhYmxlLXNlY3Rpb25cclxuICAgICAgICAjZ3JpZEV4cGFuZGFibGVTZWN0aW9uXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IGV4cGFuZGFibGVTZWN0aW9uIG9mIGV4cGFuZGFibGVTZWN0aW9uc1wiXHJcbiAgICAgICAgW2RhdGFdPVwiZXhwYW5kYWJsZVNlY3Rpb25cIlxyXG4gICAgICA+PC9zbWFydC1leHBhbmRhYmxlLXNlY3Rpb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJzbWFydEdyaWQubGF5b3V0RGVmID09PSBsYXlvdXREZWYoKS5DQVJEXCJcclxuICAgICAgY2xhc3M9XCJjYXJkcy1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxhcHAtc21hcnQtZ3JpZC1jYXJkXHJcbiAgICAgICAgY2xhc3M9XCJzbWFydEdyaWQtY2FyZC1jb250YWluZXJcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCB0YXNrIG9mIHNtYXJ0R3JpZC5ncmlkTW9kZWwucGFnZS5yb3dzXCJcclxuICAgICAgICBbaXRlbV09XCJ0YXNrXCJcclxuICAgICAgICBbc21hcnRHcmlkXT1cInNtYXJ0R3JpZFwiXHJcbiAgICAgICAgW29uU2VsZWN0XT1cIm9uU2VsZWN0LmJpbmQodGhpcylcIlxyXG4gICAgICA+PC9hcHAtc21hcnQtZ3JpZC1jYXJkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic21hcnRHcmlkLmxheW91dERlZiA9PT0gbGF5b3V0RGVmKCkuVFJFRSAmJiB0cmVlQ29udHJvbFwiXHJcbiAgICAgIGNsYXNzPVwidHJlZS1jb250YWluZXJcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ2dyaWQtdGVtcGxhdGUtY29sdW1ucyc6XHJcbiAgICAgICAgICBzbWFydEdyaWQubnVtYmVyT2ZDb2x1bW4gIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICAgICA/ICdyZXBlYXQoJyArIHNtYXJ0R3JpZC5udW1iZXJPZkNvbHVtbiArICcsIDFmciknXHJcbiAgICAgICAgICAgIDogJydcclxuICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJ0cmVlRGF0YVNvdXJjZSFcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2whXCI+XHJcbiAgICAgICAgPG1hdC10cmVlLW5vZGVcclxuICAgICAgICAgICptYXRUcmVlTm9kZURlZj1cImxldCBub2RlXCJcclxuICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdcclxuICAgICAgICAgIG1hdFRyZWVOb2RlUGFkZGluZ0luZGVudD1cIjI0XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cInRyZWUtYnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tsaXN0LWxlYWYtbm9kZVwiXHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInRyZWVOb2RlU2VsZWN0aW9uVG9nZ2xlKG5vZGUpXCJcclxuICAgICAgICAgICAgPnt7IGdldFRyZWVJdGVtKG5vZGUpIH19PC9tYXQtY2hlY2tib3hcclxuICAgICAgICAgID5cclxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcblxyXG4gICAgICAgIDxtYXQtdHJlZS1ub2RlXHJcbiAgICAgICAgICAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTsgd2hlbjogaGFzQ2hpbGRcIlxyXG4gICAgICAgICAgbWF0VHJlZU5vZGVQYWRkaW5nXHJcbiAgICAgICAgICBtYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnQ9XCIyNFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcclxuICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1RvZ2dsZSAnICsgbm9kZS5pdGVtXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPlxyXG4gICAgICAgICAgICAgIHt7IHRyZWVDb250cm9sIS5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0JyB9fVxyXG4gICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cInRyZWVDaGVja2xpc3RTZWxlY3Rpb24/LmlzU2VsZWN0ZWQobm9kZSlcIlxyXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJkZXNjZW5kYW50c1BhcnRpYWxseVNlbGVjdGVkKG5vZGUpXCJcclxuICAgICAgICAgICAgKGNoYW5nZSk9XCJ0cmVlTm9kZVNlbGVjdGlvblRvZ2dsZShub2RlKVwiXHJcbiAgICAgICAgICAgID57eyBnZXRUcmVlSXRlbShub2RlKSB9fTwvbWF0LWNoZWNrYm94XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgICA8L21hdC10cmVlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtcGFnaW5hdG9yXHJcbiAgICAqbmdJZj1cInNtYXJ0R3JpZC5wYWdpbmF0b3IgJiYgIXRyZWVDb250cm9sXCJcclxuICAgICNwYWdpbmF0b3JcclxuICAgIFtsZW5ndGhdPVwibGVuZ3RoXCJcclxuICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcclxuICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXHJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXHJcbiAgICAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiXHJcbiAgPjwvbWF0LXBhZ2luYXRvcj5cclxuPC9kaXY+XHJcbn1cclxuIl19
|