@c8y/ngx-components 1010.0.12 → 1010.0.16
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/bundles/c8y-ngx-components-search.umd.js +34 -3
- package/bundles/c8y-ngx-components-search.umd.js.map +1 -1
- package/bundles/c8y-ngx-components-search.umd.min.js +1 -1
- package/bundles/c8y-ngx-components-search.umd.min.js.map +1 -1
- package/bundles/c8y-ngx-components.umd.js +16 -13
- package/bundles/c8y-ngx-components.umd.js.map +1 -1
- package/bundles/c8y-ngx-components.umd.min.js +1 -1
- package/bundles/c8y-ngx-components.umd.min.js.map +1 -1
- package/c8y-ngx-components.metadata.json +1 -1
- package/core/data-grid/data-grid.model.d.ts +4 -0
- package/core/product-experience/gainsight.service.d.ts +5 -5
- package/esm2015/core/data-grid/data-grid.component.js +2 -2
- package/esm2015/core/data-grid/data-grid.model.js +1 -1
- package/esm2015/core/data-grid/grid-data-source.js +2 -2
- package/esm2015/core/product-experience/gainsight.service.js +14 -11
- package/esm2015/core/product-experience/product-experience.module.js +2 -2
- package/esm2015/search/search-grid.component.js +25 -4
- package/esm2015/search/search-results.component.js +12 -2
- package/esm2015/search/search.service.js +1 -1
- package/esm5/core/data-grid/data-grid.component.js +2 -2
- package/esm5/core/data-grid/data-grid.model.js +1 -1
- package/esm5/core/data-grid/grid-data-source.js +2 -2
- package/esm5/core/product-experience/gainsight.service.js +14 -11
- package/esm5/core/product-experience/product-experience.module.js +2 -2
- package/esm5/search/search-grid.component.js +25 -4
- package/esm5/search/search-results.component.js +13 -2
- package/esm5/search/search.service.js +1 -1
- package/fesm2015/c8y-ngx-components-search.js +35 -5
- package/fesm2015/c8y-ngx-components-search.js.map +1 -1
- package/fesm2015/c8y-ngx-components.js +16 -13
- package/fesm2015/c8y-ngx-components.js.map +1 -1
- package/fesm5/c8y-ngx-components-search.js +36 -5
- package/fesm5/c8y-ngx-components-search.js.map +1 -1
- package/fesm5/c8y-ngx-components.js +16 -13
- package/fesm5/c8y-ngx-components.js.map +1 -1
- package/locales/ja_JP.po +5 -5
- package/locales/locales.pot +6 -0
- package/package.json +2 -2
- package/search/c8y-ngx-components-search.metadata.json +1 -1
- package/search/search-grid.component.d.ts +2 -1
- package/search/search-results.component.d.ts +2 -0
|
@@ -36,18 +36,18 @@ export declare class GainsightService {
|
|
|
36
36
|
readonly tagFunction: any;
|
|
37
37
|
/**
|
|
38
38
|
* Load the script tag and calls the identify function to start the tracking.
|
|
39
|
-
* @param
|
|
39
|
+
* @param currentTenant The current tenant.
|
|
40
40
|
* @param identify If set to false, only the tag is loaded.
|
|
41
41
|
*/
|
|
42
|
-
loadTag(
|
|
42
|
+
loadTag(currentTenant: any, identify?: boolean): Promise<void>;
|
|
43
43
|
/**
|
|
44
44
|
* Identifies the user/account at Gainsight.
|
|
45
|
-
* @param
|
|
46
|
-
* @param
|
|
45
|
+
* @param user The user which is given to Gainsight.
|
|
46
|
+
* @param tenant The tenant which is given to Gainsight.
|
|
47
47
|
* @param versionUI The UI version used.
|
|
48
48
|
* @param versionBE The BE version used.
|
|
49
49
|
*/
|
|
50
|
-
identify(user: any,
|
|
50
|
+
identify(user: any, tenant: any, instanceId: any, versionUI?: any, versionBE?: any): void;
|
|
51
51
|
triggerEvent(eventName: string, props?: object): void;
|
|
52
52
|
/**
|
|
53
53
|
* Checks if the Gainsight's tag should be loaded.
|
|
@@ -582,8 +582,8 @@ tslib_1.__decorate([
|
|
|
582
582
|
DataGridComponent = tslib_1.__decorate([
|
|
583
583
|
Component({
|
|
584
584
|
selector: 'c8y-data-grid',
|
|
585
|
-
template: "<div class=\"table-data-grid-scroll\" #scroll>\n <div *ngIf=\"displayOptions.gridHeader\" class=\"table-data-grid-header separator large-padding\">\n <h4 class=\"m-r-16\">{{ title | translate }}</h4>\n\n <ng-container *ngIf=\"displayOptions.filter\">\n <span *ngIf=\"!filteringApplied\">\n <span class=\"label label-warning m-r-4\" translate>No filters</span>\n <small\n *ngIf=\"!!filteringLabelsParams.allItemsCount\"\n class=\"m-r-4\"\n ngNonBindable\n translate\n [translateParams]=\"filteringLabelsParams\"\n >{{ filteredItemsCount }} of {{ allItemsCount }} items</small\n >\n </span>\n <span *ngIf=\"filteringApplied\">\n <ng-container *ngIf=\"!!filteringLabelsParams.allItemsCount\">\n <span class=\"badge badge-info m-r-4\">\n {{ (dataSource.stats$ | async).filteredSize }}\n </span>\n <small ngNonBindable translate [translateParams]=\"filteringLabelsParams\"\n >of {{ allItemsCount }} items</small\n >\n </ng-container>\n <button\n title=\" {{ 'Clear filters' | translate }}\"\n class=\"m-l-8 btn btn-xs btn-default m-r-4\"\n (click)=\"clearFilters()\"\n >\n {{ 'Clear filters' | translate }}\n </button>\n </span>\n <span class=\"hidden-xs hidden-sm\">\n <button\n class=\"btn-clean text-primary\"\n popover=\"{{ 'Click the column headers to apply filters.' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button> </span\n ></ng-container>\n\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <label class=\"c8y-switch\" *ngIf=\"showChildDevices.show\">\n <input type=\"checkbox\" [(ngModel)]=\"showChildDevices.value\" (click)=\"loadChildDevices()\"/>\n <span></span>\n {{ 'Show child devices' | translate }}\n </label>\n\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n container=\"body\"\n placement=\"bottom left\"\n >\n <button\n title=\"{{ 'Configure columns' | translate }}\"\n class=\"btnbar-btn c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"columns\" class=\"m-r-4\"></i>\n <span>{{ 'Configure columns' | translate }}</span>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"bg-white\">\n <div cdkDropList (cdkDropListDropped)=\"onColumnDrop($event)\" class=\"list-group m-0\">\n <div *ngFor=\"let column of columns\" cdkDrag cdkDragLockAxis=\"y\">\n <ng-container *ngIf=\"!column.positionFixed\">\n <div class=\"list-group-item draggable-after p-0 \">\n <label\n title=\"{{ (column.header | translate) || column.name }}\"\n class=\"c8y-checkbox p-l-16 p-r-32 p-t-8 p-b-8 flex-item-v-stretch\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"column.visible\"\n (change)=\"updateGridColumnsSize()\"\n />\n <span></span>\n <span>{{ (column.header | translate) || column.name }}</span>\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <button\n title=\"{{ 'Reload' | translate }}\"\n class=\"btnbar-btn btn-link\"\n [disabled]=\"dataSource.loading$ | async\"\n (click)=\"searchText = ''; reload()\"\n >\n <i c8yIcon=\"refresh\" class=\"m-r-4\"></i>\n <span>{{ 'Reload' | translate }}</span>\n </button>\n\n <div *ngIf=\"!serverSideDataCallback || showSearch\" class=\"input-group input-group-search\">\n <input\n type=\"search\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [ngModel]=\"searchText\"\n (input)=\"searchText$.emit($event.target.value)\"\n />\n <div class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"searchText.length === 0\"></i>\n <i\n c8yIcon=\"times\"\n class=\"pointer\"\n *ngIf=\"searchText.length > 0\"\n (click)=\"searchText = ''; searchText$.emit('')\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"table-data-grid-header-bulk-actions animated slideInDown fast\"\n *ngIf=\"selectedItemIds.length !== 0\"\n >\n <h4>\n <span\n *ngIf=\"!itemsSelectLimit; else limit\"\n ngNonBindable\n translate\n [translateParams]=\"{ count: selectedItemIds.length }\"\n >\n {{ count }} selected items.\n </span>\n <ng-template #limit>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: selectedItemIds.length, limit: itemsSelectLimit }\"\n >\n {{ count }} selected items out of {{ limit }} allowed\n </span>\n </ng-template>\n\n <br class=\"visible-xs\" />\n <small *ngIf=\"selectedItemIds.length >= pagination.pageSize && !itemsSelectLimit\">\n <a (click)=\"setAllItemsSelected(true)\" class=\"interact\" >\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: (dataSource.stats$ | async).filteredSize }\"\n >\n Select all {{ count }} items\n </span>\n </a>\n </small>\n </h4>\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <ng-container\n *ngFor=\"let bulkActionControl of bulkActionControls\"\n [ngSwitch]=\"bulkActionControl.type\"\n >\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"sign-out\"></i>\n <span>{{ 'Export' | translate }}</span>\n </button>\n\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n <span>{{ 'Delete' | translate }}</span>\n </button>\n\n <button\n title=\"{{ bulkActionControl.text | translate }}\"\n *ngSwitchDefault\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ bulkActionControl.icon }}\"></i>\n <span>{{ bulkActionControl.text | translate }}</span>\n </button>\n </ng-container>\n\n <button title=\"{{ 'Cancel' | translate }}\" class=\"btnbar-btn\" (click)=\"cancel()\">\n <i c8yIcon=\"times\"></i>\n <span>{{ 'Cancel' | translate }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <table\n class=\"table table-hover table-filtered-sorted table-data-grid large-padding\"\n cdk-table\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByName\"\n [class.table-striped]=\"displayOptions.striped\"\n [class.table-bordered]=\"displayOptions.bordered\"\n [class.table-data-grid-with-checkboxes]=\"selectable\"\n [class.table-data-grid-with-actions]=\"actionControls.length > 0\"\n [style.grid-template-columns]=\"styles.gridTemplateColumns\"\n (mousemove)=\"resizeHandleContainerMouseMove$.emit($event)\"\n (mouseup)=\"resizeHandleContainerMouseUp$.emit($event)\"\n >\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\" [cdkColumnDef]=\"column.name\">\n <ng-container [ngSwitch]=\"column.name\">\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\">\n <div *ngIf=\"!itemsSelectLimit\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"currentPageSelectionState.allSelected\"\n [indeterminate]=\"\n !(\n currentPageSelectionState.allSelected ||\n currentPageSelectionState.allDeselected\n )\n \"\n (change)=\"setAllItemsInCurrentPageSelected($event.target.checked)\"\n />\n <span></span>\n </label>\n </div>\n </th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(row)\"\n (change)=\"setItemsSelected([row], $event.target.checked)\"\n [disabled]=\"selectedItemIds.length >= itemsSelectLimit && !isItemSelected(row)\"\n />\n <span></span>\n </label>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'actions'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\"></th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"actionControls.length <= 2\">\n <ng-container\n *ngFor=\"let actionControl of actionControls\"\n [ngSwitch]=\"actionControl.type\"\n >\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n *ngSwitchCase=\"builtInActionType.Edit\"\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ 'Edit' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btn btn-dot showOnHover\"\n title=\"{{ 'Delete' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i class=\"text-danger\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n *ngSwitchDefault\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ actionControl.text | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n </button>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"actionControls.length > 2\" class=\"dropdown\" dropdown>\n <button\n title=\"{{ 'Actions' | translate }}\"\n class=\"dropdown-toggle c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li *ngFor=\"let actionControl of actionControls\" [ngSwitch]=\"actionControl.type\">\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n title=\"{{ 'Edit' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Edit\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n {{ 'Delete' | translate }}\n </button>\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Export' | translate }}\n </button>\n <button\n title=\"{{ actionControl.text | translate }}\"\n *ngSwitchDefault\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n {{ actionControl.text | translate }}\n </button>\n </ng-container>\n </li>\n </ul>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <th\n cdk-header-cell\n *cdkHeaderCellDef\n [ngClass]=\"column.headerCSSClassName\"\n [attr.data-type]=\"column.dataType\"\n [class.sorted]=\"column.sortOrder\"\n [class.filtered]=\"column | map: isColumnFilteringApplied\"\n [class.hidden]=\"!column.visible\"\n >\n <div *ngIf=\"!column.filterable\" [title]=\"(column.header | translate) || column.name\">\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"column.filterable\"\n class=\"dropdown\"\n dropdown\n #dropdown=\"bs-dropdown\"\n container=\"body\"\n placement=\"bottom left\"\n [insideClick]=\"true\"\n >\n <button\n class=\"btn-header c8y-dropdown\"\n dropdownToggle\n [title]=\"(column.header | translate) || column.name\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n <i c8yIcon=\"filter\" title=\"{{ 'Filter' | translate }}\"></i>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"data-grid__dropdown\">\n <ng-container\n *ngIf=\"\n (\n [{\n column: column,\n dropdown: dropdown\n }]\n | map:getFilteringFormRendererSpec:this\n ) as filteringFormRendererSpec\n \"\n >\n <c8y-filtering-form-renderer [spec]=\"filteringFormRendererSpec\">\n </c8y-filtering-form-renderer>\n </ng-container>\n </li>\n </ul>\n </div>\n\n <button\n *ngIf=\"column.sortable\"\n class=\"btn-sort\"\n title=\"{{ 'Sort' | translate }}\"\n (click)=\"changeSortOrder(column.name)\"\n >\n <ng-container [ngSwitch]=\"column.sortOrder\">\n <i *ngSwitchCase=\"'asc'\" c8yIcon=\"long-arrow-up\"></i>\n <i *ngSwitchCase=\"'desc'\" c8yIcon=\"long-arrow-down\"></i>\n <i *ngSwitchDefault c8yIcon=\"exchange\"></i>\n </ng-container>\n </button>\n\n <span\n class=\"resize-handle\"\n (mousedown)=\"\n resizeHandleMouseDown$.emit({ event: $event, targetColumnName: column.name })\n \"\n >\n </span>\n </th>\n\n <td\n cdk-cell\n *cdkCellDef=\"let row\"\n [ngClass]=\"column.cellCSSClassName\"\n [attr.data-cell-title]=\"column.header | translate\"\n [class.hidden]=\"!column.visible\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n value: resolveCellValue(row, column.path),\n row: row,\n columnName: column.name\n }]\n | map:getCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container cdkColumnDef=\"infiniteScrollFooter\">\n <td cdk-footer-cell *cdkFooterCellDef [style.grid-column]=\"styles.gridInfiniteScrollColumn\">\n <template #infiniteScrollContainer></template>\n </td>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"columnNames\"></tr>\n\n <tr\n cdk-row\n *cdkRowDef=\"let row; columns: columnNames\"\n (mouseover)=\"rowMouseOver.emit(row)\"\n (mouseleave)=\"rowMouseLeave.emit(row)\"\n (click)=\"rowClick.emit(row)\"\n ></tr>\n\n <ng-container *ngIf=\"infiniteScroll\">\n <tr cdk-footer-row *cdkFooterRowDef=\"['infiniteScrollFooter']\"></tr>\n </ng-container>\n </table>\n\n <div *ngIf=\"(dataSource.loading$ | async) && !loadMoreComponent\" class=\"text-center\">\n <c8y-progress-bar [message]=\"loadingItemsLabel\"></c8y-progress-bar>\n </div>\n\n <div\n class=\"row m-0 p-t-40 p-b-40\"\n *ngIf=\"!(dataSource.loading$ | async) && (dataSource.stats$ | async).filteredSize === 0\"\n >\n <div class=\"col-md-4 col-md-offset-4\">\n <ng-content select=\".c8y-empty-state\"></ng-content>\n </div>\n </div>\n\n <div *ngIf=\"pagination && !infiniteScroll\" class=\"table-data-grid-footer separator large-padding\">\n <div class=\"col-sm-4 no-gutter\">\n <div *ngIf=\"(dataSource.stats$ | async).currentPageSize > 0\" class=\"counter\">\n <span class=\"text-muted\" ngNonBindable translate [translateParams]=\"paginationLabelParams\"\n >{{ pageFirstItemIdx }} - {{ pageLastItemIdx }} of {{ itemsTotal }}</span\n >\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-center\">\n <div\n *ngIf=\"(dataSource.stats$ | async).filteredSize > minPossiblePageSize\"\n class=\"form-group form-inline\"\n >\n <label class=\"m-r-4\">{{ 'Items per page' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [ngModel]=\"pagination.pageSize\"\n (ngModelChange)=\"\n updatePagination({ itemsPerPage: $event, page: pagination.currentPage })\n \"\n >\n <option *ngFor=\"let pageSize of possiblePageSizes\" [ngValue]=\"pageSize\">\n {{ pageSize }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-right\">\n <pagination\n [class.hidden]=\"totalPagesCount <= 1\"\n [ngModel]=\"pagination.currentPage\"\n (pageChanged)=\"updatePagination($event)\"\n [totalItems]=\"(dataSource.stats$ | async).filteredSize\"\n [itemsPerPage]=\"pagination.pageSize\"\n (numPages)=\"totalPagesCount = $event\"\n [maxSize]=\"5\"\n [boundaryLinks]=\"false\"\n previousText=\" \"\n nextText=\" \"\n ></pagination>\n </div>\n </div>\n</div>\n"
|
|
585
|
+
template: "<div class=\"table-data-grid-scroll\" #scroll>\n <div *ngIf=\"displayOptions.gridHeader\" class=\"table-data-grid-header separator large-padding\">\n <h4 class=\"m-r-16\">{{ title | translate }}</h4>\n\n <ng-container *ngIf=\"displayOptions.filter\">\n <span *ngIf=\"!filteringApplied\">\n <span class=\"label label-warning m-r-4\" translate>No filters</span>\n <small\n *ngIf=\"!!filteringLabelsParams.allItemsCount\"\n class=\"m-r-4\"\n ngNonBindable\n translate\n [translateParams]=\"filteringLabelsParams\"\n >{{ filteredItemsCount }} of {{ allItemsCount }} items</small\n >\n </span>\n <span *ngIf=\"filteringApplied\">\n <ng-container *ngIf=\"!!filteringLabelsParams.allItemsCount\">\n <span class=\"badge badge-info m-r-4\">\n {{ (dataSource.stats$ | async).filteredSize }}\n </span>\n <small ngNonBindable translate [translateParams]=\"filteringLabelsParams\"\n >of {{ allItemsCount }} items</small\n >\n </ng-container>\n <button\n title=\" {{ 'Clear filters' | translate }}\"\n class=\"m-l-8 btn btn-xs btn-default m-r-4\"\n (click)=\"clearFilters()\"\n >\n {{ 'Clear filters' | translate }}\n </button>\n </span>\n <span class=\"hidden-xs hidden-sm\">\n <button\n class=\"btn-clean text-primary\"\n popover=\"{{ 'Click the column headers to apply filters.' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button> </span\n ></ng-container>\n\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <label class=\"c8y-switch\" *ngIf=\"showChildDevices.show\">\n <input type=\"checkbox\" [(ngModel)]=\"showChildDevices.value\" (click)=\"loadChildDevices()\"/>\n <span></span>\n {{ 'Show child devices' | translate }}\n </label>\n\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n container=\"body\"\n placement=\"bottom left\"\n >\n <button\n title=\"{{ 'Configure columns' | translate }}\"\n class=\"btnbar-btn c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"columns\" class=\"m-r-4\"></i>\n <span>{{ 'Configure columns' | translate }}</span>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"bg-white\">\n <div cdkDropList (cdkDropListDropped)=\"onColumnDrop($event)\" class=\"list-group m-0\">\n <div *ngFor=\"let column of columns\" cdkDrag cdkDragLockAxis=\"y\">\n <ng-container *ngIf=\"!column.positionFixed\">\n <div class=\"list-group-item draggable-after p-0 \">\n <label\n title=\"{{ (column.header | translate) || column.name }}\"\n class=\"c8y-checkbox p-l-16 p-r-32 p-t-8 p-b-8 flex-item-v-stretch\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"column.visible\"\n (change)=\"updateGridColumnsSize()\"\n />\n <span></span>\n <span>{{ (column.header | translate) || column.name }}</span>\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <button\n title=\"{{ 'Reload' | translate }}\"\n class=\"btnbar-btn btn-link\"\n [disabled]=\"dataSource.loading$ | async\"\n (click)=\"searchText = ''; reload()\"\n >\n <i c8yIcon=\"refresh\" class=\"m-r-4\"></i>\n <span>{{ 'Reload' | translate }}</span>\n </button>\n\n <div *ngIf=\"!serverSideDataCallback || showSearch\" class=\"input-group input-group-search m-l-sm-32\">\n <input\n type=\"search\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [ngModel]=\"searchText\"\n (input)=\"searchText$.emit($event.target.value)\"\n />\n <div class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"searchText.length === 0\"></i>\n <i\n c8yIcon=\"times\"\n class=\"pointer\"\n *ngIf=\"searchText.length > 0\"\n (click)=\"searchText = ''; searchText$.emit('')\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"table-data-grid-header-bulk-actions animated slideInDown fast\"\n *ngIf=\"selectedItemIds.length !== 0\"\n >\n <h4>\n <span\n *ngIf=\"!itemsSelectLimit; else limit\"\n ngNonBindable\n translate\n [translateParams]=\"{ count: selectedItemIds.length }\"\n >\n {{ count }} selected items.\n </span>\n <ng-template #limit>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: selectedItemIds.length, limit: itemsSelectLimit }\"\n >\n {{ count }} selected items out of {{ limit }} allowed\n </span>\n </ng-template>\n\n <br class=\"visible-xs\" />\n <small *ngIf=\"selectedItemIds.length >= pagination.pageSize && !itemsSelectLimit\">\n <a (click)=\"setAllItemsSelected(true)\" class=\"interact\" >\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: (dataSource.stats$ | async).filteredSize }\"\n >\n Select all {{ count }} items\n </span>\n </a>\n </small>\n </h4>\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <ng-container\n *ngFor=\"let bulkActionControl of bulkActionControls\"\n [ngSwitch]=\"bulkActionControl.type\"\n >\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"sign-out\"></i>\n <span>{{ 'Export' | translate }}</span>\n </button>\n\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n <span>{{ 'Delete' | translate }}</span>\n </button>\n\n <button\n title=\"{{ bulkActionControl.text | translate }}\"\n *ngSwitchDefault\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ bulkActionControl.icon }}\"></i>\n <span>{{ bulkActionControl.text | translate }}</span>\n </button>\n </ng-container>\n\n <button title=\"{{ 'Cancel' | translate }}\" class=\"btnbar-btn\" (click)=\"cancel()\">\n <i c8yIcon=\"times\"></i>\n <span>{{ 'Cancel' | translate }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <table\n class=\"table table-hover table-filtered-sorted table-data-grid large-padding\"\n cdk-table\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByName\"\n [class.table-striped]=\"displayOptions.striped\"\n [class.table-bordered]=\"displayOptions.bordered\"\n [class.table-data-grid-with-checkboxes]=\"selectable\"\n [class.table-data-grid-with-actions]=\"actionControls.length > 0\"\n [style.grid-template-columns]=\"styles.gridTemplateColumns\"\n (mousemove)=\"resizeHandleContainerMouseMove$.emit($event)\"\n (mouseup)=\"resizeHandleContainerMouseUp$.emit($event)\"\n >\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\" [cdkColumnDef]=\"column.name\">\n <ng-container [ngSwitch]=\"column.name\">\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\">\n <div *ngIf=\"!itemsSelectLimit\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"currentPageSelectionState.allSelected\"\n [indeterminate]=\"\n !(\n currentPageSelectionState.allSelected ||\n currentPageSelectionState.allDeselected\n )\n \"\n (change)=\"setAllItemsInCurrentPageSelected($event.target.checked)\"\n />\n <span></span>\n </label>\n </div>\n </th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(row)\"\n (change)=\"setItemsSelected([row], $event.target.checked)\"\n [disabled]=\"selectedItemIds.length >= itemsSelectLimit && !isItemSelected(row)\"\n />\n <span></span>\n </label>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'actions'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\"></th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"actionControls.length <= 2\">\n <ng-container\n *ngFor=\"let actionControl of actionControls\"\n [ngSwitch]=\"actionControl.type\"\n >\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n *ngSwitchCase=\"builtInActionType.Edit\"\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ 'Edit' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btn btn-dot showOnHover\"\n title=\"{{ 'Delete' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i class=\"text-danger\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n *ngSwitchDefault\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ actionControl.text | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n </button>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"actionControls.length > 2\" class=\"dropdown\" dropdown>\n <button\n title=\"{{ 'Actions' | translate }}\"\n class=\"dropdown-toggle c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li *ngFor=\"let actionControl of actionControls\" [ngSwitch]=\"actionControl.type\">\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n title=\"{{ 'Edit' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Edit\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n {{ 'Delete' | translate }}\n </button>\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Export' | translate }}\n </button>\n <button\n title=\"{{ actionControl.text | translate }}\"\n *ngSwitchDefault\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n {{ actionControl.text | translate }}\n </button>\n </ng-container>\n </li>\n </ul>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <th\n cdk-header-cell\n *cdkHeaderCellDef\n [ngClass]=\"column.headerCSSClassName\"\n [attr.data-type]=\"column.dataType\"\n [class.sorted]=\"column.sortOrder\"\n [class.filtered]=\"column | map: isColumnFilteringApplied\"\n [class.hidden]=\"!column.visible\"\n >\n <div *ngIf=\"!column.filterable\" [title]=\"(column.header | translate) || column.name\">\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"column.filterable\"\n class=\"dropdown\"\n dropdown\n #dropdown=\"bs-dropdown\"\n container=\"body\"\n placement=\"bottom left\"\n [insideClick]=\"true\"\n >\n <button\n class=\"btn-header c8y-dropdown\"\n dropdownToggle\n [title]=\"(column.header | translate) || column.name\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n <i c8yIcon=\"filter\" title=\"{{ 'Filter' | translate }}\"></i>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"data-grid__dropdown\">\n <ng-container\n *ngIf=\"\n (\n [{\n column: column,\n dropdown: dropdown\n }]\n | map:getFilteringFormRendererSpec:this\n ) as filteringFormRendererSpec\n \"\n >\n <c8y-filtering-form-renderer [spec]=\"filteringFormRendererSpec\">\n </c8y-filtering-form-renderer>\n </ng-container>\n </li>\n </ul>\n </div>\n\n <button\n *ngIf=\"column.sortable\"\n class=\"btn-sort\"\n title=\"{{ 'Sort' | translate }}\"\n (click)=\"changeSortOrder(column.name)\"\n >\n <ng-container [ngSwitch]=\"column.sortOrder\">\n <i *ngSwitchCase=\"'asc'\" c8yIcon=\"long-arrow-up\"></i>\n <i *ngSwitchCase=\"'desc'\" c8yIcon=\"long-arrow-down\"></i>\n <i *ngSwitchDefault c8yIcon=\"exchange\"></i>\n </ng-container>\n </button>\n\n <span\n class=\"resize-handle\"\n (mousedown)=\"\n resizeHandleMouseDown$.emit({ event: $event, targetColumnName: column.name })\n \"\n >\n </span>\n </th>\n\n <td\n cdk-cell\n *cdkCellDef=\"let row\"\n [ngClass]=\"column.cellCSSClassName\"\n [attr.data-cell-title]=\"column.header | translate\"\n [class.hidden]=\"!column.visible\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n value: resolveCellValue(row, column.path),\n row: row,\n columnName: column.name\n }]\n | map:getCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container cdkColumnDef=\"infiniteScrollFooter\">\n <td cdk-footer-cell *cdkFooterCellDef [style.grid-column]=\"styles.gridInfiniteScrollColumn\">\n <template #infiniteScrollContainer></template>\n </td>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"columnNames\"></tr>\n\n <tr\n cdk-row\n *cdkRowDef=\"let row; columns: columnNames\"\n (mouseover)=\"rowMouseOver.emit(row)\"\n (mouseleave)=\"rowMouseLeave.emit(row)\"\n (click)=\"rowClick.emit(row)\"\n ></tr>\n\n <ng-container *ngIf=\"infiniteScroll\">\n <tr cdk-footer-row *cdkFooterRowDef=\"['infiniteScrollFooter']\"></tr>\n </ng-container>\n </table>\n\n <div *ngIf=\"(dataSource.loading$ | async) && !loadMoreComponent\" class=\"text-center\">\n <c8y-progress-bar [message]=\"loadingItemsLabel\"></c8y-progress-bar>\n </div>\n\n <div\n class=\"row m-0 p-t-40 p-b-40\"\n *ngIf=\"!(dataSource.loading$ | async) && (dataSource.stats$ | async).filteredSize === 0\"\n >\n <div class=\"col-md-4 col-md-offset-4\">\n <ng-content select=\".c8y-empty-state\"></ng-content>\n </div>\n </div>\n\n <div *ngIf=\"pagination && !infiniteScroll\" class=\"table-data-grid-footer separator large-padding\">\n <div class=\"col-sm-4 no-gutter\">\n <div *ngIf=\"(dataSource.stats$ | async).currentPageSize > 0\" class=\"counter\">\n <span class=\"text-muted\" ngNonBindable translate [translateParams]=\"paginationLabelParams\"\n >{{ pageFirstItemIdx }} - {{ pageLastItemIdx }} of {{ itemsTotal }}</span\n >\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-center\">\n <div\n *ngIf=\"(dataSource.stats$ | async).filteredSize > minPossiblePageSize\"\n class=\"form-group form-inline\"\n >\n <label class=\"m-r-4\">{{ 'Items per page' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [ngModel]=\"pagination.pageSize\"\n (ngModelChange)=\"\n updatePagination({ itemsPerPage: $event, page: pagination.currentPage })\n \"\n >\n <option *ngFor=\"let pageSize of possiblePageSizes\" [ngValue]=\"pageSize\">\n {{ pageSize }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-right\">\n <pagination\n [class.hidden]=\"totalPagesCount <= 1\"\n [ngModel]=\"pagination.currentPage\"\n (pageChanged)=\"updatePagination($event)\"\n [totalItems]=\"(dataSource.stats$ | async).filteredSize\"\n [itemsPerPage]=\"pagination.pageSize\"\n (numPages)=\"totalPagesCount = $event\"\n [maxSize]=\"5\"\n [boundaryLinks]=\"false\"\n previousText=\" \"\n nextText=\" \"\n ></pagination>\n </div>\n </div>\n</div>\n"
|
|
586
586
|
})
|
|
587
587
|
], DataGridComponent);
|
|
588
588
|
export { DataGridComponent };
|
|
589
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLElBQUksU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLEtBQUssRUFDTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ0osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFTTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBRXRCLG1CQUFtQixFQU1wQixNQUFNLG1CQUFtQixDQUFD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REFDUTtBQUNQO0lBQVIsS0FBSyxFQUFFOzJEQUEwQjtBQUV4QjtJQUFULE1BQU0sRUFBRTt1REFBMkM7QUFDMUM7SUFBVCxNQUFNLEVBQUU7d0RBQTRDO0FBQzNDO0lBQVQsTUFBTSxFQUFFO21EQUF1QztBQUN0QztJQUFULE1BQU0sRUFBRTt5REFBaUQ7QUFDaEQ7SUFBVCxNQUFNLEVBQUU7bURBQXVDO0FBQ3RDO0lBQVQsTUFBTSxFQUFFO3NEQUE0QztBQUMzQztJQUFULE1BQU0sRUFBRTt5REFBOEM7QUFFckI7SUFBakMsZUFBZSxDQUFDLGVBQWUsQ0FBQzswREFBNkM7QUFFdkM7SUFBdEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQzswREFBNkI7QUFHbkU7SUFEQyxTQUFTLENBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO2tFQUN0QztBQW1DUztJQUFsRCxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO2lEQUF1QztBQWpKOUUsaUJBQWlCO0lBSjdCLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxlQUFlO1FBQ3pCLG1ocUJBQXlDO0tBQzFDLENBQUM7R0FDVyxpQkFBaUIsQ0EyckI3QjtTQTNyQlksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrSGVhZGVyQ2VsbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90YWJsZSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IElSZXN1bHRMaXN0LCBQYWdpbmcgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBmbG93LCBnZXQsIHBhcnNlSW50IGFzIF9wYXJzZUludCwgdW5pb24sIHdpdGhvdXQsIHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaXJzdCxcbiAgbWVyZ2VNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExvYWRNb3JlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2xvYWQtbW9yZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZE1vcmVNb2RlIH0gZnJvbSAnLi4vY29tbW9uL2xvYWQtbW9yZS5tb2RlbCc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcbmltcG9ydCB7IENlbGxSZW5kZXJlclNwZWMgfSBmcm9tICcuL2NvbHVtbi9jZWxsLXJlbmRlcmVyJztcbmltcG9ydCB7IENvbHVtbkRpcmVjdGl2ZSB9IGZyb20gJy4vY29sdW1uL2NvbHVtbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRm9ybVJlbmRlcmVyU3BlYywgRmlsdGVyaW5nTW9kaWZpZXIgfSBmcm9tICcuL2NvbHVtbi9maWx0ZXJpbmctZm9ybS1yZW5kZXJlcic7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQnVsa0FjdGlvbkNvbnRyb2wsXG4gIENvbHVtbixcbiAgQ29sdW1uRGF0YVR5cGUsXG4gIERhdGFHcmlkLFxuICBEYXRhU291cmNlU3RhdHMsXG4gIERpc3BsYXlPcHRpb25zLFxuICBGaWx0ZXJpbmdBY3Rpb25UeXBlLFxuICBtaW5Db2x1bW5HcmlkVHJhY2tTaXplLFxuICBQYWdpbmF0aW9uLFxuICByYXRpb3NCeUNvbHVtblR5cGVzLFxuICBSb3csXG4gIFNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gIFNvcnRPcmRlcixcbiAgU3BlY2lhbENvbHVtbk5hbWUsXG4gIEdyaWRDb25maWdcbn0gZnJvbSAnLi9kYXRhLWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgR3JpZERhdGFTb3VyY2UgfSBmcm9tICcuL2dyaWQtZGF0YS1zb3VyY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBEYXRhR3JpZCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9IGdldHRleHQoJ0l0ZW1zJyk7XG4gIEBJbnB1dCgpIGxvYWRNb3JlSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZCBtb3JlIGl0ZW1zJyk7XG4gIEBJbnB1dCgpIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIGl0ZW1z4oCmJyk7XG4gIEBJbnB1dCgpIHNob3dTZWFyY2ggPSBmYWxzZTtcbiAgQElucHV0KCkgcmVmcmVzaDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBJbnB1dCgpIHNob3dDaGlsZERldmljZXM6IGFueSA9IHt9O1xuXG4gIGNvbHVtbnM6IENvbHVtbltdO1xuICBASW5wdXQoJ2NvbHVtbnMnKVxuICBzZXQgX2NvbHVtbnMoY29sdW1ucykge1xuICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnMgfHwgW107XG4gIH1cblxuICBkYXRhU291cmNlID0gbmV3IEdyaWREYXRhU291cmNlKCk7XG4gIHJvd3M6IFJvd1tdO1xuICBASW5wdXQoJ3Jvd3MnKVxuICBzZXQgX3Jvd3Mocm93cykge1xuICAgIHRoaXMucm93cyA9IHJvd3MgfHwgW107XG4gIH1cblxuICBmaWx0ZXJpbmdMYWJlbHNQYXJhbXMgPSB7XG4gICAgZmlsdGVyZWRJdGVtc0NvdW50OiAwLFxuICAgIGFsbEl0ZW1zQ291bnQ6IDBcbiAgfTtcblxuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uO1xuICBwYWdpbmF0aW9uTGFiZWxQYXJhbXMgPSB7XG4gICAgcGFnZUZpcnN0SXRlbUlkeDogMCxcbiAgICBwYWdlTGFzdEl0ZW1JZHg6IDAsXG4gICAgaXRlbXNUb3RhbDogMFxuICB9O1xuICByZWFkb25seSBwb3NzaWJsZVBhZ2VTaXplczogbnVtYmVyW10gPSBbMTAsIDE1LCAyMCwgMzAsIDUwXTtcbiAgcmVhZG9ubHkgbWluUG9zc2libGVQYWdlU2l6ZSA9IE1hdGgubWluKC4uLnRoaXMucG9zc2libGVQYWdlU2l6ZXMpO1xuICBASW5wdXQoJ3BhZ2luYXRpb24nKVxuICBzZXQgX3BhZ2luYXRpb24ocGFnaW5hdGlvbikge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHBhZ2luYXRpb247XG4gICAgY29uc3QgcGFnZVNpemUgPSBnZXQodGhpcy5wYWdpbmF0aW9uLCAncGFnZVNpemUnKTtcblxuICAgIGlmIChcbiAgICAgIHBhZ2VTaXplICYmXG4gICAgICAhdGhpcy5wb3NzaWJsZVBhZ2VTaXplcy5maW5kKHBvc3NpYmxlUGFnZVNpemUgPT4gcG9zc2libGVQYWdlU2l6ZSA9PT0gcGFnZVNpemUpXG4gICAgKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgcGFnZVNpemU6IDEwIH07XG4gICAgfVxuICB9XG5cbiAgaW5maW5pdGVTY3JvbGw6IExvYWRNb3JlTW9kZTtcbiAgQElucHV0KCdpbmZpbml0ZVNjcm9sbCcpXG4gIHNldCBfaW5maW5pdGVTY3JvbGwoaW5maW5pdGVTY3JvbGw6IExvYWRNb3JlTW9kZSkge1xuICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgPSBpbmZpbml0ZVNjcm9sbDtcbiAgfVxuXG4gIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IFNlcnZlclNpZGVEYXRhQ2FsbGJhY2s7XG4gIEBJbnB1dCgnc2VydmVyU2lkZURhdGFDYWxsYmFjaycpXG4gIHNldCBfc2VydmVyU2lkZURhdGFDYWxsYmFjayhzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrKSB7XG4gICAgdGhpcy5zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrID0gc2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgfVxuXG4gIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCdzZWxlY3RhYmxlJylcbiAgc2V0IF9zZWxlY3RhYmxlKHNlbGVjdGFibGUpIHtcbiAgICB0aGlzLnNlbGVjdGFibGUgPSBzZWxlY3RhYmxlO1xuICB9XG5cbiAgc2VsZWN0aW9uUHJpbWFyeUtleSA9ICdpZCc7XG4gIEBJbnB1dCgnc2VsZWN0aW9uUHJpbWFyeUtleScpXG4gIHNldCBfc2VsZWN0aW9uUHJpbWFyeUtleShzZWxlY3Rpb25QcmltYXJ5S2V5KSB7XG4gICAgdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5ID0gc2VsZWN0aW9uUHJpbWFyeUtleTtcbiAgfVxuXG4gIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9ucyA9IHtcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZVxuICB9O1xuICBASW5wdXQoJ2Rpc3BsYXlPcHRpb25zJylcbiAgc2V0IF9kaXNwbGF5T3B0aW9ucyhkaXNwbGF5T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGxheU9wdGlvbnMgPSB7IC4uLnRoaXMuZGlzcGxheU9wdGlvbnMsIC4uLmRpc3BsYXlPcHRpb25zIH07XG4gIH1cblxuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdO1xuICBASW5wdXQoJ2FjdGlvbkNvbnRyb2xzJylcbiAgc2V0IF9hY3Rpb25Db250cm9scyhhY3Rpb25Db250cm9scykge1xuICAgIHRoaXMuYWN0aW9uQ29udHJvbHMgPSBhY3Rpb25Db250cm9scyB8fCBbXTtcbiAgfVxuXG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXTtcbiAgQElucHV0KCdidWxrQWN0aW9uQ29udHJvbHMnKVxuICBzZXQgX2J1bGtBY3Rpb25Db250cm9scyhidWxrQWN0aW9uQ29udHJvbHMpIHtcbiAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IGJ1bGtBY3Rpb25Db250cm9scyB8fCBbXTtcbiAgfVxuICBASW5wdXQoKVxuICBzZWFyY2hUZXh0ID0gJyc7XG4gIEBJbnB1dCgpIGl0ZW1zU2VsZWN0TGltaXQ6IG51bWJlcjtcblxuICBAT3V0cHV0KCkgcm93TW91c2VPdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIEBPdXRwdXQoKSByb3dNb3VzZUxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIEBPdXRwdXQoKSByb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgb25Db25maWdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRDb25maWc+KCk7XG4gIEBPdXRwdXQoKSBvbkZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgaXRlbXNTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuICBAT3V0cHV0KCkgb25DaGlsZERldmljZXMgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihDb2x1bW5EaXJlY3RpdmUpIGNvbHVtblJlbmRlcmVyczogUXVlcnlMaXN0PENvbHVtbkRpcmVjdGl2ZT47XG5cbiAgQFZpZXdDaGlsZCgnc2Nyb2xsJywgeyBzdGF0aWM6IHRydWUgfSkgc2Nyb2xsQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2luZmluaXRlU2Nyb2xsQ29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGluZmluaXRlU2Nyb2xsQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIGxvYWRNb3JlQ29tcG9uZW50OiBMb2FkTW9yZUNvbXBvbmVudDtcblxuICBjb2x1bW5OYW1lcyA9IFtdO1xuXG4gIHN0eWxlcyA9IHtcbiAgICB0YWJsZUN1cnNvcjogJ2F1dG8nLFxuICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHVuZGVmaW5lZCxcbiAgICBncmlkSW5maW5pdGVTY3JvbGxDb2x1bW46IHVuZGVmaW5lZFxuICB9O1xuXG4gIHNlYXJjaFRleHQkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIGZpbHRlcmluZ0FwcGxpZWQgPSBmYWxzZTtcbiAgdG90YWxQYWdlc0NvdW50ID0gSW5maW5pdHk7XG5cbiAgc2VsZWN0ZWRJdGVtSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjdXJyZW50UGFnZVNlbGVjdGlvblN0YXRlID0ge1xuICAgIGFsbFNlbGVjdGVkOiBmYWxzZSxcbiAgICBhbGxEZXNlbGVjdGVkOiB0cnVlXG4gIH07XG5cbiAgYnVpbHRJbkFjdGlvblR5cGUgPSB7XG4gICAgRWRpdDogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICBEZWxldGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICBFeHBvcnQ6IEJ1aWx0SW5BY3Rpb25UeXBlLkV4cG9ydFxuICB9O1xuXG4gIHJlc2l6ZUhhbmRsZU1vdXNlRG93biQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VNb3ZlJCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICByZXNpemVIYW5kbGVDb250YWluZXJNb3VzZVVwJCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwcml2YXRlIGhlYWRlckJlaW5nUmVzaXplZDoge1xuICAgIGNvbHVtbk5hbWU6IHN0cmluZztcbiAgICBlbDogSFRNTEVsZW1lbnQ7XG4gIH07XG4gIEBWaWV3Q2hpbGRyZW4oQ2RrSGVhZGVyQ2VsbCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgdGhSZWZzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIHByaXZhdGUgdGhFbHM7XG5cbiAgcHJpdmF0ZSByZWNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50OiBib29sZWFuO1xuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBob3N0UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2VhcmNoVGV4dCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKHNlYXJjaFRleHQgPT4ge1xuICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmRhdGFTb3VyY2UuZGF0YSQsIHRoaXMuaXRlbXNTZWxlY3QuYXNPYnNlcnZhYmxlKCkpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtkYXRhXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlRW1wdHkgPSBkYXRhLmxlbmd0aCA9PT0gMDtcblxuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VTZWxlY3Rpb25TdGF0ZSA9IHtcbiAgICAgICAgICAgIGFsbFNlbGVjdGVkOiBjdXJyZW50UGFnZUVtcHR5ID8gZmFsc2UgOiBkYXRhLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSksXG4gICAgICAgICAgICBhbGxEZXNlbGVjdGVkOiBjdXJyZW50UGFnZUVtcHR5ID8gdHJ1ZSA6IGRhdGEuZXZlcnkoaXRlbSA9PiAhdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5kYXRhU291cmNlLnN0YXRzJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShzdGF0cyA9PiB7XG4gICAgICB0aGlzLmNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50KHN0YXRzKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nTGFiZWxzUGFyYW1zKHN0YXRzKTtcbiAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbkxhYmVsUGFyYW1zKHN0YXRzKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnJlZnJlc2gpIHtcbiAgICAgIHRoaXMucmVmcmVzaC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhldmVudCkge1xuICAgIGlmICghZXZlbnQuX2FjdGlvbkNvbnRyb2xzIHx8IGV2ZW50Ll9hY3Rpb25Db250cm9scy5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgIHRoaXMudGhFbHMgPSB0aGlzLnRoUmVmcy50b0FycmF5KCkubWFwKCh7IG5hdGl2ZUVsZW1lbnQgfSkgPT4gbmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5zZXR1cFJlc2l6ZUhhbmRsZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB0cmFja0J5TmFtZShpbmRleCwgaXRlbSkge1xuICAgIHJldHVybiBpdGVtLm5hbWU7XG4gIH1cblxuICByZXNvbHZlQ2VsbFZhbHVlKHJvdywgcGF0aCkge1xuICAgIHJldHVybiBmbG93KFtcbiAgICAgIHggPT4gdGhpcy5kYXRhU291cmNlLnJlc29sdmVWYWx1ZSh4LCBwYXRoKSxcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5yZXNvbHZlRnVuY3Rpb24sXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uubm9ybWFsaXplTmlsXG4gICAgXSkocm93KTtcbiAgfVxuXG4gIGNoYW5nZVNvcnRPcmRlcihjb2x1bW5OYW1lKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBjb2x1bW5OYW1lKTtcblxuICAgIGlmIChjb2x1bW4pIHtcbiAgICAgIGNvbnN0IHsgc29ydE9yZGVyIH0gPSBjb2x1bW47XG5cbiAgICAgIGlmICghc29ydE9yZGVyKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydGluZyhbY29sdW1uTmFtZV0sICdhc2MnKTtcbiAgICAgIH0gZWxzZSBpZiAoc29ydE9yZGVyID09PSAnYXNjJykge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmcoW2NvbHVtbk5hbWVdLCAnZGVzYycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKFtjb2x1bW5OYW1lXSwgJycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNvcnRpbmcoY29sdW1uTmFtZXM6IHN0cmluZ1tdLCBzb3J0T3JkZXI6IFNvcnRPcmRlcikge1xuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoXG4gICAgICAoY29sdW1uKTogQ29sdW1uID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgICAgIHJldHVybiB7IC4uLmNvbHVtbiwgc29ydE9yZGVyIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlKCk7XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKGNvbHVtbk5hbWUsIGRyb3Bkb3duLCBmaWx0ZXJpbmdNb2RpZmllcikge1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nKFtjb2x1bW5OYW1lXSwge1xuICAgICAgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZS5BcHBseUZpbHRlcixcbiAgICAgIHBheWxvYWQ6IHsgZmlsdGVyaW5nTW9kaWZpZXIgfVxuICAgIH0pO1xuICAgIGRyb3Bkb3duLmhpZGUoKTtcbiAgICB0aGlzLm9uRmlsdGVyLmVtaXQoeyBjb2x1bW5OYW1lLCBkcm9wZG93biwgZmlsdGVyaW5nTW9kaWZpZXIgfSk7XG4gIH1cblxuICByZXNldEZpbHRlcihjb2x1bW5OYW1lLCBkcm9wZG93bikge1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nKFtjb2x1bW5OYW1lXSwgeyB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlLlJlc2V0RmlsdGVyIH0pO1xuICAgIGRyb3Bkb3duLmhpZGUoKTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyh0aGlzLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSksIHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuUmVzZXRGaWx0ZXJcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmluZyhcbiAgICBjb2x1bW5OYW1lczogc3RyaW5nW10sXG4gICAgYWN0aW9uOiB7XG4gICAgICB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlO1xuICAgICAgcGF5bG9hZD86IHsgZmlsdGVyaW5nTW9kaWZpZXI6IEZpbHRlcmluZ01vZGlmaWVyIH07XG4gICAgfVxuICApIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uTmFtZXMuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgIC4uLihhY3Rpb24udHlwZSA9PT0gRmlsdGVyaW5nQWN0aW9uVHlwZS5BcHBseUZpbHRlclxuICAgICAgICAgICAgPyBhY3Rpb24ucGF5bG9hZC5maWx0ZXJpbmdNb2RpZmllclxuICAgICAgICAgICAgOiB7IGZpbHRlclByZWRpY2F0ZTogdW5kZWZpbmVkLCBleHRlcm5hbEZpbHRlclF1ZXJ5OiB1bmRlZmluZWQgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpO1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCkge1xuICAgIHRoaXMuZmlsdGVyaW5nQXBwbGllZCA9IHRoaXMuY29sdW1ucy5zb21lKHRoaXMuaXNDb2x1bW5GaWx0ZXJpbmdBcHBsaWVkKTtcbiAgfVxuXG4gIGlzQ29sdW1uRmlsdGVyaW5nQXBwbGllZChjb2x1bW46IENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgZmlsdGVyYWJsZSwgZmlsdGVyUHJlZGljYXRlLCBleHRlcm5hbEZpbHRlclF1ZXJ5IH0gPSBjb2x1bW47XG5cbiAgICByZXR1cm4gISEoZmlsdGVyYWJsZSAmJiAoZmlsdGVyUHJlZGljYXRlIHx8IGV4dGVybmFsRmlsdGVyUXVlcnkpKTtcbiAgfVxuXG4gIHVwZGF0ZVBhZ2luYXRpb24oeyBpdGVtc1BlclBhZ2UsIHBhZ2UgfSkge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBwYWdlU2l6ZTogaXRlbXNQZXJQYWdlLCBjdXJyZW50UGFnZTogcGFnZSB9O1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoKTtcbiAgfVxuXG4gIHJlbG9hZCgpIHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgY3VycmVudFBhZ2U6IDEgfTtcbiAgICB0aGlzLnJlY3JlYXRlTG9hZE1vcmVDb21wb25lbnQgPSB0cnVlO1xuICAgIHRoaXMubG9hZERhdGEodHJ1ZSk7XG4gICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xuICB9XG5cbiAgbG9hZE5leHRQYWdlKCk6IFByb21pc2U8SVJlc3VsdExpc3Q8b2JqZWN0Pj4ge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBjdXJyZW50UGFnZTogdGhpcy5wYWdpbmF0aW9uLm5leHRQYWdlIH07XG5cbiAgICB0aGlzLmxvYWREYXRhKCk7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLnJlc3VsdExpc3QkXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBpbiBvcmRlciBmb3IgYHRvUHJvbWlzZWAgdG8gd29yaywgdGhlIG9ic2VydmFibGUgbmVlZHMgdG8gY29tcGxldGVcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgcGFnaW5nOiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQucGFnaW5nLFxuICAgICAgICAgICAgbmV4dDogdGhpcy5sb2FkTmV4dFBhZ2UuYmluZCh0aGlzKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBJUmVzdWx0TGlzdDxvYmplY3Q+O1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRDZWxsUmVuZGVyZXJTcGVjKHsgdmFsdWUsIHJvdywgY29sdW1uTmFtZSB9KTogQ2VsbFJlbmRlcmVyU3BlYyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENlbGxSZW5kZXJlclNwZWMoeyB0eXBlOiAnQ0VMTCcsIHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk7XG4gIH1cblxuICBnZXRIZWFkZXJDZWxsUmVuZGVyZXJTcGVjKHsgdmFsdWUsIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZTogJ0hFQURFUicsIHZhbHVlLCByb3c6IHVuZGVmaW5lZCwgY29sdW1uTmFtZSB9KTtcbiAgfVxuXG4gIGdldEZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWMoeyBjb2x1bW4sIGRyb3Bkb3duIH0pOiBGaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyZXI6XG4gICAgICAgIGdldCh0aGlzLmdldENvbHVtblJlbmRlcmVyKGNvbHVtbiksICdmaWx0ZXJpbmdGb3JtUmVuZGVyZXJEZWYudGVtcGxhdGUnKSB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBwcm9wZXJ0eTogY29sdW1uLFxuICAgICAgICBhcHBseUZpbHRlcjogdGhpcy5hcHBseUZpbHRlci5iaW5kKHRoaXMsIGNvbHVtbi5uYW1lLCBkcm9wZG93biksXG4gICAgICAgIHJlc2V0RmlsdGVyOiB0aGlzLnJlc2V0RmlsdGVyLmJpbmQodGhpcywgY29sdW1uLm5hbWUsIGRyb3Bkb3duKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzZXRBbGxJdGVtc1NlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnNlbGVjdGlvbiRcbiAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZpbHRlcmVkRGF0YUlkcyB9KSA9PiB0aGlzLnNldEl0ZW1zU2VsZWN0ZWQoZmlsdGVyZWREYXRhSWRzLCBzZWxlY3RlZCkpO1xuICB9XG5cbiAgc2V0QWxsSXRlbXNJbkN1cnJlbnRQYWdlU2VsZWN0ZWQoc2VsZWN0ZWQpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLnNldEl0ZW1zU2VsZWN0ZWQoZGF0YSwgc2VsZWN0ZWQpKTtcbiAgfVxuXG4gIHNldEl0ZW1zU2VsZWN0ZWQoaXRlbXM6IGFueVtdLCBzZWxlY3RlZCkge1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBpdGVtcy5tYXAoKGl0ZW06IG9iamVjdCB8IHN0cmluZykgPT5cbiAgICAgIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IGl0ZW1bdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5XSA6IGl0ZW1cbiAgICApO1xuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1JZHMgPSBzZWxlY3RlZFxuICAgICAgPyB1bmlvbih0aGlzLnNlbGVjdGVkSXRlbUlkcywgaXRlbUlkcylcbiAgICAgIDogd2l0aG91dCh0aGlzLnNlbGVjdGVkSXRlbUlkcywgLi4uaXRlbUlkcyk7XG5cbiAgICB0aGlzLml0ZW1zU2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1JZHMpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWRzID0gW107XG4gICAgdGhpcy5pdGVtc1NlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtSWRzKTtcbiAgfVxuXG4gIGlzSXRlbVNlbGVjdGVkKGl0ZW0pIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1JZHMuaW5jbHVkZXMoaXRlbVt0aGlzLnNlbGVjdGlvblByaW1hcnlLZXldKTtcbiAgfVxuXG4gIG9uQ29sdW1uRHJvcCh7IHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCB9KSB7XG4gICAgY29uc3QgZGlmZmVyZW50SW5kZXggPSBwcmV2aW91c0luZGV4ICE9PSBjdXJyZW50SW5kZXg7XG5cbiAgICBpZiAoZGlmZmVyZW50SW5kZXgpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5zcGxpY2UocHJldmlvdXNJbmRleCwgMSk7XG4gICAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMCwgY29sdW1uWzBdKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbk5hbWVzKCk7XG4gICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgfVxuXG4gIHVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpIHtcbiAgICB0aGlzLnN0eWxlcyA9IHtcbiAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgZ3JpZFRlbXBsYXRlQ29sdW1uczogdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKFxuICAgICAgICB0aGlzLmNvbHVtbnNcbiAgICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSlcbiAgICAgICAgICAubWFwKCh7IGdyaWRUcmFja1NpemUgfSkgPT4gZ3JpZFRyYWNrU2l6ZSlcbiAgICAgICAgICAuam9pbignICcpXG4gICAgICApLFxuICAgICAgZ3JpZEluZmluaXRlU2Nyb2xsQ29sdW1uOiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoXG4gICAgICAgIGAxIC8gc3BhbiAke3RoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi52aXNpYmxlKS5sZW5ndGh9YFxuICAgICAgKVxuICAgIH07XG5cbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoKTtcbiAgfVxuXG4gIGxvYWRDaGlsZERldmljZXMoKSB7XG4gICAgdGhpcy5zaG93Q2hpbGREZXZpY2VzLnZhbHVlID0gIXRoaXMuc2hvd0NoaWxkRGV2aWNlcy52YWx1ZTtcbiAgICB0aGlzLm9uQ2hpbGREZXZpY2VzLmVtaXQodGhpcy5zaG93Q2hpbGREZXZpY2VzLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENvbmZpZ0NoYW5nZSgpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoeyB2aXNpYmxlLCBzb3J0T3JkZXIsIG5hbWUgfSkgPT4gKHtcbiAgICAgIHZpc2libGUsXG4gICAgICBzb3J0T3JkZXIsXG4gICAgICBuYW1lXG4gICAgfSkpO1xuICAgIHRoaXMub25Db25maWdDaGFuZ2UuZW1pdCh7IGNvbHVtbnMsIHBhZ2luYXRpb246IHRoaXMucGFnaW5hdGlvbiB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1ucygpIHtcbiAgICBjb25zdCBzcGVjaWFsQ29sdW1uID0ge1xuICAgICAgZ3JpZFRyYWNrU2l6ZTogJ21pbm1heCg0MnB4LCA4MnB4KScsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBwb3NpdGlvbkZpeGVkOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSBbXG4gICAgICB0aGlzLnNlbGVjdGFibGUgPyB7IC4uLnNwZWNpYWxDb2x1bW4sIG5hbWU6IFNwZWNpYWxDb2x1bW5OYW1lLkNoZWNrYm94IH0gOiB1bmRlZmluZWQsXG4gICAgICAuLi50aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IC4uLnNwZWNpYWxDb2x1bW4sIG5hbWU6IFNwZWNpYWxDb2x1bW5OYW1lLkFjdGlvbnMgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIF1cbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAodGhpcy53aXRoQ29sdW1uRGVmYXVsdHMpO1xuXG4gICAgdGhpcy5jb2x1bW5zID0gdW5pcUJ5KGNvbHVtbnMsICduYW1lJyk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5OYW1lcygpO1xuICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCk7XG4gIH1cblxuICBwcml2YXRlIHdpdGhDb2x1bW5EZWZhdWx0cyhjb2x1bW4pOiBDb2x1bW4ge1xuICAgIGNvbnN0IGRhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlIHx8IENvbHVtbkRhdGFUeXBlLlRleHRTaG9ydDtcbiAgICBjb25zdCB7IGhlYWRlckNTU0NsYXNzTmFtZSwgY2VsbENTU0NsYXNzTmFtZSB9ID0gY29sdW1uO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBwb3NpdGlvbkZpeGVkOiBmYWxzZSxcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgc29ydE9yZGVyOiAnJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgLi4uY29sdW1uLFxuICAgICAgZGF0YVR5cGUsXG4gICAgICBncmlkVHJhY2tTaXplOlxuICAgICAgICBjb2x1bW4uZ3JpZFRyYWNrU2l6ZSB8fFxuICAgICAgICBgbWlubWF4KCR7bWluQ29sdW1uR3JpZFRyYWNrU2l6ZX1weCwgJHtyYXRpb3NCeUNvbHVtblR5cGVzW2RhdGFUeXBlXX1mcilgLFxuICAgICAgaGVhZGVyQ1NTQ2xhc3NOYW1lOlxuICAgICAgICAodHlwZW9mIGhlYWRlckNTU0NsYXNzTmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGhlYWRlckNTU0NsYXNzTmFtZS5zcGxpdCgnICcpXG4gICAgICAgICAgOiBoZWFkZXJDU1NDbGFzc05hbWUpIHx8IFtdLFxuICAgICAgY2VsbENTU0NsYXNzTmFtZTpcbiAgICAgICAgKHR5cGVvZiBjZWxsQ1NTQ2xhc3NOYW1lID09PSAnc3RyaW5nJyA/IGNlbGxDU1NDbGFzc05hbWUuc3BsaXQoJyAnKSA6IGNlbGxDU1NDbGFzc05hbWUpIHx8XG4gICAgICAgIFtdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uTmFtZXMoKSB7XG4gICAgdGhpcy5jb2x1bW5OYW1lcyA9IHRoaXMuY29sdW1ucy5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZXNpemVIYW5kbGUoKSB7XG4gICAgY29uc3QgcmVzaXplSGFuZGxlRHJhZyQgPSB0aGlzLnJlc2l6ZUhhbmRsZU1vdXNlRG93biQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5jbGVhck1vdXNlSGlnaGxpZ2h0cygpKSxcbiAgICAgIG1lcmdlTWFwKCh7IGV2ZW50LCB0YXJnZXRDb2x1bW5OYW1lIH0pID0+IHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gdGFyZ2V0Q29sdW1uTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICBoZWFkZXJDU1NDbGFzc05hbWU6IHVuaW9uKGNvbHVtbi5oZWFkZXJDU1NDbGFzc05hbWUsIFsnaGVhZGVyLS1iZWluZy1yZXNpemVkJ10pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkID0ge1xuICAgICAgICAgIGNvbHVtbk5hbWU6IHRhcmdldENvbHVtbk5hbWUsXG4gICAgICAgICAgZWw6IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zdHlsZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5zdHlsZXMsXG4gICAgICAgICAgdGFibGVDdXJzb3I6ICdjb2wtcmVzaXplJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlTW92ZSQucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5jbGVhck1vdXNlSGlnaGxpZ2h0cygpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZVVwJClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJlc2l6ZUhhbmRsZURyYWckLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4sIGkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkLmNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgLy8gUmVhZCB3cmFwcGVyJ3Mgb2Zmc2V0IGxlZnQgcmVsYXRpdmUgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbE9mZnNldCA9IHdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IHdpdGggdGhlIHdyYXBwZXIgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24uXG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0ID0gd3JhcHBlci5zY3JvbGxMZWZ0IC0gaG9yaXpvbnRhbE9mZnNldDtcblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXNpcmVkIHdpZHRoLlxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0ICsgZXZlbnQuY2xpZW50WCAtICh0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5lbC5vZmZzZXRMZWZ0IHx8IDApO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29sdW1uIG9iamVjdCB3aXRoIHRoZSBuZXcgc2l6ZSB2YWx1ZSwgZW5mb3JjZSBvdXIgbWluaW11bSBzaXplLlxuICAgICAgICAgICAgICBncmlkVHJhY2tTaXplOiBgJHtNYXRoLm1heChtaW5Db2x1bW5HcmlkVHJhY2tTaXplLCB3aWR0aCl9cHhgXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZvciB0aGUgb3RoZXIgaGVhZGVycyB3aGljaCBkb24ndCBoYXZlIGEgc2V0IHdpZHRoLCBmaXggaXQgdG8gdGhlaXIgY29tcHV0ZWQgd2lkdGguXG4gICAgICAgICAgaWYgKGNvbHVtbi5ncmlkVHJhY2tTaXplLnN0YXJ0c1dpdGgoJ21pbm1heCcpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIC8vIGlzbid0IGZpeGVkIHlldCAoaXQgd291bGQgYmUgYSBweCB2YWx1ZSlcbiAgICAgICAgICAgICAgZ3JpZFRyYWNrU2l6ZTogYCR7X3BhcnNlSW50KHRoaXMudGhFbHNbaV0uY2xpZW50V2lkdGgpfXB4YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBVcGRhdGUgdGhlIGNvbHVtbiBzaXplcy5cbiAgICAgICAgICogTm90ZTogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIHNldHMgdGhlIHdpZHRoIGZvciBhbGwgY29sdW1ucyBpbiBvbmUgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlVXAkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmhlYWRlckJlaW5nUmVzaXplZCkge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5uYW1lID09PSB0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5jb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIGhlYWRlckNTU0NsYXNzTmFtZTogd2l0aG91dChjb2x1bW4uaGVhZGVyQ1NTQ2xhc3NOYW1lLCAnaGVhZGVyLS1iZWluZy1yZXNpemVkJylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgICAgIHRhYmxlQ3Vyc29yOiAnYXV0bydcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSB7XG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZSwgdmFsdWUsIHJvdywgY29sdW1uTmFtZSB9KTogQ2VsbFJlbmRlcmVyU3BlYyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBjb2x1bW5OYW1lKTtcbiAgICBjb25zdCBjb2x1bW5SZW5kZXJlciA9IHRoaXMuZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKTtcbiAgICBjb25zdCByZW5kZXJlclRlbXBsYXRlID0gZ2V0KFxuICAgICAgY29sdW1uUmVuZGVyZXIsXG4gICAgICBgJHt0eXBlID09PSAnSEVBREVSJyA/ICdoZWFkZXJDZWxsUmVuZGVyZXJEZWYnIDogJ2NlbGxSZW5kZXJlckRlZid9LnRlbXBsYXRlYFxuICAgICk7XG5cbiAgICBjb25zdCB7IGNlbGxSZW5kZXJlckNvbXBvbmVudCwgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gPSBjb2x1bW47XG4gICAgY29uc3QgcmVuZGVyZXJDb21wb25lbnQgPVxuICAgICAgdHlwZSA9PT0gJ0hFQURFUicgPyBoZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnQgOiBjZWxsUmVuZGVyZXJDb21wb25lbnQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyZXI6IHJlbmRlcmVyVGVtcGxhdGUgfHwgcmVuZGVyZXJDb21wb25lbnQsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpdGVtOiByb3csXG4gICAgICAgIHByb3BlcnR5OiBjb2x1bW5cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pOiBDb2x1bW5EaXJlY3RpdmUge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblJlbmRlcmVycy50b0FycmF5KCkuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEocmVsb2FkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGxcbiAgICB9ID0gdGhpcztcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRGF0YSh7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGwsXG4gICAgICByZWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyaW5nTGFiZWxzUGFyYW1zKHN0YXRzOiBEYXRhU291cmNlU3RhdHMpIHtcbiAgICB0aGlzLmZpbHRlcmluZ0xhYmVsc1BhcmFtcyA9IHtcbiAgICAgIGZpbHRlcmVkSXRlbXNDb3VudDogc3RhdHMuZmlsdGVyZWRTaXplLFxuICAgICAgYWxsSXRlbXNDb3VudDogc3RhdHMuc2l6ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0czogRGF0YVNvdXJjZVN0YXRzKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uLm5leHRQYWdlID0gc3RhdHMubmV4dFBhZ2U7XG4gICAgY29uc3QgcGFnZUZpcnN0SXRlbUlkeCA9IChzdGF0cy5jdXJyZW50UGFnZSAtIDEpICogc3RhdHMuZmlyc3RQYWdlU2l6ZSArIDE7XG4gICAgdGhpcy5wYWdpbmF0aW9uTGFiZWxQYXJhbXMgPSB7XG4gICAgICBwYWdlRmlyc3RJdGVtSWR4LFxuICAgICAgcGFnZUxhc3RJdGVtSWR4OiBwYWdlRmlyc3RJdGVtSWR4ICsgKHN0YXRzLmN1cnJlbnRQYWdlU2l6ZSAtIDEpLFxuICAgICAgaXRlbXNUb3RhbDogc3RhdHMuZmlsdGVyZWRTaXplXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9hZE1vcmVDb21wb25lbnQoc3RhdHM6IERhdGFTb3VyY2VTdGF0cykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgJiZcbiAgICAgIHN0YXRzICYmXG4gICAgICBzdGF0cy5uZXh0UGFnZSAmJlxuICAgICAgKCF0aGlzLmxvYWRNb3JlQ29tcG9uZW50IHx8IHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudClcbiAgICApIHtcbiAgICAgIHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jbGVhcigpO1xuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+ID0gdGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXG4gICAgICAgIExvYWRNb3JlQ29tcG9uZW50XG4gICAgICApO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBMb2FkTW9yZUNvbXBvbmVudDtcbiAgICAgIGluc3RhbmNlLnVzZUludGVyc2VjdGlvbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdhdXRvJyB8fCB0aGlzLmluZmluaXRlU2Nyb2xsID09PSAnaGlkZGVuJztcbiAgICAgIGluc3RhbmNlLmhpZGRlbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdoaWRkZW4nO1xuICAgICAgaW5zdGFuY2UucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogc3RhdHMubmV4dFBhZ2UsXG4gICAgICAgIG5leHQ6IHRoaXMubG9hZE5leHRQYWdlLmJpbmQodGhpcylcbiAgICAgIH0gYXMgUGFnaW5nPGFueT47XG4gICAgICBpbnN0YW5jZS5sb2FkTmV4dExhYmVsID0gdGhpcy5sb2FkTW9yZUl0ZW1zTGFiZWw7XG4gICAgICBpbnN0YW5jZS5sb2FkaW5nTGFiZWwgPSB0aGlzLmxvYWRpbmdJdGVtc0xhYmVsO1xuICAgICAgdGhpcy5sb2FkTW9yZUNvbXBvbmVudCA9IGluc3RhbmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkTW9yZUNvbXBvbmVudCAmJiAhc3RhdHMubmV4dFBhZ2UpIHtcbiAgICAgIHRoaXMubG9hZE1vcmVDb21wb25lbnQucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogbnVsbFxuICAgICAgfSBhcyBQYWdpbmc8YW55PjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvVG9wKCkge1xuICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
589
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLElBQUksU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLEtBQUssRUFDTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ0osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFTTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBRXRCLG1CQUFtQixFQU1wQixNQUFNLG1CQUFtQixDQUFD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REFDUTtBQUNQO0lBQVIsS0FBSyxFQUFFOzJEQUEwQjtBQUV4QjtJQUFULE1BQU0sRUFBRTt1REFBMkM7QUFDMUM7SUFBVCxNQUFNLEVBQUU7d0RBQTRDO0FBQzNDO0lBQVQsTUFBTSxFQUFFO21EQUF1QztBQUN0QztJQUFULE1BQU0sRUFBRTt5REFBaUQ7QUFDaEQ7SUFBVCxNQUFNLEVBQUU7bURBQXVDO0FBQ3RDO0lBQVQsTUFBTSxFQUFFO3NEQUE0QztBQUMzQztJQUFULE1BQU0sRUFBRTt5REFBOEM7QUFFckI7SUFBakMsZUFBZSxDQUFDLGVBQWUsQ0FBQzswREFBNkM7QUFFdkM7SUFBdEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQzswREFBNkI7QUFHbkU7SUFEQyxTQUFTLENBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO2tFQUN0QztBQW1DUztJQUFsRCxZQUFZLENBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDO2lEQUF1QztBQWpKOUUsaUJBQWlCO0lBSjdCLFNBQVMsQ0FBQztRQUNULFFBQVEsRUFBRSxlQUFlO1FBQ3pCLDZocUJBQXlDO0tBQzFDLENBQUM7R0FDVyxpQkFBaUIsQ0EyckI3QjtTQTNyQlksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrSGVhZGVyQ2VsbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90YWJsZSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRGYWN0b3J5LFxuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IElSZXN1bHRMaXN0LCBQYWdpbmcgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBmbG93LCBnZXQsIHBhcnNlSW50IGFzIF9wYXJzZUludCwgdW5pb24sIHdpdGhvdXQsIHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBmaXJzdCxcbiAgbWVyZ2VNYXAsXG4gIHRha2UsXG4gIHRha2VVbnRpbCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IExvYWRNb3JlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tbW9uL2xvYWQtbW9yZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZE1vcmVNb2RlIH0gZnJvbSAnLi4vY29tbW9uL2xvYWQtbW9yZS5tb2RlbCc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcbmltcG9ydCB7IENlbGxSZW5kZXJlclNwZWMgfSBmcm9tICcuL2NvbHVtbi9jZWxsLXJlbmRlcmVyJztcbmltcG9ydCB7IENvbHVtbkRpcmVjdGl2ZSB9IGZyb20gJy4vY29sdW1uL2NvbHVtbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRmlsdGVyaW5nRm9ybVJlbmRlcmVyU3BlYywgRmlsdGVyaW5nTW9kaWZpZXIgfSBmcm9tICcuL2NvbHVtbi9maWx0ZXJpbmctZm9ybS1yZW5kZXJlcic7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQnVsa0FjdGlvbkNvbnRyb2wsXG4gIENvbHVtbixcbiAgQ29sdW1uRGF0YVR5cGUsXG4gIERhdGFHcmlkLFxuICBEYXRhU291cmNlU3RhdHMsXG4gIERpc3BsYXlPcHRpb25zLFxuICBGaWx0ZXJpbmdBY3Rpb25UeXBlLFxuICBtaW5Db2x1bW5HcmlkVHJhY2tTaXplLFxuICBQYWdpbmF0aW9uLFxuICByYXRpb3NCeUNvbHVtblR5cGVzLFxuICBSb3csXG4gIFNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gIFNvcnRPcmRlcixcbiAgU3BlY2lhbENvbHVtbk5hbWUsXG4gIEdyaWRDb25maWdcbn0gZnJvbSAnLi9kYXRhLWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgR3JpZERhdGFTb3VyY2UgfSBmcm9tICcuL2dyaWQtZGF0YS1zb3VyY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZGF0YS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtZ3JpZC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGF0YUdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBEYXRhR3JpZCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9IGdldHRleHQoJ0l0ZW1zJyk7XG4gIEBJbnB1dCgpIGxvYWRNb3JlSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZCBtb3JlIGl0ZW1zJyk7XG4gIEBJbnB1dCgpIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIGl0ZW1z4oCmJyk7XG4gIEBJbnB1dCgpIHNob3dTZWFyY2ggPSBmYWxzZTtcbiAgQElucHV0KCkgcmVmcmVzaDogRXZlbnRFbWl0dGVyPGFueT47XG4gIEBJbnB1dCgpIHNob3dDaGlsZERldmljZXM6IGFueSA9IHt9O1xuXG4gIGNvbHVtbnM6IENvbHVtbltdO1xuICBASW5wdXQoJ2NvbHVtbnMnKVxuICBzZXQgX2NvbHVtbnMoY29sdW1ucykge1xuICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnMgfHwgW107XG4gIH1cblxuICBkYXRhU291cmNlID0gbmV3IEdyaWREYXRhU291cmNlKCk7XG4gIHJvd3M6IFJvd1tdO1xuICBASW5wdXQoJ3Jvd3MnKVxuICBzZXQgX3Jvd3Mocm93cykge1xuICAgIHRoaXMucm93cyA9IHJvd3MgfHwgW107XG4gIH1cblxuICBmaWx0ZXJpbmdMYWJlbHNQYXJhbXMgPSB7XG4gICAgZmlsdGVyZWRJdGVtc0NvdW50OiAwLFxuICAgIGFsbEl0ZW1zQ291bnQ6IDBcbiAgfTtcblxuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uO1xuICBwYWdpbmF0aW9uTGFiZWxQYXJhbXMgPSB7XG4gICAgcGFnZUZpcnN0SXRlbUlkeDogMCxcbiAgICBwYWdlTGFzdEl0ZW1JZHg6IDAsXG4gICAgaXRlbXNUb3RhbDogMFxuICB9O1xuICByZWFkb25seSBwb3NzaWJsZVBhZ2VTaXplczogbnVtYmVyW10gPSBbMTAsIDE1LCAyMCwgMzAsIDUwXTtcbiAgcmVhZG9ubHkgbWluUG9zc2libGVQYWdlU2l6ZSA9IE1hdGgubWluKC4uLnRoaXMucG9zc2libGVQYWdlU2l6ZXMpO1xuICBASW5wdXQoJ3BhZ2luYXRpb24nKVxuICBzZXQgX3BhZ2luYXRpb24ocGFnaW5hdGlvbikge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHBhZ2luYXRpb247XG4gICAgY29uc3QgcGFnZVNpemUgPSBnZXQodGhpcy5wYWdpbmF0aW9uLCAncGFnZVNpemUnKTtcblxuICAgIGlmIChcbiAgICAgIHBhZ2VTaXplICYmXG4gICAgICAhdGhpcy5wb3NzaWJsZVBhZ2VTaXplcy5maW5kKHBvc3NpYmxlUGFnZVNpemUgPT4gcG9zc2libGVQYWdlU2l6ZSA9PT0gcGFnZVNpemUpXG4gICAgKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgcGFnZVNpemU6IDEwIH07XG4gICAgfVxuICB9XG5cbiAgaW5maW5pdGVTY3JvbGw6IExvYWRNb3JlTW9kZTtcbiAgQElucHV0KCdpbmZpbml0ZVNjcm9sbCcpXG4gIHNldCBfaW5maW5pdGVTY3JvbGwoaW5maW5pdGVTY3JvbGw6IExvYWRNb3JlTW9kZSkge1xuICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgPSBpbmZpbml0ZVNjcm9sbDtcbiAgfVxuXG4gIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IFNlcnZlclNpZGVEYXRhQ2FsbGJhY2s7XG4gIEBJbnB1dCgnc2VydmVyU2lkZURhdGFDYWxsYmFjaycpXG4gIHNldCBfc2VydmVyU2lkZURhdGFDYWxsYmFjayhzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrKSB7XG4gICAgdGhpcy5zZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrID0gc2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgfVxuXG4gIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCdzZWxlY3RhYmxlJylcbiAgc2V0IF9zZWxlY3RhYmxlKHNlbGVjdGFibGUpIHtcbiAgICB0aGlzLnNlbGVjdGFibGUgPSBzZWxlY3RhYmxlO1xuICB9XG5cbiAgc2VsZWN0aW9uUHJpbWFyeUtleSA9ICdpZCc7XG4gIEBJbnB1dCgnc2VsZWN0aW9uUHJpbWFyeUtleScpXG4gIHNldCBfc2VsZWN0aW9uUHJpbWFyeUtleShzZWxlY3Rpb25QcmltYXJ5S2V5KSB7XG4gICAgdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5ID0gc2VsZWN0aW9uUHJpbWFyeUtleTtcbiAgfVxuXG4gIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9ucyA9IHtcbiAgICBzdHJpcGVkOiB0cnVlLFxuICAgIGJvcmRlcmVkOiBmYWxzZSxcbiAgICBncmlkSGVhZGVyOiB0cnVlLFxuICAgIGZpbHRlcjogdHJ1ZVxuICB9O1xuICBASW5wdXQoJ2Rpc3BsYXlPcHRpb25zJylcbiAgc2V0IF9kaXNwbGF5T3B0aW9ucyhkaXNwbGF5T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcGxheU9wdGlvbnMgPSB7IC4uLnRoaXMuZGlzcGxheU9wdGlvbnMsIC4uLmRpc3BsYXlPcHRpb25zIH07XG4gIH1cblxuICBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdO1xuICBASW5wdXQoJ2FjdGlvbkNvbnRyb2xzJylcbiAgc2V0IF9hY3Rpb25Db250cm9scyhhY3Rpb25Db250cm9scykge1xuICAgIHRoaXMuYWN0aW9uQ29udHJvbHMgPSBhY3Rpb25Db250cm9scyB8fCBbXTtcbiAgfVxuXG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXTtcbiAgQElucHV0KCdidWxrQWN0aW9uQ29udHJvbHMnKVxuICBzZXQgX2J1bGtBY3Rpb25Db250cm9scyhidWxrQWN0aW9uQ29udHJvbHMpIHtcbiAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IGJ1bGtBY3Rpb25Db250cm9scyB8fCBbXTtcbiAgfVxuICBASW5wdXQoKVxuICBzZWFyY2hUZXh0ID0gJyc7XG4gIEBJbnB1dCgpIGl0ZW1zU2VsZWN0TGltaXQ6IG51bWJlcjtcblxuICBAT3V0cHV0KCkgcm93TW91c2VPdmVyID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIEBPdXRwdXQoKSByb3dNb3VzZUxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIEBPdXRwdXQoKSByb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgb25Db25maWdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRDb25maWc+KCk7XG4gIEBPdXRwdXQoKSBvbkZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgaXRlbXNTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuICBAT3V0cHV0KCkgb25DaGlsZERldmljZXMgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihDb2x1bW5EaXJlY3RpdmUpIGNvbHVtblJlbmRlcmVyczogUXVlcnlMaXN0PENvbHVtbkRpcmVjdGl2ZT47XG5cbiAgQFZpZXdDaGlsZCgnc2Nyb2xsJywgeyBzdGF0aWM6IHRydWUgfSkgc2Nyb2xsQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ2luZmluaXRlU2Nyb2xsQ29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gIGluZmluaXRlU2Nyb2xsQ29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIGxvYWRNb3JlQ29tcG9uZW50OiBMb2FkTW9yZUNvbXBvbmVudDtcblxuICBjb2x1bW5OYW1lcyA9IFtdO1xuXG4gIHN0eWxlcyA9IHtcbiAgICB0YWJsZUN1cnNvcjogJ2F1dG8nLFxuICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHVuZGVmaW5lZCxcbiAgICBncmlkSW5maW5pdGVTY3JvbGxDb2x1bW46IHVuZGVmaW5lZFxuICB9O1xuXG4gIHNlYXJjaFRleHQkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIGZpbHRlcmluZ0FwcGxpZWQgPSBmYWxzZTtcbiAgdG90YWxQYWdlc0NvdW50ID0gSW5maW5pdHk7XG5cbiAgc2VsZWN0ZWRJdGVtSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjdXJyZW50UGFnZVNlbGVjdGlvblN0YXRlID0ge1xuICAgIGFsbFNlbGVjdGVkOiBmYWxzZSxcbiAgICBhbGxEZXNlbGVjdGVkOiB0cnVlXG4gIH07XG5cbiAgYnVpbHRJbkFjdGlvblR5cGUgPSB7XG4gICAgRWRpdDogQnVpbHRJbkFjdGlvblR5cGUuRWRpdCxcbiAgICBEZWxldGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICBFeHBvcnQ6IEJ1aWx0SW5BY3Rpb25UeXBlLkV4cG9ydFxuICB9O1xuXG4gIHJlc2l6ZUhhbmRsZU1vdXNlRG93biQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VNb3ZlJCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICByZXNpemVIYW5kbGVDb250YWluZXJNb3VzZVVwJCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwcml2YXRlIGhlYWRlckJlaW5nUmVzaXplZDoge1xuICAgIGNvbHVtbk5hbWU6IHN0cmluZztcbiAgICBlbDogSFRNTEVsZW1lbnQ7XG4gIH07XG4gIEBWaWV3Q2hpbGRyZW4oQ2RrSGVhZGVyQ2VsbCwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgdGhSZWZzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIHByaXZhdGUgdGhFbHM7XG5cbiAgcHJpdmF0ZSByZWNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50OiBib29sZWFuO1xuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBob3N0UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2VhcmNoVGV4dCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFwKHNlYXJjaFRleHQgPT4ge1xuICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHNlYXJjaFRleHQ7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWxvYWQoKTtcbiAgICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmRhdGFTb3VyY2UuZGF0YSQsIHRoaXMuaXRlbXNTZWxlY3QuYXNPYnNlcnZhYmxlKCkpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKFtkYXRhXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlRW1wdHkgPSBkYXRhLmxlbmd0aCA9PT0gMDtcblxuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VTZWxlY3Rpb25TdGF0ZSA9IHtcbiAgICAgICAgICAgIGFsbFNlbGVjdGVkOiBjdXJyZW50UGFnZUVtcHR5ID8gZmFsc2UgOiBkYXRhLmV2ZXJ5KGl0ZW0gPT4gdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSksXG4gICAgICAgICAgICBhbGxEZXNlbGVjdGVkOiBjdXJyZW50UGFnZUVtcHR5ID8gdHJ1ZSA6IGRhdGEuZXZlcnkoaXRlbSA9PiAhdGhpcy5pc0l0ZW1TZWxlY3RlZChpdGVtKSlcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5kYXRhU291cmNlLnN0YXRzJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZShzdGF0cyA9PiB7XG4gICAgICB0aGlzLmNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50KHN0YXRzKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nTGFiZWxzUGFyYW1zKHN0YXRzKTtcbiAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbkxhYmVsUGFyYW1zKHN0YXRzKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnJlZnJlc2gpIHtcbiAgICAgIHRoaXMucmVmcmVzaC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhldmVudCkge1xuICAgIGlmICghZXZlbnQuX2FjdGlvbkNvbnRyb2xzIHx8IGV2ZW50Ll9hY3Rpb25Db250cm9scy5maXJzdENoYW5nZSkge1xuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbnMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgIHRoaXMudGhFbHMgPSB0aGlzLnRoUmVmcy50b0FycmF5KCkubWFwKCh7IG5hdGl2ZUVsZW1lbnQgfSkgPT4gbmF0aXZlRWxlbWVudCk7XG4gICAgdGhpcy5zZXR1cFJlc2l6ZUhhbmRsZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICB0cmFja0J5TmFtZShpbmRleCwgaXRlbSkge1xuICAgIHJldHVybiBpdGVtLm5hbWU7XG4gIH1cblxuICByZXNvbHZlQ2VsbFZhbHVlKHJvdywgcGF0aCkge1xuICAgIHJldHVybiBmbG93KFtcbiAgICAgIHggPT4gdGhpcy5kYXRhU291cmNlLnJlc29sdmVWYWx1ZSh4LCBwYXRoKSxcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5yZXNvbHZlRnVuY3Rpb24sXG4gICAgICB0aGlzLmRhdGFTb3VyY2Uubm9ybWFsaXplTmlsXG4gICAgXSkocm93KTtcbiAgfVxuXG4gIGNoYW5nZVNvcnRPcmRlcihjb2x1bW5OYW1lKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBjb2x1bW5OYW1lKTtcblxuICAgIGlmIChjb2x1bW4pIHtcbiAgICAgIGNvbnN0IHsgc29ydE9yZGVyIH0gPSBjb2x1bW47XG5cbiAgICAgIGlmICghc29ydE9yZGVyKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydGluZyhbY29sdW1uTmFtZV0sICdhc2MnKTtcbiAgICAgIH0gZWxzZSBpZiAoc29ydE9yZGVyID09PSAnYXNjJykge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmcoW2NvbHVtbk5hbWVdLCAnZGVzYycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKFtjb2x1bW5OYW1lXSwgJycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNvcnRpbmcoY29sdW1uTmFtZXM6IHN0cmluZ1tdLCBzb3J0T3JkZXI6IFNvcnRPcmRlcikge1xuICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoXG4gICAgICAoY29sdW1uKTogQ29sdW1uID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgICAgIHJldHVybiB7IC4uLmNvbHVtbiwgc29ydE9yZGVyIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlKCk7XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVyKGNvbHVtbk5hbWUsIGRyb3Bkb3duLCBmaWx0ZXJpbmdNb2RpZmllcikge1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nKFtjb2x1bW5OYW1lXSwge1xuICAgICAgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZS5BcHBseUZpbHRlcixcbiAgICAgIHBheWxvYWQ6IHsgZmlsdGVyaW5nTW9kaWZpZXIgfVxuICAgIH0pO1xuICAgIGRyb3Bkb3duLmhpZGUoKTtcbiAgICB0aGlzLm9uRmlsdGVyLmVtaXQoeyBjb2x1bW5OYW1lLCBkcm9wZG93biwgZmlsdGVyaW5nTW9kaWZpZXIgfSk7XG4gIH1cblxuICByZXNldEZpbHRlcihjb2x1bW5OYW1lLCBkcm9wZG93bikge1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nKFtjb2x1bW5OYW1lXSwgeyB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlLlJlc2V0RmlsdGVyIH0pO1xuICAgIGRyb3Bkb3duLmhpZGUoKTtcbiAgfVxuXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyh0aGlzLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSksIHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuUmVzZXRGaWx0ZXJcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUZpbHRlcmluZyhcbiAgICBjb2x1bW5OYW1lczogc3RyaW5nW10sXG4gICAgYWN0aW9uOiB7XG4gICAgICB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlO1xuICAgICAgcGF5bG9hZD86IHsgZmlsdGVyaW5nTW9kaWZpZXI6IEZpbHRlcmluZ01vZGlmaWVyIH07XG4gICAgfVxuICApIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uTmFtZXMuaW5jbHVkZXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgIC4uLihhY3Rpb24udHlwZSA9PT0gRmlsdGVyaW5nQWN0aW9uVHlwZS5BcHBseUZpbHRlclxuICAgICAgICAgICAgPyBhY3Rpb24ucGF5bG9hZC5maWx0ZXJpbmdNb2RpZmllclxuICAgICAgICAgICAgOiB7IGZpbHRlclByZWRpY2F0ZTogdW5kZWZpbmVkLCBleHRlcm5hbEZpbHRlclF1ZXJ5OiB1bmRlZmluZWQgfSlcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpO1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCkge1xuICAgIHRoaXMuZmlsdGVyaW5nQXBwbGllZCA9IHRoaXMuY29sdW1ucy5zb21lKHRoaXMuaXNDb2x1bW5GaWx0ZXJpbmdBcHBsaWVkKTtcbiAgfVxuXG4gIGlzQ29sdW1uRmlsdGVyaW5nQXBwbGllZChjb2x1bW46IENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHsgZmlsdGVyYWJsZSwgZmlsdGVyUHJlZGljYXRlLCBleHRlcm5hbEZpbHRlclF1ZXJ5IH0gPSBjb2x1bW47XG5cbiAgICByZXR1cm4gISEoZmlsdGVyYWJsZSAmJiAoZmlsdGVyUHJlZGljYXRlIHx8IGV4dGVybmFsRmlsdGVyUXVlcnkpKTtcbiAgfVxuXG4gIHVwZGF0ZVBhZ2luYXRpb24oeyBpdGVtc1BlclBhZ2UsIHBhZ2UgfSkge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBwYWdlU2l6ZTogaXRlbXNQZXJQYWdlLCBjdXJyZW50UGFnZTogcGFnZSB9O1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoKTtcbiAgfVxuXG4gIHJlbG9hZCgpIHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgY3VycmVudFBhZ2U6IDEgfTtcbiAgICB0aGlzLnJlY3JlYXRlTG9hZE1vcmVDb21wb25lbnQgPSB0cnVlO1xuICAgIHRoaXMubG9hZERhdGEodHJ1ZSk7XG4gICAgdGhpcy5zY3JvbGxUb1RvcCgpO1xuICB9XG5cbiAgbG9hZE5leHRQYWdlKCk6IFByb21pc2U8SVJlc3VsdExpc3Q8b2JqZWN0Pj4ge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHsgLi4udGhpcy5wYWdpbmF0aW9uLCBjdXJyZW50UGFnZTogdGhpcy5wYWdpbmF0aW9uLm5leHRQYWdlIH07XG5cbiAgICB0aGlzLmxvYWREYXRhKCk7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLnJlc3VsdExpc3QkXG4gICAgICAucGlwZSh0YWtlKDEpKSAvLyBpbiBvcmRlciBmb3IgYHRvUHJvbWlzZWAgdG8gd29yaywgdGhlIG9ic2VydmFibGUgbmVlZHMgdG8gY29tcGxldGVcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgcGFnaW5nOiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQucGFnaW5nLFxuICAgICAgICAgICAgbmV4dDogdGhpcy5sb2FkTmV4dFBhZ2UuYmluZCh0aGlzKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBhcyBJUmVzdWx0TGlzdDxvYmplY3Q+O1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRDZWxsUmVuZGVyZXJTcGVjKHsgdmFsdWUsIHJvdywgY29sdW1uTmFtZSB9KTogQ2VsbFJlbmRlcmVyU3BlYyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENlbGxSZW5kZXJlclNwZWMoeyB0eXBlOiAnQ0VMTCcsIHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk7XG4gIH1cblxuICBnZXRIZWFkZXJDZWxsUmVuZGVyZXJTcGVjKHsgdmFsdWUsIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZTogJ0hFQURFUicsIHZhbHVlLCByb3c6IHVuZGVmaW5lZCwgY29sdW1uTmFtZSB9KTtcbiAgfVxuXG4gIGdldEZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWMoeyBjb2x1bW4sIGRyb3Bkb3duIH0pOiBGaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyZXI6XG4gICAgICAgIGdldCh0aGlzLmdldENvbHVtblJlbmRlcmVyKGNvbHVtbiksICdmaWx0ZXJpbmdGb3JtUmVuZGVyZXJEZWYudGVtcGxhdGUnKSB8fFxuICAgICAgICBjb2x1bW4uZmlsdGVyaW5nRm9ybVJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgY29udGV4dDoge1xuICAgICAgICBwcm9wZXJ0eTogY29sdW1uLFxuICAgICAgICBhcHBseUZpbHRlcjogdGhpcy5hcHBseUZpbHRlci5iaW5kKHRoaXMsIGNvbHVtbi5uYW1lLCBkcm9wZG93biksXG4gICAgICAgIHJlc2V0RmlsdGVyOiB0aGlzLnJlc2V0RmlsdGVyLmJpbmQodGhpcywgY29sdW1uLm5hbWUsIGRyb3Bkb3duKVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBzZXRBbGxJdGVtc1NlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnNlbGVjdGlvbiRcbiAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAuc3Vic2NyaWJlKCh7IGZpbHRlcmVkRGF0YUlkcyB9KSA9PiB0aGlzLnNldEl0ZW1zU2VsZWN0ZWQoZmlsdGVyZWREYXRhSWRzLCBzZWxlY3RlZCkpO1xuICB9XG5cbiAgc2V0QWxsSXRlbXNJbkN1cnJlbnRQYWdlU2VsZWN0ZWQoc2VsZWN0ZWQpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSQucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLnNldEl0ZW1zU2VsZWN0ZWQoZGF0YSwgc2VsZWN0ZWQpKTtcbiAgfVxuXG4gIHNldEl0ZW1zU2VsZWN0ZWQoaXRlbXM6IGFueVtdLCBzZWxlY3RlZCkge1xuICAgIGNvbnN0IGl0ZW1JZHMgPSBpdGVtcy5tYXAoKGl0ZW06IG9iamVjdCB8IHN0cmluZykgPT5cbiAgICAgIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IGl0ZW1bdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5XSA6IGl0ZW1cbiAgICApO1xuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1JZHMgPSBzZWxlY3RlZFxuICAgICAgPyB1bmlvbih0aGlzLnNlbGVjdGVkSXRlbUlkcywgaXRlbUlkcylcbiAgICAgIDogd2l0aG91dCh0aGlzLnNlbGVjdGVkSXRlbUlkcywgLi4uaXRlbUlkcyk7XG5cbiAgICB0aGlzLml0ZW1zU2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1JZHMpO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWRzID0gW107XG4gICAgdGhpcy5pdGVtc1NlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtSWRzKTtcbiAgfVxuXG4gIGlzSXRlbVNlbGVjdGVkKGl0ZW0pIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1JZHMuaW5jbHVkZXMoaXRlbVt0aGlzLnNlbGVjdGlvblByaW1hcnlLZXldKTtcbiAgfVxuXG4gIG9uQ29sdW1uRHJvcCh7IHByZXZpb3VzSW5kZXgsIGN1cnJlbnRJbmRleCB9KSB7XG4gICAgY29uc3QgZGlmZmVyZW50SW5kZXggPSBwcmV2aW91c0luZGV4ICE9PSBjdXJyZW50SW5kZXg7XG5cbiAgICBpZiAoZGlmZmVyZW50SW5kZXgpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5zcGxpY2UocHJldmlvdXNJbmRleCwgMSk7XG4gICAgICB0aGlzLmNvbHVtbnMuc3BsaWNlKGN1cnJlbnRJbmRleCwgMCwgY29sdW1uWzBdKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZUNvbHVtbk5hbWVzKCk7XG4gICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgfVxuXG4gIHVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpIHtcbiAgICB0aGlzLnN0eWxlcyA9IHtcbiAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgZ3JpZFRlbXBsYXRlQ29sdW1uczogdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKFxuICAgICAgICB0aGlzLmNvbHVtbnNcbiAgICAgICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSlcbiAgICAgICAgICAubWFwKCh7IGdyaWRUcmFja1NpemUgfSkgPT4gZ3JpZFRyYWNrU2l6ZSlcbiAgICAgICAgICAuam9pbignICcpXG4gICAgICApLFxuICAgICAgZ3JpZEluZmluaXRlU2Nyb2xsQ29sdW1uOiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUoXG4gICAgICAgIGAxIC8gc3BhbiAke3RoaXMuY29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi52aXNpYmxlKS5sZW5ndGh9YFxuICAgICAgKVxuICAgIH07XG5cbiAgICB0aGlzLmVtaXRDb25maWdDaGFuZ2UoKTtcbiAgfVxuXG4gIGxvYWRDaGlsZERldmljZXMoKSB7XG4gICAgdGhpcy5zaG93Q2hpbGREZXZpY2VzLnZhbHVlID0gIXRoaXMuc2hvd0NoaWxkRGV2aWNlcy52YWx1ZTtcbiAgICB0aGlzLm9uQ2hpbGREZXZpY2VzLmVtaXQodGhpcy5zaG93Q2hpbGREZXZpY2VzLnZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENvbmZpZ0NoYW5nZSgpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoeyB2aXNpYmxlLCBzb3J0T3JkZXIsIG5hbWUgfSkgPT4gKHtcbiAgICAgIHZpc2libGUsXG4gICAgICBzb3J0T3JkZXIsXG4gICAgICBuYW1lXG4gICAgfSkpO1xuICAgIHRoaXMub25Db25maWdDaGFuZ2UuZW1pdCh7IGNvbHVtbnMsIHBhZ2luYXRpb246IHRoaXMucGFnaW5hdGlvbiB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1ucygpIHtcbiAgICBjb25zdCBzcGVjaWFsQ29sdW1uID0ge1xuICAgICAgZ3JpZFRyYWNrU2l6ZTogJ21pbm1heCg0MnB4LCA4MnB4KScsXG4gICAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgICBwb3NpdGlvbkZpeGVkOiB0cnVlXG4gICAgfTtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSBbXG4gICAgICB0aGlzLnNlbGVjdGFibGUgPyB7IC4uLnNwZWNpYWxDb2x1bW4sIG5hbWU6IFNwZWNpYWxDb2x1bW5OYW1lLkNoZWNrYm94IH0gOiB1bmRlZmluZWQsXG4gICAgICAuLi50aGlzLmNvbHVtbnMsXG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7IC4uLnNwZWNpYWxDb2x1bW4sIG5hbWU6IFNwZWNpYWxDb2x1bW5OYW1lLkFjdGlvbnMgfVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgIF1cbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAodGhpcy53aXRoQ29sdW1uRGVmYXVsdHMpO1xuXG4gICAgdGhpcy5jb2x1bW5zID0gdW5pcUJ5KGNvbHVtbnMsICduYW1lJyk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5OYW1lcygpO1xuICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmdBcHBsaWVkKCk7XG4gIH1cblxuICBwcml2YXRlIHdpdGhDb2x1bW5EZWZhdWx0cyhjb2x1bW4pOiBDb2x1bW4ge1xuICAgIGNvbnN0IGRhdGFUeXBlID0gY29sdW1uLmRhdGFUeXBlIHx8IENvbHVtbkRhdGFUeXBlLlRleHRTaG9ydDtcbiAgICBjb25zdCB7IGhlYWRlckNTU0NsYXNzTmFtZSwgY2VsbENTU0NsYXNzTmFtZSB9ID0gY29sdW1uO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBwb3NpdGlvbkZpeGVkOiBmYWxzZSxcbiAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgc29ydE9yZGVyOiAnJyxcbiAgICAgIGZpbHRlcmFibGU6IGZhbHNlLFxuICAgICAgLi4uY29sdW1uLFxuICAgICAgZGF0YVR5cGUsXG4gICAgICBncmlkVHJhY2tTaXplOlxuICAgICAgICBjb2x1bW4uZ3JpZFRyYWNrU2l6ZSB8fFxuICAgICAgICBgbWlubWF4KCR7bWluQ29sdW1uR3JpZFRyYWNrU2l6ZX1weCwgJHtyYXRpb3NCeUNvbHVtblR5cGVzW2RhdGFUeXBlXX1mcilgLFxuICAgICAgaGVhZGVyQ1NTQ2xhc3NOYW1lOlxuICAgICAgICAodHlwZW9mIGhlYWRlckNTU0NsYXNzTmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGhlYWRlckNTU0NsYXNzTmFtZS5zcGxpdCgnICcpXG4gICAgICAgICAgOiBoZWFkZXJDU1NDbGFzc05hbWUpIHx8IFtdLFxuICAgICAgY2VsbENTU0NsYXNzTmFtZTpcbiAgICAgICAgKHR5cGVvZiBjZWxsQ1NTQ2xhc3NOYW1lID09PSAnc3RyaW5nJyA/IGNlbGxDU1NDbGFzc05hbWUuc3BsaXQoJyAnKSA6IGNlbGxDU1NDbGFzc05hbWUpIHx8XG4gICAgICAgIFtdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1uTmFtZXMoKSB7XG4gICAgdGhpcy5jb2x1bW5OYW1lcyA9IHRoaXMuY29sdW1ucy5tYXAoKHsgbmFtZSB9KSA9PiBuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZXNpemVIYW5kbGUoKSB7XG4gICAgY29uc3QgcmVzaXplSGFuZGxlRHJhZyQgPSB0aGlzLnJlc2l6ZUhhbmRsZU1vdXNlRG93biQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5jbGVhck1vdXNlSGlnaGxpZ2h0cygpKSxcbiAgICAgIG1lcmdlTWFwKCh7IGV2ZW50LCB0YXJnZXRDb2x1bW5OYW1lIH0pID0+IHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gdGFyZ2V0Q29sdW1uTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICBoZWFkZXJDU1NDbGFzc05hbWU6IHVuaW9uKGNvbHVtbi5oZWFkZXJDU1NDbGFzc05hbWUsIFsnaGVhZGVyLS1iZWluZy1yZXNpemVkJ10pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkID0ge1xuICAgICAgICAgIGNvbHVtbk5hbWU6IHRhcmdldENvbHVtbk5hbWUsXG4gICAgICAgICAgZWw6IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5zdHlsZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5zdHlsZXMsXG4gICAgICAgICAgdGFibGVDdXJzb3I6ICdjb2wtcmVzaXplJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlTW92ZSQucGlwZShcbiAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5jbGVhck1vdXNlSGlnaGxpZ2h0cygpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZVVwJClcbiAgICAgICAgKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJlc2l6ZUhhbmRsZURyYWckLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2x1bW4sIGkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkLmNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgLy8gUmVhZCB3cmFwcGVyJ3Mgb2Zmc2V0IGxlZnQgcmVsYXRpdmUgdG8gdGhlIGRvY3VtZW50LlxuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbE9mZnNldCA9IHdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblxuICAgICAgICAgICAgLy8gQWRqdXN0IHdpdGggdGhlIHdyYXBwZXIgaG9yaXpvbnRhbCBzY3JvbGwgcG9zaXRpb24uXG4gICAgICAgICAgICBjb25zdCBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0ID0gd3JhcHBlci5zY3JvbGxMZWZ0IC0gaG9yaXpvbnRhbE9mZnNldDtcblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBkZXNpcmVkIHdpZHRoLlxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPVxuICAgICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsT2Zmc2V0ICsgZXZlbnQuY2xpZW50WCAtICh0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5lbC5vZmZzZXRMZWZ0IHx8IDApO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY29sdW1uIG9iamVjdCB3aXRoIHRoZSBuZXcgc2l6ZSB2YWx1ZSwgZW5mb3JjZSBvdXIgbWluaW11bSBzaXplLlxuICAgICAgICAgICAgICBncmlkVHJhY2tTaXplOiBgJHtNYXRoLm1heChtaW5Db2x1bW5HcmlkVHJhY2tTaXplLCB3aWR0aCl9cHhgXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZvciB0aGUgb3RoZXIgaGVhZGVycyB3aGljaCBkb24ndCBoYXZlIGEgc2V0IHdpZHRoLCBmaXggaXQgdG8gdGhlaXIgY29tcHV0ZWQgd2lkdGguXG4gICAgICAgICAgaWYgKGNvbHVtbi5ncmlkVHJhY2tTaXplLnN0YXJ0c1dpdGgoJ21pbm1heCcpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIC8vIGlzbid0IGZpeGVkIHlldCAoaXQgd291bGQgYmUgYSBweCB2YWx1ZSlcbiAgICAgICAgICAgICAgZ3JpZFRyYWNrU2l6ZTogYCR7X3BhcnNlSW50KHRoaXMudGhFbHNbaV0uY2xpZW50V2lkdGgpfXB4YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICAvKlxuICAgICAgICAgKiBVcGRhdGUgdGhlIGNvbHVtbiBzaXplcy5cbiAgICAgICAgICogTm90ZTogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIHNldHMgdGhlIHdpZHRoIGZvciBhbGwgY29sdW1ucyBpbiBvbmUgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlVXAkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmhlYWRlckJlaW5nUmVzaXplZCkge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5uYW1lID09PSB0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5jb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIGhlYWRlckNTU0NsYXNzTmFtZTogd2l0aG91dChjb2x1bW4uaGVhZGVyQ1NTQ2xhc3NOYW1lLCAnaGVhZGVyLS1iZWluZy1yZXNpemVkJylcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaGVhZGVyQmVpbmdSZXNpemVkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgICAgIHRhYmxlQ3Vyc29yOiAnYXV0bydcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSB7XG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZSwgdmFsdWUsIHJvdywgY29sdW1uTmFtZSB9KTogQ2VsbFJlbmRlcmVyU3BlYyB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBjb2x1bW5OYW1lKTtcbiAgICBjb25zdCBjb2x1bW5SZW5kZXJlciA9IHRoaXMuZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKTtcbiAgICBjb25zdCByZW5kZXJlclRlbXBsYXRlID0gZ2V0KFxuICAgICAgY29sdW1uUmVuZGVyZXIsXG4gICAgICBgJHt0eXBlID09PSAnSEVBREVSJyA/ICdoZWFkZXJDZWxsUmVuZGVyZXJEZWYnIDogJ2NlbGxSZW5kZXJlckRlZid9LnRlbXBsYXRlYFxuICAgICk7XG5cbiAgICBjb25zdCB7IGNlbGxSZW5kZXJlckNvbXBvbmVudCwgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gPSBjb2x1bW47XG4gICAgY29uc3QgcmVuZGVyZXJDb21wb25lbnQgPVxuICAgICAgdHlwZSA9PT0gJ0hFQURFUicgPyBoZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnQgOiBjZWxsUmVuZGVyZXJDb21wb25lbnQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVuZGVyZXI6IHJlbmRlcmVyVGVtcGxhdGUgfHwgcmVuZGVyZXJDb21wb25lbnQsXG4gICAgICBjb250ZXh0OiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpdGVtOiByb3csXG4gICAgICAgIHByb3BlcnR5OiBjb2x1bW5cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pOiBDb2x1bW5EaXJlY3RpdmUge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblJlbmRlcmVycy50b0FycmF5KCkuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZERhdGEocmVsb2FkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGxcbiAgICB9ID0gdGhpcztcblxuICAgIHRoaXMuZGF0YVNvdXJjZS5sb2FkRGF0YSh7XG4gICAgICByb3dzLFxuICAgICAgY29sdW1ucyxcbiAgICAgIHBhZ2luYXRpb24sXG4gICAgICBzZWFyY2hUZXh0LFxuICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayxcbiAgICAgIHNlbGVjdGFibGUsXG4gICAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgICAgaW5maW5pdGVTY3JvbGwsXG4gICAgICByZWxvYWRcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRmlsdGVyaW5nTGFiZWxzUGFyYW1zKHN0YXRzOiBEYXRhU291cmNlU3RhdHMpIHtcbiAgICB0aGlzLmZpbHRlcmluZ0xhYmVsc1BhcmFtcyA9IHtcbiAgICAgIGZpbHRlcmVkSXRlbXNDb3VudDogc3RhdHMuZmlsdGVyZWRTaXplLFxuICAgICAgYWxsSXRlbXNDb3VudDogc3RhdHMuc2l6ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0czogRGF0YVNvdXJjZVN0YXRzKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uLm5leHRQYWdlID0gc3RhdHMubmV4dFBhZ2U7XG4gICAgY29uc3QgcGFnZUZpcnN0SXRlbUlkeCA9IChzdGF0cy5jdXJyZW50UGFnZSAtIDEpICogc3RhdHMuZmlyc3RQYWdlU2l6ZSArIDE7XG4gICAgdGhpcy5wYWdpbmF0aW9uTGFiZWxQYXJhbXMgPSB7XG4gICAgICBwYWdlRmlyc3RJdGVtSWR4LFxuICAgICAgcGFnZUxhc3RJdGVtSWR4OiBwYWdlRmlyc3RJdGVtSWR4ICsgKHN0YXRzLmN1cnJlbnRQYWdlU2l6ZSAtIDEpLFxuICAgICAgaXRlbXNUb3RhbDogc3RhdHMuZmlsdGVyZWRTaXplXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9hZE1vcmVDb21wb25lbnQoc3RhdHM6IERhdGFTb3VyY2VTdGF0cykge1xuICAgIGlmIChcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgJiZcbiAgICAgIHN0YXRzICYmXG4gICAgICBzdGF0cy5uZXh0UGFnZSAmJlxuICAgICAgKCF0aGlzLmxvYWRNb3JlQ29tcG9uZW50IHx8IHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudClcbiAgICApIHtcbiAgICAgIHRoaXMucmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jbGVhcigpO1xuICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+ID0gdGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoXG4gICAgICAgIExvYWRNb3JlQ29tcG9uZW50XG4gICAgICApO1xuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5pbmZpbml0ZVNjcm9sbENvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudFJlZi5pbnN0YW5jZSBhcyBMb2FkTW9yZUNvbXBvbmVudDtcbiAgICAgIGluc3RhbmNlLnVzZUludGVyc2VjdGlvbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdhdXRvJyB8fCB0aGlzLmluZmluaXRlU2Nyb2xsID09PSAnaGlkZGVuJztcbiAgICAgIGluc3RhbmNlLmhpZGRlbiA9IHRoaXMuaW5maW5pdGVTY3JvbGwgPT09ICdoaWRkZW4nO1xuICAgICAgaW5zdGFuY2UucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogc3RhdHMubmV4dFBhZ2UsXG4gICAgICAgIG5leHQ6IHRoaXMubG9hZE5leHRQYWdlLmJpbmQodGhpcylcbiAgICAgIH0gYXMgUGFnaW5nPGFueT47XG4gICAgICBpbnN0YW5jZS5sb2FkTmV4dExhYmVsID0gdGhpcy5sb2FkTW9yZUl0ZW1zTGFiZWw7XG4gICAgICBpbnN0YW5jZS5sb2FkaW5nTGFiZWwgPSB0aGlzLmxvYWRpbmdJdGVtc0xhYmVsO1xuICAgICAgdGhpcy5sb2FkTW9yZUNvbXBvbmVudCA9IGluc3RhbmNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sb2FkTW9yZUNvbXBvbmVudCAmJiAhc3RhdHMubmV4dFBhZ2UpIHtcbiAgICAgIHRoaXMubG9hZE1vcmVDb21wb25lbnQucGFnaW5nID0ge1xuICAgICAgICBuZXh0UGFnZTogbnVsbFxuICAgICAgfSBhcyBQYWdpbmc8YW55PjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvVG9wKCkge1xuICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -10,4 +10,4 @@ export var FilteringActionType;
|
|
|
10
10
|
FilteringActionType["ApplyFilter"] = "APPLY_FILTER";
|
|
11
11
|
FilteringActionType["ResetFilter"] = "RESET_FILTER";
|
|
12
12
|
})(FilteringActionType || (FilteringActionType = {}));
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGM4eS9uZ3gtY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvcmUvZGF0YS1ncmlkL2RhdGEtZ3JpZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2SkEsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHO0lBQ2pDLElBQUksRUFBRSxDQUFDO0lBQ1AsT0FBTyxFQUFFLENBQUM7SUFDVixZQUFZLEVBQUUsSUFBSTtJQUNsQixXQUFXLEVBQUUsSUFBSTtDQUNsQixDQUFDO0FBTUYsTUFBTSxDQUFOLElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3QixtREFBNEIsQ0FBQTtJQUM1QixtREFBNEIsQ0FBQTtBQUM5QixDQUFDLEVBSFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUc5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG4vKlxuICogRm9yIHJlZmVyZW5jZTogdGhlIHN0cnVjdHVyZSBvZiBjdXJyZW50IGRldmljZSBjb2x1bW4tcmVsYXRlZCBvYmplY3RzLlxuICogVE9ETzogQ2FuIGJlIHJlbW92ZWQgd2hlbiBcIkFsbCBkZXZpY2VzXCIgaXMgZnVsbHkgbWlncmF0ZWQuXG4gKlxuICogU2VydmljZXMgaW52b2x2ZWQ6XG4gKiAtIGM4eUZpbHRlcmluZ1NvcnRpbmdDb2x1bW5zXG4gKiAtIGM4eUZpbHRlcmluZ1NvcnRpbmdJbnZlbnRvcnlRdWVyaWVzXG4gKiAtIGM4eURldmljZUxpc3RDb2x1bW5zXG4gKiAtIGM4eUZpbHRlcmluZ1NvcnRpbmdDb2xsZWN0aW9ucz8/IC0+IGZvciBvdGhlciB0YWJsZXMgaW4gdGVuYW50L2NlbGwgSUQgdXNhZ2Ugc3RhdGlzdGljcyBmZWF0dXJlXG4gKlxuICogQ29tcG9uZW50cyBpbnZvbHZlZDpcbiAqIC0gYzh5RmlsdGVyZWRTb3J0ZWRMaXN0IC0+IHRoaXMgbmVlZHMgdG8gYmUgZ3JhdmVseSBhZGFwdGVkXG4gKlxuICogU3RhdGVzIHNhdmVkIGluIHVzZXIgcHJlZmVyZW5jZXM6XG4gKiAtIENvbHVtbnMgY29uZmlnIChBTExfREVWSUNFU19DT0xVTU5TX0NPTkZJR19VU0VSX1BSRUZFUkVOQ0VTX0tFWSlcbiAqIC0gQ29sdW1ucyBtZXRhIChBTExfREVWSUNFU19DT0xVTU5TX01FVEFfVVNFUl9QUkVGRVJFTkNFU19LRVlfUFJFRklYKVxuICpcbiAqIFN0YXRlcyBzYXZlZCBpbiBkeW5hbWljIGdyb3VwIG9iamVjdDpcbiAqIC0gQ29sdW1ucyBjb25maWcgKENPTFVNTlNfQ09ORklHX0ZSQUdNRU5UKVxuICogLSBDb2x1bW5zIG1ldGEgKENPTFVNTlNfTUVUQV9GUkFHTUVOVClcbiAqIC0gUXVlcnkgc3RyaW5nIChRVUVSWV9TVFJJTkdfRlJBR01FTlQpXG4gKlxuICogVE8tRlVUVVJFLVNFTEYgbm90ZTpcbiAqIC0gYGNvbC5jb25maWcuZmlsdGVyaW5nYCBhbmQgYGNvbC5jb25maWcuc29ydGluZ2AgKHRoZSBtb2RlbHMpIHBvcHVsYXRlXG4gKiBgY29sLmZpbHRlcmluZ2AgYW5kIGBjb2wuc29ydGluZ2AgKHRoZSB2aWV3cykuXG4gKiAtIGBnZXRGaWx0ZXJgIGNhbiByZXR1cm4gYSBxdWVyeSBvYmplY3QgKGZvciBzZXJ2ZXItc2lkZSBmaWx0ZXJpbmcpIG9yXG4gKiBhIGZpbHRlciBmdW5jdGlvbiAoZm9yIHNlcnZlci1zaWRlIGZpbHRlcmluZykuXG4gKi9cbmludGVyZmFjZSBEZXZpY2VDb2x1bW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGhlYWRlcjogc3RyaW5nO1xuICBjb25maWc6IHtcbiAgICBmaWx0ZXJpbmc6IG9iamVjdDtcbiAgICBzb3J0aW5nOiB7XG4gICAgICBvcmRlcjogbnVtYmVyO1xuICAgIH07XG4gICAgb3ZlcnJpZGU6IERldmljZUNvbHVtbjtcbiAgfTtcbiAgY2VsbDoge1xuICAgIGNsYXNzOiBzdHJpbmc7XG4gICAgaW5uZXJDbGFzczogc3RyaW5nO1xuICAgIHNjb3BlRXh0ZW5zaW9uczogb2JqZWN0O1xuICAgIHRlbXBsYXRlOiBzdHJpbmc7XG4gICAgc3R5bGU6IG9iamVjdDtcbiAgfTtcbiAgZmlsdGVyaW5nOiB7XG4gICAgZm9ybTogb2JqZWN0W107XG4gICAgc2NoZW1hOiB7XG4gICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgfTtcbiAgICB9O1xuICAgIGdldEZpbHRlcihmaWx0ZXJpbmdNb2RlbDogb2JqZWN0KTogb2JqZWN0IHwgRmlsdGVyRnVuY3Rpb247XG4gIH07XG4gIHNvcnRpbmc6IHtcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIHBhdGhzPzogc3RyaW5nO1xuICB9O1xuICBtZXRhOiB7XG4gICAgY3VzdG9tOiBib29sZWFuO1xuICAgIGtleTogc3RyaW5nO1xuICAgIGhlYWRlck5hbWU6IHN0cmluZztcbiAgICBmcmFnbWVudFBhdGg6IHN0cmluZztcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgZmlsdGVyaW5nTW9kZTogJ0VRVUFMSVRZJyB8ICdFWElTVEVOQ0UnO1xuICB9O1xufVxuXG50eXBlIEZpbHRlckZ1bmN0aW9uID0gKGl0ZW06IG9iamVjdCkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhR3JpZCB7XG4gIGNvbHVtbnM6IENvbHVtbltdO1xuICByb3dzOiBSb3dbXTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbjtcbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgc2VsZWN0aW9uUHJpbWFyeUtleTogc3RyaW5nO1xuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnM7XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW107XG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXTtcbn1cblxuLypcbiAqIENvbHVtblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gIG5hbWU6IHN0cmluZyB8IFNwZWNpYWxDb2x1bW5OYW1lO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHZpc2libGU/OiBib29sZWFuO1xuICBwb3NpdGlvbkZpeGVkPzogYm9vbGVhbjtcblxuICAvKlxuICAgKiBDb3NtZXRpY3NcbiAgICovXG4gIGRhdGFUeXBlPzogQ29sdW1uRGF0YVR5cGU7XG4gIGdyaWRUcmFja1NpemU/OiBzdHJpbmc7XG4gIGhlYWRlckNTU0NsYXNzTmFtZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBjZWxsQ1NTQ2xhc3NOYW1lPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLypcbiAgICogU29ydGluZy1GaWx0ZXJpbmdcbiAgICovXG4gIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgc29ydE9yZGVyPzogU29ydE9yZGVyO1xuXG4gIGZpbHRlcmFibGU/OiBib29sZWFuO1xuICBmaWx0ZXJQcmVkaWNhdGU/OiBzdHJpbmcgfCBGaWx0ZXJQcmVkaWNhdGVGdW5jdGlvbjtcbiAgZXh0ZXJuYWxGaWx0ZXJRdWVyeT86IGFueTtcblxuICAvKlxuICAgKiBDdXN0b20gcmVuZGVyZXJcbiAgICovXG4gIGNlbGxSZW5kZXJlckNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBmaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQ/OiBUeXBlPGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uQ29uZmlnIHtcbiAgbmFtZT86IHN0cmluZztcbiAgdmlzaWJsZT86IGJvb2xlYW47XG4gIHNvcnRPcmRlcj86IFNvcnRPcmRlcjtcbiAgZmlsdGVyPzogRmlsdGVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlciB7XG4gIGV4dGVybmFsRmlsdGVyUXVlcnk/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZENvbmZpZyB7XG4gIGNvbHVtbnM6IENvbHVtbkNvbmZpZ1tdO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBTcGVjaWFsQ29sdW1uTmFtZSB7XG4gIENoZWNrYm94ID0gJ2NoZWNrYm94JyxcbiAgQWN0aW9ucyA9ICdhY3Rpb25zJ1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBDb2x1bW5EYXRhVHlwZSB7XG4gIEljb24gPSAnaWNvbicsXG4gIE51bWVyaWMgPSAnbnVtZXJpYycsXG4gIFRleHRTaG9ydCA9ICd0ZXh0LXNob3J0JyxcbiAgVGV4dExvbmcgPSAndGV4dC1sb25nJ1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBDb2x1bW5EYXRhUmVjb3JkQ2xhc3NOYW1lIHtcbiAgSWNvbiA9ICdkYXRhLXJlY29yZC1pY29uJyxcbiAgSGVhZGVyID0gJ2RhdGEtcmVjb3JkLWhlYWRlcicsXG4gIERlZmF1bHQgPSAnJ1xufVxuXG5leHBvcnQgY29uc3QgbWluQ29sdW1uR3JpZFRyYWNrU2l6ZSA9IDgwO1xuXG5leHBvcnQgY29uc3QgcmF0aW9zQnlDb2x1bW5UeXBlcyA9IHtcbiAgaWNvbjogMSxcbiAgbnVtZXJpYzogMSxcbiAgJ3RleHQtc2hvcnQnOiAxLjY3LFxuICAndGV4dC1sb25nJzogMy4zM1xufTtcblxuZXhwb3J0IHR5cGUgU29ydE9yZGVyID0gJ2FzYycgfCAnZGVzYycgfCAnJztcblxuZXhwb3J0IHR5cGUgRmlsdGVyUHJlZGljYXRlRnVuY3Rpb24gPSAoaXRlbTogb2JqZWN0LCBwYXRoOiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbmV4cG9ydCBlbnVtIEZpbHRlcmluZ0FjdGlvblR5cGUge1xuICBBcHBseUZpbHRlciA9ICdBUFBMWV9GSUxURVInLFxuICBSZXNldEZpbHRlciA9ICdSRVNFVF9GSUxURVInXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm93IHtcbiAgaWQ6IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb24ge1xuICBjdXJyZW50UGFnZTogbnVtYmVyO1xuICBuZXh0UGFnZT86IG51bWJlcjtcbiAgcGFnZVNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgU2VydmVyU2lkZURhdGFDYWxsYmFjayA9IChcbiAgZGF0YVNvdXJjZU1vZGlmaWVyOiBEYXRhU291cmNlTW9kaWZpZXJcbikgPT4gU2VydmVyU2lkZURhdGFSZXN1bHQ7XG5leHBvcnQgaW50ZXJmYWNlIERhdGFTb3VyY2VNb2RpZmllciB7XG4gIGNvbHVtbnM6IENvbHVtbltdO1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb247XG4gIHNlbGVjdGlvbjoge1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJpbWFyeUtleTogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyByZXN1bHQgZnJvbSBzZXJ2ZXIgd2l0aCBkYXRhIGFuZCBhZGRpdGlvbmFsIHN0YXRpc3RpY3MuXG4gKi9cbmV4cG9ydCB0eXBlIFNlcnZlclNpZGVEYXRhUmVzdWx0ID0gSVJlc3VsdExpc3Q8b2JqZWN0PiAmIHtcbiAgLyoqIFRoZSByZWFsIGdyYW5kIHRvdGFsIG51bWJlciBvZiBpdGVtcyAodGhlIHdob2xlIGRhdGFzZXQpLiAqL1xuICBzaXplOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMgYWZ0ZXIgZmlsdGVyaW5nIGFwcGxpZWQgdG8gdGhlIHdob2xlIGRhdGFzZXQgKHN1YnNldCkuICovXG4gIGZpbHRlcmVkU2l6ZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgbGlzdCBvZiBpZHMgb2YgYWxsIGZpbHRlcmVkIGl0ZW1zIChzdWJzZXQpLiAqL1xuICBmaWx0ZXJlZERhdGFJZHM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNvdXJjZVN0YXRzIHtcbiAgLyoqIFRoZSByZWFsIGdyYW5kIHRvdGFsIG51bWJlciBvZiBpdGVtcyAodGhlIHdob2xlIGRhdGFzZXQpLiAqL1xuICBzaXplOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMgYWZ0ZXIgZmlsdGVyaW5nIGFwcGxpZWQgdG8gdGhlIHdob2xlIGRhdGFzZXQgKHN1YnNldCkuICovXG4gIGZpbHRlcmVkU2l6ZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IHBhZ2UuICovXG4gIGN1cnJlbnRQYWdlOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgdGhlIG5leHQgcGFnZS4gKi9cbiAgbmV4dFBhZ2U/OiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMgY3VycmVudGx5IHNob3duIGluIHRoZSBsaXN0IHZpZXcsIGEuay5hLiBjdXJyZW50IHBhZ2UgKHdoYXQgdGhlIHVzZXIgc2VlcyBvbiBzY3JlZW4pLiAqL1xuICBjdXJyZW50UGFnZVNpemU6IG51bWJlcjtcblxuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcyBvbiB0aGUgZmlyc3QgcGFnZS4gICovXG4gIGZpcnN0UGFnZVNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNwbGF5T3B0aW9ucyB7XG4gIC8qKiBTaG93IG9yIGhpZGUgemVicmEtc3RyaXBpbmcgaW4gdGhlIHRhYmxlICovXG4gIHN0cmlwZWQ6IGJvb2xlYW47XG4gIC8qKiBTaG93IG9yIGhpZGUgZWFjaCBjZWxsIGJvcmRlciAqL1xuICBib3JkZXJlZDogYm9vbGVhbjtcbiAgLyoqIFNob3cgb3IgaGlkZSB0aGUgZ3JpZCBoZWFkZXIgKi9cbiAgZ3JpZEhlYWRlcjogYm9vbGVhbjtcbiAgLyoqIFNob3cgb3IgaGlkZSBmaWx0ZXIgbGFiZWwgaW4gdGhlIGdyaWQgaGVhZGVyICovXG4gIGZpbHRlcjogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25Db250cm9sIHtcbiAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUgfCBzdHJpbmc7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpiYW4tdHlwZXNcbiAgY2FsbGJhY2s6ICgoaXRlbTogUm93LCByZWxvYWQ6ICgpID0+IHZvaWQpID0+IHZvaWQpIHwgRnVuY3Rpb247XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWxrQWN0aW9uQ29udHJvbCBleHRlbmRzIEFjdGlvbkNvbnRyb2wge1xuICBjYWxsYmFjayhzZWxlY3RlZEl0ZW1JZHM6IHN0cmluZ1tdLCByZWxvYWQ6ICgpID0+IHZvaWQpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBCdWlsdEluQWN0aW9uVHlwZSB7XG4gIEVkaXQgPSAnRURJVCcsXG4gIERlbGV0ZSA9ICdERUxFVEUnLFxuICBFeHBvcnQgPSAnRVhQT1JUJ1xufVxuIl19
|
|
@@ -3,7 +3,7 @@ import { BehaviorSubject, defer, from, isObservable, of, Subject } from 'rxjs';
|
|
|
3
3
|
import { catchError, finalize, map, switchMap, tap } from 'rxjs/operators';
|
|
4
4
|
export class GridDataSource {
|
|
5
5
|
constructor() {
|
|
6
|
-
this.loadingSubject = new BehaviorSubject(
|
|
6
|
+
this.loadingSubject = new BehaviorSubject(true);
|
|
7
7
|
this.dataSourceSubject = new BehaviorSubject([]);
|
|
8
8
|
this.dataStatsSubject = new BehaviorSubject({
|
|
9
9
|
size: 0,
|
|
@@ -152,4 +152,4 @@ export class GridDataSource {
|
|
|
152
152
|
function escapeRegExpPattern(pattern = '') {
|
|
153
153
|
return pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
154
154
|
}
|
|
155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1kYXRhLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2RhdGEtZ3JpZC9ncmlkLWRhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNFLE1BQU0sT0FBTyxjQUFjO0lBcUJ6QjtRQWRRLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDckQsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDdEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWtCO1lBQzlELElBQUksRUFBRSxDQUFDO1lBQ1AsWUFBWSxFQUFFLENBQUM7WUFDZixXQUFXLEVBQUUsQ0FBQztZQUNkLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsRUFBRSxDQUFDO1NBQ2pCLENBQUMsQ0FBQztRQUNLLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFNO1lBQ3RELGVBQWUsRUFBRSxFQUFFO1NBQ3BCLENBQUMsQ0FBQztRQUNLLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBRzdELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsS0FB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R0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZFLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBRU8saUJBQWlCLENBQUMsV0FBVztRQUNuQyxPQUFPLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sWUFBWSxDQUFDLENBQUM7UUFDcEIsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztDQUNGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLG1CQUFtQixDQUFDLE9BQU8sR0FBRyxFQUFFO0lBQ3ZDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGNodW5rLCBmbG93LCBnZXQsIGlzTmlsLCBtYXBWYWx1ZXMsIG9taXRCeSwgb3JkZXJCeSwgcGljayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlZmVyLCBmcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbHVtbiwgRGF0YVNvdXJjZVN0YXRzLCBTZXJ2ZXJTaWRlRGF0YVJlc3VsdCB9IGZyb20gJy4vZGF0YS1ncmlkLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIEdyaWREYXRhU291cmNlIGltcGxlbWVudHMgRGF0YVNvdXJjZTxvYmplY3Q+IHtcbiAgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGRhdGEkOiBPYnNlcnZhYmxlPG9iamVjdFtdPjtcbiAgc3RhdHMkOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VTdGF0cz47XG4gIHNlbGVjdGlvbiQ6IE9ic2VydmFibGU8YW55PjtcbiAgcmVzdWx0TGlzdCQ6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8b2JqZWN0Pj47XG5cbiAgcHJpdmF0ZSBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGRhdGFTb3VyY2VTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxvYmplY3RbXT4oW10pO1xuICBwcml2YXRlIGRhdGFTdGF0c1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFTb3VyY2VTdGF0cz4oe1xuICAgIHNpemU6IDAsXG4gICAgZmlsdGVyZWRTaXplOiAwLFxuICAgIGN1cnJlbnRQYWdlOiAwLFxuICAgIGN1cnJlbnRQYWdlU2l6ZTogMCxcbiAgICBmaXJzdFBhZ2VTaXplOiAwXG4gIH0pO1xuICBwcml2YXRlIGRhdGFTZWxlY3Rpb25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHtcbiAgICBmaWx0ZXJlZERhdGFJZHM6IFtdXG4gIH0pO1xuICBwcml2YXRlIHJlc3VsdExpc3RTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SVJlc3VsdExpc3Q8b2JqZWN0Pj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmxvYWRpbmckID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmRhdGEkID0gdGhpcy5kYXRhU291cmNlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnN0YXRzJCA9IHRoaXMuZGF0YVN0YXRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnNlbGVjdGlvbiQgPSB0aGlzLmRhdGFTZWxlY3Rpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMucmVzdWx0TGlzdCQgPSB0aGlzLnJlc3VsdExpc3RTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxvYmplY3RbXT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEkO1xuICB9XG5cbiAgZGlzY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGF0YVNvdXJjZVN1YmplY3QuY29tcGxldGUoKTtcbiAgICB0aGlzLmRhdGFTdGF0c1N1YmplY3QuY29tcGxldGUoKTtcbiAgICB0aGlzLmRhdGFTZWxlY3Rpb25TdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBsb2FkRGF0YSh7XG4gICAgcm93cyxcbiAgICBjb2x1bW5zLFxuICAgIHBhZ2luYXRpb24sXG4gICAgc2VhcmNoVGV4dCxcbiAgICBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrLFxuICAgIHNlbGVjdGFibGUsXG4gICAgc2VsZWN0aW9uUHJpbWFyeUtleSxcbiAgICBpbmZpbml0ZVNjcm9sbCxcbiAgICByZWxvYWQgPSBmYWxzZVxuICB9KSB7XG4gICAgY29uc3QgY2xpZW50U2lkZURhdGEkID0gdGhpcy50b09ic2VydmFibGUocm93cykucGlwZShcbiAgICAgIG1hcChpbml0aWFsRGF0YSA9PiB7XG4gICAgICAgIGxldCBmaWx0ZXJlZFNpemUgPSAwO1xuICAgICAgICBsZXQgZmlsdGVyZWREYXRhSWRzID0gW107XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gZmxvdyhcbiAgICAgICAgICBkYXRhID0+IHRoaXMuZG9DbGllbnRTaWRlU2VhcmNoKHsgZGF0YSwgY29sdW1ucywgc2VhcmNoVGV4dCB9KSxcbiAgICAgICAgICBkYXRhID0+IHRoaXMuZG9DbGllbnRTaWRlRmlsdGVyaW5nKHsgZGF0YSwgY29sdW1ucyB9KSxcbiAgICAgICAgICBkYXRhID0+IHRoaXMuZG9DbGllbnRTaWRlU29ydGluZyh7IGRhdGEsIGNvbHVtbnMgfSksXG4gICAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgICBmaWx0ZXJlZFNpemUgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YUlkcyA9IHNlbGVjdGFibGVcbiAgICAgICAgICAgICAgPyBkYXRhLm1hcChpdGVtID0+IGl0ZW1bc2VsZWN0aW9uUHJpbWFyeUtleV0pXG4gICAgICAgICAgICAgIDogZmlsdGVyZWREYXRhSWRzO1xuXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRhdGEgPT4gdGhpcy5kb0NsaWVudFNpZGVQYWdpbmF0aW9uKHsgZGF0YSwgcGFnaW5hdGlvbiB9KVxuICAgICAgICApKGluaXRpYWxEYXRhKTtcblxuICAgICAgICB0aGlzLmRhdGFTdGF0c1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgc2l6ZTogaW5pdGlhbERhdGEubGVuZ3RoLFxuICAgICAgICAgIGZpbHRlcmVkU2l6ZSxcbiAgICAgICAgICBjdXJyZW50UGFnZTogcGFnaW5hdGlvbi5jdXJyZW50UGFnZSxcbiAgICAgICAgICBjdXJyZW50UGFnZVNpemU6IHRyYW5zZm9ybWVkRGF0YS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RQYWdlU2l6ZTogcGFnaW5hdGlvbi5wYWdlU2l6ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhU2VsZWN0aW9uU3ViamVjdC5uZXh0KHsgZmlsdGVyZWREYXRhSWRzIH0pO1xuXG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGE7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBzZXJ2ZXJTaWRlRGF0YSQgPSBkZWZlcigoKSA9PlxuICAgICAgdGhpcy50b09ic2VydmFibGUoXG4gICAgICAgIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2soe1xuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgc2VhcmNoVGV4dCxcbiAgICAgICAgICBwYWdpbmF0aW9uLFxuICAgICAgICAgIHNlbGVjdGlvbjogeyBlbmFibGVkOiBzZWxlY3RhYmxlLCBwcmltYXJ5S2V5OiBzZWxlY3Rpb25QcmltYXJ5S2V5IH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHJlc3VsdDogU2VydmVyU2lkZURhdGFSZXN1bHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBwYWdpbmcsIHNpemUsIGZpbHRlcmVkU2l6ZSwgZmlsdGVyZWREYXRhSWRzIH0gPSByZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5kYXRhU3RhdHNTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgIHNpemUsXG4gICAgICAgICAgZmlsdGVyZWRTaXplLFxuICAgICAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmcuY3VycmVudFBhZ2UsXG4gICAgICAgICAgY3VycmVudFBhZ2VTaXplOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgICBuZXh0UGFnZTogcGFnaW5nLm5leHRQYWdlLFxuICAgICAgICAgIGZpcnN0UGFnZVNpemU6IHBhZ2luZy5wYWdlU2l6ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhU2VsZWN0aW9uU3ViamVjdC5uZXh0KHsgZmlsdGVyZWREYXRhSWRzOiBmaWx0ZXJlZERhdGFJZHMgfHwgW10gfSk7XG4gICAgICAgIHRoaXMucmVzdWx0TGlzdFN1YmplY3QubmV4dChyZXN1bHQpO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGF0YSQgPSB0eXBlb2Ygc2VydmVyU2lkZURhdGFDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IHNlcnZlclNpZGVEYXRhJCA6IGNsaWVudFNpZGVEYXRhJDtcblxuICAgIG9mKFtdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSkpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gZGF0YSQpLFxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhU3RhdHNTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgICAgc2l6ZTogMCxcbiAgICAgICAgICAgIGZpbHRlcmVkU2l6ZTogMCxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiAwLFxuICAgICAgICAgICAgY3VycmVudFBhZ2VTaXplOiAwLFxuICAgICAgICAgICAgZmlyc3RQYWdlU2l6ZTogMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZGF0YVNlbGVjdGlvblN1YmplY3QubmV4dCh7IGZpbHRlcmVkRGF0YUlkczogW10gfSk7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPVxuICAgICAgICAgIGluZmluaXRlU2Nyb2xsICYmICFyZWxvYWQgPyBbLi4udGhpcy5kYXRhU291cmNlU3ViamVjdC52YWx1ZSwgLi4ucmVzdWx0XSA6IHJlc3VsdDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlU3ViamVjdC5uZXh0KGRhdGEpO1xuICAgICAgfSk7XG4gIH1cblxuICByZXNvbHZlVmFsdWUoeCwgcGF0aCkge1xuICAgIHJldHVybiBnZXQoeCwgcGF0aCk7XG4gIH1cblxuICByZXNvbHZlRnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyA/IHgoKSA6IHg7XG4gIH1cblxuICBub3JtYWxpemVOaWwoeCkge1xuICAgIHJldHVybiBpc05pbCh4KSA/ICcnIDogeDtcbiAgfVxuXG4gIHByaXZhdGUgZG9DbGllbnRTaWRlRmlsdGVyaW5nKHsgZGF0YSwgY29sdW1ucyB9KSB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChyZXN1bHQsIGNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgeyBmaWx0ZXJQcmVkaWNhdGUgfSA9IGNvbHVtbjtcblxuICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJQcmVkaWNhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvQ2xpZW50U2lkZVNlYXJjaCh7XG4gICAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICAgIGNvbHVtbnM6IFtjb2x1bW5dLFxuICAgICAgICAgIHNlYXJjaFRleHQ6IGZpbHRlclByZWRpY2F0ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJQcmVkaWNhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5maWx0ZXIoaXRlbSA9PiBmaWx0ZXJQcmVkaWNhdGUoaXRlbSwgY29sdW1uLnBhdGgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCBkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZG9DbGllbnRTaWRlU2VhcmNoKHsgZGF0YSwgY29sdW1ucywgc2VhcmNoVGV4dCB9KSB7XG4gICAgY29uc3QgcHJvcFBhdGhzID0gY29sdW1ucy5tYXAoKHsgcGF0aCB9KSA9PiBwYXRoKS5maWx0ZXIoY29sdW1uID0+ICFpc05pbChjb2x1bW4pKTtcblxuICAgIGNvbnN0IHJlZ2V4U2VhcmNoID0gdGhpcy5jcmVhdGVSZWdleFNlYXJjaChzZWFyY2hUZXh0KTtcblxuICAgIHJldHVybiBkYXRhLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1XaXRoUmVzb2x2ZWRWYWx1ZXMgPSBmbG93KFxuICAgICAgICB4ID0+IHBpY2soeCwgcHJvcFBhdGhzKSxcbiAgICAgICAgeCA9PiBtYXBWYWx1ZXMoeCwgdGhpcy5yZXNvbHZlRnVuY3Rpb24pLFxuICAgICAgICB4ID0+IG9taXRCeSh4LCBpc05pbClcbiAgICAgICkoaXRlbSk7XG5cbiAgICAgIGNvbnN0IGNlbGxWYWx1ZXMgPSBPYmplY3QudmFsdWVzKGl0ZW1XaXRoUmVzb2x2ZWRWYWx1ZXMpO1xuXG4gICAgICByZXR1cm4gY2VsbFZhbHVlcy5zb21lKGNlbGxWYWx1ZSA9PiByZWdleFNlYXJjaC50ZXN0KGNlbGxWYWx1ZS50b1N0cmluZygpKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRvQ2xpZW50U2lkZVNvcnRpbmcoeyBkYXRhLCBjb2x1bW5zIH0pIHtcbiAgICBjb25zdCBhY3RpdmVzOiBDb2x1bW5bXSA9IGNvbHVtbnMuZmlsdGVyKCh7IHNvcnRPcmRlciB9OiBDb2x1bW4pID0+ICEhc29ydE9yZGVyKTtcblxuICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IHtcbiAgICAgIHBhdGhzOiBhY3RpdmVzLm1hcCgoeyBwYXRoIH0pID0+IHBhdGgpLFxuICAgICAgb3JkZXJzOiBhY3RpdmVzLm1hcCgoeyBzb3J0T3JkZXIgfSkgPT4gc29ydE9yZGVyKVxuICAgIH07XG5cbiAgICByZXR1cm4gb3JkZXJCeShkYXRhLCBzb3J0aW5nU3RhdGUucGF0aHMsIHNvcnRpbmdTdGF0ZS5vcmRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb0NsaWVudFNpZGVQYWdpbmF0aW9uKHsgZGF0YSwgcGFnaW5hdGlvbiB9KSB7XG4gICAgcmV0dXJuIHBhZ2luYXRpb25cbiAgICAgID8gZ2V0KGNodW5rKGRhdGEsIHBhZ2luYXRpb24ucGFnZVNpemUpLCBwYWdpbmF0aW9uLmN1cnJlbnRQYWdlIC0gMSwgW10pXG4gICAgICA6IGRhdGE7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlZ2V4U2VhcmNoKGZpbHRlclZhbHVlKSB7XG4gICAgcmV0dXJuIFJlZ0V4cChlc2NhcGVSZWdFeHBQYXR0ZXJuKGZpbHRlclZhbHVlKSwgJ2knKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9PYnNlcnZhYmxlKHgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBpc09ic2VydmFibGUoeCkgPyB4IDogeCBpbnN0YW5jZW9mIFByb21pc2UgPyBmcm9tKHgpIDogb2YoeCk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0cmluZyBwYXR0ZXJuIFJlZ2V4IHBhdHRlcm4uXG4gKiBAcmV0dXJuIHN0cmluZyBUaGUgZXNjYXBlZCByZWdleC5cbiAqIEBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM1NjE3MTEvMjAxMzg5MVxuICovXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHBQYXR0ZXJuKHBhdHRlcm4gPSAnJykge1xuICByZXR1cm4gcGF0dGVybi5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufVxuIl19
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1kYXRhLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2RhdGEtZ3JpZC9ncmlkLWRhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzRixPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzNFLE1BQU0sT0FBTyxjQUFjO0lBcUJ6QjtRQWRRLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDcEQsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDdEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWtCO1lBQzlELElBQUksRUFBRSxDQUFDO1lBQ1AsWUFBWSxFQUFFLENBQUM7WUFDZixXQUFXLEVBQUUsQ0FBQztZQUNkLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsRUFBRSxDQUFDO1NBQ2pCLENBQUMsQ0FBQztRQUNLLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFNO1lBQ3RELGVBQWUsRUFBRSxFQUFFO1NBQ3BCLENBQUMsQ0FBQztRQUNLLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBRzdELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsS0FB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R0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZFLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBRU8saUJBQWlCLENBQUMsV0FBVztRQUNuQyxPQUFPLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8sWUFBWSxDQUFDLENBQUM7UUFDcEIsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQztDQUNGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLG1CQUFtQixDQUFDLE9BQU8sR0FBRyxFQUFFO0lBQ3ZDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGNodW5rLCBmbG93LCBnZXQsIGlzTmlsLCBtYXBWYWx1ZXMsIG9taXRCeSwgb3JkZXJCeSwgcGljayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlZmVyLCBmcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbHVtbiwgRGF0YVNvdXJjZVN0YXRzLCBTZXJ2ZXJTaWRlRGF0YVJlc3VsdCB9IGZyb20gJy4vZGF0YS1ncmlkLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIEdyaWREYXRhU291cmNlIGltcGxlbWVudHMgRGF0YVNvdXJjZTxvYmplY3Q+IHtcbiAgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGRhdGEkOiBPYnNlcnZhYmxlPG9iamVjdFtdPjtcbiAgc3RhdHMkOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VTdGF0cz47XG4gIHNlbGVjdGlvbiQ6IE9ic2VydmFibGU8YW55PjtcbiAgcmVzdWx0TGlzdCQ6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8b2JqZWN0Pj47XG5cbiAgcHJpdmF0ZSBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgZGF0YVNvdXJjZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG9iamVjdFtdPihbXSk7XG4gIHByaXZhdGUgZGF0YVN0YXRzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVNvdXJjZVN0YXRzPih7XG4gICAgc2l6ZTogMCxcbiAgICBmaWx0ZXJlZFNpemU6IDAsXG4gICAgY3VycmVudFBhZ2U6IDAsXG4gICAgY3VycmVudFBhZ2VTaXplOiAwLFxuICAgIGZpcnN0UGFnZVNpemU6IDBcbiAgfSk7XG4gIHByaXZhdGUgZGF0YVNlbGVjdGlvblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe1xuICAgIGZpbHRlcmVkRGF0YUlkczogW11cbiAgfSk7XG4gIHByaXZhdGUgcmVzdWx0TGlzdFN1YmplY3QgPSBuZXcgU3ViamVjdDxJUmVzdWx0TGlzdDxvYmplY3Q+PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZGF0YSQgPSB0aGlzLmRhdGFTb3VyY2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc3RhdHMkID0gdGhpcy5kYXRhU3RhdHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc2VsZWN0aW9uJCA9IHRoaXMuZGF0YVNlbGVjdGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5yZXN1bHRMaXN0JCA9IHRoaXMucmVzdWx0TGlzdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiBPYnNlcnZhYmxlPG9iamVjdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSQ7XG4gIH1cblxuICBkaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5kYXRhU291cmNlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGF0YVN0YXRzU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGF0YVNlbGVjdGlvblN1YmplY3QuY29tcGxldGUoKTtcbiAgfVxuXG4gIGxvYWREYXRhKHtcbiAgICByb3dzLFxuICAgIGNvbHVtbnMsXG4gICAgcGFnaW5hdGlvbixcbiAgICBzZWFyY2hUZXh0LFxuICAgIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gICAgc2VsZWN0YWJsZSxcbiAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgIGluZmluaXRlU2Nyb2xsLFxuICAgIHJlbG9hZCA9IGZhbHNlXG4gIH0pIHtcbiAgICBjb25zdCBjbGllbnRTaWRlRGF0YSQgPSB0aGlzLnRvT2JzZXJ2YWJsZShyb3dzKS5waXBlKFxuICAgICAgbWFwKGluaXRpYWxEYXRhID0+IHtcbiAgICAgICAgbGV0IGZpbHRlcmVkU2l6ZSA9IDA7XG4gICAgICAgIGxldCBmaWx0ZXJlZERhdGFJZHMgPSBbXTtcblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSBmbG93KFxuICAgICAgICAgIGRhdGEgPT4gdGhpcy5kb0NsaWVudFNpZGVTZWFyY2goeyBkYXRhLCBjb2x1bW5zLCBzZWFyY2hUZXh0IH0pLFxuICAgICAgICAgIGRhdGEgPT4gdGhpcy5kb0NsaWVudFNpZGVGaWx0ZXJpbmcoeyBkYXRhLCBjb2x1bW5zIH0pLFxuICAgICAgICAgIGRhdGEgPT4gdGhpcy5kb0NsaWVudFNpZGVTb3J0aW5nKHsgZGF0YSwgY29sdW1ucyB9KSxcbiAgICAgICAgICBkYXRhID0+IHtcbiAgICAgICAgICAgIGZpbHRlcmVkU2l6ZSA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgZmlsdGVyZWREYXRhSWRzID0gc2VsZWN0YWJsZVxuICAgICAgICAgICAgICA/IGRhdGEubWFwKGl0ZW0gPT4gaXRlbVtzZWxlY3Rpb25QcmltYXJ5S2V5XSlcbiAgICAgICAgICAgICAgOiBmaWx0ZXJlZERhdGFJZHM7XG5cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGF0YSA9PiB0aGlzLmRvQ2xpZW50U2lkZVBhZ2luYXRpb24oeyBkYXRhLCBwYWdpbmF0aW9uIH0pXG4gICAgICAgICkoaW5pdGlhbERhdGEpO1xuXG4gICAgICAgIHRoaXMuZGF0YVN0YXRzU3ViamVjdC5uZXh0KHtcbiAgICAgICAgICBzaXplOiBpbml0aWFsRGF0YS5sZW5ndGgsXG4gICAgICAgICAgZmlsdGVyZWRTaXplLFxuICAgICAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnRQYWdlLFxuICAgICAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdHJhbnNmb3JtZWREYXRhLmxlbmd0aCxcbiAgICAgICAgICBmaXJzdFBhZ2VTaXplOiBwYWdpbmF0aW9uLnBhZ2VTaXplXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGFTZWxlY3Rpb25TdWJqZWN0Lm5leHQoeyBmaWx0ZXJlZERhdGFJZHMgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGF0YTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHNlcnZlclNpZGVEYXRhJCA9IGRlZmVyKCgpID0+XG4gICAgICB0aGlzLnRvT2JzZXJ2YWJsZShcbiAgICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayh7XG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBzZWFyY2hUZXh0LFxuICAgICAgICAgIHBhZ2luYXRpb24sXG4gICAgICAgICAgc2VsZWN0aW9uOiB7IGVuYWJsZWQ6IHNlbGVjdGFibGUsIHByaW1hcnlLZXk6IHNlbGVjdGlvblByaW1hcnlLZXkgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICkucGlwZShcbiAgICAgIG1hcCgocmVzdWx0OiBTZXJ2ZXJTaWRlRGF0YVJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRhdGEsIHBhZ2luZywgc2l6ZSwgZmlsdGVyZWRTaXplLCBmaWx0ZXJlZERhdGFJZHMgfSA9IHJlc3VsdDtcblxuICAgICAgICB0aGlzLmRhdGFTdGF0c1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgc2l6ZSxcbiAgICAgICAgICBmaWx0ZXJlZFNpemUsXG4gICAgICAgICAgY3VycmVudFBhZ2U6IHBhZ2luZy5jdXJyZW50UGFnZSxcbiAgICAgICAgICBjdXJyZW50UGFnZVNpemU6IGRhdGEubGVuZ3RoLFxuICAgICAgICAgIG5leHRQYWdlOiBwYWdpbmcubmV4dFBhZ2UsXG4gICAgICAgICAgZmlyc3RQYWdlU2l6ZTogcGFnaW5nLnBhZ2VTaXplXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGFTZWxlY3Rpb25TdWJqZWN0Lm5leHQoeyBmaWx0ZXJlZERhdGFJZHM6IGZpbHRlcmVkRGF0YUlkcyB8fCBbXSB9KTtcbiAgICAgICAgdGhpcy5yZXN1bHRMaXN0U3ViamVjdC5uZXh0KHJlc3VsdCk7XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBkYXRhJCA9IHR5cGVvZiBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gc2VydmVyU2lkZURhdGEkIDogY2xpZW50U2lkZURhdGEkO1xuXG4gICAgb2YoW10pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBkYXRhJCksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFTdGF0c1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgICBzaXplOiAwLFxuICAgICAgICAgICAgZmlsdGVyZWRTaXplOiAwLFxuICAgICAgICAgICAgY3VycmVudFBhZ2U6IDAsXG4gICAgICAgICAgICBjdXJyZW50UGFnZVNpemU6IDAsXG4gICAgICAgICAgICBmaXJzdFBhZ2VTaXplOiAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5kYXRhU2VsZWN0aW9uU3ViamVjdC5uZXh0KHsgZmlsdGVyZWREYXRhSWRzOiBbXSB9KTtcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9XG4gICAgICAgICAgaW5maW5pdGVTY3JvbGwgJiYgIXJlbG9hZCA/IFsuLi50aGlzLmRhdGFTb3VyY2VTdWJqZWN0LnZhbHVlLCAuLi5yZXN1bHRdIDogcmVzdWx0O1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VTdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc29sdmVWYWx1ZSh4LCBwYXRoKSB7XG4gICAgcmV0dXJuIGdldCh4LCBwYXRoKTtcbiAgfVxuXG4gIHJlc29sdmVGdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nID8geCgpIDogeDtcbiAgfVxuXG4gIG5vcm1hbGl6ZU5pbCh4KSB7XG4gICAgcmV0dXJuIGlzTmlsKHgpID8gJycgOiB4O1xuICB9XG5cbiAgcHJpdmF0ZSBkb0NsaWVudFNpZGVGaWx0ZXJpbmcoeyBkYXRhLCBjb2x1bW5zIH0pIHtcbiAgICByZXR1cm4gY29sdW1ucy5yZWR1Y2UoKHJlc3VsdCwgY29sdW1uKSA9PiB7XG4gICAgICBjb25zdCB7IGZpbHRlclByZWRpY2F0ZSB9ID0gY29sdW1uO1xuXG4gICAgICBpZiAodHlwZW9mIGZpbHRlclByZWRpY2F0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9DbGllbnRTaWRlU2VhcmNoKHtcbiAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgY29sdW1uczogW2NvbHVtbl0sXG4gICAgICAgICAgc2VhcmNoVGV4dDogZmlsdGVyUHJlZGljYXRlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZpbHRlclByZWRpY2F0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gcmVzdWx0LmZpbHRlcihpdGVtID0+IGZpbHRlclByZWRpY2F0ZShpdGVtLCBjb2x1bW4ucGF0aCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIGRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb0NsaWVudFNpZGVTZWFyY2goeyBkYXRhLCBjb2x1bW5zLCBzZWFyY2hUZXh0IH0pIHtcbiAgICBjb25zdCBwcm9wUGF0aHMgPSBjb2x1bW5zLm1hcCgoeyBwYXRoIH0pID0+IHBhdGgpLmZpbHRlcihjb2x1bW4gPT4gIWlzTmlsKGNvbHVtbikpO1xuXG4gICAgY29uc3QgcmVnZXhTZWFyY2ggPSB0aGlzLmNyZWF0ZVJlZ2V4U2VhcmNoKHNlYXJjaFRleHQpO1xuXG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgaXRlbVdpdGhSZXNvbHZlZFZhbHVlcyA9IGZsb3coXG4gICAgICAgIHggPT4gcGljayh4LCBwcm9wUGF0aHMpLFxuICAgICAgICB4ID0+IG1hcFZhbHVlcyh4LCB0aGlzLnJlc29sdmVGdW5jdGlvbiksXG4gICAgICAgIHggPT4gb21pdEJ5KHgsIGlzTmlsKVxuICAgICAgKShpdGVtKTtcblxuICAgICAgY29uc3QgY2VsbFZhbHVlcyA9IE9iamVjdC52YWx1ZXMoaXRlbVdpdGhSZXNvbHZlZFZhbHVlcyk7XG5cbiAgICAgIHJldHVybiBjZWxsVmFsdWVzLnNvbWUoY2VsbFZhbHVlID0+IHJlZ2V4U2VhcmNoLnRlc3QoY2VsbFZhbHVlLnRvU3RyaW5nKCkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZG9DbGllbnRTaWRlU29ydGluZyh7IGRhdGEsIGNvbHVtbnMgfSkge1xuICAgIGNvbnN0IGFjdGl2ZXM6IENvbHVtbltdID0gY29sdW1ucy5maWx0ZXIoKHsgc29ydE9yZGVyIH06IENvbHVtbikgPT4gISFzb3J0T3JkZXIpO1xuXG4gICAgY29uc3Qgc29ydGluZ1N0YXRlID0ge1xuICAgICAgcGF0aHM6IGFjdGl2ZXMubWFwKCh7IHBhdGggfSkgPT4gcGF0aCksXG4gICAgICBvcmRlcnM6IGFjdGl2ZXMubWFwKCh7IHNvcnRPcmRlciB9KSA9PiBzb3J0T3JkZXIpXG4gICAgfTtcblxuICAgIHJldHVybiBvcmRlckJ5KGRhdGEsIHNvcnRpbmdTdGF0ZS5wYXRocywgc29ydGluZ1N0YXRlLm9yZGVycyk7XG4gIH1cblxuICBwcml2YXRlIGRvQ2xpZW50U2lkZVBhZ2luYXRpb24oeyBkYXRhLCBwYWdpbmF0aW9uIH0pIHtcbiAgICByZXR1cm4gcGFnaW5hdGlvblxuICAgICAgPyBnZXQoY2h1bmsoZGF0YSwgcGFnaW5hdGlvbi5wYWdlU2l6ZSksIHBhZ2luYXRpb24uY3VycmVudFBhZ2UgLSAxLCBbXSlcbiAgICAgIDogZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVnZXhTZWFyY2goZmlsdGVyVmFsdWUpIHtcbiAgICByZXR1cm4gUmVnRXhwKGVzY2FwZVJlZ0V4cFBhdHRlcm4oZmlsdGVyVmFsdWUpLCAnaScpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b09ic2VydmFibGUoeCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIGlzT2JzZXJ2YWJsZSh4KSA/IHggOiB4IGluc3RhbmNlb2YgUHJvbWlzZSA/IGZyb20oeCkgOiBvZih4KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RyaW5nIHBhdHRlcm4gUmVnZXggcGF0dGVybi5cbiAqIEByZXR1cm4gc3RyaW5nIFRoZSBlc2NhcGVkIHJlZ2V4LlxuICogQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzU2MTcxMS8yMDEzODkxXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cFBhdHRlcm4ocGF0dGVybiA9ICcnKSB7XG4gIHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG59XG4iXX0=
|