ngx-sumax-erp-components 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/ng-select-multiple/ng-select-multiple.component.mjs +48 -9
- package/esm2022/lib/ng-select-simple/ng-select-simple.component.mjs +3 -3
- package/esm2022/lib/sc-ag-grid/sc-ag-grid-customizable/sc-ag-grid-customizable.component.mjs +12 -3
- package/esm2022/lib/utils/NgSelectUtils.mjs +20 -0
- package/fesm2022/ngx-sumax-erp-components.mjs +78 -11
- package/fesm2022/ngx-sumax-erp-components.mjs.map +1 -1
- package/lib/ng-select-multiple/ng-select-multiple.component.d.ts +12 -3
- package/lib/sc-ag-grid/sc-ag-grid-customizable/sc-ag-grid-customizable.component.d.ts +4 -1
- package/lib/utils/NgSelectUtils.d.ts +4 -0
- package/package.json +1 -1
package/esm2022/lib/sc-ag-grid/sc-ag-grid-customizable/sc-ag-grid-customizable.component.mjs
CHANGED
|
@@ -84,6 +84,9 @@ export class ScAgGridCustomizableComponent {
|
|
|
84
84
|
this.enableRangeSelection = false;
|
|
85
85
|
this.noRowsOverlayComponent = "";
|
|
86
86
|
this.noRowsOverlayComponentParams = {};
|
|
87
|
+
this.tooltipHideDelay = 1000;
|
|
88
|
+
this.tooltipShowDelay = 100;
|
|
89
|
+
this.tooltipShowMode = 'standard';
|
|
87
90
|
this.validatePasteCell = (evtSource, evtTarget) => Promise.resolve(true);
|
|
88
91
|
this.validatePasteRows = (evtSource, evtTarget) => Promise.resolve(true);
|
|
89
92
|
//#region Output
|
|
@@ -423,14 +426,14 @@ export class ScAgGridCustomizableComponent {
|
|
|
423
426
|
}
|
|
424
427
|
}
|
|
425
428
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScAgGridCustomizableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
426
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ScAgGridCustomizableComponent, selector: "sc-ag-grid-customizable", inputs: { isRowSelectable: "isRowSelectable", getRowStyle: "getRowStyle", fillSearch: "fillSearch", paginationPageSize: "paginationPageSize", searchWidth: "searchWidth", pageSizeOptions: "pageSizeOptions", pagination: "pagination", rowSelection: "rowSelection", columnDefs: "columnDefs", rowData: "rowData", configButtonsAction: "configButtonsAction", defaultCellRendererActions: "defaultCellRendererActions", visibleSearch: "visibleSearch", domLayout: "domLayout", height: "height", btnAdd: "btnAdd", rowDragManaged: "rowDragManaged", animateRows: "animateRows", useGridCopy: "useGridCopy", multiSortKey: "multiSortKey", showMenuDefault: "showMenuDefault", enableCellTextSelection: "enableCellTextSelection", suppressRowTransform: "suppressRowTransform", enableRangeSelection: "enableRangeSelection", noRowsOverlayComponent: "noRowsOverlayComponent", noRowsOverlayComponentParams: "noRowsOverlayComponentParams", validatePasteCell: "validatePasteCell", validatePasteRows: "validatePasteRows", frameworkComponents: "frameworkComponents", context: "context", overlayNoRowsTemplate: "overlayNoRowsTemplate" }, outputs: { onChangeFilter: "onChangeFilter", onAddRow: "onAddRow", onGridAddRow: "onGridAddRow", onEditRow: "onEditRow", onDeleteRow: "onDeleteRow", onCellKeyDown: "onCellKeyDown", onCellStopEditing: "onCellStopEditing", onButtonActionAgGrid: "onButtonActionAgGrid", onButtonActionHeader: "onButtonActionHeader", onGridReady: "onGridReady", onGridSelectChange: "onGridSelectChange", onGridChange: "onGridChange", onRowDragEnd: "onRowDragEnd", onRowEditingStarted: "onRowEditingStarted", rowClicked: "rowClicked", rowDoubleClicked: "rowDoubleClicked", onRowSelected: "onRowSelected", cellValueChanged: "cellValueChanged", onCellContextMenu: "onCellContextMenu", onPasteMenu: "onPasteMenu", onCopyMenu: "onCopyMenu", afterPasteCell: "afterPasteCell", beforePasteCell: "beforePasteCell", afterPasteRows: "afterPasteRows", beforePasteRows: "beforePasteRows" }, host: { properties: { "id": "idScAgGridCustomizableComponent" }, classAttribute: "sc-ag-grid-customizable" }, queries: [{ propertyName: "viewChildrenButtonHeaders", predicate: ScAgGridButtonHeader, descendants: true }], viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }, { propertyName: "_scAgGridPagination", first: true, predicate: ["scAgGridPagination"], descendants: true }, { propertyName: "buttonAdd", first: true, predicate: ["buttonAdd"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"w-100\">\r\n <!--===========================================-->\r\n <!-- AG-GRID HEADER -->\r\n <!--===========================================-->\r\n <div\r\n class=\"row justify-content-between align-items-center my-2\"\r\n *ngIf=\"visibleSearch || btnAdd?.visible || viewChildrenButtonHeaders?.length\">\r\n <div [class]=\"fillSearch ? 'col-12 my-2' : searchClass\" *ngIf=\"visibleSearch\">\r\n <input-search (onChange)=\"changeFilter($event)\"></input-search>\r\n </div>\r\n\r\n <div\r\n [class]=\"visibleSearch ? 'col-sm-12 col-md-6 col-lg-6 col-xl-7 col-12' : 'col-12'\"\r\n class=\"sc-ag-grid-header-actions d-flex justify-content-end\"\r\n *ngIf=\"btnAdd?.visible || viewChildrenButtonHeaders?.length || configButtonsAction?.header || configHeader != null\">\r\n <!-- Header actions buttons -->\r\n <ng-container *ngIf=\"configButtonsAction && configHeader\">\r\n <ng-container *ngIf=\"configHeader.disabled === false; else templateAction\">\r\n <ng-container [ngTemplateOutlet]=\"tempActions\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #templateAction>\r\n <ng-container *ngIf=\"selectedRows.length === 0; else tempActions\">\r\n <button class=\"btn-icon btn-width btn btn-primary btn-sm\" disabled>\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #tempActions>\r\n <button *ngIf=\"hideHeaderMenuAction(); else templateHeaderAction\" class=\"btn-icon btn-width btn btn-primary btn-sm\">\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n\r\n <ng-template #templateHeaderAction>\r\n <button type=\"button\" class=\"btn-icon btn-width btn btn-primary btn-sm\" [matMenuTriggerFor]=\"panel.menu\">\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n\r\n <sc-menu-panel #panel class=\"d-none\" [subMenus]=\"configHeader.submenu ?? []\"></sc-menu-panel>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n <!-- End header actions buttons -->\r\n\r\n <!-- Other buttons -->\r\n <ng-container *ngIf=\"viewChildrenButtonHeaders?.length\">\r\n <ng-container\r\n *ngFor=\"let viewChildrenButtonHeader of viewChildrenButtonHeaders\"\r\n [ngTemplateOutlet]=\"viewChildrenButtonHeader.template\">\r\n </ng-container>\r\n </ng-container>\r\n <!--End other buttons -->\r\n\r\n <!-- Add button -->\r\n <ng-container *ngIf=\"btnAdd?.visible\">\r\n <button\r\n type=\"button\"\r\n class=\"btn-width btn btn-warning btn-sm\"\r\n (click)=\"onAddRowEmit()\"\r\n #buttonAdd\r\n [disabled]=\"btnAdd.disabled ?? false\">\r\n Agregar\r\n </button>\r\n </ng-container>\r\n <!--End add button -->\r\n </div>\r\n </div>\r\n <!--===========================================-->\r\n <!-- AG-GRID HEADER END -->\r\n <!--===========================================-->\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\" [ngStyle]=\"ngStyleContainer\">\r\n <ag-grid-angular\r\n #agGrid\r\n class=\"ag-theme-balham\"\r\n [ngStyle]=\"ngStyleAgGrid\"\r\n [columnDefs]=\"columnDefsAndAddCellActions\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [components]=\"_frameworkComponents\"\r\n [context]=\"_context\"\r\n [rowSelection]=\"rowSelection\"\r\n [isRowSelectable]=\"isRowSelectable\"\r\n [rowDragManaged]=\"rowDragManaged\"\r\n [domLayout]=\"domLayout\"\r\n [animateRows]=\"animateRows\"\r\n [getRowStyle]=\"getRowStyle\"\r\n [enableRangeSelection]=\"enableRangeSelection\"\r\n [suppressRowTransform]=\"suppressRowTransform\"\r\n [suppressMoveWhenRowDragging]=\"animateRows\"\r\n [overlayNoRowsTemplate]=\"overlayNoRowsTemplate\"\r\n [overlayLoadingTemplate]=\"overlayLoadingTemplate\"\r\n [noRowsOverlayComponentParams]=\"noRowsOverlayComponentParams\"\r\n [suppressRowClickSelection]=\"suppressRowClickSelection\"\r\n [suppressDragLeaveHidesColumns]=\"suppressDragLeaveHidesColumns\"\r\n [suppressScrollOnNewData]=\"suppressScrollOnNewData\"\r\n [suppressPropertyNamesCheck]=\"true\"\r\n [paginationPageSize]=\"pagination ? paginationPageSize : undefined\"\r\n [pagination]=\"pagination\"\r\n [suppressPaginationPanel]=\"suppressPaginationPanel\"\r\n (rowClicked)=\"rowClicked.emit($event)\"\r\n (rowDoubleClicked)=\"rowDoubleClicked.emit($event)\"\r\n (rowSelected)=\"onRowSelected.emit($event)\"\r\n (paginationChanged)=\"paginationChanged()\"\r\n (gridReady)=\"gridReady($event)\"\r\n (rowDragEnd)=\"rowDragEndEmit($event)\"\r\n (cellContextMenu)=\"cellContextMenu($event)\"\r\n [enableCellTextSelection]=\"enableCellTextSelection\"\r\n (rowDataUpdated)=\"rowDataChanged($event)\"\r\n (rowEditingStarted)=\"onRowEditingStarted.emit($event)\"\r\n (cellValueChanged)=\"cellValueChanged.emit($event)\"\r\n (selectionChanged)=\"selectionChanged()\"\r\n (cellEditingStopped)=\"cellStopEditing($event)\"\r\n (cellKeyDown)=\"cellKeyDown($any($event))\"\r\n [multiSortKey]=\"multiSortKey\"\r\n oncontextmenu=\"return false;\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!--===========================================-->\r\n <!-- AG-GRID PAGINATION -->\r\n <!--===========================================-->\r\n <div class=\"row\" *ngIf=\"pagination\">\r\n <div class=\"col-12\">\r\n <sc-ag-grid-pagination\r\n #scAgGridPagination\r\n [gridApi]=\"gridApi\"\r\n [paginationPageSize]=\"paginationPageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"></sc-ag-grid-pagination>\r\n </div>\r\n </div>\r\n <!--===========================================-->\r\n <!-- AG-GRID PAGINATION END -->\r\n <!--===========================================-->\r\n</div>\r\n\r\n<div\r\n *ngIf=\"showMenuDefault\"\r\n oncontextmenu=\"return false;\"\r\n style=\"position: fixed; width: 0px; height: 0px\"\r\n [ngStyle]=\"{ top: bottomMenu + 'px', left: leftMenu + 'px' }\">\r\n <mat-menu oncontextmenu=\"return false;\" #scMenu=\"matMenu\">\r\n <button oncontextmenu=\"return false;\" (click)=\"copyMenu(cellContextMenuActual!)\" mat-menu-item>\r\n <mat-icon>content_copy</mat-icon> <span>Copiar</span>\r\n </button>\r\n <button [disabled]=\"disabledPasteMenu\" oncontextmenu=\"return false;\" (click)=\"pasteMenu(cellContextMenuActual!)\" mat-menu-item>\r\n <mat-icon>content_paste</mat-icon><span>Pegar</span>\r\n </button>\r\n </mat-menu>\r\n <button oncontextmenu=\"return false;\" style=\"visibility: hidden\" mat-button [matMenuTriggerFor]=\"scMenu\" #menuTrigger=\"matMenuTrigger\">\r\n Menu\r\n </button>\r\n</div>\r\n", styles: [".cell-wrap-text{white-space:normal!important}.ag-header__center .ag-header-cell-text{display:block;width:100%;text-align:center!important}.ag-header__right .ag-header-cell-text{display:block;width:100%;text-align:right!important}.sc-ag-grid-header-actions{display:flex;gap:.6rem}.sc-ag-grid-header-actions .btn-width{width:6.5rem}.sc-ag-grid-header-actions .btn-icon em{margin-left:10px}.material-icons{font-size:24px!important}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "excludeHiddenColumnsFromQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "suppressChartToolPanelsButton", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "functionsPassive", "enableGroupEdit", "initialState", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "gridPreDestroyed", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.ScAgGridPaginationComponent, selector: "sc-ag-grid-pagination", inputs: ["paginationPageSize", "gridApi", "pageSizeOptions"] }, { kind: "component", type: i6.InputSearchComponent, selector: "input-search", outputs: ["onChange"] }, { kind: "component", type: i7.ScMenuPanelComponent, selector: "sc-menu-panel", inputs: ["subMenus", "params"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
429
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ScAgGridCustomizableComponent, selector: "sc-ag-grid-customizable", inputs: { isRowSelectable: "isRowSelectable", getRowStyle: "getRowStyle", fillSearch: "fillSearch", paginationPageSize: "paginationPageSize", searchWidth: "searchWidth", pageSizeOptions: "pageSizeOptions", pagination: "pagination", rowSelection: "rowSelection", columnDefs: "columnDefs", rowData: "rowData", configButtonsAction: "configButtonsAction", defaultCellRendererActions: "defaultCellRendererActions", visibleSearch: "visibleSearch", domLayout: "domLayout", height: "height", btnAdd: "btnAdd", rowDragManaged: "rowDragManaged", animateRows: "animateRows", useGridCopy: "useGridCopy", multiSortKey: "multiSortKey", showMenuDefault: "showMenuDefault", enableCellTextSelection: "enableCellTextSelection", suppressRowTransform: "suppressRowTransform", enableRangeSelection: "enableRangeSelection", noRowsOverlayComponent: "noRowsOverlayComponent", noRowsOverlayComponentParams: "noRowsOverlayComponentParams", tooltipHideDelay: "tooltipHideDelay", tooltipShowDelay: "tooltipShowDelay", tooltipShowMode: "tooltipShowMode", validatePasteCell: "validatePasteCell", validatePasteRows: "validatePasteRows", frameworkComponents: "frameworkComponents", context: "context", overlayNoRowsTemplate: "overlayNoRowsTemplate" }, outputs: { onChangeFilter: "onChangeFilter", onAddRow: "onAddRow", onGridAddRow: "onGridAddRow", onEditRow: "onEditRow", onDeleteRow: "onDeleteRow", onCellKeyDown: "onCellKeyDown", onCellStopEditing: "onCellStopEditing", onButtonActionAgGrid: "onButtonActionAgGrid", onButtonActionHeader: "onButtonActionHeader", onGridReady: "onGridReady", onGridSelectChange: "onGridSelectChange", onGridChange: "onGridChange", onRowDragEnd: "onRowDragEnd", onRowEditingStarted: "onRowEditingStarted", rowClicked: "rowClicked", rowDoubleClicked: "rowDoubleClicked", onRowSelected: "onRowSelected", cellValueChanged: "cellValueChanged", onCellContextMenu: "onCellContextMenu", onPasteMenu: "onPasteMenu", onCopyMenu: "onCopyMenu", afterPasteCell: "afterPasteCell", beforePasteCell: "beforePasteCell", afterPasteRows: "afterPasteRows", beforePasteRows: "beforePasteRows" }, host: { properties: { "id": "idScAgGridCustomizableComponent" }, classAttribute: "sc-ag-grid-customizable" }, queries: [{ propertyName: "viewChildrenButtonHeaders", predicate: ScAgGridButtonHeader, descendants: true }], viewQueries: [{ propertyName: "menuTrigger", first: true, predicate: ["menuTrigger"], descendants: true }, { propertyName: "_scAgGridPagination", first: true, predicate: ["scAgGridPagination"], descendants: true }, { propertyName: "buttonAdd", first: true, predicate: ["buttonAdd"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"w-100\">\r\n <!--===========================================-->\r\n <!-- AG-GRID HEADER -->\r\n <!--===========================================-->\r\n <div\r\n class=\"row justify-content-between align-items-center my-2\"\r\n *ngIf=\"visibleSearch || btnAdd?.visible || viewChildrenButtonHeaders?.length\">\r\n <div [class]=\"fillSearch ? 'col-12 my-2' : searchClass\" *ngIf=\"visibleSearch\">\r\n <input-search (onChange)=\"changeFilter($event)\"></input-search>\r\n </div>\r\n\r\n <div\r\n [class]=\"visibleSearch ? 'col-sm-12 col-md-6 col-lg-6 col-xl-7 col-12' : 'col-12'\"\r\n class=\"sc-ag-grid-header-actions d-flex justify-content-end\"\r\n *ngIf=\"btnAdd?.visible || viewChildrenButtonHeaders?.length || configButtonsAction?.header || configHeader != null\">\r\n <!-- Header actions buttons -->\r\n <ng-container *ngIf=\"configButtonsAction && configHeader\">\r\n <ng-container *ngIf=\"configHeader.disabled === false; else templateAction\">\r\n <ng-container [ngTemplateOutlet]=\"tempActions\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #templateAction>\r\n <ng-container *ngIf=\"selectedRows.length === 0; else tempActions\">\r\n <button class=\"btn-icon btn-width btn btn-primary btn-sm\" disabled>\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #tempActions>\r\n <button *ngIf=\"hideHeaderMenuAction(); else templateHeaderAction\" class=\"btn-icon btn-width btn btn-primary btn-sm\">\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n\r\n <ng-template #templateHeaderAction>\r\n <button type=\"button\" class=\"btn-icon btn-width btn btn-primary btn-sm\" [matMenuTriggerFor]=\"panel.menu\">\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n\r\n <sc-menu-panel #panel class=\"d-none\" [subMenus]=\"configHeader.submenu ?? []\"></sc-menu-panel>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n <!-- End header actions buttons -->\r\n\r\n <!-- Other buttons -->\r\n <ng-container *ngIf=\"viewChildrenButtonHeaders?.length\">\r\n <ng-container\r\n *ngFor=\"let viewChildrenButtonHeader of viewChildrenButtonHeaders\"\r\n [ngTemplateOutlet]=\"viewChildrenButtonHeader.template\">\r\n </ng-container>\r\n </ng-container>\r\n <!--End other buttons -->\r\n\r\n <!-- Add button -->\r\n <ng-container *ngIf=\"btnAdd?.visible\">\r\n <button\r\n type=\"button\"\r\n class=\"btn-width btn btn-warning btn-sm\"\r\n (click)=\"onAddRowEmit()\"\r\n #buttonAdd\r\n [disabled]=\"btnAdd.disabled ?? false\">\r\n Agregar\r\n </button>\r\n </ng-container>\r\n <!--End add button -->\r\n </div>\r\n </div>\r\n <!--===========================================-->\r\n <!-- AG-GRID HEADER END -->\r\n <!--===========================================-->\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\" [ngStyle]=\"ngStyleContainer\">\r\n <ag-grid-angular\r\n #agGrid\r\n class=\"ag-theme-balham\"\r\n [ngStyle]=\"ngStyleAgGrid\"\r\n [columnDefs]=\"columnDefsAndAddCellActions\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [components]=\"_frameworkComponents\"\r\n [context]=\"_context\"\r\n [rowSelection]=\"rowSelection\"\r\n [isRowSelectable]=\"isRowSelectable\"\r\n [rowDragManaged]=\"rowDragManaged\"\r\n [domLayout]=\"domLayout\"\r\n [animateRows]=\"animateRows\"\r\n [getRowStyle]=\"getRowStyle\"\r\n [enableRangeSelection]=\"enableRangeSelection\"\r\n [suppressRowTransform]=\"suppressRowTransform\"\r\n [suppressMoveWhenRowDragging]=\"animateRows\"\r\n [overlayNoRowsTemplate]=\"overlayNoRowsTemplate\"\r\n [overlayLoadingTemplate]=\"overlayLoadingTemplate\"\r\n [noRowsOverlayComponentParams]=\"noRowsOverlayComponentParams\"\r\n [suppressRowClickSelection]=\"suppressRowClickSelection\"\r\n [suppressDragLeaveHidesColumns]=\"suppressDragLeaveHidesColumns\"\r\n [suppressScrollOnNewData]=\"suppressScrollOnNewData\"\r\n [suppressPropertyNamesCheck]=\"true\"\r\n [paginationPageSize]=\"pagination ? paginationPageSize : undefined\"\r\n [pagination]=\"pagination\"\r\n [suppressPaginationPanel]=\"suppressPaginationPanel\"\r\n (rowClicked)=\"rowClicked.emit($event)\"\r\n (rowDoubleClicked)=\"rowDoubleClicked.emit($event)\"\r\n (rowSelected)=\"onRowSelected.emit($event)\"\r\n (paginationChanged)=\"paginationChanged()\"\r\n (gridReady)=\"gridReady($event)\"\r\n (rowDragEnd)=\"rowDragEndEmit($event)\"\r\n (cellContextMenu)=\"cellContextMenu($event)\"\r\n [enableCellTextSelection]=\"enableCellTextSelection\"\r\n (rowDataUpdated)=\"rowDataChanged($event)\"\r\n (rowEditingStarted)=\"onRowEditingStarted.emit($event)\"\r\n (cellValueChanged)=\"cellValueChanged.emit($event)\"\r\n (selectionChanged)=\"selectionChanged()\"\r\n (cellEditingStopped)=\"cellStopEditing($event)\"\r\n (cellKeyDown)=\"cellKeyDown($any($event))\"\r\n [multiSortKey]=\"multiSortKey\"\r\n [tooltipHideDelay]=\"tooltipHideDelay\"\r\n [tooltipShowDelay]=\"tooltipShowDelay\"\r\n [tooltipShowMode]=\"tooltipShowMode\"\r\n oncontextmenu=\"return false;\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!--===========================================-->\r\n <!-- AG-GRID PAGINATION -->\r\n <!--===========================================-->\r\n <div class=\"row\" *ngIf=\"pagination\">\r\n <div class=\"col-12\">\r\n <sc-ag-grid-pagination\r\n #scAgGridPagination\r\n [gridApi]=\"gridApi\"\r\n [paginationPageSize]=\"paginationPageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"></sc-ag-grid-pagination>\r\n </div>\r\n </div>\r\n <!--===========================================-->\r\n <!-- AG-GRID PAGINATION END -->\r\n <!--===========================================-->\r\n</div>\r\n\r\n<div\r\n *ngIf=\"showMenuDefault\"\r\n oncontextmenu=\"return false;\"\r\n style=\"position: fixed; width: 0px; height: 0px\"\r\n [ngStyle]=\"{ top: bottomMenu + 'px', left: leftMenu + 'px' }\">\r\n <mat-menu oncontextmenu=\"return false;\" #scMenu=\"matMenu\">\r\n <button oncontextmenu=\"return false;\" (click)=\"copyMenu(cellContextMenuActual!)\" mat-menu-item>\r\n <mat-icon>content_copy</mat-icon> <span>Copiar</span>\r\n </button>\r\n <button [disabled]=\"disabledPasteMenu\" oncontextmenu=\"return false;\" (click)=\"pasteMenu(cellContextMenuActual!)\" mat-menu-item>\r\n <mat-icon>content_paste</mat-icon><span>Pegar</span>\r\n </button>\r\n </mat-menu>\r\n <button oncontextmenu=\"return false;\" style=\"visibility: hidden\" mat-button [matMenuTriggerFor]=\"scMenu\" #menuTrigger=\"matMenuTrigger\">\r\n Menu\r\n </button>\r\n</div>\r\n", styles: [".cell-wrap-text{white-space:normal!important}.ag-header__center .ag-header-cell-text{display:block;width:100%;text-align:center!important}.ag-header__right .ag-header-cell-text{display:block;width:100%;text-align:right!important}.sc-ag-grid-header-actions{display:flex;gap:.6rem}.sc-ag-grid-header-actions .btn-width{width:6.5rem}.sc-ag-grid-header-actions .btn-icon em{margin-left:10px}.material-icons{font-size:24px!important}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "excludeHiddenColumnsFromQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "suppressChartToolPanelsButton", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "functionsPassive", "enableGroupEdit", "initialState", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "gridPreDestroyed", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "component", type: i3.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i3.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.ScAgGridPaginationComponent, selector: "sc-ag-grid-pagination", inputs: ["paginationPageSize", "gridApi", "pageSizeOptions"] }, { kind: "component", type: i6.InputSearchComponent, selector: "input-search", outputs: ["onChange"] }, { kind: "component", type: i7.ScMenuPanelComponent, selector: "sc-menu-panel", inputs: ["subMenus", "params"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
427
430
|
}
|
|
428
431
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ScAgGridCustomizableComponent, decorators: [{
|
|
429
432
|
type: Component,
|
|
430
433
|
args: [{ selector: "sc-ag-grid-customizable", changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
431
434
|
"[id]": "idScAgGridCustomizableComponent",
|
|
432
435
|
class: "sc-ag-grid-customizable",
|
|
433
|
-
}, template: "<div class=\"w-100\">\r\n <!--===========================================-->\r\n <!-- AG-GRID HEADER -->\r\n <!--===========================================-->\r\n <div\r\n class=\"row justify-content-between align-items-center my-2\"\r\n *ngIf=\"visibleSearch || btnAdd?.visible || viewChildrenButtonHeaders?.length\">\r\n <div [class]=\"fillSearch ? 'col-12 my-2' : searchClass\" *ngIf=\"visibleSearch\">\r\n <input-search (onChange)=\"changeFilter($event)\"></input-search>\r\n </div>\r\n\r\n <div\r\n [class]=\"visibleSearch ? 'col-sm-12 col-md-6 col-lg-6 col-xl-7 col-12' : 'col-12'\"\r\n class=\"sc-ag-grid-header-actions d-flex justify-content-end\"\r\n *ngIf=\"btnAdd?.visible || viewChildrenButtonHeaders?.length || configButtonsAction?.header || configHeader != null\">\r\n <!-- Header actions buttons -->\r\n <ng-container *ngIf=\"configButtonsAction && configHeader\">\r\n <ng-container *ngIf=\"configHeader.disabled === false; else templateAction\">\r\n <ng-container [ngTemplateOutlet]=\"tempActions\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #templateAction>\r\n <ng-container *ngIf=\"selectedRows.length === 0; else tempActions\">\r\n <button class=\"btn-icon btn-width btn btn-primary btn-sm\" disabled>\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #tempActions>\r\n <button *ngIf=\"hideHeaderMenuAction(); else templateHeaderAction\" class=\"btn-icon btn-width btn btn-primary btn-sm\">\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n\r\n <ng-template #templateHeaderAction>\r\n <button type=\"button\" class=\"btn-icon btn-width btn btn-primary btn-sm\" [matMenuTriggerFor]=\"panel.menu\">\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n\r\n <sc-menu-panel #panel class=\"d-none\" [subMenus]=\"configHeader.submenu ?? []\"></sc-menu-panel>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n <!-- End header actions buttons -->\r\n\r\n <!-- Other buttons -->\r\n <ng-container *ngIf=\"viewChildrenButtonHeaders?.length\">\r\n <ng-container\r\n *ngFor=\"let viewChildrenButtonHeader of viewChildrenButtonHeaders\"\r\n [ngTemplateOutlet]=\"viewChildrenButtonHeader.template\">\r\n </ng-container>\r\n </ng-container>\r\n <!--End other buttons -->\r\n\r\n <!-- Add button -->\r\n <ng-container *ngIf=\"btnAdd?.visible\">\r\n <button\r\n type=\"button\"\r\n class=\"btn-width btn btn-warning btn-sm\"\r\n (click)=\"onAddRowEmit()\"\r\n #buttonAdd\r\n [disabled]=\"btnAdd.disabled ?? false\">\r\n Agregar\r\n </button>\r\n </ng-container>\r\n <!--End add button -->\r\n </div>\r\n </div>\r\n <!--===========================================-->\r\n <!-- AG-GRID HEADER END -->\r\n <!--===========================================-->\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\" [ngStyle]=\"ngStyleContainer\">\r\n <ag-grid-angular\r\n #agGrid\r\n class=\"ag-theme-balham\"\r\n [ngStyle]=\"ngStyleAgGrid\"\r\n [columnDefs]=\"columnDefsAndAddCellActions\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [components]=\"_frameworkComponents\"\r\n [context]=\"_context\"\r\n [rowSelection]=\"rowSelection\"\r\n [isRowSelectable]=\"isRowSelectable\"\r\n [rowDragManaged]=\"rowDragManaged\"\r\n [domLayout]=\"domLayout\"\r\n [animateRows]=\"animateRows\"\r\n [getRowStyle]=\"getRowStyle\"\r\n [enableRangeSelection]=\"enableRangeSelection\"\r\n [suppressRowTransform]=\"suppressRowTransform\"\r\n [suppressMoveWhenRowDragging]=\"animateRows\"\r\n [overlayNoRowsTemplate]=\"overlayNoRowsTemplate\"\r\n [overlayLoadingTemplate]=\"overlayLoadingTemplate\"\r\n [noRowsOverlayComponentParams]=\"noRowsOverlayComponentParams\"\r\n [suppressRowClickSelection]=\"suppressRowClickSelection\"\r\n [suppressDragLeaveHidesColumns]=\"suppressDragLeaveHidesColumns\"\r\n [suppressScrollOnNewData]=\"suppressScrollOnNewData\"\r\n [suppressPropertyNamesCheck]=\"true\"\r\n [paginationPageSize]=\"pagination ? paginationPageSize : undefined\"\r\n [pagination]=\"pagination\"\r\n [suppressPaginationPanel]=\"suppressPaginationPanel\"\r\n (rowClicked)=\"rowClicked.emit($event)\"\r\n (rowDoubleClicked)=\"rowDoubleClicked.emit($event)\"\r\n (rowSelected)=\"onRowSelected.emit($event)\"\r\n (paginationChanged)=\"paginationChanged()\"\r\n (gridReady)=\"gridReady($event)\"\r\n (rowDragEnd)=\"rowDragEndEmit($event)\"\r\n (cellContextMenu)=\"cellContextMenu($event)\"\r\n [enableCellTextSelection]=\"enableCellTextSelection\"\r\n (rowDataUpdated)=\"rowDataChanged($event)\"\r\n (rowEditingStarted)=\"onRowEditingStarted.emit($event)\"\r\n (cellValueChanged)=\"cellValueChanged.emit($event)\"\r\n (selectionChanged)=\"selectionChanged()\"\r\n (cellEditingStopped)=\"cellStopEditing($event)\"\r\n (cellKeyDown)=\"cellKeyDown($any($event))\"\r\n [multiSortKey]=\"multiSortKey\"\r\n oncontextmenu=\"return false;\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!--===========================================-->\r\n <!-- AG-GRID PAGINATION -->\r\n <!--===========================================-->\r\n <div class=\"row\" *ngIf=\"pagination\">\r\n <div class=\"col-12\">\r\n <sc-ag-grid-pagination\r\n #scAgGridPagination\r\n [gridApi]=\"gridApi\"\r\n [paginationPageSize]=\"paginationPageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"></sc-ag-grid-pagination>\r\n </div>\r\n </div>\r\n <!--===========================================-->\r\n <!-- AG-GRID PAGINATION END -->\r\n <!--===========================================-->\r\n</div>\r\n\r\n<div\r\n *ngIf=\"showMenuDefault\"\r\n oncontextmenu=\"return false;\"\r\n style=\"position: fixed; width: 0px; height: 0px\"\r\n [ngStyle]=\"{ top: bottomMenu + 'px', left: leftMenu + 'px' }\">\r\n <mat-menu oncontextmenu=\"return false;\" #scMenu=\"matMenu\">\r\n <button oncontextmenu=\"return false;\" (click)=\"copyMenu(cellContextMenuActual!)\" mat-menu-item>\r\n <mat-icon>content_copy</mat-icon> <span>Copiar</span>\r\n </button>\r\n <button [disabled]=\"disabledPasteMenu\" oncontextmenu=\"return false;\" (click)=\"pasteMenu(cellContextMenuActual!)\" mat-menu-item>\r\n <mat-icon>content_paste</mat-icon><span>Pegar</span>\r\n </button>\r\n </mat-menu>\r\n <button oncontextmenu=\"return false;\" style=\"visibility: hidden\" mat-button [matMenuTriggerFor]=\"scMenu\" #menuTrigger=\"matMenuTrigger\">\r\n Menu\r\n </button>\r\n</div>\r\n", styles: [".cell-wrap-text{white-space:normal!important}.ag-header__center .ag-header-cell-text{display:block;width:100%;text-align:center!important}.ag-header__right .ag-header-cell-text{display:block;width:100%;text-align:right!important}.sc-ag-grid-header-actions{display:flex;gap:.6rem}.sc-ag-grid-header-actions .btn-width{width:6.5rem}.sc-ag-grid-header-actions .btn-icon em{margin-left:10px}.material-icons{font-size:24px!important}\n"] }]
|
|
436
|
+
}, template: "<div class=\"w-100\">\r\n <!--===========================================-->\r\n <!-- AG-GRID HEADER -->\r\n <!--===========================================-->\r\n <div\r\n class=\"row justify-content-between align-items-center my-2\"\r\n *ngIf=\"visibleSearch || btnAdd?.visible || viewChildrenButtonHeaders?.length\">\r\n <div [class]=\"fillSearch ? 'col-12 my-2' : searchClass\" *ngIf=\"visibleSearch\">\r\n <input-search (onChange)=\"changeFilter($event)\"></input-search>\r\n </div>\r\n\r\n <div\r\n [class]=\"visibleSearch ? 'col-sm-12 col-md-6 col-lg-6 col-xl-7 col-12' : 'col-12'\"\r\n class=\"sc-ag-grid-header-actions d-flex justify-content-end\"\r\n *ngIf=\"btnAdd?.visible || viewChildrenButtonHeaders?.length || configButtonsAction?.header || configHeader != null\">\r\n <!-- Header actions buttons -->\r\n <ng-container *ngIf=\"configButtonsAction && configHeader\">\r\n <ng-container *ngIf=\"configHeader.disabled === false; else templateAction\">\r\n <ng-container [ngTemplateOutlet]=\"tempActions\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #templateAction>\r\n <ng-container *ngIf=\"selectedRows.length === 0; else tempActions\">\r\n <button class=\"btn-icon btn-width btn btn-primary btn-sm\" disabled>\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #tempActions>\r\n <button *ngIf=\"hideHeaderMenuAction(); else templateHeaderAction\" class=\"btn-icon btn-width btn btn-primary btn-sm\">\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n\r\n <ng-template #templateHeaderAction>\r\n <button type=\"button\" class=\"btn-icon btn-width btn btn-primary btn-sm\" [matMenuTriggerFor]=\"panel.menu\">\r\n Acciones\r\n <em class=\"fa fa-chevron-down\"></em>\r\n </button>\r\n\r\n <sc-menu-panel #panel class=\"d-none\" [subMenus]=\"configHeader.submenu ?? []\"></sc-menu-panel>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n <!-- End header actions buttons -->\r\n\r\n <!-- Other buttons -->\r\n <ng-container *ngIf=\"viewChildrenButtonHeaders?.length\">\r\n <ng-container\r\n *ngFor=\"let viewChildrenButtonHeader of viewChildrenButtonHeaders\"\r\n [ngTemplateOutlet]=\"viewChildrenButtonHeader.template\">\r\n </ng-container>\r\n </ng-container>\r\n <!--End other buttons -->\r\n\r\n <!-- Add button -->\r\n <ng-container *ngIf=\"btnAdd?.visible\">\r\n <button\r\n type=\"button\"\r\n class=\"btn-width btn btn-warning btn-sm\"\r\n (click)=\"onAddRowEmit()\"\r\n #buttonAdd\r\n [disabled]=\"btnAdd.disabled ?? false\">\r\n Agregar\r\n </button>\r\n </ng-container>\r\n <!--End add button -->\r\n </div>\r\n </div>\r\n <!--===========================================-->\r\n <!-- AG-GRID HEADER END -->\r\n <!--===========================================-->\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12\" [ngStyle]=\"ngStyleContainer\">\r\n <ag-grid-angular\r\n #agGrid\r\n class=\"ag-theme-balham\"\r\n [ngStyle]=\"ngStyleAgGrid\"\r\n [columnDefs]=\"columnDefsAndAddCellActions\"\r\n [defaultColDef]=\"defaultColDef\"\r\n [components]=\"_frameworkComponents\"\r\n [context]=\"_context\"\r\n [rowSelection]=\"rowSelection\"\r\n [isRowSelectable]=\"isRowSelectable\"\r\n [rowDragManaged]=\"rowDragManaged\"\r\n [domLayout]=\"domLayout\"\r\n [animateRows]=\"animateRows\"\r\n [getRowStyle]=\"getRowStyle\"\r\n [enableRangeSelection]=\"enableRangeSelection\"\r\n [suppressRowTransform]=\"suppressRowTransform\"\r\n [suppressMoveWhenRowDragging]=\"animateRows\"\r\n [overlayNoRowsTemplate]=\"overlayNoRowsTemplate\"\r\n [overlayLoadingTemplate]=\"overlayLoadingTemplate\"\r\n [noRowsOverlayComponentParams]=\"noRowsOverlayComponentParams\"\r\n [suppressRowClickSelection]=\"suppressRowClickSelection\"\r\n [suppressDragLeaveHidesColumns]=\"suppressDragLeaveHidesColumns\"\r\n [suppressScrollOnNewData]=\"suppressScrollOnNewData\"\r\n [suppressPropertyNamesCheck]=\"true\"\r\n [paginationPageSize]=\"pagination ? paginationPageSize : undefined\"\r\n [pagination]=\"pagination\"\r\n [suppressPaginationPanel]=\"suppressPaginationPanel\"\r\n (rowClicked)=\"rowClicked.emit($event)\"\r\n (rowDoubleClicked)=\"rowDoubleClicked.emit($event)\"\r\n (rowSelected)=\"onRowSelected.emit($event)\"\r\n (paginationChanged)=\"paginationChanged()\"\r\n (gridReady)=\"gridReady($event)\"\r\n (rowDragEnd)=\"rowDragEndEmit($event)\"\r\n (cellContextMenu)=\"cellContextMenu($event)\"\r\n [enableCellTextSelection]=\"enableCellTextSelection\"\r\n (rowDataUpdated)=\"rowDataChanged($event)\"\r\n (rowEditingStarted)=\"onRowEditingStarted.emit($event)\"\r\n (cellValueChanged)=\"cellValueChanged.emit($event)\"\r\n (selectionChanged)=\"selectionChanged()\"\r\n (cellEditingStopped)=\"cellStopEditing($event)\"\r\n (cellKeyDown)=\"cellKeyDown($any($event))\"\r\n [multiSortKey]=\"multiSortKey\"\r\n [tooltipHideDelay]=\"tooltipHideDelay\"\r\n [tooltipShowDelay]=\"tooltipShowDelay\"\r\n [tooltipShowMode]=\"tooltipShowMode\"\r\n oncontextmenu=\"return false;\">\r\n </ag-grid-angular>\r\n </div>\r\n </div>\r\n\r\n <!--===========================================-->\r\n <!-- AG-GRID PAGINATION -->\r\n <!--===========================================-->\r\n <div class=\"row\" *ngIf=\"pagination\">\r\n <div class=\"col-12\">\r\n <sc-ag-grid-pagination\r\n #scAgGridPagination\r\n [gridApi]=\"gridApi\"\r\n [paginationPageSize]=\"paginationPageSize\"\r\n [pageSizeOptions]=\"pageSizeOptions\"></sc-ag-grid-pagination>\r\n </div>\r\n </div>\r\n <!--===========================================-->\r\n <!-- AG-GRID PAGINATION END -->\r\n <!--===========================================-->\r\n</div>\r\n\r\n<div\r\n *ngIf=\"showMenuDefault\"\r\n oncontextmenu=\"return false;\"\r\n style=\"position: fixed; width: 0px; height: 0px\"\r\n [ngStyle]=\"{ top: bottomMenu + 'px', left: leftMenu + 'px' }\">\r\n <mat-menu oncontextmenu=\"return false;\" #scMenu=\"matMenu\">\r\n <button oncontextmenu=\"return false;\" (click)=\"copyMenu(cellContextMenuActual!)\" mat-menu-item>\r\n <mat-icon>content_copy</mat-icon> <span>Copiar</span>\r\n </button>\r\n <button [disabled]=\"disabledPasteMenu\" oncontextmenu=\"return false;\" (click)=\"pasteMenu(cellContextMenuActual!)\" mat-menu-item>\r\n <mat-icon>content_paste</mat-icon><span>Pegar</span>\r\n </button>\r\n </mat-menu>\r\n <button oncontextmenu=\"return false;\" style=\"visibility: hidden\" mat-button [matMenuTriggerFor]=\"scMenu\" #menuTrigger=\"matMenuTrigger\">\r\n Menu\r\n </button>\r\n</div>\r\n", styles: [".cell-wrap-text{white-space:normal!important}.ag-header__center .ag-header-cell-text{display:block;width:100%;text-align:center!important}.ag-header__right .ag-header-cell-text{display:block;width:100%;text-align:right!important}.sc-ag-grid-header-actions{display:flex;gap:.6rem}.sc-ag-grid-header-actions .btn-width{width:6.5rem}.sc-ag-grid-header-actions .btn-icon em{margin-left:10px}.material-icons{font-size:24px!important}\n"] }]
|
|
434
437
|
}], propDecorators: { viewChildrenButtonHeaders: [{
|
|
435
438
|
type: ContentChildren,
|
|
436
439
|
args: [ScAgGridButtonHeader, { descendants: true }]
|
|
@@ -495,6 +498,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
495
498
|
type: Input
|
|
496
499
|
}], noRowsOverlayComponentParams: [{
|
|
497
500
|
type: Input
|
|
501
|
+
}], tooltipHideDelay: [{
|
|
502
|
+
type: Input
|
|
503
|
+
}], tooltipShowDelay: [{
|
|
504
|
+
type: Input
|
|
505
|
+
}], tooltipShowMode: [{
|
|
506
|
+
type: Input
|
|
498
507
|
}], validatePasteCell: [{
|
|
499
508
|
type: Input
|
|
500
509
|
}], validatePasteRows: [{
|
|
@@ -561,4 +570,4 @@ export function isObjEmpty(object) {
|
|
|
561
570
|
return true;
|
|
562
571
|
return Object.keys(object).length === 0;
|
|
563
572
|
}
|
|
564
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWctZ3JpZC1jdXN0b21pemFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9zYy1hZy1ncmlkL3NjLWFnLWdyaWQtY3VzdG9taXphYmxlL3NjLWFnLWdyaWQtY3VzdG9taXphYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdW1heC1lcnAtY29tcG9uZW50L3NyYy9saWIvc2MtYWctZ3JpZC9zYy1hZy1ncmlkLWN1c3RvbWl6YWJsZS9zYy1hZy1ncmlkLWN1c3RvbWl6YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBR04sU0FBUyxFQUNULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQW9CdkIsT0FBTyxFQUFjLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEQsT0FBTyxFQUtMLGNBQWMsR0FJZixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7O0FBR3hFLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQVdmLE1BQU0sT0FBTyw2QkFBNkI7SUFWMUM7UUF3QkUsb0NBQStCLEdBQUcsMkJBQTJCLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFFL0Qsb0JBQWUsR0FBb0IsR0FBRyxF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LGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUdHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQWtCUCxxQkFBcUI7c0JBRHBCLEtBQUs7O0FBb1RSLE1BQU0sVUFBVSxVQUFVLENBQUksTUFBUztJQUNyQyxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksTUFBTSxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV6RCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbiAgaW5qZWN0LFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9tZW51XCI7XHJcbmltcG9ydCB7XHJcbiAgQ2VsbENvbnRleHRNZW51RXZlbnQsXHJcbiAgQ2VsbEVkaXRpbmdTdG9wcGVkRXZlbnQsXHJcbiAgQ2VsbEtleURvd25FdmVudCxcclxuICBDZWxsVmFsdWVDaGFuZ2VkRXZlbnQsXHJcbiAgQ29sRGVmLFxyXG4gIEdyaWRBcGksXHJcbiAgR3JpZFJlYWR5RXZlbnQsXHJcbiAgSVJvd05vZGUsXHJcbiAgSXNSb3dTZWxlY3RhYmxlLFxyXG4gIFJvd0NsaWNrZWRFdmVudCxcclxuICBSb3dEYXRhVXBkYXRlZEV2ZW50LFxyXG4gIFJvd0RvdWJsZUNsaWNrZWRFdmVudCxcclxuICBSb3dEcmFnRXZlbnQsXHJcbiAgUm93RWRpdGluZ1N0YXJ0ZWRFdmVudCxcclxuICBSb3dTZWxlY3RlZEV2ZW50LFxyXG59IGZyb20gXCJhZy1ncmlkLWNvbW11bml0eVwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgSU5nU2VsZWN0IH0gZnJvbSBcIi4uLy4uL3V0aWxzL0lOZ1NlbGVjdFwiO1xyXG5pbXBvcnQge1xyXG4gIEJ1dHRvbkhlYWRlcixcclxuICBDb25maWdCdXR0b25BY3Rpb24sXHJcbiAgQ29uZmlnQnV0dG9uQWdHcmlkLFxyXG4gIENvbmZpZ0J1dHRvbkhlYWRlcixcclxuICBFbnVtQnV0dG9uVHlwZSxcclxuICBHZXRSb3dTdHlsZSxcclxuICBIaWRlRnVjLFxyXG4gIFJvd1NlbGVjdGlvbixcclxufSBmcm9tIFwiLi4vLi4vdXRpbHMvSVNjQWdHcmlkXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2VVdGlsU2VydmljZSB9IGZyb20gXCIuLi8uLi91dGlscy9tZXNzYWdlLXV0aWwuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTY0NlbGxSZW5kZXJCdXR0b25TZXJ2aWNlIH0gZnJvbSBcIi4uL2NlbGwtcmVuZGVyL3NjLWNlbGwtcmVuZGVyLWJ1dHRvbi9zYy1jZWxsLXJlbmRlci1idXR0b24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IHNjQ29tcG9uZW50cyB9IGZyb20gXCIuLi9jZWxsLXJlbmRlci9zYy1jZWxsLXJlbmRlci1jb25maWdcIjtcclxuaW1wb3J0IHsgU2NBZ0dyaWRCdXR0b25IZWFkZXIgfSBmcm9tIFwiLi4vZGlyZWN0aXZlcy9zY0FnR3JpZC5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgU2NBZ0dyaWRQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3NjLWFnLWdyaWQtcGFnaW5hdGlvbi9zYy1hZy1ncmlkLXBhZ2luYXRpb24uY29tcG9uZW50XCI7XHJcblxyXG5sZXQgbmV4dElkID0gMDtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwic2MtYWctZ3JpZC1jdXN0b21pemFibGVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3NjLWFnLWdyaWQtY3VzdG9taXphYmxlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9zYy1hZy1ncmlkLWN1c3RvbWl6YWJsZS5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGhvc3Q6IHtcclxuICAgIFwiW2lkXVwiOiBcImlkU2NBZ0dyaWRDdXN0b21pemFibGVDb21wb25lbnRcIixcclxuICAgIGNsYXNzOiBcInNjLWFnLWdyaWQtY3VzdG9taXphYmxlXCIsXHJcbiAgfSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNjQWdHcmlkQ3VzdG9taXphYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgQENvbnRlbnRDaGlsZHJlbihTY0FnR3JpZEJ1dHRvbkhlYWRlciwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxyXG4gIHZpZXdDaGlsZHJlbkJ1dHRvbkhlYWRlcnMhOiBRdWVyeUxpc3Q8U2NBZ0dyaWRCdXR0b25IZWFkZXI+O1xyXG5cclxuICBAVmlld0NoaWxkKFwibWVudVRyaWdnZXJcIikgbWVudVRyaWdnZXI/OiBNYXRNZW51VHJpZ2dlcjtcclxuXHJcbiAgQFZpZXdDaGlsZChcInNjQWdHcmlkUGFnaW5hdGlvblwiKVxyXG4gIHByaXZhdGUgX3NjQWdHcmlkUGFnaW5hdGlvbj86IFNjQWdHcmlkUGFnaW5hdGlvbkNvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZChcImJ1dHRvbkFkZFwiKSBidXR0b25BZGQ/OiBFbGVtZW50UmVmPEhUTUxCdXR0b25FbGVtZW50PjtcclxuICBnZXQgYnV0dG9uQWRkRWxlbWVudCgpOiBIVE1MQnV0dG9uRWxlbWVudCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuYnV0dG9uQWRkPy5uYXRpdmVFbGVtZW50ID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBpZFNjQWdHcmlkQ3VzdG9taXphYmxlQ29tcG9uZW50ID0gYHNjLWFnLWdyaWQtY3VzdG9taXphYmxlLSR7KytuZXh0SWR9YDtcclxuXHJcbiAgQElucHV0KCkgaXNSb3dTZWxlY3RhYmxlOiBJc1Jvd1NlbGVjdGFibGUgPSAoKSA9PiB0cnVlO1xyXG5cclxuICBzZWFyY2hDbGFzcyA9IFwiY29sLTEyIGNvbC1zbS0xMiBjb2wtbWQtNiBjb2wtbGctNiBjb2wteGwtNSBteS0yXCI7XHJcbiAgQElucHV0KCkgZ2V0Um93U3R5bGU6IEdldFJvd1N0eWxlID0gKCkgPT4gdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGZpbGxTZWFyY2ggPSBmYWxzZTtcclxuICAvLyNyZWdpb24gSW5wdXRzXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIENhbnRpZGFkIGRlIGl0ZW1zIHF1ZSBzZSBtb3N0cmFyw6EgcG9yIHDDoWdpbmFcclxuICAgKiBAZGVmYXVsdCAxNVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb25QYWdlU2l6ZSA9IDE1O1xyXG4gIEBJbnB1dCgpIHNlYXJjaFdpZHRoID0gXCJcIjtcclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gIE9wY2lvbmVzIGRlIHRhbWHDsW8gZGUgcMOhZ2luYVxyXG4gICAqIEBkZWZhdWx0ICdbNSwgMTAsIDE1LCAyMCwgMjVdJ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9ucyA9IFs1LCAxMCwgMTUsIDIwLCAyNV07XHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIFNpIGVsIHZhbG9yIGVzIGB0cnVlYCBtdWVzdHJhIGxhIHBhZ2luYWNpw7NuXHJcbiAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb24gPSB0cnVlO1xyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBUaXBvIGRlIHNlbGVjaW9uIGVuIGxhIGBncmlsbGFgc1xyXG4gICAqIEBkZWZhdWx0ICdzaW1wbGUnXHJcbiAgICovXHJcbiAgQElucHV0KCkgcm93U2VsZWN0aW9uOiBSb3dTZWxlY3Rpb24gPSBcInNpbmdsZVwiO1xyXG4gIC8vIEBJbnB1dCgpIHN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb24gPSB0cnVlO1xyXG4gIGdldCBzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucm93U2VsZWN0aW9uID09PSBcInNpbmdsZVwiID8gZmFsc2UgOiB0cnVlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gQXJyYXkgZGUgY29sdW1uYXMgcXVlIHNlIG1vc3RyYXJhIGVuIGxhIGBncmlsbGFgXHJcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXHJcbiAgICovXHJcbiAgQElucHV0KCkgY29sdW1uRGVmczogQ29sRGVmW10gPSBbXTtcclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gQXJyYXkgZGUgZGF0b3MgcXVlIHNlIG1vc3RyYXJhIGVuIGxhIGBncmlsbGFgXHJcbiAgICogQGRlZmF1bHQgbnVsbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHJvd0RhdGE6IE9ic2VydmFibGU8YW55W10+ID0gb2YoW10pO1xyXG5cclxuICBASW5wdXQoKSBjb25maWdCdXR0b25zQWN0aW9uITogQ29uZmlnQnV0dG9uQWN0aW9uO1xyXG4gIGdldCBjb25maWdIZWFkZXIoKTogQ29uZmlnQnV0dG9uSGVhZGVyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdCdXR0b25zQWN0aW9uPy5oZWFkZXIgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGRlZmF1bHRDZWxsUmVuZGVyZXJBY3Rpb25zOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gIF9jb25maWdCdXR0b25zRGVmYXVsdEFnR3JpZDogQ29uZmlnQnV0dG9uQWdHcmlkW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIFNpIGVsIHZhbG9yIGVzIGB0cnVlYCBtdWVzdHJhIGVsIGBidXNjYWRvcmBcclxuICAgKiBAZGVmYXVsdCB0cnVlXHJcbiAgICovXHJcbiAgQElucHV0KCkgdmlzaWJsZVNlYXJjaCA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIGRvbUxheW91dDogXCJub3JtYWxcIiB8IFwiYXV0b0hlaWdodFwiID0gXCJub3JtYWxcIjtcclxuICBASW5wdXQoKSBoZWlnaHQgPSBcIjIwZW1cIjtcclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIENwbmZpZ3VyYWNpw7NuIHBhcmEgZWwgYm90b24gYEFncmVnYXJgXHJcbiAgICogQGRlZmF1bHQgJ3sgdmlzaWJsZTogdHJ1ZSwgZGlzYWJsZWQ6IGZhbHNlIH0nXHJcbiAgICovXHJcbiAgQElucHV0KCkgYnRuQWRkOiBCdXR0b25IZWFkZXIgPSB7IHZpc2libGU6IHRydWUgfTtcclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gUGFyYSBhY3RpdmFyIG8gZGVzY2F0aXZhciBlbCBkcmFnICYgZHJvcFxyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgQElucHV0KCkgcm93RHJhZ01hbmFnZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIFBhcmEgYWN0aXZhciBvIGRlc2NhdGl2YXIgbGFzIGFuaW1hY2lvbmVzXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICBASW5wdXQoKSBhbmltYXRlUm93czogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSB1c2VHcmlkQ29weSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG11bHRpU29ydEtleSE6IGFueTtcclxuICBASW5wdXQoKSBzaG93TWVudURlZmF1bHQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBlbmFibGVDZWxsVGV4dFNlbGVjdGlvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc3VwcHJlc3NSb3dUcmFuc2Zvcm0gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlbmFibGVSYW5nZVNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG5vUm93c092ZXJsYXlDb21wb25lbnQgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIG5vUm93c092ZXJsYXlDb21wb25lbnRQYXJhbXMgPSB7fTtcclxuICBASW5wdXQoKSB2YWxpZGF0ZVBhc3RlQ2VsbD86IChldnRTb3VyY2U6IENlbGxLZXlEb3duRXZlbnQsIGV2dFRhcmdldDogQ2VsbEtleURvd25FdmVudCkgPT4gUHJvbWlzZTxib29sZWFuPiA9IChcclxuICAgIGV2dFNvdXJjZTogQ2VsbEtleURvd25FdmVudCxcclxuICAgIGV2dFRhcmdldDogQ2VsbEtleURvd25FdmVudFxyXG4gICkgPT4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gIEBJbnB1dCgpIHZhbGlkYXRlUGFzdGVSb3dzPzogKGV2dFNvdXJjZTogSVJvd05vZGVbXSwgZXZ0VGFyZ2V0OiBJUm93Tm9kZVtdKSA9PiBQcm9taXNlPGJvb2xlYW4+ID0gKFxyXG4gICAgZXZ0U291cmNlOiBJUm93Tm9kZVtdLFxyXG4gICAgZXZ0VGFyZ2V0OiBJUm93Tm9kZVtdXHJcbiAgKSA9PiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJhIGFncmVnYXIgY29tcG9uZW50ZXMgaW50ZXJub3MgZGVudHJvIGRlIGxhIGdyaWxsYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGZyYW1ld29ya0NvbXBvbmVudHModmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5fZnJhbWV3b3JrQ29tcG9uZW50cyA9IHsgLi4udGhpcy5fZnJhbWV3b3JrQ29tcG9uZW50cywgLi4udmFsdWUgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJhIHBvZGVyIGFncmVnYXIgbcOhcyBvYmpldG9zIGFsIGNvbnRleHRvXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgY29udGV4dCh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9jb250ZXh0ID0geyAuLi50aGlzLl9jb250ZXh0LCAuLi52YWx1ZSB9O1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIE91dHB1dFxyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZUZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvbkFkZFJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZEFwaT4oKTtcclxuICBAT3V0cHV0KCkgb25HcmlkQWRkUm93ID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsS2V5RG93bkV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBvbkVkaXRSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPElSb3dOb2RlPigpO1xyXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZVJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8W0dyaWRBcGksIGFueVtdXT4oKTtcclxuICBAT3V0cHV0KCkgb25DZWxsS2V5RG93bjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQ2VsbFN0b3BFZGl0aW5nOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25CdXR0b25BY3Rpb25BZ0dyaWQgPSBuZXcgRXZlbnRFbWl0dGVyPFtFbnVtQnV0dG9uVHlwZSB8IHN0cmluZywgSVJvd05vZGVdPigpO1xyXG4gIEBPdXRwdXQoKSBvbkJ1dHRvbkFjdGlvbkhlYWRlciA9IG5ldyBFdmVudEVtaXR0ZXI8W0VudW1CdXR0b25UeXBlIHwgc3RyaW5nLCBhbnlbXV0+KCk7XHJcblxyXG4gIC8vIEFnR3JpZCBFdmVudHMgLSBPdXB1dFxyXG4gIEBPdXRwdXQoKSBvbkdyaWRSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8W0dyaWRBcGldPigpO1xyXG4gIEBPdXRwdXQoKSBvbkdyaWRTZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG4gIEBPdXRwdXQoKSBvbkdyaWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFtHcmlkQXBpLCBSb3dEYXRhVXBkYXRlZEV2ZW50XT4oKTtcclxuICBAT3V0cHV0KCkgb25Sb3dEcmFnRW5kID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dEcmFnRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uUm93RWRpdGluZ1N0YXJ0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0VkaXRpbmdTdGFydGVkRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0NsaWNrZWRFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgcm93RG91YmxlQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Um93RG91YmxlQ2xpY2tlZEV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBvblJvd1NlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dTZWxlY3RlZEV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBjZWxsVmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsVmFsdWVDaGFuZ2VkRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ2VsbENvbnRleHRNZW51ID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsQ29udGV4dE1lbnVFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgb25QYXN0ZU1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPENlbGxDb250ZXh0TWVudUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBvbkNvcHlNZW51ID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsQ29udGV4dE1lbnVFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgYWZ0ZXJQYXN0ZUNlbGwgPSBuZXcgRXZlbnRFbWl0dGVyPFtDZWxsS2V5RG93bkV2ZW50LCBDZWxsS2V5RG93bkV2ZW50XT4oKTtcclxuICBAT3V0cHV0KCkgYmVmb3JlUGFzdGVDZWxsID0gbmV3IEV2ZW50RW1pdHRlcjxbQ2VsbEtleURvd25FdmVudCwgQ2VsbEtleURvd25FdmVudF0+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyUGFzdGVSb3dzID0gbmV3IEV2ZW50RW1pdHRlcjxbSVJvd05vZGVbXSwgSVJvd05vZGVbXV0+KCk7XHJcbiAgQE91dHB1dCgpIGJlZm9yZVBhc3RlUm93cyA9IG5ldyBFdmVudEVtaXR0ZXI8W0lSb3dOb2RlW10sIElSb3dOb2RlW11dPigpO1xyXG5cclxuICBjb2x1bW5EZWZzQW5kQWRkQ2VsbEFjdGlvbnM6IENvbERlZltdID0gW107XHJcbiAgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xyXG4gICAgcmVzaXphYmxlOiB0cnVlLFxyXG4gICAgc29ydGFibGU6IHRydWUsXHJcbiAgfTtcclxuICBfZnJhbWV3b3JrQ29tcG9uZW50cyA9IHsgLi4uc2NDb21wb25lbnRzIH07XHJcbiAgX2NvbnRleHQgPSB7IGNvbXBvbmVudFBhcmVudDogdGhpcyBhcyBhbnkgfTtcclxuXHJcbiAgYm90dG9tTWVudTogc3RyaW5nID0gXCIwXCI7XHJcbiAgbGVmdE1lbnU6IHN0cmluZyA9IFwiMFwiO1xyXG4gIGhpZGRlbk1lbnU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb3BpZWRDZWxsPzogQ2VsbEtleURvd25FdmVudDtcclxuICBjb3BpZWRSb3c/OiBJUm93Tm9kZVtdO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIG92ZXJsYXlOb1Jvd3NUZW1wbGF0ZSA9IGA8c3BhbiBjbGFzcz1cImFnLW92ZXJsYXktbG9hZGluZy1jZW50ZXIgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgc2hhZG93LW5vbmVcIj5cclxuXHRcdFx0Tm8gc2UgZW5jb250cmFyb24gcmVnaXN0cm9zLi4uXHJcblx0XHQ8L3NwYW4+YDtcclxuXHJcbiAgb3ZlcmxheUxvYWRpbmdUZW1wbGF0ZSA9IGA8c3BhbiBjbGFzcz1cImFnLW92ZXJsYXktbG9hZGluZy10b3AgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBib3JkZXItMCBiZy13aGl0ZSBzaGFkb3cgcC00IHRleHQtaW5mb1wiIHN0eWxlPVwiaGVpZ2h0OiAyMHB4O1wiPlxyXG5cdFx0XHQ8aW1nIHNyYz1cImFzc2V0cy9tZWRpYS1kZW1vL2xvYWRpbmcuZ2lmXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjI1XCIgY2xhc3M9XCJtci0yXCI+XHJcblx0XHRcdDxzdHJvbmc+Q2FyZ2FuZG8gcmVnaXN0cm9zPC9zdHJvbmc+XHJcblx0XHQ8L3NwYW4+XHJcblx0XHRgO1xyXG4gIHN1cHByZXNzRHJhZ0xlYXZlSGlkZXNDb2x1bW5zID0gdHJ1ZTtcclxuICBzdXBwcmVzc1Njcm9sbE9uTmV3RGF0YSA9IGZhbHNlO1xyXG4gIHN1cHByZXNzUGFnaW5hdGlvblBhbmVsID0gdHJ1ZTtcclxuXHJcbiAgLy8gQWdHcmlkIFN0eWxlXHJcbiAgZ2V0IG5nU3R5bGVDb250YWluZXIoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXHJcbiAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IG5nU3R5bGVBZ0dyaWQoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXHJcbiAgICAgIGhlaWdodDogXCIxMDAlXCIsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgX3N1YnNjcmlwdGlvbiQgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgcHJvZ3Jlc3NWaXNpYmxlZCA9IGZhbHNlO1xyXG5cclxuICBncmlkQXBpITogR3JpZEFwaTtcclxuICBfc3Vic2NyaXB0aW9uUm93RGF0YSQ/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHNlbGVjdGVkUm93czogYW55W10gPSBbXTtcclxuXHJcbiAgY2VsbENvbnRleHRNZW51QWN0dWFsPzogQ2VsbENvbnRleHRNZW51RXZlbnQ7XHJcblxyXG4gIHByaXZhdGUgX3NjQ2VsbFJlbmRlckJ1dHRvblNlcnZpY2UgPSBpbmplY3QoU2NDZWxsUmVuZGVyQnV0dG9uU2VydmljZSk7XHJcbiAgcHJpdmF0ZSBfbWVzc2FnZVV0aWxTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VVdGlsU2VydmljZSk7XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uJC5hZGQoXHJcbiAgICAgIHRoaXMuX3NjQ2VsbFJlbmRlckJ1dHRvblNlcnZpY2UuaGFuZGxlckJ1dHRvbkFjdGlvbiQuc3Vic2NyaWJlKCh7IGluZGV4LCBhY3Rpb24gfSkgPT4ge1xyXG4gICAgICAgIGlmIChhY3Rpb24gPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgICAgIGlmIChhY3Rpb24udHJpbSgpID09PSBcIlwiKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIHRoaXMub25CdXR0b25BY3Rpb25BZ0dyaWRFbWl0KGluZGV4LCBhY3Rpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vbkJ1dHRvbkFjdGlvbkhlYWRlckVtaXQoYWN0aW9uKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pbml0QWN0aW9uQnV0dG9uKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZ3JpZEFwaSkgcmV0dXJuO1xyXG4gICAgaWYgKGNoYW5nZXNbXCJjb25maWdCdXR0b25zQWN0aW9uXCJdKSB0aGlzLmluaXRBY3Rpb25CdXR0b24oKTtcclxuICAgIGlmIChjaGFuZ2VzW1wicm93RGF0YVwiXSkgdGhpcy5pbml0Um93RGF0YSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24kPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uUm93RGF0YSQ/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkUm93cy5sZW5ndGggPSAwO1xyXG4gIH1cclxuXHJcbiAgb25CdXR0b25BY3Rpb25IZWFkZXJFbWl0KHR5cGVCdXR0b246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgcm93c1NlbGVjdGVkID0gdGhpcy5ncmlkQXBpPy5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIHRoaXMub25CdXR0b25BY3Rpb25IZWFkZXIuZW1pdChbdHlwZUJ1dHRvbiwgcm93c1NlbGVjdGVkXSk7XHJcbiAgfVxyXG5cclxuICBpbml0QWN0aW9uQnV0dG9uKCk6IHZvaWQge1xyXG4gICAgaWYgKGlzT2JqRW1wdHkodGhpcy5jb25maWdCdXR0b25zQWN0aW9uKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHsgYWdHcmlkIH0gPSB0aGlzLmNvbmZpZ0J1dHRvbnNBY3Rpb24hO1xyXG5cclxuICAgIGlmIChhZ0dyaWQgJiYgYWdHcmlkLmFjdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLl9jb25maWdCdXR0b25zRGVmYXVsdEFnR3JpZCA9IFsuLi5hZ0dyaWQuYWN0aW9uc107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zaXplRml0Q29sdW1uQWN0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBzaXplRml0Q29sdW1uQWN0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5fY29uZmlnQnV0dG9uc0RlZmF1bHRBZ0dyaWQuZmlsdGVyKCh7IGhpZGUgfSkgPT4ge1xyXG4gICAgICByZXR1cm4gIXRoaXMuX2hpZGVGdW5jKGhpZGUpO1xyXG4gICAgfSkubGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHdpZHRoID0gbGVuZ3RoID09IDIgPyA5MCA6IDgwO1xyXG4gICAgY29uc3QgbWluV2lkdGggPSBsZW5ndGggPiAyID8gbGVuZ3RoICogMzMgKyAxMCA6IHdpZHRoO1xyXG5cclxuICAgIGNvbnN0IG5ld0NvbHVtbnM6IENvbERlZiA9IHtcclxuICAgICAgaGVhZGVyTmFtZTogXCJBY2Npb25lc1wiLFxyXG4gICAgICBoZWFkZXJDbGFzczogXCJhZy1oZWFkZXJfX2NlbnRlclwiLFxyXG4gICAgICBmaWVsZDogXCJcIixcclxuICAgICAgd2lkdGg6IG1pbldpZHRoLFxyXG4gICAgICBtaW5XaWR0aCxcclxuICAgICAgbWF4V2lkdGg6IG1pbldpZHRoLFxyXG4gICAgICBjZWxsQ2xhc3M6IFtcImQtZmxleFwiLCBcImp1c3RpZnktY29udGVudC1jZW50ZXJcIiwgXCJhbGlnbi1pdGVtcy1jZW50ZXJcIl0sXHJcbiAgICAgIGNlbGxTdHlsZTogeyBvdmVyZmxvdzogXCJ2aXNpYmxlXCIgfSxcclxuICAgICAgcmVzaXphYmxlOiBmYWxzZSxcclxuICAgICAgc29ydGFibGU6IGZhbHNlLFxyXG4gICAgICBjZWxsUmVuZGVyZXI6IHRoaXMuZGVmYXVsdENlbGxSZW5kZXJlckFjdGlvbnMgPyB0aGlzLmRlZmF1bHRDZWxsUmVuZGVyZXJBY3Rpb25zIDogXCJzY0NlbGxSZW5kZXJlckJ1dHRvbkNvbXBvbmVudFwiLFxyXG4gICAgICBwaW5uZWQ6IFwicmlnaHRcIixcclxuICAgICAgc3VwcHJlc3NNZW51OiB0cnVlLFxyXG4gICAgICBsb2NrUG9zaXRpb246IHRydWUsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5jb2x1bW5EZWZzQW5kQWRkQ2VsbEFjdGlvbnMgPSB0aGlzLl9oaWRlQWdHcmlkTWVudUFjdGlvbigpID8gWy4uLnRoaXMuY29sdW1uRGVmc10gOiBbLi4udGhpcy5jb2x1bW5EZWZzLCBuZXdDb2x1bW5zXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hpZGVBZ0dyaWRNZW51QWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnQnV0dG9uc0FjdGlvbiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY29uZmlnQnV0dG9uc0FjdGlvbj8uYWdHcmlkPy5hY3Rpb25zLmV2ZXJ5KCh7IGhpZGUgfSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlRnVuYyhoaWRlKTtcclxuICAgICAgfSkgPz8gdHJ1ZVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hpZGVGdW5jKGhpZGU6IEhpZGVGdWMgfCBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaGlkZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodHlwZW9mIGhpZGUgPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gaGlkZSgpO1xyXG5cclxuICAgIHJldHVybiBoaWRlO1xyXG4gIH1cclxuXHJcbiAgb25CdXR0b25BY3Rpb25BZ0dyaWRFbWl0KHJvd0luZGV4OiBudW1iZXIsIHR5cGVCdXR0b246IHN0cmluZykge1xyXG4gICAgY29uc3QgSVJvd05vZGUgPSB0aGlzLmdyaWRBcGk/LmdldERpc3BsYXllZFJvd0F0SW5kZXgocm93SW5kZXgpO1xyXG5cclxuICAgIGlmIChJUm93Tm9kZSkge1xyXG4gICAgICBpZiAodHlwZUJ1dHRvbiA9PT0gRW51bUJ1dHRvblR5cGUuVFlQRV9FRElUKSB7XHJcbiAgICAgICAgdGhpcy5vbkVkaXRSb3cuZW1pdChJUm93Tm9kZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0eXBlQnV0dG9uID09PSBFbnVtQnV0dG9uVHlwZS5UWVBFX0RFTEVURSkge1xyXG4gICAgICAgIHRoaXMub25EZWxldGVSb3cuZW1pdChbdGhpcy5ncmlkQXBpLCBbSVJvd05vZGUuZGF0YV1dKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMub25CdXR0b25BY3Rpb25BZ0dyaWQuZW1pdChbdHlwZUJ1dHRvbiwgSVJvd05vZGVdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRSb3dEYXRhKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmNvbmZpZ0J1dHRvbnNBY3Rpb24/LmFnR3JpZCkgdGhpcy5zaXplRml0Q29sdW1uQWN0aW9uKCk7XHJcbiAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uUm93RGF0YSQpIHtcclxuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uUm93RGF0YSQudW5zdWJzY3JpYmUoKTtcclxuICAgICAgdGhpcy5ncmlkQXBpLnNldEdyaWRPcHRpb24oXCJyb3dEYXRhXCIsIFtdKTtcclxuICAgICAgdGhpcy5ncmlkQXBpPy5zaG93TG9hZGluZ092ZXJsYXkoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvblJvd0RhdGEkID0gdGhpcy5yb3dEYXRhLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xyXG4gICAgICB0aGlzLmdyaWRBcGkuc2V0R3JpZE9wdGlvbihcInJvd0RhdGFcIiwgZGF0YSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUZpbHRlcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmdyaWRBcGk/LnNldFF1aWNrRmlsdGVyKHZhbHVlKTtcclxuICAgIHRoaXMub25DaGFuZ2VGaWx0ZXIuZW1pdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkFkZFJvd0VtaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQWRkUm93LmVtaXQodGhpcy5ncmlkQXBpKTtcclxuICB9XHJcblxyXG4gIGhpZGVIZWFkZXJNZW51QWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5jb25maWdCdXR0b25zQWN0aW9uPy5oZWFkZXI/LnN1Ym1lbnU/LmV2ZXJ5KCh7IGhpZGUgfSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlRnVuYyhoaWRlKTtcclxuICAgICAgfSkgPz8gZmFsc2VcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwYWdpbmF0aW9uQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zY0FnR3JpZFBhZ2luYXRpb24pIHRoaXMuX3NjQWdHcmlkUGFnaW5hdGlvbi5vblBhZ2luYXRpb25DaGFuZ2VkKCk7XHJcbiAgfVxyXG5cclxuICBncmlkUmVhZHkoZXZlbnQ6IEdyaWRSZWFkeUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmdyaWRBcGkgPSBldmVudC5hcGk7XHJcblxyXG4gICAgdGhpcy5pbml0Um93RGF0YSgpO1xyXG4gICAgdGhpcy5vbkdyaWRSZWFkeS5lbWl0KFt0aGlzLmdyaWRBcGldKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBwYXJhbSBldmVudDogb3BjaW9uYWwgLSBDb250aWVuZSBlbCBub2RvIHkgbGEgZGF0YSBkZSBsYSBmaWxhIGFjdHVhbC5cclxuICAgKiBAZGVzY3JpcHRpb24gU2UgZGlzcGFyYSBjYWRhIHZleiBxdWUgbGEgZmlsYSBlcyBjb2xvY2FkYSBlbiBzdSBudWV2YSBwb3NpY2nDs24gKERyYWcgJiBEcm9wKS5cclxuICAgKi9cclxuICByb3dEcmFnRW5kRW1pdChldmVudDogUm93RHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uUm93RHJhZ0VuZC5lbWl0KGV2ZW50KTtcclxuICB9XHJcblxyXG4gIGNlbGxDb250ZXh0TWVudShldmVudDogQ2VsbENvbnRleHRNZW51RXZlbnQpIHtcclxuICAgIHRoaXMuY2VsbENvbnRleHRNZW51QWN0dWFsID0gZXZlbnQ7XHJcbiAgICB0aGlzLm9uQ2VsbENvbnRleHRNZW51LmVtaXQoZXZlbnQpO1xyXG4gICAgdGhpcy5sZWZ0TWVudSA9IChldmVudC5ldmVudCEgYXMgUG9pbnRlckV2ZW50KS54LnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLmJvdHRvbU1lbnUgPSAoKGV2ZW50LmV2ZW50ISBhcyBQb2ludGVyRXZlbnQpLnkgLSAyMCkudG9TdHJpbmcoKTtcclxuICAgIGlmIChldmVudC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2hvd01lbnVEZWZhdWx0KSB0aGlzLm1lbnVUcmlnZ2VyPy5vcGVuTWVudSgpO1xyXG4gIH1cclxuXHJcbiAgcm93RGF0YUNoYW5nZWQoZXZlbnQ6IFJvd0RhdGFVcGRhdGVkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5ncmlkQXBpKSByZXR1cm47XHJcblxyXG4gICAgaWYgKCF0aGlzLmdyaWRBcGk/LmdldERpc3BsYXllZFJvd0NvdW50KCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLm9uR3JpZENoYW5nZS5lbWl0KFt0aGlzLmdyaWRBcGksIGV2ZW50XSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3Rpb25DaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MgPSB0aGlzLmdyaWRBcGk/LmdldFNlbGVjdGVkUm93cygpO1xyXG4gICAgdGhpcy5vbkdyaWRTZWxlY3RDaGFuZ2UuZW1pdCh0aGlzLmdyaWRBcGk/LmdldFNlbGVjdGVkUm93cygpKTtcclxuICB9XHJcblxyXG4gIGNlbGxTdG9wRWRpdGluZyhldnQ6IENlbGxFZGl0aW5nU3RvcHBlZEV2ZW50KSB7XHJcbiAgICB0aGlzLm9uQ2VsbFN0b3BFZGl0aW5nLmVtaXQoZXZ0KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNlbGxLZXlEb3duKGV2dDogQ2VsbEtleURvd25FdmVudCkge1xyXG4gICAgdGhpcy5vbkNlbGxLZXlEb3duLmVtaXQoZXZ0KTtcclxuICAgIGlmICgoZXZ0LmV2ZW50IGFzIEtleWJvYXJkRXZlbnQpLmN0cmxLZXkgJiYgKGV2dC5ldmVudCBhcyBLZXlib2FyZEV2ZW50KS5rZXkgPT09IFwiQXJyb3dEb3duXCIgJiYgZXZ0Lm5vZGUubGFzdENoaWxkKSB7XHJcbiAgICAgIHRoaXMub25HcmlkQWRkUm93LmVtaXQoZXZ0KTtcclxuICAgIH0gZWxzZSBpZiAoKGV2dC5ldmVudCBhcyBLZXlib2FyZEV2ZW50KS5jdHJsS2V5ICYmIChldnQuZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCkua2V5LnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IFwiY1wiICYmIHRoaXMudXNlR3JpZENvcHkpIHtcclxuICAgICAgdGhpcy5jb3B5KGV2dCk7XHJcbiAgICB9IGVsc2UgaWYgKChldnQuZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCkuY3RybEtleSAmJiAoZXZ0LmV2ZW50IGFzIEtleWJvYXJkRXZlbnQpLmtleS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBcInZcIiAmJiB0aGlzLnVzZUdyaWRDb3B5KSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucGFzdGUoZXZ0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvcHkoZXZ0OiBDZWxsS2V5RG93bkV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIWV2dC5ub2RlLmlzU2VsZWN0ZWQoKSkge1xyXG4gICAgICB0aGlzLmNvcGllZENlbGwgPSBldnQ7XHJcbiAgICAgIGlmIChldnQudmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KChldnQudmFsdWUgYXMgSU5nU2VsZWN0KT8ubGFiZWwgPz8gXCJcIik7XHJcbiAgICAgIGVsc2UgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZXZ0LnZhbHVlID8/IFwiXCIpO1xyXG4gICAgICB0aGlzLl9tZXNzYWdlVXRpbFNlcnZpY2UuZ2V0QWxlcnRTdWNjZXNzKFwiQ2VsZGEgQ29waWFkYVwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29waWVkUm93ID0gdGhpcy5ncmlkQXBpLmdldFNlbGVjdGVkTm9kZXMoKTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVV0aWxTZXJ2aWNlLmdldEFsZXJ0U3VjY2VzcyhcIkZpbGEgQ29waWFkYVwiKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JpZEFwaS5kZXNlbGVjdEFsbCgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGFzdGUoZXZ0OiBDZWxsS2V5RG93bkV2ZW50KSB7XHJcbiAgICBpZiAoIWV2dC5ub2RlLmlzU2VsZWN0ZWQoKSAmJiB0aGlzLmNvcGllZENlbGwpIHtcclxuICAgICAgaWYgKGV2dC5jb2x1bW4uZ2V0Q29sSWQoKSA9PT0gdGhpcy5jb3BpZWRDZWxsLmNvbHVtbi5nZXRDb2xJZCgpICYmIChldnQuZGF0YSBhcyBGb3JtR3JvdXApLmdldChldnQuY29sdW1uLmdldENvbElkKCkpIS5lbmFibGVkKSB7XHJcbiAgICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRlUGFzdGVDZWxsKSBpc1ZhbGlkID0gYXdhaXQgdGhpcy52YWxpZGF0ZVBhc3RlQ2VsbCh0aGlzLmNvcGllZENlbGwsIGV2dCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmdyaWRBcGkuZGVzZWxlY3RBbGwoKTtcclxuICAgICAgICB0aGlzLmJlZm9yZVBhc3RlQ2VsbC5lbWl0KFtldnQsIHRoaXMuY29waWVkQ2VsbF0pO1xyXG4gICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAoZXZ0LmRhdGEgYXMgRm9ybUdyb3VwKS5nZXQoZXZ0LmNvbHVtbi5nZXRDb2xJZCgpKSEuc2V0VmFsdWUodGhpcy5jb3BpZWRDZWxsLnZhbHVlKTtcclxuICAgICAgICAgIHRoaXMuZ3JpZEFwaS5yZWZyZXNoQ2VsbHMoe1xyXG4gICAgICAgICAgICBjb2x1bW5zOiBbZXZ0LmNvbHVtbl0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuYWZ0ZXJQYXN0ZUNlbGwuZW1pdChbZXZ0LCB0aGlzLmNvcGllZENlbGxdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZXZ0Lm5vZGUuaXNTZWxlY3RlZCgpICYmIHRoaXMuY29waWVkUm93KSB7XHJcbiAgICAgIGNvbnN0IElSb3dOb2RlID0gdGhpcy5ncmlkQXBpLmdldFNlbGVjdGVkTm9kZXMoKTtcclxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy52YWxpZGF0ZVBhc3RlUm93cykgaXNWYWxpZCA9IGF3YWl0IHRoaXMudmFsaWRhdGVQYXN0ZVJvd3ModGhpcy5jb3BpZWRSb3csIElSb3dOb2RlKTtcclxuICAgICAgZWxzZSB0aGlzLmdyaWRBcGkuZGVzZWxlY3RBbGwoKTtcclxuICAgICAgdGhpcy5iZWZvcmVQYXN0ZVJvd3MuZW1pdChbdGhpcy5ncmlkQXBpLmdldFNlbGVjdGVkTm9kZXMoKSwgdGhpcy5jb3BpZWRSb3ddKTtcclxuICAgICAgaWYgKGlzVmFsaWQpIHtcclxuICAgICAgICBsZXQgaW5kZXhSb3dDb3B5ID0gMDtcclxuICAgICAgICBJUm93Tm9kZS5mb3JFYWNoKChyKSA9PiB7XHJcbiAgICAgICAgICAoci5kYXRhIGFzIEZvcm1Hcm91cCkucGF0Y2hWYWx1ZSgodGhpcy5jb3BpZWRSb3chW2luZGV4Um93Q29weV0uZGF0YSBhcyBGb3JtR3JvdXApLmdldFJhd1ZhbHVlKCkpO1xyXG4gICAgICAgICAgdGhpcy5ncmlkQXBpLnJlZnJlc2hDZWxscyh7XHJcbiAgICAgICAgICAgIHJvd05vZGVzOiBbcl0sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGluZGV4Um93Q29weSsrO1xyXG4gICAgICAgICAgaWYgKGluZGV4Um93Q29weSA9PSB0aGlzLmNvcGllZFJvdyEubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGluZGV4Um93Q29weSA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hZnRlclBhc3RlUm93cy5lbWl0KFt0aGlzLmdyaWRBcGkuZ2V0U2VsZWN0ZWROb2RlcygpLCB0aGlzLmNvcGllZFJvd10pO1xyXG4gICAgICAgIHRoaXMuZ3JpZEFwaS5kZXNlbGVjdEFsbCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb3B5TWVudShldmVudDogQ2VsbENvbnRleHRNZW51RXZlbnQpIHtcclxuICAgIHRoaXMub25Db3B5TWVudS5lbWl0KGV2ZW50KTtcclxuICAgIHRoaXMuY29weShldmVudCk7XHJcbiAgfVxyXG5cclxuICBwYXN0ZU1lbnUoZXZlbnQ6IENlbGxDb250ZXh0TWVudUV2ZW50KSB7XHJcbiAgICB0aGlzLm9uUGFzdGVNZW51LmVtaXQoZXZlbnQpO1xyXG4gICAgdGhpcy5wYXN0ZShldmVudCk7XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzYWJsZWRQYXN0ZU1lbnUoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5ncmlkQXBpPy5nZXRTZWxlY3RlZFJvd3MoKS5sZW5ndGggPT0gMCAmJiAhdGhpcy5jb3BpZWRDZWxsKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmdyaWRBcGk/LmdldFNlbGVjdGVkUm93cygpLmxlbmd0aCA+IDAgJiYgIXRoaXMuY29waWVkUm93KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5jb3BpZWRDZWxsICYmICF0aGlzLmNvcGllZFJvdykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc09iakVtcHR5PFQ+KG9iamVjdDogVCk6IGJvb2xlYW4ge1xyXG4gIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xyXG5cclxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGggPT09IDA7XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInctMTAwXCI+XHJcbiAgPCEtLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT5cclxuICA8IS0tIEFHLUdSSUQgSEVBREVSIC0tPlxyXG4gIDwhLS09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+XHJcbiAgPGRpdlxyXG4gICAgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG15LTJcIlxyXG4gICAgKm5nSWY9XCJ2aXNpYmxlU2VhcmNoIHx8IGJ0bkFkZD8udmlzaWJsZSB8fCB2aWV3Q2hpbGRyZW5CdXR0b25IZWFkZXJzPy5sZW5ndGhcIj5cclxuICAgIDxkaXYgW2NsYXNzXT1cImZpbGxTZWFyY2ggPyAnY29sLTEyIG15LTInIDogc2VhcmNoQ2xhc3NcIiAqbmdJZj1cInZpc2libGVTZWFyY2hcIj5cclxuICAgICAgPGlucHV0LXNlYXJjaCAob25DaGFuZ2UpPVwiY2hhbmdlRmlsdGVyKCRldmVudClcIj48L2lucHV0LXNlYXJjaD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgW2NsYXNzXT1cInZpc2libGVTZWFyY2ggPyAnY29sLXNtLTEyIGNvbC1tZC02IGNvbC1sZy02IGNvbC14bC03IGNvbC0xMicgOiAnY29sLTEyJ1wiXHJcbiAgICAgIGNsYXNzPVwic2MtYWctZ3JpZC1oZWFkZXItYWN0aW9ucyBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiXHJcbiAgICAgICpuZ0lmPVwiYnRuQWRkPy52aXNpYmxlIHx8IHZpZXdDaGlsZHJlbkJ1dHRvbkhlYWRlcnM/Lmxlbmd0aCB8fCBjb25maWdCdXR0b25zQWN0aW9uPy5oZWFkZXIgfHwgY29uZmlnSGVhZGVyICE9IG51bGxcIj5cclxuICAgICAgPCEtLSBIZWFkZXIgYWN0aW9ucyBidXR0b25zIC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnQnV0dG9uc0FjdGlvbiAmJiBjb25maWdIZWFkZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnSGVhZGVyLmRpc2FibGVkID09PSBmYWxzZTsgZWxzZSB0ZW1wbGF0ZUFjdGlvblwiPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wQWN0aW9uc1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlQWN0aW9uPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkUm93cy5sZW5ndGggPT09IDA7IGVsc2UgdGVtcEFjdGlvbnNcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1pY29uIGJ0bi13aWR0aCBidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgZGlzYWJsZWQ+XHJcbiAgICAgICAgICAgICAgQWNjaW9uZXNcclxuICAgICAgICAgICAgICA8ZW0gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIj48L2VtPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcEFjdGlvbnM+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaGlkZUhlYWRlck1lbnVBY3Rpb24oKTsgZWxzZSB0ZW1wbGF0ZUhlYWRlckFjdGlvblwiIGNsYXNzPVwiYnRuLWljb24gYnRuLXdpZHRoIGJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5cclxuICAgICAgICAgICAgQWNjaW9uZXNcclxuICAgICAgICAgICAgPGVtIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1kb3duXCI+PC9lbT5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVIZWFkZXJBY3Rpb24+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWljb24gYnRuLXdpZHRoIGJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwicGFuZWwubWVudVwiPlxyXG4gICAgICAgICAgICAgIEFjY2lvbmVzXHJcbiAgICAgICAgICAgICAgPGVtIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1kb3duXCI+PC9lbT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8c2MtbWVudS1wYW5lbCAjcGFuZWwgY2xhc3M9XCJkLW5vbmVcIiBbc3ViTWVudXNdPVwiY29uZmlnSGVhZGVyLnN1Ym1lbnUgPz8gW11cIj48L3NjLW1lbnUtcGFuZWw+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tIEVuZCBoZWFkZXIgYWN0aW9ucyBidXR0b25zIC0tPlxyXG5cclxuICAgICAgPCEtLSBPdGhlciBidXR0b25zIC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmlld0NoaWxkcmVuQnV0dG9uSGVhZGVycz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHZpZXdDaGlsZHJlbkJ1dHRvbkhlYWRlciBvZiB2aWV3Q2hpbGRyZW5CdXR0b25IZWFkZXJzXCJcclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInZpZXdDaGlsZHJlbkJ1dHRvbkhlYWRlci50ZW1wbGF0ZVwiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLUVuZCBvdGhlciBidXR0b25zIC0tPlxyXG5cclxuICAgICAgPCEtLSBBZGQgYnV0dG9uIC0tPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnRuQWRkPy52aXNpYmxlXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICBjbGFzcz1cImJ0bi13aWR0aCBidG4gYnRuLXdhcm5pbmcgYnRuLXNtXCJcclxuICAgICAgICAgIChjbGljayk9XCJvbkFkZFJvd0VtaXQoKVwiXHJcbiAgICAgICAgICAjYnV0dG9uQWRkXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuQWRkLmRpc2FibGVkID8/IGZhbHNlXCI+XHJcbiAgICAgICAgICBBZ3JlZ2FyXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tRW5kIGFkZCBidXR0b24gLS0+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPlxyXG4gIDwhLS0gQUctR1JJRCBIRUFERVIgRU5EIC0tPlxyXG4gIDwhLS09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiBbbmdTdHlsZV09XCJuZ1N0eWxlQ29udGFpbmVyXCI+XHJcbiAgICAgIDxhZy1ncmlkLWFuZ3VsYXJcclxuICAgICAgICAjYWdHcmlkXHJcbiAgICAgICAgY2xhc3M9XCJhZy10aGVtZS1iYWxoYW1cIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIm5nU3R5bGVBZ0dyaWRcIlxyXG4gICAgICAgIFtjb2x1bW5EZWZzXT1cImNvbHVtbkRlZnNBbmRBZGRDZWxsQWN0aW9uc1wiXHJcbiAgICAgICAgW2RlZmF1bHRDb2xEZWZdPVwiZGVmYXVsdENvbERlZlwiXHJcbiAgICAgICAgW2NvbXBvbmVudHNdPVwiX2ZyYW1ld29ya0NvbXBvbmVudHNcIlxyXG4gICAgICAgIFtjb250ZXh0XT1cIl9jb250ZXh0XCJcclxuICAgICAgICBbcm93U2VsZWN0aW9uXT1cInJvd1NlbGVjdGlvblwiXHJcbiAgICAgICAgW2lzUm93U2VsZWN0YWJsZV09XCJpc1Jvd1NlbGVjdGFibGVcIlxyXG4gICAgICAgIFtyb3dEcmFnTWFuYWdlZF09XCJyb3dEcmFnTWFuYWdlZFwiXHJcbiAgICAgICAgW2RvbUxheW91dF09XCJkb21MYXlvdXRcIlxyXG4gICAgICAgIFthbmltYXRlUm93c109XCJhbmltYXRlUm93c1wiXHJcbiAgICAgICAgW2dldFJvd1N0eWxlXT1cImdldFJvd1N0eWxlXCJcclxuICAgICAgICBbZW5hYmxlUmFuZ2VTZWxlY3Rpb25dPVwiZW5hYmxlUmFuZ2VTZWxlY3Rpb25cIlxyXG4gICAgICAgIFtzdXBwcmVzc1Jvd1RyYW5zZm9ybV09XCJzdXBwcmVzc1Jvd1RyYW5zZm9ybVwiXHJcbiAgICAgICAgW3N1cHByZXNzTW92ZVdoZW5Sb3dEcmFnZ2luZ109XCJhbmltYXRlUm93c1wiXHJcbiAgICAgICAgW292ZXJsYXlOb1Jvd3NUZW1wbGF0ZV09XCJvdmVybGF5Tm9Sb3dzVGVtcGxhdGVcIlxyXG4gICAgICAgIFtvdmVybGF5TG9hZGluZ1RlbXBsYXRlXT1cIm92ZXJsYXlMb2FkaW5nVGVtcGxhdGVcIlxyXG4gICAgICAgIFtub1Jvd3NPdmVybGF5Q29tcG9uZW50UGFyYW1zXT1cIm5vUm93c092ZXJsYXlDb21wb25lbnRQYXJhbXNcIlxyXG4gICAgICAgIFtzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uXT1cInN1cHByZXNzUm93Q2xpY2tTZWxlY3Rpb25cIlxyXG4gICAgICAgIFtzdXBwcmVzc0RyYWdMZWF2ZUhpZGVzQ29sdW1uc109XCJzdXBwcmVzc0RyYWdMZWF2ZUhpZGVzQ29sdW1uc1wiXHJcbiAgICAgICAgW3N1cHByZXNzU2Nyb2xsT25OZXdEYXRhXT1cInN1cHByZXNzU2Nyb2xsT25OZXdEYXRhXCJcclxuICAgICAgICBbc3VwcHJlc3NQcm9wZXJ0eU5hbWVzQ2hlY2tdPVwidHJ1ZVwiXHJcbiAgICAgICAgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdpbmF0aW9uID8gcGFnaW5hdGlvblBhZ2VTaXplIDogdW5kZWZpbmVkXCJcclxuICAgICAgICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcclxuICAgICAgICBbc3VwcHJlc3NQYWdpbmF0aW9uUGFuZWxdPVwic3VwcHJlc3NQYWdpbmF0aW9uUGFuZWxcIlxyXG4gICAgICAgIChyb3dDbGlja2VkKT1cInJvd0NsaWNrZWQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2tlZCk9XCJyb3dEb3VibGVDbGlja2VkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHJvd1NlbGVjdGVkKT1cIm9uUm93U2VsZWN0ZWQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAocGFnaW5hdGlvbkNoYW5nZWQpPVwicGFnaW5hdGlvbkNoYW5nZWQoKVwiXHJcbiAgICAgICAgKGdyaWRSZWFkeSk9XCJncmlkUmVhZHkoJGV2ZW50KVwiXHJcbiAgICAgICAgKHJvd0RyYWdFbmQpPVwicm93RHJhZ0VuZEVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNlbGxDb250ZXh0TWVudSk9XCJjZWxsQ29udGV4dE1lbnUoJGV2ZW50KVwiXHJcbiAgICAgICAgW2VuYWJsZUNlbGxUZXh0U2VsZWN0aW9uXT1cImVuYWJsZUNlbGxUZXh0U2VsZWN0aW9uXCJcclxuICAgICAgICAocm93RGF0YVVwZGF0ZWQpPVwicm93RGF0YUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHJvd0VkaXRpbmdTdGFydGVkKT1cIm9uUm93RWRpdGluZ1N0YXJ0ZWQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAoY2VsbFZhbHVlQ2hhbmdlZCk9XCJjZWxsVmFsdWVDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZWQpPVwic2VsZWN0aW9uQ2hhbmdlZCgpXCJcclxuICAgICAgICAoY2VsbEVkaXRpbmdTdG9wcGVkKT1cImNlbGxTdG9wRWRpdGluZygkZXZlbnQpXCJcclxuICAgICAgICAoY2VsbEtleURvd24pPVwiY2VsbEtleURvd24oJGFueSgkZXZlbnQpKVwiXHJcbiAgICAgICAgW211bHRpU29ydEtleV09XCJtdWx0aVNvcnRLZXlcIlxyXG4gICAgICAgIG9uY29udGV4dG1lbnU9XCJyZXR1cm4gZmFsc2U7XCI+XHJcbiAgICAgIDwvYWctZ3JpZC1hbmd1bGFyPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+XHJcbiAgPCEtLSBBRy1HUklEIFBBR0lOQVRJT04gLS0+XHJcbiAgPCEtLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT5cclxuICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJwYWdpbmF0aW9uXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgIDxzYy1hZy1ncmlkLXBhZ2luYXRpb25cclxuICAgICAgICAjc2NBZ0dyaWRQYWdpbmF0aW9uXHJcbiAgICAgICAgW2dyaWRBcGldPVwiZ3JpZEFwaVwiXHJcbiAgICAgICAgW3BhZ2luYXRpb25QYWdlU2l6ZV09XCJwYWdpbmF0aW9uUGFnZVNpemVcIlxyXG4gICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCI+PC9zYy1hZy1ncmlkLXBhZ2luYXRpb24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPlxyXG4gIDwhLS0gQUctR1JJRCBQQUdJTkFUSU9OIEVORCAtLT5cclxuICA8IS0tPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPlxyXG48L2Rpdj5cclxuXHJcbjxkaXZcclxuICAqbmdJZj1cInNob3dNZW51RGVmYXVsdFwiXHJcbiAgb25jb250ZXh0bWVudT1cInJldHVybiBmYWxzZTtcIlxyXG4gIHN0eWxlPVwicG9zaXRpb246IGZpeGVkOyB3aWR0aDogMHB4OyBoZWlnaHQ6IDBweFwiXHJcbiAgW25nU3R5bGVdPVwieyB0b3A6IGJvdHRvbU1lbnUgKyAncHgnLCBsZWZ0OiBsZWZ0TWVudSArICdweCcgfVwiPlxyXG4gIDxtYXQtbWVudSBvbmNvbnRleHRtZW51PVwicmV0dXJuIGZhbHNlO1wiICNzY01lbnU9XCJtYXRNZW51XCI+XHJcbiAgICA8YnV0dG9uIG9uY29udGV4dG1lbnU9XCJyZXR1cm4gZmFsc2U7XCIgKGNsaWNrKT1cImNvcHlNZW51KGNlbGxDb250ZXh0TWVudUFjdHVhbCEpXCIgbWF0LW1lbnUtaXRlbT5cclxuICAgICAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+IDxzcGFuPkNvcGlhcjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRQYXN0ZU1lbnVcIiBvbmNvbnRleHRtZW51PVwicmV0dXJuIGZhbHNlO1wiIChjbGljayk9XCJwYXN0ZU1lbnUoY2VsbENvbnRleHRNZW51QWN0dWFsISlcIiBtYXQtbWVudS1pdGVtPlxyXG4gICAgICA8bWF0LWljb24+Y29udGVudF9wYXN0ZTwvbWF0LWljb24+PHNwYW4+UGVnYXI8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L21hdC1tZW51PlxyXG4gIDxidXR0b24gb25jb250ZXh0bWVudT1cInJldHVybiBmYWxzZTtcIiBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlblwiIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInNjTWVudVwiICNtZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCI+XHJcbiAgICBNZW51XHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
573
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtYWctZ3JpZC1jdXN0b21pemFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXN1bWF4LWVycC1jb21wb25lbnQvc3JjL2xpYi9zYy1hZy1ncmlkL3NjLWFnLWdyaWQtY3VzdG9taXphYmxlL3NjLWFnLWdyaWQtY3VzdG9taXphYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdW1heC1lcnAtY29tcG9uZW50L3NyYy9saWIvc2MtYWctZ3JpZC9zYy1hZy1ncmlkLWN1c3RvbWl6YWJsZS9zYy1hZy1ncmlkLWN1c3RvbWl6YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBR04sU0FBUyxFQUNULE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQW9CdkIsT0FBTyxFQUFjLFlBQVksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFcEQsT0FBTyxFQUtMLGNBQWMsR0FJZixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNFQUFzRSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7O0FBR3hFLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQVdmLE1BQU0sT0FBTyw2QkFBNkI7SUFWMUM7UUF3QkUsb0NBQStCLEdBQUcsMkJBQTJCLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFFL0Qsb0JBQWUsR0FBb0IsR0FBRyxF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QU0sQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGluamVjdCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudVwiO1xyXG5pbXBvcnQge1xyXG4gIENlbGxDb250ZXh0TWVudUV2ZW50LFxyXG4gIENlbGxFZGl0aW5nU3RvcHBlZEV2ZW50LFxyXG4gIENlbGxLZXlEb3duRXZlbnQsXHJcbiAgQ2VsbFZhbHVlQ2hhbmdlZEV2ZW50LFxyXG4gIENvbERlZixcclxuICBHcmlkQXBpLFxyXG4gIEdyaWRSZWFkeUV2ZW50LFxyXG4gIElSb3dOb2RlLFxyXG4gIElzUm93U2VsZWN0YWJsZSxcclxuICBSb3dDbGlja2VkRXZlbnQsXHJcbiAgUm93RGF0YVVwZGF0ZWRFdmVudCxcclxuICBSb3dEb3VibGVDbGlja2VkRXZlbnQsXHJcbiAgUm93RHJhZ0V2ZW50LFxyXG4gIFJvd0VkaXRpbmdTdGFydGVkRXZlbnQsXHJcbiAgUm93U2VsZWN0ZWRFdmVudCxcclxufSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IElOZ1NlbGVjdCB9IGZyb20gXCIuLi8uLi91dGlscy9JTmdTZWxlY3RcIjtcclxuaW1wb3J0IHtcclxuICBCdXR0b25IZWFkZXIsXHJcbiAgQ29uZmlnQnV0dG9uQWN0aW9uLFxyXG4gIENvbmZpZ0J1dHRvbkFnR3JpZCxcclxuICBDb25maWdCdXR0b25IZWFkZXIsXHJcbiAgRW51bUJ1dHRvblR5cGUsXHJcbiAgR2V0Um93U3R5bGUsXHJcbiAgSGlkZUZ1YyxcclxuICBSb3dTZWxlY3Rpb24sXHJcbn0gZnJvbSBcIi4uLy4uL3V0aWxzL0lTY0FnR3JpZFwiO1xyXG5pbXBvcnQgeyBNZXNzYWdlVXRpbFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWVzc2FnZS11dGlsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2NDZWxsUmVuZGVyQnV0dG9uU2VydmljZSB9IGZyb20gXCIuLi9jZWxsLXJlbmRlci9zYy1jZWxsLXJlbmRlci1idXR0b24vc2MtY2VsbC1yZW5kZXItYnV0dG9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBzY0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vY2VsbC1yZW5kZXIvc2MtY2VsbC1yZW5kZXItY29uZmlnXCI7XHJcbmltcG9ydCB7IFNjQWdHcmlkQnV0dG9uSGVhZGVyIH0gZnJvbSBcIi4uL2RpcmVjdGl2ZXMvc2NBZ0dyaWQuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IFNjQWdHcmlkUGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9zYy1hZy1ncmlkLXBhZ2luYXRpb24vc2MtYWctZ3JpZC1wYWdpbmF0aW9uLmNvbXBvbmVudFwiO1xyXG5cclxubGV0IG5leHRJZCA9IDA7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcInNjLWFnLWdyaWQtY3VzdG9taXphYmxlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9zYy1hZy1ncmlkLWN1c3RvbWl6YWJsZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vc2MtYWctZ3JpZC1jdXN0b21pemFibGUuY29tcG9uZW50LnNjc3NcIixcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBob3N0OiB7XHJcbiAgICBcIltpZF1cIjogXCJpZFNjQWdHcmlkQ3VzdG9taXphYmxlQ29tcG9uZW50XCIsXHJcbiAgICBjbGFzczogXCJzYy1hZy1ncmlkLWN1c3RvbWl6YWJsZVwiLFxyXG4gIH0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTY0FnR3JpZEN1c3RvbWl6YWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2NBZ0dyaWRCdXR0b25IZWFkZXIsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcclxuICB2aWV3Q2hpbGRyZW5CdXR0b25IZWFkZXJzITogUXVlcnlMaXN0PFNjQWdHcmlkQnV0dG9uSGVhZGVyPjtcclxuXHJcbiAgQFZpZXdDaGlsZChcIm1lbnVUcmlnZ2VyXCIpIG1lbnVUcmlnZ2VyPzogTWF0TWVudVRyaWdnZXI7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJzY0FnR3JpZFBhZ2luYXRpb25cIilcclxuICBwcml2YXRlIF9zY0FnR3JpZFBhZ2luYXRpb24/OiBTY0FnR3JpZFBhZ2luYXRpb25Db21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJidXR0b25BZGRcIikgYnV0dG9uQWRkPzogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XHJcbiAgZ2V0IGJ1dHRvbkFkZEVsZW1lbnQoKTogSFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmJ1dHRvbkFkZD8ubmF0aXZlRWxlbWVudCA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgaWRTY0FnR3JpZEN1c3RvbWl6YWJsZUNvbXBvbmVudCA9IGBzYy1hZy1ncmlkLWN1c3RvbWl6YWJsZS0keysrbmV4dElkfWA7XHJcblxyXG4gIEBJbnB1dCgpIGlzUm93U2VsZWN0YWJsZTogSXNSb3dTZWxlY3RhYmxlID0gKCkgPT4gdHJ1ZTtcclxuXHJcbiAgc2VhcmNoQ2xhc3MgPSBcImNvbC0xMiBjb2wtc20tMTIgY29sLW1kLTYgY29sLWxnLTYgY29sLXhsLTUgbXktMlwiO1xyXG4gIEBJbnB1dCgpIGdldFJvd1N0eWxlOiBHZXRSb3dTdHlsZSA9ICgpID0+IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBmaWxsU2VhcmNoID0gZmFsc2U7XHJcbiAgLy8jcmVnaW9uIElucHV0c1xyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBDYW50aWRhZCBkZSBpdGVtcyBxdWUgc2UgbW9zdHJhcsOhIHBvciBww6FnaW5hXHJcbiAgICogQGRlZmF1bHQgMTVcclxuICAgKi9cclxuICBASW5wdXQoKSBwYWdpbmF0aW9uUGFnZVNpemUgPSAxNTtcclxuICBASW5wdXQoKSBzZWFyY2hXaWR0aCA9IFwiXCI7XHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uICBPcGNpb25lcyBkZSB0YW1hw7FvIGRlIHDDoWdpbmFcclxuICAgKiBAZGVmYXVsdCAnWzUsIDEwLCAxNSwgMjAsIDI1XSdcclxuICAgKi9cclxuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnMgPSBbNSwgMTAsIDE1LCAyMCwgMjVdO1xyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBTaSBlbCB2YWxvciBlcyBgdHJ1ZWAgbXVlc3RyYSBsYSBwYWdpbmFjacOzblxyXG4gICAqIEBkZWZhdWx0IHRydWVcclxuICAgKi9cclxuICBASW5wdXQoKSBwYWdpbmF0aW9uID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gVGlwbyBkZSBzZWxlY2lvbiBlbiBsYSBgZ3JpbGxhYHNcclxuICAgKiBAZGVmYXVsdCAnc2ltcGxlJ1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHJvd1NlbGVjdGlvbjogUm93U2VsZWN0aW9uID0gXCJzaW5nbGVcIjtcclxuICAvLyBASW5wdXQoKSBzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uID0gdHJ1ZTtcclxuICBnZXQgc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGlvbiA9PT0gXCJzaW5nbGVcIiA/IGZhbHNlIDogdHJ1ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIEFycmF5IGRlIGNvbHVtbmFzIHF1ZSBzZSBtb3N0cmFyYSBlbiBsYSBgZ3JpbGxhYFxyXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGNvbHVtbkRlZnM6IENvbERlZltdID0gW107XHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIEFycmF5IGRlIGRhdG9zIHF1ZSBzZSBtb3N0cmFyYSBlbiBsYSBgZ3JpbGxhYFxyXG4gICAqIEBkZWZhdWx0IG51bGxcclxuICAgKi9cclxuICBASW5wdXQoKSByb3dEYXRhOiBPYnNlcnZhYmxlPGFueVtdPiA9IG9mKFtdKTtcclxuXHJcbiAgQElucHV0KCkgY29uZmlnQnV0dG9uc0FjdGlvbiE6IENvbmZpZ0J1dHRvbkFjdGlvbjtcclxuICBnZXQgY29uZmlnSGVhZGVyKCk6IENvbmZpZ0J1dHRvbkhlYWRlciB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnQnV0dG9uc0FjdGlvbj8uaGVhZGVyID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBkZWZhdWx0Q2VsbFJlbmRlcmVyQWN0aW9uczogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xyXG5cclxuICBfY29uZmlnQnV0dG9uc0RlZmF1bHRBZ0dyaWQ6IENvbmZpZ0J1dHRvbkFnR3JpZFtdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBTaSBlbCB2YWxvciBlcyBgdHJ1ZWAgbXVlc3RyYSBlbCBgYnVzY2Fkb3JgXHJcbiAgICogQGRlZmF1bHQgdHJ1ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHZpc2libGVTZWFyY2ggPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBkb21MYXlvdXQ6IFwibm9ybWFsXCIgfCBcImF1dG9IZWlnaHRcIiA9IFwibm9ybWFsXCI7XHJcbiAgQElucHV0KCkgaGVpZ2h0ID0gXCIyMGVtXCI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBDcG5maWd1cmFjacOzbiBwYXJhIGVsIGJvdG9uIGBBZ3JlZ2FyYFxyXG4gICAqIEBkZWZhdWx0ICd7IHZpc2libGU6IHRydWUsIGRpc2FibGVkOiBmYWxzZSB9J1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGJ0bkFkZDogQnV0dG9uSGVhZGVyID0geyB2aXNpYmxlOiB0cnVlIH07XHJcbiAgLyoqXHJcbiAgICogQGRlc2NyaXB0aW9uIFBhcmEgYWN0aXZhciBvIGRlc2NhdGl2YXIgZWwgZHJhZyAmIGRyb3BcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHJvd0RyYWdNYW5hZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJhIGFjdGl2YXIgbyBkZXNjYXRpdmFyIGxhcyBhbmltYWNpb25lc1xyXG4gICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICovXHJcbiAgQElucHV0KCkgYW5pbWF0ZVJvd3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgdXNlR3JpZENvcHkgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtdWx0aVNvcnRLZXkhOiBhbnk7XHJcbiAgQElucHV0KCkgc2hvd01lbnVEZWZhdWx0ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlQ2VsbFRleHRTZWxlY3Rpb24gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHN1cHByZXNzUm93VHJhbnNmb3JtID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlUmFuZ2VTZWxlY3Rpb24gPSBmYWxzZTtcclxuICBASW5wdXQoKSBub1Jvd3NPdmVybGF5Q29tcG9uZW50ID0gXCJcIjtcclxuICBASW5wdXQoKSBub1Jvd3NPdmVybGF5Q29tcG9uZW50UGFyYW1zID0ge307XHJcbiAgQElucHV0KCkgdG9vbHRpcEhpZGVEZWxheTogbnVtYmVyID0gMTAwMDtcclxuICBASW5wdXQoKSB0b29sdGlwU2hvd0RlbGF5OiBudW1iZXIgPSAxMDA7XHJcbiAgQElucHV0KCkgdG9vbHRpcFNob3dNb2RlOiBcInN0YW5kYXJkXCIgfCBcIndoZW5UcnVuY2F0ZWRcIiA9ICdzdGFuZGFyZCc7XHJcbiAgQElucHV0KCkgdmFsaWRhdGVQYXN0ZUNlbGw/OiAoZXZ0U291cmNlOiBDZWxsS2V5RG93bkV2ZW50LCBldnRUYXJnZXQ6IENlbGxLZXlEb3duRXZlbnQpID0+IFByb21pc2U8Ym9vbGVhbj4gPSAoXHJcbiAgICBldnRTb3VyY2U6IENlbGxLZXlEb3duRXZlbnQsXHJcbiAgICBldnRUYXJnZXQ6IENlbGxLZXlEb3duRXZlbnRcclxuICApID0+IFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICBASW5wdXQoKSB2YWxpZGF0ZVBhc3RlUm93cz86IChldnRTb3VyY2U6IElSb3dOb2RlW10sIGV2dFRhcmdldDogSVJvd05vZGVbXSkgPT4gUHJvbWlzZTxib29sZWFuPiA9IChcclxuICAgIGV2dFNvdXJjZTogSVJvd05vZGVbXSxcclxuICAgIGV2dFRhcmdldDogSVJvd05vZGVbXVxyXG4gICkgPT4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gUGFyYSBhZ3JlZ2FyIGNvbXBvbmVudGVzIGludGVybm9zIGRlbnRybyBkZSBsYSBncmlsbGFcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCBmcmFtZXdvcmtDb21wb25lbnRzKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuX2ZyYW1ld29ya0NvbXBvbmVudHMgPSB7IC4uLnRoaXMuX2ZyYW1ld29ya0NvbXBvbmVudHMsIC4uLnZhbHVlIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVzY3JpcHRpb24gUGFyYSBwb2RlciBhZ3JlZ2FyIG3DoXMgb2JqZXRvcyBhbCBjb250ZXh0b1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbnRleHQodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5fY29udGV4dCA9IHsgLi4udGhpcy5fY29udGV4dCwgLi4udmFsdWUgfTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXRcclxuICBAT3V0cHV0KCkgb25DaGFuZ2VGaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgb25BZGRSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRBcGk+KCk7XHJcbiAgQE91dHB1dCgpIG9uR3JpZEFkZFJvdyA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbEtleURvd25FdmVudD4oKTtcclxuICBAT3V0cHV0KCkgb25FZGl0Um93ID0gbmV3IEV2ZW50RW1pdHRlcjxJUm93Tm9kZT4oKTtcclxuICBAT3V0cHV0KCkgb25EZWxldGVSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPFtHcmlkQXBpLCBhbnlbXV0+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ2VsbEtleURvd246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkNlbGxTdG9wRWRpdGluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uQnV0dG9uQWN0aW9uQWdHcmlkID0gbmV3IEV2ZW50RW1pdHRlcjxbRW51bUJ1dHRvblR5cGUgfCBzdHJpbmcsIElSb3dOb2RlXT4oKTtcclxuICBAT3V0cHV0KCkgb25CdXR0b25BY3Rpb25IZWFkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFtFbnVtQnV0dG9uVHlwZSB8IHN0cmluZywgYW55W11dPigpO1xyXG5cclxuICAvLyBBZ0dyaWQgRXZlbnRzIC0gT3VwdXRcclxuICBAT3V0cHV0KCkgb25HcmlkUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPFtHcmlkQXBpXT4oKTtcclxuICBAT3V0cHV0KCkgb25HcmlkU2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuICBAT3V0cHV0KCkgb25HcmlkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxbR3JpZEFwaSwgUm93RGF0YVVwZGF0ZWRFdmVudF0+KCk7XHJcbiAgQE91dHB1dCgpIG9uUm93RHJhZ0VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8Um93RHJhZ0V2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBvblJvd0VkaXRpbmdTdGFydGVkID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dFZGl0aW5nU3RhcnRlZEV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSByb3dDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxSb3dDbGlja2VkRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHJvd0RvdWJsZUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFJvd0RvdWJsZUNsaWNrZWRFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgb25Sb3dTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Um93U2VsZWN0ZWRFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgY2VsbFZhbHVlQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbFZhbHVlQ2hhbmdlZEV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBvbkNlbGxDb250ZXh0TWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbENvbnRleHRNZW51RXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIG9uUGFzdGVNZW51ID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsQ29udGV4dE1lbnVFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgb25Db3B5TWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbENvbnRleHRNZW51RXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIGFmdGVyUGFzdGVDZWxsID0gbmV3IEV2ZW50RW1pdHRlcjxbQ2VsbEtleURvd25FdmVudCwgQ2VsbEtleURvd25FdmVudF0+KCk7XHJcbiAgQE91dHB1dCgpIGJlZm9yZVBhc3RlQ2VsbCA9IG5ldyBFdmVudEVtaXR0ZXI8W0NlbGxLZXlEb3duRXZlbnQsIENlbGxLZXlEb3duRXZlbnRdPigpO1xyXG4gIEBPdXRwdXQoKSBhZnRlclBhc3RlUm93cyA9IG5ldyBFdmVudEVtaXR0ZXI8W0lSb3dOb2RlW10sIElSb3dOb2RlW11dPigpO1xyXG4gIEBPdXRwdXQoKSBiZWZvcmVQYXN0ZVJvd3MgPSBuZXcgRXZlbnRFbWl0dGVyPFtJUm93Tm9kZVtdLCBJUm93Tm9kZVtdXT4oKTtcclxuXHJcbiAgY29sdW1uRGVmc0FuZEFkZENlbGxBY3Rpb25zOiBDb2xEZWZbXSA9IFtdO1xyXG4gIGRlZmF1bHRDb2xEZWY6IENvbERlZiA9IHtcclxuICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgIHNvcnRhYmxlOiB0cnVlLFxyXG4gIH07XHJcbiAgX2ZyYW1ld29ya0NvbXBvbmVudHMgPSB7IC4uLnNjQ29tcG9uZW50cyB9O1xyXG4gIF9jb250ZXh0ID0geyBjb21wb25lbnRQYXJlbnQ6IHRoaXMgYXMgYW55IH07XHJcblxyXG4gIGJvdHRvbU1lbnU6IHN0cmluZyA9IFwiMFwiO1xyXG4gIGxlZnRNZW51OiBzdHJpbmcgPSBcIjBcIjtcclxuICBoaWRkZW5NZW51OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29waWVkQ2VsbD86IENlbGxLZXlEb3duRXZlbnQ7XHJcbiAgY29waWVkUm93PzogSVJvd05vZGVbXTtcclxuXHJcbiAgQElucHV0KClcclxuICBvdmVybGF5Tm9Sb3dzVGVtcGxhdGUgPSBgPHNwYW4gY2xhc3M9XCJhZy1vdmVybGF5LWxvYWRpbmctY2VudGVyIGJvcmRlci0wIGJnLXRyYW5zcGFyZW50IHNoYWRvdy1ub25lXCI+XHJcblx0XHRcdE5vIHNlIGVuY29udHJhcm9uIHJlZ2lzdHJvcy4uLlxyXG5cdFx0PC9zcGFuPmA7XHJcblxyXG4gIG92ZXJsYXlMb2FkaW5nVGVtcGxhdGUgPSBgPHNwYW4gY2xhc3M9XCJhZy1vdmVybGF5LWxvYWRpbmctdG9wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgYm9yZGVyLTAgYmctd2hpdGUgc2hhZG93IHAtNCB0ZXh0LWluZm9cIiBzdHlsZT1cImhlaWdodDogMjBweDtcIj5cclxuXHRcdFx0PGltZyBzcmM9XCJhc3NldHMvbWVkaWEtZGVtby9sb2FkaW5nLmdpZlwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyNVwiIGNsYXNzPVwibXItMlwiPlxyXG5cdFx0XHQ8c3Ryb25nPkNhcmdhbmRvIHJlZ2lzdHJvczwvc3Ryb25nPlxyXG5cdFx0PC9zcGFuPlxyXG5cdFx0YDtcclxuICBzdXBwcmVzc0RyYWdMZWF2ZUhpZGVzQ29sdW1ucyA9IHRydWU7XHJcbiAgc3VwcHJlc3NTY3JvbGxPbk5ld0RhdGEgPSBmYWxzZTtcclxuICBzdXBwcmVzc1BhZ2luYXRpb25QYW5lbCA9IHRydWU7XHJcblxyXG4gIC8vIEFnR3JpZCBTdHlsZVxyXG4gIGdldCBuZ1N0eWxlQ29udGFpbmVyKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxyXG4gICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0LFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldCBuZ1N0eWxlQWdHcmlkKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxyXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIF9zdWJzY3JpcHRpb24kID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIHByb2dyZXNzVmlzaWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgZ3JpZEFwaSE6IEdyaWRBcGk7XHJcbiAgX3N1YnNjcmlwdGlvblJvd0RhdGEkPzogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBzZWxlY3RlZFJvd3M6IGFueVtdID0gW107XHJcblxyXG4gIGNlbGxDb250ZXh0TWVudUFjdHVhbD86IENlbGxDb250ZXh0TWVudUV2ZW50O1xyXG5cclxuICBwcml2YXRlIF9zY0NlbGxSZW5kZXJCdXR0b25TZXJ2aWNlID0gaW5qZWN0KFNjQ2VsbFJlbmRlckJ1dHRvblNlcnZpY2UpO1xyXG4gIHByaXZhdGUgX21lc3NhZ2VVdGlsU2VydmljZSA9IGluamVjdChNZXNzYWdlVXRpbFNlcnZpY2UpO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiQuYWRkKFxyXG4gICAgICB0aGlzLl9zY0NlbGxSZW5kZXJCdXR0b25TZXJ2aWNlLmhhbmRsZXJCdXR0b25BY3Rpb24kLnN1YnNjcmliZSgoeyBpbmRleCwgYWN0aW9uIH0pID0+IHtcclxuICAgICAgICBpZiAoYWN0aW9uID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBpZiAoYWN0aW9uLnRyaW0oKSA9PT0gXCJcIikgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLm9uQnV0dG9uQWN0aW9uQWdHcmlkRW1pdChpbmRleCwgYWN0aW9uKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25CdXR0b25BY3Rpb25IZWFkZXJFbWl0KGFjdGlvbik7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaW5pdEFjdGlvbkJ1dHRvbigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmdyaWRBcGkpIHJldHVybjtcclxuICAgIGlmIChjaGFuZ2VzW1wiY29uZmlnQnV0dG9uc0FjdGlvblwiXSkgdGhpcy5pbml0QWN0aW9uQnV0dG9uKCk7XHJcbiAgICBpZiAoY2hhbmdlc1tcInJvd0RhdGFcIl0pIHRoaXMuaW5pdFJvd0RhdGEoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uJD8udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvblJvd0RhdGEkPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoID0gMDtcclxuICB9XHJcblxyXG4gIG9uQnV0dG9uQWN0aW9uSGVhZGVyRW1pdCh0eXBlQnV0dG9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvd3NTZWxlY3RlZCA9IHRoaXMuZ3JpZEFwaT8uZ2V0U2VsZWN0ZWRSb3dzKCk7XHJcbiAgICB0aGlzLm9uQnV0dG9uQWN0aW9uSGVhZGVyLmVtaXQoW3R5cGVCdXR0b24sIHJvd3NTZWxlY3RlZF0pO1xyXG4gIH1cclxuXHJcbiAgaW5pdEFjdGlvbkJ1dHRvbigpOiB2b2lkIHtcclxuICAgIGlmIChpc09iakVtcHR5KHRoaXMuY29uZmlnQnV0dG9uc0FjdGlvbikpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB7IGFnR3JpZCB9ID0gdGhpcy5jb25maWdCdXR0b25zQWN0aW9uITtcclxuXHJcbiAgICBpZiAoYWdHcmlkICYmIGFnR3JpZC5hY3Rpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5fY29uZmlnQnV0dG9uc0RlZmF1bHRBZ0dyaWQgPSBbLi4uYWdHcmlkLmFjdGlvbnNdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2l6ZUZpdENvbHVtbkFjdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgc2l6ZUZpdENvbHVtbkFjdGlvbigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuX2NvbmZpZ0J1dHRvbnNEZWZhdWx0QWdHcmlkLmZpbHRlcigoeyBoaWRlIH0pID0+IHtcclxuICAgICAgcmV0dXJuICF0aGlzLl9oaWRlRnVuYyhoaWRlKTtcclxuICAgIH0pLmxlbmd0aDtcclxuXHJcbiAgICBjb25zdCB3aWR0aCA9IGxlbmd0aCA9PSAyID8gOTAgOiA4MDtcclxuICAgIGNvbnN0IG1pbldpZHRoID0gbGVuZ3RoID4gMiA/IGxlbmd0aCAqIDMzICsgMTAgOiB3aWR0aDtcclxuXHJcbiAgICBjb25zdCBuZXdDb2x1bW5zOiBDb2xEZWYgPSB7XHJcbiAgICAgIGhlYWRlck5hbWU6IFwiQWNjaW9uZXNcIixcclxuICAgICAgaGVhZGVyQ2xhc3M6IFwiYWctaGVhZGVyX19jZW50ZXJcIixcclxuICAgICAgZmllbGQ6IFwiXCIsXHJcbiAgICAgIHdpZHRoOiBtaW5XaWR0aCxcclxuICAgICAgbWluV2lkdGgsXHJcbiAgICAgIG1heFdpZHRoOiBtaW5XaWR0aCxcclxuICAgICAgY2VsbENsYXNzOiBbXCJkLWZsZXhcIiwgXCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIsIFwiYWxpZ24taXRlbXMtY2VudGVyXCJdLFxyXG4gICAgICBjZWxsU3R5bGU6IHsgb3ZlcmZsb3c6IFwidmlzaWJsZVwiIH0sXHJcbiAgICAgIHJlc2l6YWJsZTogZmFsc2UsXHJcbiAgICAgIHNvcnRhYmxlOiBmYWxzZSxcclxuICAgICAgY2VsbFJlbmRlcmVyOiB0aGlzLmRlZmF1bHRDZWxsUmVuZGVyZXJBY3Rpb25zID8gdGhpcy5kZWZhdWx0Q2VsbFJlbmRlcmVyQWN0aW9ucyA6IFwic2NDZWxsUmVuZGVyZXJCdXR0b25Db21wb25lbnRcIixcclxuICAgICAgcGlubmVkOiBcInJpZ2h0XCIsXHJcbiAgICAgIHN1cHByZXNzTWVudTogdHJ1ZSxcclxuICAgICAgbG9ja1Bvc2l0aW9uOiB0cnVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuY29sdW1uRGVmc0FuZEFkZENlbGxBY3Rpb25zID0gdGhpcy5faGlkZUFnR3JpZE1lbnVBY3Rpb24oKSA/IFsuLi50aGlzLmNvbHVtbkRlZnNdIDogWy4uLnRoaXMuY29sdW1uRGVmcywgbmV3Q29sdW1uc107XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oaWRlQWdHcmlkTWVudUFjdGlvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ0J1dHRvbnNBY3Rpb24gPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmNvbmZpZ0J1dHRvbnNBY3Rpb24/LmFnR3JpZD8uYWN0aW9ucy5ldmVyeSgoeyBoaWRlIH0pID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGlkZUZ1bmMoaGlkZSk7XHJcbiAgICAgIH0pID8/IHRydWVcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oaWRlRnVuYyhoaWRlOiBIaWRlRnVjIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGhpZGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHR5cGVvZiBoaWRlID09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGhpZGUoKTtcclxuXHJcbiAgICByZXR1cm4gaGlkZTtcclxuICB9XHJcblxyXG4gIG9uQnV0dG9uQWN0aW9uQWdHcmlkRW1pdChyb3dJbmRleDogbnVtYmVyLCB0eXBlQnV0dG9uOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IElSb3dOb2RlID0gdGhpcy5ncmlkQXBpPy5nZXREaXNwbGF5ZWRSb3dBdEluZGV4KHJvd0luZGV4KTtcclxuXHJcbiAgICBpZiAoSVJvd05vZGUpIHtcclxuICAgICAgaWYgKHR5cGVCdXR0b24gPT09IEVudW1CdXR0b25UeXBlLlRZUEVfRURJVCkge1xyXG4gICAgICAgIHRoaXMub25FZGl0Um93LmVtaXQoSVJvd05vZGUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodHlwZUJ1dHRvbiA9PT0gRW51bUJ1dHRvblR5cGUuVFlQRV9ERUxFVEUpIHtcclxuICAgICAgICB0aGlzLm9uRGVsZXRlUm93LmVtaXQoW3RoaXMuZ3JpZEFwaSwgW0lSb3dOb2RlLmRhdGFdXSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLm9uQnV0dG9uQWN0aW9uQWdHcmlkLmVtaXQoW3R5cGVCdXR0b24sIElSb3dOb2RlXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0Um93RGF0YSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5jb25maWdCdXR0b25zQWN0aW9uPy5hZ0dyaWQpIHRoaXMuc2l6ZUZpdENvbHVtbkFjdGlvbigpO1xyXG4gICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvblJvd0RhdGEkKSB7XHJcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvblJvd0RhdGEkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMuZ3JpZEFwaS5zZXRHcmlkT3B0aW9uKFwicm93RGF0YVwiLCBbXSk7XHJcbiAgICAgIHRoaXMuZ3JpZEFwaT8uc2hvd0xvYWRpbmdPdmVybGF5KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25Sb3dEYXRhJCA9IHRoaXMucm93RGF0YS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgdGhpcy5ncmlkQXBpLnNldEdyaWRPcHRpb24oXCJyb3dEYXRhXCIsIGRhdGEpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VGaWx0ZXIodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5ncmlkQXBpPy5zZXRRdWlja0ZpbHRlcih2YWx1ZSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlRmlsdGVyLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25BZGRSb3dFbWl0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkFkZFJvdy5lbWl0KHRoaXMuZ3JpZEFwaSk7XHJcbiAgfVxyXG5cclxuICBoaWRlSGVhZGVyTWVudUFjdGlvbigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuY29uZmlnQnV0dG9uc0FjdGlvbj8uaGVhZGVyPy5zdWJtZW51Py5ldmVyeSgoeyBoaWRlIH0pID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faGlkZUZ1bmMoaGlkZSk7XHJcbiAgICAgIH0pID8/IGZhbHNlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcGFnaW5hdGlvbkNoYW5nZWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc2NBZ0dyaWRQYWdpbmF0aW9uKSB0aGlzLl9zY0FnR3JpZFBhZ2luYXRpb24ub25QYWdpbmF0aW9uQ2hhbmdlZCgpO1xyXG4gIH1cclxuXHJcbiAgZ3JpZFJlYWR5KGV2ZW50OiBHcmlkUmVhZHlFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkQXBpID0gZXZlbnQuYXBpO1xyXG5cclxuICAgIHRoaXMuaW5pdFJvd0RhdGEoKTtcclxuICAgIHRoaXMub25HcmlkUmVhZHkuZW1pdChbdGhpcy5ncmlkQXBpXSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAcGFyYW0gZXZlbnQ6IG9wY2lvbmFsIC0gQ29udGllbmUgZWwgbm9kbyB5IGxhIGRhdGEgZGUgbGEgZmlsYSBhY3R1YWwuXHJcbiAgICogQGRlc2NyaXB0aW9uIFNlIGRpc3BhcmEgY2FkYSB2ZXogcXVlIGxhIGZpbGEgZXMgY29sb2NhZGEgZW4gc3UgbnVldmEgcG9zaWNpw7NuIChEcmFnICYgRHJvcCkuXHJcbiAgICovXHJcbiAgcm93RHJhZ0VuZEVtaXQoZXZlbnQ6IFJvd0RyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblJvd0RyYWdFbmQuZW1pdChldmVudCk7XHJcbiAgfVxyXG5cclxuICBjZWxsQ29udGV4dE1lbnUoZXZlbnQ6IENlbGxDb250ZXh0TWVudUV2ZW50KSB7XHJcbiAgICB0aGlzLmNlbGxDb250ZXh0TWVudUFjdHVhbCA9IGV2ZW50O1xyXG4gICAgdGhpcy5vbkNlbGxDb250ZXh0TWVudS5lbWl0KGV2ZW50KTtcclxuICAgIHRoaXMubGVmdE1lbnUgPSAoZXZlbnQuZXZlbnQhIGFzIFBvaW50ZXJFdmVudCkueC50b1N0cmluZygpO1xyXG4gICAgdGhpcy5ib3R0b21NZW51ID0gKChldmVudC5ldmVudCEgYXMgUG9pbnRlckV2ZW50KS55IC0gMjApLnRvU3RyaW5nKCk7XHJcbiAgICBpZiAoZXZlbnQudmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNob3dNZW51RGVmYXVsdCkgdGhpcy5tZW51VHJpZ2dlcj8ub3Blbk1lbnUoKTtcclxuICB9XHJcblxyXG4gIHJvd0RhdGFDaGFuZ2VkKGV2ZW50OiBSb3dEYXRhVXBkYXRlZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZ3JpZEFwaSkgcmV0dXJuO1xyXG5cclxuICAgIGlmICghdGhpcy5ncmlkQXBpPy5nZXREaXNwbGF5ZWRSb3dDb3VudCgpKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5vbkdyaWRDaGFuZ2UuZW1pdChbdGhpcy5ncmlkQXBpLCBldmVudF0pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0aW9uQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzID0gdGhpcy5ncmlkQXBpPy5nZXRTZWxlY3RlZFJvd3MoKTtcclxuICAgIHRoaXMub25HcmlkU2VsZWN0Q2hhbmdlLmVtaXQodGhpcy5ncmlkQXBpPy5nZXRTZWxlY3RlZFJvd3MoKSk7XHJcbiAgfVxyXG5cclxuICBjZWxsU3RvcEVkaXRpbmcoZXZ0OiBDZWxsRWRpdGluZ1N0b3BwZWRFdmVudCkge1xyXG4gICAgdGhpcy5vbkNlbGxTdG9wRWRpdGluZy5lbWl0KGV2dCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjZWxsS2V5RG93bihldnQ6IENlbGxLZXlEb3duRXZlbnQpIHtcclxuICAgIHRoaXMub25DZWxsS2V5RG93bi5lbWl0KGV2dCk7XHJcbiAgICBpZiAoKGV2dC5ldmVudCBhcyBLZXlib2FyZEV2ZW50KS5jdHJsS2V5ICYmIChldnQuZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCkua2V5ID09PSBcIkFycm93RG93blwiICYmIGV2dC5ub2RlLmxhc3RDaGlsZCkge1xyXG4gICAgICB0aGlzLm9uR3JpZEFkZFJvdy5lbWl0KGV2dCk7XHJcbiAgICB9IGVsc2UgaWYgKChldnQuZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCkuY3RybEtleSAmJiAoZXZ0LmV2ZW50IGFzIEtleWJvYXJkRXZlbnQpLmtleS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBcImNcIiAmJiB0aGlzLnVzZUdyaWRDb3B5KSB7XHJcbiAgICAgIHRoaXMuY29weShldnQpO1xyXG4gICAgfSBlbHNlIGlmICgoZXZ0LmV2ZW50IGFzIEtleWJvYXJkRXZlbnQpLmN0cmxLZXkgJiYgKGV2dC5ldmVudCBhcyBLZXlib2FyZEV2ZW50KS5rZXkudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gXCJ2XCIgJiYgdGhpcy51c2VHcmlkQ29weSkge1xyXG4gICAgICBhd2FpdCB0aGlzLnBhc3RlKGV2dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb3B5KGV2dDogQ2VsbEtleURvd25FdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCFldnQubm9kZS5pc1NlbGVjdGVkKCkpIHtcclxuICAgICAgdGhpcy5jb3BpZWRDZWxsID0gZXZ0O1xyXG4gICAgICBpZiAoZXZ0LnZhbHVlIGluc3RhbmNlb2YgT2JqZWN0KSBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCgoZXZ0LnZhbHVlIGFzIElOZ1NlbGVjdCk/LmxhYmVsID8/IFwiXCIpO1xyXG4gICAgICBlbHNlIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGV2dC52YWx1ZSA/PyBcIlwiKTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVV0aWxTZXJ2aWNlLmdldEFsZXJ0U3VjY2VzcyhcIkNlbGRhIENvcGlhZGFcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvcGllZFJvdyA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VVdGlsU2VydmljZS5nZXRBbGVydFN1Y2Nlc3MoXCJGaWxhIENvcGlhZGFcIik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdyaWRBcGkuZGVzZWxlY3RBbGwoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBhc3RlKGV2dDogQ2VsbEtleURvd25FdmVudCkge1xyXG4gICAgaWYgKCFldnQubm9kZS5pc1NlbGVjdGVkKCkgJiYgdGhpcy5jb3BpZWRDZWxsKSB7XHJcbiAgICAgIGlmIChldnQuY29sdW1uLmdldENvbElkKCkgPT09IHRoaXMuY29waWVkQ2VsbC5jb2x1bW4uZ2V0Q29sSWQoKSAmJiAoZXZ0LmRhdGEgYXMgRm9ybUdyb3VwKS5nZXQoZXZ0LmNvbHVtbi5nZXRDb2xJZCgpKSEuZW5hYmxlZCkge1xyXG4gICAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVBhc3RlQ2VsbCkgaXNWYWxpZCA9IGF3YWl0IHRoaXMudmFsaWRhdGVQYXN0ZUNlbGwodGhpcy5jb3BpZWRDZWxsLCBldnQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5ncmlkQXBpLmRlc2VsZWN0QWxsKCk7XHJcbiAgICAgICAgdGhpcy5iZWZvcmVQYXN0ZUNlbGwuZW1pdChbZXZ0LCB0aGlzLmNvcGllZENlbGxdKTtcclxuICAgICAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICAgICAgKGV2dC5kYXRhIGFzIEZvcm1Hcm91cCkuZ2V0KGV2dC5jb2x1bW4uZ2V0Q29sSWQoKSkhLnNldFZhbHVlKHRoaXMuY29waWVkQ2VsbC52YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLmdyaWRBcGkucmVmcmVzaENlbGxzKHtcclxuICAgICAgICAgICAgY29sdW1uczogW2V2dC5jb2x1bW5dLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmFmdGVyUGFzdGVDZWxsLmVtaXQoW2V2dCwgdGhpcy5jb3BpZWRDZWxsXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGV2dC5ub2RlLmlzU2VsZWN0ZWQoKSAmJiB0aGlzLmNvcGllZFJvdykge1xyXG4gICAgICBjb25zdCBJUm93Tm9kZSA9IHRoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCk7XHJcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMudmFsaWRhdGVQYXN0ZVJvd3MpIGlzVmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRlUGFzdGVSb3dzKHRoaXMuY29waWVkUm93LCBJUm93Tm9kZSk7XHJcbiAgICAgIGVsc2UgdGhpcy5ncmlkQXBpLmRlc2VsZWN0QWxsKCk7XHJcbiAgICAgIHRoaXMuYmVmb3JlUGFzdGVSb3dzLmVtaXQoW3RoaXMuZ3JpZEFwaS5nZXRTZWxlY3RlZE5vZGVzKCksIHRoaXMuY29waWVkUm93XSk7XHJcbiAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgbGV0IGluZGV4Um93Q29weSA9IDA7XHJcbiAgICAgICAgSVJvd05vZGUuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgICAgICAgKHIuZGF0YSBhcyBGb3JtR3JvdXApLnBhdGNoVmFsdWUoKHRoaXMuY29waWVkUm93IVtpbmRleFJvd0NvcHldLmRhdGEgYXMgRm9ybUdyb3VwKS5nZXRSYXdWYWx1ZSgpKTtcclxuICAgICAgICAgIHRoaXMuZ3JpZEFwaS5yZWZyZXNoQ2VsbHMoe1xyXG4gICAgICAgICAgICByb3dOb2RlczogW3JdLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpbmRleFJvd0NvcHkrKztcclxuICAgICAgICAgIGlmIChpbmRleFJvd0NvcHkgPT0gdGhpcy5jb3BpZWRSb3chLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBpbmRleFJvd0NvcHkgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYWZ0ZXJQYXN0ZVJvd3MuZW1pdChbdGhpcy5ncmlkQXBpLmdldFNlbGVjdGVkTm9kZXMoKSwgdGhpcy5jb3BpZWRSb3ddKTtcclxuICAgICAgICB0aGlzLmdyaWRBcGkuZGVzZWxlY3RBbGwoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29weU1lbnUoZXZlbnQ6IENlbGxDb250ZXh0TWVudUV2ZW50KSB7XHJcbiAgICB0aGlzLm9uQ29weU1lbnUuZW1pdChldmVudCk7XHJcbiAgICB0aGlzLmNvcHkoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcGFzdGVNZW51KGV2ZW50OiBDZWxsQ29udGV4dE1lbnVFdmVudCkge1xyXG4gICAgdGhpcy5vblBhc3RlTWVudS5lbWl0KGV2ZW50KTtcclxuICAgIHRoaXMucGFzdGUoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRpc2FibGVkUGFzdGVNZW51KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEFwaT8uZ2V0U2VsZWN0ZWRSb3dzKCkubGVuZ3RoID09IDAgJiYgIXRoaXMuY29waWVkQ2VsbCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkQXBpPy5nZXRTZWxlY3RlZFJvd3MoKS5sZW5ndGggPiAwICYmICF0aGlzLmNvcGllZFJvdykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuY29waWVkQ2VsbCAmJiAhdGhpcy5jb3BpZWRSb3cpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmpFbXB0eTxUPihvYmplY3Q6IFQpOiBib29sZWFuIHtcclxuICBpZiAob2JqZWN0ID09PSBudWxsIHx8IG9iamVjdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoID09PSAwO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gIDwhLS09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+XHJcbiAgPCEtLSBBRy1HUklEIEhFQURFUiAtLT5cclxuICA8IS0tPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBteS0yXCJcclxuICAgICpuZ0lmPVwidmlzaWJsZVNlYXJjaCB8fCBidG5BZGQ/LnZpc2libGUgfHwgdmlld0NoaWxkcmVuQnV0dG9uSGVhZGVycz8ubGVuZ3RoXCI+XHJcbiAgICA8ZGl2IFtjbGFzc109XCJmaWxsU2VhcmNoID8gJ2NvbC0xMiBteS0yJyA6IHNlYXJjaENsYXNzXCIgKm5nSWY9XCJ2aXNpYmxlU2VhcmNoXCI+XHJcbiAgICAgIDxpbnB1dC1zZWFyY2ggKG9uQ2hhbmdlKT1cImNoYW5nZUZpbHRlcigkZXZlbnQpXCI+PC9pbnB1dC1zZWFyY2g+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgIFtjbGFzc109XCJ2aXNpYmxlU2VhcmNoID8gJ2NvbC1zbS0xMiBjb2wtbWQtNiBjb2wtbGctNiBjb2wteGwtNyBjb2wtMTInIDogJ2NvbC0xMidcIlxyXG4gICAgICBjbGFzcz1cInNjLWFnLWdyaWQtaGVhZGVyLWFjdGlvbnMgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIlxyXG4gICAgICAqbmdJZj1cImJ0bkFkZD8udmlzaWJsZSB8fCB2aWV3Q2hpbGRyZW5CdXR0b25IZWFkZXJzPy5sZW5ndGggfHwgY29uZmlnQnV0dG9uc0FjdGlvbj8uaGVhZGVyIHx8IGNvbmZpZ0hlYWRlciAhPSBudWxsXCI+XHJcbiAgICAgIDwhLS0gSGVhZGVyIGFjdGlvbnMgYnV0dG9ucyAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZ0J1dHRvbnNBY3Rpb24gJiYgY29uZmlnSGVhZGVyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbmZpZ0hlYWRlci5kaXNhYmxlZCA9PT0gZmFsc2U7IGVsc2UgdGVtcGxhdGVBY3Rpb25cIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcEFjdGlvbnNcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZUFjdGlvbj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3RlZFJvd3MubGVuZ3RoID09PSAwOyBlbHNlIHRlbXBBY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4taWNvbiBidG4td2lkdGggYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRpc2FibGVkPlxyXG4gICAgICAgICAgICAgIEFjY2lvbmVzXHJcbiAgICAgICAgICAgICAgPGVtIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1kb3duXCI+PC9lbT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBBY3Rpb25zPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImhpZGVIZWFkZXJNZW51QWN0aW9uKCk7IGVsc2UgdGVtcGxhdGVIZWFkZXJBY3Rpb25cIiBjbGFzcz1cImJ0bi1pY29uIGJ0bi13aWR0aCBidG4gYnRuLXByaW1hcnkgYnRuLXNtXCI+XHJcbiAgICAgICAgICAgIEFjY2lvbmVzXHJcbiAgICAgICAgICAgIDxlbSBjbGFzcz1cImZhIGZhLWNoZXZyb24tZG93blwiPjwvZW0+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlSGVhZGVyQWN0aW9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1pY29uIGJ0bi13aWR0aCBidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInBhbmVsLm1lbnVcIj5cclxuICAgICAgICAgICAgICBBY2Npb25lc1xyXG4gICAgICAgICAgICAgIDxlbSBjbGFzcz1cImZhIGZhLWNoZXZyb24tZG93blwiPjwvZW0+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPHNjLW1lbnUtcGFuZWwgI3BhbmVsIGNsYXNzPVwiZC1ub25lXCIgW3N1Yk1lbnVzXT1cImNvbmZpZ0hlYWRlci5zdWJtZW51ID8/IFtdXCI+PC9zYy1tZW51LXBhbmVsPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLSBFbmQgaGVhZGVyIGFjdGlvbnMgYnV0dG9ucyAtLT5cclxuXHJcbiAgICAgIDwhLS0gT3RoZXIgYnV0dG9ucyAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdDaGlsZHJlbkJ1dHRvbkhlYWRlcnM/Lmxlbmd0aFwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCB2aWV3Q2hpbGRyZW5CdXR0b25IZWFkZXIgb2Ygdmlld0NoaWxkcmVuQnV0dG9uSGVhZGVyc1wiXHJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ2aWV3Q2hpbGRyZW5CdXR0b25IZWFkZXIudGVtcGxhdGVcIj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwhLS1FbmQgb3RoZXIgYnV0dG9ucyAtLT5cclxuXHJcbiAgICAgIDwhLS0gQWRkIGJ1dHRvbiAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJ0bkFkZD8udmlzaWJsZVwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgY2xhc3M9XCJidG4td2lkdGggYnRuIGJ0bi13YXJuaW5nIGJ0bi1zbVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25BZGRSb3dFbWl0KClcIlxyXG4gICAgICAgICAgI2J1dHRvbkFkZFxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImJ0bkFkZC5kaXNhYmxlZCA/PyBmYWxzZVwiPlxyXG4gICAgICAgICAgQWdyZWdhclxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPCEtLUVuZCBhZGQgYnV0dG9uIC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT5cclxuICA8IS0tIEFHLUdSSUQgSEVBREVSIEVORCAtLT5cclxuICA8IS0tPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgW25nU3R5bGVdPVwibmdTdHlsZUNvbnRhaW5lclwiPlxyXG4gICAgICA8YWctZ3JpZC1hbmd1bGFyXHJcbiAgICAgICAgI2FnR3JpZFxyXG4gICAgICAgIGNsYXNzPVwiYWctdGhlbWUtYmFsaGFtXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJuZ1N0eWxlQWdHcmlkXCJcclxuICAgICAgICBbY29sdW1uRGVmc109XCJjb2x1bW5EZWZzQW5kQWRkQ2VsbEFjdGlvbnNcIlxyXG4gICAgICAgIFtkZWZhdWx0Q29sRGVmXT1cImRlZmF1bHRDb2xEZWZcIlxyXG4gICAgICAgIFtjb21wb25lbnRzXT1cIl9mcmFtZXdvcmtDb21wb25lbnRzXCJcclxuICAgICAgICBbY29udGV4dF09XCJfY29udGV4dFwiXHJcbiAgICAgICAgW3Jvd1NlbGVjdGlvbl09XCJyb3dTZWxlY3Rpb25cIlxyXG4gICAgICAgIFtpc1Jvd1NlbGVjdGFibGVdPVwiaXNSb3dTZWxlY3RhYmxlXCJcclxuICAgICAgICBbcm93RHJhZ01hbmFnZWRdPVwicm93RHJhZ01hbmFnZWRcIlxyXG4gICAgICAgIFtkb21MYXlvdXRdPVwiZG9tTGF5b3V0XCJcclxuICAgICAgICBbYW5pbWF0ZVJvd3NdPVwiYW5pbWF0ZVJvd3NcIlxyXG4gICAgICAgIFtnZXRSb3dTdHlsZV09XCJnZXRSb3dTdHlsZVwiXHJcbiAgICAgICAgW2VuYWJsZVJhbmdlU2VsZWN0aW9uXT1cImVuYWJsZVJhbmdlU2VsZWN0aW9uXCJcclxuICAgICAgICBbc3VwcHJlc3NSb3dUcmFuc2Zvcm1dPVwic3VwcHJlc3NSb3dUcmFuc2Zvcm1cIlxyXG4gICAgICAgIFtzdXBwcmVzc01vdmVXaGVuUm93RHJhZ2dpbmddPVwiYW5pbWF0ZVJvd3NcIlxyXG4gICAgICAgIFtvdmVybGF5Tm9Sb3dzVGVtcGxhdGVdPVwib3ZlcmxheU5vUm93c1RlbXBsYXRlXCJcclxuICAgICAgICBbb3ZlcmxheUxvYWRpbmdUZW1wbGF0ZV09XCJvdmVybGF5TG9hZGluZ1RlbXBsYXRlXCJcclxuICAgICAgICBbbm9Sb3dzT3ZlcmxheUNvbXBvbmVudFBhcmFtc109XCJub1Jvd3NPdmVybGF5Q29tcG9uZW50UGFyYW1zXCJcclxuICAgICAgICBbc3VwcHJlc3NSb3dDbGlja1NlbGVjdGlvbl09XCJzdXBwcmVzc1Jvd0NsaWNrU2VsZWN0aW9uXCJcclxuICAgICAgICBbc3VwcHJlc3NEcmFnTGVhdmVIaWRlc0NvbHVtbnNdPVwic3VwcHJlc3NEcmFnTGVhdmVIaWRlc0NvbHVtbnNcIlxyXG4gICAgICAgIFtzdXBwcmVzc1Njcm9sbE9uTmV3RGF0YV09XCJzdXBwcmVzc1Njcm9sbE9uTmV3RGF0YVwiXHJcbiAgICAgICAgW3N1cHByZXNzUHJvcGVydHlOYW1lc0NoZWNrXT1cInRydWVcIlxyXG4gICAgICAgIFtwYWdpbmF0aW9uUGFnZVNpemVdPVwicGFnaW5hdGlvbiA/IHBhZ2luYXRpb25QYWdlU2l6ZSA6IHVuZGVmaW5lZFwiXHJcbiAgICAgICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXHJcbiAgICAgICAgW3N1cHByZXNzUGFnaW5hdGlvblBhbmVsXT1cInN1cHByZXNzUGFnaW5hdGlvblBhbmVsXCJcclxuICAgICAgICAocm93Q2xpY2tlZCk9XCJyb3dDbGlja2VkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHJvd0RvdWJsZUNsaWNrZWQpPVwicm93RG91YmxlQ2xpY2tlZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAgIChyb3dTZWxlY3RlZCk9XCJvblJvd1NlbGVjdGVkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHBhZ2luYXRpb25DaGFuZ2VkKT1cInBhZ2luYXRpb25DaGFuZ2VkKClcIlxyXG4gICAgICAgIChncmlkUmVhZHkpPVwiZ3JpZFJlYWR5KCRldmVudClcIlxyXG4gICAgICAgIChyb3dEcmFnRW5kKT1cInJvd0RyYWdFbmRFbWl0KCRldmVudClcIlxyXG4gICAgICAgIChjZWxsQ29udGV4dE1lbnUpPVwiY2VsbENvbnRleHRNZW51KCRldmVudClcIlxyXG4gICAgICAgIFtlbmFibGVDZWxsVGV4dFNlbGVjdGlvbl09XCJlbmFibGVDZWxsVGV4dFNlbGVjdGlvblwiXHJcbiAgICAgICAgKHJvd0RhdGFVcGRhdGVkKT1cInJvd0RhdGFDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgIChyb3dFZGl0aW5nU3RhcnRlZCk9XCJvblJvd0VkaXRpbmdTdGFydGVkLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNlbGxWYWx1ZUNoYW5nZWQpPVwiY2VsbFZhbHVlQ2hhbmdlZC5lbWl0KCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2VkKT1cInNlbGVjdGlvbkNoYW5nZWQoKVwiXHJcbiAgICAgICAgKGNlbGxFZGl0aW5nU3RvcHBlZCk9XCJjZWxsU3RvcEVkaXRpbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgKGNlbGxLZXlEb3duKT1cImNlbGxLZXlEb3duKCRhbnkoJGV2ZW50KSlcIlxyXG4gICAgICAgIFttdWx0aVNvcnRLZXldPVwibXVsdGlTb3J0S2V5XCJcclxuICAgICAgICBbdG9vbHRpcEhpZGVEZWxheV09XCJ0b29sdGlwSGlkZURlbGF5XCJcclxuICAgICAgICBbdG9vbHRpcFNob3dEZWxheV09XCJ0b29sdGlwU2hvd0RlbGF5XCJcclxuICAgICAgICBbdG9vbHRpcFNob3dNb2RlXT1cInRvb2x0aXBTaG93TW9kZVwiXHJcbiAgICAgICAgb25jb250ZXh0bWVudT1cInJldHVybiBmYWxzZTtcIj5cclxuICAgICAgPC9hZy1ncmlkLWFuZ3VsYXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT5cclxuICA8IS0tIEFHLUdSSUQgUEFHSU5BVElPTiAtLT5cclxuICA8IS0tPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cInBhZ2luYXRpb25cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cclxuICAgICAgPHNjLWFnLWdyaWQtcGFnaW5hdGlvblxyXG4gICAgICAgICNzY0FnR3JpZFBhZ2luYXRpb25cclxuICAgICAgICBbZ3JpZEFwaV09XCJncmlkQXBpXCJcclxuICAgICAgICBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2luYXRpb25QYWdlU2l6ZVwiXHJcbiAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIj48L3NjLWFnLWdyaWQtcGFnaW5hdGlvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwhLS09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+XHJcbiAgPCEtLSBBRy1HUklEIFBBR0lOQVRJT04gRU5EIC0tPlxyXG4gIDwhLS09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+XHJcbjwvZGl2PlxyXG5cclxuPGRpdlxyXG4gICpuZ0lmPVwic2hvd01lbnVEZWZhdWx0XCJcclxuICBvbmNvbnRleHRtZW51PVwicmV0dXJuIGZhbHNlO1wiXHJcbiAgc3R5bGU9XCJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAwcHg7IGhlaWdodDogMHB4XCJcclxuICBbbmdTdHlsZV09XCJ7IHRvcDogYm90dG9tTWVudSArICdweCcsIGxlZnQ6IGxlZnRNZW51ICsgJ3B4JyB9XCI+XHJcbiAgPG1hdC1tZW51IG9uY29udGV4dG1lbnU9XCJyZXR1cm4gZmFsc2U7XCIgI3NjTWVudT1cIm1hdE1lbnVcIj5cclxuICAgIDxidXR0b24gb25jb250ZXh0bWVudT1cInJldHVybiBmYWxzZTtcIiAoY2xpY2spPVwiY29weU1lbnUoY2VsbENvbnRleHRNZW51QWN0dWFsISlcIiBtYXQtbWVudS1pdGVtPlxyXG4gICAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj4gPHNwYW4+Q29waWFyPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJkaXNhYmxlZFBhc3RlTWVudVwiIG9uY29udGV4dG1lbnU9XCJyZXR1cm4gZmFsc2U7XCIgKGNsaWNrKT1cInBhc3RlTWVudShjZWxsQ29udGV4dE1lbnVBY3R1YWwhKVwiIG1hdC1tZW51LWl0ZW0+XHJcbiAgICAgIDxtYXQtaWNvbj5jb250ZW50X3Bhc3RlPC9tYXQtaWNvbj48c3Bhbj5QZWdhcjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbWF0LW1lbnU+XHJcbiAgPGJ1dHRvbiBvbmNvbnRleHRtZW51PVwicmV0dXJuIGZhbHNlO1wiIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuXCIgbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwic2NNZW51XCIgI21lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIj5cclxuICAgIE1lbnVcclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export class NgSelectUtils {
|
|
2
|
+
static reorderItems(items, selectedValues, setData, restoreOriginal = false) {
|
|
3
|
+
items = items.map((opt, index) => ({
|
|
4
|
+
...opt,
|
|
5
|
+
["originalIndex"]: opt["originalIndex"] ?? index,
|
|
6
|
+
}));
|
|
7
|
+
if (restoreOriginal) {
|
|
8
|
+
const restored = [...items].sort((a, b) => (a["originalIndex"] ?? 0) - (b["originalIndex"] ?? 0));
|
|
9
|
+
setData(restored);
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (selectedValues.length > 0) {
|
|
13
|
+
const orderedSelected = selectedValues.map((val) => items.find((opt) => opt.value === val)).filter((opt) => !!opt);
|
|
14
|
+
const unselectedOptions = items.filter((option) => option.value === null || !selectedValues.includes(option.value));
|
|
15
|
+
const finalOptions = [...orderedSelected, ...unselectedOptions];
|
|
16
|
+
setData(finalOptions);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmdTZWxlY3RVdGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zdW1heC1lcnAtY29tcG9uZW50L3NyYy9saWIvdXRpbHMvTmdTZWxlY3RVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sYUFBYTtJQUN4QixNQUFNLENBQUMsWUFBWSxDQUNqQixLQUFrQixFQUNsQixjQUFtQyxFQUNuQyxPQUFvQyxFQUNwQyxlQUFlLEdBQUcsS0FBSztRQUV2QixLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDakMsR0FBRyxHQUFHO1lBQ04sQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksS0FBSztTQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVKLElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckksTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDcEgsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLGVBQWUsRUFBRSxHQUFHLGlCQUFpQixDQUFDLENBQUM7WUFDaEUsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hCLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJTmdTZWxlY3QgfSBmcm9tIFwiLi9JTmdTZWxlY3RcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBOZ1NlbGVjdFV0aWxzIHtcclxuICBzdGF0aWMgcmVvcmRlckl0ZW1zKFxyXG4gICAgaXRlbXM6IElOZ1NlbGVjdFtdLFxyXG4gICAgc2VsZWN0ZWRWYWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10sXHJcbiAgICBzZXREYXRhOiAoZGF0YTogSU5nU2VsZWN0W10pID0+IHZvaWQsXHJcbiAgICByZXN0b3JlT3JpZ2luYWwgPSBmYWxzZVxyXG4gICk6IHZvaWQge1xyXG4gICAgaXRlbXMgPSBpdGVtcy5tYXAoKG9wdCwgaW5kZXgpID0+ICh7XHJcbiAgICAgIC4uLm9wdCxcclxuICAgICAgW1wib3JpZ2luYWxJbmRleFwiXTogb3B0W1wib3JpZ2luYWxJbmRleFwiXSA/PyBpbmRleCxcclxuICAgIH0pKTtcclxuXHJcbiAgICBpZiAocmVzdG9yZU9yaWdpbmFsKSB7XHJcbiAgICAgIGNvbnN0IHJlc3RvcmVkID0gWy4uLml0ZW1zXS5zb3J0KChhLCBiKSA9PiAoYVtcIm9yaWdpbmFsSW5kZXhcIl0gPz8gMCkgLSAoYltcIm9yaWdpbmFsSW5kZXhcIl0gPz8gMCkpO1xyXG4gICAgICBzZXREYXRhKHJlc3RvcmVkKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG9yZGVyZWRTZWxlY3RlZCA9IHNlbGVjdGVkVmFsdWVzLm1hcCgodmFsKSA9PiBpdGVtcy5maW5kKChvcHQpID0+IG9wdC52YWx1ZSA9PT0gdmFsKSkuZmlsdGVyKChvcHQpOiBvcHQgaXMgSU5nU2VsZWN0ID0+ICEhb3B0KTtcclxuICAgICAgY29uc3QgdW5zZWxlY3RlZE9wdGlvbnMgPSBpdGVtcy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBudWxsIHx8ICFzZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyhvcHRpb24udmFsdWUpKTtcclxuICAgICAgY29uc3QgZmluYWxPcHRpb25zID0gWy4uLm9yZGVyZWRTZWxlY3RlZCwgLi4udW5zZWxlY3RlZE9wdGlvbnNdO1xyXG4gICAgICBzZXREYXRhKGZpbmFsT3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
|