@theseam/ui-common 0.4.12-beta.0 → 0.4.13
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/breadcrumbs/breadcrumbs/breadcrumbs.component.scss +1 -1
- package/datatable/datatable/datatable.component.d.ts +1 -10
- package/datatable/services/columns-manager.service.d.ts +0 -7
- package/datatable/utils/create-action-menu-column.d.ts +1 -1
- package/esm2020/breadcrumbs/breadcrumbs/breadcrumbs.component.mjs +2 -2
- package/esm2020/datatable/datatable/datatable.component.mjs +4 -20
- package/esm2020/datatable/datatable-action-menu/datatable-action-menu.component.mjs +2 -2
- package/esm2020/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.mjs +1 -1
- package/esm2020/datatable/datatable-export-button/datatable-export-button.component.mjs +1 -1
- package/esm2020/datatable/services/columns-manager.service.mjs +2 -27
- package/esm2020/datatable/utils/create-action-menu-column.mjs +3 -4
- package/esm2020/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.mjs +1 -1
- package/esm2020/datatable-dynamic/datatable-dynamic.component.mjs +1 -1
- package/esm2020/framework/base-layout/base-layout.component.mjs +4 -14
- package/esm2020/framework/base-layout/base-layout.module.mjs +1 -6
- package/esm2020/framework/base-layout/directives/base-layout-nav-toggle.directive.mjs +5 -21
- package/esm2020/framework/base-layout/index.mjs +1 -2
- package/esm2020/framework/public-api.mjs +1 -2
- package/esm2020/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.mjs +1 -1
- package/esm2020/framework/side-nav/side-nav-item/side-nav-item.component.mjs +67 -28
- package/esm2020/framework/side-nav/side-nav-toggle/side-nav-toggle.component.mjs +5 -12
- package/esm2020/framework/side-nav/side-nav.component.mjs +38 -116
- package/esm2020/framework/side-nav/side-nav.models.mjs +1 -1
- package/esm2020/framework/side-nav/side-nav.module.mjs +39 -9
- package/esm2020/framework/side-nav/side-nav.service.mjs +1 -1
- package/esm2020/framework/top-bar/index.mjs +1 -3
- package/esm2020/framework/top-bar/top-bar-item.directive.mjs +4 -10
- package/esm2020/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.mjs +4 -6
- package/esm2020/framework/top-bar/top-bar.component.mjs +11 -55
- package/esm2020/framework/top-bar/top-bar.module.mjs +5 -15
- package/esm2020/layout/layout.service.mjs +2 -12
- package/esm2020/menu/menu-item.component.mjs +3 -3
- package/esm2020/menu/menu-toggle.directive.mjs +2 -7
- package/esm2020/table-cell-types/table-cell-type-string/table-cell-type-string.component.mjs +2 -4
- package/fesm2015/theseam-ui-common-breadcrumbs.mjs +2 -2
- package/fesm2015/theseam-ui-common-breadcrumbs.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs +2 -2
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-datatable.mjs +10 -56
- package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-framework.mjs +156 -905
- package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-layout.mjs +2 -11
- package/fesm2015/theseam-ui-common-layout.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-menu.mjs +3 -8
- package/fesm2015/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-table-cell-types.mjs +1 -3
- package/fesm2015/theseam-ui-common-table-cell-types.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-breadcrumbs.mjs +2 -2
- package/fesm2020/theseam-ui-common-breadcrumbs.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs +2 -2
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable.mjs +10 -56
- package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-framework.mjs +156 -907
- package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-layout.mjs +2 -11
- package/fesm2020/theseam-ui-common-layout.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-menu.mjs +3 -8
- package/fesm2020/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-table-cell-types.mjs +1 -3
- package/fesm2020/theseam-ui-common-table-cell-types.mjs.map +1 -1
- package/framework/base-layout/base-layout.component.d.ts +2 -4
- package/framework/base-layout/base-layout.component.scss +10 -18
- package/framework/base-layout/base-layout.module.d.ts +10 -11
- package/framework/base-layout/directives/base-layout-nav-toggle.directive.d.ts +3 -8
- package/framework/base-layout/index.d.ts +0 -1
- package/framework/base-layout/styles/_variables.scss +0 -21
- package/framework/public-api.d.ts +0 -1
- package/framework/side-nav/side-nav-item/side-nav-item.component.d.ts +14 -7
- package/framework/side-nav/side-nav-item/side-nav-item.component.scss +5 -7
- package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.d.ts +3 -5
- package/framework/side-nav/side-nav-toggle/side-nav-toggle.component.scss +6 -3
- package/framework/side-nav/side-nav.component.d.ts +1 -13
- package/framework/side-nav/side-nav.component.scss +1 -0
- package/framework/side-nav/side-nav.models.d.ts +1 -7
- package/framework/side-nav/side-nav.module.d.ts +9 -1
- package/framework/side-nav/styles/_themes/light/_variables.scss +14 -24
- package/framework/side-nav/styles/_themes/primary/_variables.scss +0 -8
- package/framework/top-bar/index.d.ts +0 -2
- package/framework/top-bar/top-bar-item.directive.d.ts +1 -4
- package/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.d.ts +2 -5
- package/framework/top-bar/top-bar.component.d.ts +3 -25
- package/framework/top-bar/top-bar.component.scss +2 -7
- package/framework/top-bar/top-bar.module.d.ts +8 -10
- package/layout/layout.service.d.ts +1 -9
- package/menu/menu-toggle.directive.d.ts +1 -2
- package/package.json +2 -2
- package/styles/vendor/ngx-datatable/_ngx-datatable.scss +14 -57
- package/styles/vendor/ngx-datatable/_themes/bootstrap/_variables.scss +5 -33
- package/datatable/models/action-item-column-position.d.ts +0 -13
- package/esm2020/datatable/models/action-item-column-position.mjs +0 -5
- package/esm2020/framework/base-layout/directives/base-layout-side-bar-header.directive.mjs +0 -16
- package/esm2020/framework/nav/horizontal-nav/horizontal-nav.component.mjs +0 -55
- package/esm2020/framework/nav/index.mjs +0 -6
- package/esm2020/framework/nav/nav-item/nav-item.component.mjs +0 -227
- package/esm2020/framework/nav/nav-utils.mjs +0 -107
- package/esm2020/framework/nav/nav.models.mjs +0 -2
- package/esm2020/framework/nav/nav.module.mjs +0 -67
- package/esm2020/framework/nav/nav.service.mjs +0 -204
- package/esm2020/framework/top-bar/top-bar-compact-menu-btn-detail.directive.mjs +0 -16
- package/esm2020/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.mjs +0 -16
- package/framework/base-layout/directives/base-layout-side-bar-header.directive.d.ts +0 -9
- package/framework/nav/_nav-theme.scss +0 -4
- package/framework/nav/horizontal-nav/horizontal-nav.component.d.ts +0 -25
- package/framework/nav/horizontal-nav/horizontal-nav.component.scss +0 -50
- package/framework/nav/index.d.ts +0 -5
- package/framework/nav/nav-item/nav-item.component.d.ts +0 -74
- package/framework/nav/nav-item/nav-item.component.scss +0 -203
- package/framework/nav/nav-utils.d.ts +0 -20
- package/framework/nav/nav.models.d.ts +0 -77
- package/framework/nav/nav.module.d.ts +0 -17
- package/framework/nav/nav.service.d.ts +0 -27
- package/framework/nav/styles/_themes/light/_variables.scss +0 -56
- package/framework/nav/styles/_themes/primary/_variables.scss +0 -56
- package/framework/nav/styles/_utilities.scss +0 -3
- package/framework/nav/styles/_variables.scss +0 -2
- package/framework/top-bar/top-bar-compact-menu-btn-detail.directive.d.ts +0 -8
- package/framework/top-bar/top-bar-nav-toggle-btn-detail.directive.d.ts +0 -8
|
@@ -28,7 +28,6 @@ import { WidthColumnsAlteration } from '../models/columns-alterations/width.colu
|
|
|
28
28
|
import { getColumnProp } from '../utils/get-column-prop';
|
|
29
29
|
import { OrderColumnsAlteration } from '../models/columns-alterations/order.columns-alteration';
|
|
30
30
|
import { SortColumnsAlteration } from '../models/columns-alterations/sort.columns-alteration';
|
|
31
|
-
import { isActionItemColumnPosition } from '../models/action-item-column-position';
|
|
32
31
|
import * as i0 from "@angular/core";
|
|
33
32
|
import * as i1 from "../services/datatable-preferences.service";
|
|
34
33
|
import * as i2 from "../services/columns-manager.service";
|
|
@@ -88,18 +87,6 @@ export class DatatableComponent {
|
|
|
88
87
|
}
|
|
89
88
|
this._dataSourceSubject.next(value || undefined);
|
|
90
89
|
}
|
|
91
|
-
/**
|
|
92
|
-
* Sets position behavior for optional Action Menu Button column.
|
|
93
|
-
*
|
|
94
|
-
* Defaults to `frozenRight`.
|
|
95
|
-
*/
|
|
96
|
-
get actionItemColumnPosition() { return this._actionItemColumnPosition; }
|
|
97
|
-
set actionItemColumnPosition(value) {
|
|
98
|
-
if (value && isActionItemColumnPosition(value)) {
|
|
99
|
-
this._actionItemColumnPosition = value;
|
|
100
|
-
}
|
|
101
|
-
this._columnsManager.setActionItemColumnPosition(this._actionItemColumnPosition);
|
|
102
|
-
}
|
|
103
90
|
set columnComponents(value) {
|
|
104
91
|
this._columnsManager.setTemplateColumns(translateTemplateColumns(value?.toArray() ?? []));
|
|
105
92
|
}
|
|
@@ -223,7 +210,6 @@ export class DatatableComponent {
|
|
|
223
210
|
this.footerHeight = 40;
|
|
224
211
|
this.scrollbarV = true;
|
|
225
212
|
this.scrollbarH = true;
|
|
226
|
-
this._actionItemColumnPosition = 'frozenRight';
|
|
227
213
|
// eslint-disable-next-line @angular-eslint/no-output-native
|
|
228
214
|
this.scroll = new EventEmitter();
|
|
229
215
|
this.activate = new EventEmitter();
|
|
@@ -436,13 +422,13 @@ export class DatatableComponent {
|
|
|
436
422
|
}
|
|
437
423
|
}
|
|
438
424
|
DatatableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableComponent, deps: [{ token: i1.DatatablePreferencesService }, { token: i2.ColumnsManagerService }, { token: i3.ColumnsAlterationsManagerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
439
|
-
DatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableComponent, selector: "seam-datatable", inputs: { preferencesKey: "preferencesKey", targetMarkerTemplate: "targetMarkerTemplate", columns: "columns", rows: "rows", columnMode: "columnMode", groupRowsBy: "groupRowsBy", groupedRows: "groupedRows", selected: "selected", externalPaging: "externalPaging", externalSorting: "externalSorting", externalFiltering: "externalFiltering", limit: "limit", count: "count", offset: "offset", loadingIndicator: "loadingIndicator", selectionType: "selectionType", reorderable: "reorderable", swapColumns: "swapColumns", sortType: "sortType", sorts: "sorts", cssClasses: "cssClasses", messages: "messages", rowIdentity: "rowIdentity", rowClass: "rowClass", selectCheck: "selectCheck", displayCheck: "displayCheck", groupExpansionDefault: "groupExpansionDefault", trackByProp: "trackByProp", selectAllRowsOnPage: "selectAllRowsOnPage", treeFromRelation: "treeFromRelation", treeToRelation: "treeToRelation", summaryRow: "summaryRow", summaryHeight: "summaryHeight", summaryPosition: "summaryPosition", virtualization: "virtualization", headerHeight: "headerHeight", rowHeight: "rowHeight", footerHeight: "footerHeight", scrollbarV: "scrollbarV", scrollbarH: "scrollbarH", dataSource: "dataSource"
|
|
425
|
+
DatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableComponent, selector: "seam-datatable", inputs: { preferencesKey: "preferencesKey", targetMarkerTemplate: "targetMarkerTemplate", columns: "columns", rows: "rows", columnMode: "columnMode", groupRowsBy: "groupRowsBy", groupedRows: "groupedRows", selected: "selected", externalPaging: "externalPaging", externalSorting: "externalSorting", externalFiltering: "externalFiltering", limit: "limit", count: "count", offset: "offset", loadingIndicator: "loadingIndicator", selectionType: "selectionType", reorderable: "reorderable", swapColumns: "swapColumns", sortType: "sortType", sorts: "sorts", cssClasses: "cssClasses", messages: "messages", rowIdentity: "rowIdentity", rowClass: "rowClass", selectCheck: "selectCheck", displayCheck: "displayCheck", groupExpansionDefault: "groupExpansionDefault", trackByProp: "trackByProp", selectAllRowsOnPage: "selectAllRowsOnPage", treeFromRelation: "treeFromRelation", treeToRelation: "treeToRelation", summaryRow: "summaryRow", summaryHeight: "summaryHeight", summaryPosition: "summaryPosition", virtualization: "virtualization", headerHeight: "headerHeight", rowHeight: "rowHeight", footerHeight: "footerHeight", scrollbarV: "scrollbarV", scrollbarH: "scrollbarH", dataSource: "dataSource" }, outputs: { scroll: "scroll", activate: "activate", select: "select", sort: "sort", page: "page", reorder: "reorder", resize: "resize", tableContextmenu: "tableContextmenu", treeAction: "treeAction", actionRefreshRequest: "actionRefreshRequest", hiddenColumnsChange: "hiddenColumnsChange" }, host: { listeners: { "dblclick": "_dblClick($event)" } }, providers: [
|
|
440
426
|
_THESEAM_DATATABLE,
|
|
441
427
|
DatatableColumnChangesService,
|
|
442
428
|
_THESEAM_DATATABLE_ACCESSOR,
|
|
443
429
|
ColumnsManagerService,
|
|
444
430
|
ColumnsAlterationsManagerService,
|
|
445
|
-
], queries: [{ propertyName: "actionMenu", first: true, predicate: DatatableActionMenuComponent, descendants: true, static: true }, { propertyName: "rowActionItem", first: true, predicate: DatatableRowActionItemDirective, descendants: true, static: true }, { propertyName: "rowDetail", first: true, predicate: TheSeamDatatableRowDetailDirective, descendants: true, static: true }, { propertyName: "footer", first: true, predicate: TheSeamDatatableFooterDirective, descendants: true, static: true }, { propertyName: "menuBarComponent", first: true, predicate: DatatableMenuBarComponent, descendants: true }, { propertyName: "columnComponents", predicate: DatatableColumnComponent }], viewQueries: [{ propertyName: "ngxDatatable", first: true, predicate: NgxDatatableComponent, descendants: true }, { propertyName: "ngxDatatableElement", first: true, predicate: NgxDatatableComponent, descendants: true, read: ElementRef }, { propertyName: "ngxRowDetail", first: true, predicate: DatatableRowDetailDirective, descendants: true }, { propertyName: "actionMenuCellTpl", first: true, predicate: ["actionMenuCellTpl"], descendants: true, static: true }, { propertyName: "treeToggleTpl", first: true, predicate: ["treeToggleTpl"], descendants: true, static: true }, { propertyName: "headerTpl", first: true, predicate: ["headerTpl"], descendants: true, static: true }, { propertyName: "blankHeaderTpl", first: true, predicate: ["blankHeaderTpl"], descendants: true, static: true }, { propertyName: "cellTypeSelectorTpl", first: true, predicate: ["cellTypeSelectorTpl"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"cssClasses\"\n [messages]=\"messages\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"_onSort($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"_onReorder($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\">\n\n <ngx-datatable-group-header [rowHeight]=\"50\" #myGroupHeader *ngIf=\"groupRowsBy\">\n <ng-template let-group=\"group\" let-expanded=\"expanded\" ngx-datatable-group-header-template>\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\">\n <b>Age: {{ group.age }}</b>\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\">\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\">\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template #headerTpl ngx-datatable-header-template\n let-column=\"column\" let-sortFn=\"sortFn\">\n <strong *ngIf=\"!column.sortable\" class=\"draggable\">{{column.name}}</strong>\n <strong *ngIf=\"column.sortable\" class=\"datatable-sort-target draggable\" (click)=\"sortFn()\">{{column.name}}</strong>\n <div class=\"datatable-column-header-separator\" [attr.data-column-id]=\"column.$$id\"></div>\n</ng-template>\n\n<ng-template #cellTypeSelectorTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\" let-column=\"column\">\n <seam-table-cell-type-selector *ngIf=\"row\"\n [type]=\"column.cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\">\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template #actionMenuCellTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\">\n\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, rowIndex: rowIndex }\">\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus==='disabled'\"\n (click)=\"tree.onTreeAction()\">\n <span *ngIf=\"tree.treeStatus==='loading'\">\n <fa-icon [icon]=\"_faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='collapsed'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='expanded'\">\n <fa-icon [icon]=\"_faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='disabled'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute!important;inset:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute}.datatable-sort-target{cursor:pointer}::ng-deep .ngx-datatable .datatable-body-row{position:relative}::ng-deep .ngx-datatable .datatable-row-right{position:absolute!important;top:0}::ng-deep .ngx-datatable .datatable-row-right{right:0}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.DatatableComponent, selector: "ngx-datatable", inputs: ["selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "loadingIndicator", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "groupExpansionDefault", "selectAllRowsOnPage", "virtualization", "summaryRow", "summaryHeight", "summaryPosition", "displayPageCount", "displayPager", "rowIdentity", "rows", "groupedRows", "groupRowsBy", "columns", "limit", "count", "offset", "targetMarkerTemplate", "selectionType", "rowClass", "selectCheck", "displayCheck", "trackByProp", "treeFromRelation", "treeToRelation"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i5.DatatableRowDetailDirective, selector: "ngx-datatable-row-detail", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i5.DatatableGroupHeaderDirective, selector: "ngx-datatable-group-header", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i5.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i5.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i5.DataTableColumnCellTreeToggle, selector: "[ngx-datatable-tree-toggle]" }, { kind: "directive", type: i5.DatatableFooterDirective, selector: "ngx-datatable-footer", inputs: ["footerHeight", "totalMessage", "selectedMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "template"] }, { kind: "directive", type: i5.DatatableGroupHeaderTemplateDirective, selector: "[ngx-datatable-group-header-template]" }, { kind: "component", type: i6.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "directive", type: i7.ElemResizedDirective, selector: "[seamElemResized]", outputs: ["seamElemResized"] }, { kind: "component", type: i8.TableCellTypeSelectorComponent, selector: "seam-table-cell-type-selector", inputs: ["type", "value", "rowIndex", "row", "colData"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], animations: [
|
|
431
|
+
], queries: [{ propertyName: "actionMenu", first: true, predicate: DatatableActionMenuComponent, descendants: true, static: true }, { propertyName: "rowActionItem", first: true, predicate: DatatableRowActionItemDirective, descendants: true, static: true }, { propertyName: "rowDetail", first: true, predicate: TheSeamDatatableRowDetailDirective, descendants: true, static: true }, { propertyName: "footer", first: true, predicate: TheSeamDatatableFooterDirective, descendants: true, static: true }, { propertyName: "menuBarComponent", first: true, predicate: DatatableMenuBarComponent, descendants: true }, { propertyName: "columnComponents", predicate: DatatableColumnComponent }], viewQueries: [{ propertyName: "ngxDatatable", first: true, predicate: NgxDatatableComponent, descendants: true }, { propertyName: "ngxDatatableElement", first: true, predicate: NgxDatatableComponent, descendants: true, read: ElementRef }, { propertyName: "ngxRowDetail", first: true, predicate: DatatableRowDetailDirective, descendants: true }, { propertyName: "actionMenuCellTpl", first: true, predicate: ["actionMenuCellTpl"], descendants: true, static: true }, { propertyName: "treeToggleTpl", first: true, predicate: ["treeToggleTpl"], descendants: true, static: true }, { propertyName: "headerTpl", first: true, predicate: ["headerTpl"], descendants: true, static: true }, { propertyName: "blankHeaderTpl", first: true, predicate: ["blankHeaderTpl"], descendants: true, static: true }, { propertyName: "cellTypeSelectorTpl", first: true, predicate: ["cellTypeSelectorTpl"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"cssClasses\"\n [messages]=\"messages\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"_onSort($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"_onReorder($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\">\n\n <ngx-datatable-group-header [rowHeight]=\"50\" #myGroupHeader *ngIf=\"groupRowsBy\">\n <ng-template let-group=\"group\" let-expanded=\"expanded\" ngx-datatable-group-header-template>\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\">\n <b>Age: {{ group.age }}</b>\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\">\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\">\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template #headerTpl ngx-datatable-header-template\n let-column=\"column\" let-sortFn=\"sortFn\">\n <strong *ngIf=\"!column.sortable\" class=\"draggable\">{{column.name}}</strong>\n <strong *ngIf=\"column.sortable\" class=\"datatable-sort-target draggable\" (click)=\"sortFn()\">{{column.name}}</strong>\n <div class=\"datatable-column-header-separator\" [attr.data-column-id]=\"column.$$id\"></div>\n</ng-template>\n\n<ng-template #cellTypeSelectorTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\" let-column=\"column\">\n <seam-table-cell-type-selector *ngIf=\"row\"\n [type]=\"column.cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\">\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template #actionMenuCellTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\">\n\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, rowIndex: rowIndex }\">\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus==='disabled'\"\n (click)=\"tree.onTreeAction()\">\n <span *ngIf=\"tree.treeStatus==='loading'\">\n <fa-icon [icon]=\"_faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='collapsed'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='expanded'\">\n <fa-icon [icon]=\"_faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='disabled'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute!important;inset:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute}.datatable-sort-target{cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.DatatableComponent, selector: "ngx-datatable", inputs: ["selected", "scrollbarV", "scrollbarH", "rowHeight", "columnMode", "headerHeight", "footerHeight", "externalPaging", "externalSorting", "loadingIndicator", "reorderable", "swapColumns", "sortType", "sorts", "cssClasses", "messages", "groupExpansionDefault", "selectAllRowsOnPage", "virtualization", "summaryRow", "summaryHeight", "summaryPosition", "displayPageCount", "displayPager", "rowIdentity", "rows", "groupedRows", "groupRowsBy", "columns", "limit", "count", "offset", "targetMarkerTemplate", "selectionType", "rowClass", "selectCheck", "displayCheck", "trackByProp", "treeFromRelation", "treeToRelation"], outputs: ["scroll", "activate", "select", "sort", "page", "reorder", "resize", "tableContextmenu", "treeAction"] }, { kind: "directive", type: i5.DatatableRowDetailDirective, selector: "ngx-datatable-row-detail", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i5.DatatableGroupHeaderDirective, selector: "ngx-datatable-group-header", inputs: ["rowHeight", "template"], outputs: ["toggle"] }, { kind: "directive", type: i5.DataTableColumnHeaderDirective, selector: "[ngx-datatable-header-template]" }, { kind: "directive", type: i5.DataTableColumnCellDirective, selector: "[ngx-datatable-cell-template]" }, { kind: "directive", type: i5.DataTableColumnCellTreeToggle, selector: "[ngx-datatable-tree-toggle]" }, { kind: "directive", type: i5.DatatableFooterDirective, selector: "ngx-datatable-footer", inputs: ["footerHeight", "totalMessage", "selectedMessage", "pagerLeftArrowIcon", "pagerRightArrowIcon", "pagerPreviousIcon", "pagerNextIcon", "template"] }, { kind: "directive", type: i5.DatatableGroupHeaderTemplateDirective, selector: "[ngx-datatable-group-header-template]" }, { kind: "component", type: i6.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "directive", type: i7.ElemResizedDirective, selector: "[seamElemResized]", outputs: ["seamElemResized"] }, { kind: "component", type: i8.TableCellTypeSelectorComponent, selector: "seam-table-cell-type-selector", inputs: ["type", "value", "rowIndex", "row", "colData"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], animations: [
|
|
446
432
|
trigger('slideDown', [
|
|
447
433
|
transition(':enter', [
|
|
448
434
|
style({ transform: 'translateY(-20%)', opacity: '0' }),
|
|
@@ -530,7 +516,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
530
516
|
_THESEAM_DATATABLE_ACCESSOR,
|
|
531
517
|
ColumnsManagerService,
|
|
532
518
|
ColumnsAlterationsManagerService,
|
|
533
|
-
], template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"cssClasses\"\n [messages]=\"messages\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"_onSort($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"_onReorder($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\">\n\n <ngx-datatable-group-header [rowHeight]=\"50\" #myGroupHeader *ngIf=\"groupRowsBy\">\n <ng-template let-group=\"group\" let-expanded=\"expanded\" ngx-datatable-group-header-template>\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\">\n <b>Age: {{ group.age }}</b>\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\">\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\">\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template #headerTpl ngx-datatable-header-template\n let-column=\"column\" let-sortFn=\"sortFn\">\n <strong *ngIf=\"!column.sortable\" class=\"draggable\">{{column.name}}</strong>\n <strong *ngIf=\"column.sortable\" class=\"datatable-sort-target draggable\" (click)=\"sortFn()\">{{column.name}}</strong>\n <div class=\"datatable-column-header-separator\" [attr.data-column-id]=\"column.$$id\"></div>\n</ng-template>\n\n<ng-template #cellTypeSelectorTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\" let-column=\"column\">\n <seam-table-cell-type-selector *ngIf=\"row\"\n [type]=\"column.cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\">\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template #actionMenuCellTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\">\n\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, rowIndex: rowIndex }\">\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus==='disabled'\"\n (click)=\"tree.onTreeAction()\">\n <span *ngIf=\"tree.treeStatus==='loading'\">\n <fa-icon [icon]=\"_faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='collapsed'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='expanded'\">\n <fa-icon [icon]=\"_faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='disabled'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute!important;inset:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute}.datatable-sort-target{cursor:pointer}
|
|
519
|
+
], template: "<div class=\"datatable-wrapper\">\n <ng-content select=\"seam-datatable-menu-bar\"></ng-content>\n <div class=\"datatable-table-wrapper\">\n <ng-container>\n <ngx-datatable\n [columnMode]=\"$any(columnMode)\"\n [scrollbarV]=\"scrollbarV\"\n [scrollbarH]=\"scrollbarH\"\n [virtualization]=\"virtualization\"\n [targetMarkerTemplate]=\"targetMarkerTemplate\"\n [groupRowsBy]=\"$any(groupRowsBy)\"\n [groupedRows]=\"$any(groupedRows)\"\n [selected]=\"$any(selected)\"\n [externalPaging]=\"externalPaging\"\n [externalSorting]=\"externalSorting\"\n [limit]=\"$any(limit)\"\n [count]=\"$any(count)\"\n [offset]=\"$any(offset)\"\n [loadingIndicator]=\"loadingIndicator\"\n [selectionType]=\"$any(selectionType)\"\n [reorderable]=\"reorderable\"\n [swapColumns]=\"swapColumns\"\n [sortType]=\"$any(sortType)\"\n [sorts]=\"$any(_sorts)\"\n [cssClasses]=\"cssClasses\"\n [messages]=\"messages\"\n [rowIdentity]=\"$any(rowIdentity)\"\n [rowClass]=\"rowClass\"\n [selectCheck]=\"selectCheck\"\n [displayCheck]=\"$any(displayCheck)\"\n [groupExpansionDefault]=\"groupExpansionDefault\"\n [trackByProp]=\"$any(trackByProp)\"\n [selectAllRowsOnPage]=\"selectAllRowsOnPage\"\n [treeFromRelation]=\"$any(treeFromRelation)\"\n [treeToRelation]=\"$any(treeToRelation)\"\n [summaryRow]=\"summaryRow\"\n [summaryHeight]=\"$any(summaryHeight)\"\n [summaryPosition]=\"$any(summaryPosition)\"\n [rows]=\"rows$ | async\"\n [columns]=\"$any(displayColumns$ | async)\"\n [headerHeight]=\"$any(headerHeight)\"\n [rowHeight]=\"$any(rowHeight)\"\n [footerHeight]=\"$any(footerHeight)\"\n (scroll)=\"scroll.emit($event)\"\n (activate)=\"activate.emit($event)\"\n (select)=\"select.emit($event)\"\n (sort)=\"_onSort($event)\"\n (page)=\"page.emit($event)\"\n (reorder)=\"_onReorder($event)\"\n (resize)=\"_onResize($event)\"\n (tableContextmenu)=\"tableContextmenu.emit($event)\"\n (treeAction)=\"treeAction.emit($event)\"\n (seamElemResized)=\"onDatatableResize($event)\"\n (treeAction)=\"_onTreeAction($event)\">\n\n <ngx-datatable-group-header [rowHeight]=\"50\" #myGroupHeader *ngIf=\"groupRowsBy\">\n <ng-template let-group=\"group\" let-expanded=\"expanded\" ngx-datatable-group-header-template>\n <div\n class=\"w-100 bg-light p-1\"\n [class.border-bottom]=\"!expanded\"\n [class.datatable-icon-right]=\"!expanded\"\n [class.datatable-icon-down]=\"expanded\"\n title=\"Expand/Collapse Group\"\n (click)=\"ngxDatatable?.groupHeader?.toggleExpandGroup(group)\">\n <b>Age: {{ group.age }}</b>\n </div>\n </ng-template>\n </ngx-datatable-group-header>\n\n <ngx-datatable-row-detail *ngIf=\"rowDetail && rowDetail.template\"\n [rowHeight]=\"rowDetail.rowHeight || 0\"\n [template]=\"$any(rowDetail.template)\"\n (toggle)=\"rowDetail.toggle.emit($event)\">\n </ngx-datatable-row-detail>\n\n <ngx-datatable-footer *ngIf=\"footer && footer.template\"\n [template]=\"$any(footer.template)\">\n </ngx-datatable-footer>\n </ngx-datatable>\n </ng-container>\n </div>\n</div>\n\n<ng-template #blankHeaderTpl ngx-datatable-header-template></ng-template>\n\n<ng-template #headerTpl ngx-datatable-header-template\n let-column=\"column\" let-sortFn=\"sortFn\">\n <strong *ngIf=\"!column.sortable\" class=\"draggable\">{{column.name}}</strong>\n <strong *ngIf=\"column.sortable\" class=\"datatable-sort-target draggable\" (click)=\"sortFn()\">{{column.name}}</strong>\n <div class=\"datatable-column-header-separator\" [attr.data-column-id]=\"column.$$id\"></div>\n</ng-template>\n\n<ng-template #cellTypeSelectorTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\" let-column=\"column\">\n <seam-table-cell-type-selector *ngIf=\"row\"\n [type]=\"column.cellType\"\n [value]=\"value\"\n [rowIndex]=\"rowIndex\"\n [row]=\"row\"\n [colData]=\"column\">\n </seam-table-cell-type-selector>\n</ng-template>\n\n<ng-template #actionMenuCellTpl ngx-datatable-cell-template\n let-value=\"value\" let-rowIndex=\"rowIndex\" let-row=\"row\">\n\n <ng-container *ngIf=\"row && rowActionItem?.template\">\n <ng-template\n [ngTemplateOutlet]=\"$any(rowActionItem?.template)\"\n [ngTemplateOutletContext]=\"{ $implicit: row, row: row, rowIndex: rowIndex }\">\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #treeToggleTpl ngx-datatable-tree-toggle let-tree=\"cellContext\">\n <button\n class=\"p-0 bg-transparent border-0 btn\"\n [disabled]=\"tree.treeStatus==='disabled'\"\n (click)=\"tree.onTreeAction()\">\n <span *ngIf=\"tree.treeStatus==='loading'\">\n <fa-icon [icon]=\"_faSpinner\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='collapsed'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='expanded'\">\n <fa-icon [icon]=\"_faChevronDown\"></fa-icon>\n </span>\n <span *ngIf=\"tree.treeStatus==='disabled'\">\n <fa-icon [icon]=\"_faChevronRight\"></fa-icon>\n </span>\n </button>\n</ng-template>\n", styles: [":host{display:flex;flex-grow:1;flex-direction:column}::ng-deep .seam-datatable-action-menu{min-width:auto!important}ngx-datatable{position:absolute!important;inset:0}.datatable-wrapper{display:flex;flex-direction:column;flex-grow:1}.datatable-wrapper .datatable-table-wrapper{position:relative;flex:1 1 100%}.datatable-column-header-separator{position:absolute}.datatable-sort-target{cursor:pointer}\n"] }]
|
|
534
520
|
}], ctorParameters: function () { return [{ type: i1.DatatablePreferencesService }, { type: i2.ColumnsManagerService }, { type: i3.ColumnsAlterationsManagerService }]; }, propDecorators: { preferencesKey: [{
|
|
535
521
|
type: Input
|
|
536
522
|
}], targetMarkerTemplate: [{
|
|
@@ -613,8 +599,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
613
599
|
type: Input
|
|
614
600
|
}], dataSource: [{
|
|
615
601
|
type: Input
|
|
616
|
-
}], actionItemColumnPosition: [{
|
|
617
|
-
type: Input
|
|
618
602
|
}], scroll: [{
|
|
619
603
|
type: Output
|
|
620
604
|
}], activate: [{
|
|
@@ -683,4 +667,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
|
|
|
683
667
|
type: HostListener,
|
|
684
668
|
args: ['dblclick', ['$event']]
|
|
685
669
|
}] } });
|
|
686
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFBZ0MsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUE7QUFDaEcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFDTCxTQUFTLEVBSVQsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWpILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVGLE9BQU8sRUFDTCxVQUFVLEVBS1Ysa0JBQWtCLElBQUkscUJBQXFCLEVBQzND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QyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVN4QyxTQUFTO3NCQURaLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTcEMsY0FBYztzQkFEakIsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBU3pDLG1CQUFtQjtzQkFEdEIsU0FBUzt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBc0JsRCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUUsUUFBUSxDQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJ1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VBcnJheSwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXG5pbXBvcnQgeyBDb2xsZWN0aW9uVmlld2VyLCBEYXRhU291cmNlLCBpc0RhdGFTb3VyY2UsIExpc3RSYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucydcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBpc0Rldk1vZGUsXG4gIEtleVZhbHVlRGlmZmVyLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNvbmNhdE1hcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IGZhQ2hldnJvbkRvd24sIGZhQ2hldnJvblJpZ2h0LCBmYVNwaW5uZXIgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5pbXBvcnQge1xuICBDb2x1bW5Nb2RlLFxuICBDb250ZXh0bWVudVR5cGUsXG4gIERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlLFxuICBEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmUsXG4gIERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZSxcbiAgRGF0YXRhYmxlQ29tcG9uZW50IGFzIE5neERhdGF0YWJsZUNvbXBvbmVudCxcbiAgRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlLFxuICBTb3J0VHlwZSxcbiAgVHJlZVN0YXR1c1xufSBmcm9tICdAbWFya2xiL25neC1kYXRhdGFibGUnXG5pbXBvcnQgdHlwZSB7IFNlbGVjdGlvblR5cGUgfSBmcm9tICdAbWFya2xiL25neC1kYXRhdGFibGUnXG5cbmltcG9ydCB7IElucHV0Qm9vbGVhbiwgSW5wdXROdW1iZXIgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vY29yZSdcbmltcG9ydCB7IGNvbXBvc2VEYXRhRmlsdGVycywgY29tcG9zZURhdGFGaWx0ZXJTdGF0ZXMsIERhdGFGaWx0ZXIsIERhdGFGaWx0ZXJTdGF0ZSB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9kYXRhLWZpbHRlcnMnXG5pbXBvcnQgeyBJRWxlbWVudFJlc2l6ZWRFdmVudCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9zaGFyZWQnXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQsIHdhaXRPbkNvbmRpdGlvbkFzeW5jIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3V0aWxzJ1xuXG5pbXBvcnQgeyBEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWFjdGlvbi1tZW51L2RhdGF0YWJsZS1hY3Rpb24tbWVudS5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtY29sdW1uL2RhdGF0YWJsZS1jb2x1bW4uY29tcG9uZW50J1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGF0YWJsZS1mb290ZXIvZGF0YXRhYmxlLWZvb3Rlci5kaXJlY3RpdmUnXG5pbXBvcnQgeyBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLW1lbnUtYmFyL2RhdGF0YWJsZS1tZW51LWJhci5jb21wb25lbnQnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0YXRhYmxlLXJvdy1kZXRhaWwvZGF0YXRhYmxlLXJvdy1kZXRhaWwuZGlyZWN0aXZlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZGF0YXRhYmxlLXJvdy1hY3Rpb24taXRlbS5kaXJlY3RpdmUnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQWNjZXNzb3IgfSBmcm9tICcuLi9tb2RlbHMvZGF0YXRhYmxlLWFjY2Vzc29yJ1xuaW1wb3J0IHsgRGF0YXRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uL21vZGVscy9kYXRhdGFibGUtZGF0YS1zb3VyY2UnXG5pbXBvcnQgeyBUaGVTZWFtUGFnZUluZm8gfSBmcm9tICcuLi9tb2RlbHMvcGFnZS1pbmZvJ1xuaW1wb3J0IHsgU29ydEV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL3NvcnQtZXZlbnQnXG5pbXBvcnQgeyBTb3J0SXRlbSB9IGZyb20gJy4uL21vZGVscy9zb3J0LWl0ZW0nXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uIH0gZnJvbSAnLi4vbW9kZWxzL3RhYmxlLWNvbHVtbidcbmltcG9ydCB7IENvbHVtbnNNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbHVtbnMtbWFuYWdlci5zZXJ2aWNlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kYXRhdGFibGUtY29sdW1uLWNoYW5nZXMuc2VydmljZSdcbmltcG9ydCB7IERhdGF0YWJsZVByZWZlcmVuY2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RhdGF0YWJsZS1wcmVmZXJlbmNlcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IgfSBmcm9tICcuLi90b2tlbnMvZGF0YXRhYmxlLWFjY2Vzc29yJ1xuaW1wb3J0IHsgcmVtb3ZlVW51c2VkRGlmZnMgfSBmcm9tICcuLi91dGlscy9yZW1vdmUtdW51c2VkLWRpZmZzJ1xuaW1wb3J0IHsgdHJhbnNsYXRlVGVtcGxhdGVDb2x1bW5zIH0gZnJvbSAnLi4vdXRpbHMvdHJhbnNsYXRlLXRlbXBsYXRlcydcbmltcG9ydCB7IENvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29sdW1ucy1hbHRlcmF0aW9ucy1tYW5hZ2VyLnNlcnZpY2UnXG5pbXBvcnQgeyBDb2x1bW5zQWx0ZXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb24nXG5pbXBvcnQgeyBtYXBDb2x1bW5zQWx0ZXJhdGlvbnNTdGF0ZXMgfSBmcm9tICcuLi91dGlscy9tYXAtY29sdW1ucy1hbHRlcmF0aW9ucy1zdGF0ZXMnXG5pbXBvcnQgeyBXaWR0aENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvd2lkdGguY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgZ2V0Q29sdW1uUHJvcCB9IGZyb20gJy4uL3V0aWxzL2dldC1jb2x1bW4tcHJvcCdcbmltcG9ydCB7IE9yZGVyQ29sdW1uc0FsdGVyYXRpb24sIE9yZGVyQ29sdW1uc0FsdGVyYXRpb25TdGF0ZSB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb25zL29yZGVyLmNvbHVtbnMtYWx0ZXJhdGlvbidcbmltcG9ydCB7IFNvcnRDb2x1bW5zQWx0ZXJhdGlvbiB9IGZyb20gJy4uL21vZGVscy9jb2x1bW5zLWFsdGVyYXRpb25zL3NvcnQuY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgQWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uLCBpc0FjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbiB9IGZyb20gJy4uL21vZGVscy9hY3Rpb24taXRlbS1jb2x1bW4tcG9zaXRpb24nXG5cbi8qKlxuICogTk9URTogVGhpcyBpcyBzdGlsbCBiZWluZyB3b3JrZWQgb24uIEkgYW0gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhpcyBtb2RlbFxuICogYmVjYXVzZSBgbmd4LWRhdGF0YWJsZWAganVzdCB1c2VzIGFuIHVudHlwZWQgb2JqZWN0IGFuZCBzZXRzIHByb3BlcnRpZXMgaW5cbiAqIG11bHRpcGxlIHBsYWNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2VsbENvbnRleHQge1xuICBhbGxSb3dzU2VsZWN0ZWQ6IGZhbHNlXG5cbiAgc2VsZWN0Rm46ICgpID0+IGFueVxuICBzb3J0RGlyPzogJ2FzYycgfCAnZGVzYydcbiAgc29ydEZuOiAoKSA9PiBhbnlcblxuICBleHBhbmRlZD86IGJvb2xlYW5cblxuICBvbkNoZWNrYm94Q2hhbmdlRm4/OiBhbnlcbiAgYWN0aXZhdGVGbj86IGFueVxuICByb3c/OiBhbnlcbiAgZ3JvdXA/OiBhbnlcbiAgdmFsdWU/OiBhbnlcbiAgY29sdW1uPzogVGhlU2VhbURhdGF0YWJsZUNvbHVtblxuICByb3dIZWlnaHQ/OiBudW1iZXJcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW5cbiAgcm93SW5kZXg/OiBudW1iZXJcbiAgdHJlZVN0YXR1cz86IFRyZWVTdGF0dXNcbiAgb25UcmVlQWN0aW9uPzogYW55XG59XG5cbi8qKlxuICogSW50ZW5kZWQgZm9yIGludGVybmFsIGNsYXNzZXMgZGVjbGFyZWQgYnkgdGhlIGBUaGVTZWFtRGF0YXRhYmxlTW9kdWxlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRIRVNFQU1fREFUQVRBQkxFID0gbmV3IEluamVjdGlvblRva2VuPERhdGFGaWx0ZXI+KCdMaWJEYXRhdGFibGUnKVxuXG5leHBvcnQgY29uc3QgX1RIRVNFQU1fREFUQVRBQkxFOiBhbnkgPSB7XG4gIHByb3ZpZGU6IFRIRVNFQU1fREFUQVRBQkxFLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGF0YWJsZUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGNvbnN0IF9USEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBUSEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUixcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhdGFibGVDb21wb25lbnQpXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlYW0tZGF0YXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGF0YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3NsaWRlRG93bicsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMCUpJywgb3BhY2l0eTogJzAnIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcycsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6ICcxJyB9KSksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogJzEnIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcycsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjAlKScsIG9wYWNpdHk6ICcwJyB9KSksXG4gICAgICBdKVxuICAgIF0pXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIF9USEVTRUFNX0RBVEFUQUJMRSxcbiAgICBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSxcbiAgICBfVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IsXG4gICAgQ29sdW1uc01hbmFnZXJTZXJ2aWNlLFxuICAgIENvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXJTZXJ2aWNlLFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGF0YWJsZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBUaGVTZWFtRGF0YXRhYmxlQWNjZXNzb3IsIENvbGxlY3Rpb25WaWV3ZXIge1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxQYWdpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxTb3J0aW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsRmlsdGVyaW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2xvYWRpbmdJbmRpY2F0b3I6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcmVvcmRlcmFibGU6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3dhcENvbHVtbnM6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZ3JvdXBFeHBhbnNpb25EZWZhdWx0OiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NlbGVjdEFsbFJvd3NPblBhZ2U6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3VtbWFyeVJvdzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV92aXJ0dWFsaXphdGlvbjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zY3JvbGxiYXJWOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Njcm9sbGJhckg6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbGltaXQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jb3VudDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29mZnNldDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hlYWRlckhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Jvd0hlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Zvb3RlckhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N1bW1hcnlIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jb2x1bW5zOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10gfCB1bmRlZmluZWQgfCBudWxsXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zb3J0czogU29ydEl0ZW1bXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICByZWFkb25seSBfZmFDaGV2cm9uRG93biA9IGZhQ2hldnJvbkRvd25cbiAgcmVhZG9ubHkgX2ZhQ2hldnJvblJpZ2h0ID0gZmFDaGV2cm9uUmlnaHRcbiAgcmVhZG9ubHkgX2ZhU3Bpbm5lciA9IGZhU3Bpbm5lclxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlcnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhRmlsdGVyW10+KFtdKVxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVNvdXJjZTxhbnk+IHwgYW55W10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBwcml2YXRlIF9yZXNpemluZzogeyBbcHJvcDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyU3RhdGVzOiBPYnNlcnZhYmxlPERhdGFGaWx0ZXJTdGF0ZVtdPlxuXG4gIGdldCBmaWx0ZXJzKCk6IERhdGFGaWx0ZXJbXSB7IHJldHVybiB0aGlzLl9maWx0ZXJzU3ViamVjdC52YWx1ZSB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlcnMkOiBPYnNlcnZhYmxlPERhdGFGaWx0ZXJbXT5cblxuICBASW5wdXQoKVxuICBnZXQgcHJlZmVyZW5jZXNLZXkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCB7IHJldHVybiB0aGlzLl9wcmVmZXJlbmNlc0tleS52YWx1ZSB9XG4gIHNldCBwcmVmZXJlbmNlc0tleSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkgeyB0aGlzLl9wcmVmZXJlbmNlc0tleS5uZXh0KHZhbHVlIHx8IHVuZGVmaW5lZCkgfVxuICBwcml2YXRlIF9wcmVmZXJlbmNlc0tleSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbD4odW5kZWZpbmVkKVxuXG4gIEBJbnB1dCgpIHRhcmdldE1hcmtlclRlbXBsYXRlOiBhbnlcblxuICBASW5wdXQoKVxuICBzZXQgY29sdW1ucyh2YWx1ZTogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0SW5wdXRDb2x1bW5zKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSlcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCByb3dzKCk6IGFueVtdIHsgcmV0dXJuIHRoaXMuX3Jvd3MudmFsdWUgfVxuICBzZXQgcm93cyh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLl9yb3dzLm5leHQodmFsdWUgfHwgW10pXG4gIH1cbiAgcHJpdmF0ZSBfcm93cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxuXG4gIHB1YmxpYyByb3dzJDogT2JzZXJ2YWJsZTxhbnlbXT5cblxuICBASW5wdXQoKSBjb2x1bW5Nb2RlOiBDb2x1bW5Nb2RlIHwgdW5kZWZpbmVkIHwgbnVsbCA9IENvbHVtbk1vZGUuZm9yY2VcblxuICBASW5wdXQoKSBncm91cFJvd3NCeTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBncm91cGVkUm93czogYW55W10gfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbCA9IFtdXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsUGFnaW5nID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsU29ydGluZyA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbEZpbHRlcmluZyA9IGZhbHNlXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgbGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoMCkgY291bnQgPSAwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigwKSBvZmZzZXQgPSAwXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGxvYWRpbmdJbmRpY2F0b3IgPSBmYWxzZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3Rpb25UeXBlKCk6IFNlbGVjdGlvblR5cGUgfCB1bmRlZmluZWQgfCBudWxsIHsgcmV0dXJuIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLmdldFNlbGVjdGlvblR5cGUoKSB9XG4gIHNldCBzZWxlY3Rpb25UeXBlKHZhbHVlOiBTZWxlY3Rpb25UeXBlIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFNlbGVjdGlvblR5cGUobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHJlb3JkZXJhYmxlID0gdHJ1ZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc3dhcENvbHVtbnMgPSBmYWxzZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzb3J0VHlwZSgpOiBTb3J0VHlwZSB7IHJldHVybiB0aGlzLl9zb3J0VHlwZSB9XG4gIHNldCBzb3J0VHlwZSh2YWx1ZTogU29ydFR5cGUpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSAmJiAodmFsdWUgPT09IFNvcnRUeXBlLnNpbmdsZSB8fCB2YWx1ZSA9PT0gU29ydFR5cGUubXVsdGkpKSB7XG4gICAgICB0aGlzLl9zb3J0VHlwZSA9IHZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NvcnRUeXBlID0gU29ydFR5cGUuc2luZ2xlXG4gICAgfVxuICB9XG4gIF9zb3J0VHlwZTogU29ydFR5cGUgPSBTb3J0VHlwZS5zaW5nbGVcblxuICBASW5wdXQoKVxuICBnZXQgc29ydHMoKTogU29ydEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMubmd4RGF0YXRhYmxlID8gdGhpcy5uZ3hEYXRhdGFibGUuc29ydHMgOiB0aGlzLl9zb3J0c1xuICB9XG4gIHNldCBzb3J0cyh2YWx1ZTogU29ydEl0ZW1bXSkge1xuICAgIHRoaXMuX3NvcnRzID0gbm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IGNvZXJjZUFycmF5KHZhbHVlKSA6IFtdXG4gIH1cbiAgX3NvcnRzOiBTb3J0SXRlbVtdID0gW11cblxuICBASW5wdXQoKSBjc3NDbGFzc2VzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsID0ge1xuICAgIHNvcnRBc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi11cCcsXG4gICAgc29ydERlc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi1kb3duJyxcbiAgICBwYWdlckxlZnRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLWxlZnQnLFxuICAgIHBhZ2VyUmlnaHRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLXJpZ2h0JyxcbiAgICBwYWdlclByZXZpb3VzOiAnZGF0YXRhYmxlLWljb24tcHJldicsXG4gICAgcGFnZXJOZXh0OiAnZGF0YXRhYmxlLWljb24tc2tpcCdcbiAgfVxuXG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsID0ge1xuICAgIC8vIE1lc3NhZ2UgdG8gc2hvdyB3aGVuIGFycmF5IGlzIHByZXNlbnRlZFxuICAgIC8vIGJ1dCBjb250YWlucyBubyB2YWx1ZXNcbiAgICBlbXB0eU1lc3NhZ2U6ICdObyByZWNvcmRzIGZvdW5kJyxcblxuICAgIC8vIEZvb3RlciB0b3RhbCBtZXNzYWdlXG4gICAgdG90YWxNZXNzYWdlOiAndG90YWwnLFxuXG4gICAgLy8gRm9vdGVyIHNlbGVjdGVkIG1lc3NhZ2VcbiAgICBzZWxlY3RlZE1lc3NhZ2U6ICdzZWxlY3RlZCdcbiAgfVxuXG4gIEBJbnB1dCgpIHJvd0lkZW50aXR5OiAoKHg6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCB8IG51bGwgPSAoeDogYW55KSA9PiB4XG5cbiAgQElucHV0KCkgcm93Q2xhc3M6IGFueSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBzZWxlY3RDaGVjazogYW55IHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBkaXNwbGF5Q2hlY2s6ICgocm93OiBhbnksIGNvbHVtbj86IGFueSwgdmFsdWU/OiBhbnkpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBncm91cEV4cGFuc2lvbkRlZmF1bHQgPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyYWNrQnlQcm9wOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNlbGVjdEFsbFJvd3NPblBhZ2UgPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyZWVGcm9tUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgdHJlZVRvUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHN1bW1hcnlSb3cgPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBzdW1tYXJ5SGVpZ2h0ID0gMzBcbiAgQElucHV0KCkgc3VtbWFyeVBvc2l0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsID0gJ3RvcCdcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdmlydHVhbGl6YXRpb24gPSB0cnVlXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgaGVhZGVySGVpZ2h0ID0gNTBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgcm93SGVpZ2h0ID0gNTBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgZm9vdGVySGVpZ2h0ID0gNDBcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2Nyb2xsYmFyViA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNjcm9sbGJhckggPSB0cnVlXG5cbiAgQElucHV0KClcbiAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IERhdGFTb3VyY2U8YW55PiB8IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGF0YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHZhbHVlLnNldERhdGF0YWJsZUFjY2Vzc29yKHRoaXMpXG4gICAgfVxuICAgIHRoaXMuX2RhdGFTb3VyY2VTdWJqZWN0Lm5leHQodmFsdWUgfHwgdW5kZWZpbmVkKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgcG9zaXRpb24gYmVoYXZpb3IgZm9yIG9wdGlvbmFsIEFjdGlvbiBNZW51IEJ1dHRvbiBjb2x1bW4uXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGBmcm96ZW5SaWdodGAuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uKCk6IEFjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9hY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gfVxuICBzZXQgYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uKHZhbHVlOiBBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgJiYgaXNBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24odmFsdWUpKSB7XG4gICAgICB0aGlzLl9hY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gPSB2YWx1ZVxuICAgIH1cbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24odGhpcy5fYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uKVxuICB9XG4gIHByaXZhdGUgX2FjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbjogQWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uIHwgdW5kZWZpbmVkID0gJ2Zyb3plblJpZ2h0J1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGl2YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydEV2ZW50PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBwYWdlID0gbmV3IEV2ZW50RW1pdHRlcjxUaGVTZWFtUGFnZUluZm8+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlb3JkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlc2l6ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSB0YWJsZUNvbnRleHRtZW51ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBNb3VzZUV2ZW50LCB0eXBlOiBDb250ZXh0bWVudVR5cGUsIGNvbnRlbnQ6IGFueSB9PihmYWxzZSlcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHRyZWVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBhY3Rpb25SZWZyZXNoUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgaGlkZGVuQ29sdW1uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KClcblxuICBAQ29udGVudENoaWxkcmVuKERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudClcbiAgc2V0IGNvbHVtbkNvbXBvbmVudHModmFsdWU6IFF1ZXJ5TGlzdDxEYXRhdGFibGVDb2x1bW5Db21wb25lbnQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0VGVtcGxhdGVDb2x1bW5zKHRyYW5zbGF0ZVRlbXBsYXRlQ29sdW1ucyh2YWx1ZT8udG9BcnJheSgpID8/IFtdKSlcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlQWN0aW9uTWVudUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgYWN0aW9uTWVudT86IERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnRcbiAgQENvbnRlbnRDaGlsZChEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgcm93QWN0aW9uSXRlbSgpOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX3Jvd0FjdGlvbkl0ZW0gfVxuICBzZXQgcm93QWN0aW9uSXRlbSh2YWx1ZTogRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Jvd0FjdGlvbkl0ZW0gPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFJvd0FjdGlvbkl0ZW0obm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX3Jvd0FjdGlvbkl0ZW06IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfCB1bmRlZmluZWRcblxuICBAQ29udGVudENoaWxkKFRoZVNlYW1EYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0RldGFpbD86IFRoZVNlYW1EYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmVcbiAgQENvbnRlbnRDaGlsZChUaGVTZWFtRGF0YXRhYmxlRm9vdGVyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBmb290ZXI/OiBUaGVTZWFtRGF0YXRhYmxlRm9vdGVyRGlyZWN0aXZlXG5cbiAgQENvbnRlbnRDaGlsZChEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50KVxuICBnZXQgbWVudUJhckNvbXBvbmVudCgpOiBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX21lbnVCYXJDb21wb25lbnQgfVxuICBzZXQgbWVudUJhckNvbXBvbmVudCh2YWx1ZTogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21lbnVCYXJDb21wb25lbnQgPSB2YWx1ZVxuXG4gICAgaWYgKHRoaXMuX21lbnVCYXJTdWIpIHsgdGhpcy5fbWVudUJhclN1Yi51bnN1YnNjcmliZSgpIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fc2V0TWVudUJhckZpbHRlcnModmFsdWUuZmlsdGVycygpKVxuXG4gICAgICB0aGlzLl9tZW51QmFyU3ViID0gdGhpcy5fbWVudUJhckNvbXBvbmVudD8uZmlsdGVyc0NoYW5nZWRcbiAgICAgICAgLnN1YnNjcmliZSh2ID0+IHsgdGhpcy5fc2V0TWVudUJhckZpbHRlcnModmFsdWUuZmlsdGVycygpKSB9KVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9tZW51QmFyQ29tcG9uZW50OiBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX21lbnVCYXJTdWI6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoTmd4RGF0YXRhYmxlQ29tcG9uZW50KSBuZ3hEYXRhdGFibGU/OiBOZ3hEYXRhdGFibGVDb21wb25lbnRcbiAgQFZpZXdDaGlsZChOZ3hEYXRhdGFibGVDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuZ3hEYXRhdGFibGVFbGVtZW50PzogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSkgbmd4Um93RGV0YWlsPzogRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlXG5cbiAgQFZpZXdDaGlsZCgnYWN0aW9uTWVudUNlbGxUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgYWN0aW9uTWVudUNlbGxUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCB9XG4gIHNldCBhY3Rpb25NZW51Q2VsbFRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2FjdGlvbk1lbnVDZWxsVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRBY3Rpb25NZW51Q2VsbFRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfYWN0aW9uTWVudUNlbGxUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCd0cmVlVG9nZ2xlVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IHRyZWVUb2dnbGVUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX3RyZWVUb2dnbGVUcGwgfVxuICBzZXQgdHJlZVRvZ2dsZVRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdHJlZVRvZ2dsZVRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0VHJlZVRvZ2dsZVRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfdHJlZVRvZ2dsZVRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgnaGVhZGVyVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGhlYWRlclRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2hlYWRlclRwbCB9XG4gIHNldCBoZWFkZXJUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9oZWFkZXJUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldEhlYWRlclRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfaGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgnYmxhbmtIZWFkZXJUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgYmxhbmtIZWFkZXJUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9ibGFua0hlYWRlclRwbCB9XG4gIHNldCBibGFua0hlYWRlclRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2JsYW5rSGVhZGVyVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRCbGFua0hlYWRlclRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfYmxhbmtIZWFkZXJUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCdjZWxsVHlwZVNlbGVjdG9yVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGNlbGxUeXBlU2VsZWN0b3JUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9jZWxsVHlwZVNlbGVjdG9yVHBsIH1cbiAgc2V0IGNlbGxUeXBlU2VsZWN0b3JUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jZWxsVHlwZVNlbGVjdG9yVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRDZWxsVHlwZVNlbGVjdG9yVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9jZWxsVHlwZVNlbGVjdG9yVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgcHVibGljIGNvbHVtbkNvbXBvbmVudHMkPzogT2JzZXJ2YWJsZTxEYXRhdGFibGVDb2x1bW5Db21wb25lbnRbXT5cbiAgcHJpdmF0ZSBfY29sRGlmZmVyc0lucDogeyBbcHJvcE5hbWU6IHN0cmluZ106IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB9ID0ge31cbiAgcHJpdmF0ZSBfY29sRGlmZmVyc1RwbDogeyBbcHJvcE5hbWU6IHN0cmluZ106IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB9ID0ge31cblxuICBwdWJsaWMgcmVhZG9ubHkgY29sdW1ucyQ6IE9ic2VydmFibGU8VGhlU2VhbURhdGF0YWJsZUNvbHVtbltdPlxuICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheUNvbHVtbnMkOiBPYnNlcnZhYmxlPFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT5cblxuICB2aWV3Q2hhbmdlOiBPYnNlcnZhYmxlPExpc3RSYW5nZT5cblxuICBwcml2YXRlIF9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFlcblxuICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBET00tZGVwZW5kZW50IGNvZGUgd2hlbiBhIHdheSB0byBwcm9wZXJ0eSBsaXN0ZW4gZm9yXG4gIC8vIGRibGNsaWNrIG9uIHRoZSBoZWFkZXIgcmVhc2l6ZSBoYW5kbGVzLlxuICBASG9zdExpc3RlbmVyKCdkYmxjbGljaycsIFsgJyRldmVudCcgXSlcbiAgX2RibENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpc0hhbmRsZSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygncmVzaXplLWhhbmRsZScpXG4gICAgaWYgKGlzSGFuZGxlKSB7XG4gICAgICBjb25zdCBpc1Jlc2l6ZWFibGUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoJ3Jlc2l6ZWFibGUnKVxuICAgICAgaWYgKGlzUmVzaXplYWJsZSkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBjb25zdCBpZCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnBhcmVudEVsZW1lbnRcbiAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy5kYXRhdGFibGUtY29sdW1uLWhlYWRlci1zZXBhcmF0b3InKVxuICAgICAgICAgID8uZ2V0QXR0cmlidXRlKCdkYXRhLWNvbHVtbi1pZCcpXG4gICAgICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLmNvbHVtbnMkLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgKS5zdWJzY3JpYmUoY29sdW1ucyA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKGMgPT4gYy4kJGlkID09PSBpZClcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5Qcm9wID0gZ2V0Q29sdW1uUHJvcChjb2x1bW4pXG4gICAgICAgICAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgICAgICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IFdpZHRoQ29sdW1uc0FsdGVyYXRpb24oeyBjb2x1bW5Qcm9wLCBjYW5BdXRvUmVzaXplOiB0cnVlIH0sIGZhbHNlKVxuICAgICAgICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcHJlZmVyZW5jZXM6IERhdGF0YWJsZVByZWZlcmVuY2VzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5zTWFuYWdlcjogQ29sdW1uc01hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXI6IENvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXJTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLl9wcmVmZXJlbmNlc0tleS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcChrZXkgPT4ge1xuICAgICAgICBpZiAoIW5vdE51bGxPclVuZGVmaW5lZChrZXkpIHx8IGtleS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZyb20od2FpdE9uQ29uZGl0aW9uQXN5bmMoKCkgPT4gdGhpcy5fcHJlZmVyZW5jZXMuaXNMb2FkZWQoa2V5KSkpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuY2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9wcmVmZXJlbmNlcy5zZXRBbHRlcmF0aW9ucyhrZXksIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuZ2V0KCkpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApKVxuICAgICAgICApXG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKSxcbiAgICApLnN1YnNjcmliZSgpXG5cbiAgICBjb25zdCBhcHBseVByZWZzID0gKGNvbHM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSkgPT4gdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5jaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYXBwbHkoY29scywgdGhpcylcbiAgICAgICAgcmV0dXJuIGNvbHNcbiAgICAgIH0pLFxuICAgIClcblxuICAgIHRoaXMuX3ByZWZlcmVuY2VzS2V5LnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKHByZWZzS2V5ID0+IHtcbiAgICAgICAgaWYgKCFub3ROdWxsT3JVbmRlZmluZWQocHJlZnNLZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXMucHJlZmVyZW5jZXMocHJlZnNLZXkpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKGFzeW5jIHByZWZlcmVuY2VzID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHdhaXRPbkNvbmRpdGlvbkFzeW5jKCgpID0+IHRoaXMuX3ByZWZlcmVuY2VzLmlzTG9hZGVkKHByZWZzS2V5KSlcbiAgICAgICAgICAgIHJldHVybiBwcmVmZXJlbmNlc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgbWFwKHByZWZlcmVuY2VzID0+IHtcbiAgICAgICAgICAgIGxldCBhbHRlcmF0aW9uczogQ29sdW1uc0FsdGVyYXRpb25bXSA9IFtdXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhbHRlcmF0aW9ucyA9IG1hcENvbHVtbnNBbHRlcmF0aW9uc1N0YXRlcyhwcmVmZXJlbmNlcy5hbHRlcmF0aW9ucylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBtYXAgY29sdW1ucyBhbHRlcmF0aW9ucyBzdGF0ZXMnKVxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoYWx0ZXJhdGlvbnMpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSlcbiAgICApLnN1YnNjcmliZSgpXG5cbiAgICB0aGlzLmNvbHVtbnMkID0gdGhpcy5fY29sdW1uc01hbmFnZXIuY29sdW1ucyRcblxuICAgIHRoaXMuZGlzcGxheUNvbHVtbnMkID0gdGhpcy5jb2x1bW5zJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGNvbHMgPT4gYXBwbHlQcmVmcyhjb2xzKSksXG4gICAgICBtYXAoY29scyA9PiBjb2xzLmZpbHRlcihjID0+ICFjLmhpZGRlbikpLFxuICAgICAgdGFwKHYgPT4gcmVtb3ZlVW51c2VkRGlmZnModiwgdGhpcy5fY29sRGlmZmVyc0lucCwgdGhpcy5fY29sRGlmZmVyc1RwbCkpLFxuICAgIClcblxuICAgIHRoaXMuZmlsdGVycyQgPSB0aGlzLl9maWx0ZXJzU3ViamVjdC5hc09ic2VydmFibGUoKVxuXG4gICAgdGhpcy5maWx0ZXJTdGF0ZXMgPSB0aGlzLl9maWx0ZXJzU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKGZpbHRlcnMgPT4gY29tcG9zZURhdGFGaWx0ZXJTdGF0ZXMoZmlsdGVycykpXG4gICAgKVxuXG4gICAgdGhpcy5yb3dzJCA9IHRoaXMuX2RhdGFTb3VyY2VTdWJqZWN0LnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZGF0YVNvdXJjZSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhU291cmNlJywgZGF0YVNvdXJjZSlcbiAgICAgICAgbGV0IGRhdGFTdHJlYW06IE9ic2VydmFibGU8YW55W10+XG5cbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+ZGF0YXNvdXJjZScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTb3VyY2UuY29ubmVjdCh0aGlzKSBhcyBhbnlcbiAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUoZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfm9ic2VydmFibGUnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU291cmNlIGFzIGFueVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfmFycmF5JylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gb2YoZGF0YVNvdXJjZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfnJvd3MgZmFsbGJhY2snKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSB0aGlzLl9yb3dzLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAvLyAucGlwZSh0YXAodiA9PiBjb25zb2xlLmxvZygncm93c34nLCB2KSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuZXh0ZXJuYWxGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbm90IHVzaW5nIGV4dGVybmFsRmlsdGVyaW5nJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVN0cmVhbS5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKHJvd3MgPT4gdGhpcy5fZmlsdGVyc1N1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ2ZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgICAgIGNvbmNhdE1hcChmaWx0ZXJzID0+IG9mKHJvd3MpLnBpcGUoY29tcG9zZURhdGFGaWx0ZXJzKGZpbHRlcnMpKSksXG4gICAgICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdjb21wb3NlZCBmaWx0ZXJzJywgdikpLFxuICAgICAgICAgICAgKSlcbiAgICAgICAgICApXG5cbiAgICAgICAgICAvLyBkYXRhU3RyZWFtID0gdGhpcy5fZmlsdGVyc1N1YmplY3QucGlwZShcbiAgICAgICAgICAvLyAgIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdmaWx0ZXJzJywgdikpLFxuICAgICAgICAgIC8vICAgY29uY2F0TWFwKGZpbHRlcnMgPT4gZGF0YVN0cmVhbS5waXBlKGNvbXBvc2VEYXRhRmlsdGVycyhmaWx0ZXJzKSkpLFxuICAgICAgICAgIC8vICAgdGFwKHYgPT4gY29uc29sZS5sb2coJ2NvbXBvc2VkIGZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgLy8gKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGFTdHJlYW0ucGlwZShcbiAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnc3RyZWFtJywgdikpLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIClcblxuICAgIC8vIFRPRE86IEltcGxlbWVudCB2aWV3Q2hhbmdlIGZvciBDb2xsZWN0aW9uVmlld2VyLlxuICAgIHRoaXMudmlld0NoYW5nZSA9IHRoaXMucGFnZS5waXBlKG1hcChwID0+ICh7IHN0YXJ0OiAwLCBlbmQ6IHAuY291bnQgfSkpKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMucm93RGV0YWlsKSB7XG4gICAgICB0aGlzLl9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24gPSB0aGlzLnJvd0RldGFpbC5fdG9nZ2xlLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGlmICh0aGlzLm5neFJvd0RldGFpbCkge1xuICAgICAgICAgIHRoaXMubmd4Um93RGV0YWlsLnRvZ2dsZS5lbWl0KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3Jvd0RldGFpbFRvZ2dsZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gIH1cblxuICBwcml2YXRlIF9zZXRNZW51QmFyRmlsdGVycyhmaWx0ZXJzOiBEYXRhRmlsdGVyW10pIHtcbiAgICB0aGlzLl9maWx0ZXJzU3ViamVjdC5uZXh0KGZpbHRlcnMgfHwgW10pXG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sdW1uQ29tcG9uZW50KHByb3BOYW1lOiBzdHJpbmcpOiBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY29sdW1uQ29tcG9uZW50cyB8fCB0aGlzLmNvbHVtbkNvbXBvbmVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHRwbCA9IHRoaXMuY29sdW1uQ29tcG9uZW50cy5maW5kKHQgPT4gdC5wcm9wID09PSBwcm9wTmFtZSlcbiAgICBpZiAodHBsKSB7XG4gICAgICByZXR1cm4gdHBsXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIF9jb2x1bW5EYXRhKGNvbDogYW55KTogeyBjb2w6IGFueSwgY29tcDogRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50IHwgbnVsbCB9IHtcbiAgICBjb25zdCBjb21wID0gdGhpcy5nZXRDb2x1bW5Db21wb25lbnQoY29sLnByb3ApXG4gICAgcmV0dXJuIHsgY29sLCBjb21wIH1cbiAgfVxuXG4gIF9nZXRSb3dFeHBhbmRlZChyb3c6IGFueSkge1xuICAgIGlmICh0aGlzLm5neERhdGF0YWJsZSAmJiB0aGlzLm5neERhdGF0YWJsZS5ib2R5Q29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5uZ3hEYXRhdGFibGUuYm9keUNvbXBvbmVudC5nZXRSb3dFeHBhbmRlZChyb3cpXG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcHVibGljIHRyYWNrQnlGbkNvbHVtbihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpIHtcbiAgICByZXR1cm4gaXRlbS5wcm9wXG4gIH1cblxuICBwdWJsaWMgb25EYXRhdGFibGVSZXNpemUoZXZlbnQ6IElFbGVtZW50UmVzaXplZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMubmd4RGF0YXRhYmxlICYmIHRoaXMubmd4RGF0YXRhYmxlRWxlbWVudCAmJiB0aGlzLm5neERhdGF0YWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgLy8gVE9ETzogQ29uc2lkZXIgaW50ZWdyYXRpbmcgdGhpcyBpbnRvIHRoZSBuZ3gtZGF0YXRhYmxlIGxpYnJhcnkgdG8gYXZvaWRcbiAgICAgIC8vIG11bHRpcGxlIHJlc2l6ZSBjYWxscyB3aGVuIHRoZSB0YWJsZSByZXNpemVzIGl0c2VsZi5cbiAgICAgIHRoaXMubmd4RGF0YXRhYmxlLnJlY2FsY3VsYXRlKClcbiAgICB9XG4gIH1cblxuICBfb25SZXNpemUoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucmVzaXplLmVtaXQoZXZlbnQpXG5cbiAgICBpZiAoIW5vdE51bGxPclVuZGVmaW5lZChldmVudC5jb2x1bW4pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5Qcm9wID0gZ2V0Q29sdW1uUHJvcChldmVudC5jb2x1bW4pXG4gICAgaWYgKGNvbHVtblByb3ApIHtcbiAgICAgIGxldCBhZGRBbHRlcmF0aW9uID0gZmFsc2VcblxuICAgICAgaWYgKCF0aGlzLl9yZXNpemluZ1tjb2x1bW5Qcm9wXSkge1xuICAgICAgICB0aGlzLl9yZXNpemluZ1tjb2x1bW5Qcm9wXSA9IHRydWVcbiAgICAgICAgYWRkQWx0ZXJhdGlvbiA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmlzRG9uZSkge1xuICAgICAgICB0aGlzLl9yZXNpemluZ1tjb2x1bW5Qcm9wXSA9IGZhbHNlXG4gICAgICAgIGFkZEFsdGVyYXRpb24gPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChhZGRBbHRlcmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgV2lkdGhDb2x1bW5zQWx0ZXJhdGlvbih7XG4gICAgICAgICAgY29sdW1uUHJvcCxcbiAgICAgICAgICB3aWR0aDogZXZlbnQuY29sdW1uLndpZHRoLFxuICAgICAgICAgIGNhbkF1dG9SZXNpemU6IGZhbHNlXG4gICAgICAgIH0sIHRydWUpXG4gICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKFsgYWx0ZXJhdGlvbiBdKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vblJlb3JkZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVvcmRlci5lbWl0KGV2ZW50KVxuXG4gICAgY29uc3QgY29sdW1uUHJvcCA9IGdldENvbHVtblByb3AoZXZlbnQuY29sdW1uKVxuICAgIGlmIChjb2x1bW5Qcm9wKSB7XG4gICAgICBjb25zdCBjdXJyZW50T3JkZXJBbHRlcmF0aW9uID0gdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5nZXQoKS5maW5kKHggPT4geC50eXBlID09PSAnb3JkZXInKVxuICAgICAgY29uc3Qgc3RhdGU6IE9yZGVyQ29sdW1uc0FsdGVyYXRpb25TdGF0ZSA9IHtcbiAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgIC4uLihjdXJyZW50T3JkZXJBbHRlcmF0aW9uPy5zdGF0ZS5jb2x1bW5zIHx8IFtdKSxcbiAgICAgICAgICB7IGNvbHVtblByb3AsIGluZGV4OiBldmVudC5uZXdWYWx1ZSB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgT3JkZXJDb2x1bW5zQWx0ZXJhdGlvbihzdGF0ZSwgdHJ1ZSlcbiAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKFsgYWx0ZXJhdGlvbiBdKVxuICAgIH1cbiAgfVxuXG4gIF9vblNvcnQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc29ydC5lbWl0KGV2ZW50KVxuXG4gICAgY29uc3QgYWx0ZXJhdGlvbiA9IG5ldyBTb3J0Q29sdW1uc0FsdGVyYXRpb24oeyBzb3J0czogZXZlbnQuc29ydHMgfSwgdHJ1ZSlcbiAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgfVxuXG4gIF9vblRyZWVBY3Rpb24oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGluZGV4ID0gZXZlbnQucm93SW5kZXhcbiAgICBjb25zdCByb3cgPSBldmVudC5yb3dcbiAgICBpZiAocm93LnRyZWVTdGF0dXMgPT09ICdjb2xsYXBzZWQnKSB7XG4gICAgICByb3cudHJlZVN0YXR1cyA9ICdleHBhbmRlZCdcbiAgICB9IGVsc2Uge1xuICAgICAgcm93LnRyZWVTdGF0dXMgPSAnY29sbGFwc2VkJ1xuICAgIH1cbiAgICB0aGlzLnJvd3MgPSBbIC4uLnRoaXMucm93cyBdXG4gIH1cblxuICBwdWJsaWMgdHJpZ2dlckFjdGlvblJlZnJlc2hSZXF1ZXN0KCkge1xuICAgIHRoaXMuYWN0aW9uUmVmcmVzaFJlcXVlc3QuZW1pdCh1bmRlZmluZWQpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcGFnZSBpbmZvIGZyb20gdGhlIHdyYXBwZWQgTmd4RGF0YXRhYmxlIGluc3RhbmNlIG9yIGRlZmF1bHRzLlxuICAgKi9cbiAgcHVibGljIGdldCBwYWdlSW5mbygpOiBUaGVTZWFtUGFnZUluZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBvZmZzZXQ6IHRoaXMubmd4RGF0YXRhYmxlPy5vZmZzZXQgPz8gMCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLm5neERhdGF0YWJsZT8ucGFnZVNpemUgPz8gMCxcbiAgICAgIGxpbWl0OiB0aGlzLm5neERhdGF0YWJsZT8ubGltaXQsXG4gICAgICBjb3VudDogdGhpcy5uZ3hEYXRhdGFibGU/LmNvdW50ID8/IDBcbiAgICB9XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImRhdGF0YWJsZS13cmFwcGVyXCI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cInNlYW0tZGF0YXRhYmxlLW1lbnUtYmFyXCI+PC9uZy1jb250ZW50PlxuICA8ZGl2IGNsYXNzPVwiZGF0YXRhYmxlLXRhYmxlLXdyYXBwZXJcIj5cbiAgICA8bmctY29udGFpbmVyPlxuICAgICAgPG5neC1kYXRhdGFibGVcbiAgICAgICAgW2NvbHVtbk1vZGVdPVwiJGFueShjb2x1bW5Nb2RlKVwiXG4gICAgICAgIFtzY3JvbGxiYXJWXT1cInNjcm9sbGJhclZcIlxuICAgICAgICBbc2Nyb2xsYmFySF09XCJzY3JvbGxiYXJIXCJcbiAgICAgICAgW3ZpcnR1YWxpemF0aW9uXT1cInZpcnR1YWxpemF0aW9uXCJcbiAgICAgICAgW3RhcmdldE1hcmtlclRlbXBsYXRlXT1cInRhcmdldE1hcmtlclRlbXBsYXRlXCJcbiAgICAgICAgW2dyb3VwUm93c0J5XT1cIiRhbnkoZ3JvdXBSb3dzQnkpXCJcbiAgICAgICAgW2dyb3VwZWRSb3dzXT1cIiRhbnkoZ3JvdXBlZFJvd3MpXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cIiRhbnkoc2VsZWN0ZWQpXCJcbiAgICAgICAgW2V4dGVybmFsUGFnaW5nXT1cImV4dGVybmFsUGFnaW5nXCJcbiAgICAgICAgW2V4dGVybmFsU29ydGluZ109XCJleHRlcm5hbFNvcnRpbmdcIlxuICAgICAgICBbbGltaXRdPVwiJGFueShsaW1pdClcIlxuICAgICAgICBbY291bnRdPVwiJGFueShjb3VudClcIlxuICAgICAgICBbb2Zmc2V0XT1cIiRhbnkob2Zmc2V0KVwiXG4gICAgICAgIFtsb2FkaW5nSW5kaWNhdG9yXT1cImxvYWRpbmdJbmRpY2F0b3JcIlxuICAgICAgICBbc2VsZWN0aW9uVHlwZV09XCIkYW55KHNlbGVjdGlvblR5cGUpXCJcbiAgICAgICAgW3Jlb3JkZXJhYmxlXT1cInJlb3JkZXJhYmxlXCJcbiAgICAgICAgW3N3YXBDb2x1bW5zXT1cInN3YXBDb2x1bW5zXCJcbiAgICAgICAgW3NvcnRUeXBlXT1cIiRhbnkoc29ydFR5cGUpXCJcbiAgICAgICAgW3NvcnRzXT1cIiRhbnkoX3NvcnRzKVwiXG4gICAgICAgIFtjc3NDbGFzc2VzXT1cImNzc0NsYXNzZXNcIlxuICAgICAgICBbbWVzc2FnZXNdPVwibWVzc2FnZXNcIlxuICAgICAgICBbcm93SWRlbnRpdHldPVwiJGFueShyb3dJZGVudGl0eSlcIlxuICAgICAgICBbcm93Q2xhc3NdPVwicm93Q2xhc3NcIlxuICAgICAgICBbc2VsZWN0Q2hlY2tdPVwic2VsZWN0Q2hlY2tcIlxuICAgICAgICBbZGlzcGxheUNoZWNrXT1cIiRhbnkoZGlzcGxheUNoZWNrKVwiXG4gICAgICAgIFtncm91cEV4cGFuc2lvbkRlZmF1bHRdPVwiZ3JvdXBFeHBhbnNpb25EZWZhdWx0XCJcbiAgICAgICAgW3RyYWNrQnlQcm9wXT1cIiRhbnkodHJhY2tCeVByb3ApXCJcbiAgICAgICAgW3NlbGVjdEFsbFJvd3NPblBhZ2VdPVwic2VsZWN0QWxsUm93c09uUGFnZVwiXG4gICAgICAgIFt0cmVlRnJvbVJlbGF0aW9uXT1cIiRhbnkodHJlZUZyb21SZWxhdGlvbilcIlxuICAgICAgICBbdHJlZVRvUmVsYXRpb25dPVwiJGFueSh0cmVlVG9SZWxhdGlvbilcIlxuICAgICAgICBbc3VtbWFyeVJvd109XCJzdW1tYXJ5Um93XCJcbiAgICAgICAgW3N1bW1hcnlIZWlnaHRdPVwiJGFueShzdW1tYXJ5SGVpZ2h0KVwiXG4gICAgICAgIFtzdW1tYXJ5UG9zaXRpb25dPVwiJGFueShzdW1tYXJ5UG9zaXRpb24pXCJcbiAgICAgICAgW3Jvd3NdPVwicm93cyQgfCBhc3luY1wiXG4gICAgICAgIFtjb2x1bW5zXT1cIiRhbnkoZGlzcGxheUNvbHVtbnMkIHwgYXN5bmMpXCJcbiAgICAgICAgW2hlYWRlckhlaWdodF09XCIkYW55KGhlYWRlckhlaWdodClcIlxuICAgICAgICBbcm93SGVpZ2h0XT1cIiRhbnkocm93SGVpZ2h0KVwiXG4gICAgICAgIFtmb290ZXJIZWlnaHRdPVwiJGFueShmb290ZXJIZWlnaHQpXCJcbiAgICAgICAgKHNjcm9sbCk9XCJzY3JvbGwuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKGFjdGl2YXRlKT1cImFjdGl2YXRlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3QpPVwic2VsZWN0LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChzb3J0KT1cIl9vblNvcnQoJGV2ZW50KVwiXG4gICAgICAgIChwYWdlKT1cInBhZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHJlb3JkZXIpPVwiX29uUmVvcmRlcigkZXZlbnQpXCJcbiAgICAgICAgKHJlc2l6ZSk9XCJfb25SZXNpemUoJGV2ZW50KVwiXG4gICAgICAgICh0YWJsZUNvbnRleHRtZW51KT1cInRhYmxlQ29udGV4dG1lbnUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHRyZWVBY3Rpb24pPVwidHJlZUFjdGlvbi5lbWl0KCRldmVudClcIlxuICAgICAgICAoc2VhbUVsZW1SZXNpemVkKT1cIm9uRGF0YXRhYmxlUmVzaXplKCRldmVudClcIlxuICAgICAgICAodHJlZUFjdGlvbik9XCJfb25UcmVlQWN0aW9uKCRldmVudClcIj5cblxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1ncm91cC1oZWFkZXIgW3Jvd0hlaWdodF09XCI1MFwiICNteUdyb3VwSGVhZGVyICpuZ0lmPVwiZ3JvdXBSb3dzQnlcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWdyb3VwPVwiZ3JvdXBcIiBsZXQtZXhwYW5kZWQ9XCJleHBhbmRlZFwiIG5neC1kYXRhdGFibGUtZ3JvdXAtaGVhZGVyLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInctMTAwIGJnLWxpZ2h0IHAtMVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItYm90dG9tXT1cIiFleHBhbmRlZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kYXRhdGFibGUtaWNvbi1yaWdodF09XCIhZXhwYW5kZWRcIlxuICAgICAgICAgICAgICBbY2xhc3MuZGF0YXRhYmxlLWljb24tZG93bl09XCJleHBhbmRlZFwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiRXhwYW5kL0NvbGxhcHNlIEdyb3VwXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm5neERhdGF0YWJsZT8uZ3JvdXBIZWFkZXI/LnRvZ2dsZUV4cGFuZEdyb3VwKGdyb3VwKVwiPlxuICAgICAgICAgICAgICA8Yj5BZ2U6IHt7IGdyb3VwLmFnZSB9fTwvYj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmd4LWRhdGF0YWJsZS1ncm91cC1oZWFkZXI+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtcm93LWRldGFpbCAqbmdJZj1cInJvd0RldGFpbCAmJiByb3dEZXRhaWwudGVtcGxhdGVcIlxuICAgICAgICAgIFtyb3dIZWlnaHRdPVwicm93RGV0YWlsLnJvd0hlaWdodCB8fCAwXCJcbiAgICAgICAgICBbdGVtcGxhdGVdPVwiJGFueShyb3dEZXRhaWwudGVtcGxhdGUpXCJcbiAgICAgICAgICAodG9nZ2xlKT1cInJvd0RldGFpbC50b2dnbGUuZW1pdCgkZXZlbnQpXCI+XG4gICAgICAgIDwvbmd4LWRhdGF0YWJsZS1yb3ctZGV0YWlsPlxuXG4gICAgICAgIDxuZ3gtZGF0YXRhYmxlLWZvb3RlciAqbmdJZj1cImZvb3RlciAmJiBmb290ZXIudGVtcGxhdGVcIlxuICAgICAgICAgIFt0ZW1wbGF0ZV09XCIkYW55KGZvb3Rlci50ZW1wbGF0ZSlcIj5cbiAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWZvb3Rlcj5cbiAgICAgIDwvbmd4LWRhdGF0YWJsZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNibGFua0hlYWRlclRwbCBuZ3gtZGF0YXRhYmxlLWhlYWRlci10ZW1wbGF0ZT48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2hlYWRlclRwbCBuZ3gtZGF0YXRhYmxlLWhlYWRlci10ZW1wbGF0ZVxuICBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LXNvcnRGbj1cInNvcnRGblwiPlxuICA8c3Ryb25nICpuZ0lmPVwiIWNvbHVtbi5zb3J0YWJsZVwiIGNsYXNzPVwiZHJhZ2dhYmxlXCI+e3tjb2x1bW4ubmFtZX19PC9zdHJvbmc+XG4gIDxzdHJvbmcgKm5nSWY9XCJjb2x1bW4uc29ydGFibGVcIiBjbGFzcz1cImRhdGF0YWJsZS1zb3J0LXRhcmdldCBkcmFnZ2FibGVcIiAoY2xpY2spPVwic29ydEZuKClcIj57e2NvbHVtbi5uYW1lfX08L3N0cm9uZz5cbiAgPGRpdiBjbGFzcz1cImRhdGF0YWJsZS1jb2x1bW4taGVhZGVyLXNlcGFyYXRvclwiIFthdHRyLmRhdGEtY29sdW1uLWlkXT1cImNvbHVtbi4kJGlkXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2NlbGxUeXBlU2VsZWN0b3JUcGwgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlXG4gIGxldC12YWx1ZT1cInZhbHVlXCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIiBsZXQtcm93PVwicm93XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8c2VhbS10YWJsZS1jZWxsLXR5cGUtc2VsZWN0b3IgKm5nSWY9XCJyb3dcIlxuICAgIFt0eXBlXT1cImNvbHVtbi5jZWxsVHlwZVwiXG4gICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICBbcm93SW5kZXhdPVwicm93SW5kZXhcIlxuICAgIFtyb3ddPVwicm93XCJcbiAgICBbY29sRGF0YV09XCJjb2x1bW5cIj5cbiAgPC9zZWFtLXRhYmxlLWNlbGwtdHlwZS1zZWxlY3Rvcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYWN0aW9uTWVudUNlbGxUcGwgbmd4LWRhdGF0YWJsZS1jZWxsLXRlbXBsYXRlXG4gIGxldC12YWx1ZT1cInZhbHVlXCIgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIiBsZXQtcm93PVwicm93XCI+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvdyAmJiByb3dBY3Rpb25JdGVtPy50ZW1wbGF0ZVwiPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShyb3dBY3Rpb25JdGVtPy50ZW1wbGF0ZSlcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiByb3csIHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXggfVwiPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuXG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RyZWVUb2dnbGVUcGwgbmd4LWRhdGF0YWJsZS10cmVlLXRvZ2dsZSBsZXQtdHJlZT1cImNlbGxDb250ZXh0XCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cInAtMCBiZy10cmFuc3BhcmVudCBib3JkZXItMCBidG5cIlxuICAgIFtkaXNhYmxlZF09XCJ0cmVlLnRyZWVTdGF0dXM9PT0nZGlzYWJsZWQnXCJcbiAgICAoY2xpY2spPVwidHJlZS5vblRyZWVBY3Rpb24oKVwiPlxuICAgIDxzcGFuICpuZ0lmPVwidHJlZS50cmVlU3RhdHVzPT09J2xvYWRpbmcnXCI+XG4gICAgICA8ZmEtaWNvbiBbaWNvbl09XCJfZmFTcGlubmVyXCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cInRyZWUudHJlZVN0YXR1cz09PSdjb2xsYXBzZWQnXCI+XG4gICAgICA8ZmEtaWNvbiBbaWNvbl09XCJfZmFDaGV2cm9uUmlnaHRcIj48L2ZhLWljb24+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwidHJlZS50cmVlU3RhdHVzPT09J2V4cGFuZGVkJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhQ2hldnJvbkRvd25cIj48L2ZhLWljb24+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwidHJlZS50cmVlU3RhdHVzPT09J2Rpc2FibGVkJ1wiPlxuICAgICAgPGZhLWljb24gW2ljb25dPVwiX2ZhQ2hldnJvblJpZ2h0XCI+PC9mYS1pY29uPlxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
670
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFBZ0MsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUE7QUFDaEcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFDTCxTQUFTLEVBSVQsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWpILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVGLE9BQU8sRUFDTCxVQUFVLEVBS1Ysa0JBQWtCLElBQUkscUJBQXFCLEVBQzND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QUF2RSxZQUFZO3VCQUFDLDRCQUE0QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFeEQsYUFBYTtzQkFEaEIsWUFBWTt1QkFBQywrQkFBK0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBUUssU0FBUztzQkFBNUUsWUFBWTt1QkFBQyxrQ0FBa0MsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0QsTUFBTTtzQkFBdEUsWUFBWTt1QkFBQywrQkFBK0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRzNELGdCQUFnQjtzQkFEbkIsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBaUJMLFlBQVk7c0JBQTdDLFNBQVM7dUJBQUMscUJBQXFCO2dCQUN3QixtQkFBbUI7c0JBQTFFLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNkLFlBQVk7c0JBQW5ELFNBQVM7dUJBQUMsMkJBQTJCO2dCQUdsQyxpQkFBaUI7c0JBRHBCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVM1QyxhQUFhO3NCQURoQixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBU3hDLFNBQVM7c0JBRFosU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVNwQyxjQUFjO3NCQURqQixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTekMsbUJBQW1CO3NCQUR0QixTQUFTO3VCQUFDLHFCQUFxQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFzQmxELFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxVQUFVLEVBQUUsQ0FBRSxRQUFRLENBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUFycmF5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3ZXIsIERhdGFTb3VyY2UsIGlzRGF0YVNvdXJjZSwgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJ1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIGlzRGV2TW9kZSxcbiAgS2V5VmFsdWVEaWZmZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY29uY2F0TWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgZmFDaGV2cm9uRG93biwgZmFDaGV2cm9uUmlnaHQsIGZhU3Bpbm5lciB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucydcbmltcG9ydCB7XG4gIENvbHVtbk1vZGUsXG4gIENvbnRleHRtZW51VHlwZSxcbiAgRGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGUsXG4gIERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZSxcbiAgRGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlLFxuICBEYXRhdGFibGVDb21wb25lbnQgYXMgTmd4RGF0YXRhYmxlQ29tcG9uZW50LFxuICBEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUsXG4gIFNvcnRUeXBlLFxuICBUcmVlU3RhdHVzXG59IGZyb20gJ0BtYXJrbGIvbmd4LWRhdGF0YWJsZSdcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uVHlwZSB9IGZyb20gJ0BtYXJrbGIvbmd4LWRhdGF0YWJsZSdcblxuaW1wb3J0IHsgSW5wdXRCb29sZWFuLCBJbnB1dE51bWJlciB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9jb3JlJ1xuaW1wb3J0IHsgY29tcG9zZURhdGFGaWx0ZXJzLCBjb21wb3NlRGF0YUZpbHRlclN0YXRlcywgRGF0YUZpbHRlciwgRGF0YUZpbHRlclN0YXRlIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2RhdGEtZmlsdGVycydcbmltcG9ydCB7IElFbGVtZW50UmVzaXplZEV2ZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3NoYXJlZCdcbmltcG9ydCB7IG5vdE51bGxPclVuZGVmaW5lZCwgd2FpdE9uQ29uZGl0aW9uQXN5bmMgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5cbmltcG9ydCB7IERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtYWN0aW9uLW1lbnUvZGF0YXRhYmxlLWFjdGlvbi1tZW51LmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1jb2x1bW4vZGF0YXRhYmxlLWNvbHVtbi5jb21wb25lbnQnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlRm9vdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0YXRhYmxlLWZvb3Rlci9kYXRhdGFibGUtZm9vdGVyLmRpcmVjdGl2ZSdcbmltcG9ydCB7IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtbWVudS1iYXIvZGF0YXRhYmxlLW1lbnUtYmFyLmNvbXBvbmVudCdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRhdGFibGUtcm93LWRldGFpbC9kYXRhdGFibGUtcm93LWRldGFpbC5kaXJlY3RpdmUnXG5pbXBvcnQgeyBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRhdGFibGUtcm93LWFjdGlvbi1pdGVtLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVBY2Nlc3NvciB9IGZyb20gJy4uL21vZGVscy9kYXRhdGFibGUtYWNjZXNzb3InXG5pbXBvcnQgeyBEYXRhdGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGF0YWJsZS1kYXRhLXNvdXJjZSdcbmltcG9ydCB7IFRoZVNlYW1QYWdlSW5mbyB9IGZyb20gJy4uL21vZGVscy9wYWdlLWluZm8nXG5pbXBvcnQgeyBTb3J0RXZlbnQgfSBmcm9tICcuLi9tb2RlbHMvc29ydC1ldmVudCdcbmltcG9ydCB7IFNvcnRJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL3NvcnQtaXRlbSdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtY29sdW1uJ1xuaW1wb3J0IHsgQ29sdW1uc01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29sdW1ucy1tYW5hZ2VyLnNlcnZpY2UnXG5pbXBvcnQgeyBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RhdGF0YWJsZS1jb2x1bW4tY2hhbmdlcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGF0YXRhYmxlLXByZWZlcmVuY2VzLnNlcnZpY2UnXG5pbXBvcnQgeyBUSEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUiB9IGZyb20gJy4uL3Rva2Vucy9kYXRhdGFibGUtYWNjZXNzb3InXG5pbXBvcnQgeyByZW1vdmVVbnVzZWREaWZmcyB9IGZyb20gJy4uL3V0aWxzL3JlbW92ZS11bnVzZWQtZGlmZnMnXG5pbXBvcnQgeyB0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnMgfSBmcm9tICcuLi91dGlscy90cmFuc2xhdGUtdGVtcGxhdGVzJ1xuaW1wb3J0IHsgQ29sdW1uc0FsdGVyYXRpb25zTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb2x1bW5zLWFsdGVyYXRpb25zLW1hbmFnZXIuc2VydmljZSdcbmltcG9ydCB7IENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbidcbmltcG9ydCB7IG1hcENvbHVtbnNBbHRlcmF0aW9uc1N0YXRlcyB9IGZyb20gJy4uL3V0aWxzL21hcC1jb2x1bW5zLWFsdGVyYXRpb25zLXN0YXRlcydcbmltcG9ydCB7IFdpZHRoQ29sdW1uc0FsdGVyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY29sdW1ucy1hbHRlcmF0aW9ucy93aWR0aC5jb2x1bW5zLWFsdGVyYXRpb24nXG5pbXBvcnQgeyBnZXRDb2x1bW5Qcm9wIH0gZnJvbSAnLi4vdXRpbHMvZ2V0LWNvbHVtbi1wcm9wJ1xuaW1wb3J0IHsgT3JkZXJDb2x1bW5zQWx0ZXJhdGlvbiwgT3JkZXJDb2x1bW5zQWx0ZXJhdGlvblN0YXRlIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvb3JkZXIuY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgU29ydENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvc29ydC5jb2x1bW5zLWFsdGVyYXRpb24nXG5cbi8qKlxuICogTk9URTogVGhpcyBpcyBzdGlsbCBiZWluZyB3b3JrZWQgb24uIEkgYW0gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhpcyBtb2RlbFxuICogYmVjYXVzZSBgbmd4LWRhdGF0YWJsZWAganVzdCB1c2VzIGFuIHVudHlwZWQgb2JqZWN0IGFuZCBzZXRzIHByb3BlcnRpZXMgaW5cbiAqIG11bHRpcGxlIHBsYWNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2VsbENvbnRleHQge1xuICBhbGxSb3dzU2VsZWN0ZWQ6IGZhbHNlXG5cbiAgc2VsZWN0Rm46ICgpID0+IGFueVxuICBzb3J0RGlyPzogJ2FzYycgfCAnZGVzYydcbiAgc29ydEZuOiAoKSA9PiBhbnlcblxuICBleHBhbmRlZD86IGJvb2xlYW5cblxuICBvbkNoZWNrYm94Q2hhbmdlRm4/OiBhbnlcbiAgYWN0aXZhdGVGbj86IGFueVxuICByb3c/OiBhbnlcbiAgZ3JvdXA/OiBhbnlcbiAgdmFsdWU/OiBhbnlcbiAgY29sdW1uPzogVGhlU2VhbURhdGF0YWJsZUNvbHVtblxuICByb3dIZWlnaHQ/OiBudW1iZXJcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW5cbiAgcm93SW5kZXg/OiBudW1iZXJcbiAgdHJlZVN0YXR1cz86IFRyZWVTdGF0dXNcbiAgb25UcmVlQWN0aW9uPzogYW55XG59XG5cbi8qKlxuICogSW50ZW5kZWQgZm9yIGludGVybmFsIGNsYXNzZXMgZGVjbGFyZWQgYnkgdGhlIGBUaGVTZWFtRGF0YXRhYmxlTW9kdWxlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRIRVNFQU1fREFUQVRBQkxFID0gbmV3IEluamVjdGlvblRva2VuPERhdGFGaWx0ZXI+KCdMaWJEYXRhdGFibGUnKVxuXG5leHBvcnQgY29uc3QgX1RIRVNFQU1fREFUQVRBQkxFOiBhbnkgPSB7XG4gIHByb3ZpZGU6IFRIRVNFQU1fREFUQVRBQkxFLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGF0YWJsZUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGNvbnN0IF9USEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBUSEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUixcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhdGFibGVDb21wb25lbnQpXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlYW0tZGF0YXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGF0YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3NsaWRlRG93bicsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMCUpJywgb3BhY2l0eTogJzAnIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcycsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6ICcxJyB9KSksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogJzEnIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcycsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjAlKScsIG9wYWNpdHk6ICcwJyB9KSksXG4gICAgICBdKVxuICAgIF0pXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIF9USEVTRUFNX0RBVEFUQUJMRSxcbiAgICBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSxcbiAgICBfVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IsXG4gICAgQ29sdW1uc01hbmFnZXJTZXJ2aWNlLFxuICAgIENvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXJTZXJ2aWNlLFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGF0YWJsZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBUaGVTZWFtRGF0YXRhYmxlQWNjZXNzb3IsIENvbGxlY3Rpb25WaWV3ZXIge1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxQYWdpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxTb3J0aW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsRmlsdGVyaW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2xvYWRpbmdJbmRpY2F0b3I6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcmVvcmRlcmFibGU6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3dhcENvbHVtbnM6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZ3JvdXBFeHBhbnNpb25EZWZhdWx0OiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NlbGVjdEFsbFJvd3NPblBhZ2U6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3VtbWFyeVJvdzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV92aXJ0dWFsaXphdGlvbjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zY3JvbGxiYXJWOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Njcm9sbGJhckg6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbGltaXQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jb3VudDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29mZnNldDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hlYWRlckhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Jvd0hlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Zvb3RlckhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N1bW1hcnlIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jb2x1bW5zOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10gfCB1bmRlZmluZWQgfCBudWxsXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zb3J0czogU29ydEl0ZW1bXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICByZWFkb25seSBfZmFDaGV2cm9uRG93biA9IGZhQ2hldnJvbkRvd25cbiAgcmVhZG9ubHkgX2ZhQ2hldnJvblJpZ2h0ID0gZmFDaGV2cm9uUmlnaHRcbiAgcmVhZG9ubHkgX2ZhU3Bpbm5lciA9IGZhU3Bpbm5lclxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlcnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhRmlsdGVyW10+KFtdKVxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVNvdXJjZTxhbnk+IHwgYW55W10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBwcml2YXRlIF9yZXNpemluZzogeyBbcHJvcDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyU3RhdGVzOiBPYnNlcnZhYmxlPERhdGFGaWx0ZXJTdGF0ZVtdPlxuXG4gIGdldCBmaWx0ZXJzKCk6IERhdGFGaWx0ZXJbXSB7IHJldHVybiB0aGlzLl9maWx0ZXJzU3ViamVjdC52YWx1ZSB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlcnMkOiBPYnNlcnZhYmxlPERhdGFGaWx0ZXJbXT5cblxuICBASW5wdXQoKVxuICBnZXQgcHJlZmVyZW5jZXNLZXkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCB7IHJldHVybiB0aGlzLl9wcmVmZXJlbmNlc0tleS52YWx1ZSB9XG4gIHNldCBwcmVmZXJlbmNlc0tleSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkgeyB0aGlzLl9wcmVmZXJlbmNlc0tleS5uZXh0KHZhbHVlIHx8IHVuZGVmaW5lZCkgfVxuICBwcml2YXRlIF9wcmVmZXJlbmNlc0tleSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbD4odW5kZWZpbmVkKVxuXG4gIEBJbnB1dCgpIHRhcmdldE1hcmtlclRlbXBsYXRlOiBhbnlcblxuICBASW5wdXQoKVxuICBzZXQgY29sdW1ucyh2YWx1ZTogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0SW5wdXRDb2x1bW5zKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSlcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCByb3dzKCk6IGFueVtdIHsgcmV0dXJuIHRoaXMuX3Jvd3MudmFsdWUgfVxuICBzZXQgcm93cyh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLl9yb3dzLm5leHQodmFsdWUgfHwgW10pXG4gIH1cbiAgcHJpdmF0ZSBfcm93cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxuXG4gIHB1YmxpYyByb3dzJDogT2JzZXJ2YWJsZTxhbnlbXT5cblxuICBASW5wdXQoKSBjb2x1bW5Nb2RlOiBDb2x1bW5Nb2RlIHwgdW5kZWZpbmVkIHwgbnVsbCA9IENvbHVtbk1vZGUuZm9yY2VcblxuICBASW5wdXQoKSBncm91cFJvd3NCeTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBncm91cGVkUm93czogYW55W10gfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbCA9IFtdXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsUGFnaW5nID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsU29ydGluZyA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbEZpbHRlcmluZyA9IGZhbHNlXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgbGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoMCkgY291bnQgPSAwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigwKSBvZmZzZXQgPSAwXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGxvYWRpbmdJbmRpY2F0b3IgPSBmYWxzZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3Rpb25UeXBlKCk6IFNlbGVjdGlvblR5cGUgfCB1bmRlZmluZWQgfCBudWxsIHsgcmV0dXJuIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLmdldFNlbGVjdGlvblR5cGUoKSB9XG4gIHNldCBzZWxlY3Rpb25UeXBlKHZhbHVlOiBTZWxlY3Rpb25UeXBlIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFNlbGVjdGlvblR5cGUobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHJlb3JkZXJhYmxlID0gdHJ1ZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc3dhcENvbHVtbnMgPSBmYWxzZVxuXG4gIEBJbnB1dCgpXG4gIGdldCBzb3J0VHlwZSgpOiBTb3J0VHlwZSB7IHJldHVybiB0aGlzLl9zb3J0VHlwZSB9XG4gIHNldCBzb3J0VHlwZSh2YWx1ZTogU29ydFR5cGUpIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSAmJiAodmFsdWUgPT09IFNvcnRUeXBlLnNpbmdsZSB8fCB2YWx1ZSA9PT0gU29ydFR5cGUubXVsdGkpKSB7XG4gICAgICB0aGlzLl9zb3J0VHlwZSA9IHZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NvcnRUeXBlID0gU29ydFR5cGUuc2luZ2xlXG4gICAgfVxuICB9XG4gIF9zb3J0VHlwZTogU29ydFR5cGUgPSBTb3J0VHlwZS5zaW5nbGVcblxuICBASW5wdXQoKVxuICBnZXQgc29ydHMoKTogU29ydEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMubmd4RGF0YXRhYmxlID8gdGhpcy5uZ3hEYXRhdGFibGUuc29ydHMgOiB0aGlzLl9zb3J0c1xuICB9XG4gIHNldCBzb3J0cyh2YWx1ZTogU29ydEl0ZW1bXSkge1xuICAgIHRoaXMuX3NvcnRzID0gbm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IGNvZXJjZUFycmF5KHZhbHVlKSA6IFtdXG4gIH1cbiAgX3NvcnRzOiBTb3J0SXRlbVtdID0gW11cblxuICBASW5wdXQoKSBjc3NDbGFzc2VzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsID0ge1xuICAgIHNvcnRBc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi11cCcsXG4gICAgc29ydERlc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi1kb3duJyxcbiAgICBwYWdlckxlZnRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLWxlZnQnLFxuICAgIHBhZ2VyUmlnaHRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLXJpZ2h0JyxcbiAgICBwYWdlclByZXZpb3VzOiAnZGF0YXRhYmxlLWljb24tcHJldicsXG4gICAgcGFnZXJOZXh0OiAnZGF0YXRhYmxlLWljb24tc2tpcCdcbiAgfVxuXG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsID0ge1xuICAgIC8vIE1lc3NhZ2UgdG8gc2hvdyB3aGVuIGFycmF5IGlzIHByZXNlbnRlZFxuICAgIC8vIGJ1dCBjb250YWlucyBubyB2YWx1ZXNcbiAgICBlbXB0eU1lc3NhZ2U6ICdObyByZWNvcmRzIGZvdW5kJyxcblxuICAgIC8vIEZvb3RlciB0b3RhbCBtZXNzYWdlXG4gICAgdG90YWxNZXNzYWdlOiAndG90YWwnLFxuXG4gICAgLy8gRm9vdGVyIHNlbGVjdGVkIG1lc3NhZ2VcbiAgICBzZWxlY3RlZE1lc3NhZ2U6ICdzZWxlY3RlZCdcbiAgfVxuXG4gIEBJbnB1dCgpIHJvd0lkZW50aXR5OiAoKHg6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCB8IG51bGwgPSAoeDogYW55KSA9PiB4XG5cbiAgQElucHV0KCkgcm93Q2xhc3M6IGFueSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBzZWxlY3RDaGVjazogYW55IHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBkaXNwbGF5Q2hlY2s6ICgocm93OiBhbnksIGNvbHVtbj86IGFueSwgdmFsdWU/OiBhbnkpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBncm91cEV4cGFuc2lvbkRlZmF1bHQgPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyYWNrQnlQcm9wOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNlbGVjdEFsbFJvd3NPblBhZ2UgPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyZWVGcm9tUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgdHJlZVRvUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHN1bW1hcnlSb3cgPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBzdW1tYXJ5SGVpZ2h0ID0gMzBcbiAgQElucHV0KCkgc3VtbWFyeVBvc2l0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsID0gJ3RvcCdcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgdmlydHVhbGl6YXRpb24gPSB0cnVlXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgaGVhZGVySGVpZ2h0ID0gNTBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgcm93SGVpZ2h0ID0gNTBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgZm9vdGVySGVpZ2h0ID0gNDBcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2Nyb2xsYmFyViA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNjcm9sbGJhckggPSB0cnVlXG5cbiAgQElucHV0KClcbiAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IERhdGFTb3VyY2U8YW55PiB8IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGF0YWJsZURhdGFTb3VyY2UpIHtcbiAgICAgIHZhbHVlLnNldERhdGF0YWJsZUFjY2Vzc29yKHRoaXMpXG4gICAgfVxuICAgIHRoaXMuX2RhdGFTb3VyY2VTdWJqZWN0Lm5leHQodmFsdWUgfHwgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoKSByZWFkb25seSBzY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aXZhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBzb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0RXZlbnQ+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoZVNlYW1QYWdlSW5mbz4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVvcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVzaXplID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHRhYmxlQ29udGV4dG1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IE1vdXNlRXZlbnQsIHR5cGU6IENvbnRleHRtZW51VHlwZSwgY29udGVudDogYW55IH0+KGZhbHNlKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdHJlZUFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGlvblJlZnJlc2hSZXF1ZXN0ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBoaWRkZW5Db2x1bW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50KVxuICBzZXQgY29sdW1uQ29tcG9uZW50cyh2YWx1ZTogUXVlcnlMaXN0PERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudD4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRUZW1wbGF0ZUNvbHVtbnModHJhbnNsYXRlVGVtcGxhdGVDb2x1bW5zKHZhbHVlPy50b0FycmF5KCkgPz8gW10pKVxuICB9XG5cbiAgQENvbnRlbnRDaGlsZChEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBhY3Rpb25NZW51PzogRGF0YXRhYmxlQWN0aW9uTWVudUNvbXBvbmVudFxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCByb3dBY3Rpb25JdGVtKCk6IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fcm93QWN0aW9uSXRlbSB9XG4gIHNldCByb3dBY3Rpb25JdGVtKHZhbHVlOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcm93QWN0aW9uSXRlbSA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0Um93QWN0aW9uSXRlbShub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfcm93QWN0aW9uSXRlbTogRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB8IHVuZGVmaW5lZFxuXG4gIEBDb250ZW50Q2hpbGQoVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgcm93RGV0YWlsPzogVGhlU2VhbURhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZVxuICBAQ29udGVudENoaWxkKFRoZVNlYW1EYXRhdGFibGVGb290ZXJEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGZvb3Rlcj86IFRoZVNlYW1EYXRhdGFibGVGb290ZXJEaXJlY3RpdmVcblxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQpXG4gIGdldCBtZW51QmFyQ29tcG9uZW50KCk6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fbWVudUJhckNvbXBvbmVudCB9XG4gIHNldCBtZW51QmFyQ29tcG9uZW50KHZhbHVlOiBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fbWVudUJhckNvbXBvbmVudCA9IHZhbHVlXG5cbiAgICBpZiAodGhpcy5fbWVudUJhclN1YikgeyB0aGlzLl9tZW51QmFyU3ViLnVuc3Vic2NyaWJlKCkgfVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9zZXRNZW51QmFyRmlsdGVycyh2YWx1ZS5maWx0ZXJzKCkpXG5cbiAgICAgIHRoaXMuX21lbnVCYXJTdWIgPSB0aGlzLl9tZW51QmFyQ29tcG9uZW50Py5maWx0ZXJzQ2hhbmdlZFxuICAgICAgICAuc3Vic2NyaWJlKHYgPT4geyB0aGlzLl9zZXRNZW51QmFyRmlsdGVycyh2YWx1ZS5maWx0ZXJzKCkpIH0pXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX21lbnVCYXJDb21wb25lbnQ6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSBfbWVudUJhclN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZChOZ3hEYXRhdGFibGVDb21wb25lbnQpIG5neERhdGF0YWJsZT86IE5neERhdGF0YWJsZUNvbXBvbmVudFxuICBAVmlld0NoaWxkKE5neERhdGF0YWJsZUNvbXBvbmVudCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIG5neERhdGF0YWJsZUVsZW1lbnQ/OiBFbGVtZW50UmVmXG4gIEBWaWV3Q2hpbGQoRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlKSBuZ3hSb3dEZXRhaWw/OiBEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmVcblxuICBAVmlld0NoaWxkKCdhY3Rpb25NZW51Q2VsbFRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBhY3Rpb25NZW51Q2VsbFRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2FjdGlvbk1lbnVDZWxsVHBsIH1cbiAgc2V0IGFjdGlvbk1lbnVDZWxsVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYWN0aW9uTWVudUNlbGxUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldEFjdGlvbk1lbnVDZWxsVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9hY3Rpb25NZW51Q2VsbFRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ3RyZWVUb2dnbGVUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgdHJlZVRvZ2dsZVRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fdHJlZVRvZ2dsZVRwbCB9XG4gIHNldCB0cmVlVG9nZ2xlVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl90cmVlVG9nZ2xlVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRUcmVlVG9nZ2xlVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF90cmVlVG9nZ2xlVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCdoZWFkZXJUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgaGVhZGVyVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5faGVhZGVyVHBsIH1cbiAgc2V0IGhlYWRlclRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2hlYWRlclRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0SGVhZGVyVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9oZWFkZXJUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCdibGFua0hlYWRlclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBibGFua0hlYWRlclRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2JsYW5rSGVhZGVyVHBsIH1cbiAgc2V0IGJsYW5rSGVhZGVyVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYmxhbmtIZWFkZXJUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldEJsYW5rSGVhZGVyVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9ibGFua0hlYWRlclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2NlbGxUeXBlU2VsZWN0b3JUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgY2VsbFR5cGVTZWxlY3RvclRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2NlbGxUeXBlU2VsZWN0b3JUcGwgfVxuICBzZXQgY2VsbFR5cGVTZWxlY3RvclRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NlbGxUeXBlU2VsZWN0b3JUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldENlbGxUeXBlU2VsZWN0b3JUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2NlbGxUeXBlU2VsZWN0b3JUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBwdWJsaWMgY29sdW1uQ29tcG9uZW50cyQ/OiBPYnNlcnZhYmxlPERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudFtdPlxuICBwcml2YXRlIF9jb2xEaWZmZXJzSW5wOiB7IFtwcm9wTmFtZTogc3RyaW5nXTogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IH0gPSB7fVxuICBwcml2YXRlIF9jb2xEaWZmZXJzVHBsOiB7IFtwcm9wTmFtZTogc3RyaW5nXTogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+IH0gPSB7fVxuXG4gIHB1YmxpYyByZWFkb25seSBjb2x1bW5zJDogT2JzZXJ2YWJsZTxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+XG4gIHB1YmxpYyByZWFkb25seSBkaXNwbGF5Q29sdW1ucyQ6IE9ic2VydmFibGU8VGhlU2VhbURhdGF0YWJsZUNvbHVtbltdPlxuXG4gIHZpZXdDaGFuZ2U6IE9ic2VydmFibGU8TGlzdFJhbmdlPlxuXG4gIHByaXZhdGUgX3Jvd0RldGFpbFRvZ2dsZVN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWVxuXG4gIC8vIFRPRE86IFJlbW92ZSB0aGlzIERPTS1kZXBlbmRlbnQgY29kZSB3aGVuIGEgd2F5IHRvIHByb3BlcnR5IGxpc3RlbiBmb3JcbiAgLy8gZGJsY2xpY2sgb24gdGhlIGhlYWRlciByZWFzaXplIGhhbmRsZXMuXG4gIEBIb3N0TGlzdGVuZXIoJ2RibGNsaWNrJywgWyAnJGV2ZW50JyBdKVxuICBfZGJsQ2xpY2soZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGlzSGFuZGxlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNpemUtaGFuZGxlJylcbiAgICBpZiAoaXNIYW5kbGUpIHtcbiAgICAgIGNvbnN0IGlzUmVzaXplYWJsZSA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucygncmVzaXplYWJsZScpXG4gICAgICBpZiAoaXNSZXNpemVhYmxlKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIGNvbnN0IGlkID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudFxuICAgICAgICAgID8ucXVlcnlTZWxlY3RvcignLmRhdGF0YWJsZS1jb2x1bW4taGVhZGVyLXNlcGFyYXRvcicpXG4gICAgICAgICAgPy5nZXRBdHRyaWJ1dGUoJ2RhdGEtY29sdW1uLWlkJylcbiAgICAgICAgdGhpcy5fY29sdW1uc01hbmFnZXIuY29sdW1ucyQucGlwZShcbiAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICApLnN1YnNjcmliZShjb2x1bW5zID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoYyA9PiBjLiQkaWQgPT09IGlkKVxuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGNvbHVtbilcbiAgICAgICAgICAgIGlmIChjb2x1bW5Qcm9wKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgV2lkdGhDb2x1bW5zQWx0ZXJhdGlvbih7IGNvbHVtblByb3AsIGNhbkF1dG9SZXNpemU6IHRydWUgfSwgZmFsc2UpXG4gICAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKFsgYWx0ZXJhdGlvbiBdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmVmZXJlbmNlczogRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnNNYW5hZ2VyOiBDb2x1bW5zTWFuYWdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlcjogQ29sdW1uc0FsdGVyYXRpb25zTWFuYWdlclNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuX3ByZWZlcmVuY2VzS2V5LnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKGtleSA9PiB7XG4gICAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKGtleSkgfHwga2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnJvbSh3YWl0T25Db25kaXRpb25Bc3luYygoKSA9PiB0aGlzLl9wcmVmZXJlbmNlcy5pc0xvYWRlZChrZXkpKSkucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3ByZWZlcmVuY2VzLnNldEFsdGVyYXRpb25zKGtleSwgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5nZXQoKSlcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICkpXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpLFxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIGNvbnN0IGFwcGx5UHJlZnMgPSAoY29sczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdKSA9PiB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hcHBseShjb2xzLCB0aGlzKVxuICAgICAgICByZXR1cm4gY29sc1xuICAgICAgfSksXG4gICAgKVxuXG4gICAgdGhpcy5fcHJlZmVyZW5jZXNLZXkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzd2l0Y2hNYXAocHJlZnNLZXkgPT4ge1xuICAgICAgICBpZiAoIW5vdE51bGxPclVuZGVmaW5lZChwcmVmc0tleSkpIHtcbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmVmZXJlbmNlcy5wcmVmZXJlbmNlcyhwcmVmc0tleSkucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoYXN5bmMgcHJlZmVyZW5jZXMgPT4ge1xuICAgICAgICAgICAgYXdhaXQgd2FpdE9uQ29uZGl0aW9uQXN5bmMoKCkgPT4gdGhpcy5fcHJlZmVyZW5jZXMuaXNMb2FkZWQocHJlZnNLZXkpKVxuICAgICAgICAgICAgcmV0dXJuIHByZWZlcmVuY2VzXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBtYXAocHJlZmVyZW5jZXMgPT4ge1xuICAgICAgICAgICAgbGV0IGFsdGVyYXRpb25zOiBDb2x1bW5zQWx0ZXJhdGlvbltdID0gW11cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGFsdGVyYXRpb25zID0gbWFwQ29sdW1uc0FsdGVyYXRpb25zU3RhdGVzKHByZWZlcmVuY2VzLmFsdGVyYXRpb25zKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIG1hcCBjb2x1bW5zIGFsdGVyYXRpb25zIHN0YXRlcycpXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChhbHRlcmF0aW9ucylcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuY29sdW1ucyQgPSB0aGlzLl9jb2x1bW5zTWFuYWdlci5jb2x1bW5zJFxuXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyQgPSB0aGlzLmNvbHVtbnMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY29scyA9PiBhcHBseVByZWZzKGNvbHMpKSxcbiAgICAgIG1hcChjb2xzID0+IGNvbHMuZmlsdGVyKGMgPT4gIWMuaGlkZGVuKSksXG4gICAgICB0YXAodiA9PiByZW1vdmVVbnVzZWREaWZmcyh2LCB0aGlzLl9jb2xEaWZmZXJzSW5wLCB0aGlzLl9jb2xEaWZmZXJzVHBsKSksXG4gICAgKVxuXG4gICAgdGhpcy5maWx0ZXJzJCA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG5cbiAgICB0aGlzLmZpbHRlclN0YXRlcyA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZmlsdGVycyA9PiBjb21wb3NlRGF0YUZpbHRlclN0YXRlcyhmaWx0ZXJzKSlcbiAgICApXG5cbiAgICB0aGlzLnJvd3MkID0gdGhpcy5fZGF0YVNvdXJjZVN1YmplY3QucGlwZShcbiAgICAgIHN3aXRjaE1hcChkYXRhU291cmNlID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2RhdGFTb3VyY2UnLCBkYXRhU291cmNlKVxuICAgICAgICBsZXQgZGF0YVN0cmVhbTogT2JzZXJ2YWJsZTxhbnlbXT5cblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35kYXRhc291cmNlJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVNvdXJjZS5jb25uZWN0KHRoaXMpIGFzIGFueVxuICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+b2JzZXJ2YWJsZScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTb3VyY2UgYXMgYW55XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+YXJyYXknKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBvZihkYXRhU291cmNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+cm93cyBmYWxsYmFjaycpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IHRoaXMuX3Jvd3MuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC8vIC5waXBlKHRhcCh2ID0+IGNvbnNvbGUubG9nKCdyb3dzficsIHYpKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5leHRlcm5hbEZpbHRlcmluZykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdub3QgdXNpbmcgZXh0ZXJuYWxGaWx0ZXJpbmcnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU3RyZWFtLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocm93cyA9PiB0aGlzLl9maWx0ZXJzU3ViamVjdC5waXBlKFxuICAgICAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAgICAgY29uY2F0TWFwKGZpbHRlcnMgPT4gb2Yocm93cykucGlwZShjb21wb3NlRGF0YUZpbHRlcnMoZmlsdGVycykpKSxcbiAgICAgICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ2NvbXBvc2VkIGZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgICApKVxuICAgICAgICAgIClcblxuICAgICAgICAgIC8vIGRhdGFTdHJlYW0gPSB0aGlzLl9maWx0ZXJzU3ViamVjdC5waXBlKFxuICAgICAgICAgIC8vICAgdGFwKHYgPT4gY29uc29sZS5sb2coJ2ZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgLy8gICBjb25jYXRNYXAoZmlsdGVycyA9PiBkYXRhU3RyZWFtLnBpcGUoY29tcG9zZURhdGFGaWx0ZXJzKGZpbHRlcnMpKSksXG4gICAgICAgICAgLy8gICB0YXAodiA9PiBjb25zb2xlLmxvZygnY29tcG9zZWQgZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAvLyApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YVN0cmVhbS5waXBlKFxuICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdzdHJlYW0nLCB2KSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHZpZXdDaGFuZ2UgZm9yIENvbGxlY3Rpb25WaWV3ZXIuXG4gICAgdGhpcy52aWV3Q2hhbmdlID0gdGhpcy5wYWdlLnBpcGUobWFwKHAgPT4gKHsgc3RhcnQ6IDAsIGVuZDogcC5jb3VudCB9KSkpXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5yb3dEZXRhaWwpIHtcbiAgICAgIHRoaXMuX3Jvd0RldGFpbFRvZ2dsZVN1YnNjcmlwdGlvbiA9IHRoaXMucm93RGV0YWlsLl90b2dnbGUuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMubmd4Um93RGV0YWlsKSB7XG4gICAgICAgICAgdGhpcy5uZ3hSb3dEZXRhaWwudG9nZ2xlLmVtaXQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgfVxuXG4gIHByaXZhdGUgX3NldE1lbnVCYXJGaWx0ZXJzKGZpbHRlcnM6IERhdGFGaWx0ZXJbXSkge1xuICAgIHRoaXMuX2ZpbHRlcnNTdWJqZWN0Lm5leHQoZmlsdGVycyB8fCBbXSlcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5Db21wb25lbnQocHJvcE5hbWU6IHN0cmluZyk6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5jb2x1bW5Db21wb25lbnRzIHx8IHRoaXMuY29sdW1uQ29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgdHBsID0gdGhpcy5jb2x1bW5Db21wb25lbnRzLmZpbmQodCA9PiB0LnByb3AgPT09IHByb3BOYW1lKVxuICAgIGlmICh0cGwpIHtcbiAgICAgIHJldHVybiB0cGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgX2NvbHVtbkRhdGEoY29sOiBhbnkpOiB7IGNvbDogYW55LCBjb21wOiBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfCBudWxsIH0ge1xuICAgIGNvbnN0IGNvbXAgPSB0aGlzLmdldENvbHVtbkNvbXBvbmVudChjb2wucHJvcClcbiAgICByZXR1cm4geyBjb2wsIGNvbXAgfVxuICB9XG5cbiAgX2dldFJvd0V4cGFuZGVkKHJvdzogYW55KSB7XG4gICAgaWYgKHRoaXMubmd4RGF0YXRhYmxlICYmIHRoaXMubmd4RGF0YXRhYmxlLmJvZHlDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5neERhdGF0YWJsZS5ib2R5Q29tcG9uZW50LmdldFJvd0V4cGFuZGVkKHJvdylcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUZuQ29sdW1uKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtLnByb3BcbiAgfVxuXG4gIHB1YmxpYyBvbkRhdGF0YWJsZVJlc2l6ZShldmVudDogSUVsZW1lbnRSZXNpemVkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5uZ3hEYXRhdGFibGUgJiYgdGhpcy5uZ3hEYXRhdGFibGVFbGVtZW50ICYmIHRoaXMubmd4RGF0YXRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBpbnRlZ3JhdGluZyB0aGlzIGludG8gdGhlIG5neC1kYXRhdGFibGUgbGlicmFyeSB0byBhdm9pZFxuICAgICAgLy8gbXVsdGlwbGUgcmVzaXplIGNhbGxzIHdoZW4gdGhlIHRhYmxlIHJlc2l6ZXMgaXRzZWxmLlxuICAgICAgdGhpcy5uZ3hEYXRhdGFibGUucmVjYWxjdWxhdGUoKVxuICAgIH1cbiAgfVxuXG4gIF9vblJlc2l6ZShldmVudDogYW55KSB7XG4gICAgdGhpcy5yZXNpemUuZW1pdChldmVudClcblxuICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKGV2ZW50LmNvbHVtbikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGV2ZW50LmNvbHVtbilcbiAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgbGV0IGFkZEFsdGVyYXRpb24gPSBmYWxzZVxuXG4gICAgICBpZiAoIXRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdID0gdHJ1ZVxuICAgICAgICBhZGRBbHRlcmF0aW9uID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuaXNEb25lKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdID0gZmFsc2VcbiAgICAgICAgYWRkQWx0ZXJhdGlvbiA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGFkZEFsdGVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgYWx0ZXJhdGlvbiA9IG5ldyBXaWR0aENvbHVtbnNBbHRlcmF0aW9uKHtcbiAgICAgICAgICBjb2x1bW5Qcm9wLFxuICAgICAgICAgIHdpZHRoOiBldmVudC5jb2x1bW4ud2lkdGgsXG4gICAgICAgICAgY2FuQXV0b1Jlc2l6ZTogZmFsc2VcbiAgICAgICAgfSwgdHJ1ZSlcbiAgICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX29uUmVvcmRlcihldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5yZW9yZGVyLmVtaXQoZXZlbnQpXG5cbiAgICBjb25zdCBjb2x1bW5Qcm9wID0gZ2V0Q29sdW1uUHJvcChldmVudC5jb2x1bW4pXG4gICAgaWYgKGNvbHVtblByb3ApIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRPcmRlckFsdGVyYXRpb24gPSB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmdldCgpLmZpbmQoeCA9PiB4LnR5cGUgPT09ICdvcmRlcicpXG4gICAgICBjb25zdCBzdGF0ZTogT3JkZXJDb2x1bW5zQWx0ZXJhdGlvblN0YXRlID0ge1xuICAgICAgICBjb2x1bW5zOiBbXG4gICAgICAgICAgLi4uKGN1cnJlbnRPcmRlckFsdGVyYXRpb24/LnN0YXRlLmNvbHVtbnMgfHwgW10pLFxuICAgICAgICAgIHsgY29sdW1uUHJvcCwgaW5kZXg6IGV2ZW50Lm5ld1ZhbHVlIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgICAgY29uc3QgYWx0ZXJhdGlvbiA9IG5ldyBPcmRlckNvbHVtbnNBbHRlcmF0aW9uKHN0YXRlLCB0cnVlKVxuICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gICAgfVxuICB9XG5cbiAgX29uU29ydChldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zb3J0LmVtaXQoZXZlbnQpXG5cbiAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IFNvcnRDb2x1bW5zQWx0ZXJhdGlvbih7IHNvcnRzOiBldmVudC5zb3J0cyB9LCB0cnVlKVxuICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKFsgYWx0ZXJhdGlvbiBdKVxuICB9XG5cbiAgX29uVHJlZUFjdGlvbihldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5kZXggPSBldmVudC5yb3dJbmRleFxuICAgIGNvbnN0IHJvdyA9IGV2ZW50LnJvd1xuICAgIGlmIChyb3cudHJlZVN0YXR1cyA9PT0gJ2NvbGxhcHNlZCcpIHtcbiAgICAgIHJvdy50cmVlU3RhdHVzID0gJ2V4cGFuZGVkJ1xuICAgIH0gZWxzZSB7XG4gICAgICByb3cudHJlZVN0YXR1cyA9ICdjb2xsYXBzZWQnXG4gICAgfVxuICAgIHRoaXMucm93cyA9IFsgLi4udGhpcy5yb3dzIF1cbiAgfVxuXG4gIHB1YmxpYyB0cmlnZ2VyQWN0aW9uUmVmcmVzaFJlcXVlc3QoKSB7XG4gICAgdGhpcy5hY3Rpb25SZWZyZXNoUmVxdWVzdC5lbWl0KHVuZGVmaW5lZClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwYWdlIGluZm8gZnJvbSB0aGUgd3JhcHBlZCBOZ3hEYXRhdGFibGUgaW5zdGFuY2Ugb3IgZGVmYXVsdHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBhZ2VJbmZvKCk6IFRoZVNlYW1QYWdlSW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9mZnNldDogdGhpcy5uZ3hEYXRhdGFibGU/Lm9mZnNldCA/PyAwLFxuICAgICAgcGFnZVNpemU6IHRoaXMubmd4RGF0YXRhYmxlPy5wYWdlU2l6ZSA/PyAwLFxuICAgICAgbGltaXQ6IHRoaXMubmd4RGF0YXRhYmxlPy5saW1pdCxcbiAgICAgIGNvdW50OiB0aGlzLm5neERhdGF0YWJsZT8uY291bnQgPz8gMFxuICAgIH1cbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0YXRhYmxlLXdyYXBwZXJcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2VhbS1kYXRhdGFibGUtbWVudS1iYXJcIj48L25nLWNvbnRlbnQ+XG4gIDxkaXYgY2xhc3M9XCJkYXRhdGFibGUtdGFibGUtd3JhcHBlclwiPlxuICAgIDxuZy1jb250YWluZXI+XG4gICAgICA8bmd4LWRhdGF0YWJsZVxuICAgICAgICBbY29sdW1uTW9kZV09XCIkYW55KGNvbHVtbk1vZGUpXCJcbiAgICAgICAgW3Njcm9sbGJhclZdPVwic2Nyb2xsYmFyVlwiXG4gICAgICAgIFtzY3JvbGxiYXJIXT1cInNjcm9sbGJhckhcIlxuICAgICAgICBbdmlydHVhbGl6YXRpb25dPVwidmlydHVhbGl6YXRpb25cIlxuICAgICAgICBbdGFyZ2V0TWFya2VyVGVtcGxhdGVdPVwidGFyZ2V0TWFya2VyVGVtcGxhdGVcIlxuICAgICAgICBbZ3JvdXBSb3dzQnldPVwiJGFueShncm91cFJvd3NCeSlcIlxuICAgICAgICBbZ3JvdXBlZFJvd3NdPVwiJGFueShncm91cGVkUm93cylcIlxuICAgICAgICBbc2VsZWN0ZWRdPVwiJGFueShzZWxlY3RlZClcIlxuICAgICAgICBbZXh0ZXJuYWxQYWdpbmddPVwiZXh0ZXJuYWxQYWdpbmdcIlxuICAgICAgICBbZXh0ZXJuYWxTb3J0aW5nXT1cImV4dGVybmFsU29ydGluZ1wiXG4gICAgICAgIFtsaW1pdF09XCIkYW55KGxpbWl0KVwiXG4gICAgICAgIFtjb3VudF09XCIkYW55KGNvdW50KVwiXG4gICAgICAgIFtvZmZzZXRdPVwiJGFueShvZmZzZXQpXCJcbiAgICAgICAgW2xvYWRpbmdJbmRpY2F0b3JdPVwibG9hZGluZ0luZGljYXRvclwiXG4gICAgICAgIFtzZWxlY3Rpb25UeXBlXT1cIiRhbnkoc2VsZWN0aW9uVHlwZSlcIlxuICAgICAgICBbcmVvcmRlcmFibGVdPVwicmVvcmRlcmFibGVcIlxuICAgICAgICBbc3dhcENvbHVtbnNdPVwic3dhcENvbHVtbnNcIlxuICAgICAgICBbc29ydFR5cGVdPVwiJGFueShzb3J0VHlwZSlcIlxuICAgICAgICBbc29ydHNdPVwiJGFueShfc29ydHMpXCJcbiAgICAgICAgW2Nzc0NsYXNzZXNdPVwiY3NzQ2xhc3Nlc1wiXG4gICAgICAgIFttZXNzYWdlc109XCJtZXNzYWdlc1wiXG4gICAgICAgIFtyb3dJZGVudGl0eV09XCIkYW55KHJvd0lkZW50aXR5KVwiXG4gICAgICAgIFtyb3dDbGFzc109XCJyb3dDbGFzc1wiXG4gICAgICAgIFtzZWxlY3RDaGVja109XCJzZWxlY3RDaGVja1wiXG4gICAgICAgIFtkaXNwbGF5Q2hlY2tdPVwiJGFueShkaXNwbGF5Q2hlY2spXCJcbiAgICAgICAgW2dyb3VwRXhwYW5zaW9uRGVmYXVsdF09XCJncm91cEV4cGFuc2lvbkRlZmF1bHRcIlxuICAgICAgICBbdHJhY2tCeVByb3BdPVwiJGFueSh0cmFja0J5UHJvcClcIlxuICAgICAgICBbc2VsZWN0QWxsUm93c09uUGFnZV09XCJzZWxlY3RBbGxSb3dzT25QYWdlXCJcbiAgICAgICAgW3RyZWVGcm9tUmVsYXRpb25dPVwiJGFueSh0cmVlRnJvbVJlbGF0aW9uKVwiXG4gICAgICAgIFt0cmVlVG9SZWxhdGlvbl09XCIkYW55KHRyZWVUb1JlbGF0aW9uKVwiXG4gICAgICAgIFtzdW1tYXJ5Um93XT1cInN1bW1hcnlSb3dcIlxuICAgICAgICBbc3VtbWFyeUhlaWdodF09XCIkYW55KHN1bW1hcnlIZWlnaHQpXCJcbiAgICAgICAgW3N1bW1hcnlQb3NpdGlvbl09XCIkYW55KHN1bW1hcnlQb3NpdGlvbilcIlxuICAgICAgICBbcm93c109XCJyb3dzJCB8IGFzeW5jXCJcbiAgICAgICAgW2NvbHVtbnNdPVwiJGFueShkaXNwbGF5Q29sdW1ucyQgfCBhc3luYylcIlxuICAgICAgICBbaGVhZGVySGVpZ2h0XT1cIiRhbnkoaGVhZGVySGVpZ2h0KVwiXG4gICAgICAgIFtyb3dIZWlnaHRdPVwiJGFueShyb3dIZWlnaHQpXCJcbiAgICAgICAgW2Zvb3RlckhlaWdodF09XCIkYW55KGZvb3RlckhlaWdodClcIlxuICAgICAgICAoc2Nyb2xsKT1cInNjcm9sbC5lbWl0KCRldmVudClcIlxuICAgICAgICAoYWN0aXZhdGUpPVwiYWN0aXZhdGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdCk9XCJzZWxlY3QuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgKHNvcnQpPVwiX29uU29ydCgkZXZlbnQpXCJcbiAgICAgICAgKHBhZ2UpPVwicGFnZS5lbWl0KCRldmVudClcIlxuICAgICAgICAocmVvcmRlcik9XCJfb25SZW9yZGVyKCRldmVudClcIlxuICAgICAgICAocmVzaXplKT1cIl9vblJlc2l6ZSgkZXZlbnQpXCJcbiAgICAgICAgKHRhYmxlQ29udGV4dG1lbnUpPVwidGFibGVDb250ZXh0bWVudS5lbWl0KCRldmVudClcIlxuICAgICAgICAodHJlZUFjdGlvbik9XCJ0cmVlQWN0aW9uLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgIChzZWFtRWxlbVJlc2l6ZWQpPVwib25EYXRhdGFibGVSZXNpemUoJGV2ZW50KVwiXG4gICAgICAgICh0cmVlQWN0aW9uKT1cIl9vblRyZWVBY3Rpb24oJGV2ZW50KVwiPlxuXG4gICAgICAgIDxuZ3gtZGF0YXRhYmxlLWdyb3VwLWhlYWRlciBbcm93SGVpZ2h0XT1cIjUwXCIgI215R3JvdXBIZWFkZXIgKm5nSWY9XCJncm91cFJvd3NCeVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtZ3JvdXA9XCJncm91cFwiIGxldC1leHBhbmRlZD1cImV4cGFuZGVkXCIgbmd4LWRhdGF0YWJsZS1ncm91cC1oZWFkZXItdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwidy0xMDAgYmctbGlnaHQgcC0xXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmJvcmRlci1ib3R0b21dPVwiIWV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmRhdGF0YWJsZS1pY29uLXJpZ2h0XT1cIiFleHBhbmRlZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5kYXRhdGFibGUtaWNvbi1kb3duXT1cImV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJFeHBhbmQvQ29sbGFwc2UgR3JvdXBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwibmd4RGF0YXRhYmxlPy5ncm91cEhlYWRlcj8udG9nZ2xlRXhwYW5kR3JvdXAoZ3JvdXApXCI+XG4gICAgICAgICAgICAgIDxiPkFnZToge3sgZ3JvdXAuYWdlIH19PC9iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLWdyb3VwLWhlYWRlcj5cblxuICAgICAgICA8bmd4LWRhdGF0YWJsZS1yb3ctZGV0YWlsICpuZ0lmPVwicm93RGV0YWlsICYmIHJvd0RldGFpbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgW3Jvd0hlaWdodF09XCJyb3dEZXRhaWwucm93SGVpZ2h0IHx8IDBcIlxuICAgICAgICAgIFt0ZW1wbGF0ZV09XCIkYW55KHJvd0RldGFpbC50ZW1wbGF0ZSlcIlxuICAgICAgICAgICh0b2dnbGUpPVwicm93RGV0YWlsLnRvZ2dsZS5lbWl0KCRldmVudClcIj5cbiAgICAgICAgPC9uZ3gtZGF0YXRhYmxlLXJvdy1kZXRhaWw+XG5cbiAgICAgICAgPG5neC1kYXRhdGFibGUtZm9vdGVyICpuZ0lmPVwiZm9vdGVyICYmIGZvb3Rlci50ZW1wbGF0ZVwiXG4gICAgICAgICAgW3RlbXBsYXRlXT1cIiRhbnkoZm9vdGVyLnRlbXBsYXRlKVwiPlxuICAgICAgICA8L25neC1kYXRhdGFibGUtZm9vdGVyPlxuICAgICAgPC9uZ3gtZGF0YXRhYmxlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2JsYW5rSGVhZGVyVHBsIG5neC1kYXRhdGFibGUtaGVhZGVyLXRlbXBsYXRlPjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVHBsIG5neC1kYXRhdGFibGUtaGVhZGVyLXRlbXBsYXRlXG4gIGxldC1jb2x1bW49XCJjb2x1bW5cIiBsZXQtc29ydEZuPVwic29ydEZuXCI+XG4gIDxzdHJvbmcgKm5nSWY9XCIhY29sdW1uLnNvcnRhYmxlXCIgY2xhc3M9XCJkcmFnZ2FibGVcIj57e2NvbHVtbi5uYW1lfX08L3N0cm9uZz5cbiAgPHN0cm9uZyAqbmdJZj1cImNvbHVtbi5zb3J0YWJsZVwiIGNsYXNzPVwiZGF0YXRhYmxlLXNvcnQtdGFyZ2V0IGRyYWdnYWJsZVwiIChjbGljayk9XCJzb3J0Rm4oKVwiPnt7Y29sdW1uLm5hbWV9fTwvc3Ryb25nPlxuICA8ZGl2IGNsYXNzPVwiZGF0YXRhYmxlLWNvbHVtbi1oZWFkZXItc2VwYXJhdG9yXCIgW2F0dHIuZGF0YS1jb2x1bW4taWRdPVwiY29sdW1uLiQkaWRcIj48L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2VsbFR5cGVTZWxlY3RvclRwbCBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGVcbiAgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxzZWFtLXRhYmxlLWNlbGwtdHlwZS1zZWxlY3RvciAqbmdJZj1cInJvd1wiXG4gICAgW3R5cGVdPVwiY29sdW1uLmNlbGxUeXBlXCJcbiAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgIFtyb3dJbmRleF09XCJyb3dJbmRleFwiXG4gICAgW3Jvd109XCJyb3dcIlxuICAgIFtjb2xEYXRhXT1cImNvbHVtblwiPlxuICA8L3NlYW0tdGFibGUtY2VsbC10eXBlLXNlbGVjdG9yPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhY3Rpb25NZW51Q2VsbFRwbCBuZ3gtZGF0YXRhYmxlLWNlbGwtdGVtcGxhdGVcbiAgbGV0LXZhbHVlPVwidmFsdWVcIiBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiIGxldC1yb3c9XCJyb3dcIj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93ICYmIHJvd0FjdGlvbkl0ZW0/LnRlbXBsYXRlXCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCIkYW55KHJvd0FjdGlvbkl0ZW0/LnRlbXBsYXRlKVwiXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHJvdywgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCB9XCI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdHJlZVRvZ2dsZVRwbCBuZ3gtZGF0YXRhYmxlLXRyZWUtdG9nZ2xlIGxldC10cmVlPVwiY2VsbENvbnRleHRcIj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwicC0wIGJnLXRyYW5zcGFyZW50IGJvcmRlci0wIGJ0blwiXG4gICAgW2Rpc2FibGVkXT1cInRyZWUudHJlZVN0YXR1cz09PSdkaXNhYmxlZCdcIlxuICAgIChjbGljayk9XCJ0cmVlLm9uVHJlZUFjdGlvbigpXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRyZWVTdGF0dXM9PT0nbG9hZGluZydcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYVNwaW5uZXJcIj48L2ZhLWljb24+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwidHJlZS50cmVlU3RhdHVzPT09J2NvbGxhcHNlZCdcIj5cbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIl9mYUNoZXZyb25SaWdodFwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRyZWVTdGF0dXM9PT0nZXhwYW5kZWQnXCI+XG4gICAgICA8ZmEtaWNvbiBbaWNvbl09XCJfZmFDaGV2cm9uRG93blwiPjwvZmEtaWNvbj5cbiAgICA8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJ0cmVlLnRyZWVTdGF0dXM9PT0nZGlzYWJsZWQnXCI+XG4gICAgICA8ZmEtaWNvbiBbaWNvbl09XCJfZmFDaGV2cm9uUmlnaHRcIj48L2ZhLWljb24+XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -93,13 +93,13 @@ export class DatatableActionMenuComponent {
|
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
DatatableActionMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableActionMenuComponent, deps: [{ token: i1.SeamConfirmDialogService }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
96
|
-
DatatableActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableActionMenuComponent, selector: "seam-datatable-action-menu", inputs: { isSubMenu: "isSubMenu" }, queries: [{ propertyName: "items", predicate: DatatableActionMenuItemComponent }], viewQueries: [{ propertyName: "menu", first: true, predicate: MenuComponent, descendants: true, static: true }], exportAs: ["seamDatatableActionMenu"], ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <ng-container *ngIf=\"!!item.subMenu; else noSubMenu\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [seamMenuToggle]=\"item.subMenu.menu\"\n [seamMenuTogglePositionsOffsetY]=\"-3\">\n {{ item.label }}\n </button>\n </ng-container>\n <ng-template #noSubMenu>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<ng-container *ngIf=\"!isSubMenu\">\n <button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n </button>\n</ng-container>\n", styles: [":host{position:relative;
|
|
96
|
+
DatatableActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableActionMenuComponent, selector: "seam-datatable-action-menu", inputs: { isSubMenu: "isSubMenu" }, queries: [{ propertyName: "items", predicate: DatatableActionMenuItemComponent }], viewQueries: [{ propertyName: "menu", first: true, predicate: MenuComponent, descendants: true, static: true }], exportAs: ["seamDatatableActionMenu"], ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <ng-container *ngIf=\"!!item.subMenu; else noSubMenu\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [seamMenuToggle]=\"item.subMenu.menu\"\n [seamMenuTogglePositionsOffsetY]=\"-3\">\n {{ item.label }}\n </button>\n </ng-container>\n <ng-template #noSubMenu>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<ng-container *ngIf=\"!isSubMenu\">\n <button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n </button>\n</ng-container>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i4.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i4.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions", "seamMenuTogglePositionsOffsetY"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i4.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i5.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }] });
|
|
97
97
|
__decorate([
|
|
98
98
|
InputBoolean()
|
|
99
99
|
], DatatableActionMenuComponent.prototype, "isSubMenu", void 0);
|
|
100
100
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableActionMenuComponent, decorators: [{
|
|
101
101
|
type: Component,
|
|
102
|
-
args: [{ selector: 'seam-datatable-action-menu', exportAs: 'seamDatatableActionMenu', template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <ng-container *ngIf=\"!!item.subMenu; else noSubMenu\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [seamMenuToggle]=\"item.subMenu.menu\"\n [seamMenuTogglePositionsOffsetY]=\"-3\">\n {{ item.label }}\n </button>\n </ng-container>\n <ng-template #noSubMenu>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<ng-container *ngIf=\"!isSubMenu\">\n <button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n </button>\n</ng-container>\n", styles: [":host{position:relative;
|
|
102
|
+
args: [{ selector: 'seam-datatable-action-menu', exportAs: 'seamDatatableActionMenu', template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <ng-container *ngIf=\"!!item.subMenu; else noSubMenu\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [seamMenuToggle]=\"item.subMenu.menu\"\n [seamMenuTogglePositionsOffsetY]=\"-3\">\n {{ item.label }}\n </button>\n </ng-container>\n <ng-template #noSubMenu>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<ng-container *ngIf=\"!isSubMenu\">\n <button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n </button>\n</ng-container>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"] }]
|
|
103
103
|
}], ctorParameters: function () { return [{ type: i1.SeamConfirmDialogService }, { type: i2.Router }]; }, propDecorators: { menu: [{
|
|
104
104
|
type: ViewChild,
|
|
105
105
|
args: [MenuComponent, { static: true }]
|
|
@@ -43,7 +43,7 @@ export class DatatableColumnPreferencesButtonComponent {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
DatatableColumnPreferencesButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableColumnPreferencesButtonComponent, deps: [{ token: i1.ColumnsAlterationsManagerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
46
|
-
DatatableColumnPreferencesButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableColumnPreferencesButtonComponent, selector: "seam-datatable-column-preferences-button", ngImport: i0, template: "<ng-template #colPrefsTpl>\n <seam-datatable-column-preferences></seam-datatable-column-preferences>\n</ng-template>\n\n<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [seamPopover]=\"colPrefsTpl\">\n Show/Hide Columns\n </button>\n\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"_resetColumns($event)\">\n Reset Columns\n </button>\n</seam-menu>\n\n<button type=\"button\" class=\"btn btn-lightgray btn-sm\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Column Preferences\">\n <seam-icon [icon]=\"icon\"></seam-icon>\n <span class=\"sr-only\">Column Preferences</span>\n</button>\n\n", styles: [""], dependencies: [{ kind: "component", type: i2.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i2.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions", "seamMenuTogglePositionsOffsetY"], outputs: ["
|
|
46
|
+
DatatableColumnPreferencesButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: DatatableColumnPreferencesButtonComponent, selector: "seam-datatable-column-preferences-button", ngImport: i0, template: "<ng-template #colPrefsTpl>\n <seam-datatable-column-preferences></seam-datatable-column-preferences>\n</ng-template>\n\n<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [seamPopover]=\"colPrefsTpl\">\n Show/Hide Columns\n </button>\n\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"_resetColumns($event)\">\n Reset Columns\n </button>\n</seam-menu>\n\n<button type=\"button\" class=\"btn btn-lightgray btn-sm\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Column Preferences\">\n <seam-icon [icon]=\"icon\"></seam-icon>\n <span class=\"sr-only\">Column Preferences</span>\n</button>\n\n", styles: [""], dependencies: [{ kind: "component", type: i2.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i2.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions", "seamMenuTogglePositionsOffsetY"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i2.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "component", type: i3.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "directive", type: i4.TheSeamPopoverDirective, selector: "[seamPopover]", inputs: ["seamPopover", "seamPopoverBaseWidth", "seamPopoverDisabled"], exportAs: ["seamPopover"] }, { kind: "component", type: i5.DatatableColumnPreferencesComponent, selector: "seam-datatable-column-preferences" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
47
47
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: DatatableColumnPreferencesButtonComponent, decorators: [{
|
|
48
48
|
type: Component,
|
|
49
49
|
args: [{ selector: 'seam-datatable-column-preferences-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template #colPrefsTpl>\n <seam-datatable-column-preferences></seam-datatable-column-preferences>\n</ng-template>\n\n<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [seamPopover]=\"colPrefsTpl\">\n Show/Hide Columns\n </button>\n\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"_resetColumns($event)\">\n Reset Columns\n </button>\n</seam-menu>\n\n<button type=\"button\" class=\"btn btn-lightgray btn-sm\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n style=\"padding-left: 10px; padding-right: 10px;\"\n title=\"Column Preferences\">\n <seam-icon [icon]=\"icon\"></seam-icon>\n <span class=\"sr-only\">Column Preferences</span>\n</button>\n\n" }]
|