@acorex/data-grid 16.0.11 → 16.0.13
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/lib/data-grid/datagrid.component.mjs +40 -2
- package/esm2022/lib/data-lov/data-lov-popup/data-lov-popup.component.mjs +1 -1
- package/fesm2022/acorex-data-grid.mjs +40 -2
- package/fesm2022/acorex-data-grid.mjs.map +1 -1
- package/lib/data-grid/datagrid.component.d.ts +7 -1
- package/package.json +1 -1
@@ -51,6 +51,7 @@ export class AXDataGridComponent {
|
|
51
51
|
groupSelectsChildren = false;
|
52
52
|
oldSelectionNodes = [];
|
53
53
|
autoGroupColumnDef = {};
|
54
|
+
currentPage = 1;
|
54
55
|
paginationAutoPageSize = false;
|
55
56
|
paginationPageSize = 20;
|
56
57
|
cacheBlockSize = this.paginationPageSize;
|
@@ -76,6 +77,7 @@ export class AXDataGridComponent {
|
|
76
77
|
maxConcurrentDatasourceRequests;
|
77
78
|
blockLoadDebounceMillis;
|
78
79
|
showRefreshButton = true;
|
80
|
+
autoNavigatePage = true;
|
79
81
|
rowClass;
|
80
82
|
rtl = AXConfig.get('layout.rtl');
|
81
83
|
_searchText;
|
@@ -238,6 +240,12 @@ export class AXDataGridComponent {
|
|
238
240
|
if (this.showRefreshButton) {
|
239
241
|
this.makeRefreshBtn();
|
240
242
|
}
|
243
|
+
if (this.autoNavigatePage) {
|
244
|
+
this.handleNextBtnClick();
|
245
|
+
this.handleBackBtnClick();
|
246
|
+
this.handleLastBtnClick();
|
247
|
+
this.handleFitstBtnClick();
|
248
|
+
}
|
241
249
|
}
|
242
250
|
ngAfterContentInit() {
|
243
251
|
const that = this;
|
@@ -379,6 +387,9 @@ export class AXDataGridComponent {
|
|
379
387
|
this.gridApi.setRowData(items);
|
380
388
|
}
|
381
389
|
}
|
390
|
+
if (this.getCurrentPageNumber().total > 1 && this.autoNavigatePage) {
|
391
|
+
this.paginationGoToPage(this.currentPage);
|
392
|
+
}
|
382
393
|
this.gridSelectRow();
|
383
394
|
});
|
384
395
|
this.dataSource.onFetchStart.subscribe(() => {
|
@@ -659,12 +670,37 @@ export class AXDataGridComponent {
|
|
659
670
|
refBtn.style.cursor = 'pointer';
|
660
671
|
refBtn.title = AXTranslator.get('common.refresh');
|
661
672
|
refBtn.addEventListener('click', () => {
|
673
|
+
this.currentPage = this.getCurrentPageNumber().current;
|
662
674
|
this.refresh();
|
663
675
|
});
|
664
676
|
pagingPanel.appendChild(refBtn);
|
665
677
|
}
|
678
|
+
handleNextBtnClick() {
|
679
|
+
const nextPageBtn = this.ref.nativeElement.querySelector('[ref="btNext"]');
|
680
|
+
nextPageBtn.addEventListener('click', () => {
|
681
|
+
this.currentPage = this.getCurrentPageNumber().current;
|
682
|
+
});
|
683
|
+
}
|
684
|
+
handleBackBtnClick() {
|
685
|
+
const backPageBtn = this.ref.nativeElement.querySelector('[ref="btPrevious"]');
|
686
|
+
backPageBtn.addEventListener('click', () => {
|
687
|
+
this.currentPage = this.getCurrentPageNumber().current;
|
688
|
+
});
|
689
|
+
}
|
690
|
+
handleLastBtnClick() {
|
691
|
+
const backPageBtn = this.ref.nativeElement.querySelector('[ref="btLast"]');
|
692
|
+
backPageBtn.addEventListener('click', () => {
|
693
|
+
this.currentPage = this.getCurrentPageNumber().current;
|
694
|
+
});
|
695
|
+
}
|
696
|
+
handleFitstBtnClick() {
|
697
|
+
const backPageBtn = this.ref.nativeElement.querySelector('[ref="btFirst"]');
|
698
|
+
backPageBtn.addEventListener('click', () => {
|
699
|
+
this.currentPage = this.getCurrentPageNumber().current;
|
700
|
+
});
|
701
|
+
}
|
666
702
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXDataGridComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
667
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AXDataGridComponent, selector: "ax-data-grid", inputs: { paginationAutoPageSize: "paginationAutoPageSize", paginationPageSize: "paginationPageSize", remoteOperation: "remoteOperation", rowMultiSelectWithClick: "rowMultiSelectWithClick", suppressRowClickSelection: "suppressRowClickSelection", suppressCellSelection: "suppressCellSelection", sizeColumnsToFit: "sizeColumnsToFit", showCheckBox: "showCheckBox", floatingFilter: "floatingFilter", autoExpand: "autoExpand", rowSelectableConditionField: "rowSelectableConditionField", selectionMode: "selectionMode", pagination: "pagination", selectRow: "selectRow", rowGroupPanelShow: "rowGroupPanelShow", loadOnInit: "loadOnInit", enableRangeSelection: "enableRangeSelection", keyField: "keyField", hasChildField: "hasChildField", rowHeight: "rowHeight", groupHideOpenParents: "groupHideOpenParents", maxConcurrentDatasourceRequests: "maxConcurrentDatasourceRequests", blockLoadDebounceMillis: "blockLoadDebounceMillis", showRefreshButton: "showRefreshButton", rowClass: "rowClass", rtl: "rtl", searchText: "searchText", filter: "filter", columns: "columns", dataSource: "dataSource" }, outputs: { columnsChange: "columnsChange", cellClick: "cellClick", cellDbClick: "cellDbClick", cellFocuse: "cellFocuse", rowClick: "rowClick", rowDbClick: "rowDbClick", selectionChanged: "selectionChanged", rowSelectionChange: "rowSelectionChange", onRowSelectionChanged: "onRowSelectionChanged" }, queries: [{ propertyName: "searchInput", first: true, predicate: AXToolbarSearchComponent, descendants: true, static: true }, { propertyName: "toolbar", first: true, predicate: AXToolbarComponent, descendants: true, static: true }, { propertyName: "rowTemplate", first: true, predicate: AXDataGridRowTemplateComponent, descendants: true, static: true }, { propertyName: "gridDetailTemplate", first: true, predicate: AXDataGridDetailTemplateComponent, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }, { propertyName: "_inlineColumns", predicate: AXGridDataColumn }], ngImport: i0, template: "<div class=\"ax-grid-toolbar\" *ngIf=\"toolbar\">\n <ng-content select=\"ax-toolbar\"></ng-content>\n</div>\n<!-- [enableSorting]=\"true\" [enableColResize]=\"true\" [enableFilter]=\"allowFiltering\" -->\n\n<ag-grid-angular\n *ngIf=\"gridView\"\n class=\"ag-theme-balham\"\n [getRowClass]=\"internalGetRowClass\"\n [suppressCopyRowsToClipboard]=\"true\"\n [enableRangeSelection]=\"enableRangeSelection\"\n [serverSideStoreType]=\"'partial'\"\n [style.height]=\"internalHeight\"\n [columnDefs]=\"columnDefs\"\n [enableRtl]=\"rtl\"\n [pagination]=\"pagination\"\n [rowGroupPanelShow]=\"rowGroupPanelShow\"\n [rowModelType]=\"rowModelType\"\n [detailRowHeight]=\"detailRowHeight\"\n [rowHeight]=\"rowHeight\"\n [paginationAutoPageSize]=\"paginationAutoPageSize\"\n [paginationPageSize]=\"paginationPageSize\"\n [suppressMenuHide]=\"true\"\n [maxConcurrentDatasourceRequests]=\"maxConcurrentDatasourceRequests\"\n [blockLoadDebounceMillis]=\"blockLoadDebounceMillis\"\n [frameworkComponents]=\"frameworkComponents\"\n [isFullWidthCell]=\"isFullWidthCell\"\n [rowSelection]=\"selectionMode\"\n [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\"\n [fullWidthCellRendererFramework]=\"fullWidthCellRendererFramework\"\n [cacheBlockSize]=\"cacheBlockSize\"\n [fullWidthCellRendererParams]=\"fullWidthCellRendererParams\"\n (columnResized)=\"handleColumnResized($event)\"\n (cellClicked)=\"internalGridCellClicked($event)\"\n (cellDoubleClicked)=\"internalGridCellDoubleClicked($event)\"\n (cellFocused)=\"internalGridCellFocused($event)\"\n (rowClicked)=\"internalGridRowClicked($event)\"\n (selectionChanged)=\"internalGridSelectionChanged($event)\"\n (rowSelected)=\"rowSelectionChanged($event)\"\n (rowDoubleClicked)=\"internalGridRowDoubleClicked($event)\"\n (gridReady)=\"internalGridReady($event)\"\n [groupSelectsChildren]=\"groupSelectsChildren\"\n [suppressRowClickSelection]=\"suppressRowClickSelection\"\n [groupSelectsFiltered]=\"true\"\n [suppressCellSelection]=\"suppressCellSelection\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [suppressAggFuncInHeader]=\"true\"\n [treeData]=\"treeData\"\n [animateRows]=\"true\"\n [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\"\n [masterDetail]=\"masterDetail\"\n [detailCellRendererParams]=\"detailCellRendererParams\"\n [detailCellRenderer]=\"detailCellRenderer\"\n (gridSizeChanged)=\"internalGridSizeChanged($event)\"\n (firstDataRendered)=\"internalGridFirstDataRendered($event)\"\n [localeText]=\"localeText\"\n [groupHideOpenParents]=\"groupHideOpenParents\"\n [allowContextMenuWithControlKey]=\"false\"\n [getMainMenuItems]=\"getMainMenuItems\"\n>\n</ag-grid-angular>\n\n<!-- (displayedColumnsChanged)=\"displayedColumnsChanged($event)\" -->\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }], encapsulation: i0.ViewEncapsulation.None });
|
703
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AXDataGridComponent, selector: "ax-data-grid", inputs: { paginationAutoPageSize: "paginationAutoPageSize", paginationPageSize: "paginationPageSize", remoteOperation: "remoteOperation", rowMultiSelectWithClick: "rowMultiSelectWithClick", suppressRowClickSelection: "suppressRowClickSelection", suppressCellSelection: "suppressCellSelection", sizeColumnsToFit: "sizeColumnsToFit", showCheckBox: "showCheckBox", floatingFilter: "floatingFilter", autoExpand: "autoExpand", rowSelectableConditionField: "rowSelectableConditionField", selectionMode: "selectionMode", pagination: "pagination", selectRow: "selectRow", rowGroupPanelShow: "rowGroupPanelShow", loadOnInit: "loadOnInit", enableRangeSelection: "enableRangeSelection", keyField: "keyField", hasChildField: "hasChildField", rowHeight: "rowHeight", groupHideOpenParents: "groupHideOpenParents", maxConcurrentDatasourceRequests: "maxConcurrentDatasourceRequests", blockLoadDebounceMillis: "blockLoadDebounceMillis", showRefreshButton: "showRefreshButton", autoNavigatePage: "autoNavigatePage", rowClass: "rowClass", rtl: "rtl", searchText: "searchText", filter: "filter", columns: "columns", dataSource: "dataSource" }, outputs: { columnsChange: "columnsChange", cellClick: "cellClick", cellDbClick: "cellDbClick", cellFocuse: "cellFocuse", rowClick: "rowClick", rowDbClick: "rowDbClick", selectionChanged: "selectionChanged", rowSelectionChange: "rowSelectionChange", onRowSelectionChanged: "onRowSelectionChanged" }, queries: [{ propertyName: "searchInput", first: true, predicate: AXToolbarSearchComponent, descendants: true, static: true }, { propertyName: "toolbar", first: true, predicate: AXToolbarComponent, descendants: true, static: true }, { propertyName: "rowTemplate", first: true, predicate: AXDataGridRowTemplateComponent, descendants: true, static: true }, { propertyName: "gridDetailTemplate", first: true, predicate: AXDataGridDetailTemplateComponent, descendants: true, static: true }, { propertyName: "_contentDataSource", first: true, predicate: AXDataSourceComponent, descendants: true, static: true }, { propertyName: "_inlineColumns", predicate: AXGridDataColumn }], ngImport: i0, template: "<div class=\"ax-grid-toolbar\" *ngIf=\"toolbar\">\n <ng-content select=\"ax-toolbar\"></ng-content>\n</div>\n<!-- [enableSorting]=\"true\" [enableColResize]=\"true\" [enableFilter]=\"allowFiltering\" -->\n\n<ag-grid-angular\n *ngIf=\"gridView\"\n class=\"ag-theme-balham\"\n [getRowClass]=\"internalGetRowClass\"\n [suppressCopyRowsToClipboard]=\"true\"\n [enableRangeSelection]=\"enableRangeSelection\"\n [serverSideStoreType]=\"'partial'\"\n [style.height]=\"internalHeight\"\n [columnDefs]=\"columnDefs\"\n [enableRtl]=\"rtl\"\n [pagination]=\"pagination\"\n [rowGroupPanelShow]=\"rowGroupPanelShow\"\n [rowModelType]=\"rowModelType\"\n [detailRowHeight]=\"detailRowHeight\"\n [rowHeight]=\"rowHeight\"\n [paginationAutoPageSize]=\"paginationAutoPageSize\"\n [paginationPageSize]=\"paginationPageSize\"\n [suppressMenuHide]=\"true\"\n [maxConcurrentDatasourceRequests]=\"maxConcurrentDatasourceRequests\"\n [blockLoadDebounceMillis]=\"blockLoadDebounceMillis\"\n [frameworkComponents]=\"frameworkComponents\"\n [isFullWidthCell]=\"isFullWidthCell\"\n [rowSelection]=\"selectionMode\"\n [rowMultiSelectWithClick]=\"rowMultiSelectWithClick\"\n [fullWidthCellRendererFramework]=\"fullWidthCellRendererFramework\"\n [cacheBlockSize]=\"cacheBlockSize\"\n [fullWidthCellRendererParams]=\"fullWidthCellRendererParams\"\n (columnResized)=\"handleColumnResized($event)\"\n (cellClicked)=\"internalGridCellClicked($event)\"\n (cellDoubleClicked)=\"internalGridCellDoubleClicked($event)\"\n (cellFocused)=\"internalGridCellFocused($event)\"\n (rowClicked)=\"internalGridRowClicked($event)\"\n (selectionChanged)=\"internalGridSelectionChanged($event)\"\n (rowSelected)=\"rowSelectionChanged($event)\"\n (rowDoubleClicked)=\"internalGridRowDoubleClicked($event)\"\n (gridReady)=\"internalGridReady($event)\"\n [groupSelectsChildren]=\"groupSelectsChildren\"\n [suppressRowClickSelection]=\"suppressRowClickSelection\"\n [groupSelectsFiltered]=\"true\"\n [suppressCellSelection]=\"suppressCellSelection\"\n [autoGroupColumnDef]=\"autoGroupColumnDef\"\n [suppressAggFuncInHeader]=\"true\"\n [treeData]=\"treeData\"\n [animateRows]=\"true\"\n [isServerSideGroup]=\"isServerSideGroup\"\n [getServerSideGroupKey]=\"getServerSideGroupKey\"\n [masterDetail]=\"masterDetail\"\n [detailCellRendererParams]=\"detailCellRendererParams\"\n [detailCellRenderer]=\"detailCellRenderer\"\n (gridSizeChanged)=\"internalGridSizeChanged($event)\"\n (firstDataRendered)=\"internalGridFirstDataRendered($event)\"\n [localeText]=\"localeText\"\n [groupHideOpenParents]=\"groupHideOpenParents\"\n [allowContextMenuWithControlKey]=\"false\"\n [getMainMenuItems]=\"getMainMenuItems\"\n>\n</ag-grid-angular>\n\n<!-- (displayedColumnsChanged)=\"displayedColumnsChanged($event)\" -->\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "suppressMenuHide", "enableBrowserTooltips", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "maintainColumnOrder", "suppressFieldDotNotation", "deltaColumnMode", "applyColumnDefOrder", "immutableColumns", "suppressSetColumnStateEvents", "suppressColumnStateEvents", "colWidth", "minColWidth", "maxColWidth", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "components", "frameworkComponents", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "stopEditingWhenGridLosesFocus", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "defaultExportParams", "quickFilterText", "cacheQuickFilter", "excludeChildrenWhenTreeDataFiltering", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "chartToolPanelsDef", "loadingCellRenderer", "loadingCellRendererFramework", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererFramework", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentFramework", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentFramework", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDelay", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererFramework", "fullWidthCellRendererParams", "embedFullWidthRows", "deprecatedEmbedFullWidthRows", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererFramework", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "groupRowsSticky", "groupRowInnerRenderer", "groupRowInnerRendererFramework", "groupMultiAutoColumn", "groupUseEntireRow", "groupSuppressAutoColumn", "rememberGroupStateWhenNewData", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "immutableData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "deltaRowDataMode", "batchUpdateWaitMillis", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "serverSideStoreType", "serverSideInfiniteScroll", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSideSortingAlwaysResets", "serverSideFilteringAlwaysResets", "suppressEnterpriseResetOnNewColumns", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellSelection", "suppressCellFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "deltaSort", "treeDataDisplayType", "angularCompileRows", "angularCompileFilters", "functionsPassive", "enableGroupEdit", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "suppressKeyboardEvent", "localeTextFunc", "getLocaleText", "getDocument", "paginationNumberFormatter", "groupRowAggNodes", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "defaultGroupOrderComparator", "processSecondaryColDef", "processSecondaryColGroupDef", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "defaultGroupSortComparator", "getChildCount", "getServerSideGroupLevelParams", "getServerSideStoreParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowNodeId", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSort", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthCell", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "filterOpened", "filterChanged", "filterModified", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "cellKeyPress", "gridReady", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pinnedRowDataChanged", "rowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }], encapsulation: i0.ViewEncapsulation.None });
|
668
704
|
}
|
669
705
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXDataGridComponent, decorators: [{
|
670
706
|
type: Component,
|
@@ -717,6 +753,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
717
753
|
type: Input
|
718
754
|
}], showRefreshButton: [{
|
719
755
|
type: Input
|
756
|
+
}], autoNavigatePage: [{
|
757
|
+
type: Input
|
720
758
|
}], rowClass: [{
|
721
759
|
type: Input
|
722
760
|
}], rtl: [{
|
@@ -766,4 +804,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
766
804
|
}], onRowSelectionChanged: [{
|
767
805
|
type: Output
|
768
806
|
}] } });
|
769
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWdyaWQvc3JjL2xpYi9kYXRhLWdyaWQvZGF0YWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWdyaWQvc3JjL2xpYi9kYXRhLWdyaWQvZGF0YWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQVd2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBUXBELE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixZQUFZLEdBQ2IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7OztBQUVwRixjQUFjLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtJQUNqRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztB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QUlOLCtCQUErQjtzQkFEOUIsS0FBSztnQkFJTix1QkFBdUI7c0JBRHRCLEtBQUs7Z0JBSU4saUJBQWlCO3NCQURoQixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFNTixHQUFHO3NCQURGLEtBQUs7Z0JBS0ssVUFBVTtzQkFEcEIsS0FBSztnQkFnQkssTUFBTTtzQkFEaEIsS0FBSztnQkFrQkUsY0FBYztzQkFEckIsZUFBZTt1QkFBQyxnQkFBZ0I7Z0JBSWpDLGFBQWE7c0JBRFosTUFBTTtnQkFNSSxPQUFPO3NCQURqQixLQUFLO2dCQTBCTixXQUFXO3NCQURWLFlBQVk7dUJBQUMsd0JBQXdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUl4RCxPQUFPO3NCQUROLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlsRCxXQUFXO3NCQURWLFlBQVk7dUJBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUk5RCxrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsaUNBQWlDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUl6RCxrQkFBa0I7c0JBRHpCLFlBQVk7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU0xQyxVQUFVO3NCQURwQixLQUFLO2dCQVVOLFNBQVM7c0JBRFIsTUFBTTtnQkFLUCxXQUFXO3NCQURWLE1BQU07Z0JBS1AsVUFBVTtzQkFEVCxNQUFNO2dCQUtQLFFBQVE7c0JBRFAsTUFBTTtnQkFLUCxVQUFVO3NCQURULE1BQU07Z0JBS1AsZ0JBQWdCO3NCQURmLE1BQU07Z0JBS1Asa0JBQWtCO3NCQURqQixNQUFNO2dCQUtQLHFCQUFxQjtzQkFEcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFYRGF0YVNvdXJjZUNvbXBvbmVudCxcbiAgQVhEYXRhU291cmNlUmVhZFBhcmFtcyxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDZWxsQ2xpY2tlZEV2ZW50LFxuICBDZWxsRXZlbnQsXG4gIEZpcnN0RGF0YVJlbmRlcmVkRXZlbnQsXG4gIEdyaWRBcGksXG4gIEdyaWRPcHRpb25zLFxuICBHcmlkU2l6ZUNoYW5nZWRFdmVudCxcbiAgUm93Q2xpY2tlZEV2ZW50LFxuICBSb3dFdmVudCxcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgQVhHcmlkRGF0YUNvbHVtbiB9IGZyb20gJy4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcblxuaW1wb3J0IHsgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpY2Vuc2VNYW5hZ2VyIH0gZnJvbSAnYWctZ3JpZC1lbnRlcnByaXNlJztcbmltcG9ydCB7XG4gIEFYR3JpZENlbGxFdmVudCxcbiAgQVhHcmlkUm93RXZlbnQsXG4gIEFYR3JpZFJvd1BhcmFtcyxcbiAgQVhHcmlkUm93U2VsZWN0aW9uRXZlbnQsXG59IGZyb20gJy4vZGF0YWdyaWQuZXZlbnRzJztcblxuaW1wb3J0IHtcbiAgQVhEYXRhRXZlbnQsXG4gIEFYVG9vbGJhckNvbXBvbmVudCxcbiAgQVhUb29sYmFyU2VhcmNoQ29tcG9uZW50LFxuICBBWFZhbHVlRXZlbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWENvbmZpZywgQVhUcmFuc2xhdG9yIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcbmltcG9ydCB7IEFYRGF0ZVBpY2tlckZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1ucy9kYXRlLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhEYXRhR3JpZERldGFpbFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi90ZW1wbGF0ZXMvZGV0YWlsLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWERhdGFHcmlkUm93VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL3RlbXBsYXRlcy9yb3ctdGVtcGxhdGUuY29tcG9uZW50JztcblxuTGljZW5zZU1hbmFnZXIucHJvdG90eXBlLmlzRGlzcGxheVdhdGVybWFyayA9ICgpID0+IHtcbiAgcmV0dXJuIGZhbHNlO1xufTtcbkxpY2Vuc2VNYW5hZ2VyLnByb3RvdHlwZS52YWxpZGF0ZUxpY2Vuc2UgPSBmdW5jdGlvbiAoKSB7XG4gIC8vY29uc29sZS5pbmZvKCdDcmFja2VkIGJ5IEFyYXNoIE9zaG5vdWRpIScpO1xufTtcblxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRDb2x1bW5zQ2hhbmdlRXZlbnQgZXh0ZW5kcyBBWFZhbHVlRXZlbnQ8XG4gIEFYR3JpZERhdGFDb2x1bW5bXVxuPiB7XG4gIGRlY2xhcmUgY29tcG9uZW50OiBBWERhdGFHcmlkQ29tcG9uZW50O1xufVxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRDZWxsRXZlbnQgZXh0ZW5kcyBBWERhdGFFdmVudDxBWEdyaWRDZWxsRXZlbnQ+IHtcbiAgZGVjbGFyZSBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XG59XG5leHBvcnQgY2xhc3MgQVhEYWFncmlkUm93Q2xpY2tFdmVudCBleHRlbmRzIEFYRGF0YUV2ZW50PEFYR3JpZFJvd0V2ZW50PiB7XG4gIGRlY2xhcmUgY29tcG9uZW50OiBBWERhdGFHcmlkQ29tcG9uZW50O1xufVxuXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8QVhHcmlkUm93U2VsZWN0aW9uRXZlbnQ+IHtcbiAgZGVjbGFyZSBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBWERhdGFHcmlkUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQgZXh0ZW5kcyBBWERhdGFFdmVudDxhbnk+IHtcbiAgZGVjbGFyZSBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XG4gIGRlY2xhcmUgc2VsZWN0ZWQ6IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWRhdGEtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRDb21wb25lbnQge1xuICBwcml2YXRlIGdyaWRBcGk7XG4gIHByaXZhdGUgZGF0YVNvdXJjZVN1Y2Nlc3NDYWxsYmFjaztcbiAgbG9jYWxlVGV4dDogYW55O1xuXG4gIGdyaWRPcHRpb25zOiBHcmlkT3B0aW9ucztcbiAgY29sdW1uRGVmczogYW55W10gPSBbXTtcbiAgcm93TW9kZWxUeXBlID0gJ2NsaWVudFNpZGUnO1xuICBmdWxsV2lkdGhDZWxsUmVuZGVyZXJGcmFtZXdvcms6IGFueTtcbiAgZnVsbFdpZHRoQ2VsbFJlbmRlcmVyUGFyYW1zOiBhbnk7XG4gIGZyYW1ld29ya0NvbXBvbmVudHM6IGFueSA9IHt9O1xuICBpc0Z1bGxXaWR0aENlbGw6IEZ1bmN0aW9uO1xuICBpbnRlcm5hbEhlaWdodCA9ICcxMDAlJztcbiAgZGV0YWlsQ2VsbFJlbmRlcmVyOiBhbnk7XG4gIGRldGFpbENlbGxSZW5kZXJlclBhcmFtczogYW55O1xuICBkZXRhaWxSb3dIZWlnaHQ6IG51bWJlcjtcbiAgbWFzdGVyRGV0YWlsID0gZmFsc2U7XG4gIHRyZWVEYXRhID0gZmFsc2U7XG4gIGVuYWJlbFNlbGVjdCA9IGZhbHNlO1xuICBncmlkVmlldyA9IGZhbHNlO1xuICBncm91cFNlbGVjdHNDaGlsZHJlbiA9IGZhbHNlO1xuICBvbGRTZWxlY3Rpb25Ob2RlczogYW55W10gPSBbXTtcbiAgYXV0b0dyb3VwQ29sdW1uRGVmOiBhbnkgPSB7fTtcblxuICBASW5wdXQoKVxuICBwYWdpbmF0aW9uQXV0b1BhZ2VTaXplID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcGFnaW5hdGlvblBhZ2VTaXplID0gMjA7XG5cbiAgY2FjaGVCbG9ja1NpemUgPSB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgcmVtb3RlT3BlcmF0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHJvd011bHRpU2VsZWN0V2l0aENsaWNrID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb24gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3VwcHJlc3NDZWxsU2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNpemVDb2x1bW5zVG9GaXQgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dDaGVja0JveCA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgZmxvYXRpbmdGaWx0ZXIgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBhdXRvRXhwYW5kID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcm93U2VsZWN0YWJsZUNvbmRpdGlvbkZpZWxkOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgc2VsZWN0aW9uTW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnID0gJ3NpbmdsZSc7XG5cbiAgQElucHV0KClcbiAgcGFnaW5hdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2VsZWN0Um93OiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIHJvd0dyb3VwUGFuZWxTaG93OiAnYWx3YXlzJyB8ICduZXZlcicgPSAnbmV2ZXInO1xuXG4gIEBJbnB1dCgpXG4gIGxvYWRPbkluaXQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGVuYWJsZVJhbmdlU2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAga2V5RmllbGQ6IHN0cmluZyA9ICdudWxsJztcblxuICBASW5wdXQoKVxuICBoYXNDaGlsZEZpZWxkOiBzdHJpbmcgPSAnbnVsbCc7XG5cbiAgQElucHV0KClcbiAgcm93SGVpZ2h0ID0gMjg7XG5cbiAgQElucHV0KClcbiAgZ3JvdXBIaWRlT3BlblBhcmVudHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBtYXhDb25jdXJyZW50RGF0YXNvdXJjZVJlcXVlc3RzOiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgYmxvY2tMb2FkRGVib3VuY2VNaWxsaXM6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBzaG93UmVmcmVzaEJ1dHRvbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcm93Q2xhc3M/OiAoXG4gICAgcGFyYW1zOiBBWEdyaWRSb3dQYXJhbXNcbiAgKSA9PiAoc3RyaW5nIHwgc3RyaW5nW10pIHwgKHN0cmluZyB8IHN0cmluZ1tdKTtcblxuICBASW5wdXQoKVxuICBydGw6IGJvb2xlYW4gPSBBWENvbmZpZy5nZXQoJ2xheW91dC5ydGwnKTtcblxuICBwcml2YXRlIF9zZWFyY2hUZXh0OiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgc2VhcmNoVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hUZXh0O1xuICB9XG4gIHB1YmxpYyBzZXQgc2VhcmNoVGV4dCh2OiBzdHJpbmcpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5fc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5fc2VhcmNoVGV4dCA9IHY7XG4gICAgICBpZiAodGhpcy5ncmlkQXBpKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB0aGlzLmdyaWRBcGkuc2V0UXVpY2tGaWx0ZXIodGhpcy5zZWFyY2hUZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maWx0ZXI6IGFueVtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGZpbHRlcigpOiBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgfVxuICBwdWJsaWMgc2V0IGZpbHRlcih2OiBhbnlbXSkge1xuICAgIGlmICh2ICE9PSB0aGlzLl9maWx0ZXIpIHtcbiAgICAgIHRoaXMuX2ZpbHRlciA9IHY7XG4gICAgICB0aGlzLl9maWx0ZXIuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgICBjb25zdCBmYyA9IHRoaXMuZ3JpZEFwaS5nZXRGaWx0ZXJJbnN0YW5jZShmLmZpZWxkKTtcbiAgICAgICAgaWYgKGZjKSB7XG4gICAgICAgICAgY29uc3QgZmYgPSBmYy5nZXRGcmFtZXdvcmtDb21wb25lbnRJbnN0YW5jZSgpO1xuICAgICAgICAgIGZmLnNldE1vZGVsKGYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKEFYR3JpZERhdGFDb2x1bW4pXG4gIHByaXZhdGUgX2lubGluZUNvbHVtbnM6IFF1ZXJ5TGlzdDxBWEdyaWREYXRhQ29sdW1uPjtcblxuICBAT3V0cHV0KClcbiAgY29sdW1uc0NoYW5nZTogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDb2x1bW5zQ2hhbmdlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDb2x1bW5zQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogQVhHcmlkRGF0YUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgY29sdW1ucygpOiBBWEdyaWREYXRhQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9pbmxpbmVDb2x1bW5zXG4gICAgICA/IFsuLi50aGlzLl9jb2x1bW5zLCAuLi50aGlzLl9pbmxpbmVDb2x1bW5zLnRvQXJyYXkoKV1cbiAgICAgIDogdGhpcy5fY29sdW1ucztcbiAgfVxuXG4gIHB1YmxpYyBzZXQgY29sdW1ucyh2YWw6IEFYR3JpZERhdGFDb2x1bW5bXSkge1xuICAgIGlmICh2YWwgJiYgdmFsLmxlbmd0aCkge1xuICAgICAgbGV0IG9sZCA9IHRoaXMuX2NvbHVtbnM7XG4gICAgICB0aGlzLl9jb2x1bW5zID0gdmFsO1xuICAgICAgdGhpcy5jb2x1bW5zQ2hhbmdlLmVtaXQoe1xuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIHZhbHVlOiB2YWwsXG4gICAgICAgIG9sZFZhbHVlOiBvbGQsXG4gICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGVmYXVsdENvbERlZjogYW55ID0ge1xuICAgIGZpbHRlcjogdHJ1ZSxcbiAgICBmbG9hdGluZ0ZpbHRlcjogdHJ1ZSxcbiAgfTtcblxuICBAQ29udGVudENoaWxkKEFYVG9vbGJhclNlYXJjaENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgc2VhcmNoSW5wdXQ6IEFYVG9vbGJhclNlYXJjaENvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKEFYVG9vbGJhckNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgdG9vbGJhcjogQVhUb29sYmFyQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGQoQVhEYXRhR3JpZFJvd1RlbXBsYXRlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICByb3dUZW1wbGF0ZTogQVhEYXRhR3JpZFJvd1RlbXBsYXRlQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGQoQVhEYXRhR3JpZERldGFpbFRlbXBsYXRlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBncmlkRGV0YWlsVGVtcGxhdGU6IEFYRGF0YUdyaWREZXRhaWxUZW1wbGF0ZUNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YVNvdXJjZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcHJpdmF0ZSBfY29udGVudERhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcblxuICBwcml2YXRlIF9kYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UgPyB0aGlzLl9kYXRhU291cmNlIDogdGhpcy5fY29udGVudERhdGFTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRhdGFTb3VyY2UodjogQVhEYXRhU291cmNlQ29tcG9uZW50KSB7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IHY7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgY2VsbENsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgY2VsbERiQ2xpY2s6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ2VsbEV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ2VsbEV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjZWxsRm9jdXNlOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxBWERhYWdyaWRSb3dDbGlja0V2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWERhYWdyaWRSb3dDbGlja0V2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICByb3dEYkNsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYWFncmlkUm93Q2xpY2tFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYWFncmlkUm93Q2xpY2tFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRTZWxlY3Rpb25DaGFuZ2VFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuXG4gIEBPdXRwdXQoKVxuICByb3dTZWxlY3Rpb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgb25Sb3dTZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkUm93U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLmxvY2FsZVRleHQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRhR3JpZCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjSGVpZ2h0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRvb2xiYXIpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxIZWlnaHQgPSBgY2FsYygxMDAlIC0gJHs0MH1weClgO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmludGVybmFsSGVpZ2h0ID0gJzEwMCUnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGludGVuYWxHcmlkRGF0YVNvdXJjZSgpIHtcbiAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4ge1xuICAgICAgcm93Q291bnQ6IG51bGwsXG4gICAgICBnZXRSb3dzOiAocGFyYW1zKSA9PiB7XG4gICAgICAgIHRoYXQuZGF0YVNvdXJjZVN1Y2Nlc3NDYWxsYmFjayA9IHBhcmFtcy5zdWNjZXNzQ2FsbGJhY2s7XG5cbiAgICAgICAgY29uc3QgbG9hZFBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xuXG4gICAgICAgIGxvYWRQYXJhbXMuc2VhcmNoVGV4dCA9IHRoYXQuc2VhcmNoVGV4dDtcblxuICAgICAgICBsb2FkUGFyYW1zLnNraXAgPSBwYXJhbXMucmVxdWVzdC5zdGFydFJvdztcblxuICAgICAgICBsb2FkUGFyYW1zLnRha2UgPSBwYXJhbXMucmVxdWVzdC5lbmRSb3cgLSBwYXJhbXMucmVxdWVzdC5zdGFydFJvdztcblxuICAgICAgICBsb2FkUGFyYW1zLnNvcnQgPSBwYXJhbXMucmVxdWVzdC5zb3J0TW9kZWwubWFwKChjKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpZWxkOiBjLmNvbElkLFxuICAgICAgICAgICAgZGlyOiBjLnNvcnQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbG9hZFBhcmFtcy5ncm91cCA9IHtcbiAgICAgICAgICBmaWVsZHM6IHBhcmFtcy5yZXF1ZXN0LnJvd0dyb3VwQ29scy5tYXAoKHIpID0+IHIuZmllbGQpLFxuICAgICAgICAgIGtleXM6IHBhcmFtcy5yZXF1ZXN0Lmdyb3VwS2V5cyxcbiAgICAgICAgICBwYXJlbnREYXRhOiBwYXJhbXMucGFyZW50Tm9kZS5kYXRhLFxuICAgICAgICB9O1xuXG4gICAgICAgIGxvYWRQYXJhbXMuZmlsdGVyID0gcGFyYW1zLnJlcXVlc3QuZmlsdGVyTW9kZWw7XG5cbiAgICAgICAgdGhhdC5kYXRhU291cmNlLmZldGNoKGxvYWRQYXJhbXMpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIGdldE1haW5NZW51SXRlbXMoZSkge1xuICAgIHJldHVybiBbJ3BpblN1Yk1lbnUnLCAnc2VwYXJhdG9yJ107XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmdyaWRBcGkuZGVzdHJveSgpO1xuICB9XG5cbiAgaXNTZXJ2ZXJTaWRlR3JvdXAgPSAoZSkgPT4ge1xuICAgIHJldHVybiBlW3RoaXMuaGFzQ2hpbGRGaWVsZF07XG4gIH07XG5cbiAgZ2V0Q29sdW1uRGVmcyA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5ncmlkQXBpLmdldENvbHVtbkRlZnMoKTtcbiAgfTtcblxuICBnZXRDdXJyZW50UGFnZU51bWJlciA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudDogdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpICsgMSxcbiAgICAgIHRvdGFsOiB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFRvdGFsUGFnZXMoKSxcbiAgICB9O1xuICB9O1xuXG4gIHBhZ2luYXRpb25Hb1RvUGFnZShudW1iZXIpIHtcbiAgICB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdvVG9QYWdlKG51bWJlciAtIDEpO1xuICB9XG5cbiAgZ2V0U2VydmVyU2lkZUdyb3VwS2V5ID0gKGUpID0+IHtcbiAgICByZXR1cm4gZVt0aGlzLmtleUZpZWxkXTtcbiAgfTtcbiAgaW50ZXJuYWxHcmlkUmVhZHkoZ3JpZE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgIXRoaXMucGFnaW5hdGlvbkF1dG9QYWdlU2l6ZSkge1xuICAgICAgdGhpcy5oYW5kbGVQYWdlU2l6ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNhY2hlQmxvY2tTaXplID1cbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUgPiAyMCA/IHRoaXMucGFnaW5hdGlvblBhZ2VTaXplIDogMTAwO1xuICAgIH1cblxuICAgIHRoaXMuZ3JpZEFwaSA9IGdyaWRPcHRpb25zLmFwaTtcblxuICAgIHRoaXMubWFwQ29sdW1ucygpO1xuICAgIHRoaXMuY2FsY0hlaWdodCgpO1xuXG4gICAgaWYgKCF0aGlzLmxvYWRPbkluaXQpIHtcbiAgICAgIHRoaXMubG9hZE9uSW5pdCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICB0aGlzLmdyaWRBcGkuc2V0U2VydmVyU2lkZURhdGFzb3VyY2UodGhpcy5pbnRlbmFsR3JpZERhdGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dSZWZyZXNoQnV0dG9uKSB7XG4gICAgICB0aGlzLm1ha2VSZWZyZXNoQnRuKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xuICAgIGlmICh0aGlzLnJvd1RlbXBsYXRlKSB7XG4gICAgICB0aGlzLmZ1bGxXaWR0aENlbGxSZW5kZXJlckZyYW1ld29yayA9IHRoaXMucm93VGVtcGxhdGUucmVuZGVyZXI7XG4gICAgICB0aGlzLmZ1bGxXaWR0aENlbGxSZW5kZXJlclBhcmFtcyA9IHRoaXMucm93VGVtcGxhdGUucGFyYW1zO1xuICAgIH1cbiAgICB0aGlzLmZyYW1ld29ya0NvbXBvbmVudHMuYWdEYXRlSW5wdXQgPSBBWERhdGVQaWNrZXJGaWx0ZXJDb21wb25lbnQ7XG5cbiAgICBpZiAodGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUpIHtcbiAgICAgIHRoaXMubWFzdGVyRGV0YWlsID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zID0gdGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUucGFyYW1zO1xuICAgICAgdGhpcy5kZXRhaWxDZWxsUmVuZGVyZXIgPSAnZGV0YWlsUmVuZGVyZXJGcmFtZXdvcmsnO1xuICAgICAgdGhpcy5mcmFtZXdvcmtDb21wb25lbnRzLmRldGFpbFJlbmRlcmVyRnJhbWV3b3JrID1cbiAgICAgICAgdGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUucmVuZGVyZXI7XG5cbiAgICAgIHRoaXMuZGV0YWlsUm93SGVpZ2h0ID0gdGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUuaGVpZ2h0O1xuICAgIH1cbiAgICB0aGlzLmlzRnVsbFdpZHRoQ2VsbCA9ICgpID0+IHtcbiAgICAgIHJldHVybiB0aGF0LnJvd1RlbXBsYXRlICE9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICB0aGlzLmdyb3VwU2VsZWN0c0NoaWxkcmVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmtleUZpZWxkICE9PSAnbnVsbCcgJiYgdGhpcy5oYXNDaGlsZEZpZWxkICE9PSAnbnVsbCcpIHtcbiAgICAgIHRoaXMucm93R3JvdXBQYW5lbFNob3cgPSAnbmV2ZXInO1xuICAgICAgdGhpcy50cmVlRGF0YSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xuICAgICAgdGhpcy5yb3dNb2RlbFR5cGUgPSAnc2VydmVyU2lkZSc7XG4gICAgfVxuICAgIC8vXG4gICAgaWYgKHRoaXMucnRsID09IG51bGwpIHtcbiAgICAgIHRoaXMucnRsID1cbiAgICAgICAgd2luZG93XG4gICAgICAgICAgLmdldENvbXB1dGVkU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCwgbnVsbClcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnZGlyZWN0aW9uJykgPT09ICdydGwnO1xuICAgIH1cbiAgICAvL1xuICB9XG5cbiAgZ3JpZFNlbGVjdFJvdygpIHtcbiAgICBpZiAodGhpcy5ncmlkQXBpKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2VsZWN0Um93ICYmXG4gICAgICAgIHRoaXMuc2VsZWN0Um93Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgdGhpcy5ncmlkQXBpICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0Um93WzBdICE9ICdvYmplY3QnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLmZvckVhY2hOb2RlKChub2RlKSA9PiB7XG4gICAgICAgICAgaWYgKG5vZGUuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFJvdy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAgICAgICBpZiAobm9kZS5kYXRhW3RoaXMua2V5RmllbGRdID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZChzZWxlY3QpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLmZvckVhY2hOb2RlKChub2RlKSA9PiB7XG4gICAgICAgICAgaWYgKG5vZGUuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RSb3cubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93LmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5yb3dJbmRleCAhPSB1bmRlZmluZWQgJiYgaXRlbS5yb3dMZXZlbCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT09IGl0ZW0uZGF0YVt0aGlzLmtleUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMua2V5RmllbGQgIT09ICdudWxsJyAmJlxuICAgICAgICAgICAgICAgICAgICBub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT09IGl0ZW1bdGhpcy5rZXlGaWVsZF1cbiAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3RhYmxlQ29uZGl0aW9uRmllbGQpIHtcbiAgICAgICAgICAgICAgbm9kZS5zZXRSb3dTZWxlY3RhYmxlKFxuICAgICAgICAgICAgICAgIG5vZGUuZGF0YVt0aGlzLnJvd1NlbGVjdGFibGVDb25kaXRpb25GaWVsZF1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuc2V0U2VsZWN0ZWQoc2VsZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYnVpbGRHcmlkKCkge1xuICAgIHRoaXMubWFwQ29sdW1ucygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2l6ZUNvbHVtbnNUb0ZpdCkge1xuICAgICAgICB0aGlzLmdyaWRBcGkuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xuICAgICAgfVxuICAgIH0sIDEwKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50cmVlRGF0YSA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5jb2x1bW5EZWZzID0gdGhpcy5jb2x1bW5zLm1hcCgoYykgPT4gYy5yZW5kZXIoKSk7XG5cbiAgICAgIGNvbnN0IGdyb3VwQ29sdW1uID0gdGhpcy5jb2x1bW5EZWZzLmZpbmQoXG4gICAgICAgIChjKSA9PiBjLnJvd0dyb3VwSW5kZXggPT0gJzAnICYmIGMuZmllbGQgIT09ICcnXG4gICAgICApO1xuXG4gICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgICAgaGVhZGVyTmFtZTogZ3JvdXBDb2x1bW4uaGVhZGVyTmFtZSxcbiAgICAgICAgd2lkdGg6IGdyb3VwQ29sdW1uLndpZHRoLFxuICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHsgY2hlY2tib3g6IHRoaXMuc2hvd0NoZWNrQm94IH0sXG4gICAgICAgIGZpZWxkOiBncm91cENvbHVtbi5maWVsZCxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY29sdW1uRGVmcy5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgICAgaWYgKGVsbS5yb3dHcm91cEluZGV4ID4gLTEpIHtcbiAgICAgICAgICBlbG0uaGlkZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmdyaWRWaWV3ID0gdHJ1ZTtcblxuICAgIHRoaXMuZW5hYmVsU2VsZWN0ID0gdHJ1ZTtcbiAgICB0aGlzLmRhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQuc3Vic2NyaWJlKChfZGF0YSkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gX2RhdGEuZGF0YS5yZXN1bHQ7XG4gICAgICB0aGlzLmhpZGVMb2FkaW5nKCk7XG4gICAgICBsZXQgaXRlbXM6IGFueVtdO1xuICAgICAgbGV0IHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgaXRlbXMgPSByZXN1bHQ7XG4gICAgICAgIHRvdGFsQ291bnQgPSByZXN1bHQubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbXMgPSByZXN1bHQuaXRlbXM7XG4gICAgICAgIHRvdGFsQ291bnQgPSByZXN1bHQudG90YWxDb3VudDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VTdWNjZXNzQ2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWRPbkluaXQpIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VTdWNjZXNzQ2FsbGJhY2soW10sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZVN1Y2Nlc3NDYWxsYmFjayhpdGVtcywgdG90YWxDb3VudCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkT25Jbml0ICYmIHRoaXMuZ3JpZEFwaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5ncmlkQXBpLnNldFJvd0RhdGEoW10pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZEFwaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5ncmlkQXBpLnNldFJvd0RhdGEoaXRlbXMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ3JpZFNlbGVjdFJvdygpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRhU291cmNlLm9uRmV0Y2hTdGFydC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5zaG93TG9hZGluZygpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXQpIHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQub25WYWx1ZUNoYW5nZWQuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IGMudmFsdWU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbWFwQ29sdW1ucygpIHtcbiAgICB0aGlzLmNvbHVtbkRlZnMgPSB0aGlzLmNvbHVtbnMubWFwKChjKSA9PiBjLnJlbmRlcigpKTtcbiAgICBpZiAodGhpcy5ncmlkRGV0YWlsVGVtcGxhdGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzWzBdLmNoZWNrYm94U2VsZWN0aW9uID09PSB0cnVlICYmXG4gICAgICAgIHRoaXMuY29sdW1uRGVmc1swXS5maWVsZCA9PT0gJydcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNvbHVtbkRlZnNbMV0uY2VsbFJlbmRlcmVyID0gJ2FnR3JvdXBDZWxsUmVuZGVyZXInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzWzBdLmNlbGxSZW5kZXJlciA9ICdhZ0dyb3VwQ2VsbFJlbmRlcmVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNDaGlsZEZpZWxkID09PSAnbnVsbCcpIHtcbiAgICAgIGNvbnN0IGdyb3VwQ29sdW1uID0gdGhpcy5jb2x1bW5EZWZzLmZpbmQoXG4gICAgICAgIChjKSA9PiBjLnJvd0dyb3VwSW5kZXggPT09IHVuZGVmaW5lZCAmJiBjLmZpZWxkICE9PSAnJ1xuICAgICAgKTtcbiAgICAgIGlmIChncm91cENvbHVtbiAmJiB0aGlzLmdyb3VwSGlkZU9wZW5QYXJlbnRzID09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuYXV0b0dyb3VwQ29sdW1uRGVmID0ge1xuICAgICAgICAgIGhlYWRlck5hbWU6IGdyb3VwQ29sdW1uLmhlYWRlck5hbWUsXG4gICAgICAgICAgd2lkdGg6IGdyb3VwQ29sdW1uLndpZHRoLFxuICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczogeyBjaGVja2JveDogdGhpcy5zaG93Q2hlY2tCb3ggfSxcbiAgICAgICAgICBmaWVsZDogZ3JvdXBDb2x1bW4uZmllbGQsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5EZWZzLmZvckVhY2goKGVsbSkgPT4ge1xuICAgICAgaWYgKGVsbS5yb3dHcm91cEluZGV4ID4gLTEpIHtcbiAgICAgICAgZWxtLmhpZGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQoZSkge1xuICAgIGlmICh0aGlzLmhhc0NoaWxkRmllbGQgPT09ICdudWxsJykge1xuICAgICAgY29uc3QgZWUgPSBlLmNvbHVtbkFwaS5nZXRBbGxEaXNwbGF5ZWRDb2x1bW5Hcm91cHMoKTtcbiAgICAgIGNvbnN0IGVlZSA9IGVlLmZpbmQoXG4gICAgICAgIChjKSA9PiBjLmNvbElkICE9PSAnYWctR3JpZC1BdXRvQ29sdW1uJyAmJiBjLmNvbElkICE9PSAnMCdcbiAgICAgICk7XG4gICAgICBpZiAoZWVlICYmIGVlZS5jb2xJZCkge1xuICAgICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgICAgICBoZWFkZXJOYW1lOiBlZWUuY29sRGVmLmhlYWRlck5hbWUsXG4gICAgICAgICAgd2lkdGg6IGVlZS5jb2xEZWYud2lkdGgsXG4gICAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7IGNoZWNrYm94OiB0aGlzLnNob3dDaGVja0JveCB9LFxuICAgICAgICAgIGZpZWxkOiBlZWUuY29sRGVmLmZpZWxkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlZnJlc2gocm91dGU6IGFueVtdID0gW10pIHtcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy5ncmlkQXBpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vICB0aGlzLmdyaWRBcGkucHVyZ2VTZXJ2ZXJTaWRlQ2FjaGUocm91dGUpO1xuICAgICAgdGhpcy5ncmlkQXBpLnNldFNlcnZlclNpZGVEYXRhc291cmNlKHRoaXMuaW50ZW5hbEdyaWREYXRhU291cmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmZldGNoKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGludGVybmFsR3JpZENlbGxDbGlja2VkKGU6IENlbGxDbGlja2VkRXZlbnQpIHtcbiAgICB0aGlzLmNlbGxDbGljay5lbWl0KHtcbiAgICAgIGRhdGE6IHRoaXMubWFwQ2VsbEV2ZW50KGUpLFxuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgfSk7XG4gIH1cblxuICBpbnRlcm5hbEdyaWRDZWxsRG91YmxlQ2xpY2tlZChlOiBDZWxsQ2xpY2tlZEV2ZW50KSB7XG4gICAgdGhpcy5jZWxsRGJDbGljay5lbWl0KHtcbiAgICAgIGRhdGE6IHRoaXMubWFwQ2VsbEV2ZW50KGUpLFxuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgfSk7XG4gIH1cblxuICBpbnRlcm5hbEdyaWRDZWxsRm9jdXNlZChlOiBDZWxsQ2xpY2tlZEV2ZW50KSB7XG4gICAgdGhpcy5jZWxsRm9jdXNlLmVtaXQoe1xuICAgICAgZGF0YTogdGhpcy5tYXBDZWxsRXZlbnQoZSksXG4gICAgICBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIGludGVybmFsR3JpZFJvd0NsaWNrZWQoZTogUm93Q2xpY2tlZEV2ZW50KSB7XG4gICAgaWYgKCFlLm5vZGUuZ3JvdXApIHtcbiAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7XG4gICAgICAgIGRhdGE6IHRoaXMubWFwUm93RXZlbnQoZSksXG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBpbnRlcm5hbEdyaWRSb3dEb3VibGVDbGlja2VkKGU6IENlbGxDbGlja2VkRXZlbnQpIHtcbiAgICBpZiAoIWUubm9kZS5ncm91cCkge1xuICAgICAgdGhpcy5yb3dEYkNsaWNrLmVtaXQoe1xuICAgICAgICBkYXRhOiB0aGlzLm1hcFJvd0V2ZW50KGUpLFxuICAgICAgICBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGlmZmVyZW5jZU9mMkFycmF5cyhhcnJheTE6IGFueSwgYXJyYXkyOiBhbnkpIHtcbiAgICBjb25zdCB0ZW1wID0gW107XG4gICAgZm9yIChjb25zdCBpIGluIGFycmF5MSkge1xuICAgICAgaWYgKGFycmF5Mi5pbmRleE9mKGFycmF5MVtpXSkgPT09IC0xKSB7XG4gICAgICAgIHRlbXAucHVzaChhcnJheTFbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGkgaW4gYXJyYXkyKSB7XG4gICAgICBpZiAoYXJyYXkxLmluZGV4T2YoYXJyYXkyW2ldKSA9PT0gLTEpIHtcbiAgICAgICAgdGVtcC5wdXNoKGFycmF5MltpXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgfVxuXG4gIHJvd1NlbGVjdGlvbkNoYW5nZWQoZSkge1xuICAgIGlmIChlLm5vZGUuc2VsZWN0ZWQgPT0gdHJ1ZSkge1xuICAgICAgdGhpcy5zZWxlY3RSb3cgPSB0aGlzLnNlbGVjdFJvdy5maWx0ZXIoXG4gICAgICAgIChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9IGUuZGF0YVt0aGlzLmtleUZpZWxkXVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0Um93LnB1c2goZS5kYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RSb3cgPSB0aGlzLnNlbGVjdFJvdy5maWx0ZXIoXG4gICAgICAgIChjKSA9PiBjW3RoaXMua2V5RmllbGRdICE9IGUuZGF0YVt0aGlzLmtleUZpZWxkXVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5yb3dTZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBkYXRhOiBlLFxuICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgfSk7XG4gIH1cblxuICBpbnRlcm5hbEdyaWRTZWxlY3Rpb25DaGFuZ2VkKGUpIHtcbiAgICBjb25zdCBhcmdzOiBBWEdyaWRSb3dTZWxlY3Rpb25FdmVudCA9IHsgaXRlbXM6IFtdIH07XG4gICAgY29uc3Qgb2xkTm9kZXMgPSB0aGlzLm9sZFNlbGVjdGlvbk5vZGVzO1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ncmlkQXBpLmdldFNlbGVjdGVkTm9kZXMoKTtcblxuICAgIGlmICh0aGlzLmF1dG9FeHBhbmQpIHtcbiAgICAgIGNvbnN0IHVuc2VsZWN0ZWROb2RlcyA9IG9sZE5vZGVzLmZpbHRlcihcbiAgICAgICAgKG9sZE5vZGUpID0+ICFub2Rlcy5zb21lKChuZXdOb2RlKSA9PiBuZXdOb2RlID09PSBvbGROb2RlKVxuICAgICAgKTtcbiAgICAgIHVuc2VsZWN0ZWROb2Rlcy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICBlbC5zZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBub2Rlcy5mb3JFYWNoKChpKSA9PiB7XG4gICAgICBpZiAodGhpcy5hdXRvRXhwYW5kKSB7XG4gICAgICAgIGkuc2V0RXhwYW5kZWQodHJ1ZSk7XG4gICAgICB9XG4gICAgICBhcmdzLml0ZW1zLnB1c2goe1xuICAgICAgICByb3dMZXZlbDogaS5sZXZlbCxcbiAgICAgICAgcm93SW5kZXg6IGkucm93SW5kZXgsXG4gICAgICAgIGRhdGE6IGkuZGF0YSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHtcbiAgICAgIGRhdGE6IGFyZ3MsXG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCxcbiAgICB9KTtcbiAgICBsZXQgYWN0aW9uID0gbm9kZXMubGVuZ3RoID4gb2xkTm9kZXMubGVuZ3RoID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmRpZmZlcmVuY2VPZjJBcnJheXMobm9kZXMsIG9sZE5vZGVzKTtcbiAgICB0aGlzLm9uUm93U2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIHNlbGVjdGVkOiBhY3Rpb24sXG4gICAgICBkYXRhOiBub2RlLFxuICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgfSk7XG4gICAgdGhpcy5vbGRTZWxlY3Rpb25Ob2RlcyA9IG5vZGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBDZWxsRXZlbnQoZTogQ2VsbEV2ZW50KTogQVhHcmlkQ2VsbEV2ZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgcm93TGV2ZWw6IDAsXG4gICAgICBjb2x1bW46IGUuY29sdW1uLFxuICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAgcm93SW5kZXg6IGUucm93SW5kZXgsXG4gICAgICB2YWx1ZTogZS52YWx1ZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBSb3dFdmVudChlOiBSb3dFdmVudCk6IEFYR3JpZFJvd0V2ZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgcm93TGV2ZWw6IDAsXG4gICAgICBkYXRhOiBlLmRhdGEsXG4gICAgICByb3dJbmRleDogZS5yb3dJbmRleCxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGRlc2VsZWN0QWxsKCkge1xuICAgIHRoaXMuZ3JpZEFwaS5kZXNlbGVjdEFsbCgpO1xuICB9XG5cbiAgcHVibGljIGRlc2VsZWN0QnlLZXlGaWVsZChrZXlGaWVsZCkge1xuICAgIHRoaXMuZ3JpZEFwaS5mb3JFYWNoTm9kZSgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUuZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKG5vZGUuZGF0YVt0aGlzLmtleUZpZWxkXSA9PT0ga2V5RmllbGQpIHtcbiAgICAgICAgICBub2RlLnNldFNlbGVjdGVkKHNlbGVjdCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RSb3cgPSB0aGlzLnNlbGVjdFJvdy5maWx0ZXIoXG4gICAgICAgICAgICAoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPSBrZXlGaWVsZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGludGVybmFsR2V0Um93Q2xhc3MgPSAocDogYW55KSA9PiB7XG4gICAgaWYgKHRoaXMucm93Q2xhc3MpIHtcbiAgICAgIGlmICh0aGlzLnJvd0NsYXNzIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3Moe1xuICAgICAgICAgIHJvd0luZGV4OiBwLm5vZGUucm93SW5kZXgsXG4gICAgICAgICAgcm93TGV2ZWw6IHAubm9kZS5sZXZlbCxcbiAgICAgICAgICBkYXRhOiBwLmRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93Q2xhc3M7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHNob3dMb2FkaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmdyaWRBcGkpIHtcbiAgICAgIHRoaXMuZ3JpZEFwaS5zaG93TG9hZGluZ092ZXJsYXkoKTtcbiAgICB9XG4gIH1cblxuICBoaWRlTG9hZGluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ncmlkQXBpKSB7XG4gICAgICB0aGlzLmdyaWRBcGkuaGlkZU92ZXJsYXkoKTtcbiAgICB9XG4gIH1cblxuICBpbnRlcm5hbEdyaWRTaXplQ2hhbmdlZChlOiBHcmlkU2l6ZUNoYW5nZWRFdmVudCkge1xuICAgIGlmIChlLmNsaWVudFdpZHRoID4gMCAmJiBlLmNsaWVudEhlaWdodCA+IDApIHtcbiAgICAgIHRoaXMucGVyZm9ybVNpemVDb2x1bW5zVG9GaXQoZS5hcGkpO1xuICAgIH1cbiAgfVxuXG4gIGludGVybmFsR3JpZEZpcnN0RGF0YVJlbmRlcmVkKGU6IEZpcnN0RGF0YVJlbmRlcmVkRXZlbnQpIHtcbiAgICB0aGlzLnBlcmZvcm1TaXplQ29sdW1uc1RvRml0KGUuYXBpKTtcbiAgICB0aGlzLmhlYWRlckhlaWdodFNldHRlcigpO1xuICB9XG5cbiAgaGFuZGxlQ29sdW1uUmVzaXplZChlKSB7XG4gICAgdGhpcy5oZWFkZXJIZWlnaHRTZXR0ZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgcGVyZm9ybVNpemVDb2x1bW5zVG9GaXQoYXBpOiBHcmlkQXBpKSB7XG4gICAgaWYgKHRoaXMuc2l6ZUNvbHVtbnNUb0ZpdCkge1xuICAgICAgYXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBhZ2VTaXplKCkge1xuICAgIGNvbnN0IHBhZ2luZ1BhbmVsID1cbiAgICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLXBhZ2luZy1wYW5lbCcpO1xuXG4gICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG5cbiAgICBzZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGU6IGFueSkgPT4ge1xuICAgICAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25TZXRQYWdlU2l6ZShOdW1iZXIoZS50YXJnZXQudmFsdWUpKTtcbiAgICAgIHRoaXMuZ3JpZEFwaS5zZXRDYWNoZUJsb2NrU2l6ZShOdW1iZXIoZS50YXJnZXQudmFsdWUpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wdGlvbjEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtcblxuICAgIG9wdGlvbjEuc2V0QXR0cmlidXRlKCd2YWx1ZScsICcxMCcpO1xuXG4gICAgb3B0aW9uMS50ZXh0Q29udGVudCA9ICcxMCc7XG5cbiAgICBjb25zdCBvcHRpb24yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG5cbiAgICBvcHRpb24yLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnMjAnKTtcblxuICAgIG9wdGlvbjIudGV4dENvbnRlbnQgPSAnMjAnO1xuXG4gICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbjEpO1xuXG4gICAgc2VsZWN0LmFwcGVuZENoaWxkKG9wdGlvbjIpO1xuXG4gICAgc2VsZWN0LnZhbHVlID0gJzIwJztcblxuICAgIHNlbGVjdC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnd2hpdGUnO1xuXG4gICAgc2VsZWN0LnN0eWxlLmNvbG9yID0gJ2dyYXknO1xuXG4gICAgc2VsZWN0LnN0eWxlLnBhZGRpbmcgPSAnMnB4JztcblxuICAgIHNlbGVjdC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIGdyYXknO1xuXG4gICAgc2VsZWN0LnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuXG4gICAgcGFnaW5nUGFuZWwuYXBwZW5kQ2hpbGQoc2VsZWN0KTtcbiAgfVxuXG4gIHByaXZhdGUgaGVhZGVySGVpZ2h0U2V0dGVyKCkge1xuICAgIGNvbnN0IHBhZGRpbmcgPSAyMDtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmhlYWRlckhlaWdodEdldHRlcigpICsgcGFkZGluZztcbiAgICB0aGlzLmdyaWRBcGkuc2V0SGVhZGVySGVpZ2h0KGhlaWdodCk7XG4gIH1cblxuICBwcml2YXRlIGhlYWRlckhlaWdodEdldHRlcigpIHtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJUZXh0cyA9IFtcbiAgICAgIC4uLihkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYWctaGVhZGVyLWNlbGwtdGV4dCcpIGFzIGFueSksXG4gICAgXTtcblxuICAgIGNvbnN0IGNsaWVudEhlaWdodHMgPSBjb2x1bW5IZWFkZXJUZXh0cy5tYXAoXG4gICAgICAoaGVhZGVyVGV4dCkgPT4gaGVhZGVyVGV4dC5jbGllbnRIZWlnaHRcbiAgICApO1xuICAgIGNvbnN0IHRhbGxlc3RIZWFkZXJUZXh0SGVpZ2h0ID0gTWF0aC5tYXgoLi4uY2xpZW50SGVpZ2h0cyk7XG5cbiAgICByZXR1cm4gdGFsbGVzdEhlYWRlclRleHRIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIG1ha2VSZWZyZXNoQnRuKCkge1xuICAgIGNvbnN0IHBhZ2luZ1BhbmVsID1cbiAgICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmFnLXBhZ2luZy1wYW5lbCcpO1xuXG4gICAgY29uc3QgcmVmQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gICAgcmVmQnRuLmNsYXNzTGlzdC5hZGQoJ2ZhcicpO1xuICAgIHJlZkJ0bi5jbGFzc0xpc3QuYWRkKCdmYS1zeW5jJyk7XG5cbiAgICByZWZCdG4uc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuXG4gICAgcmVmQnRuLnRpdGxlID0gQVhUcmFuc2xhdG9yLmdldCgnY29tbW9uLnJlZnJlc2gnKTtcblxuICAgIHJlZkJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH0pO1xuXG4gICAgcGFnaW5nUGFuZWwuYXBwZW5kQ2hpbGQocmVmQnRuKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LWdyaWQtdG9vbGJhclwiICpuZ0lmPVwidG9vbGJhclwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJheC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48IS0tIFtlbmFibGVTb3J0aW5nXT1cInRydWVcIiAgW2VuYWJsZUNvbFJlc2l6ZV09XCJ0cnVlXCIgW2VuYWJsZUZpbHRlcl09XCJhbGxvd0ZpbHRlcmluZ1wiICAtLT5cblxuPGFnLWdyaWQtYW5ndWxhclxuICAqbmdJZj1cImdyaWRWaWV3XCJcbiAgY2xhc3M9XCJhZy10aGVtZS1iYWxoYW1cIlxuICBbZ2V0Um93Q2xhc3NdPVwiaW50ZXJuYWxHZXRSb3dDbGFzc1wiXG4gIFtzdXBwcmVzc0NvcHlSb3dzVG9DbGlwYm9hcmRdPVwidHJ1ZVwiXG4gIFtlbmFibGVSYW5nZVNlbGVjdGlvbl09XCJlbmFibGVSYW5nZVNlbGVjdGlvblwiXG4gIFtzZXJ2ZXJTaWRlU3RvcmVUeXBlXT1cIidwYXJ0aWFsJ1wiXG4gIFtzdHlsZS5oZWlnaHRdPVwiaW50ZXJuYWxIZWlnaHRcIlxuICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCJcbiAgW2VuYWJsZVJ0bF09XCJydGxcIlxuICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgW3Jvd0dyb3VwUGFuZWxTaG93XT1cInJvd0dyb3VwUGFuZWxTaG93XCJcbiAgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIlxuICBbZGV0YWlsUm93SGVpZ2h0XT1cImRldGFpbFJvd0hlaWdodFwiXG4gIFtyb3dIZWlnaHRdPVwicm93SGVpZ2h0XCJcbiAgW3BhZ2luYXRpb25BdXRvUGFnZVNpemVdPVwicGFnaW5hdGlvbkF1dG9QYWdlU2l6ZVwiXG4gIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvblBhZ2VTaXplXCJcbiAgW3N1cHByZXNzTWVudUhpZGVdPVwidHJ1ZVwiXG4gIFttYXhDb25jdXJyZW50RGF0YXNvdXJjZVJlcXVlc3RzXT1cIm1heENvbmN1cnJlbnREYXRhc291cmNlUmVxdWVzdHNcIlxuICBbYmxvY2tMb2FkRGVib3VuY2VNaWxsaXNdPVwiYmxvY2tMb2FkRGVib3VuY2VNaWxsaXNcIlxuICBbZnJhbWV3b3JrQ29tcG9uZW50c109XCJmcmFtZXdvcmtDb21wb25lbnRzXCJcbiAgW2lzRnVsbFdpZHRoQ2VsbF09XCJpc0Z1bGxXaWR0aENlbGxcIlxuICBbcm93U2VsZWN0aW9uXT1cInNlbGVjdGlvbk1vZGVcIlxuICBbcm93TXVsdGlTZWxlY3RXaXRoQ2xpY2tdPVwicm93TXVsdGlTZWxlY3RXaXRoQ2xpY2tcIlxuICBbZnVsbFdpZHRoQ2VsbFJlbmRlcmVyRnJhbWV3b3JrXT1cImZ1bGxXaWR0aENlbGxSZW5kZXJlckZyYW1ld29ya1wiXG4gIFtjYWNoZUJsb2NrU2l6ZV09XCJjYWNoZUJsb2NrU2l6ZVwiXG4gIFtmdWxsV2lkdGhDZWxsUmVuZGVyZXJQYXJhbXNdPVwiZnVsbFdpZHRoQ2VsbFJlbmRlcmVyUGFyYW1zXCJcbiAgKGNvbHVtblJlc2l6ZWQpPVwiaGFuZGxlQ29sdW1uUmVzaXplZCgkZXZlbnQpXCJcbiAgKGNlbGxDbGlja2VkKT1cImludGVybmFsR3JpZENlbGxDbGlja2VkKCRldmVudClcIlxuICAoY2VsbERvdWJsZUNsaWNrZWQpPVwiaW50ZXJuYWxHcmlkQ2VsbERvdWJsZUNsaWNrZWQoJGV2ZW50KVwiXG4gIChjZWxsRm9jdXNlZCk9XCJpbnRlcm5hbEdyaWRDZWxsRm9jdXNlZCgkZXZlbnQpXCJcbiAgKHJvd0NsaWNrZWQpPVwiaW50ZXJuYWxHcmlkUm93Q2xpY2tlZCgkZXZlbnQpXCJcbiAgKHNlbGVjdGlvbkNoYW5nZWQpPVwiaW50ZXJuYWxHcmlkU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgKHJvd1NlbGVjdGVkKT1cInJvd1NlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gIChyb3dEb3VibGVDbGlja2VkKT1cImludGVybmFsR3JpZFJvd0RvdWJsZUNsaWNrZWQoJGV2ZW50KVwiXG4gIChncmlkUmVhZHkpPVwiaW50ZXJuYWxHcmlkUmVhZHkoJGV2ZW50KVwiXG4gIFtncm91cFNlbGVjdHNDaGlsZHJlbl09XCJncm91cFNlbGVjdHNDaGlsZHJlblwiXG4gIFtzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uXT1cInN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb25cIlxuICBbZ3JvdXBTZWxlY3RzRmlsdGVyZWRdPVwidHJ1ZVwiXG4gIFtzdXBwcmVzc0NlbGxTZWxlY3Rpb25dPVwic3VwcHJlc3NDZWxsU2VsZWN0aW9uXCJcbiAgW2F1dG9Hcm91cENvbHVtbkRlZl09XCJhdXRvR3JvdXBDb2x1bW5EZWZcIlxuICBbc3VwcHJlc3NBZ2dGdW5jSW5IZWFkZXJdPVwidHJ1ZVwiXG4gIFt0cmVlRGF0YV09XCJ0cmVlRGF0YVwiXG4gIFthbmltYXRlUm93c109XCJ0cnVlXCJcbiAgW2lzU2VydmVyU2lkZUdyb3VwXT1cImlzU2VydmVyU2lkZUdyb3VwXCJcbiAgW2dldFNlcnZlclNpZGVHcm91cEtleV09XCJnZXRTZXJ2ZXJTaWRlR3JvdXBLZXlcIlxuICBbbWFzdGVyRGV0YWlsXT1cIm1hc3RlckRldGFpbFwiXG4gIFtkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXNdPVwiZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zXCJcbiAgW2RldGFpbENlbGxSZW5kZXJlcl09XCJkZXRhaWxDZWxsUmVuZGVyZXJcIlxuICAoZ3JpZFNpemVDaGFuZ2VkKT1cImludGVybmFsR3JpZFNpemVDaGFuZ2VkKCRldmVudClcIlxuICAoZmlyc3REYXRhUmVuZGVyZWQpPVwiaW50ZXJuYWxHcmlkRmlyc3REYXRhUmVuZGVyZWQoJGV2ZW50KVwiXG4gIFtsb2NhbGVUZXh0XT1cImxvY2FsZVRleHRcIlxuICBbZ3JvdXBIaWRlT3BlblBhcmVudHNdPVwiZ3JvdXBIaWRlT3BlblBhcmVudHNcIlxuICBbYWxsb3dDb250ZXh0TWVudVdpdGhDb250cm9sS2V5XT1cImZhbHNlXCJcbiAgW2dldE1haW5NZW51SXRlbXNdPVwiZ2V0TWFpbk1lbnVJdGVtc1wiXG4+XG48L2FnLWdyaWQtYW5ndWxhcj5cblxuPCEtLSAoZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQpPVwiZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQoJGV2ZW50KVwiICAtLT5cbiJdfQ==
|
807
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWdyaWQvc3JjL2xpYi9kYXRhLWdyaWQvZGF0YWdyaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWdyaWQvc3JjL2xpYi9kYXRhLWdyaWQvZGF0YWdyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHFCQUFxQixHQUV0QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQVd2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBUXBELE9BQU8sRUFDTCxXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixZQUFZLEdBQ2IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7OztBQUVwRixjQUFjLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtJQUNqRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztB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RSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTlELGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxpQ0FBaUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSXpELGtCQUFrQjtzQkFEekIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTTFDLFVBQVU7c0JBRHBCLEtBQUs7Z0JBVU4sU0FBUztzQkFEUixNQUFNO2dCQUtQLFdBQVc7c0JBRFYsTUFBTTtnQkFLUCxVQUFVO3NCQURULE1BQU07Z0JBS1AsUUFBUTtzQkFEUCxNQUFNO2dCQUtQLFVBQVU7c0JBRFQsTUFBTTtnQkFLUCxnQkFBZ0I7c0JBRGYsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AscUJBQXFCO3NCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVhEYXRhU291cmNlQ29tcG9uZW50LFxuICBBWERhdGFTb3VyY2VSZWFkUGFyYW1zLFxufSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENlbGxDbGlja2VkRXZlbnQsXG4gIENlbGxFdmVudCxcbiAgRmlyc3REYXRhUmVuZGVyZWRFdmVudCxcbiAgR3JpZEFwaSxcbiAgR3JpZE9wdGlvbnMsXG4gIEdyaWRTaXplQ2hhbmdlZEV2ZW50LFxuICBSb3dDbGlja2VkRXZlbnQsXG4gIFJvd0V2ZW50LFxufSBmcm9tICdhZy1ncmlkLWNvbW11bml0eSc7XG5pbXBvcnQgeyBBWEdyaWREYXRhQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGljZW5zZU1hbmFnZXIgfSBmcm9tICdhZy1ncmlkLWVudGVycHJpc2UnO1xuaW1wb3J0IHtcbiAgQVhHcmlkQ2VsbEV2ZW50LFxuICBBWEdyaWRSb3dFdmVudCxcbiAgQVhHcmlkUm93UGFyYW1zLFxuICBBWEdyaWRSb3dTZWxlY3Rpb25FdmVudCxcbn0gZnJvbSAnLi9kYXRhZ3JpZC5ldmVudHMnO1xuXG5pbXBvcnQge1xuICBBWERhdGFFdmVudCxcbiAgQVhUb29sYmFyQ29tcG9uZW50LFxuICBBWFRvb2xiYXJTZWFyY2hDb21wb25lbnQsXG4gIEFYVmFsdWVFdmVudCxcbn0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYQ29uZmlnLCBBWFRyYW5zbGF0b3IgfSBmcm9tICdAYWNvcmV4L2NvcmUnO1xuaW1wb3J0IHsgQVhEYXRlUGlja2VyRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zL2RhdGUtY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWERhdGFHcmlkRGV0YWlsVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL3RlbXBsYXRlcy9kZXRhaWwtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFYRGF0YUdyaWRSb3dUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vdGVtcGxhdGVzL3Jvdy10ZW1wbGF0ZS5jb21wb25lbnQnO1xuXG5MaWNlbnNlTWFuYWdlci5wcm90b3R5cGUuaXNEaXNwbGF5V2F0ZXJtYXJrID0gKCkgPT4ge1xuICByZXR1cm4gZmFsc2U7XG59O1xuTGljZW5zZU1hbmFnZXIucHJvdG90eXBlLnZhbGlkYXRlTGljZW5zZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy9jb25zb2xlLmluZm8oJ0NyYWNrZWQgYnkgQXJhc2ggT3Nobm91ZGkhJyk7XG59O1xuXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZENvbHVtbnNDaGFuZ2VFdmVudCBleHRlbmRzIEFYVmFsdWVFdmVudDxcbiAgQVhHcmlkRGF0YUNvbHVtbltdXG4+IHtcbiAgZGVjbGFyZSBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XG59XG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZENlbGxFdmVudCBleHRlbmRzIEFYRGF0YUV2ZW50PEFYR3JpZENlbGxFdmVudD4ge1xuICBkZWNsYXJlIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcbn1cbmV4cG9ydCBjbGFzcyBBWERhYWdyaWRSb3dDbGlja0V2ZW50IGV4dGVuZHMgQVhEYXRhRXZlbnQ8QVhHcmlkUm93RXZlbnQ+IHtcbiAgZGVjbGFyZSBjb21wb25lbnQ6IEFYRGF0YUdyaWRDb21wb25lbnQ7XG59XG5cbmV4cG9ydCBjbGFzcyBBWERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlRXZlbnQgZXh0ZW5kcyBBWERhdGFFdmVudDxBWEdyaWRSb3dTZWxlY3Rpb25FdmVudD4ge1xuICBkZWNsYXJlIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcbn1cblxuZXhwb3J0IGNsYXNzIEFYRGF0YUdyaWRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudCBleHRlbmRzIEFYRGF0YUV2ZW50PGFueT4ge1xuICBkZWNsYXJlIGNvbXBvbmVudDogQVhEYXRhR3JpZENvbXBvbmVudDtcbiAgZGVjbGFyZSBzZWxlY3RlZDogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtZGF0YS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgLy8gY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQVhEYXRhR3JpZENvbXBvbmVudCB7XG4gIHByaXZhdGUgZ3JpZEFwaTtcbiAgcHJpdmF0ZSBkYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrO1xuICBsb2NhbGVUZXh0OiBhbnk7XG5cbiAgZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zO1xuICBjb2x1bW5EZWZzOiBhbnlbXSA9IFtdO1xuICByb3dNb2RlbFR5cGUgPSAnY2xpZW50U2lkZSc7XG4gIGZ1bGxXaWR0aENlbGxSZW5kZXJlckZyYW1ld29yazogYW55O1xuICBmdWxsV2lkdGhDZWxsUmVuZGVyZXJQYXJhbXM6IGFueTtcbiAgZnJhbWV3b3JrQ29tcG9uZW50czogYW55ID0ge307XG4gIGlzRnVsbFdpZHRoQ2VsbDogRnVuY3Rpb247XG4gIGludGVybmFsSGVpZ2h0ID0gJzEwMCUnO1xuICBkZXRhaWxDZWxsUmVuZGVyZXI6IGFueTtcbiAgZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zOiBhbnk7XG4gIGRldGFpbFJvd0hlaWdodDogbnVtYmVyO1xuICBtYXN0ZXJEZXRhaWwgPSBmYWxzZTtcbiAgdHJlZURhdGEgPSBmYWxzZTtcbiAgZW5hYmVsU2VsZWN0ID0gZmFsc2U7XG4gIGdyaWRWaWV3ID0gZmFsc2U7XG4gIGdyb3VwU2VsZWN0c0NoaWxkcmVuID0gZmFsc2U7XG4gIG9sZFNlbGVjdGlvbk5vZGVzOiBhbnlbXSA9IFtdO1xuICBhdXRvR3JvdXBDb2x1bW5EZWY6IGFueSA9IHt9O1xuICBjdXJyZW50UGFnZSA9IDE7XG5cbiAgQElucHV0KClcbiAgcGFnaW5hdGlvbkF1dG9QYWdlU2l6ZSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHBhZ2luYXRpb25QYWdlU2l6ZSA9IDIwO1xuXG4gIGNhY2hlQmxvY2tTaXplID0gdGhpcy5wYWdpbmF0aW9uUGFnZVNpemU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHJlbW90ZU9wZXJhdGlvbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3dNdWx0aVNlbGVjdFdpdGhDbGljayA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHN1cHByZXNzQ2VsbFNlbGVjdGlvbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaXplQ29sdW1uc1RvRml0ID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzaG93Q2hlY2tCb3ggPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGZsb2F0aW5nRmlsdGVyID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgYXV0b0V4cGFuZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHJvd1NlbGVjdGFibGVDb25kaXRpb25GaWVsZDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdGlvbk1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xuXG4gIEBJbnB1dCgpXG4gIHBhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdFJvdzogYW55W10gPSBbXTtcblxuICBASW5wdXQoKVxuICByb3dHcm91cFBhbmVsU2hvdzogJ2Fsd2F5cycgfCAnbmV2ZXInID0gJ25ldmVyJztcblxuICBASW5wdXQoKVxuICBsb2FkT25Jbml0OiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBlbmFibGVSYW5nZVNlbGVjdGlvbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGtleUZpZWxkOiBzdHJpbmcgPSAnbnVsbCc7XG5cbiAgQElucHV0KClcbiAgaGFzQ2hpbGRGaWVsZDogc3RyaW5nID0gJ251bGwnO1xuXG4gIEBJbnB1dCgpXG4gIHJvd0hlaWdodCA9IDI4O1xuXG4gIEBJbnB1dCgpXG4gIGdyb3VwSGlkZU9wZW5QYXJlbnRzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgbWF4Q29uY3VycmVudERhdGFzb3VyY2VSZXF1ZXN0czogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIGJsb2NrTG9hZERlYm91bmNlTWlsbGlzOiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgc2hvd1JlZnJlc2hCdXR0b24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIGF1dG9OYXZpZ2F0ZVBhZ2UgPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHJvd0NsYXNzPzogKFxuICAgIHBhcmFtczogQVhHcmlkUm93UGFyYW1zXG4gICkgPT4gKHN0cmluZyB8IHN0cmluZ1tdKSB8IChzdHJpbmcgfCBzdHJpbmdbXSk7XG5cbiAgQElucHV0KClcbiAgcnRsOiBib29sZWFuID0gQVhDb25maWcuZ2V0KCdsYXlvdXQucnRsJyk7XG5cbiAgcHJpdmF0ZSBfc2VhcmNoVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHNlYXJjaFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoVGV4dDtcbiAgfVxuICBwdWJsaWMgc2V0IHNlYXJjaFRleHQodjogc3RyaW5nKSB7XG4gICAgaWYgKHYgIT09IHRoaXMuX3NlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuX3NlYXJjaFRleHQgPSB2O1xuICAgICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xuICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnNldFF1aWNrRmlsdGVyKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZmlsdGVyOiBhbnlbXTtcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBmaWx0ZXIoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XG4gIH1cbiAgcHVibGljIHNldCBmaWx0ZXIodjogYW55W10pIHtcbiAgICBpZiAodiAhPT0gdGhpcy5fZmlsdGVyKSB7XG4gICAgICB0aGlzLl9maWx0ZXIgPSB2O1xuICAgICAgdGhpcy5fZmlsdGVyLmZvckVhY2goKGYpID0+IHtcbiAgICAgICAgY29uc3QgZmMgPSB0aGlzLmdyaWRBcGkuZ2V0RmlsdGVySW5zdGFuY2UoZi5maWVsZCk7XG4gICAgICAgIGlmIChmYykge1xuICAgICAgICAgIGNvbnN0IGZmID0gZmMuZ2V0RnJhbWV3b3JrQ29tcG9uZW50SW5zdGFuY2UoKTtcbiAgICAgICAgICBmZi5zZXRNb2RlbChmKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgQENvbnRlbnRDaGlsZHJlbihBWEdyaWREYXRhQ29sdW1uKVxuICBwcml2YXRlIF9pbmxpbmVDb2x1bW5zOiBRdWVyeUxpc3Q8QVhHcmlkRGF0YUNvbHVtbj47XG5cbiAgQE91dHB1dCgpXG4gIGNvbHVtbnNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ29sdW1uc0NoYW5nZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkQ29sdW1uc0NoYW5nZUV2ZW50PigpO1xuXG4gIHByaXZhdGUgX2NvbHVtbnM6IEFYR3JpZERhdGFDb2x1bW5bXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogQVhHcmlkRGF0YUNvbHVtbltdIHtcbiAgICByZXR1cm4gdGhpcy5faW5saW5lQ29sdW1uc1xuICAgICAgPyBbLi4udGhpcy5fY29sdW1ucywgLi4udGhpcy5faW5saW5lQ29sdW1ucy50b0FycmF5KCldXG4gICAgICA6IHRoaXMuX2NvbHVtbnM7XG4gIH1cblxuICBwdWJsaWMgc2V0IGNvbHVtbnModmFsOiBBWEdyaWREYXRhQ29sdW1uW10pIHtcbiAgICBpZiAodmFsICYmIHZhbC5sZW5ndGgpIHtcbiAgICAgIGxldCBvbGQgPSB0aGlzLl9jb2x1bW5zO1xuICAgICAgdGhpcy5fY29sdW1ucyA9IHZhbDtcbiAgICAgIHRoaXMuY29sdW1uc0NoYW5nZS5lbWl0KHtcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICB2YWx1ZTogdmFsLFxuICAgICAgICBvbGRWYWx1ZTogb2xkLFxuICAgICAgICBodG1sRWxlbWVudDogdGhpcy5yZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRlZmF1bHRDb2xEZWY6IGFueSA9IHtcbiAgICBmaWx0ZXI6IHRydWUsXG4gICAgZmxvYXRpbmdGaWx0ZXI6IHRydWUsXG4gIH07XG5cbiAgQENvbnRlbnRDaGlsZChBWFRvb2xiYXJTZWFyY2hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHNlYXJjaElucHV0OiBBWFRvb2xiYXJTZWFyY2hDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChBWFRvb2xiYXJDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHRvb2xiYXI6IEFYVG9vbGJhckNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YUdyaWRSb3dUZW1wbGF0ZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgcm93VGVtcGxhdGU6IEFYRGF0YUdyaWRSb3dUZW1wbGF0ZUNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKEFYRGF0YUdyaWREZXRhaWxUZW1wbGF0ZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ3JpZERldGFpbFRlbXBsYXRlOiBBWERhdGFHcmlkRGV0YWlsVGVtcGxhdGVDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChBWERhdGFTb3VyY2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgX2NvbnRlbnREYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfZGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZGF0YVNvdXJjZSgpOiBBWERhdGFTb3VyY2VDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlID8gdGhpcy5fZGF0YVNvdXJjZSA6IHRoaXMuX2NvbnRlbnREYXRhU291cmNlO1xuICB9XG5cbiAgcHVibGljIHNldCBkYXRhU291cmNlKHY6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCkge1xuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2O1xuICB9XG5cbiAgQE91dHB1dCgpXG4gIGNlbGxDbGljazogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGNlbGxEYkNsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZENlbGxFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgY2VsbEZvY3VzZTogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRDZWxsRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHJvd0NsaWNrOiBFdmVudEVtaXR0ZXI8QVhEYWFncmlkUm93Q2xpY2tFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYWFncmlkUm93Q2xpY2tFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcm93RGJDbGljazogRXZlbnRFbWl0dGVyPEFYRGFhZ3JpZFJvd0NsaWNrRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPEFYRGFhZ3JpZFJvd0NsaWNrRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcblxuICBAT3V0cHV0KClcbiAgcm93U2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxBWERhdGFHcmlkU2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uUm93U2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYRGF0YUdyaWRSb3dTZWxlY3Rpb25DaGFuZ2VFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhEYXRhR3JpZFJvd1NlbGVjdGlvbkNoYW5nZUV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PixcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5sb2NhbGVUZXh0ID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0YUdyaWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY0hlaWdodCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50b29sYmFyKSB7XG4gICAgICB0aGlzLmludGVybmFsSGVpZ2h0ID0gYGNhbGMoMTAwJSAtICR7NDB9cHgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnRlcm5hbEhlaWdodCA9ICcxMDAlJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldCBpbnRlbmFsR3JpZERhdGFTb3VyY2UoKSB7XG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0NvdW50OiBudWxsLFxuICAgICAgZ2V0Um93czogKHBhcmFtcykgPT4ge1xuICAgICAgICB0aGF0LmRhdGFTb3VyY2VTdWNjZXNzQ2FsbGJhY2sgPSBwYXJhbXMuc3VjY2Vzc0NhbGxiYWNrO1xuXG4gICAgICAgIGNvbnN0IGxvYWRQYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcblxuICAgICAgICBsb2FkUGFyYW1zLnNlYXJjaFRleHQgPSB0aGF0LnNlYXJjaFRleHQ7XG5cbiAgICAgICAgbG9hZFBhcmFtcy5za2lwID0gcGFyYW1zLnJlcXVlc3Quc3RhcnRSb3c7XG5cbiAgICAgICAgbG9hZFBhcmFtcy50YWtlID0gcGFyYW1zLnJlcXVlc3QuZW5kUm93IC0gcGFyYW1zLnJlcXVlc3Quc3RhcnRSb3c7XG5cbiAgICAgICAgbG9hZFBhcmFtcy5zb3J0ID0gcGFyYW1zLnJlcXVlc3Quc29ydE1vZGVsLm1hcCgoYykgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWVsZDogYy5jb2xJZCxcbiAgICAgICAgICAgIGRpcjogYy5zb3J0LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxvYWRQYXJhbXMuZ3JvdXAgPSB7XG4gICAgICAgICAgZmllbGRzOiBwYXJhbXMucmVxdWVzdC5yb3dHcm91cENvbHMubWFwKChyKSA9PiByLmZpZWxkKSxcbiAgICAgICAgICBrZXlzOiBwYXJhbXMucmVxdWVzdC5ncm91cEtleXMsXG4gICAgICAgICAgcGFyZW50RGF0YTogcGFyYW1zLnBhcmVudE5vZGUuZGF0YSxcbiAgICAgICAgfTtcblxuICAgICAgICBsb2FkUGFyYW1zLmZpbHRlciA9IHBhcmFtcy5yZXF1ZXN0LmZpbHRlck1vZGVsO1xuXG4gICAgICAgIHRoYXQuZGF0YVNvdXJjZS5mZXRjaChsb2FkUGFyYW1zKTtcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICBnZXRNYWluTWVudUl0ZW1zKGUpIHtcbiAgICByZXR1cm4gWydwaW5TdWJNZW51JywgJ3NlcGFyYXRvciddO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkQXBpLmRlc3Ryb3koKTtcbiAgfVxuXG4gIGlzU2VydmVyU2lkZUdyb3VwID0gKGUpID0+IHtcbiAgICByZXR1cm4gZVt0aGlzLmhhc0NoaWxkRmllbGRdO1xuICB9O1xuXG4gIGdldENvbHVtbkRlZnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEFwaS5nZXRDb2x1bW5EZWZzKCk7XG4gIH07XG5cbiAgZ2V0Q3VycmVudFBhZ2VOdW1iZXIgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnQ6IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKSArIDEsXG4gICAgICB0b3RhbDogdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRUb3RhbFBhZ2VzKCksXG4gICAgfTtcbiAgfTtcblxuICBwYWdpbmF0aW9uR29Ub1BhZ2UobnVtYmVyKSB7XG4gICAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25Hb1RvUGFnZShudW1iZXIgLSAxKTtcbiAgfVxuXG4gIGdldFNlcnZlclNpZGVHcm91cEtleSA9IChlKSA9PiB7XG4gICAgcmV0dXJuIGVbdGhpcy5rZXlGaWVsZF07XG4gIH07XG4gIGludGVybmFsR3JpZFJlYWR5KGdyaWRPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uICYmICF0aGlzLnBhZ2luYXRpb25BdXRvUGFnZVNpemUpIHtcbiAgICAgIHRoaXMuaGFuZGxlUGFnZVNpemUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jYWNoZUJsb2NrU2l6ZSA9XG4gICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplID4gMjAgPyB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSA6IDEwMDtcbiAgICB9XG5cbiAgICB0aGlzLmdyaWRBcGkgPSBncmlkT3B0aW9ucy5hcGk7XG5cbiAgICB0aGlzLm1hcENvbHVtbnMoKTtcbiAgICB0aGlzLmNhbGNIZWlnaHQoKTtcblxuICAgIGlmICghdGhpcy5sb2FkT25Jbml0KSB7XG4gICAgICB0aGlzLmxvYWRPbkluaXQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xuICAgICAgdGhpcy5ncmlkQXBpLnNldFNlcnZlclNpZGVEYXRhc291cmNlKHRoaXMuaW50ZW5hbEdyaWREYXRhU291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaG93UmVmcmVzaEJ1dHRvbikge1xuICAgICAgdGhpcy5tYWtlUmVmcmVzaEJ0bigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmF1dG9OYXZpZ2F0ZVBhZ2UpIHtcbiAgICAgIHRoaXMuaGFuZGxlTmV4dEJ0bkNsaWNrKCk7XG4gICAgICB0aGlzLmhhbmRsZUJhY2tCdG5DbGljaygpO1xuICAgICAgdGhpcy5oYW5kbGVMYXN0QnRuQ2xpY2soKTtcbiAgICAgIHRoaXMuaGFuZGxlRml0c3RCdG5DbGljaygpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCB0aGF0ID0gdGhpcztcbiAgICBpZiAodGhpcy5yb3dUZW1wbGF0ZSkge1xuICAgICAgdGhpcy5mdWxsV2lkdGhDZWxsUmVuZGVyZXJGcmFtZXdvcmsgPSB0aGlzLnJvd1RlbXBsYXRlLnJlbmRlcmVyO1xuICAgICAgdGhpcy5mdWxsV2lkdGhDZWxsUmVuZGVyZXJQYXJhbXMgPSB0aGlzLnJvd1RlbXBsYXRlLnBhcmFtcztcbiAgICB9XG4gICAgdGhpcy5mcmFtZXdvcmtDb21wb25lbnRzLmFnRGF0ZUlucHV0ID0gQVhEYXRlUGlja2VyRmlsdGVyQ29tcG9uZW50O1xuXG4gICAgaWYgKHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlKSB7XG4gICAgICB0aGlzLm1hc3RlckRldGFpbCA9IHRydWU7XG4gICAgICB0aGlzLmRldGFpbENlbGxSZW5kZXJlclBhcmFtcyA9IHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlLnBhcmFtcztcbiAgICAgIHRoaXMuZGV0YWlsQ2VsbFJlbmRlcmVyID0gJ2RldGFpbFJlbmRlcmVyRnJhbWV3b3JrJztcbiAgICAgIHRoaXMuZnJhbWV3b3JrQ29tcG9uZW50cy5kZXRhaWxSZW5kZXJlckZyYW1ld29yayA9XG4gICAgICAgIHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlLnJlbmRlcmVyO1xuXG4gICAgICB0aGlzLmRldGFpbFJvd0hlaWdodCA9IHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlLmhlaWdodDtcbiAgICB9XG4gICAgdGhpcy5pc0Z1bGxXaWR0aENlbGwgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gdGhhdC5yb3dUZW1wbGF0ZSAhPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgdGhpcy5ncm91cFNlbGVjdHNDaGlsZHJlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5rZXlGaWVsZCAhPT0gJ251bGwnICYmIHRoaXMuaGFzQ2hpbGRGaWVsZCAhPT0gJ251bGwnKSB7XG4gICAgICB0aGlzLnJvd0dyb3VwUGFuZWxTaG93ID0gJ25ldmVyJztcbiAgICAgIHRoaXMudHJlZURhdGEgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcbiAgICAgIHRoaXMucm93TW9kZWxUeXBlID0gJ3NlcnZlclNpZGUnO1xuICAgIH1cbiAgICAvL1xuICAgIGlmICh0aGlzLnJ0bCA9PSBudWxsKSB7XG4gICAgICB0aGlzLnJ0bCA9XG4gICAgICAgIHdpbmRvd1xuICAgICAgICAgIC5nZXRDb21wdXRlZFN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsIG51bGwpXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJ2RpcmVjdGlvbicpID09PSAncnRsJztcbiAgICB9XG4gICAgLy9cbiAgfVxuXG4gIGdyaWRTZWxlY3RSb3coKSB7XG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnNlbGVjdFJvdyAmJlxuICAgICAgICB0aGlzLnNlbGVjdFJvdy5sZW5ndGggPiAwICYmXG4gICAgICAgIHRoaXMuZ3JpZEFwaSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdFJvd1swXSAhPSAnb2JqZWN0J1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5mb3JFYWNoTm9kZSgobm9kZSkgPT4ge1xuICAgICAgICAgIGlmIChub2RlLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5vZGUuZGF0YVt0aGlzLmtleUZpZWxkXSA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG5vZGUuc2V0U2VsZWN0ZWQoc2VsZWN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ3JpZEFwaS5mb3JFYWNoTm9kZSgobm9kZSkgPT4ge1xuICAgICAgICAgIGlmIChub2RlLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0Um93Lmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ucm93SW5kZXggIT0gdW5kZWZpbmVkICYmIGl0ZW0ucm93TGV2ZWwgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobm9kZS5kYXRhW3RoaXMua2V5RmllbGRdID09PSBpdGVtLmRhdGFbdGhpcy5rZXlGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmtleUZpZWxkICE9PSAnbnVsbCcgJiZcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5kYXRhW3RoaXMua2V5RmllbGRdID09PSBpdGVtW3RoaXMua2V5RmllbGRdXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0YWJsZUNvbmRpdGlvbkZpZWxkKSB7XG4gICAgICAgICAgICAgIG5vZGUuc2V0Um93U2VsZWN0YWJsZShcbiAgICAgICAgICAgICAgICBub2RlLmRhdGFbdGhpcy5yb3dTZWxlY3RhYmxlQ29uZGl0aW9uRmllbGRdXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLnNldFNlbGVjdGVkKHNlbGVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWJ1aWxkR3JpZCgpIHtcbiAgICB0aGlzLm1hcENvbHVtbnMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNpemVDb2x1bW5zVG9GaXQpIHtcbiAgICAgICAgdGhpcy5ncmlkQXBpLnNpemVDb2x1bW5zVG9GaXQoKTtcbiAgICAgIH1cbiAgICB9LCAxMCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudHJlZURhdGEgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuY29sdW1uRGVmcyA9IHRoaXMuY29sdW1ucy5tYXAoKGMpID0+IGMucmVuZGVyKCkpO1xuXG4gICAgICBjb25zdCBncm91cENvbHVtbiA9IHRoaXMuY29sdW1uRGVmcy5maW5kKFxuICAgICAgICAoYykgPT4gYy5yb3dHcm91cEluZGV4ID09ICcwJyAmJiBjLmZpZWxkICE9PSAnJ1xuICAgICAgKTtcblxuICAgICAgdGhpcy5hdXRvR3JvdXBDb2x1bW5EZWYgPSB7XG4gICAgICAgIGhlYWRlck5hbWU6IGdyb3VwQ29sdW1uLmhlYWRlck5hbWUsXG4gICAgICAgIHdpZHRoOiBncm91cENvbHVtbi53aWR0aCxcbiAgICAgICAgY2VsbFJlbmRlcmVyUGFyYW1zOiB7IGNoZWNrYm94OiB0aGlzLnNob3dDaGVja0JveCB9LFxuICAgICAgICBmaWVsZDogZ3JvdXBDb2x1bW4uZmllbGQsXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmNvbHVtbkRlZnMuZm9yRWFjaCgoZWxtKSA9PiB7XG4gICAgICAgIGlmIChlbG0ucm93R3JvdXBJbmRleCA+IC0xKSB7XG4gICAgICAgICAgZWxtLmhpZGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5ncmlkVmlldyA9IHRydWU7XG5cbiAgICB0aGlzLmVuYWJlbFNlbGVjdCA9IHRydWU7XG4gICAgdGhpcy5kYXRhU291cmNlLm9uRGF0YVJlY2VpdmVkLnN1YnNjcmliZSgoX2RhdGEpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IF9kYXRhLmRhdGEucmVzdWx0O1xuICAgICAgdGhpcy5oaWRlTG9hZGluZygpO1xuICAgICAgbGV0IGl0ZW1zOiBhbnlbXTtcbiAgICAgIGxldCB0b3RhbENvdW50OiBudW1iZXI7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XG4gICAgICAgIGl0ZW1zID0gcmVzdWx0O1xuICAgICAgICB0b3RhbENvdW50ID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW1zID0gcmVzdWx0Lml0ZW1zO1xuICAgICAgICB0b3RhbENvdW50ID0gcmVzdWx0LnRvdGFsQ291bnQ7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5sb2FkT25Jbml0KSB7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlU3VjY2Vzc0NhbGxiYWNrKFtdLCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VTdWNjZXNzQ2FsbGJhY2soaXRlbXMsIHRvdGFsQ291bnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMubG9hZE9uSW5pdCAmJiB0aGlzLmdyaWRBcGkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRSb3dEYXRhKFtdKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdyaWRBcGkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuZ3JpZEFwaS5zZXRSb3dEYXRhKGl0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5nZXRDdXJyZW50UGFnZU51bWJlcigpLnRvdGFsID4gMSAmJiB0aGlzLmF1dG9OYXZpZ2F0ZVBhZ2UpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uR29Ub1BhZ2UodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmdyaWRTZWxlY3RSb3coKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5vbkZldGNoU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG4gICAgICB0aGlzLnNlYXJjaElucHV0Lm9uVmFsdWVDaGFuZ2VkLnN1YnNjcmliZSgoYykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBjLnZhbHVlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG1hcENvbHVtbnMoKSB7XG4gICAgdGhpcy5jb2x1bW5EZWZzID0gdGhpcy5jb2x1bW5zLm1hcCgoYykgPT4gYy5yZW5kZXIoKSk7XG4gICAgaWYgKHRoaXMuZ3JpZERldGFpbFRlbXBsYXRlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuY29sdW1uRGVmc1swXS5jaGVja2JveFNlbGVjdGlvbiA9PT0gdHJ1ZSAmJlxuICAgICAgICB0aGlzLmNvbHVtbkRlZnNbMF0uZmllbGQgPT09ICcnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jb2x1bW5EZWZzWzFdLmNlbGxSZW5kZXJlciA9ICdhZ0dyb3VwQ2VsbFJlbmRlcmVyJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sdW1uRGVmc1swXS5jZWxsUmVuZGVyZXIgPSAnYWdHcm91cENlbGxSZW5kZXJlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzQ2hpbGRGaWVsZCA9PT0gJ251bGwnKSB7XG4gICAgICBjb25zdCBncm91cENvbHVtbiA9IHRoaXMuY29sdW1uRGVmcy5maW5kKFxuICAgICAgICAoYykgPT4gYy5yb3dHcm91cEluZGV4ID09PSB1bmRlZmluZWQgJiYgYy5maWVsZCAhPT0gJydcbiAgICAgICk7XG4gICAgICBpZiAoZ3JvdXBDb2x1bW4gJiYgdGhpcy5ncm91cEhpZGVPcGVuUGFyZW50cyA9PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgICAgICBoZWFkZXJOYW1lOiBncm91cENvbHVtbi5oZWFkZXJOYW1lLFxuICAgICAgICAgIHdpZHRoOiBncm91cENvbHVtbi53aWR0aCxcbiAgICAgICAgICBjZWxsUmVuZGVyZXJQYXJhbXM6IHsgY2hlY2tib3g6IHRoaXMuc2hvd0NoZWNrQm94IH0sXG4gICAgICAgICAgZmllbGQ6IGdyb3VwQ29sdW1uLmZpZWxkLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY29sdW1uRGVmcy5mb3JFYWNoKChlbG0pID0+IHtcbiAgICAgIGlmIChlbG0ucm93R3JvdXBJbmRleCA+IC0xKSB7XG4gICAgICAgIGVsbS5oaWRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRpc3BsYXllZENvbHVtbnNDaGFuZ2VkKGUpIHtcbiAgICBpZiAodGhpcy5oYXNDaGlsZEZpZWxkID09PSAnbnVsbCcpIHtcbiAgICAgIGNvbnN0IGVlID0gZS5jb2x1bW5BcGkuZ2V0QWxsRGlzcGxheWVkQ29sdW1uR3JvdXBzKCk7XG4gICAgICBjb25zdCBlZWUgPSBlZS5maW5kKFxuICAgICAgICAoYykgPT4gYy5jb2xJZCAhPT0gJ2FnLUdyaWQtQXV0b0NvbHVtbicgJiYgYy5jb2xJZCAhPT0gJzAnXG4gICAgICApO1xuICAgICAgaWYgKGVlZSAmJiBlZWUuY29sSWQpIHtcbiAgICAgICAgdGhpcy5hdXRvR3JvdXBDb2x1bW5EZWYgPSB7XG4gICAgICAgICAgaGVhZGVyTmFtZTogZWVlLmNvbERlZi5oZWFkZXJOYW1lLFxuICAgICAgICAgIHdpZHRoOiBlZWUuY29sRGVmLndpZHRoLFxuICAgICAgICAgIGNlbGxSZW5kZXJlclBhcmFtczogeyBjaGVja2JveDogdGhpcy5zaG93Q2hlY2tCb3ggfSxcbiAgICAgICAgICBmaWVsZDogZWVlLmNvbERlZi5maWVsZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWZyZXNoKHJvdXRlOiBhbnlbXSA9IFtdKSB7XG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMuZ3JpZEFwaSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAgdGhpcy5ncmlkQXBpLnB1cmdlU2VydmVyU2lkZUNhY2hlKHJvdXRlKTtcbiAgICAgIHRoaXMuZ3JpZEFwaS5zZXRTZXJ2ZXJTaWRlRGF0YXNvdXJjZSh0aGlzLmludGVuYWxHcmlkRGF0YVNvdXJjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5mZXRjaChudWxsKTtcbiAgICB9XG4gIH1cblxuICBpbnRlcm5hbEdyaWRDZWxsQ2xpY2tlZChlOiBDZWxsQ2xpY2tlZEV2ZW50KSB7XG4gICAgdGhpcy5jZWxsQ2xpY2suZW1pdCh7XG4gICAgICBkYXRhOiB0aGlzLm1hcENlbGxFdmVudChlKSxcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgIH0pO1xuICB9XG5cbiAgaW50ZXJuYWxHcmlkQ2VsbERvdWJsZUNsaWNrZWQoZTogQ2VsbENsaWNrZWRFdmVudCkge1xuICAgIHRoaXMuY2VsbERiQ2xpY2suZW1pdCh7XG4gICAgICBkYXRhOiB0aGlzLm1hcENlbGxFdmVudChlKSxcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgIH0pO1xuICB9XG5cbiAgaW50ZXJuYWxHcmlkQ2VsbEZvY3VzZWQoZTogQ2VsbENsaWNrZWRFdmVudCkge1xuICAgIHRoaXMuY2VsbEZvY3VzZS5lbWl0KHtcbiAgICAgIGRhdGE6IHRoaXMubWFwQ2VsbEV2ZW50KGUpLFxuICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICBpbnRlcm5hbEdyaWRSb3dDbGlja2VkKGU6IFJvd0NsaWNrZWRFdmVudCkge1xuICAgIGlmICghZS5ub2RlLmdyb3VwKSB7XG4gICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoe1xuICAgICAgICBkYXRhOiB0aGlzLm1hcFJvd0V2ZW50KGUpLFxuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaW50ZXJuYWxHcmlkUm93RG91YmxlQ2xpY2tlZChlOiBDZWxsQ2xpY2tlZEV2ZW50KSB7XG4gICAgaWYgKCFlLm5vZGUuZ3JvdXApIHtcbiAgICAgIHRoaXMucm93RGJDbGljay5lbWl0KHtcbiAgICAgICAgZGF0YTogdGhpcy5tYXBSb3dFdmVudChlKSxcbiAgICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGRpZmZlcmVuY2VPZjJBcnJheXMoYXJyYXkxOiBhbnksIGFycmF5MjogYW55KSB7XG4gICAgY29uc3QgdGVtcCA9IFtdO1xuICAgIGZvciAoY29uc3QgaSBpbiBhcnJheTEpIHtcbiAgICAgIGlmIChhcnJheTIuaW5kZXhPZihhcnJheTFbaV0pID09PSAtMSkge1xuICAgICAgICB0ZW1wLnB1c2goYXJyYXkxW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBpIGluIGFycmF5Mikge1xuICAgICAgaWYgKGFycmF5MS5pbmRleE9mKGFycmF5MltpXSkgPT09IC0xKSB7XG4gICAgICAgIHRlbXAucHVzaChhcnJheTJbaV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGVtcC5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gIH1cblxuICByb3dTZWxlY3Rpb25DaGFuZ2VkKGUpIHtcbiAgICBpZiAoZS5ub2RlLnNlbGVjdGVkID09IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKFxuICAgICAgICAoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPSBlLmRhdGFbdGhpcy5rZXlGaWVsZF1cbiAgICAgICk7XG4gICAgICB0aGlzLnNlbGVjdFJvdy5wdXNoKGUuZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKFxuICAgICAgICAoYykgPT4gY1t0aGlzLmtleUZpZWxkXSAhPSBlLmRhdGFbdGhpcy5rZXlGaWVsZF1cbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucm93U2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgZGF0YTogZSxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgIH0pO1xuICB9XG5cbiAgaW50ZXJuYWxHcmlkU2VsZWN0aW9uQ2hhbmdlZChlKSB7XG4gICAgY29uc3QgYXJnczogQVhHcmlkUm93U2VsZWN0aW9uRXZlbnQgPSB7IGl0ZW1zOiBbXSB9O1xuICAgIGNvbnN0IG9sZE5vZGVzID0gdGhpcy5vbGRTZWxlY3Rpb25Ob2RlcztcbiAgICBjb25zdCBub2RlcyA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XG5cbiAgICBpZiAodGhpcy5hdXRvRXhwYW5kKSB7XG4gICAgICBjb25zdCB1bnNlbGVjdGVkTm9kZXMgPSBvbGROb2Rlcy5maWx0ZXIoXG4gICAgICAgIChvbGROb2RlKSA9PiAhbm9kZXMuc29tZSgobmV3Tm9kZSkgPT4gbmV3Tm9kZSA9PT0gb2xkTm9kZSlcbiAgICAgICk7XG4gICAgICB1bnNlbGVjdGVkTm9kZXMuZm9yRWFjaCgoZWwpID0+IHtcbiAgICAgICAgZWwuc2V0RXhwYW5kZWQoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbm9kZXMuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgaWYgKHRoaXMuYXV0b0V4cGFuZCkge1xuICAgICAgICBpLnNldEV4cGFuZGVkKHRydWUpO1xuICAgICAgfVxuICAgICAgYXJncy5pdGVtcy5wdXNoKHtcbiAgICAgICAgcm93TGV2ZWw6IGkubGV2ZWwsXG4gICAgICAgIHJvd0luZGV4OiBpLnJvd0luZGV4LFxuICAgICAgICBkYXRhOiBpLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdCh7XG4gICAgICBkYXRhOiBhcmdzLFxuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgfSk7XG4gICAgbGV0IGFjdGlvbiA9IG5vZGVzLmxlbmd0aCA+IG9sZE5vZGVzLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5kaWZmZXJlbmNlT2YyQXJyYXlzKG5vZGVzLCBvbGROb2Rlcyk7XG4gICAgdGhpcy5vblJvd1NlbGVjdGlvbkNoYW5nZWQuZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBzZWxlY3RlZDogYWN0aW9uLFxuICAgICAgZGF0YTogbm9kZSxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgIH0pO1xuICAgIHRoaXMub2xkU2VsZWN0aW9uTm9kZXMgPSBub2RlcztcbiAgfVxuXG4gIHByaXZhdGUgbWFwQ2VsbEV2ZW50KGU6IENlbGxFdmVudCk6IEFYR3JpZENlbGxFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0xldmVsOiAwLFxuICAgICAgY29sdW1uOiBlLmNvbHVtbixcbiAgICAgIGRhdGE6IGUuZGF0YSxcbiAgICAgIHJvd0luZGV4OiBlLnJvd0luZGV4LFxuICAgICAgdmFsdWU6IGUudmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwUm93RXZlbnQoZTogUm93RXZlbnQpOiBBWEdyaWRSb3dFdmVudCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd0xldmVsOiAwLFxuICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAgcm93SW5kZXg6IGUucm93SW5kZXgsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBkZXNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLmdyaWRBcGkuZGVzZWxlY3RBbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXNlbGVjdEJ5S2V5RmllbGQoa2V5RmllbGQpIHtcbiAgICB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGUoKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgIGlmIChub2RlLmRhdGFbdGhpcy5rZXlGaWVsZF0gPT09IGtleUZpZWxkKSB7XG4gICAgICAgICAgbm9kZS5zZXRTZWxlY3RlZChzZWxlY3QpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0Um93ID0gdGhpcy5zZWxlY3RSb3cuZmlsdGVyKFxuICAgICAgICAgICAgKGMpID0+IGNbdGhpcy5rZXlGaWVsZF0gIT0ga2V5RmllbGRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpbnRlcm5hbEdldFJvd0NsYXNzID0gKHA6IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLnJvd0NsYXNzKSB7XG4gICAgICBpZiAodGhpcy5yb3dDbGFzcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NsYXNzKHtcbiAgICAgICAgICByb3dJbmRleDogcC5ub2RlLnJvd0luZGV4LFxuICAgICAgICAgIHJvd0xldmVsOiBwLm5vZGUubGV2ZWwsXG4gICAgICAgICAgZGF0YTogcC5kYXRhLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NsYXNzO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBzaG93TG9hZGluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ncmlkQXBpKSB7XG4gICAgICB0aGlzLmdyaWRBcGkuc2hvd0xvYWRpbmdPdmVybGF5KCk7XG4gICAgfVxuICB9XG5cbiAgaGlkZUxvYWRpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ3JpZEFwaSkge1xuICAgICAgdGhpcy5ncmlkQXBpLmhpZGVPdmVybGF5KCk7XG4gICAgfVxuICB9XG5cbiAgaW50ZXJuYWxHcmlkU2l6ZUNoYW5nZWQoZTogR3JpZFNpemVDaGFuZ2VkRXZlbnQpIHtcbiAgICBpZiAoZS5jbGllbnRXaWR0aCA+IDAgJiYgZS5jbGllbnRIZWlnaHQgPiAwKSB7XG4gICAgICB0aGlzLnBlcmZvcm1TaXplQ29sdW1uc1RvRml0KGUuYXBpKTtcbiAgICB9XG4gIH1cblxuICBpbnRlcm5hbEdyaWRGaXJzdERhdGFSZW5kZXJlZChlOiBGaXJzdERhdGFSZW5kZXJlZEV2ZW50KSB7XG4gICAgdGhpcy5wZXJmb3JtU2l6ZUNvbHVtbnNUb0ZpdChlLmFwaSk7XG4gICAgdGhpcy5oZWFkZXJIZWlnaHRTZXR0ZXIoKTtcbiAgfVxuXG4gIGhhbmRsZUNvbHVtblJlc2l6ZWQoZSkge1xuICAgIHRoaXMuaGVhZGVySGVpZ2h0U2V0dGVyKCk7XG4gIH1cblxuICBwcml2YXRlIHBlcmZvcm1TaXplQ29sdW1uc1RvRml0KGFwaTogR3JpZEFwaSkge1xuICAgIGlmICh0aGlzLnNpemVDb2x1bW5zVG9GaXQpIHtcbiAgICAgIGFwaS5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQYWdlU2l6ZSgpIHtcbiAgICBjb25zdCBwYWdpbmdQYW5lbCA9XG4gICAgICB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1wYWdpbmctcGFuZWwnKTtcblxuICAgIGNvbnN0IHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuXG4gICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uU2V0UGFnZVNpemUoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSk7XG4gICAgICB0aGlzLmdyaWRBcGkuc2V0Q2FjaGVCbG9ja1NpemUoTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHRpb24xID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG5cbiAgICBvcHRpb24xLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnMTAnKTtcblxuICAgIG9wdGlvbjEudGV4dENvbnRlbnQgPSAnMTAnO1xuXG4gICAgY29uc3Qgb3B0aW9uMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuXG4gICAgb3B0aW9uMi5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJzIwJyk7XG5cbiAgICBvcHRpb24yLnRleHRDb250ZW50ID0gJzIwJztcblxuICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24xKTtcblxuICAgIHNlbGVjdC5hcHBlbmRDaGlsZChvcHRpb24yKTtcblxuICAgIHNlbGVjdC52YWx1ZSA9ICcyMCc7XG5cbiAgICBzZWxlY3Quc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3doaXRlJztcblxuICAgIHNlbGVjdC5zdHlsZS5jb2xvciA9ICdncmF5JztcblxuICAgIHNlbGVjdC5zdHlsZS5wYWRkaW5nID0gJzJweCc7XG5cbiAgICBzZWxlY3Quc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCBncmF5JztcblxuICAgIHNlbGVjdC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNHB4JztcblxuICAgIHBhZ2luZ1BhbmVsLmFwcGVuZENoaWxkKHNlbGVjdCk7XG4gIH1cblxuICBwcml2YXRlIGhlYWRlckhlaWdodFNldHRlcigpIHtcbiAgICBjb25zdCBwYWRkaW5nID0gMjA7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5oZWFkZXJIZWlnaHRHZXR0ZXIoKSArIHBhZGRpbmc7XG4gICAgdGhpcy5ncmlkQXBpLnNldEhlYWRlckhlaWdodChoZWlnaHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoZWFkZXJIZWlnaHRHZXR0ZXIoKSB7XG4gICAgY29uc3QgY29sdW1uSGVhZGVyVGV4dHMgPSBbXG4gICAgICAuLi4oZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLmFnLWhlYWRlci1jZWxsLXRleHQnKSBhcyBhbnkpLFxuICAgIF07XG5cbiAgICBjb25zdCBjbGllbnRIZWlnaHRzID0gY29sdW1uSGVhZGVyVGV4dHMubWFwKFxuICAgICAgKGhlYWRlclRleHQpID0+IGhlYWRlclRleHQuY2xpZW50SGVpZ2h0XG4gICAgKTtcbiAgICBjb25zdCB0YWxsZXN0SGVhZGVyVGV4dEhlaWdodCA9IE1hdGgubWF4KC4uLmNsaWVudEhlaWdodHMpO1xuXG4gICAgcmV0dXJuIHRhbGxlc3RIZWFkZXJUZXh0SGVpZ2h0O1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlUmVmcmVzaEJ0bigpIHtcbiAgICBjb25zdCBwYWdpbmdQYW5lbCA9XG4gICAgICB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZy1wYWdpbmctcGFuZWwnKTtcblxuICAgIGNvbnN0IHJlZkJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblxuICAgIHJlZkJ0bi5jbGFzc0xpc3QuYWRkKCdmYXInKTtcbiAgICByZWZCdG4uY2xhc3NMaXN0LmFkZCgnZmEtc3luYycpO1xuXG4gICAgcmVmQnRuLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcblxuICAgIHJlZkJ0bi50aXRsZSA9IEFYVHJhbnNsYXRvci5nZXQoJ2NvbW1vbi5yZWZyZXNoJyk7XG5cbiAgICByZWZCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5nZXRDdXJyZW50UGFnZU51bWJlcigpLmN1cnJlbnQ7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9KTtcblxuICAgIHBhZ2luZ1BhbmVsLmFwcGVuZENoaWxkKHJlZkJ0bik7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5leHRCdG5DbGljaygpIHtcbiAgICBjb25zdCBuZXh0UGFnZUJ0biA9IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICdbcmVmPVwiYnROZXh0XCJdJ1xuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBuZXh0UGFnZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmdldEN1cnJlbnRQYWdlTnVtYmVyKCkuY3VycmVudDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQmFja0J0bkNsaWNrKCkge1xuICAgIGNvbnN0IGJhY2tQYWdlQnRuID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ1tyZWY9XCJidFByZXZpb3VzXCJdJ1xuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBiYWNrUGFnZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmdldEN1cnJlbnRQYWdlTnVtYmVyKCkuY3VycmVudDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTGFzdEJ0bkNsaWNrKCkge1xuICAgIGNvbnN0IGJhY2tQYWdlQnRuID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ1tyZWY9XCJidExhc3RcIl0nXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGJhY2tQYWdlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuZ2V0Q3VycmVudFBhZ2VOdW1iZXIoKS5jdXJyZW50O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVGaXRzdEJ0bkNsaWNrKCkge1xuICAgIGNvbnN0IGJhY2tQYWdlQnRuID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgJ1tyZWY9XCJidEZpcnN0XCJdJ1xuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBiYWNrUGFnZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmdldEN1cnJlbnRQYWdlTnVtYmVyKCkuY3VycmVudDtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LWdyaWQtdG9vbGJhclwiICpuZ0lmPVwidG9vbGJhclwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJheC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG48IS0tIFtlbmFibGVTb3J0aW5nXT1cInRydWVcIiAgW2VuYWJsZUNvbFJlc2l6ZV09XCJ0cnVlXCIgW2VuYWJsZUZpbHRlcl09XCJhbGxvd0ZpbHRlcmluZ1wiICAtLT5cblxuPGFnLWdyaWQtYW5ndWxhclxuICAqbmdJZj1cImdyaWRWaWV3XCJcbiAgY2xhc3M9XCJhZy10aGVtZS1iYWxoYW1cIlxuICBbZ2V0Um93Q2xhc3NdPVwiaW50ZXJuYWxHZXRSb3dDbGFzc1wiXG4gIFtzdXBwcmVzc0NvcHlSb3dzVG9DbGlwYm9hcmRdPVwidHJ1ZVwiXG4gIFtlbmFibGVSYW5nZVNlbGVjdGlvbl09XCJlbmFibGVSYW5nZVNlbGVjdGlvblwiXG4gIFtzZXJ2ZXJTaWRlU3RvcmVUeXBlXT1cIidwYXJ0aWFsJ1wiXG4gIFtzdHlsZS5oZWlnaHRdPVwiaW50ZXJuYWxIZWlnaHRcIlxuICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzXCJcbiAgW2VuYWJsZVJ0bF09XCJydGxcIlxuICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgW3Jvd0dyb3VwUGFuZWxTaG93XT1cInJvd0dyb3VwUGFuZWxTaG93XCJcbiAgW3Jvd01vZGVsVHlwZV09XCJyb3dNb2RlbFR5cGVcIlxuICBbZGV0YWlsUm93SGVpZ2h0XT1cImRldGFpbFJvd0hlaWdodFwiXG4gIFtyb3dIZWlnaHRdPVwicm93SGVpZ2h0XCJcbiAgW3BhZ2luYXRpb25BdXRvUGFnZVNpemVdPVwicGFnaW5hdGlvbkF1dG9QYWdlU2l6ZVwiXG4gIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvblBhZ2VTaXplXCJcbiAgW3N1cHByZXNzTWVudUhpZGVdPVwidHJ1ZVwiXG4gIFttYXhDb25jdXJyZW50RGF0YXNvdXJjZVJlcXVlc3RzXT1cIm1heENvbmN1cnJlbnREYXRhc291cmNlUmVxdWVzdHNcIlxuICBbYmxvY2tMb2FkRGVib3VuY2VNaWxsaXNdPVwiYmxvY2tMb2FkRGVib3VuY2VNaWxsaXNcIlxuICBbZnJhbWV3b3JrQ29tcG9uZW50c109XCJmcmFtZXdvcmtDb21wb25lbnRzXCJcbiAgW2lzRnVsbFdpZHRoQ2VsbF09XCJpc0Z1bGxXaWR0aENlbGxcIlxuICBbcm93U2VsZWN0aW9uXT1cInNlbGVjdGlvbk1vZGVcIlxuICBbcm93TXVsdGlTZWxlY3RXaXRoQ2xpY2tdPVwicm93TXVsdGlTZWxlY3RXaXRoQ2xpY2tcIlxuICBbZnVsbFdpZHRoQ2VsbFJlbmRlcmVyRnJhbWV3b3JrXT1cImZ1bGxXaWR0aENlbGxSZW5kZXJlckZyYW1ld29ya1wiXG4gIFtjYWNoZUJsb2NrU2l6ZV09XCJjYWNoZUJsb2NrU2l6ZVwiXG4gIFtmdWxsV2lkdGhDZWxsUmVuZGVyZXJQYXJhbXNdPVwiZnVsbFdpZHRoQ2VsbFJlbmRlcmVyUGFyYW1zXCJcbiAgKGNvbHVtblJlc2l6ZWQpPVwiaGFuZGxlQ29sdW1uUmVzaXplZCgkZXZlbnQpXCJcbiAgKGNlbGxDbGlja2VkKT1cImludGVybmFsR3JpZENlbGxDbGlja2VkKCRldmVudClcIlxuICAoY2VsbERvdWJsZUNsaWNrZWQpPVwiaW50ZXJuYWxHcmlkQ2VsbERvdWJsZUNsaWNrZWQoJGV2ZW50KVwiXG4gIChjZWxsRm9jdXNlZCk9XCJpbnRlcm5hbEdyaWRDZWxsRm9jdXNlZCgkZXZlbnQpXCJcbiAgKHJvd0NsaWNrZWQpPVwiaW50ZXJuYWxHcmlkUm93Q2xpY2tlZCgkZXZlbnQpXCJcbiAgKHNlbGVjdGlvbkNoYW5nZWQpPVwiaW50ZXJuYWxHcmlkU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcbiAgKHJvd1NlbGVjdGVkKT1cInJvd1NlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gIChyb3dEb3VibGVDbGlja2VkKT1cImludGVybmFsR3JpZFJvd0RvdWJsZUNsaWNrZWQoJGV2ZW50KVwiXG4gIChncmlkUmVhZHkpPVwiaW50ZXJuYWxHcmlkUmVhZHkoJGV2ZW50KVwiXG4gIFtncm91cFNlbGVjdHNDaGlsZHJlbl09XCJncm91cFNlbGVjdHNDaGlsZHJlblwiXG4gIFtzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uXT1cInN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb25cIlxuICBbZ3JvdXBTZWxlY3RzRmlsdGVyZWRdPVwidHJ1ZVwiXG4gIFtzdXBwcmVzc0NlbGxTZWxlY3Rpb25dPVwic3VwcHJlc3NDZWxsU2VsZWN0aW9uXCJcbiAgW2F1dG9Hcm91cENvbHVtbkRlZl09XCJhdXRvR3JvdXBDb2x1bW5EZWZcIlxuICBbc3VwcHJlc3NBZ2dGdW5jSW5IZWFkZXJdPVwidHJ1ZVwiXG4gIFt0cmVlRGF0YV09XCJ0cmVlRGF0YVwiXG4gIFthbmltYXRlUm93c109XCJ0cnVlXCJcbiAgW2lzU2VydmVyU2lkZUdyb3VwXT1cImlzU2VydmVyU2lkZUdyb3VwXCJcbiAgW2dldFNlcnZlclNpZGVHcm91cEtleV09XCJnZXRTZXJ2ZXJTaWRlR3JvdXBLZXlcIlxuICBbbWFzdGVyRGV0YWlsXT1cIm1hc3RlckRldGFpbFwiXG4gIFtkZXRhaWxDZWxsUmVuZGVyZXJQYXJhbXNdPVwiZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zXCJcbiAgW2RldGFpbENlbGxSZW5kZXJlcl09XCJkZXRhaWxDZWxsUmVuZGVyZXJcIlxuICAoZ3JpZFNpemVDaGFuZ2VkKT1cImludGVybmFsR3JpZFNpemVDaGFuZ2VkKCRldmVudClcIlxuICAoZmlyc3REYXRhUmVuZGVyZWQpPVwiaW50ZXJuYWxHcmlkRmlyc3REYXRhUmVuZGVyZWQoJGV2ZW50KVwiXG4gIFtsb2NhbGVUZXh0XT1cImxvY2FsZVRleHRcIlxuICBbZ3JvdXBIaWRlT3BlblBhcmVudHNdPVwiZ3JvdXBIaWRlT3BlblBhcmVudHNcIlxuICBbYWxsb3dDb250ZXh0TWVudVdpdGhDb250cm9sS2V5XT1cImZhbHNlXCJcbiAgW2dldE1haW5NZW51SXRlbXNdPVwiZ2V0TWFpbk1lbnVJdGVtc1wiXG4+XG48L2FnLWdyaWQtYW5ndWxhcj5cblxuPCEtLSAoZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQpPVwiZGlzcGxheWVkQ29sdW1uc0NoYW5nZWQoJGV2ZW50KVwiICAtLT5cbiJdfQ==
|
@@ -114,7 +114,7 @@ export class AXDataLovPopupComponent extends AXBasePopupPageComponent {
|
|
114
114
|
}
|
115
115
|
}
|
116
116
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXDataLovPopupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
117
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AXDataLovPopupComponent, selector: "ng-component", viewQueries: [{ propertyName: "grid", first: true, predicate: ["grid"], descendants: true, static: true }, { propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div style=\"height: 70vh; padding: 0.5em\">\n <div style=\"height: calc(98%)\">\n <ax-data-grid\n [showRefreshButton]=\"false\"\n [pagination]=\"pagination\"\n [paginationAutoPageSize]=\"paginationAutoPageSize\"\n [paginationPageSize]=\"paginationPageSize\"\n [rtl]=\"rtl\"\n [maxConcurrentDatasourceRequests]=\"maxConcurrentDatasourceRequests\"\n [blockLoadDebounceMillis]=\"blockLoadDebounceMillis\"\n [suppressRowClickSelection]=\"false\"\n [keyField]=\"keyField\"\n [hasChildField]=\"hasChildField\"\n [selectRow]=\"selectedItems\"\n #grid\n [columns]=\"columns\"\n [remoteOperation]=\"true\"\n [selectionMode]=\"selectionMode\"\n (rowDbClick)=\"rowDoubleClicked($event)\"\n (rowSelectionChange)=\"rowSelectionChange($event)\"\n [dataSource]=\"dataSource\"\n >\n <ax-toolbar>\n <ax-toolbar-search #searchBox style=\"width: 100%\"></ax-toolbar-search>\n </ax-toolbar>\n <ax-selection-column\n *ngIf=\"selectionMode == 'single' ? false : true\"\n ></ax-selection-column>\n <!-- <ax-data-source [provideData]=\"dataSource.provideData\">\n </ax-data-source> -->\n </ax-data-grid>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AXDataGridComponent, selector: "ax-data-grid", inputs: ["paginationAutoPageSize", "paginationPageSize", "remoteOperation", "rowMultiSelectWithClick", "suppressRowClickSelection", "suppressCellSelection", "sizeColumnsToFit", "showCheckBox", "floatingFilter", "autoExpand", "rowSelectableConditionField", "selectionMode", "pagination", "selectRow", "rowGroupPanelShow", "loadOnInit", "enableRangeSelection", "keyField", "hasChildField", "rowHeight", "groupHideOpenParents", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "showRefreshButton", "rowClass", "rtl", "searchText", "filter", "columns", "dataSource"], outputs: ["columnsChange", "cellClick", "cellDbClick", "cellFocuse", "rowClick", "rowDbClick", "selectionChanged", "rowSelectionChange", "onRowSelectionChanged"] }, { kind: "component", type: i3.AXGridSelectionColumn, selector: "ax-selection-column", inputs: ["condition", "pinned", "width"] }, { kind: "component", type: i4.AXToolbarComponent, selector: "ax-toolbar" }, { kind: "component", type: i4.AXToolbarSearchComponent, selector: "ax-toolbar-search", inputs: ["text"], outputs: ["onValueChanged"] }] });
|
117
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AXDataLovPopupComponent, selector: "ng-component", viewQueries: [{ propertyName: "grid", first: true, predicate: ["grid"], descendants: true, static: true }, { propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div style=\"height: 70vh; padding: 0.5em\">\n <div style=\"height: calc(98%)\">\n <ax-data-grid\n [showRefreshButton]=\"false\"\n [pagination]=\"pagination\"\n [paginationAutoPageSize]=\"paginationAutoPageSize\"\n [paginationPageSize]=\"paginationPageSize\"\n [rtl]=\"rtl\"\n [maxConcurrentDatasourceRequests]=\"maxConcurrentDatasourceRequests\"\n [blockLoadDebounceMillis]=\"blockLoadDebounceMillis\"\n [suppressRowClickSelection]=\"false\"\n [keyField]=\"keyField\"\n [hasChildField]=\"hasChildField\"\n [selectRow]=\"selectedItems\"\n #grid\n [columns]=\"columns\"\n [remoteOperation]=\"true\"\n [selectionMode]=\"selectionMode\"\n (rowDbClick)=\"rowDoubleClicked($event)\"\n (rowSelectionChange)=\"rowSelectionChange($event)\"\n [dataSource]=\"dataSource\"\n >\n <ax-toolbar>\n <ax-toolbar-search #searchBox style=\"width: 100%\"></ax-toolbar-search>\n </ax-toolbar>\n <ax-selection-column\n *ngIf=\"selectionMode == 'single' ? false : true\"\n ></ax-selection-column>\n <!-- <ax-data-source [provideData]=\"dataSource.provideData\">\n </ax-data-source> -->\n </ax-data-grid>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AXDataGridComponent, selector: "ax-data-grid", inputs: ["paginationAutoPageSize", "paginationPageSize", "remoteOperation", "rowMultiSelectWithClick", "suppressRowClickSelection", "suppressCellSelection", "sizeColumnsToFit", "showCheckBox", "floatingFilter", "autoExpand", "rowSelectableConditionField", "selectionMode", "pagination", "selectRow", "rowGroupPanelShow", "loadOnInit", "enableRangeSelection", "keyField", "hasChildField", "rowHeight", "groupHideOpenParents", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "showRefreshButton", "autoNavigatePage", "rowClass", "rtl", "searchText", "filter", "columns", "dataSource"], outputs: ["columnsChange", "cellClick", "cellDbClick", "cellFocuse", "rowClick", "rowDbClick", "selectionChanged", "rowSelectionChange", "onRowSelectionChanged"] }, { kind: "component", type: i3.AXGridSelectionColumn, selector: "ax-selection-column", inputs: ["condition", "pinned", "width"] }, { kind: "component", type: i4.AXToolbarComponent, selector: "ax-toolbar" }, { kind: "component", type: i4.AXToolbarSearchComponent, selector: "ax-toolbar-search", inputs: ["text"], outputs: ["onValueChanged"] }] });
|
118
118
|
}
|
119
119
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXDataLovPopupComponent, decorators: [{
|
120
120
|
type: Component,
|