@acorex/platform 20.6.0-next.8 → 20.6.0
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/common/index.d.ts +9 -2
- package/core/index.d.ts +209 -55
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +225 -24
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs +49 -4
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +39 -118
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +1011 -257
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +2 -2
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +9318 -4439
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +30 -24
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +4 -8
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs +30 -0
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-C1l2KSDa.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-m8rHZP8L.mjs} +2 -2
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-m8rHZP8L.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-D-31ej0C.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs} +2 -2
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +2194 -1242
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs +79 -3
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-mARj77Mr.mjs +136 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-mARj77Mr.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-Cym8pq0v.mjs +1543 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-Cym8pq0v.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +124 -21
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs +55 -0
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared.mjs +15 -110
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +658 -45
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/layout/builder/index.d.ts +6 -33
- package/layout/components/index.d.ts +301 -60
- package/layout/designer/index.d.ts +1 -1
- package/layout/entity/index.d.ts +650 -86
- package/layout/views/index.d.ts +5 -58
- package/layout/widget-core/index.d.ts +24 -26
- package/layout/widgets/README.md +0 -1
- package/layout/widgets/index.d.ts +139 -84
- package/package.json +9 -9
- package/runtime/index.d.ts +36 -8
- package/themes/default/index.d.ts +29 -73
- package/themes/shared/index.d.ts +1 -39
- package/workflow/index.d.ts +401 -90
- package/fesm2022/acorex-platform-layout-entity-create-entity.command-DGeylNSY.mjs +0 -52
- package/fesm2022/acorex-platform-layout-entity-create-entity.command-DGeylNSY.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-C1l2KSDa.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-D-31ej0C.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-WbPPqDON.mjs +0 -115
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-WbPPqDON.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CD7rJIMh.mjs +0 -803
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CD7rJIMh.mjs.map +0 -1
package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-Cym8pq0v.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-themes-default-entity-master-list-view.component-Cym8pq0v.mjs","sources":["../tmp-esm2022/themes/default/lib/layouts/entity-layouts/entity-category/entity-category.component.js","../tmp-esm2022/themes/default/lib/layouts/entity-layouts/entity-master-toolbar-view/entity-master-toolbar-view.component.js","../tmp-esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.js"],"sourcesContent":["import { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { afterNextRender, Component, computed, inject, input, signal, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXSkeletonModule } from '@acorex/components/skeleton';\nimport { AXTreeViewComponent, AXTreeViewModule, } from '@acorex/components/tree-view';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPRefreshEvent } from '@acorex/platform/common';\nimport { AXHighlightService } from '@acorex/platform/core';\nimport { AXPStateMessageComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutToolbarComponent, } from '@acorex/platform/layout/components';\nimport { AXPCategoryTreeService, AXPEntityResolver, } from '@acorex/platform/layout/entity';\nimport { AXPWorkflowService, ofType } from '@acorex/platform/workflow';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/decorators\";\nimport * as i2 from \"@acorex/components/skeleton\";\nimport * as i3 from \"@acorex/components/search-box\";\nimport * as i4 from \"@acorex/components/button\";\nimport * as i5 from \"@acorex/components/dropdown\";\nimport * as i6 from \"@angular/common\";\nimport * as i7 from \"@acorex/core/translation\";\n//#region ---- Constants ----\nconst ROOT_NODE_ID = 'all';\nconst LOADING_DELAY_MS = 300;\nconst DEFAULT_TEXT_FIELD = 'title';\nconst DEFAULT_VALUE_FIELD = 'id';\n//#endregion\nexport class AXPEntityCategoryComponent {\n //#endregion\n //#region ---- Constructor & Lifecycle ----\n constructor() {\n //#region ---- Services & Dependencies ----\n this.entityResolver = inject(AXPEntityResolver);\n this.translate = inject(AXTranslationService);\n this.workflow = inject(AXPWorkflowService);\n this.categoryTreeService = inject(AXPCategoryTreeService);\n this.highlightService = inject(AXHighlightService);\n //#endregion\n //#region ---- Component Inputs & View Queries ----\n this.vm = input.required(...(ngDevMode ? [{ debugName: \"vm\" }] : []));\n this.tree = viewChild('tree', ...(ngDevMode ? [{ debugName: \"tree\" }] : []));\n this.searchValue = input('', ...(ngDevMode ? [{ debugName: \"searchValue\" }] : []));\n // Tree view inputs with defaults\n this.selectMode = input('single', ...(ngDevMode ? [{ debugName: \"selectMode\" }] : []));\n this.selectionBehavior = input('intermediate', ...(ngDevMode ? [{ debugName: \"selectionBehavior\" }] : []));\n this.dragArea = input('handler', ...(ngDevMode ? [{ debugName: \"dragArea\" }] : []));\n this.dragBehavior = input('none', ...(ngDevMode ? [{ debugName: \"dragBehavior\" }] : []));\n this.showIcons = input(true, ...(ngDevMode ? [{ debugName: \"showIcons\" }] : []));\n this.showChildrenBadge = input(false, ...(ngDevMode ? [{ debugName: \"showChildrenBadge\" }] : []));\n this.expandedIcon = input('fa-solid fa-chevron-down', ...(ngDevMode ? [{ debugName: \"expandedIcon\" }] : []));\n this.collapsedIcon = input('fa-solid fa-chevron-right', ...(ngDevMode ? [{ debugName: \"collapsedIcon\" }] : []));\n this.indentSize = input(16, ...(ngDevMode ? [{ debugName: \"indentSize\" }] : []));\n this.look = input('default', ...(ngDevMode ? [{ debugName: \"look\" }] : []));\n this.searchWithChildren = input(true, ...(ngDevMode ? [{ debugName: \"searchWithChildren\" }] : [])); // Include children of search results\n //#endregion\n //#region ---- Component State ----\n this.isLoading = signal(true, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.isSearching = signal(false, ...(ngDevMode ? [{ debugName: \"isSearching\" }] : []));\n this.searchResultCount = signal(0, ...(ngDevMode ? [{ debugName: \"searchResultCount\" }] : []));\n this.currentSearchValue = signal('', ...(ngDevMode ? [{ debugName: \"currentSearchValue\" }] : []));\n this.resultsFoundText = signal('', ...(ngDevMode ? [{ debugName: \"resultsFoundText\" }] : []));\n //#endregion\n //#region ---- Private Properties ----\n this.loadingTimeoutId = null;\n this.treeData = null;\n this.treeConfig = null;\n this.matchingNodeIds = new Set();\n this.relevantNodeIds = new Set(); // For search filtering\n this.nodeDataCache = new Map(); // Cache parent data from search results\n this.expandedNodesBeforeSearch = [];\n this.nodesExpandedDuringSearch = [];\n this.currentSearchTerm = null;\n //#endregion\n //#region ---- Computed Properties ----\n this.textField = computed(() => this.vm().entityDef.category?.textField || DEFAULT_TEXT_FIELD, ...(ngDevMode ? [{ debugName: \"textField\" }] : []));\n this.valueField = computed(() => this.vm().entityDef.category?.valueField || DEFAULT_VALUE_FIELD, ...(ngDevMode ? [{ debugName: \"valueField\" }] : []));\n /**\n * Computed property to check if we should show the \"no search results\" empty state.\n * Returns true when search is active, not searching, and no results found.\n */\n this.showNoSearchResults = computed(() => {\n const searchValue = this.currentSearchValue().trim();\n const isSearching = this.isSearching();\n const resultCount = this.searchResultCount();\n return searchValue.length > 0 && !isSearching && resultCount === 0;\n }, ...(ngDevMode ? [{ debugName: \"showNoSearchResults\" }] : []));\n this.categoryEntityKey = computed(() => {\n const key = this.vm().entityDef.category?.entity;\n if (!key) {\n throw new Error('Category entity is not configured');\n }\n return key;\n }, ...(ngDevMode ? [{ debugName: \"categoryEntityKey\" }] : []));\n // protected toggleExpand(e: AXTreeViewNodeDoubleClickEvent) {\n // (e.component as AXTreeViewComponent).toggleNodeExpansion(String(e.node[this.valueField()] ?? ''));\n // }\n //#endregion\n //#region ---- Tree Data Source ----\n /**\n * Datasource callback for tree-view component.\n * Provides lazy loading support for tree nodes.\n */\n this.datasource = async (parentId) => {\n console.log('datasource', parentId);\n if (!this.isTreeInitialized()) {\n return [];\n }\n // Load root nodes if no parent ID provided\n if (!parentId) {\n return await this.loadRootNodes();\n }\n // Load children for the specified parent\n return await this.loadChildNodes(parentId);\n };\n afterNextRender(() => {\n this.initializeTree();\n });\n this.workflow.events$\n .pipe(ofType(AXPRefreshEvent))\n .pipe(takeUntilDestroyed())\n .subscribe((event) => {\n this.tree()?.reloadData();\n // this.tree()?.refresh();\n });\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Handles category search input changes - Uses server-side search for efficiency and reliability\n */\n async handleCategorySearchChange(event) {\n if (!this.isTreeInitialized()) {\n return;\n }\n const searchTerm = (event.value ?? '').trim().toLowerCase();\n const previousSearchTerm = this.currentSearchValue();\n // If search is cleared, reset tree\n if (!searchTerm) {\n if (previousSearchTerm || this.matchingNodeIds.size > 0) {\n this.currentSearchValue.set('');\n this.currentSearchTerm = null;\n await this.resetSearch();\n }\n return;\n }\n // For non-empty search, only process user interactions\n if (!event.isUserInteraction) {\n return;\n }\n // Prevent concurrent searches\n if (this.isSearching() && this.currentSearchTerm !== null) {\n if (this.currentSearchTerm === searchTerm) {\n return;\n }\n }\n this.currentSearchValue.set(event.value ?? '');\n this.currentSearchTerm = searchTerm;\n const treeComponent = this.tree();\n if (!treeComponent) {\n return;\n }\n // Store expanded nodes before starting a new search (only on first search)\n if (!previousSearchTerm && this.expandedNodesBeforeSearch.length === 0) {\n const expandedNodes = treeComponent.getExpandedNodes();\n this.expandedNodesBeforeSearch = expandedNodes\n .map((node) => String(node['id'] ?? ''))\n .filter((id) => id && id !== ROOT_NODE_ID);\n }\n // Collapse nodes from previous search before starting new search\n if (previousSearchTerm && this.nodesExpandedDuringSearch.length > 0) {\n const nodesToCollapse = [...this.nodesExpandedDuringSearch].reverse();\n this.nodesExpandedDuringSearch = [];\n for (const nodeId of nodesToCollapse) {\n // Only collapse if it wasn't originally expanded before search\n if (!this.expandedNodesBeforeSearch.includes(nodeId)) {\n try {\n treeComponent.collapseNode(nodeId);\n }\n catch {\n // Node might not exist anymore, ignore\n }\n }\n }\n }\n this.isSearching.set(true);\n try {\n // Step 1: Use server-side search to get matching items\n const searchResults = await this.categoryTreeService.searchCategories(searchTerm, this.treeData, this.treeConfig);\n // Check if search term changed during the API call\n if (this.currentSearchTerm !== searchTerm) {\n return;\n }\n if (!searchResults || searchResults.length === 0) {\n this.matchingNodeIds.clear();\n this.relevantNodeIds.clear();\n this.searchResultCount.set(0);\n await this.updateTranslatedMessages(0);\n // Clear highlighting and reload tree to show all nodes\n this.highlightService.clear();\n await treeComponent.reloadData();\n return;\n }\n // Store matching node IDs from search results\n this.matchingNodeIds.clear();\n const valueField = this.valueField();\n searchResults.forEach((item) => {\n const nodeId = String(item[valueField] ?? '');\n if (nodeId) {\n this.matchingNodeIds.add(nodeId);\n }\n });\n const resultCount = searchResults.length;\n this.searchResultCount.set(resultCount);\n // Update translated messages\n await this.updateTranslatedMessages(resultCount);\n // Step 2: Collect parent IDs (builds relevantNodeIds for filtering)\n const parentsToExpand = await this.collectParentIds(searchResults);\n // Step 2.5: Collect children IDs if searchWithChildren is enabled\n if (this.searchWithChildren()) {\n await this.collectChildrenIds(searchResults);\n }\n // Step 3: Reload tree to apply filtering\n await treeComponent.reloadData();\n // Step 4: Expand root node\n if (!treeComponent.isNodeExpanded(ROOT_NODE_ID)) {\n try {\n await treeComponent.expandNode(ROOT_NODE_ID);\n this.nodesExpandedDuringSearch.push(ROOT_NODE_ID);\n }\n catch {\n // Root might not exist\n }\n }\n // Step 4: Expand all parent nodes in order (from root to leaves)\n // Sort parents by their depth to expand in correct order\n const sortedParents = await this.sortParentsByDepth(Array.from(parentsToExpand));\n for (const parentId of sortedParents) {\n // Only expand if not already expanded\n if (!treeComponent.isNodeExpanded(parentId)) {\n try {\n await treeComponent.expandNode(parentId);\n this.nodesExpandedDuringSearch.push(parentId);\n // Small delay to prevent overwhelming the tree component\n await new Promise((resolve) => setTimeout(resolve, 10));\n }\n catch {\n // Node might not exist, ignore\n }\n }\n }\n // Step 5: Apply highlighting after tree is rendered\n // Use setTimeout to ensure DOM is updated after tree reload\n setTimeout(() => {\n if (this.currentSearchValue().trim()) {\n this.highlightService.highlight('ax-tree-view .ax-truncate', this.currentSearchValue().trim());\n }\n }, 100);\n }\n catch (error) {\n console.error('Error searching categories:', error);\n this.matchingNodeIds.clear();\n this.relevantNodeIds.clear();\n this.searchResultCount.set(0);\n this.highlightService.clear();\n // Reload tree to clear any filters\n const treeComponent = this.tree();\n if (treeComponent) {\n await treeComponent.reloadData();\n }\n }\n finally {\n if (this.currentSearchTerm === searchTerm) {\n this.currentSearchTerm = null;\n }\n this.isSearching.set(false);\n }\n }\n /**\n * Collects all parent IDs for the given search results\n * Handles both nested 'parent' object and 'parentId' field in search results\n * Recursively fetches parent nodes to build the full parent chain\n */\n async collectParentIds(items) {\n const parentsToExpand = new Set();\n const valueField = this.valueField();\n const parentKey = this.treeData?.categoryEntityDef?.parentKey || 'parentId';\n // Build relevantNodeIds = matching nodes + all parents\n this.relevantNodeIds.clear();\n this.matchingNodeIds.forEach((id) => this.relevantNodeIds.add(id));\n // Recursively extract all parent IDs\n const extractParentIds = async (item) => {\n // First, try to get parent from nested 'parent' object (if available)\n const parent = item['parent'];\n if (parent) {\n const parentId = String(parent[valueField] ?? parent['id'] ?? '');\n if (parentId && parentId !== ROOT_NODE_ID) {\n parentsToExpand.add(parentId);\n this.relevantNodeIds.add(parentId); // Add to filter set\n this.nodeDataCache.set(parentId, parent);\n await extractParentIds(parent);\n }\n }\n else {\n // Fallback: use parentId field and fetch parent from server\n // Try both parentKey from entity definition and common 'parentId' field\n const parentIdValue = item[parentKey] ?? item['parentId'];\n if (parentIdValue) {\n const parentId = String(parentIdValue);\n if (parentId && parentId !== ROOT_NODE_ID) {\n // Add to sets first\n parentsToExpand.add(parentId);\n this.relevantNodeIds.add(parentId);\n // Fetch parent from server if not already cached\n if (!this.nodeDataCache.has(parentId)) {\n const parentItem = await this.fetchItemById(parentId);\n if (parentItem) {\n this.nodeDataCache.set(parentId, parentItem);\n // Recursively fetch parent's parent\n await extractParentIds(parentItem);\n }\n }\n else {\n // Parent already in cache, recursively process it\n const cachedParent = this.nodeDataCache.get(parentId);\n if (cachedParent) {\n await extractParentIds(cachedParent);\n }\n }\n }\n }\n }\n };\n // Process all items\n for (const item of items) {\n await extractParentIds(item);\n }\n return parentsToExpand;\n }\n /**\n * Collects children IDs for matching search results recursively\n * Adds all descendants (children, grandchildren, etc.) to relevantNodeIds so they appear in the filtered tree\n */\n async collectChildrenIds(items) {\n if (!this.treeData?.categoryEntityQueryFunc || !this.treeConfig) {\n return;\n }\n const valueField = this.valueField();\n const parentKey = this.treeData.categoryEntityDef?.parentKey;\n if (!parentKey) {\n return;\n }\n // For each matching node, recursively fetch all its descendants\n for (const item of items) {\n const nodeId = String(item[valueField] ?? '');\n if (!nodeId || nodeId === ROOT_NODE_ID) {\n continue;\n }\n await this.collectChildrenRecursively(nodeId, valueField, parentKey);\n }\n }\n /**\n * Recursively collects all descendant IDs for a given node\n */\n async collectChildrenRecursively(nodeId, valueField, parentKey) {\n if (!this.treeData?.categoryEntityQueryFunc) {\n return;\n }\n try {\n // Fetch children for this node\n const event = {\n ...this.treeData.basicQueryEvent,\n filter: {\n field: parentKey,\n value: nodeId,\n operator: { type: 'equal' },\n },\n };\n const res = await this.treeData.categoryEntityQueryFunc(event);\n if (res?.items && res.items.length > 0) {\n // Add children IDs to relevantNodeIds so they appear in filtered tree\n for (const child of res.items) {\n const childId = String(child[valueField] ?? '');\n if (childId && childId !== ROOT_NODE_ID) {\n this.relevantNodeIds.add(childId);\n // Cache child data\n this.nodeDataCache.set(childId, child);\n // Recursively fetch children of this child\n await this.collectChildrenRecursively(childId, valueField, parentKey);\n }\n }\n }\n }\n catch (error) {\n console.error(`Error fetching children for node ${nodeId}:`, error);\n }\n }\n /**\n * Fetches a single item by ID from the server\n */\n async fetchItemById(id) {\n if (!this.treeData?.categoryEntityQueryFunc) {\n return null;\n }\n try {\n const valueField = this.valueField();\n const event = {\n ...this.treeData.basicQueryEvent,\n filter: {\n field: valueField,\n value: id,\n operator: { type: 'equal' },\n },\n };\n const res = await this.treeData.categoryEntityQueryFunc(event);\n return res?.items?.[0] ?? null;\n }\n catch (error) {\n console.error('Error fetching item by ID:', error);\n return null;\n }\n }\n /**\n * Sorts parent IDs by their depth (root first, leaves last)\n * Uses cached data from collectParentIds\n */\n async sortParentsByDepth(parentIds) {\n const parentKey = this.treeData?.categoryEntityDef?.parentKey;\n if (!parentKey || parentIds.length === 0) {\n return parentIds;\n }\n // Build depth map using cached data\n const depthMap = new Map();\n for (const parentId of parentIds) {\n if (depthMap.has(parentId)) {\n continue;\n }\n let depth = 0;\n let currentId = parentId;\n const visited = new Set();\n while (currentId && currentId !== ROOT_NODE_ID && !visited.has(currentId)) {\n visited.add(currentId);\n depth++;\n // Use nodeDataCache which was populated by collectParentIds\n const item = this.nodeDataCache.get(currentId);\n if (item) {\n currentId = item[parentKey] ? String(item[parentKey]) : null;\n }\n else {\n break;\n }\n }\n depthMap.set(parentId, depth);\n }\n // Sort by depth (lower depth = closer to root = expand first)\n return parentIds.sort((a, b) => {\n const depthA = depthMap.get(a) ?? 0;\n const depthB = depthMap.get(b) ?? 0;\n return depthA - depthB;\n });\n }\n /**\n * Updates translated messages for search results\n */\n async updateTranslatedMessages(resultCount) {\n if (resultCount > 0) {\n const key = resultCount === 1\n ? '@general:terms.interface.category.search.results-found.singular'\n : '@general:terms.interface.category.search.results-found.plural';\n const text = await this.translate.translateAsync(key, { params: { count: resultCount } });\n this.resultsFoundText.set(text);\n }\n else {\n this.resultsFoundText.set('');\n }\n }\n /**\n * Resets search state and restores tree to original expanded state\n */\n async resetSearch() {\n this.searchResultCount.set(0);\n this.resultsFoundText.set('');\n this.currentSearchTerm = null;\n this.isSearching.set(false);\n this.matchingNodeIds.clear();\n this.relevantNodeIds.clear();\n this.nodeDataCache.clear();\n // Clear highlighting\n this.highlightService.clear();\n const treeComponent = this.tree();\n if (!treeComponent) {\n this.expandedNodesBeforeSearch = [];\n this.nodesExpandedDuringSearch = [];\n return;\n }\n // Reload tree to show all nodes (no filtering)\n await treeComponent.reloadData();\n // Collapse nodes that were expanded during search (in reverse order - leaves first)\n const nodesToCollapse = [...this.nodesExpandedDuringSearch].reverse();\n this.nodesExpandedDuringSearch = [];\n for (const nodeId of nodesToCollapse) {\n // Only collapse if it wasn't originally expanded before search\n if (!this.expandedNodesBeforeSearch.includes(nodeId)) {\n try {\n treeComponent.collapseNode(nodeId);\n }\n catch {\n // Node might not exist anymore, ignore\n }\n }\n }\n // Clear the stored expanded nodes\n this.expandedNodesBeforeSearch = [];\n }\n /**\n * Checks if a node matches the current search term\n */\n isMatchingNode(nodeId) {\n return this.matchingNodeIds.has(nodeId);\n }\n /**\n * Handles node click events to apply category filters\n */\n handleNodeClick(node) {\n const nodeData = this.extractNodeData(node);\n const applyConditions = this.vm().entityDef.category?.applyConditions || [];\n const categoryFilters = this.buildCategoryFilters(nodeData, applyConditions);\n const viewFilters = this.buildViewFilters();\n this.vm().dataSource.filter({\n filters: [...viewFilters, ...categoryFilters],\n logic: 'and',\n });\n this.vm().dataSource.refresh();\n }\n /**\n * Handles node toggle events (expansion/collapse)\n */\n async onNodeToggle(_event) {\n // Tree component handles lazy loading via datasource callback\n }\n //#endregion\n //#region ---- CRUD Operations ----\n /**\n * Creates a new root category node\n */\n async handleCreateRootClick(event) {\n this.preventDefaultAndStopPropagation(event);\n try {\n const context = await this.executeCreateWorkflow(undefined);\n await this.handleCreateResult(context, undefined);\n }\n catch (error) {\n console.error('Error creating root category:', error);\n }\n }\n /**\n * Creates a new child category under the given parent node\n */\n async handleCreateChildClick(node, event) {\n this.preventDefaultAndStopPropagation(event);\n try {\n const parentId = this.extractNodeId(node);\n const context = await this.executeCreateWorkflow(parentId);\n await this.handleCreateResult(context, parentId);\n }\n catch (error) {\n console.error('Error creating child category:', error);\n }\n }\n /**\n * Updates an existing category node\n */\n async handleEditNodeClick(node, event) {\n this.preventDefaultAndStopPropagation(event);\n try {\n const nodeData = this.extractNodeData(node);\n const context = await this.executeModifyWorkflow(nodeData);\n await this.handleModifyResult(context, node);\n }\n catch (error) {\n console.error('Error editing category:', error);\n }\n }\n /**\n * Deletes a category node\n */\n async handleDeleteNodeClick(node, event) {\n this.preventDefaultAndStopPropagation(event);\n try {\n const nodeData = this.extractNodeData(node);\n const context = await this.executeDeleteWorkflow(nodeData);\n await this.handleDeleteResult(context, node);\n }\n catch (error) {\n console.error('Error deleting category:', error);\n }\n }\n //#endregion\n //#region ---- Private Tree Management Methods ----\n /**\n * Initializes the category tree data structure\n */\n async initializeTree() {\n this.setLoadingWithDelay(true);\n try {\n const entityKey = this.categoryEntityKey();\n this.treeConfig = {\n entityKey,\n textField: this.textField(),\n valueField: this.valueField(),\n };\n this.treeData = await this.categoryTreeService.initializeCategoryTree(this.treeConfig);\n if (!this.treeData) {\n this.clearLoadingState();\n return;\n }\n // Set parent key from entity definition\n if (this.treeData.categoryEntityDef?.parentKey) {\n this.treeConfig.parentKey = this.treeData.categoryEntityDef.parentKey;\n }\n }\n catch (error) {\n console.error('Error loading categories:', error);\n }\n finally {\n this.clearLoadingState();\n }\n }\n /**\n * Loads root nodes for the tree\n */\n async loadRootNodes() {\n if (!this.isTreeInitialized()) {\n return [];\n }\n // Load root categories\n const items = await this.categoryTreeService.loadRootCategories(this.treeData, this.treeConfig);\n if (!items) {\n return [];\n }\n const rootNode = await this.categoryTreeService.createRootNode(items, this.treeConfig);\n // Filter root's children when search is active\n if (this.relevantNodeIds.size > 0 && rootNode['children']) {\n rootNode['children'] = rootNode['children'].filter((child) => {\n const childId = String(child['id'] ?? '');\n return this.relevantNodeIds.has(childId);\n });\n rootNode['childrenCount'] = rootNode['children'].length;\n }\n return [rootNode];\n }\n /**\n * Loads child nodes for a given parent ID\n */\n async loadChildNodes(parentId) {\n if (!this.isTreeInitialized()) {\n return [];\n }\n // Create minimal node object - loadChildren only needs node.id\n const targetNode = {\n id: parentId,\n };\n let children = await this.categoryTreeService.loadChildren(targetNode, this.treeData, this.treeConfig);\n // Filter children when search is active\n if (this.relevantNodeIds.size > 0) {\n children = children.filter((child) => {\n const childId = String(child['id'] ?? '');\n return this.relevantNodeIds.has(childId);\n });\n }\n return children;\n }\n /**\n * Refreshes the tree view component\n */\n refreshTree() {\n const treeComponent = this.tree();\n if (treeComponent) {\n treeComponent.refresh();\n }\n }\n /**\n * Refreshes tree after CRUD operations\n */\n async refreshAfterChange(parentId) {\n this.refreshTree();\n }\n /**\n * Adds a new node to the tree after create operation\n */\n async addNodeToTree(entityData, parentId) {\n if (!this.isTreeInitialized()) {\n return;\n }\n const treeComponent = this.tree();\n if (!treeComponent) {\n return;\n }\n const newNode = this.categoryTreeService.convertToTreeNode(entityData, this.treeConfig);\n if (parentId) {\n await this.addChildNode(treeComponent, parentId, newNode);\n }\n else {\n await this.addRootNode(treeComponent, newNode);\n }\n }\n /**\n * Adds a child node to a parent node\n */\n async addChildNode(treeComponent, parentId, newNode) {\n const parentNode = treeComponent.findNode(parentId);\n if (!parentNode) {\n await this.refreshAfterChange(parentId);\n return;\n }\n if (!treeComponent.isNodeExpanded(parentId)) {\n await treeComponent.expandNode(parentId);\n }\n treeComponent.addChild(parentId, newNode);\n }\n /**\n * Adds a root node to the tree\n */\n async addRootNode(treeComponent, newNode) {\n const rootNode = treeComponent.findNode(ROOT_NODE_ID);\n if (!rootNode) {\n await this.refreshAfterChange();\n return;\n }\n if (!treeComponent.isNodeExpanded(ROOT_NODE_ID)) {\n await treeComponent.expandNode(ROOT_NODE_ID);\n }\n treeComponent.addChild(ROOT_NODE_ID, newNode);\n }\n /**\n * Updates an existing node in the tree after edit operation\n */\n async updateNodeInTree(nodeId, entityData) {\n if (!this.isTreeInitialized()) {\n return;\n }\n const treeComponent = this.tree();\n if (!treeComponent) {\n return;\n }\n const existingNode = treeComponent.findNode(nodeId);\n if (!existingNode) {\n await this.refreshNodeParent(entityData);\n return;\n }\n // Check if parent changed\n const parentKey = this.treeData?.categoryEntityDef?.parentKey;\n let newParentId = undefined;\n if (parentKey && entityData[parentKey]) {\n const parentValue = String(entityData[parentKey]);\n // 'all' means root, so treat it as undefined\n newParentId = parentValue !== 'all' && parentValue !== '' ? parentValue : undefined;\n }\n const currentParent = treeComponent.getParent(nodeId);\n const currentParentId = currentParent ? String(currentParent['id'] ?? '') : undefined;\n // Normalize current parent: 'all' means root (undefined)\n const normalizedCurrentParentId = currentParentId === 'all' || currentParentId === '' ? undefined : currentParentId;\n // Handle parent change: move node to new parent if parent changed\n if (newParentId !== normalizedCurrentParentId) {\n // If parent changed, move the node first\n const moved = treeComponent.moveNode(nodeId, newParentId);\n if (!moved) {\n // If move failed, refresh the tree to ensure consistency\n await this.refreshNodeParent(entityData);\n return;\n }\n // After moving, we need to ensure the new parent is expanded\n if (newParentId) {\n if (!treeComponent.isNodeExpanded(newParentId)) {\n await treeComponent.expandNode(newParentId);\n }\n }\n else {\n // Moving to root - ensure root is expanded\n if (!treeComponent.isNodeExpanded(ROOT_NODE_ID)) {\n await treeComponent.expandNode(ROOT_NODE_ID);\n }\n }\n }\n // Update node properties (title, data, etc.)\n const updatedNode = this.categoryTreeService.convertToTreeNode(entityData, this.treeConfig);\n const updates = {\n ['title']: updatedNode['title'],\n ['data']: updatedNode['data'],\n ['childrenCount']: updatedNode['childrenCount'],\n ['icon']: updatedNode['icon'],\n };\n treeComponent.editNode(nodeId, updates);\n }\n /**\n * Removes a node from the tree after delete operation\n */\n async removeNodeFromTree(nodeId) {\n const treeComponent = this.tree();\n if (!treeComponent) {\n return;\n }\n const nodeToDelete = treeComponent.findNode(nodeId);\n if (!nodeToDelete) {\n await this.refreshAfterChange();\n return;\n }\n treeComponent.removeNode(nodeId);\n }\n //#endregion\n //#region ---- Workflow Execution Methods ----\n /**\n * Executes the create entity workflow\n */\n async executeCreateWorkflow(parentId) {\n const entityKey = this.categoryEntityKey();\n const workflowData = {};\n if (parentId && this.treeData?.categoryEntityDef?.parentKey) {\n workflowData[this.treeData.categoryEntityDef.parentKey] = parentId;\n }\n return await this.workflow.execute('create-entity', {\n entity: entityKey,\n data: Object.keys(workflowData).length > 0 ? workflowData : undefined,\n options: { process: { redirect: false, canCreateNewOne: !!parentId } },\n });\n }\n /**\n * Executes the modify entity workflow\n */\n async executeModifyWorkflow(nodeData) {\n return await this.workflow.execute('quick-modify-entity', {\n entity: this.categoryEntityKey(),\n data: nodeData,\n options: { layout: { size: 'md' } },\n });\n }\n /**\n * Executes the delete entity workflow\n */\n async executeDeleteWorkflow(nodeData) {\n return await this.workflow.execute('delete-entity', {\n entity: this.categoryEntityKey(),\n data: nodeData,\n options: { process: { showResult: true } },\n });\n }\n /**\n * Handles the result of a create operation\n */\n async handleCreateResult(context, parentId) {\n const result = context.getOutput('result');\n if (!result || !this.isTreeInitialized()) {\n await this.refreshAfterChange(parentId);\n return;\n }\n const newEntityData = context.getVariable('data');\n if (newEntityData) {\n await this.addNodeToTree(newEntityData, parentId);\n }\n else {\n await this.refreshAfterChange(parentId);\n }\n }\n /**\n * Handles the result of a modify operation\n */\n async handleModifyResult(context, node) {\n const result = context.getOutput('result');\n if (!result || !this.isTreeInitialized()) {\n await this.refreshNodeParent(this.extractNodeData(node));\n return;\n }\n const updatedEntityData = context.getVariable('data');\n if (updatedEntityData) {\n await this.updateNodeInTree(this.extractNodeId(node), updatedEntityData);\n }\n else {\n await this.refreshNodeParent(this.extractNodeData(node));\n }\n }\n /**\n * Handles the result of a delete operation\n */\n async handleDeleteResult(context, node) {\n const result = context.getOutput('result');\n if (result) {\n await this.removeNodeFromTree(this.extractNodeId(node));\n }\n else {\n await this.refreshNodeParent(this.extractNodeData(node));\n }\n }\n //#endregion\n //#region ---- Utility Methods ----\n /**\n * Checks if tree data and config are initialized\n */\n isTreeInitialized() {\n return !!(this.treeData && this.treeConfig);\n }\n /**\n * Extracts node data from a tree node\n */\n extractNodeData(node) {\n return (node['data'] || node);\n }\n /**\n * Extracts node ID from a tree node\n */\n extractNodeId(node) {\n return String(node['id'] ?? '');\n }\n /**\n * Builds category filters from node data and apply conditions\n */\n buildCategoryFilters(nodeData, applyConditions) {\n return applyConditions\n .map((condition) => {\n const value = nodeData[condition.value];\n if (value === 'all' || value == null) {\n return null;\n }\n return {\n field: condition.name,\n value,\n operator: condition.operator,\n };\n })\n .filter((item) => item !== null);\n }\n /**\n * Builds view filters from view conditions\n */\n buildViewFilters() {\n return this.vm()\n .view()\n .conditions.map((condition) => ({ ...condition, field: condition.name }));\n }\n /**\n * Refreshes the parent node of the given entity data\n */\n async refreshNodeParent(entityData) {\n const parentKey = this.treeData?.categoryEntityDef?.parentKey;\n const parentId = parentKey && entityData[parentKey] ? entityData[parentKey] : undefined;\n await this.refreshAfterChange(parentId);\n }\n /**\n * Prevents default behavior and stops event propagation\n */\n preventDefaultAndStopPropagation(event) {\n event.nativeEvent.preventDefault();\n event.nativeEvent.stopPropagation();\n }\n //#endregion\n //#region ---- Loading State Management ----\n /**\n * Sets loading state with delay to avoid flickering for fast responses\n */\n setLoadingWithDelay(loading) {\n if (!loading) {\n return;\n }\n if (this.loadingTimeoutId) {\n clearTimeout(this.loadingTimeoutId);\n }\n this.loadingTimeoutId = setTimeout(() => {\n this.isLoading.set(true);\n this.loadingTimeoutId = null;\n }, LOADING_DELAY_MS);\n }\n /**\n * Clears loading state and cancels any pending timeout\n */\n clearLoadingState() {\n if (this.loadingTimeoutId) {\n clearTimeout(this.loadingTimeoutId);\n this.loadingTimeoutId = null;\n }\n this.isLoading.set(false);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXPEntityCategoryComponent, isStandalone: true, selector: \"axp-entity-category\", inputs: { vm: { classPropertyName: \"vm\", publicName: \"vm\", isSignal: true, isRequired: true, transformFunction: null }, searchValue: { classPropertyName: \"searchValue\", publicName: \"searchValue\", isSignal: true, isRequired: false, transformFunction: null }, selectMode: { classPropertyName: \"selectMode\", publicName: \"selectMode\", isSignal: true, isRequired: false, transformFunction: null }, selectionBehavior: { classPropertyName: \"selectionBehavior\", publicName: \"selectionBehavior\", isSignal: true, isRequired: false, transformFunction: null }, dragArea: { classPropertyName: \"dragArea\", publicName: \"dragArea\", isSignal: true, isRequired: false, transformFunction: null }, dragBehavior: { classPropertyName: \"dragBehavior\", publicName: \"dragBehavior\", isSignal: true, isRequired: false, transformFunction: null }, showIcons: { classPropertyName: \"showIcons\", publicName: \"showIcons\", isSignal: true, isRequired: false, transformFunction: null }, showChildrenBadge: { classPropertyName: \"showChildrenBadge\", publicName: \"showChildrenBadge\", isSignal: true, isRequired: false, transformFunction: null }, expandedIcon: { classPropertyName: \"expandedIcon\", publicName: \"expandedIcon\", isSignal: true, isRequired: false, transformFunction: null }, collapsedIcon: { classPropertyName: \"collapsedIcon\", publicName: \"collapsedIcon\", isSignal: true, isRequired: false, transformFunction: null }, indentSize: { classPropertyName: \"indentSize\", publicName: \"indentSize\", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: \"look\", publicName: \"look\", isSignal: true, isRequired: false, transformFunction: null }, searchWithChildren: { classPropertyName: \"searchWithChildren\", publicName: \"searchWithChildren\", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: \"tree\", first: true, predicate: [\"tree\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<axp-layout-header>\\n <axp-layout-title>{{\\n vm().entityDef.category?.title || '@general:terms.classification.category' | translate | async\\n }}</axp-layout-title>\\n <axp-layout-toolbar>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-1 ax-w-full\\\">\\n <ax-search-box\\n (onValueChanged)=\\\"handleCategorySearchChange($event)\\\"\\n [delayTime]=\\\"300\\\"\\n [placeholder]=\\\"'@general:terms.interface.category.search.placeholder' | translate | async\\\"\\n >\\n </ax-search-box>\\n @if (isSearching() && currentSearchValue().trim()) {\\n <div class=\\\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\\\">\\n <span>{{ '@general:terms.interface.category.search.searching' | translate | async }}</span>\\n </div>\\n } @else if (currentSearchValue().trim() && !isSearching()) {\\n <div class=\\\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\\\">\\n @if (searchResultCount() > 0) {\\n <span>{{ resultsFoundText() }}</span>\\n }\\n </div>\\n }\\n </div>\\n </axp-layout-toolbar>\\n</axp-layout-header>\\n<axp-layout-content>\\n @if (isLoading()) {\\n <div class=\\\"ax-p-4 ax-flex ax-flex-col ax-gap-3\\\">\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n </div>\\n } @else if (showNoSearchResults()) {\\n <div class=\\\"__empty-state\\\">\\n <axp-state-message\\n icon=\\\"fa-light fa-search\\\"\\n [title]=\\\"'@general:terms.interface.category.search.no-results-found.title'\\\"\\n [description]=\\\"'@general:terms.interface.category.search.no-results-found.description'\\\"\\n >\\n </axp-state-message>\\n </div>\\n } @else if (treeData) {\\n <div class=\\\"ax-px-4 ax-max-h-[calc(100vh-250px)] ax-overflow-auto\\\">\\n <ax-tree-view\\n [datasource]=\\\"datasource\\\"\\n [selectMode]=\\\"selectMode()\\\"\\n [selectionBehavior]=\\\"selectionBehavior()\\\"\\n [dragArea]=\\\"dragArea()\\\"\\n [dragBehavior]=\\\"dragBehavior()\\\"\\n [showIcons]=\\\"showIcons()\\\"\\n [showChildrenBadge]=\\\"showChildrenBadge()\\\"\\n [expandedIcon]=\\\"expandedIcon()\\\"\\n [collapsedIcon]=\\\"collapsedIcon()\\\"\\n [indentSize]=\\\"indentSize()\\\"\\n [look]=\\\"look()\\\"\\n [titleField]=\\\"textField()\\\"\\n [idField]=\\\"valueField()\\\"\\n [expandOnDoubleClick]=\\\"true\\\"\\n [nodeTemplate]=\\\"itemTemplate\\\"\\n (onNodeToggle)=\\\"onNodeToggle($event)\\\"\\n (onNodeClick)=\\\"handleNodeClick($event.node)\\\"\\n #tree\\n >\\n </ax-tree-view>\\n </div>\\n } @else {\\n <div class=\\\"__empty-state\\\">\\n <axp-state-message\\n icon=\\\"fa-light fa-folder-open\\\"\\n [title]=\\\"'@general:terms.interface.category.search.no-records.title'\\\"\\n [description]=\\\"'@general:terms.interface.category.search.no-records.description'\\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n (onClick)=\\\"handleCreateRootClick($event)\\\"\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"'@general:actions.add-new.title' | translate | async\\\"\\n >\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button>\\n </axp-state-message>\\n </div>\\n }\\n\\n <ng-template #itemTemplate let-node=\\\"node\\\" let-level=\\\"level\\\">\\n @let item = node.data || node;\\n @let textField = vm().entityDef.category?.textField || 'title';\\n @let valueField = vm().entityDef.category?.valueField || 'id';\\n @let itemId = item[valueField] || node.id;\\n @let itemTitle = item[textField] || node.title;\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-w-full ax-gap-2 ax-overflow-hidden ax-py-1\\\">\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 ax-min-w-0\\\">\\n <ax-icon\\n class=\\\"fas fa-folder\\\"\\n [style.color]=\\\"item.color ?? 'rgba(var(--ax-sys-color-warning-500), 1)'\\\"\\n ></ax-icon>\\n <span class=\\\"ax-truncate\\\">{{ itemTitle }}</span>\\n </div>\\n @if (itemId && itemId !== 'all') {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n <ax-button class=\\\"ax-xs\\\" color=\\\"default\\\" look=\\\"blank\\\" (onClick)=\\\"$event.nativeEvent.stopPropagation()\\\">\\n <ax-icon class=\\\"fas fa-ellipsis-v\\\"></ax-icon>\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n (onClick)=\\\"handleCreateChildClick(node, $event)\\\"\\n look=\\\"blank\\\"\\n color=\\\"default\\\"\\n text=\\\"Add New Child\\\"\\n >\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item (onClick)=\\\"handleEditNodeClick(node, $event)\\\" look=\\\"blank\\\" text=\\\"Edit\\\">\\n <ax-icon class=\\\"fas fa-pen\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item\\n (onClick)=\\\"handleDeleteNodeClick(node, $event)\\\"\\n color=\\\"danger\\\"\\n look=\\\"blank\\\"\\n text=\\\"Delete\\\"\\n >\\n <ax-icon class=\\\"fas fa-trash\\\"></ax-icon>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n } @else if (itemId === 'all') {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n <ax-button class=\\\"ax-xs\\\" (onClick)=\\\"handleCreateRootClick($event)\\\" look=\\\"blank\\\" color=\\\"default\\\">\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n </ng-template>\\n</axp-layout-content>\\n\", styles: [\"\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i1.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"ngmodule\", type: AXTreeViewModule }, { kind: \"component\", type: AXTreeViewComponent, selector: \"ax-tree-view\", inputs: [\"datasource\", \"selectMode\", \"selectionBehavior\", \"dragArea\", \"dragBehavior\", \"showIcons\", \"showChildrenBadge\", \"expandedIcon\", \"collapsedIcon\", \"indentSize\", \"look\", \"nodeTemplate\", \"idField\", \"titleField\", \"tooltipField\", \"iconField\", \"expandedField\", \"selectedField\", \"indeterminateField\", \"disabledField\", \"hiddenField\", \"childrenField\", \"childrenCountField\", \"dataField\", \"inheritDisabled\", \"expandOnDoubleClick\"], outputs: [\"datasourceChange\", \"onBeforeDrop\", \"onNodeToggle\", \"onNodeSelect\", \"onNodeDoubleClick\", \"onNodeClick\", \"onSelectionChange\", \"onOrderChange\", \"onMoveChange\", \"onItemsChange\"] }, { kind: \"ngmodule\", type: AXSkeletonModule }, { kind: \"component\", type: i2.AXSkeletonComponent, selector: \"ax-skeleton\", inputs: [\"animated\"] }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"ngmodule\", type: AXSearchBoxModule }, { kind: \"component\", type: i3.AXSearchBoxComponent, selector: \"ax-search-box\", inputs: [\"disabled\", \"readonly\", \"tabIndex\", \"placeholder\", \"value\", \"state\", \"name\", \"id\", \"look\", \"class\", \"delayTime\", \"type\", \"autoSearch\"], outputs: [\"valueChange\", \"stateChange\", \"onValueChanged\", \"onBlur\", \"onFocus\", \"readonlyChange\", \"disabledChange\", \"onKeyDown\", \"onKeyUp\", \"onKeyPress\"] }, { kind: \"component\", type: AXPThemeLayoutHeaderComponent, selector: \"axp-layout-header\" }, { kind: \"component\", type: AXPThemeLayoutToolbarComponent, selector: \"axp-layout-toolbar\" }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i4.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: i4.AXButtonItemComponent, selector: \"ax-button-item\", inputs: [\"color\", \"disabled\", \"text\", \"selected\", \"divided\", \"data\", \"name\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\", \"disabledChange\"] }, { kind: \"component\", type: i4.AXButtonItemListComponent, selector: \"ax-button-item-list\", inputs: [\"items\", \"closeParentOnClick\", \"lockOnLoading\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"component\", type: i5.AXDropdownPanelComponent, selector: \"ax-dropdown-panel\", inputs: [\"isOpen\", \"fitParent\", \"dropdownWidth\", \"position\", \"placement\", \"_target\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"pipe\", type: i6.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i7.AXTranslatorPipe, name: \"translate\" }], encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityCategoryComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-entity-category', standalone: true, encapsulation: ViewEncapsulation.None, imports: [\n CommonModule,\n AXDecoratorModule,\n AXTreeViewModule,\n AXTreeViewComponent,\n AXSkeletonModule,\n AXPThemeLayoutBlockComponent,\n AXSearchBoxModule,\n AXPThemeLayoutHeaderComponent,\n AXPThemeLayoutToolbarComponent,\n AXTranslationModule,\n AXButtonModule,\n AXDropdownModule,\n AXPStateMessageComponent,\n ], template: \"<axp-layout-header>\\n <axp-layout-title>{{\\n vm().entityDef.category?.title || '@general:terms.classification.category' | translate | async\\n }}</axp-layout-title>\\n <axp-layout-toolbar>\\n <div class=\\\"ax-flex ax-flex-col ax-gap-1 ax-w-full\\\">\\n <ax-search-box\\n (onValueChanged)=\\\"handleCategorySearchChange($event)\\\"\\n [delayTime]=\\\"300\\\"\\n [placeholder]=\\\"'@general:terms.interface.category.search.placeholder' | translate | async\\\"\\n >\\n </ax-search-box>\\n @if (isSearching() && currentSearchValue().trim()) {\\n <div class=\\\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\\\">\\n <span>{{ '@general:terms.interface.category.search.searching' | translate | async }}</span>\\n </div>\\n } @else if (currentSearchValue().trim() && !isSearching()) {\\n <div class=\\\"ax-text-xs ax-text-muted ax-flex ax-items-center ax-gap-1\\\">\\n @if (searchResultCount() > 0) {\\n <span>{{ resultsFoundText() }}</span>\\n }\\n </div>\\n }\\n </div>\\n </axp-layout-toolbar>\\n</axp-layout-header>\\n<axp-layout-content>\\n @if (isLoading()) {\\n <div class=\\\"ax-p-4 ax-flex ax-flex-col ax-gap-3\\\">\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n <ax-skeleton class=\\\"ax-w-full ax-h-6 ax-rounded-md\\\"></ax-skeleton>\\n </div>\\n } @else if (showNoSearchResults()) {\\n <div class=\\\"__empty-state\\\">\\n <axp-state-message\\n icon=\\\"fa-light fa-search\\\"\\n [title]=\\\"'@general:terms.interface.category.search.no-results-found.title'\\\"\\n [description]=\\\"'@general:terms.interface.category.search.no-results-found.description'\\\"\\n >\\n </axp-state-message>\\n </div>\\n } @else if (treeData) {\\n <div class=\\\"ax-px-4 ax-max-h-[calc(100vh-250px)] ax-overflow-auto\\\">\\n <ax-tree-view\\n [datasource]=\\\"datasource\\\"\\n [selectMode]=\\\"selectMode()\\\"\\n [selectionBehavior]=\\\"selectionBehavior()\\\"\\n [dragArea]=\\\"dragArea()\\\"\\n [dragBehavior]=\\\"dragBehavior()\\\"\\n [showIcons]=\\\"showIcons()\\\"\\n [showChildrenBadge]=\\\"showChildrenBadge()\\\"\\n [expandedIcon]=\\\"expandedIcon()\\\"\\n [collapsedIcon]=\\\"collapsedIcon()\\\"\\n [indentSize]=\\\"indentSize()\\\"\\n [look]=\\\"look()\\\"\\n [titleField]=\\\"textField()\\\"\\n [idField]=\\\"valueField()\\\"\\n [expandOnDoubleClick]=\\\"true\\\"\\n [nodeTemplate]=\\\"itemTemplate\\\"\\n (onNodeToggle)=\\\"onNodeToggle($event)\\\"\\n (onNodeClick)=\\\"handleNodeClick($event.node)\\\"\\n #tree\\n >\\n </ax-tree-view>\\n </div>\\n } @else {\\n <div class=\\\"__empty-state\\\">\\n <axp-state-message\\n icon=\\\"fa-light fa-folder-open\\\"\\n [title]=\\\"'@general:terms.interface.category.search.no-records.title'\\\"\\n [description]=\\\"'@general:terms.interface.category.search.no-records.description'\\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n (onClick)=\\\"handleCreateRootClick($event)\\\"\\n look=\\\"solid\\\"\\n color=\\\"primary\\\"\\n [text]=\\\"'@general:actions.add-new.title' | translate | async\\\"\\n >\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button>\\n </axp-state-message>\\n </div>\\n }\\n\\n <ng-template #itemTemplate let-node=\\\"node\\\" let-level=\\\"level\\\">\\n @let item = node.data || node;\\n @let textField = vm().entityDef.category?.textField || 'title';\\n @let valueField = vm().entityDef.category?.valueField || 'id';\\n @let itemId = item[valueField] || node.id;\\n @let itemTitle = item[textField] || node.title;\\n <div class=\\\"ax-flex ax-items-center ax-justify-between ax-w-full ax-gap-2 ax-overflow-hidden ax-py-1\\\">\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 ax-min-w-0\\\">\\n <ax-icon\\n class=\\\"fas fa-folder\\\"\\n [style.color]=\\\"item.color ?? 'rgba(var(--ax-sys-color-warning-500), 1)'\\\"\\n ></ax-icon>\\n <span class=\\\"ax-truncate\\\">{{ itemTitle }}</span>\\n </div>\\n @if (itemId && itemId !== 'all') {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n <ax-button class=\\\"ax-xs\\\" color=\\\"default\\\" look=\\\"blank\\\" (onClick)=\\\"$event.nativeEvent.stopPropagation()\\\">\\n <ax-icon class=\\\"fas fa-ellipsis-v\\\"></ax-icon>\\n <ax-dropdown-panel>\\n <ax-button-item-list>\\n <ax-button-item\\n (onClick)=\\\"handleCreateChildClick(node, $event)\\\"\\n look=\\\"blank\\\"\\n color=\\\"default\\\"\\n text=\\\"Add New Child\\\"\\n >\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item (onClick)=\\\"handleEditNodeClick(node, $event)\\\" look=\\\"blank\\\" text=\\\"Edit\\\">\\n <ax-icon class=\\\"fas fa-pen\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item\\n (onClick)=\\\"handleDeleteNodeClick(node, $event)\\\"\\n color=\\\"danger\\\"\\n look=\\\"blank\\\"\\n text=\\\"Delete\\\"\\n >\\n <ax-icon class=\\\"fas fa-trash\\\"></ax-icon>\\n </ax-button-item>\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n } @else if (itemId === 'all') {\\n <div class=\\\"ax-flex ax-items-center ax-gap-1\\\">\\n <ax-button class=\\\"ax-xs\\\" (onClick)=\\\"handleCreateRootClick($event)\\\" look=\\\"blank\\\" color=\\\"default\\\">\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button>\\n </div>\\n }\\n </div>\\n </ng-template>\\n</axp-layout-content>\\n\" }]\n }], ctorParameters: () => [], propDecorators: { vm: [{ type: i0.Input, args: [{ isSignal: true, alias: \"vm\", required: true }] }], tree: [{ type: i0.ViewChild, args: ['tree', { isSignal: true }] }], searchValue: [{ type: i0.Input, args: [{ isSignal: true, alias: \"searchValue\", required: false }] }], selectMode: [{ type: i0.Input, args: [{ isSignal: true, alias: \"selectMode\", required: false }] }], selectionBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: \"selectionBehavior\", required: false }] }], dragArea: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragArea\", required: false }] }], dragBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragBehavior\", required: false }] }], showIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showIcons\", required: false }] }], showChildrenBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showChildrenBadge\", required: false }] }], expandedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"expandedIcon\", required: false }] }], collapsedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"collapsedIcon\", required: false }] }], indentSize: [{ type: i0.Input, args: [{ isSignal: true, alias: \"indentSize\", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: \"look\", required: false }] }], searchWithChildren: [{ type: i0.Input, args: [{ isSignal: true, alias: \"searchWithChildren\", required: false }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNhdGVnb3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGhlbWVzL2RlZmF1bHQvc3JjL2xpYi9sYXlvdXRzL2VudGl0eS1sYXlvdXRzL2VudGl0eS1jYXRlZ29yeS9lbnRpdHktY2F0ZWdvcnkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvZW50aXR5LWxheW91dHMvZW50aXR5LWNhdGVnb3J5L2VudGl0eS1jYXRlZ29yeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFDTCxtQkFBbUIsRUFHbkIsZ0JBQWdCLEdBTWpCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFrQixlQUFlLEVBQUUs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aUIsMlpBQ2pCLDZCQUE2Qiw4REFDN0IsOEJBQThCLDhEQUM5QixtQkFBbUIsOEJBQ25CLGNBQWMsMndCQUNkLGdCQUFnQixzUUFDaEIsd0JBQXdCOzs0RkFLZiwwQkFBMEI7a0JBdEJ0QyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLGlCQUNELGlCQUFpQixDQUFDLElBQUksV0FDNUI7d0JBQ1AsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLDRCQUE0Qjt3QkFDNUIsaUJBQWlCO3dCQUNqQiw2QkFBNkI7d0JBQzdCLDhCQUE4Qjt3QkFDOUIsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsd0JBQXdCO3FCQUN6QjsrS0FrQnFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBhZnRlck5leHRSZW5kZXIsXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYQ2xpY2tFdmVudCwgQVhEYXRhU291cmNlRmlsdGVyT3B0aW9uLCBBWFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEFYU2VhcmNoQm94TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NlYXJjaC1ib3gnO1xuaW1wb3J0IHsgQVhTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9za2VsZXRvbic7XG5pbXBvcnQge1xuICBBWFRyZWVWaWV3Q29tcG9uZW50LFxuICBBWFRyZWVWaWV3RHJhZ0FyZWEsXG4gIEFYVHJlZVZpZXdEcmFnQmVoYXZpb3IsXG4gIEFYVHJlZVZpZXdNb2R1bGUsXG4gIEFYVHJlZVZpZXdOb2RlLFxuICBBWFRyZWVWaWV3Tm9kZVRvZ2dsZUV2ZW50LFxuICBBWFRyZWVWaWV3U2VsZWN0aW9uQmVoYXZpb3IsXG4gIEFYVHJlZVZpZXdTZWxlY3RNb2RlLFxuICBBWFRyZWVWaWV3Vmlld0xvb2ssXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90cmVlLXZpZXcnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSwgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQUXVlcnlGaWx0ZXIsIEFYUFJlZnJlc2hFdmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYSGlnaGxpZ2h0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQge1xuICBBWFBTdGF0ZU1lc3NhZ2VDb21wb25lbnQsXG4gIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gIEFYUFRoZW1lTGF5b3V0SGVhZGVyQ29tcG9uZW50LFxuICBBWFBUaGVtZUxheW91dFRvb2xiYXJDb21wb25lbnQsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQVhQQ2F0ZWdvcnlUcmVlU2VydmljZSxcbiAgQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdNb2RlbCxcbiAgQVhQRW50aXR5UmVzb2x2ZXIsXG4gIENhdGVnb3J5VHJlZUNvbmZpZyxcbiAgQ2F0ZWdvcnlUcmVlTm9kZURhdGEsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2VudGl0eSc7XG5pbXBvcnQgeyBBWFBXb3JrZmxvd0NvbnRleHQsIEFYUFdvcmtmbG93U2VydmljZSwgb2ZUeXBlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS93b3JrZmxvdyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgQ29uc3RhbnRzICAgLS0tLVxuXG5jb25zdCBST09UX05PREVfSUQgPSAnYWxsJztcbmNvbnN0IExPQURJTkdfREVMQVlfTVMgPSAzMDA7XG5jb25zdCBERUZBVUxUX1RFWFRfRklFTEQgPSAndGl0bGUnO1xuY29uc3QgREVGQVVMVF9WQUxVRV9GSUVMRCA9ICdpZCc7XG5cbi8vI2VuZHJlZ2lvblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheHAtZW50aXR5LWNhdGVnb3J5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBBWERlY29yYXRvck1vZHVsZSxcbiAgICBBWFRyZWVWaWV3TW9kdWxlLFxuICAgIEFYVHJlZVZpZXdDb21wb25lbnQsXG4gICAgQVhTa2VsZXRvbk1vZHVsZSxcbiAgICBBWFBUaGVtZUxheW91dEJsb2NrQ29tcG9uZW50LFxuICAgIEFYU2VhcmNoQm94TW9kdWxlLFxuICAgIEFYUFRoZW1lTGF5b3V0SGVhZGVyQ29tcG9uZW50LFxuICAgIEFYUFRoZW1lTGF5b3V0VG9vbGJhckNvbXBvbmVudCxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYRHJvcGRvd25Nb2R1bGUsXG4gICAgQVhQU3RhdGVNZXNzYWdlQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vZW50aXR5LWNhdGVnb3J5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2VudGl0eS1jYXRlZ29yeS5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIEFYUEVudGl0eUNhdGVnb3J5Q29tcG9uZW50IHtcbiAgLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlcyAmIERlcGVuZGVuY2llcyAgIC0tLS1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW50aXR5UmVzb2x2ZXIgPSBpbmplY3QoQVhQRW50aXR5UmVzb2x2ZXIpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdvcmtmbG93ID0gaW5qZWN0KEFYUFdvcmtmbG93U2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjYXRlZ29yeVRyZWVTZXJ2aWNlID0gaW5qZWN0KEFYUENhdGVnb3J5VHJlZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaGlnaGxpZ2h0U2VydmljZSA9IGluamVjdChBWEhpZ2hsaWdodFNlcnZpY2UpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29tcG9uZW50IElucHV0cyAmIFZpZXcgUXVlcmllcyAgIC0tLS1cblxuICB2bSA9IGlucHV0LnJlcXVpcmVkPEFYUEVudGl0eU1hc3Rlckxpc3RWaWV3TW9kZWw+KCk7XG4gIHRyZWUgPSB2aWV3Q2hpbGQ8QVhUcmVlVmlld0NvbXBvbmVudD4oJ3RyZWUnKTtcbiAgc2VhcmNoVmFsdWUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcblxuICAvLyBUcmVlIHZpZXcgaW5wdXRzIHdpdGggZGVmYXVsdHNcbiAgc2VsZWN0TW9kZSA9IGlucHV0PEFYVHJlZVZpZXdTZWxlY3RNb2RlPignc2luZ2xlJyk7XG4gIHNlbGVjdGlvbkJlaGF2aW9yID0gaW5wdXQ8QVhUcmVlVmlld1NlbGVjdGlvbkJlaGF2aW9yPignaW50ZXJtZWRpYXRlJyk7XG4gIGRyYWdBcmVhID0gaW5wdXQ8QVhUcmVlVmlld0RyYWdBcmVhPignaGFuZGxlcicpO1xuICBkcmFnQmVoYXZpb3IgPSBpbnB1dDxBWFRyZWVWaWV3RHJhZ0JlaGF2aW9yPignbm9uZScpO1xuICBzaG93SWNvbnMgPSBpbnB1dCh0cnVlKTtcbiAgc2hvd0NoaWxkcmVuQmFkZ2UgPSBpbnB1dChmYWxzZSk7XG4gIGV4cGFuZGVkSWNvbiA9IGlucHV0KCdmYS1zb2xpZCBmYS1jaGV2cm9uLWRvd24nKTtcbiAgY29sbGFwc2VkSWNvbiA9IGlucHV0KCdmYS1zb2xpZCBmYS1jaGV2cm9uLXJpZ2h0Jyk7XG4gIGluZGVudFNpemUgPSBpbnB1dCgxNik7XG4gIGxvb2sgPSBpbnB1dDxBWFRyZWVWaWV3Vmlld0xvb2s+KCdkZWZhdWx0Jyk7XG4gIHNlYXJjaFdpdGhDaGlsZHJlbiA9IGlucHV0PGJvb2xlYW4+KHRydWUpOyAvLyBJbmNsdWRlIGNoaWxkcmVuIG9mIHNlYXJjaCByZXN1bHRzXG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21wb25lbnQgU3RhdGUgICAtLS0tXG5cbiAgaXNMb2FkaW5nID0gc2lnbmFsKHRydWUpO1xuICBwcm90ZWN0ZWQgaXNTZWFyY2hpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgc2VhcmNoUmVzdWx0Q291bnQgPSBzaWduYWwoMCk7XG4gIHByb3RlY3RlZCBjdXJyZW50U2VhcmNoVmFsdWUgPSBzaWduYWwoJycpO1xuICBwcm90ZWN0ZWQgcmVzdWx0c0ZvdW5kVGV4dCA9IHNpZ25hbCgnJyk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQcml2YXRlIFByb3BlcnRpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSBsb2FkaW5nVGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcm90ZWN0ZWQgdHJlZURhdGE6IENhdGVnb3J5VHJlZU5vZGVEYXRhIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdHJlZUNvbmZpZzogQ2F0ZWdvcnlUcmVlQ29uZmlnIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbWF0Y2hpbmdOb2RlSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVsZXZhbnROb2RlSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7IC8vIEZvciBzZWFyY2ggZmlsdGVyaW5nXG4gIHByaXZhdGUgbm9kZURhdGFDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTsgLy8gQ2FjaGUgcGFyZW50IGRhdGEgZnJvbSBzZWFyY2ggcmVzdWx0c1xuICBwcml2YXRlIGV4cGFuZGVkTm9kZXNCZWZvcmVTZWFyY2g6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbm9kZXNFeHBhbmRlZER1cmluZ1NlYXJjaDogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBjdXJyZW50U2VhcmNoVGVybTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21wdXRlZCBQcm9wZXJ0aWVzICAgLS0tLVxuXG4gIHByb3RlY3RlZCByZWFkb25seSB0ZXh0RmllbGQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZtKCkuZW50aXR5RGVmLmNhdGVnb3J5Py50ZXh0RmllbGQgfHwgREVGQVVMVF9URVhUX0ZJRUxEKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHZhbHVlRmllbGQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnZtKCkuZW50aXR5RGVmLmNhdGVnb3J5Py52YWx1ZUZpZWxkIHx8IERFRkFVTFRfVkFMVUVfRklFTEQpO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlZCBwcm9wZXJ0eSB0byBjaGVjayBpZiB3ZSBzaG91bGQgc2hvdyB0aGUgXCJubyBzZWFyY2ggcmVzdWx0c1wiIGVtcHR5IHN0YXRlLlxuICAgKiBSZXR1cm5zIHRydWUgd2hlbiBzZWFyY2ggaXMgYWN0aXZlLCBub3Qgc2VhcmNoaW5nLCBhbmQgbm8gcmVzdWx0cyBmb3VuZC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBzaG93Tm9TZWFyY2hSZXN1bHRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdGhpcy5jdXJyZW50U2VhcmNoVmFsdWUoKS50cmltKCk7XG4gICAgY29uc3QgaXNTZWFyY2hpbmcgPSB0aGlzLmlzU2VhcmNoaW5nKCk7XG4gICAgY29uc3QgcmVzdWx0Q291bnQgPSB0aGlzLnNlYXJjaFJlc3VsdENvdW50KCk7XG4gICAgcmV0dXJuIHNlYXJjaFZhbHVlLmxlbmd0aCA+IDAgJiYgIWlzU2VhcmNoaW5nICYmIHJlc3VsdENvdW50ID09PSAwO1xuICB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNhdGVnb3J5RW50aXR5S2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMudm0oKS5lbnRpdHlEZWYuY2F0ZWdvcnk/LmVudGl0eTtcbiAgICBpZiAoIWtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYXRlZ29yeSBlbnRpdHkgaXMgbm90IGNvbmZpZ3VyZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb25zdHJ1Y3RvciAmIExpZmVjeWNsZSAgIC0tLS1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgdGhpcy5pbml0aWFsaXplVHJlZSgpO1xuICAgIH0pO1xuICAgIHRoaXMud29ya2Zsb3cuZXZlbnRzJFxuICAgICAgLnBpcGUob2ZUeXBlKEFYUFJlZnJlc2hFdmVudCkpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMudHJlZSgpPy5yZWxvYWREYXRhKCk7XG4gICAgICAgIC8vIHRoaXMudHJlZSgpPy5yZWZyZXNoKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHVibGljIE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgY2F0ZWdvcnkgc2VhcmNoIGlucHV0IGNoYW5nZXMgLSBVc2VzIHNlcnZlci1zaWRlIHNlYXJjaCBmb3IgZWZmaWNpZW5jeSBhbmQgcmVsaWFiaWxpdHlcbiAgICovXG4gIGFzeW5jIGhhbmRsZUNhdGVnb3J5U2VhcmNoQ2hhbmdlKGV2ZW50OiBBWFZhbHVlQ2hhbmdlZEV2ZW50PHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNUcmVlSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSAoZXZlbnQudmFsdWUgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHByZXZpb3VzU2VhcmNoVGVybSA9IHRoaXMuY3VycmVudFNlYXJjaFZhbHVlKCk7XG5cbiAgICAvLyBJZiBzZWFyY2ggaXMgY2xlYXJlZCwgcmVzZXQgdHJlZVxuICAgIGlmICghc2VhcmNoVGVybSkge1xuICAgICAgaWYgKHByZXZpb3VzU2VhcmNoVGVybSB8fCB0aGlzLm1hdGNoaW5nTm9kZUlkcy5zaXplID4gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hWYWx1ZS5zZXQoJycpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID0gbnVsbDtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXNldFNlYXJjaCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEZvciBub24tZW1wdHkgc2VhcmNoLCBvbmx5IHByb2Nlc3MgdXNlciBpbnRlcmFjdGlvbnNcbiAgICBpZiAoIWV2ZW50LmlzVXNlckludGVyYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUHJldmVudCBjb25jdXJyZW50IHNlYXJjaGVzXG4gICAgaWYgKHRoaXMuaXNTZWFyY2hpbmcoKSAmJiB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50U2VhcmNoVGVybSA9PT0gc2VhcmNoVGVybSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50U2VhcmNoVmFsdWUuc2V0KGV2ZW50LnZhbHVlID8/ICcnKTtcbiAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID0gc2VhcmNoVGVybTtcblxuICAgIGNvbnN0IHRyZWVDb21wb25lbnQgPSB0aGlzLnRyZWUoKTtcbiAgICBpZiAoIXRyZWVDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTdG9yZSBleHBhbmRlZCBub2RlcyBiZWZvcmUgc3RhcnRpbmcgYSBuZXcgc2VhcmNoIChvbmx5IG9uIGZpcnN0IHNlYXJjaClcbiAgICBpZiAoIXByZXZpb3VzU2VhcmNoVGVybSAmJiB0aGlzLmV4cGFuZGVkTm9kZXNCZWZvcmVTZWFyY2gubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBleHBhbmRlZE5vZGVzID0gdHJlZUNvbXBvbmVudC5nZXRFeHBhbmRlZE5vZGVzKCk7XG4gICAgICB0aGlzLmV4cGFuZGVkTm9kZXNCZWZvcmVTZWFyY2ggPSBleHBhbmRlZE5vZGVzXG4gICAgICAgIC5tYXAoKG5vZGUpID0+IFN0cmluZyhub2RlWydpZCddID8/ICcnKSlcbiAgICAgICAgLmZpbHRlcigoaWQpID0+IGlkICYmIGlkICE9PSBST09UX05PREVfSUQpO1xuICAgIH1cblxuICAgIC8vIENvbGxhcHNlIG5vZGVzIGZyb20gcHJldmlvdXMgc2VhcmNoIGJlZm9yZSBzdGFydGluZyBuZXcgc2VhcmNoXG4gICAgaWYgKHByZXZpb3VzU2VhcmNoVGVybSAmJiB0aGlzLm5vZGVzRXhwYW5kZWREdXJpbmdTZWFyY2gubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgbm9kZXNUb0NvbGxhcHNlID0gWy4uLnRoaXMubm9kZXNFeHBhbmRlZER1cmluZ1NlYXJjaF0ucmV2ZXJzZSgpO1xuICAgICAgdGhpcy5ub2Rlc0V4cGFuZGVkRHVyaW5nU2VhcmNoID0gW107XG4gICAgICBmb3IgKGNvbnN0IG5vZGVJZCBvZiBub2Rlc1RvQ29sbGFwc2UpIHtcbiAgICAgICAgLy8gT25seSBjb2xsYXBzZSBpZiBpdCB3YXNuJ3Qgb3JpZ2luYWxseSBleHBhbmRlZCBiZWZvcmUgc2VhcmNoXG4gICAgICAgIGlmICghdGhpcy5leHBhbmRlZE5vZGVzQmVmb3JlU2VhcmNoLmluY2x1ZGVzKG5vZGVJZCkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdHJlZUNvbXBvbmVudC5jb2xsYXBzZU5vZGUobm9kZUlkKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIE5vZGUgbWlnaHQgbm90IGV4aXN0IGFueW1vcmUsIGlnbm9yZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNTZWFyY2hpbmcuc2V0KHRydWUpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFN0ZXAgMTogVXNlIHNlcnZlci1zaWRlIHNlYXJjaCB0byBnZXQgbWF0Y2hpbmcgaXRlbXNcbiAgICAgIGNvbnN0IHNlYXJjaFJlc3VsdHMgPSBhd2FpdCB0aGlzLmNhdGVnb3J5VHJlZVNlcnZpY2Uuc2VhcmNoQ2F0ZWdvcmllcyhcbiAgICAgICAgc2VhcmNoVGVybSxcbiAgICAgICAgdGhpcy50cmVlRGF0YSEsXG4gICAgICAgIHRoaXMudHJlZUNvbmZpZyEsXG4gICAgICApO1xuXG4gICAgICAvLyBDaGVjayBpZiBzZWFyY2ggdGVybSBjaGFuZ2VkIGR1cmluZyB0aGUgQVBJIGNhbGxcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTZWFyY2hUZXJtICE9PSBzZWFyY2hUZXJtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzZWFyY2hSZXN1bHRzIHx8IHNlYXJjaFJlc3VsdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubWF0Y2hpbmdOb2RlSWRzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMucmVsZXZhbnROb2RlSWRzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0Q291bnQuc2V0KDApO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVRyYW5zbGF0ZWRNZXNzYWdlcygwKTtcbiAgICAgICAgLy8gQ2xlYXIgaGlnaGxpZ2h0aW5nIGFuZCByZWxvYWQgdHJlZSB0byBzaG93IGFsbCBub2Rlc1xuICAgICAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuY2xlYXIoKTtcbiAgICAgICAgYXdhaXQgdHJlZUNvbXBvbmVudC5yZWxvYWREYXRhKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU3RvcmUgbWF0Y2hpbmcgbm9kZSBJRHMgZnJvbSBzZWFyY2ggcmVzdWx0c1xuICAgICAgdGhpcy5tYXRjaGluZ05vZGVJZHMuY2xlYXIoKTtcbiAgICAgIGNvbnN0IHZhbHVlRmllbGQgPSB0aGlzLnZhbHVlRmllbGQoKTtcbiAgICAgIHNlYXJjaFJlc3VsdHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBub2RlSWQgPSBTdHJpbmcoaXRlbVt2YWx1ZUZpZWxkXSA/PyAnJyk7XG4gICAgICAgIGlmIChub2RlSWQpIHtcbiAgICAgICAgICB0aGlzLm1hdGNoaW5nTm9kZUlkcy5hZGQobm9kZUlkKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdENvdW50ID0gc2VhcmNoUmVzdWx0cy5sZW5ndGg7XG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdENvdW50LnNldChyZXN1bHRDb3VudCk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0cmFuc2xhdGVkIG1lc3NhZ2VzXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZVRyYW5zbGF0ZWRNZXNzYWdlcyhyZXN1bHRDb3VudCk7XG5cbiAgICAgIC8vIFN0ZXAgMjogQ29sbGVjdCBwYXJlbnQgSURzIChidWlsZHMgcmVsZXZhbnROb2RlSWRzIGZvciBmaWx0ZXJpbmcpXG4gICAgICBjb25zdCBwYXJlbnRzVG9FeHBhbmQgPSBhd2FpdCB0aGlzLmNvbGxlY3RQYXJlbnRJZHMoc2VhcmNoUmVzdWx0cyk7XG5cbiAgICAgIC8vIFN0ZXAgMi41OiBDb2xsZWN0IGNoaWxkcmVuIElEcyBpZiBzZWFyY2hXaXRoQ2hpbGRyZW4gaXMgZW5hYmxlZFxuICAgICAgaWYgKHRoaXMuc2VhcmNoV2l0aENoaWxkcmVuKCkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0Q2hpbGRyZW5JZHMoc2VhcmNoUmVzdWx0cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0ZXAgMzogUmVsb2FkIHRyZWUgdG8gYXBwbHkgZmlsdGVyaW5nXG4gICAgICBhd2FpdCB0cmVlQ29tcG9uZW50LnJlbG9hZERhdGEoKTtcblxuICAgICAgLy8gU3RlcCA0OiBFeHBhbmQgcm9vdCBub2RlXG4gICAgICBpZiAoIXRyZWVDb21wb25lbnQuaXNOb2RlRXhwYW5kZWQoUk9PVF9OT0RFX0lEKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRyZWVDb21wb25lbnQuZXhwYW5kTm9kZShST09UX05PREVfSUQpO1xuICAgICAgICAgIHRoaXMubm9kZXNFeHBhbmRlZER1cmluZ1NlYXJjaC5wdXNoKFJPT1RfTk9ERV9JRCk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIFJvb3QgbWlnaHQgbm90IGV4aXN0XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCA0OiBFeHBhbmQgYWxsIHBhcmVudCBub2RlcyBpbiBvcmRlciAoZnJvbSByb290IHRvIGxlYXZlcylcbiAgICAgIC8vIFNvcnQgcGFyZW50cyBieSB0aGVpciBkZXB0aCB0byBleHBhbmQgaW4gY29ycmVjdCBvcmRlclxuICAgICAgY29uc3Qgc29ydGVkUGFyZW50cyA9IGF3YWl0IHRoaXMuc29ydFBhcmVudHNCeURlcHRoKEFycmF5LmZyb20ocGFyZW50c1RvRXhwYW5kKSk7XG4gICAgICBmb3IgKGNvbnN0IHBhcmVudElkIG9mIHNvcnRlZFBhcmVudHMpIHtcbiAgICAgICAgLy8gT25seSBleHBhbmQgaWYgbm90IGFscmVhZHkgZXhwYW5kZWRcbiAgICAgICAgaWYgKCF0cmVlQ29tcG9uZW50LmlzTm9kZUV4cGFuZGVkKHBhcmVudElkKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0cmVlQ29tcG9uZW50LmV4cGFuZE5vZGUocGFyZW50SWQpO1xuICAgICAgICAgICAgdGhpcy5ub2Rlc0V4cGFuZGVkRHVyaW5nU2VhcmNoLnB1c2gocGFyZW50SWQpO1xuICAgICAgICAgICAgLy8gU21hbGwgZGVsYXkgdG8gcHJldmVudCBvdmVyd2hlbG1pbmcgdGhlIHRyZWUgY29tcG9uZW50XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMCkpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTm9kZSBtaWdodCBub3QgZXhpc3QsIGlnbm9yZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdGVwIDU6IEFwcGx5IGhpZ2hsaWdodGluZyBhZnRlciB0cmVlIGlzIHJlbmRlcmVkXG4gICAgICAvLyBVc2Ugc2V0VGltZW91dCB0byBlbnN1cmUgRE9NIGlzIHVwZGF0ZWQgYWZ0ZXIgdHJlZSByZWxvYWRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50U2VhcmNoVmFsdWUoKS50cmltKCkpIHtcbiAgICAgICAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuaGlnaGxpZ2h0KCdheC10cmVlLXZpZXcgLmF4LXRydW5jYXRlJywgdGhpcy5jdXJyZW50U2VhcmNoVmFsdWUoKS50cmltKCkpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZWFyY2hpbmcgY2F0ZWdvcmllczonLCBlcnJvcik7XG4gICAgICB0aGlzLm1hdGNoaW5nTm9kZUlkcy5jbGVhcigpO1xuICAgICAgdGhpcy5yZWxldmFudE5vZGVJZHMuY2xlYXIoKTtcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0Q291bnQuc2V0KDApO1xuICAgICAgdGhpcy5oaWdobGlnaHRTZXJ2aWNlLmNsZWFyKCk7XG4gICAgICAvLyBSZWxvYWQgdHJlZSB0byBjbGVhciBhbnkgZmlsdGVyc1xuICAgICAgY29uc3QgdHJlZUNvbXBvbmVudCA9IHRoaXMudHJlZSgpO1xuICAgICAgaWYgKHRyZWVDb21wb25lbnQpIHtcbiAgICAgICAgYXdhaXQgdHJlZUNvbXBvbmVudC5yZWxvYWREYXRhKCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID09PSBzZWFyY2hUZXJtKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5pc1NlYXJjaGluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyBhbGwgcGFyZW50IElEcyBmb3IgdGhlIGdpdmVuIHNlYXJjaCByZXN1bHRzXG4gICAqIEhhbmRsZXMgYm90aCBuZXN0ZWQgJ3BhcmVudCcgb2JqZWN0IGFuZCAncGFyZW50SWQnIGZpZWxkIGluIHNlYXJjaCByZXN1bHRzXG4gICAqIFJlY3Vyc2l2ZWx5IGZldGNoZXMgcGFyZW50IG5vZGVzIHRvIGJ1aWxkIHRoZSBmdWxsIHBhcmVudCBjaGFpblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb2xsZWN0UGFyZW50SWRzKGl0ZW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdKTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4ge1xuICAgIGNvbnN0IHBhcmVudHNUb0V4cGFuZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHZhbHVlRmllbGQgPSB0aGlzLnZhbHVlRmllbGQoKTtcbiAgICBjb25zdCBwYXJlbnRLZXkgPSB0aGlzLnRyZWVEYXRhPy5jYXRlZ29yeUVudGl0eURlZj8ucGFyZW50S2V5IHx8ICdwYXJlbnRJZCc7XG5cbiAgICAvLyBCdWlsZCByZWxldmFudE5vZGVJZHMgPSBtYXRjaGluZyBub2RlcyArIGFsbCBwYXJlbnRzXG4gICAgdGhpcy5yZWxldmFudE5vZGVJZHMuY2xlYXIoKTtcbiAgICB0aGlzLm1hdGNoaW5nTm9kZUlkcy5mb3JFYWNoKChpZCkgPT4gdGhpcy5yZWxldmFudE5vZGVJZHMuYWRkKGlkKSk7XG5cbiAgICAvLyBSZWN1cnNpdmVseSBleHRyYWN0IGFsbCBwYXJlbnQgSURzXG4gICAgY29uc3QgZXh0cmFjdFBhcmVudElkcyA9IGFzeW5jIChpdGVtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgLy8gRmlyc3QsIHRyeSB0byBnZXQgcGFyZW50IGZyb20gbmVzdGVkICdwYXJlbnQnIG9iamVjdCAoaWYgYXZhaWxhYmxlKVxuICAgICAgY29uc3QgcGFyZW50ID0gaXRlbVsncGFyZW50J10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gU3RyaW5nKHBhcmVudFt2YWx1ZUZpZWxkXSA/PyBwYXJlbnRbJ2lkJ10gPz8gJycpO1xuICAgICAgICBpZiAocGFyZW50SWQgJiYgcGFyZW50SWQgIT09IFJPT1RfTk9ERV9JRCkge1xuICAgICAgICAgIHBhcmVudHNUb0V4cGFuZC5hZGQocGFyZW50SWQpO1xuICAgICAgICAgIHRoaXMucmVsZXZhbnROb2RlSWRzLmFkZChwYXJlbnRJZCk7IC8vIEFkZCB0byBmaWx0ZXIgc2V0XG4gICAgICAgICAgdGhpcy5ub2RlRGF0YUNhY2hlLnNldChwYXJlbnRJZCwgcGFyZW50KTtcbiAgICAgICAgICBhd2FpdCBleHRyYWN0UGFyZW50SWRzKHBhcmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZhbGxiYWNrOiB1c2UgcGFyZW50SWQgZmllbGQgYW5kIGZldGNoIHBhcmVudCBmcm9tIHNlcnZlclxuICAgICAgICAvLyBUcnkgYm90aCBwYXJlbnRLZXkgZnJvbSBlbnRpdHkgZGVmaW5pdGlvbiBhbmQgY29tbW9uICdwYXJlbnRJZCcgZmllbGRcbiAgICAgICAgY29uc3QgcGFyZW50SWRWYWx1ZSA9IGl0ZW1bcGFyZW50S2V5XSA/PyBpdGVtWydwYXJlbnRJZCddO1xuICAgICAgICBpZiAocGFyZW50SWRWYWx1ZSkge1xuICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gU3RyaW5nKHBhcmVudElkVmFsdWUpO1xuICAgICAgICAgIGlmIChwYXJlbnRJZCAmJiBwYXJlbnRJZCAhPT0gUk9PVF9OT0RFX0lEKSB7XG4gICAgICAgICAgICAvLyBBZGQgdG8gc2V0cyBmaXJzdFxuICAgICAgICAgICAgcGFyZW50c1RvRXhwYW5kLmFkZChwYXJlbnRJZCk7XG4gICAgICAgICAgICB0aGlzLnJlbGV2YW50Tm9kZUlkcy5hZGQocGFyZW50SWQpO1xuXG4gICAgICAgICAgICAvLyBGZXRjaCBwYXJlbnQgZnJvbSBzZXJ2ZXIgaWYgbm90IGFscmVhZHkgY2FjaGVkXG4gICAgICAgICAgICBpZiAoIXRoaXMubm9kZURhdGFDYWNoZS5oYXMocGFyZW50SWQpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudEl0ZW0gPSBhd2FpdCB0aGlzLmZldGNoSXRlbUJ5SWQocGFyZW50SWQpO1xuICAgICAgICAgICAgICBpZiAocGFyZW50SXRlbSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZURhdGFDYWNoZS5zZXQocGFyZW50SWQsIHBhcmVudEl0ZW0pO1xuICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZldGNoIHBhcmVudCdzIHBhcmVudFxuICAgICAgICAgICAgICAgIGF3YWl0IGV4dHJhY3RQYXJlbnRJZHMocGFyZW50SXRlbSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFBhcmVudCBhbHJlYWR5IGluIGNhY2hlLCByZWN1cnNpdmVseSBwcm9jZXNzIGl0XG4gICAgICAgICAgICAgIGNvbnN0IGNhY2hlZFBhcmVudCA9IHRoaXMubm9kZURhdGFDYWNoZS5nZXQocGFyZW50SWQpO1xuICAgICAgICAgICAgICBpZiAoY2FjaGVkUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgZXh0cmFjdFBhcmVudElkcyhjYWNoZWRQYXJlbnQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFByb2Nlc3MgYWxsIGl0ZW1zXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBhd2FpdCBleHRyYWN0UGFyZW50SWRzKGl0ZW0pO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRzVG9FeHBhbmQ7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdHMgY2hpbGRyZW4gSURzIGZvciBtYXRjaGluZyBzZWFyY2ggcmVzdWx0cyByZWN1cnNpdmVseVxuICAgKiBBZGRzIGFsbCBkZXNjZW5kYW50cyAoY2hpbGRyZW4sIGdyYW5kY2hpbGRyZW4sIGV0Yy4pIHRvIHJlbGV2YW50Tm9kZUlkcyBzbyB0aGV5IGFwcGVhciBpbiB0aGUgZmlsdGVyZWQgdHJlZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb2xsZWN0Q2hpbGRyZW5JZHMoaXRlbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMudHJlZURhdGE/LmNhdGVnb3J5RW50aXR5UXVlcnlGdW5jIHx8ICF0aGlzLnRyZWVDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZpZWxkID0gdGhpcy52YWx1ZUZpZWxkKCk7XG4gICAgY29uc3QgcGFyZW50S2V5ID0gdGhpcy50cmVlRGF0YS5jYXRlZ29yeUVudGl0eURlZj8ucGFyZW50S2V5O1xuICAgIGlmICghcGFyZW50S2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIGVhY2ggbWF0Y2hpbmcgbm9kZSwgcmVjdXJzaXZlbHkgZmV0Y2ggYWxsIGl0cyBkZXNjZW5kYW50c1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgY29uc3Qgbm9kZUlkID0gU3RyaW5nKGl0ZW1bdmFsdWVGaWVsZF0gPz8gJycpO1xuICAgICAgaWYgKCFub2RlSWQgfHwgbm9kZUlkID09PSBST09UX05PREVfSUQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuY29sbGVjdENoaWxkcmVuUmVjdXJzaXZlbHkobm9kZUlkLCB2YWx1ZUZpZWxkLCBwYXJlbnRLZXkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjb2xsZWN0cyBhbGwgZGVzY2VuZGFudCBJRHMgZm9yIGEgZ2l2ZW4gbm9kZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjb2xsZWN0Q2hpbGRyZW5SZWN1cnNpdmVseShub2RlSWQ6IHN0cmluZywgdmFsdWVGaWVsZDogc3RyaW5nLCBwYXJlbnRLZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy50cmVlRGF0YT8uY2F0ZWdvcnlFbnRpdHlRdWVyeUZ1bmMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gRmV0Y2ggY2hpbGRyZW4gZm9yIHRoaXMgbm9kZVxuICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgIC4uLnRoaXMudHJlZURhdGEuYmFzaWNRdWVyeUV2ZW50LFxuICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICBmaWVsZDogcGFyZW50S2V5LFxuICAgICAgICAgIHZhbHVlOiBub2RlSWQsXG4gICAgICAgICAgb3BlcmF0b3I6IHsgdHlwZTogJ2VxdWFsJyB9LFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy50cmVlRGF0YS5jYXRlZ29yeUVudGl0eVF1ZXJ5RnVuYyhldmVudCk7XG4gICAgICBpZiAocmVzPy5pdGVtcyAmJiByZXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBBZGQgY2hpbGRyZW4gSURzIHRvIHJlbGV2YW50Tm9kZUlkcyBzbyB0aGV5IGFwcGVhciBpbiBmaWx0ZXJlZCB0cmVlXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgcmVzLml0ZW1zKSB7XG4gICAgICAgICAgY29uc3QgY2hpbGRJZCA9IFN0cmluZyhjaGlsZFt2YWx1ZUZpZWxkXSA/PyAnJyk7XG4gICAgICAgICAgaWYgKGNoaWxkSWQgJiYgY2hpbGRJZCAhPT0gUk9PVF9OT0RFX0lEKSB7XG4gICAgICAgICAgICB0aGlzLnJlbGV2YW50Tm9kZUlkcy5hZGQoY2hpbGRJZCk7XG4gICAgICAgICAgICAvLyBDYWNoZSBjaGlsZCBkYXRhXG4gICAgICAgICAgICB0aGlzLm5vZGVEYXRhQ2FjaGUuc2V0KGNoaWxkSWQsIGNoaWxkKTtcbiAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGZldGNoIGNoaWxkcmVuIG9mIHRoaXMgY2hpbGRcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdENoaWxkcmVuUmVjdXJzaXZlbHkoY2hpbGRJZCwgdmFsdWVGaWVsZCwgcGFyZW50S2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgY2hpbGRyZW4gZm9yIG5vZGUgJHtub2RlSWR9OmAsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhIHNpbmdsZSBpdGVtIGJ5IElEIGZyb20gdGhlIHNlcnZlclxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaEl0ZW1CeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbD4ge1xuICAgIGlmICghdGhpcy50cmVlRGF0YT8uY2F0ZWdvcnlFbnRpdHlRdWVyeUZ1bmMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWx1ZUZpZWxkID0gdGhpcy52YWx1ZUZpZWxkKCk7XG4gICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgLi4udGhpcy50cmVlRGF0YS5iYXNpY1F1ZXJ5RXZlbnQsXG4gICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgIGZpZWxkOiB2YWx1ZUZpZWxkLFxuICAgICAgICAgIHZhbHVlOiBpZCxcbiAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRyZWVEYXRhLmNhdGVnb3J5RW50aXR5UXVlcnlGdW5jKGV2ZW50KTtcbiAgICAgIHJldHVybiByZXM/Lml0ZW1zPy5bMF0gPz8gbnVsbDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgaXRlbSBieSBJRDonLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU29ydHMgcGFyZW50IElEcyBieSB0aGVpciBkZXB0aCAocm9vdCBmaXJzdCwgbGVhdmVzIGxhc3QpXG4gICAqIFVzZXMgY2FjaGVkIGRhdGEgZnJvbSBjb2xsZWN0UGFyZW50SWRzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNvcnRQYXJlbnRzQnlEZXB0aChwYXJlbnRJZHM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHBhcmVudEtleSA9IHRoaXMudHJlZURhdGE/LmNhdGVnb3J5RW50aXR5RGVmPy5wYXJlbnRLZXk7XG4gICAgaWYgKCFwYXJlbnRLZXkgfHwgcGFyZW50SWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHBhcmVudElkcztcbiAgICB9XG5cbiAgICAvLyBCdWlsZCBkZXB0aCBtYXAgdXNpbmcgY2FjaGVkIGRhdGFcbiAgICBjb25zdCBkZXB0aE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHBhcmVudElkIG9mIHBhcmVudElkcykge1xuICAgICAgaWYgKGRlcHRoTWFwLmhhcyhwYXJlbnRJZCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBkZXB0aCA9IDA7XG4gICAgICBsZXQgY3VycmVudElkOiBzdHJpbmcgfCBudWxsID0gcGFyZW50SWQ7XG4gICAgICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgIHdoaWxlIChjdXJyZW50SWQgJiYgY3VycmVudElkICE9PSBST09UX05PREVfSUQgJiYgIXZpc2l0ZWQuaGFzKGN1cnJlbnRJZCkpIHtcbiAgICAgICAgdmlzaXRlZC5hZGQoY3VycmVudElkKTtcbiAgICAgICAgZGVwdGgrKztcblxuICAgICAgICAvLyBVc2Ugbm9kZURhdGFDYWNoZSB3aGljaCB3YXMgcG9wdWxhdGVkIGJ5IGNvbGxlY3RQYXJlbnRJZHNcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMubm9kZURhdGFDYWNoZS5nZXQoY3VycmVudElkKTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICBjdXJyZW50SWQgPSBpdGVtW3BhcmVudEtleV0gPyBTdHJpbmcoaXRlbVtwYXJlbnRLZXldKSA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVwdGhNYXAuc2V0KHBhcmVudElkLCBkZXB0aCk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSBkZXB0aCAobG93ZXIgZGVwdGggPSBjbG9zZXIgdG8gcm9vdCA9IGV4cGFuZCBmaXJzdClcbiAgICByZXR1cm4gcGFyZW50SWRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGRlcHRoQSA9IGRlcHRoTWFwLmdldChhKSA/PyAwO1xuICAgICAgY29uc3QgZGVwdGhCID0gZGVwdGhNYXAuZ2V0KGIpID8/IDA7XG4gICAgICByZXR1cm4gZGVwdGhBIC0gZGVwdGhCO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdHJhbnNsYXRlZCBtZXNzYWdlcyBmb3Igc2VhcmNoIHJlc3VsdHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlVHJhbnNsYXRlZE1lc3NhZ2VzKHJlc3VsdENvdW50OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocmVzdWx0Q291bnQgPiAwKSB7XG4gICAgICBjb25zdCBrZXkgPVxuICAgICAgICByZXN1bHRDb3VudCA9PT0gMVxuICAgICAgICAgID8gJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2gucmVzdWx0cy1mb3VuZC5zaW5ndWxhcidcbiAgICAgICAgICA6ICdAZ2VuZXJhbDp0ZXJtcy5pbnRlcmZhY2UuY2F0ZWdvcnkuc2VhcmNoLnJlc3VsdHMtZm91bmQucGx1cmFsJztcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS50cmFuc2xhdGVBc3luYyhrZXksIHsgcGFyYW1zOiB7IGNvdW50OiByZXN1bHRDb3VudCB9IH0pO1xuICAgICAgdGhpcy5yZXN1bHRzRm91bmRUZXh0LnNldCh0ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN1bHRzRm91bmRUZXh0LnNldCgnJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBzZWFyY2ggc3RhdGUgYW5kIHJlc3RvcmVzIHRyZWUgdG8gb3JpZ2luYWwgZXhwYW5kZWQgc3RhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVzZXRTZWFyY2goKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zZWFyY2hSZXN1bHRDb3VudC5zZXQoMCk7XG4gICAgdGhpcy5yZXN1bHRzRm91bmRUZXh0LnNldCgnJyk7XG4gICAgdGhpcy5jdXJyZW50U2VhcmNoVGVybSA9IG51bGw7XG4gICAgdGhpcy5pc1NlYXJjaGluZy5zZXQoZmFsc2UpO1xuICAgIHRoaXMubWF0Y2hpbmdOb2RlSWRzLmNsZWFyKCk7XG4gICAgdGhpcy5yZWxldmFudE5vZGVJZHMuY2xlYXIoKTtcbiAgICB0aGlzLm5vZGVEYXRhQ2FjaGUuY2xlYXIoKTtcbiAgICAvLyBDbGVhciBoaWdobGlnaHRpbmdcbiAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuY2xlYXIoKTtcblxuICAgIGNvbnN0IHRyZWVDb21wb25lbnQgPSB0aGlzLnRyZWUoKTtcbiAgICBpZiAoIXRyZWVDb21wb25lbnQpIHtcbiAgICAgIHRoaXMuZXhwYW5kZWROb2Rlc0JlZm9yZVNlYXJjaCA9IFtdO1xuICAgICAgdGhpcy5ub2Rlc0V4cGFuZGVkRHVyaW5nU2VhcmNoID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVsb2FkIHRyZWUgdG8gc2hvdyBhbGwgbm9kZXMgKG5vIGZpbHRlcmluZylcbiAgICBhd2FpdCB0cmVlQ29tcG9uZW50LnJlbG9hZERhdGEoKTtcblxuICAgIC8vIENvbGxhcHNlIG5vZGVzIHRoYXQgd2VyZSBleHBhbmRlZCBkdXJpbmcgc2VhcmNoIChpbiByZXZlcnNlIG9yZGVyIC0gbGVhdmVzIGZpcnN0KVxuICAgIGNvbnN0IG5vZGVzVG9Db2xsYXBzZSA9IFsuLi50aGlzLm5vZGVzRXhwYW5kZWREdXJpbmdTZWFyY2hdLnJldmVyc2UoKTtcbiAgICB0aGlzLm5vZGVzRXhwYW5kZWREdXJpbmdTZWFyY2ggPSBbXTtcblxuICAgIGZvciAoY29uc3Qgbm9kZUlkIG9mIG5vZGVzVG9Db2xsYXBzZSkge1xuICAgICAgLy8gT25seSBjb2xsYXBzZSBpZiBpdCB3YXNuJ3Qgb3JpZ2luYWxseSBleHBhbmRlZCBiZWZvcmUgc2VhcmNoXG4gICAgICBpZiAoIXRoaXMuZXhwYW5kZWROb2Rlc0JlZm9yZVNlYXJjaC5pbmNsdWRlcyhub2RlSWQpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdHJlZUNvbXBvbmVudC5jb2xsYXBzZU5vZGUobm9kZUlkKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gTm9kZSBtaWdodCBub3QgZXhpc3QgYW55bW9yZSwgaWdub3JlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhciB0aGUgc3RvcmVkIGV4cGFuZGVkIG5vZGVzXG4gICAgdGhpcy5leHBhbmRlZE5vZGVzQmVmb3JlU2VhcmNoID0gW107XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgbm9kZSBtYXRjaGVzIHRoZSBjdXJyZW50IHNlYXJjaCB0ZXJtXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNNYXRjaGluZ05vZGUobm9kZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tYXRjaGluZ05vZGVJZHMuaGFzKG5vZGVJZCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBub2RlIGNsaWNrIGV2ZW50cyB0byBhcHBseSBjYXRlZ29yeSBmaWx0ZXJzXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlTm9kZUNsaWNrKG5vZGU6IEFYVHJlZVZpZXdOb2RlKTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZURhdGEgPSB0aGlzLmV4dHJhY3ROb2RlRGF0YShub2RlKTtcbiAgICBjb25zdCBhcHBseUNvbmRpdGlvbnMgPSB0aGlzLnZtKCkuZW50aXR5RGVmLmNhdGVnb3J5Py5hcHBseUNvbmRpdGlvbnMgfHwgW107XG5cbiAgICBjb25zdCBjYXRlZ29yeUZpbHRlcnMgPSB0aGlzLmJ1aWxkQ2F0ZWdvcnlGaWx0ZXJzKG5vZGVEYXRhLCBhcHBseUNvbmRpdGlvbnMpO1xuICAgIGNvbnN0IHZpZXdGaWx0ZXJzID0gdGhpcy5idWlsZFZpZXdGaWx0ZXJzKCk7XG5cbiAgICB0aGlzLnZtKCkuZGF0YVNvdXJjZS5maWx0ZXIoe1xuICAgICAgZmlsdGVyczogWy4uLnZpZXdGaWx0ZXJzLCAuLi5jYXRlZ29yeUZpbHRlcnNdLFxuICAgICAgbG9naWM6ICdhbmQnLFxuICAgIH0pO1xuICAgIHRoaXMudm0oKS5kYXRhU291cmNlLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIG5vZGUgdG9nZ2xlIGV2ZW50cyAoZXhwYW5zaW9uL2NvbGxhcHNlKVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIG9uTm9kZVRvZ2dsZShfZXZlbnQ6IEFYVHJlZVZpZXdOb2RlVG9nZ2xlRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUcmVlIGNvbXBvbmVudCBoYW5kbGVzIGxhenkgbG9hZGluZyB2aWEgZGF0YXNvdXJjZSBjYWxsYmFja1xuICB9XG5cbiAgLy8gcHJvdGVjdGVkIHRvZ2dsZUV4cGFuZChlOiBBWFRyZWVWaWV3Tm9kZURvdWJsZUNsaWNrRXZlbnQpIHtcbiAgLy8gICAoZS5jb21wb25lbnQgYXMgQVhUcmVlVmlld0NvbXBvbmVudCkudG9nZ2xlTm9kZUV4cGFuc2lvbihTdHJpbmcoZS5ub2RlW3RoaXMudmFsdWVGaWVsZCgpXSA/PyAnJykpO1xuICAvLyB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBUcmVlIERhdGEgU291cmNlICAgLS0tLVxuXG4gIC8qKlxuICAgKiBEYXRhc291cmNlIGNhbGxiYWNrIGZvciB0cmVlLXZpZXcgY29tcG9uZW50LlxuICAgKiBQcm92aWRlcyBsYXp5IGxvYWRpbmcgc3VwcG9ydCBmb3IgdHJlZSBub2Rlcy5cbiAgICovXG4gIHByb3RlY3RlZCBkYXRhc291cmNlID0gYXN5bmMgKHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFRyZWVWaWV3Tm9kZVtdPiA9PiB7XG4gICAgY29uc29sZS5sb2coJ2RhdGFzb3VyY2UnLCBwYXJlbnRJZCk7XG4gICAgaWYgKCF0aGlzLmlzVHJlZUluaXRpYWxpemVkKCkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIHJvb3Qgbm9kZXMgaWYgbm8gcGFyZW50IElEIHByb3ZpZGVkXG4gICAgaWYgKCFwYXJlbnRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZFJvb3ROb2RlcygpO1xuICAgIH1cblxuICAgIC8vIExvYWQgY2hpbGRyZW4gZm9yIHRoZSBzcGVjaWZpZWQgcGFyZW50XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMubG9hZENoaWxkTm9kZXMocGFyZW50SWQpO1xuICB9O1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ1JVRCBPcGVyYXRpb25zICAgLS0tLVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHJvb3QgY2F0ZWdvcnkgbm9kZVxuICAgKi9cbiAgYXN5bmMgaGFuZGxlQ3JlYXRlUm9vdENsaWNrKGV2ZW50OiBBWENsaWNrRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0QW5kU3RvcFByb3BhZ2F0aW9uKGV2ZW50KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gYXdhaXQgdGhpcy5leGVjdXRlQ3JlYXRlV29ya2Zsb3codW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ3JlYXRlUmVzdWx0KGNvbnRleHQsIHVuZGVmaW5lZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIHJvb3QgY2F0ZWdvcnk6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGNoaWxkIGNhdGVnb3J5IHVuZGVyIHRoZSBnaXZlbiBwYXJlbnQgbm9kZVxuICAgKi9cbiAgYXN5bmMgaGFuZGxlQ3JlYXRlQ2hpbGRDbGljayhub2RlOiBBWFRyZWVWaWV3Tm9kZSwgZXZlbnQ6IEFYQ2xpY2tFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucHJldmVudERlZmF1bHRBbmRTdG9wUHJvcGFnYXRpb24oZXZlbnQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5leHRyYWN0Tm9kZUlkKG5vZGUpO1xuICAgICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNyZWF0ZVdvcmtmbG93KHBhcmVudElkKTtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQ3JlYXRlUmVzdWx0KGNvbnRleHQsIHBhcmVudElkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgY2hpbGQgY2F0ZWdvcnk6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuIGV4aXN0aW5nIGNhdGVnb3J5IG5vZGVcbiAgICovXG4gIGFzeW5jIGhhbmRsZUVkaXROb2RlQ2xpY2sobm9kZTogQVhUcmVlVmlld05vZGUsIGV2ZW50OiBBWENsaWNrRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0QW5kU3RvcFByb3BhZ2F0aW9uKGV2ZW50KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBub2RlRGF0YSA9IHRoaXMuZXh0cmFjdE5vZGVEYXRhKG5vZGUpO1xuICAgICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuZXhlY3V0ZU1vZGlmeVdvcmtmbG93KG5vZGVEYXRhKTtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlTW9kaWZ5UmVzdWx0KGNvbnRleHQsIG5vZGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBlZGl0aW5nIGNhdGVnb3J5OicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIGNhdGVnb3J5IG5vZGVcbiAgICovXG4gIGFzeW5jIGhhbmRsZURlbGV0ZU5vZGVDbGljayhub2RlOiBBWFRyZWVWaWV3Tm9kZSwgZXZlbnQ6IEFYQ2xpY2tFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucHJldmVudERlZmF1bHRBbmRTdG9wUHJvcGFnYXRpb24oZXZlbnQpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5vZGVEYXRhID0gdGhpcy5leHRyYWN0Tm9kZURhdGEobm9kZSk7XG4gICAgICBjb25zdCBjb250ZXh0ID0gYXdhaXQgdGhpcy5leGVjdXRlRGVsZXRlV29ya2Zsb3cobm9kZURhdGEpO1xuICAgICAgYXdhaXQgdGhpcy5oYW5kbGVEZWxldGVSZXN1bHQoY29udGV4dCwgbm9kZSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlbGV0aW5nIGNhdGVnb3J5OicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFByaXZhdGUgVHJlZSBNYW5hZ2VtZW50IE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjYXRlZ29yeSB0cmVlIGRhdGEgc3RydWN0dXJlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGluaXRpYWxpemVUcmVlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2V0TG9hZGluZ1dpdGhEZWxheSh0cnVlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnRpdHlLZXkgPSB0aGlzLmNhdGVnb3J5RW50aXR5S2V5KCk7XG4gICAgICB0aGlzLnRyZWVDb25maWcgPSB7XG4gICAgICAgIGVudGl0eUtleSxcbiAgICAgICAgdGV4dEZpZWxkOiB0aGlzLnRleHRGaWVsZCgpLFxuICAgICAgICB2YWx1ZUZpZWxkOiB0aGlzLnZhbHVlRmllbGQoKSxcbiAgICAgIH07XG5cbiAgICAgIHRoaXMudHJlZURhdGEgPSBhd2FpdCB0aGlzLmNhdGVnb3J5VHJlZVNlcnZpY2UuaW5pdGlhbGl6ZUNhdGVnb3J5VHJlZSh0aGlzLnRyZWVDb25maWcpO1xuICAgICAgaWYgKCF0aGlzLnRyZWVEYXRhKSB7XG4gICAgICAgIHRoaXMuY2xlYXJMb2FkaW5nU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgcGFyZW50IGtleSBmcm9tIGVudGl0eSBkZWZpbml0aW9uXG4gICAgICBpZiAodGhpcy50cmVlRGF0YS5jYXRlZ29yeUVudGl0eURlZj8ucGFyZW50S2V5KSB7XG4gICAgICAgIHRoaXMudHJlZUNvbmZpZy5wYXJlbnRLZXkgPSB0aGlzLnRyZWVEYXRhLmNhdGVnb3J5RW50aXR5RGVmLnBhcmVudEtleTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBjYXRlZ29yaWVzOicsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5jbGVhckxvYWRpbmdTdGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyByb290IG5vZGVzIGZvciB0aGUgdHJlZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUm9vdE5vZGVzKCk6IFByb21pc2U8QVhUcmVlVmlld05vZGVbXT4ge1xuICAgIGlmICghdGhpcy5pc1RyZWVJbml0aWFsaXplZCgpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gTG9hZCByb290IGNhdGVnb3JpZXNcbiAgICBjb25zdCBpdGVtcyA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlUcmVlU2VydmljZS5sb2FkUm9vdENhdGVnb3JpZXModGhpcy50cmVlRGF0YSEsIHRoaXMudHJlZUNvbmZpZyEpO1xuICAgIGlmICghaXRlbXMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByb290Tm9kZSA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlUcmVlU2VydmljZS5jcmVhdGVSb290Tm9kZShpdGVtcywgdGhpcy50cmVlQ29uZmlnISk7XG5cbiAgICAvLyBGaWx0ZXIgcm9vdCdzIGNoaWxkcmVuIHdoZW4gc2VhcmNoIGlzIGFjdGl2ZVxuICAgIGlmICh0aGlzLnJlbGV2YW50Tm9kZUlkcy5zaXplID4gMCAmJiByb290Tm9kZVsnY2hpbGRyZW4nXSkge1xuICAgICAgcm9vdE5vZGVbJ2NoaWxkcmVuJ10gPSAocm9vdE5vZGVbJ2NoaWxkcmVuJ10gYXMgQVhUcmVlVmlld05vZGVbXSkuZmlsdGVyKChjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZElkID0gU3RyaW5nKGNoaWxkWydpZCddID8/ICcnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVsZXZhbnROb2RlSWRzLmhhcyhjaGlsZElkKTtcbiAgICAgIH0pO1xuICAgICAgcm9vdE5vZGVbJ2NoaWxkcmVuQ291bnQnXSA9IChyb290Tm9kZVsnY2hpbGRyZW4nXSBhcyBBWFRyZWVWaWV3Tm9kZVtdKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtyb290Tm9kZV07XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgY2hpbGQgbm9kZXMgZm9yIGEgZ2l2ZW4gcGFyZW50IElEXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGxvYWRDaGlsZE5vZGVzKHBhcmVudElkOiBzdHJpbmcpOiBQcm9taXNlPEFYVHJlZVZpZXdOb2RlW10+IHtcbiAgICBpZiAoIXRoaXMuaXNUcmVlSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBtaW5pbWFsIG5vZGUgb2JqZWN0IC0gbG9hZENoaWxkcmVuIG9ubHkgbmVlZHMgbm9kZS5pZFxuICAgIGNvbnN0IHRhcmdldE5vZGU6IEFYVHJlZVZpZXdOb2RlID0ge1xuICAgICAgaWQ6IHBhcmVudElkLFxuICAgIH0gYXMgQVhUcmVlVmlld05vZGU7XG5cbiAgICBsZXQgY2hpbGRyZW4gPSBhd2FpdCB0aGlzLmNhdGVnb3J5VHJlZVNlcnZpY2UubG9hZENoaWxkcmVuKHRhcmdldE5vZGUsIHRoaXMudHJlZURhdGEhLCB0aGlzLnRyZWVDb25maWchKTtcblxuICAgIC8vIEZpbHRlciBjaGlsZHJlbiB3aGVuIHNlYXJjaCBpcyBhY3RpdmVcbiAgICBpZiAodGhpcy5yZWxldmFudE5vZGVJZHMuc2l6ZSA+IDApIHtcbiAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW4uZmlsdGVyKChjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCBjaGlsZElkID0gU3RyaW5nKGNoaWxkWydpZCddID8/ICcnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVsZXZhbnROb2RlSWRzLmhhcyhjaGlsZElkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGhlIHRyZWUgdmlldyBjb21wb25lbnRcbiAgICovXG4gIHByaXZhdGUgcmVmcmVzaFRyZWUoKTogdm9pZCB7XG4gICAgY29uc3QgdHJlZUNvbXBvbmVudCA9IHRoaXMudHJlZSgpO1xuICAgIGlmICh0cmVlQ29tcG9uZW50KSB7XG4gICAgICB0cmVlQ29tcG9uZW50LnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRyZWUgYWZ0ZXIgQ1JVRCBvcGVyYXRpb25zXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlZnJlc2hBZnRlckNoYW5nZShwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucmVmcmVzaFRyZWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IG5vZGUgdG8gdGhlIHRyZWUgYWZ0ZXIgY3JlYXRlIG9wZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhZGROb2RlVG9UcmVlKGVudGl0eURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc1RyZWVJbml0aWFsaXplZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHJlZUNvbXBvbmVudCA9IHRoaXMudHJlZSgpO1xuICAgIGlmICghdHJlZUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLmNhdGVnb3J5VHJlZVNlcnZpY2UuY29udmVydFRvVHJlZU5vZGUoZW50aXR5RGF0YSwgdGhpcy50cmVlQ29uZmlnISk7XG5cbiAgICBpZiAocGFyZW50SWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkQ2hpbGROb2RlKHRyZWVDb21wb25lbnQsIHBhcmVudElkLCBuZXdOb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5hZGRSb290Tm9kZSh0cmVlQ29tcG9uZW50LCBuZXdOb2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNoaWxkIG5vZGUgdG8gYSBwYXJlbnQgbm9kZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhZGRDaGlsZE5vZGUoXG4gICAgdHJlZUNvbXBvbmVudDogQVhUcmVlVmlld0NvbXBvbmVudCxcbiAgICBwYXJlbnRJZDogc3RyaW5nLFxuICAgIG5ld05vZGU6IEFYVHJlZVZpZXdOb2RlLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdHJlZUNvbXBvbmVudC5maW5kTm9kZShwYXJlbnRJZCk7XG4gICAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBZnRlckNoYW5nZShwYXJlbnRJZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0cmVlQ29tcG9uZW50LmlzTm9kZUV4cGFuZGVkKHBhcmVudElkKSkge1xuICAgICAgYXdhaXQgdHJlZUNvbXBvbmVudC5leHBhbmROb2RlKHBhcmVudElkKTtcbiAgICB9XG5cbiAgICB0cmVlQ29tcG9uZW50LmFkZENoaWxkKHBhcmVudElkLCBuZXdOb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcm9vdCBub2RlIHRvIHRoZSB0cmVlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFkZFJvb3ROb2RlKHRyZWVDb21wb25lbnQ6IEFYVHJlZVZpZXdDb21wb25lbnQsIG5ld05vZGU6IEFYVHJlZVZpZXdOb2RlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgcm9vdE5vZGUgPSB0cmVlQ29tcG9uZW50LmZpbmROb2RlKFJPT1RfTk9ERV9JRCk7XG4gICAgaWYgKCFyb290Tm9kZSkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWZ0ZXJDaGFuZ2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRyZWVDb21wb25lbnQuaXNOb2RlRXhwYW5kZWQoUk9PVF9OT0RFX0lEKSkge1xuICAgICAgYXdhaXQgdHJlZUNvbXBvbmVudC5leHBhbmROb2RlKFJPT1RfTk9ERV9JRCk7XG4gICAgfVxuXG4gICAgdHJlZUNvbXBvbmVudC5hZGRDaGlsZChST09UX05PREVfSUQsIG5ld05vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3Rpbmcgbm9kZSBpbiB0aGUgdHJlZSBhZnRlciBlZGl0IG9wZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVOb2RlSW5UcmVlKG5vZGVJZDogc3RyaW5nLCBlbnRpdHlEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc1RyZWVJbml0aWFsaXplZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHJlZUNvbXBvbmVudCA9IHRoaXMudHJlZSgpO1xuICAgIGlmICghdHJlZUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nTm9kZSA9IHRyZWVDb21wb25lbnQuZmluZE5vZGUobm9kZUlkKTtcbiAgICBpZiAoIWV4aXN0aW5nTm9kZSkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoTm9kZVBhcmVudChlbnRpdHlEYXRhKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBwYXJlbnQgY2hhbmdlZFxuICAgIGNvbnN0IHBhcmVudEtleSA9IHRoaXMudHJlZURhdGE/LmNhdGVnb3J5RW50aXR5RGVmPy5wYXJlbnRLZXk7XG4gICAgbGV0IG5ld1BhcmVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudEtleSAmJiBlbnRpdHlEYXRhW3BhcmVudEtleV0pIHtcbiAgICAgIGNvbnN0IHBhcmVudFZhbHVlID0gU3RyaW5nKGVudGl0eURhdGFbcGFyZW50S2V5XSk7XG4gICAgICAvLyAnYWxsJyBtZWFucyByb290LCBzbyB0cmVhdCBpdCBhcyB1bmRlZmluZWRcbiAgICAgIG5ld1BhcmVudElkID0gcGFyZW50VmFsdWUgIT09ICdhbGwnICYmIHBhcmVudFZhbHVlICE9PSAnJyA/IHBhcmVudFZhbHVlIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRQYXJlbnQgPSB0cmVlQ29tcG9uZW50LmdldFBhcmVudChub2RlSWQpO1xuICAgIGNvbnN0IGN1cnJlbnRQYXJlbnRJZCA9IGN1cnJlbnRQYXJlbnQgPyBTdHJpbmcoY3VycmVudFBhcmVudFsnaWQnXSA/PyAnJykgOiB1bmRlZmluZWQ7XG4gICAgLy8gTm9ybWFsaXplIGN1cnJlbnQgcGFyZW50OiAnYWxsJyBtZWFucyByb290ICh1bmRlZmluZWQpXG4gICAgY29uc3Qgbm9ybWFsaXplZEN1cnJlbnRQYXJlbnRJZCA9IGN1cnJlbnRQYXJlbnRJZCA9PT0gJ2FsbCcgfHwgY3VycmVudFBhcmVudElkID09PSAnJyA/IHVuZGVmaW5lZCA6IGN1cnJlbnRQYXJlbnRJZDtcblxuICAgIC8vIEhhbmRsZSBwYXJlbnQgY2hhbmdlOiBtb3ZlIG5vZGUgdG8gbmV3IHBhcmVudCBpZiBwYXJlbnQgY2hhbmdlZFxuICAgIGlmIChuZXdQYXJlbnRJZCAhPT0gbm9ybWFsaXplZEN1cnJlbnRQYXJlbnRJZCkge1xuICAgICAgLy8gSWYgcGFyZW50IGNoYW5nZWQsIG1vdmUgdGhlIG5vZGUgZmlyc3RcbiAgICAgIGNvbnN0IG1vdmVkID0gdHJlZUNvbXBvbmVudC5tb3ZlTm9kZShub2RlSWQsIG5ld1BhcmVudElkKTtcblxuICAgICAgaWYgKCFtb3ZlZCkge1xuICAgICAgICAvLyBJZiBtb3ZlIGZhaWxlZCwgcmVmcmVzaCB0aGUgdHJlZSB0byBlbnN1cmUgY29uc2lzdGVuY3lcbiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoTm9kZVBhcmVudChlbnRpdHlEYXRhKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBZnRlciBtb3ZpbmcsIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBuZXcgcGFyZW50IGlzIGV4cGFuZGVkXG4gICAgICBpZiAobmV3UGFyZW50SWQpIHtcbiAgICAgICAgaWYgKCF0cmVlQ29tcG9uZW50LmlzTm9kZUV4cGFuZGVkKG5ld1BhcmVudElkKSkge1xuICAgICAgICAgIGF3YWl0IHRyZWVDb21wb25lbnQuZXhwYW5kTm9kZShuZXdQYXJlbnRJZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1vdmluZyB0byByb290IC0gZW5zdXJlIHJvb3QgaXMgZXhwYW5kZWRcbiAgICAgICAgaWYgKCF0cmVlQ29tcG9uZW50LmlzTm9kZUV4cGFuZGVkKFJPT1RfTk9ERV9JRCkpIHtcbiAgICAgICAgICBhd2FpdCB0cmVlQ29tcG9uZW50LmV4cGFuZE5vZGUoUk9PVF9OT0RFX0lEKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBub2RlIHByb3BlcnRpZXMgKHRpdGxlLCBkYXRhLCBldGMuKVxuICAgIGNvbnN0IHVwZGF0ZWROb2RlID0gdGhpcy5jYXRlZ29yeVRyZWVTZXJ2aWNlLmNvbnZlcnRUb1RyZWVOb2RlKGVudGl0eURhdGEsIHRoaXMudHJlZUNvbmZpZyEpO1xuICAgIGNvbnN0IHVwZGF0ZXM6IFBhcnRpYWw8QVhUcmVlVmlld05vZGU+ID0ge1xuICAgICAgWyd0aXRsZSddOiB1cGRhdGVkTm9kZVsndGl0bGUnXSxcbiAgICAgIFsnZGF0YSddOiB1cGRhdGVkTm9kZVsnZGF0YSddLFxuICAgICAgWydjaGlsZHJlbkNvdW50J106IHVwZGF0ZWROb2RlWydjaGlsZHJlbkNvdW50J10sXG4gICAgICBbJ2ljb24nXTogdXBkYXRlZE5vZGVbJ2ljb24nXSxcbiAgICB9O1xuXG4gICAgdHJlZUNvbXBvbmVudC5lZGl0Tm9kZShub2RlSWQsIHVwZGF0ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIHRyZWUgYWZ0ZXIgZGVsZXRlIG9wZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVOb2RlRnJvbVRyZWUobm9kZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0cmVlQ29tcG9uZW50ID0gdGhpcy50cmVlKCk7XG4gICAgaWYgKCF0cmVlQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZVRvRGVsZXRlID0gdHJlZUNvbXBvbmVudC5maW5kTm9kZShub2RlSWQpO1xuICAgIGlmICghbm9kZVRvRGVsZXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBZnRlckNoYW5nZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyZWVDb21wb25lbnQucmVtb3ZlTm9kZShub2RlSWQpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBXb3JrZmxvdyBFeGVjdXRpb24gTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGNyZWF0ZSBlbnRpdHkgd29ya2Zsb3dcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZUNyZWF0ZVdvcmtmbG93KHBhcmVudElkPzogc3RyaW5nKTogUHJvbWlzZTxBWFBXb3JrZmxvd0NvbnRleHQ+IHtcbiAgICBjb25zdCBlbnRpdHlLZXkgPSB0aGlzLmNhdGVnb3J5RW50aXR5S2V5KCk7XG4gICAgY29uc3Qgd29ya2Zsb3dEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgaWYgKHBhcmVudElkICYmIHRoaXMudHJlZURhdGE/LmNhdGVnb3J5RW50aXR5RGVmPy5wYXJlbnRLZXkpIHtcbiAgICAgIHdvcmtmbG93RGF0YVt0aGlzLnRyZWVEYXRhLmNhdGVnb3J5RW50aXR5RGVmLnBhcmVudEtleV0gPSBwYXJlbnRJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy53b3JrZmxvdy5leGVjdXRlKCdjcmVhdGUtZW50aXR5Jywge1xuICAgICAgZW50aXR5OiBlbnRpdHlLZXksXG4gICAgICBkYXRhOiBPYmplY3Qua2V5cyh3b3JrZmxvd0RhdGEpLmxlbmd0aCA+IDAgPyB3b3JrZmxvd0RhdGEgOiB1bmRlZmluZWQsXG4gICAgICBvcHRpb25zOiB7IHByb2Nlc3M6IHsgcmVkaXJlY3Q6IGZhbHNlLCBjYW5DcmVhdGVOZXdPbmU6ICEhcGFyZW50SWQgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBtb2RpZnkgZW50aXR5IHdvcmtmbG93XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVNb2RpZnlXb3JrZmxvdyhub2RlRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPEFYUFdvcmtmbG93Q29udGV4dD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLndvcmtmbG93LmV4ZWN1dGUoJ3F1aWNrLW1vZGlmeS1lbnRpdHknLCB7XG4gICAgICBlbnRpdHk6IHRoaXMuY2F0ZWdvcnlFbnRpdHlLZXkoKSxcbiAgICAgIGRhdGE6IG5vZGVEYXRhLFxuICAgICAgb3B0aW9uczogeyBsYXlvdXQ6IHsgc2l6ZTogJ21kJyB9IH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGRlbGV0ZSBlbnRpdHkgd29ya2Zsb3dcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZURlbGV0ZVdvcmtmbG93KG5vZGVEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8QVhQV29ya2Zsb3dDb250ZXh0PiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnZGVsZXRlLWVudGl0eScsIHtcbiAgICAgIGVudGl0eTogdGhpcy5jYXRlZ29yeUVudGl0eUtleSgpLFxuICAgICAgZGF0YTogbm9kZURhdGEsXG4gICAgICBvcHRpb25zOiB7IHByb2Nlc3M6IHsgc2hvd1Jlc3VsdDogdHJ1ZSB9IH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgcmVzdWx0IG9mIGEgY3JlYXRlIG9wZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVDcmVhdGVSZXN1bHQoY29udGV4dDogQVhQV29ya2Zsb3dDb250ZXh0LCBwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuZ2V0T3V0cHV0PGJvb2xlYW4+KCdyZXN1bHQnKTtcbiAgICBpZiAoIXJlc3VsdCB8fCAhdGhpcy5pc1RyZWVJbml0aWFsaXplZCgpKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBZnRlckNoYW5nZShwYXJlbnRJZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3RW50aXR5RGF0YSA9IGNvbnRleHQuZ2V0VmFyaWFibGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCdkYXRhJyk7XG4gICAgaWYgKG5ld0VudGl0eURhdGEpIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkTm9kZVRvVHJlZShuZXdFbnRpdHlEYXRhLCBwYXJlbnRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEFmdGVyQ2hhbmdlKHBhcmVudElkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgcmVzdWx0IG9mIGEgbW9kaWZ5IG9wZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVNb2RpZnlSZXN1bHQoY29udGV4dDogQVhQV29ya2Zsb3dDb250ZXh0LCBub2RlOiBBWFRyZWVWaWV3Tm9kZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuZ2V0T3V0cHV0PGJvb2xlYW4+KCdyZXN1bHQnKTtcbiAgICBpZiAoIXJlc3VsdCB8fCAhdGhpcy5pc1RyZWVJbml0aWFsaXplZCgpKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hOb2RlUGFyZW50KHRoaXMuZXh0cmFjdE5vZGVEYXRhKG5vZGUpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkRW50aXR5RGF0YSA9IGNvbnRleHQuZ2V0VmFyaWFibGU8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCdkYXRhJyk7XG4gICAgaWYgKHVwZGF0ZWRFbnRpdHlEYXRhKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZU5vZGVJblRyZWUodGhpcy5leHRyYWN0Tm9kZUlkKG5vZGUpLCB1cGRhdGVkRW50aXR5RGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaE5vZGVQYXJlbnQodGhpcy5leHRyYWN0Tm9kZURhdGEobm9kZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSByZXN1bHQgb2YgYSBkZWxldGUgb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRsZURlbGV0ZVJlc3VsdChjb250ZXh0OiBBWFBXb3JrZmxvd0NvbnRleHQsIG5vZGU6IEFYVHJlZVZpZXdOb2RlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5nZXRPdXRwdXQ8Ym9vbGVhbj4oJ3Jlc3VsdCcpO1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVtb3ZlTm9kZUZyb21UcmVlKHRoaXMuZXh0cmFjdE5vZGVJZChub2RlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaE5vZGVQYXJlbnQodGhpcy5leHRyYWN0Tm9kZURhdGEobm9kZSkpO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgVXRpbGl0eSBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdHJlZSBkYXRhIGFuZCBjb25maWcgYXJlIGluaXRpYWxpemVkXG4gICAqL1xuICBwcml2YXRlIGlzVHJlZUluaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLnRyZWVEYXRhICYmIHRoaXMudHJlZUNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgbm9kZSBkYXRhIGZyb20gYSB0cmVlIG5vZGVcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdE5vZGVEYXRhKG5vZGU6IEFYVHJlZVZpZXdOb2RlKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiAoKG5vZGVbJ2RhdGEnXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfHwgbm9kZSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgbm9kZSBJRCBmcm9tIGEgdHJlZSBub2RlXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3ROb2RlSWQobm9kZTogQVhUcmVlVmlld05vZGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdHJpbmcobm9kZVsnaWQnXSA/PyAnJyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGNhdGVnb3J5IGZpbHRlcnMgZnJvbSBub2RlIGRhdGEgYW5kIGFwcGx5IGNvbmRpdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRDYXRlZ29yeUZpbHRlcnMoXG4gICAgbm9kZURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGFwcGx5Q29uZGl0aW9uczogQVhQUXVlcnlGaWx0ZXJbXSxcbiAgKTogQVhEYXRhU291cmNlRmlsdGVyT3B0aW9uW10ge1xuICAgIHJldHVybiBhcHBseUNvbmRpdGlvbnNcbiAgICAgIC5tYXAoKGNvbmRpdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG5vZGVEYXRhW2NvbmRpdGlvbi52YWx1ZV07XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ2FsbCcgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZmllbGQ6IGNvbmRpdGlvbi5uYW1lLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIG9wZXJhdG9yOiBjb25kaXRpb24ub3BlcmF0b3IsXG4gICAgICAgIH0gYXMgQVhEYXRhU291cmNlRmlsdGVyT3B0aW9uO1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIE5vbk51bGxhYmxlPHR5cGVvZiBpdGVtPiA9PiBpdGVtICE9PSBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdmlldyBmaWx0ZXJzIGZyb20gdmlldyBjb25kaXRpb25zXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVmlld0ZpbHRlcnMoKTogQVhEYXRhU291cmNlRmlsdGVyT3B0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLnZtKClcbiAgICAgIC52aWV3KClcbiAgICAgIC5jb25kaXRpb25zLm1hcCgoY29uZGl0aW9uKSA9PiAoeyAuLi5jb25kaXRpb24sIGZpZWxkOiBjb25kaXRpb24ubmFtZSB9KSBhcyBBWERhdGFTb3VyY2VGaWx0ZXJPcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0aGUgcGFyZW50IG5vZGUgb2YgdGhlIGdpdmVuIGVudGl0eSBkYXRhXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlZnJlc2hOb2RlUGFyZW50KGVudGl0eURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyZW50S2V5ID0gdGhpcy50cmVlRGF0YT8uY2F0ZWdvcnlFbnRpdHlEZWY/LnBhcmVudEtleTtcbiAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudEtleSAmJiBlbnRpdHlEYXRhW3BhcmVudEtleV0gPyAoZW50aXR5RGF0YVtwYXJlbnRLZXldIGFzIHN0cmluZykgOiB1bmRlZmluZWQ7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoQWZ0ZXJDaGFuZ2UocGFyZW50SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXZlbnRzIGRlZmF1bHQgYmVoYXZpb3IgYW5kIHN0b3BzIGV2ZW50IHByb3BhZ2F0aW9uXG4gICAqL1xuICBwcml2YXRlIHByZXZlbnREZWZhdWx0QW5kU3RvcFByb3BhZ2F0aW9uKGV2ZW50OiBBWENsaWNrRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5uYXRpdmVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50Lm5hdGl2ZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBMb2FkaW5nIFN0YXRlIE1hbmFnZW1lbnQgICAtLS0tXG5cbiAgLyoqXG4gICAqIFNldHMgbG9hZGluZyBzdGF0ZSB3aXRoIGRlbGF5IHRvIGF2b2lkIGZsaWNrZXJpbmcgZm9yIGZhc3QgcmVzcG9uc2VzXG4gICAqL1xuICBwcml2YXRlIHNldExvYWRpbmdXaXRoRGVsYXkobG9hZGluZzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghbG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxvYWRpbmdUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0SWQpO1xuICAgIH1cblxuICAgIHRoaXMubG9hZGluZ1RpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5sb2FkaW5nVGltZW91dElkID0gbnVsbDtcbiAgICB9LCBMT0FESU5HX0RFTEFZX01TKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgbG9hZGluZyBzdGF0ZSBhbmQgY2FuY2VscyBhbnkgcGVuZGluZyB0aW1lb3V0XG4gICAqL1xuICBwcml2YXRlIGNsZWFyTG9hZGluZ1N0YXRlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxvYWRpbmdUaW1lb3V0SWQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0SWQpO1xuICAgICAgdGhpcy5sb2FkaW5nVGltZW91dElkID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iLCI8YXhwLWxheW91dC1oZWFkZXI+XG4gIDxheHAtbGF5b3V0LXRpdGxlPnt7XG4gICAgdm0oKS5lbnRpdHlEZWYuY2F0ZWdvcnk/LnRpdGxlIHx8ICdAZ2VuZXJhbDp0ZXJtcy5jbGFzc2lmaWNhdGlvbi5jYXRlZ29yeScgfCB0cmFuc2xhdGUgfCBhc3luY1xuICB9fTwvYXhwLWxheW91dC10aXRsZT5cbiAgPGF4cC1sYXlvdXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtMSBheC13LWZ1bGxcIj5cbiAgICAgIDxheC1zZWFyY2gtYm94XG4gICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJoYW5kbGVDYXRlZ29yeVNlYXJjaENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2RlbGF5VGltZV09XCIzMDBcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2gucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgPlxuICAgICAgPC9heC1zZWFyY2gtYm94PlxuICAgICAgQGlmIChpc1NlYXJjaGluZygpICYmIGN1cnJlbnRTZWFyY2hWYWx1ZSgpLnRyaW0oKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdGV4dC14cyBheC10ZXh0LW11dGVkIGF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0xXCI+XG4gICAgICAgICAgPHNwYW4+e3sgJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2guc2VhcmNoaW5nJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2UgaWYgKGN1cnJlbnRTZWFyY2hWYWx1ZSgpLnRyaW0oKSAmJiAhaXNTZWFyY2hpbmcoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdGV4dC14cyBheC10ZXh0LW11dGVkIGF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0xXCI+XG4gICAgICAgICAgQGlmIChzZWFyY2hSZXN1bHRDb3VudCgpID4gMCkge1xuICAgICAgICAgICAgPHNwYW4+e3sgcmVzdWx0c0ZvdW5kVGV4dCgpIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvYXhwLWxheW91dC10b29sYmFyPlxuPC9heHAtbGF5b3V0LWhlYWRlcj5cbjxheHAtbGF5b3V0LWNvbnRlbnQ+XG4gIEBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtcC00IGF4LWZsZXggYXgtZmxleC1jb2wgYXgtZ2FwLTNcIj5cbiAgICAgIDxheC1za2VsZXRvbiBjbGFzcz1cImF4LXctZnVsbCBheC1oLTYgYXgtcm91bmRlZC1tZFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICA8YXgtc2tlbGV0b24gY2xhc3M9XCJheC13LWZ1bGwgYXgtaC02IGF4LXJvdW5kZWQtbWRcIj48L2F4LXNrZWxldG9uPlxuICAgICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtdy1mdWxsIGF4LWgtNiBheC1yb3VuZGVkLW1kXCI+PC9heC1za2VsZXRvbj5cbiAgICAgIDxheC1za2VsZXRvbiBjbGFzcz1cImF4LXctZnVsbCBheC1oLTYgYXgtcm91bmRlZC1tZFwiPjwvYXgtc2tlbGV0b24+XG4gICAgICA8YXgtc2tlbGV0b24gY2xhc3M9XCJheC13LWZ1bGwgYXgtaC02IGF4LXJvdW5kZWQtbWRcIj48L2F4LXNrZWxldG9uPlxuICAgICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtdy1mdWxsIGF4LWgtNiBheC1yb3VuZGVkLW1kXCI+PC9heC1za2VsZXRvbj5cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSBpZiAoc2hvd05vU2VhcmNoUmVzdWx0cygpKSB7XG4gICAgPGRpdiBjbGFzcz1cIl9fZW1wdHktc3RhdGVcIj5cbiAgICAgIDxheHAtc3RhdGUtbWVzc2FnZVxuICAgICAgICBpY29uPVwiZmEtbGlnaHQgZmEtc2VhcmNoXCJcbiAgICAgICAgW3RpdGxlXT1cIidAZ2VuZXJhbDp0ZXJtcy5pbnRlcmZhY2UuY2F0ZWdvcnkuc2VhcmNoLm5vLXJlc3VsdHMtZm91bmQudGl0bGUnXCJcbiAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIidAZ2VuZXJhbDp0ZXJtcy5pbnRlcmZhY2UuY2F0ZWdvcnkuc2VhcmNoLm5vLXJlc3VsdHMtZm91bmQuZGVzY3JpcHRpb24nXCJcbiAgICAgID5cbiAgICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgPC9kaXY+XG4gIH0gQGVsc2UgaWYgKHRyZWVEYXRhKSB7XG4gICAgPGRpdiBjbGFzcz1cImF4LXB4LTQgYXgtbWF4LWgtW2NhbGMoMTAwdmgtMjUwcHgpXSBheC1vdmVyZmxvdy1hdXRvXCI+XG4gICAgICA8YXgtdHJlZS12aWV3XG4gICAgICAgIFtkYXRhc291cmNlXT1cImRhdGFzb3VyY2VcIlxuICAgICAgICBbc2VsZWN0TW9kZV09XCJzZWxlY3RNb2RlKClcIlxuICAgICAgICBbc2VsZWN0aW9uQmVoYXZpb3JdPVwic2VsZWN0aW9uQmVoYXZpb3IoKVwiXG4gICAgICAgIFtkcmFnQXJlYV09XCJkcmFnQXJlYSgpXCJcbiAgICAgICAgW2RyYWdCZWhhdmlvcl09XCJkcmFnQmVoYXZpb3IoKVwiXG4gICAgICAgIFtzaG93SWNvbnNdPVwic2hvd0ljb25zKClcIlxuICAgICAgICBbc2hvd0NoaWxkcmVuQmFkZ2VdPVwic2hvd0NoaWxkcmVuQmFkZ2UoKVwiXG4gICAgICAgIFtleHBhbmRlZEljb25dPVwiZXhwYW5kZWRJY29uKClcIlxuICAgICAgICBbY29sbGFwc2VkSWNvbl09XCJjb2xsYXBzZWRJY29uKClcIlxuICAgICAgICBbaW5kZW50U2l6ZV09XCJpbmRlbnRTaXplKClcIlxuICAgICAgICBbbG9va109XCJsb29rKClcIlxuICAgICAgICBbdGl0bGVGaWVsZF09XCJ0ZXh0RmllbGQoKVwiXG4gICAgICAgIFtpZEZpZWxkXT1cInZhbHVlRmllbGQoKVwiXG4gICAgICAgIFtleHBhbmRPbkRvdWJsZUNsaWNrXT1cInRydWVcIlxuICAgICAgICBbbm9kZVRlbXBsYXRlXT1cIml0ZW1UZW1wbGF0ZVwiXG4gICAgICAgIChvbk5vZGVUb2dnbGUpPVwib25Ob2RlVG9nZ2xlKCRldmVudClcIlxuICAgICAgICAob25Ob2RlQ2xpY2spPVwiaGFuZGxlTm9kZUNsaWNrKCRldmVudC5ub2RlKVwiXG4gICAgICAgICN0cmVlXG4gICAgICA+XG4gICAgICA8L2F4LXRyZWUtdmlldz5cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdiBjbGFzcz1cIl9fZW1wdHktc3RhdGVcIj5cbiAgICAgIDxheHAtc3RhdGUtbWVzc2FnZVxuICAgICAgICBpY29uPVwiZmEtbGlnaHQgZmEtZm9sZGVyLW9wZW5cIlxuICAgICAgICBbdGl0bGVdPVwiJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2gubm8tcmVjb3Jkcy50aXRsZSdcIlxuICAgICAgICBbZGVzY3JpcHRpb25dPVwiJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2gubm8tcmVjb3Jkcy5kZXNjcmlwdGlvbidcIlxuICAgICAgPlxuICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgc2xvdD1cImFjdGlvbnNcIlxuICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUNyZWF0ZVJvb3RDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICBsb29rPVwic29saWRcIlxuICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgW3RleHRdPVwiJ0BnZW5lcmFsOmFjdGlvbnMuYWRkLW5ldy50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luY1wiXG4gICAgICAgID5cbiAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhcyBmYS1wbHVzXCI+PC9heC1pY29uPlxuICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgPC9kaXY+XG4gIH1cblxuICA8bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZSBsZXQtbm9kZT1cIm5vZGVcIiBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICAgIEBsZXQgaXRlbSA9IG5vZGUuZGF0YSB8fCBub2RlO1xuICAgIEBsZXQgdGV4dEZpZWxkID0gdm0oKS5lbnRpdHlEZWYuY2F0ZWdvcnk/LnRleHRGaWVsZCB8fCAndGl0bGUnO1xuICAgIEBsZXQgdmFsdWVGaWVsZCA9IHZtKCkuZW50aXR5RGVmLmNhdGVnb3J5Py52YWx1ZUZpZWxkIHx8ICdpZCc7XG4gICAgQGxldCBpdGVtSWQgPSBpdGVtW3ZhbHVlRmllbGRdIHx8IG5vZGUuaWQ7XG4gICAgQGxldCBpdGVtVGl0bGUgPSBpdGVtW3RleHRGaWVsZF0gfHwgbm9kZS50aXRsZTtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1iZXR3ZWVuIGF4LXctZnVsbCBheC1nYXAtMiBheC1vdmVyZmxvdy1oaWRkZW4gYXgtcHktMVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0yIGF4LW1pbi13LTBcIj5cbiAgICAgICAgPGF4LWljb25cbiAgICAgICAgICBjbGFzcz1cImZhcyBmYS1mb2xkZXJcIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJpdGVtLmNvbG9yID8/ICdyZ2JhKHZhcigtLWF4LXN5cy1jb2xvci13YXJuaW5nLTUwMCksIDEpJ1wiXG4gICAgICAgID48L2F4LWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdHJ1bmNhdGVcIj57eyBpdGVtVGl0bGUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoaXRlbUlkICYmIGl0ZW1JZCAhPT0gJ2FsbCcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0xXCI+XG4gICAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXhzXCIgY29sb3I9XCJkZWZhdWx0XCIgbG9vaz1cImJsYW5rXCIgKG9uQ2xpY2spPVwiJGV2ZW50Lm5hdGl2ZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhcyBmYS1lbGxpcHNpcy12XCI+PC9heC1pY29uPlxuICAgICAgICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW1cbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUNyZWF0ZUNoaWxkQ2xpY2sobm9kZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBsb29rPVwiYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJkZWZhdWx0XCJcbiAgICAgICAgICAgICAgICAgIHRleHQ9XCJBZGQgTmV3IENoaWxkXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhcyBmYS1wbHVzXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIChvbkNsaWNrKT1cImhhbmRsZUVkaXROb2RlQ2xpY2sobm9kZSwgJGV2ZW50KVwiIGxvb2s9XCJibGFua1wiIHRleHQ9XCJFZGl0XCI+XG4gICAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhcyBmYS1wZW5cIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW1cbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZURlbGV0ZU5vZGVDbGljayhub2RlLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGNvbG9yPVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgIGxvb2s9XCJibGFua1wiXG4gICAgICAgICAgICAgICAgICB0ZXh0PVwiRGVsZXRlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhcyBmYS10cmFzaFwiPjwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2UgaWYgKGl0ZW1JZCA9PT0gJ2FsbCcpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0xXCI+XG4gICAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXhzXCIgKG9uQ2xpY2spPVwiaGFuZGxlQ3JlYXRlUm9vdENsaWNrKCRldmVudClcIiBsb29rPVwiYmxhbmtcIiBjb2xvcj1cImRlZmF1bHRcIj5cbiAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmFzIGZhLXBsdXNcIj48L2F4LWljb24+XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9heHAtbGF5b3V0LWNvbnRlbnQ+XG4iXX0=","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPDeviceService, } from '@acorex/platform/core';\nimport { AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, } from '@acorex/platform/layout/components';\nimport { AXPEntityListViewColumnViewModel, AXPEntityMasterListViewModel } from '@acorex/platform/layout/entity';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, Input, signal, ViewEncapsulation, } from '@angular/core';\nimport { AXPCommonSettings, AXPSettingService } from '@acorex/platform/common';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { isEqual } from 'lodash-es';\nimport { AXPEntityMasterListViewComponent } from '../entity-master-list-view/entity-master-list-view.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/button\";\nimport * as i2 from \"@acorex/components/decorators\";\nimport * as i3 from \"@acorex/components/popover\";\nimport * as i4 from \"@angular/common\";\nimport * as i5 from \"@acorex/core/translation\";\nexport class AXPEntityMasterToolbarViewComponent {\n constructor() {\n this.layoutService = inject(AXPLayoutThemeService);\n this.deviceService = inject(AXPDeviceService);\n this.parent = inject(AXPEntityMasterListViewComponent);\n this.router = inject(Router);\n this.activeRoute = inject(ActivatedRoute);\n this.settingsService = inject(AXPSettingService);\n this.isInitializing = false;\n this.pendingInitialFilters = true;\n this.pendingInitialSorts = true;\n this.filterTriggerMode = 'manual';\n this.previousFilterQueries = signal([], ...(ngDevMode ? [{ debugName: \"previousFilterQueries\" }] : []));\n this.initialFilters = signal([], ...(ngDevMode ? [{ debugName: \"initialFilters\" }] : []));\n this.filtersDefinitions = signal([], ...(ngDevMode ? [{ debugName: \"filtersDefinitions\" }] : []));\n this.viewQueries = computed(() => this.vm.views().map((v) => ({\n name: v.name,\n fixed: false,\n title: v.title,\n columns: v.columns,\n conditions: v.conditions.map((c) => ({\n field: c.name,\n operator: c.operator,\n value: c.value,\n })),\n sorts: v.sorts,\n })), ...(ngDevMode ? [{ debugName: \"viewQueries\" }] : []));\n this.selectedViewQuery = computed(() => ({\n name: this.vm.view().name,\n fixed: false,\n title: this.vm.view().title,\n columns: this.vm.view().columns,\n conditions: this.vm.view().conditions.map((c) => ({\n field: c.name,\n operator: c.operator,\n value: c.value,\n })),\n sorts: this.vm.view().sorts,\n }), ...(ngDevMode ? [{ debugName: \"selectedViewQuery\" }] : []));\n this.isFiltersDirty = computed(() => !isEqual(this.vm.filterQueries(), this.previousFilterQueries()), ...(ngDevMode ? [{ debugName: \"isFiltersDirty\" }] : []));\n // Debounced apply to coalesce multiple UI changes (filters/sorts/columns)\n this.applyTimer = null;\n this.#effect = effect(() => {\n // Keep definitions up to date; initial filters are set explicitly from settings or view\n this.filtersDefinitions.set(this.vm.filtersDef);\n }, ...(ngDevMode ? [{ debugName: \"#effect\" }] : []));\n this.sortQueries = computed(() => this.vm\n .sortedFields()\n .filter((s) => !!s.dir)\n .map((s) => ({ name: s.name, dir: s.dir })), ...(ngDevMode ? [{ debugName: \"sortQueries\" }] : []));\n this.sortDefinitions = computed(() => this.vm.sortableFields().map((s) => ({\n name: s.name,\n title: s.title,\n dir: s.dir,\n })), ...(ngDevMode ? [{ debugName: \"sortDefinitions\" }] : []));\n }\n async ngOnInit() {\n // Prefer saved settings (view/columns/sorts/filters) if available, then apply\n await this.loadSettings();\n await this.vm.setView();\n this.filtersDefinitions.set(this.vm.filtersDef);\n this.isInitializing = true;\n // this.pendingInitialFilters = true;\n // this.pendingInitialSorts = true;\n this.setInitialFiltersFromSettingsOrView();\n // Ensure initial load even when filters/sorts are absent\n setTimeout(() => {\n this.isInitializing = false;\n this.scheduleApply();\n }, 0);\n }\n async loadSettings() {\n const filterTriggerMode = await this.settingsService.get(AXPCommonSettings.EntityFilterApplyMode);\n this.filterTriggerMode = (filterTriggerMode?.value ?? 'auto');\n }\n scheduleApply() {\n clearTimeout(this.applyTimer);\n this.applyTimer = setTimeout(() => {\n this.vm.applyFilterAndSort();\n }, 50);\n }\n async onViewChanged(view) {\n await this.vm.setView(view.name);\n // Sync query param immediately on tab change\n this.router.navigate([], {\n relativeTo: this.activeRoute,\n queryParams: { view: view.name },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n this.isInitializing = true;\n this.pendingInitialFilters = true;\n this.pendingInitialSorts = true;\n this.setInitialFiltersFromSettingsOrView();\n // Ensure initial load after view change\n setTimeout(() => {\n this.isInitializing = false;\n this.scheduleApply();\n }, 0);\n }\n #effect;\n setInitialFiltersFromSettingsOrView() {\n const saved = this.vm.filterQueries();\n this.previousFilterQueries.set(saved);\n const viewConditions = this.vm.view().conditions.map((c) => c.name);\n if (saved && saved.length) {\n this.initialFilters.set(saved.map((s) => ({ ...s, hidden: viewConditions.includes(s.field) })));\n return;\n }\n this.initialFilters.set(this.vm.view().conditions.map((c) => ({\n field: c.name,\n operator: c.operator,\n value: c.value,\n hidden: true,\n })));\n }\n onFiltersChanged(filters) {\n if (this.isInitializing || this.pendingInitialFilters) {\n this.pendingInitialFilters = false;\n return;\n }\n this.vm.filterQueries.set(filters);\n if (this.filterTriggerMode === 'auto') {\n this.applyFilters();\n }\n }\n applyFilters() {\n this.previousFilterQueries.set(this.vm.filterQueries());\n this.vm.saveSettings('filters', this.vm.filterQueries());\n this.scheduleApply();\n }\n onSortQueriesChange(e) {\n if (this.isInitializing || this.pendingInitialSorts) {\n this.pendingInitialSorts = false;\n return;\n }\n this.vm.sortedFields.set(e.map((s) => ({\n name: s.name,\n title: s.name,\n dir: s.dir,\n })));\n // Persist sorts per module/entity/view\n this.vm.saveSettings('sorts', e);\n this.scheduleApply();\n }\n onColumnsChange(columns) {\n const keyOf = (c) => c.column?.options?.dataPath ?? c.name;\n this.vm.columns.update((prev) => {\n const byKey = new Map(prev.map((c) => [keyOf(c), c]));\n return columns.map((newColumn) => {\n const existing = byKey.get(keyOf(newColumn));\n return new AXPEntityListViewColumnViewModel(existing.property, {\n ...existing.column,\n options: {\n ...existing.column.options,\n visible: newColumn.visible,\n },\n });\n });\n });\n // Persist column order/visibility\n this.vm.onColumnsChanged(this.vm.columns());\n // Use debounced apply to avoid triple refresh when combined with sorts/filters\n // this.scheduleApply();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityMasterToolbarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXPEntityMasterToolbarViewComponent, isStandalone: true, selector: \"axp-entity-master-toolbar-view\", inputs: { vm: [\"viewModel\", \"vm\"] }, host: { classAttribute: \"ax-w-full\" }, ngImport: i0, template: \"<!-- <axp-entity-view-toolbar [viewModel]=\\\"vm\\\"></axp-entity-view-toolbar> -->\\n<axp-query-views\\n id=\\\"axp-toolbar-view-selector\\\"\\n [views]=\\\"viewQueries()\\\"\\n [selectedView]=\\\"selectedViewQuery()\\\"\\n (selectedViewChange)=\\\"onViewChanged($event)\\\"\\n></axp-query-views>\\n<div class=\\\"ax-flex ax-items-center ax-gap-2 ax-border-b ax-border-light w-full\\\">\\n <!-- <axp-entity-filter-toolbar [viewModel]=\\\"vm\\\"></axp-entity-filter-toolbar> -->\\n <axp-query-filters\\n id=\\\"axp-toolbar-filters\\\"\\n [filtersDefinitions]=\\\"filtersDefinitions()\\\"\\n [initialFilters]=\\\"initialFilters()\\\"\\n (onFiltersChanged)=\\\"onFiltersChanged($event)\\\"\\n ></axp-query-filters>\\n\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 md:ax-gap-2\\\">\\n @if (filterTriggerMode === 'manual' && isFiltersDirty()) {\\n <ax-button\\n id=\\\"axp-toolbar-btn-filter\\\"\\n [title]=\\\"'@general:actions.apply.title'\\\"\\n [iconOnly]=\\\"true\\\"\\n #filterButton\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"applyFilters()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-search\\\"></i>\\n </ax-prefix>\\n </ax-button>\\n }\\n <div>\\n <ax-button id=\\\"axp-toolbar-btn-columns\\\" [iconOnly]=\\\"true\\\" #columnButton [color]=\\\"'default'\\\">\\n <i class=\\\"fa-light fa-table-columns\\\"></i>\\n </ax-button>\\n <ax-popover\\n id=\\\"axp-popover-columns\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n [offsetY]=\\\"30\\\"\\n [target]=\\\"columnButton\\\"\\n [openOn]=\\\"'toggle'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n #popover\\n >\\n <div class=\\\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\\\">\\n <ax-header class=\\\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\\\">\\n {{ '@general:terms.common.columns' | translate | async }}\\n </ax-header>\\n <div class=\\\"ax-py-2 ax-px-4\\\">\\n <axp-query-columns [columns]=\\\"vm.columns()\\\" (columnsChange)=\\\"onColumnsChange($event)\\\"></axp-query-columns>\\n <!-- <axp-list-view-option-columns [viewModel]=\\\"vm\\\"></axp-list-view-option-columns> -->\\n </div>\\n </div>\\n </ax-popover>\\n </div>\\n\\n @if (vm.canSort()) {\\n <div>\\n <ax-button id=\\\"axp-toolbar-btn-sort\\\" [iconOnly]=\\\"true\\\" [text]=\\\"'Sorts'\\\" #sortButton [color]=\\\"'default'\\\">\\n <i class=\\\"fa-light fa-sort-amount-up\\\"></i>\\n </ax-button>\\n <ax-popover\\n id=\\\"axp-popover-sort\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n [offsetY]=\\\"10\\\"\\n [target]=\\\"sortButton\\\"\\n [openOn]=\\\"'toggle'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n #popover\\n >\\n <div class=\\\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\\\">\\n <ax-header class=\\\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\\\">\\n {{ '@general:terms.common.sorts' | translate | async }}\\n </ax-header>\\n <div class=\\\"ax-py-2 ax-px-4\\\">\\n <!-- <axp-list-view-option-sorting [viewModel]=\\\"vm\\\"></axp-list-view-option-sorting> -->\\n <axp-query-sorts\\n [sortDefinitions]=\\\"sortDefinitions()\\\"\\n (sortQueriesChange)=\\\"onSortQueriesChange($event)\\\"\\n [initialSortQueries]=\\\"sortQueries()\\\"\\n ></axp-query-sorts>\\n </div>\\n </div>\\n </ax-popover>\\n </div>\\n }\\n @if (deviceService.isSmall()) {\\n <ax-button\\n id=\\\"axp-toolbar-btn-category\\\"\\n (onClick)=\\\"parent.toggleCategoryDrawer()\\\"\\n [iconOnly]=\\\"true\\\"\\n [color]=\\\"'default'\\\"\\n >\\n <i class=\\\"fa-light fa-bars\\\"></i>\\n </ax-button>\\n }\\n </div>\\n</div>\\n\", dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i1.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i2.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: AXPQueryFiltersComponent, selector: \"axp-query-filters\", inputs: [\"filtersDefinitions\", \"initialFilters\"], outputs: [\"onFiltersChanged\"] }, { kind: \"ngmodule\", type: AXPopoverModule }, { kind: \"component\", type: i3.AXPopoverComponent, selector: \"ax-popover\", inputs: [\"width\", \"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"backdropClass\", \"panelClass\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"component\", type: AXPQuerySortsComponent, selector: \"axp-query-sorts\", inputs: [\"sortDefinitions\", \"initialSortQueries\"], outputs: [\"sortDefinitionsChange\", \"sortQueriesChange\"] }, { kind: \"component\", type: AXPQueryViewsComponent, selector: \"axp-query-views\", inputs: [\"views\", \"selectedView\"], outputs: [\"viewsChange\", \"selectedViewChange\"] }, { kind: \"component\", type: AXPQueryColumnsComponent, selector: \"axp-query-columns\", inputs: [\"columns\"], outputs: [\"columnsChange\"] }, { kind: \"pipe\", type: i4.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i5.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityMasterToolbarViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-entity-master-toolbar-view', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXTranslationModule,\n AXPQueryFiltersComponent,\n AXPopoverModule,\n AXPQuerySortsComponent,\n AXPQueryViewsComponent,\n AXPQueryColumnsComponent,\n ], host: {\n class: 'ax-w-full',\n }, template: \"<!-- <axp-entity-view-toolbar [viewModel]=\\\"vm\\\"></axp-entity-view-toolbar> -->\\n<axp-query-views\\n id=\\\"axp-toolbar-view-selector\\\"\\n [views]=\\\"viewQueries()\\\"\\n [selectedView]=\\\"selectedViewQuery()\\\"\\n (selectedViewChange)=\\\"onViewChanged($event)\\\"\\n></axp-query-views>\\n<div class=\\\"ax-flex ax-items-center ax-gap-2 ax-border-b ax-border-light w-full\\\">\\n <!-- <axp-entity-filter-toolbar [viewModel]=\\\"vm\\\"></axp-entity-filter-toolbar> -->\\n <axp-query-filters\\n id=\\\"axp-toolbar-filters\\\"\\n [filtersDefinitions]=\\\"filtersDefinitions()\\\"\\n [initialFilters]=\\\"initialFilters()\\\"\\n (onFiltersChanged)=\\\"onFiltersChanged($event)\\\"\\n ></axp-query-filters>\\n\\n <div class=\\\"ax-flex ax-items-center ax-gap-2 md:ax-gap-2\\\">\\n @if (filterTriggerMode === 'manual' && isFiltersDirty()) {\\n <ax-button\\n id=\\\"axp-toolbar-btn-filter\\\"\\n [title]=\\\"'@general:actions.apply.title'\\\"\\n [iconOnly]=\\\"true\\\"\\n #filterButton\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"applyFilters()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-search\\\"></i>\\n </ax-prefix>\\n </ax-button>\\n }\\n <div>\\n <ax-button id=\\\"axp-toolbar-btn-columns\\\" [iconOnly]=\\\"true\\\" #columnButton [color]=\\\"'default'\\\">\\n <i class=\\\"fa-light fa-table-columns\\\"></i>\\n </ax-button>\\n <ax-popover\\n id=\\\"axp-popover-columns\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n [offsetY]=\\\"30\\\"\\n [target]=\\\"columnButton\\\"\\n [openOn]=\\\"'toggle'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n #popover\\n >\\n <div class=\\\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\\\">\\n <ax-header class=\\\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\\\">\\n {{ '@general:terms.common.columns' | translate | async }}\\n </ax-header>\\n <div class=\\\"ax-py-2 ax-px-4\\\">\\n <axp-query-columns [columns]=\\\"vm.columns()\\\" (columnsChange)=\\\"onColumnsChange($event)\\\"></axp-query-columns>\\n <!-- <axp-list-view-option-columns [viewModel]=\\\"vm\\\"></axp-list-view-option-columns> -->\\n </div>\\n </div>\\n </ax-popover>\\n </div>\\n\\n @if (vm.canSort()) {\\n <div>\\n <ax-button id=\\\"axp-toolbar-btn-sort\\\" [iconOnly]=\\\"true\\\" [text]=\\\"'Sorts'\\\" #sortButton [color]=\\\"'default'\\\">\\n <i class=\\\"fa-light fa-sort-amount-up\\\"></i>\\n </ax-button>\\n <ax-popover\\n id=\\\"axp-popover-sort\\\"\\n [adaptivityEnabled]=\\\"true\\\"\\n [offsetY]=\\\"10\\\"\\n [target]=\\\"sortButton\\\"\\n [openOn]=\\\"'toggle'\\\"\\n [closeOn]=\\\"'clickOut'\\\"\\n #popover\\n >\\n <div class=\\\"ax-lightest-surface ax-shadow-md ax-border md:ax-w-72 ax-w-full ax-rounded-md\\\">\\n <ax-header class=\\\"ax-border-b ax-lighter-surface ax-rounded-t-md ax-p-4 ax-font-bold\\\">\\n {{ '@general:terms.common.sorts' | translate | async }}\\n </ax-header>\\n <div class=\\\"ax-py-2 ax-px-4\\\">\\n <!-- <axp-list-view-option-sorting [viewModel]=\\\"vm\\\"></axp-list-view-option-sorting> -->\\n <axp-query-sorts\\n [sortDefinitions]=\\\"sortDefinitions()\\\"\\n (sortQueriesChange)=\\\"onSortQueriesChange($event)\\\"\\n [initialSortQueries]=\\\"sortQueries()\\\"\\n ></axp-query-sorts>\\n </div>\\n </div>\\n </ax-popover>\\n </div>\\n }\\n @if (deviceService.isSmall()) {\\n <ax-button\\n id=\\\"axp-toolbar-btn-category\\\"\\n (onClick)=\\\"parent.toggleCategoryDrawer()\\\"\\n [iconOnly]=\\\"true\\\"\\n [color]=\\\"'default'\\\"\\n >\\n <i class=\\\"fa-light fa-bars\\\"></i>\\n </ax-button>\\n }\\n </div>\\n</div>\\n\" }]\n }], propDecorators: { vm: [{\n type: Input,\n args: ['viewModel']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvZW50aXR5LWxheW91dHMvZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcvZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvZW50aXR5LWxheW91dHMvZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcvZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBRUwsZ0JBQWdCLEdBTWpCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUNMLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsc0JBQXNCLEVBQ3RCLHNCQUFzQixHQUN2QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0ws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QUFRLENBQUMsUUFBUSxFQUFFO29CQUM3RCxHQUFHLFFBQVEsQ0FBQyxNQUFNO29CQUNsQixPQUFPLEVBQUU7d0JBQ1AsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU87d0JBQzFCLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztxQkFDM0I7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILGtDQUFrQztRQUNsQyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM1QywrRUFBK0U7UUFDL0Usd0JBQXdCO0lBQzFCLENBQUM7K0dBdE1VLG1DQUFtQzttR0FBbkMsbUNBQW1DLHNLQzNEaEQsbXZIQWtHQSwyQ0RyREksWUFBWSw4QkFDWixjQUFjLDZYQUNkLGlCQUFpQixxUEFDakIsbUJBQW1CLCtCQUNuQix3QkFBd0IsOElBQ3hCLGVBQWUsd1ZBQ2Ysc0JBQXNCLHdLQUN0QixzQkFBc0IsK0lBQ3RCLHdCQUF3Qjs7NEZBTWYsbUNBQW1DO2tCQXJCL0MsU0FBUzsrQkFDRSxnQ0FBZ0MsaUJBRTNCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLHNCQUFzQjt3QkFDdEIsc0JBQXNCO3dCQUN0Qix3QkFBd0I7cUJBQ3pCLFFBQ0s7d0JBQ0osS0FBSyxFQUFFLFdBQVc7cUJBQ25COztzQkF1Q0EsS0FBSzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQge1xuICBBWFBDb2x1bW5RdWVyeSxcbiAgQVhQRGV2aWNlU2VydmljZSxcbiAgQVhQRmlsdGVyRGVmaW5pdGlvbixcbiAgQVhQRmlsdGVyUXVlcnksXG4gIEFYUFNvcnREZWZpbml0aW9uLFxuICBBWFBTb3J0UXVlcnksXG4gIEFYUFZpZXdRdWVyeSxcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7XG4gIEFYUFF1ZXJ5Q29sdW1uc0NvbXBvbmVudCxcbiAgQVhQUXVlcnlGaWx0ZXJzQ29tcG9uZW50LFxuICBBWFBRdWVyeVNvcnRzQ29tcG9uZW50LFxuICBBWFBRdWVyeVZpZXdzQ29tcG9uZW50LFxufSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYUEVudGl0eUxpc3RWaWV3Q29sdW1uVmlld01vZGVsLCBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld01vZGVsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUExheW91dFRoZW1lU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vdGhlbWVzL3NoYXJlZCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgc2lnbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYUENvbW1vblNldHRpbmdzLCBBWFBTZXR0aW5nU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2VudGl0eS1tYXN0ZXItbGlzdC12aWV3L2VudGl0eS1tYXN0ZXItbGlzdC12aWV3LmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1lbnRpdHktbWFzdGVyLXRvb2xiYXItdmlldycsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktbWFzdGVyLXRvb2xiYXItdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgQVhQUXVlcnlGaWx0ZXJzQ29tcG9uZW50LFxuICAgIEFYUG9wb3Zlck1vZHVsZSxcbiAgICBBWFBRdWVyeVNvcnRzQ29tcG9uZW50LFxuICAgIEFYUFF1ZXJ5Vmlld3NDb21wb25lbnQsXG4gICAgQVhQUXVlcnlDb2x1bW5zQ29tcG9uZW50LFxuICBdLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdheC13LWZ1bGwnLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBBWFBFbnRpdHlNYXN0ZXJUb29sYmFyVmlld0NvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBsYXlvdXRTZXJ2aWNlID0gaW5qZWN0KEFYUExheW91dFRoZW1lU2VydmljZSk7XG4gIHByb3RlY3RlZCBkZXZpY2VTZXJ2aWNlID0gaW5qZWN0KEFYUERldmljZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcGFyZW50ID0gaW5qZWN0KEFYUEVudGl0eU1hc3Rlckxpc3RWaWV3Q29tcG9uZW50KTtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBhY3RpdmVSb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlID0gaW5qZWN0KEFYUFNldHRpbmdTZXJ2aWNlKTtcblxuICBwcml2YXRlIGlzSW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gIHByaXZhdGUgcGVuZGluZ0luaXRpYWxGaWx0ZXJzID0gdHJ1ZTtcbiAgcHJpdmF0ZSBwZW5kaW5nSW5pdGlhbFNvcnRzID0gdHJ1ZTtcblxuICBwcm90ZWN0ZWQgZmlsdGVyVHJpZ2dlck1vZGU6ICdhdXRvJyB8ICdtYW51YWwnID0gJ21hbnVhbCc7XG5cbiAgcHJvdGVjdGVkIHByZXZpb3VzRmlsdGVyUXVlcmllcyA9IHNpZ25hbDxBWFBGaWx0ZXJRdWVyeVtdPihbXSk7XG5cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUHJlZmVyIHNhdmVkIHNldHRpbmdzICh2aWV3L2NvbHVtbnMvc29ydHMvZmlsdGVycykgaWYgYXZhaWxhYmxlLCB0aGVuIGFwcGx5XG4gICAgYXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcbiAgICBhd2FpdCB0aGlzLnZtLnNldFZpZXcoKTtcbiAgICB0aGlzLmZpbHRlcnNEZWZpbml0aW9ucy5zZXQodGhpcy52bS5maWx0ZXJzRGVmKTtcbiAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gdHJ1ZTtcbiAgICAvLyB0aGlzLnBlbmRpbmdJbml0aWFsRmlsdGVycyA9IHRydWU7XG4gICAgLy8gdGhpcy5wZW5kaW5nSW5pdGlhbFNvcnRzID0gdHJ1ZTtcbiAgICB0aGlzLnNldEluaXRpYWxGaWx0ZXJzRnJvbVNldHRpbmdzT3JWaWV3KCk7XG4gICAgLy8gRW5zdXJlIGluaXRpYWwgbG9hZCBldmVuIHdoZW4gZmlsdGVycy9zb3J0cyBhcmUgYWJzZW50XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnNjaGVkdWxlQXBwbHkoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFNldHRpbmdzKCkge1xuICAgIGNvbnN0IGZpbHRlclRyaWdnZXJNb2RlID0gYXdhaXQgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0KEFYUENvbW1vblNldHRpbmdzLkVudGl0eUZpbHRlckFwcGx5TW9kZSk7XG4gICAgdGhpcy5maWx0ZXJUcmlnZ2VyTW9kZSA9IChmaWx0ZXJUcmlnZ2VyTW9kZT8udmFsdWUgPz8gJ2F1dG8nKSBhcyAnYXV0bycgfCAnbWFudWFsJztcbiAgfVxuXG4gIEBJbnB1dCgndmlld01vZGVsJylcbiAgcHVibGljIHZtITogQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdNb2RlbDtcblxuICBwcm90ZWN0ZWQgaW5pdGlhbEZpbHRlcnMgPSBzaWduYWw8QVhQRmlsdGVyUXVlcnlbXT4oW10pO1xuICBwcm90ZWN0ZWQgZmlsdGVyc0RlZmluaXRpb25zID0gc2lnbmFsPEFYUEZpbHRlckRlZmluaXRpb25bXT4oW10pO1xuXG4gIHByb3RlY3RlZCB2aWV3UXVlcmllcyA9IGNvbXB1dGVkPEFYUFZpZXdRdWVyeVtdPigoKSA9PlxuICAgIHRoaXMudm0udmlld3MoKS5tYXAoKHYpID0+ICh7XG4gICAgICBuYW1lOiB2Lm5hbWUsXG4gICAgICBmaXhlZDogZmFsc2UsXG4gICAgICB0aXRsZTogdi50aXRsZSxcbiAgICAgIGNvbHVtbnM6IHYuY29sdW1ucyxcbiAgICAgIGNvbmRpdGlvbnM6IHYuY29uZGl0aW9ucy5tYXAoKGMpID0+ICh7XG4gICAgICAgIGZpZWxkOiBjLm5hbWUsXG4gICAgICAgIG9wZXJhdG9yOiBjLm9wZXJhdG9yLFxuICAgICAgICB2YWx1ZTogYy52YWx1ZSxcbiAgICAgIH0pKSxcbiAgICAgIHNvcnRzOiB2LnNvcnRzLFxuICAgIH0pKSxcbiAgKTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkVmlld1F1ZXJ5ID0gY29tcHV0ZWQ8QVhQVmlld1F1ZXJ5PigoKSA9PiAoe1xuICAgIG5hbWU6IHRoaXMudm0udmlldygpLm5hbWUsXG4gICAgZml4ZWQ6IGZhbHNlLFxuICAgIHRpdGxlOiB0aGlzLnZtLnZpZXcoKS50aXRsZSxcbiAgICBjb2x1bW5zOiB0aGlzLnZtLnZpZXcoKS5jb2x1bW5zLFxuICAgIGNvbmRpdGlvbnM6IHRoaXMudm0udmlldygpLmNvbmRpdGlvbnMubWFwKChjKSA9PiAoe1xuICAgICAgZmllbGQ6IGMubmFtZSxcbiAgICAgIG9wZXJhdG9yOiBjLm9wZXJhdG9yLFxuICAgICAgdmFsdWU6IGMudmFsdWUsXG4gICAgfSkpLFxuICAgIHNvcnRzOiB0aGlzLnZtLnZpZXcoKS5zb3J0cyxcbiAgfSkpO1xuXG4gIHByb3RlY3RlZCBpc0ZpbHRlcnNEaXJ0eSA9IGNvbXB1dGVkKCgpID0+ICFpc0VxdWFsKHRoaXMudm0uZmlsdGVyUXVlcmllcygpLCB0aGlzLnByZXZpb3VzRmlsdGVyUXVlcmllcygpKSk7XG5cbiAgLy8gRGVib3VuY2VkIGFwcGx5IHRvIGNvYWxlc2NlIG11bHRpcGxlIFVJIGNoYW5nZXMgKGZpbHRlcnMvc29ydHMvY29sdW1ucylcbiAgcHJpdmF0ZSBhcHBseVRpbWVyOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIHNjaGVkdWxlQXBwbHkoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuYXBwbHlUaW1lcik7XG4gICAgdGhpcy5hcHBseVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnZtLmFwcGx5RmlsdGVyQW5kU29ydCgpO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIGFzeW5jIG9uVmlld0NoYW5nZWQodmlldzogQVhQVmlld1F1ZXJ5KSB7XG4gICAgYXdhaXQgdGhpcy52bS5zZXRWaWV3KHZpZXcubmFtZSk7XG4gICAgLy8gU3luYyBxdWVyeSBwYXJhbSBpbW1lZGlhdGVseSBvbiB0YWIgY2hhbmdlXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZlUm91dGUsXG4gICAgICBxdWVyeVBhcmFtczogeyB2aWV3OiB2aWV3Lm5hbWUgfSxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSB0cnVlO1xuICAgIHRoaXMucGVuZGluZ0luaXRpYWxGaWx0ZXJzID0gdHJ1ZTtcbiAgICB0aGlzLnBlbmRpbmdJbml0aWFsU29ydHMgPSB0cnVlO1xuICAgIHRoaXMuc2V0SW5pdGlhbEZpbHRlcnNGcm9tU2V0dGluZ3NPclZpZXcoKTtcbiAgICAvLyBFbnN1cmUgaW5pdGlhbCBsb2FkIGFmdGVyIHZpZXcgY2hhbmdlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gZmFsc2U7XG4gICAgICB0aGlzLnNjaGVkdWxlQXBwbHkoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gICNlZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIC8vIEtlZXAgZGVmaW5pdGlvbnMgdXAgdG8gZGF0ZTsgaW5pdGlhbCBmaWx0ZXJzIGFyZSBzZXQgZXhwbGljaXRseSBmcm9tIHNldHRpbmdzIG9yIHZpZXdcbiAgICB0aGlzLmZpbHRlcnNEZWZpbml0aW9ucy5zZXQodGhpcy52bS5maWx0ZXJzRGVmKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsRmlsdGVyc0Zyb21TZXR0aW5nc09yVmlldygpIHtcbiAgICBjb25zdCBzYXZlZCA9IHRoaXMudm0uZmlsdGVyUXVlcmllcygpO1xuICAgIHRoaXMucHJldmlvdXNGaWx0ZXJRdWVyaWVzLnNldChzYXZlZCk7XG4gICAgY29uc3Qgdmlld0NvbmRpdGlvbnMgPSB0aGlzLnZtLnZpZXcoKS5jb25kaXRpb25zLm1hcCgoYykgPT4gYy5uYW1lKTtcbiAgICBpZiAoc2F2ZWQgJiYgc2F2ZWQubGVuZ3RoKSB7XG4gICAgICB0aGlzLmluaXRpYWxGaWx0ZXJzLnNldChzYXZlZC5tYXAoKHMpID0+ICh7IC4uLnMsIGhpZGRlbjogdmlld0NvbmRpdGlvbnMuaW5jbHVkZXMocy5maWVsZCkgfSkpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsRmlsdGVycy5zZXQoXG4gICAgICB0aGlzLnZtLnZpZXcoKS5jb25kaXRpb25zLm1hcChcbiAgICAgICAgKGMpID0+XG4gICAgICAgICAgKHtcbiAgICAgICAgICAgIGZpZWxkOiBjLm5hbWUsXG4gICAgICAgICAgICBvcGVyYXRvcjogYy5vcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBjLnZhbHVlLFxuICAgICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIH0pIGFzIGFueSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIG9uRmlsdGVyc0NoYW5nZWQoZmlsdGVyczogQVhQRmlsdGVyUXVlcnlbXSkge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6aW5nIHx8IHRoaXMucGVuZGluZ0luaXRpYWxGaWx0ZXJzKSB7XG4gICAgICB0aGlzLnBlbmRpbmdJbml0aWFsRmlsdGVycyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudm0uZmlsdGVyUXVlcmllcy5zZXQoZmlsdGVycyk7XG4gICAgaWYgKHRoaXMuZmlsdGVyVHJpZ2dlck1vZGUgPT09ICdhdXRvJykge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMucHJldmlvdXNGaWx0ZXJRdWVyaWVzLnNldCh0aGlzLnZtLmZpbHRlclF1ZXJpZXMoKSk7XG4gICAgdGhpcy52bS5zYXZlU2V0dGluZ3MoJ2ZpbHRlcnMnLCB0aGlzLnZtLmZpbHRlclF1ZXJpZXMoKSk7XG4gICAgdGhpcy5zY2hlZHVsZUFwcGx5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydFF1ZXJpZXMgPSBjb21wdXRlZDxBWFBTb3J0UXVlcnlbXT4oKCkgPT5cbiAgICB0aGlzLnZtXG4gICAgICAuc29ydGVkRmllbGRzKClcbiAgICAgIC5maWx0ZXIoKHMpID0+ICEhcy5kaXIpXG4gICAgICAubWFwKChzKSA9PiAoeyBuYW1lOiBzLm5hbWUsIGRpcjogcy5kaXIgYXMgJ2FzYycgfCAnZGVzYycgfSkpLFxuICApO1xuXG4gIHByb3RlY3RlZCBzb3J0RGVmaW5pdGlvbnMgPSBjb21wdXRlZDxBWFBTb3J0RGVmaW5pdGlvbltdPigoKSA9PlxuICAgIHRoaXMudm0uc29ydGFibGVGaWVsZHMoKS5tYXAoKHMpID0+ICh7XG4gICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICB0aXRsZTogcy50aXRsZSxcbiAgICAgIGRpcjogcy5kaXIgYXMgJ2FzYycgfCAnZGVzYycgfCB1bmRlZmluZWQsXG4gICAgfSkpLFxuICApO1xuXG4gIHByb3RlY3RlZCBvblNvcnRRdWVyaWVzQ2hhbmdlKGU6IEFYUFNvcnRRdWVyeVtdKSB7XG4gICAgaWYgKHRoaXMuaXNJbml0aWFsaXppbmcgfHwgdGhpcy5wZW5kaW5nSW5pdGlhbFNvcnRzKSB7XG4gICAgICB0aGlzLnBlbmRpbmdJbml0aWFsU29ydHMgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52bS5zb3J0ZWRGaWVsZHMuc2V0KFxuICAgICAgZS5tYXAoKHMpID0+ICh7XG4gICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgdGl0bGU6IHMubmFtZSxcbiAgICAgICAgZGlyOiBzLmRpcixcbiAgICAgIH0pKSxcbiAgICApO1xuICAgIC8vIFBlcnNpc3Qgc29ydHMgcGVyIG1vZHVsZS9lbnRpdHkvdmlld1xuICAgIHRoaXMudm0uc2F2ZVNldHRpbmdzKCdzb3J0cycsIGUpO1xuICAgIHRoaXMuc2NoZWR1bGVBcHBseSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ29sdW1uc0NoYW5nZShjb2x1bW5zOiBBWFBDb2x1bW5RdWVyeVtdKSB7XG4gICAgY29uc3Qga2V5T2YgPSAoYzogeyBuYW1lOiBzdHJpbmc7IGNvbHVtbj86IGFueSB9KSA9PiBjLmNvbHVtbj8ub3B0aW9ucz8uZGF0YVBhdGggPz8gYy5uYW1lO1xuXG4gICAgdGhpcy52bS5jb2x1bW5zLnVwZGF0ZSgocHJldikgPT4ge1xuICAgICAgY29uc3QgYnlLZXkgPSBuZXcgTWFwKHByZXYubWFwKChjKSA9PiBba2V5T2YoYyBhcyBhbnkpLCBjXSkpO1xuXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKG5ld0NvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGJ5S2V5LmdldChrZXlPZihuZXdDb2x1bW4pKSE7XG4gICAgICAgIHJldHVybiBuZXcgQVhQRW50aXR5TGlzdFZpZXdDb2x1bW5WaWV3TW9kZWwoZXhpc3RpbmcucHJvcGVydHksIHtcbiAgICAgICAgICAuLi5leGlzdGluZy5jb2x1bW4sXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgLi4uZXhpc3RpbmcuY29sdW1uLm9wdGlvbnMsXG4gICAgICAgICAgICB2aXNpYmxlOiBuZXdDb2x1bW4udmlzaWJsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIFBlcnNpc3QgY29sdW1uIG9yZGVyL3Zpc2liaWxpdHlcbiAgICB0aGlzLnZtLm9uQ29sdW1uc0NoYW5nZWQodGhpcy52bS5jb2x1bW5zKCkpO1xuICAgIC8vIFVzZSBkZWJvdW5jZWQgYXBwbHkgdG8gYXZvaWQgdHJpcGxlIHJlZnJlc2ggd2hlbiBjb21iaW5lZCB3aXRoIHNvcnRzL2ZpbHRlcnNcbiAgICAvLyB0aGlzLnNjaGVkdWxlQXBwbHkoKTtcbiAgfVxufVxuIiwiPCEtLSA8YXhwLWVudGl0eS12aWV3LXRvb2xiYXIgW3ZpZXdNb2RlbF09XCJ2bVwiPjwvYXhwLWVudGl0eS12aWV3LXRvb2xiYXI+IC0tPlxuPGF4cC1xdWVyeS12aWV3c1xuICBpZD1cImF4cC10b29sYmFyLXZpZXctc2VsZWN0b3JcIlxuICBbdmlld3NdPVwidmlld1F1ZXJpZXMoKVwiXG4gIFtzZWxlY3RlZFZpZXddPVwic2VsZWN0ZWRWaWV3UXVlcnkoKVwiXG4gIChzZWxlY3RlZFZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlZCgkZXZlbnQpXCJcbj48L2F4cC1xdWVyeS12aWV3cz5cbjxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtMiBheC1ib3JkZXItYiBheC1ib3JkZXItbGlnaHQgdy1mdWxsXCI+XG4gIDwhLS0gPGF4cC1lbnRpdHktZmlsdGVyLXRvb2xiYXIgW3ZpZXdNb2RlbF09XCJ2bVwiPjwvYXhwLWVudGl0eS1maWx0ZXItdG9vbGJhcj4gLS0+XG4gIDxheHAtcXVlcnktZmlsdGVyc1xuICAgIGlkPVwiYXhwLXRvb2xiYXItZmlsdGVyc1wiXG4gICAgW2ZpbHRlcnNEZWZpbml0aW9uc109XCJmaWx0ZXJzRGVmaW5pdGlvbnMoKVwiXG4gICAgW2luaXRpYWxGaWx0ZXJzXT1cImluaXRpYWxGaWx0ZXJzKClcIlxuICAgIChvbkZpbHRlcnNDaGFuZ2VkKT1cIm9uRmlsdGVyc0NoYW5nZWQoJGV2ZW50KVwiXG4gID48L2F4cC1xdWVyeS1maWx0ZXJzPlxuXG4gIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtMiBtZDpheC1nYXAtMlwiPlxuICAgIEBpZiAoZmlsdGVyVHJpZ2dlck1vZGUgPT09ICdtYW51YWwnICYmIGlzRmlsdGVyc0RpcnR5KCkpIHtcbiAgICAgIDxheC1idXR0b25cbiAgICAgICAgaWQ9XCJheHAtdG9vbGJhci1idG4tZmlsdGVyXCJcbiAgICAgICAgW3RpdGxlXT1cIidAZ2VuZXJhbDphY3Rpb25zLmFwcGx5LnRpdGxlJ1wiXG4gICAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgICAgI2ZpbHRlckJ1dHRvblxuICAgICAgICBbY29sb3JdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgKG9uQ2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIlxuICAgICAgPlxuICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtc2VhcmNoXCI+PC9pPlxuICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgIDwvYXgtYnV0dG9uPlxuICAgIH1cbiAgICA8ZGl2PlxuICAgICAgPGF4LWJ1dHRvbiBpZD1cImF4cC10b29sYmFyLWJ0bi1jb2x1bW5zXCIgW2ljb25Pbmx5XT1cInRydWVcIiAjY29sdW1uQnV0dG9uIFtjb2xvcl09XCInZGVmYXVsdCdcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS10YWJsZS1jb2x1bW5zXCI+PC9pPlxuICAgICAgPC9heC1idXR0b24+XG4gICAgICA8YXgtcG9wb3ZlclxuICAgICAgICBpZD1cImF4cC1wb3BvdmVyLWNvbHVtbnNcIlxuICAgICAgICBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtvZmZzZXRZXT1cIjMwXCJcbiAgICAgICAgW3RhcmdldF09XCJjb2x1bW5CdXR0b25cIlxuICAgICAgICBbb3Blbk9uXT1cIid0b2dnbGUnXCJcbiAgICAgICAgW2Nsb3NlT25dPVwiJ2NsaWNrT3V0J1wiXG4gICAgICAgICNwb3BvdmVyXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1saWdodGVzdC1zdXJmYWNlIGF4LXNoYWRvdy1tZCBheC1ib3JkZXIgbWQ6YXgtdy03MiBheC13LWZ1bGwgYXgtcm91bmRlZC1tZFwiPlxuICAgICAgICAgIDxheC1oZWFkZXIgY2xhc3M9XCJheC1ib3JkZXItYiBheC1saWdodGVyLXN1cmZhY2UgYXgtcm91bmRlZC10LW1kIGF4LXAtNCBheC1mb250LWJvbGRcIj5cbiAgICAgICAgICAgIHt7ICdAZ2VuZXJhbDp0ZXJtcy5jb21tb24uY29sdW1ucycgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgIDwvYXgtaGVhZGVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1weS0yIGF4LXB4LTRcIj5cbiAgICAgICAgICAgIDxheHAtcXVlcnktY29sdW1ucyBbY29sdW1uc109XCJ2bS5jb2x1bW5zKClcIiAoY29sdW1uc0NoYW5nZSk9XCJvbkNvbHVtbnNDaGFuZ2UoJGV2ZW50KVwiPjwvYXhwLXF1ZXJ5LWNvbHVtbnM+XG4gICAgICAgICAgICA8IS0tIDxheHAtbGlzdC12aWV3LW9wdGlvbi1jb2x1bW5zIFt2aWV3TW9kZWxdPVwidm1cIj48L2F4cC1saXN0LXZpZXctb3B0aW9uLWNvbHVtbnM+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvYXgtcG9wb3Zlcj5cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAodm0uY2FuU29ydCgpKSB7XG4gICAgICA8ZGl2PlxuICAgICAgICA8YXgtYnV0dG9uIGlkPVwiYXhwLXRvb2xiYXItYnRuLXNvcnRcIiBbaWNvbk9ubHldPVwidHJ1ZVwiIFt0ZXh0XT1cIidTb3J0cydcIiAjc29ydEJ1dHRvbiBbY29sb3JdPVwiJ2RlZmF1bHQnXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1zb3J0LWFtb3VudC11cFwiPjwvaT5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDxheC1wb3BvdmVyXG4gICAgICAgICAgaWQ9XCJheHAtcG9wb3Zlci1zb3J0XCJcbiAgICAgICAgICBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgW29mZnNldFldPVwiMTBcIlxuICAgICAgICAgIFt0YXJnZXRdPVwic29ydEJ1dHRvblwiXG4gICAgICAgICAgW29wZW5Pbl09XCIndG9nZ2xlJ1wiXG4gICAgICAgICAgW2Nsb3NlT25dPVwiJ2NsaWNrT3V0J1wiXG4gICAgICAgICAgI3BvcG92ZXJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1saWdodGVzdC1zdXJmYWNlIGF4LXNoYWRvdy1tZCBheC1ib3JkZXIgbWQ6YXgtdy03MiBheC13LWZ1bGwgYXgtcm91bmRlZC1tZFwiPlxuICAgICAgICAgICAgPGF4LWhlYWRlciBjbGFzcz1cImF4LWJvcmRlci1iIGF4LWxpZ2h0ZXItc3VyZmFjZSBheC1yb3VuZGVkLXQtbWQgYXgtcC00IGF4LWZvbnQtYm9sZFwiPlxuICAgICAgICAgICAgICB7eyAnQGdlbmVyYWw6dGVybXMuY29tbW9uLnNvcnRzJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19XG4gICAgICAgICAgICA8L2F4LWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1weS0yIGF4LXB4LTRcIj5cbiAgICAgICAgICAgICAgPCEtLSA8YXhwLWxpc3Qtdmlldy1vcHRpb24tc29ydGluZyBbdmlld01vZGVsXT1cInZtXCI+PC9heHAtbGlzdC12aWV3LW9wdGlvbi1zb3J0aW5nPiAtLT5cbiAgICAgICAgICAgICAgPGF4cC1xdWVyeS1zb3J0c1xuICAgICAgICAgICAgICAgIFtzb3J0RGVmaW5pdGlvbnNdPVwic29ydERlZmluaXRpb25zKClcIlxuICAgICAgICAgICAgICAgIChzb3J0UXVlcmllc0NoYW5nZSk9XCJvblNvcnRRdWVyaWVzQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtpbml0aWFsU29ydFF1ZXJpZXNdPVwic29ydFF1ZXJpZXMoKVwiXG4gICAgICAgICAgICAgID48L2F4cC1xdWVyeS1zb3J0cz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2F4LXBvcG92ZXI+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChkZXZpY2VTZXJ2aWNlLmlzU21hbGwoKSkge1xuICAgICAgPGF4LWJ1dHRvblxuICAgICAgICBpZD1cImF4cC10b29sYmFyLWJ0bi1jYXRlZ29yeVwiXG4gICAgICAgIChvbkNsaWNrKT1cInBhcmVudC50b2dnbGVDYXRlZ29yeURyYXdlcigpXCJcbiAgICAgICAgW2ljb25Pbmx5XT1cInRydWVcIlxuICAgICAgICBbY29sb3JdPVwiJ2RlZmF1bHQnXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1iYXJzXCI+PC9pPlxuICAgICAgPC9heC1idXR0b24+XG4gICAgfVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19","import { AXActionSheetModule } from '@acorex/components/action-sheet';\nimport { AXDataTableModule, } from '@acorex/components/data-table';\nimport { AXDrawerModule } from '@acorex/components/drawer';\nimport { AXPlatform } from '@acorex/core/platform';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, effect, inject, signal, viewChild, } from '@angular/core';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { AXBadgeModule } from '@acorex/components/badge';\nimport { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogModule } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXFormModule } from '@acorex/components/form';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXPopoverModule } from '@acorex/components/popover';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXTabsModule } from '@acorex/components/tabs';\nimport { AXTooltipModule } from '@acorex/components/tooltip';\nimport { AXTranslationModule, translateSync } from '@acorex/core/translation';\nimport { AXPAuthModule } from '@acorex/platform/auth';\nimport { AXPThemeLayoutBlockComponent, AXPThemeLayoutStartSideComponent } from '@acorex/platform/layout/components';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXPWidgetsModule } from '@acorex/platform/layout/widgets';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { AXPLayoutThemeService } from '@acorex/platform/themes/shared';\nimport { AXPEntityCategoryComponent } from '../entity-category/entity-category.component';\nimport { AXPEntityMasterToolbarViewComponent } from '../entity-master-toolbar-view/entity-master-toolbar-view.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/core/platform\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/components/data-table\";\nimport * as i4 from \"@acorex/core/translation\";\nimport * as i5 from \"@acorex/platform/layout/widget-core\";\nimport * as i6 from \"@angular/common\";\nexport class AXPEntityMasterListViewComponent extends AXPPageLayoutBaseComponent {\n constructor(platform) {\n super();\n this.platform = platform;\n this.activeRoute = inject(ActivatedRoute);\n this.router = inject(Router);\n this.vm = this.activeRoute.snapshot.data['vm'];\n //\n this.store = inject(AXPLayoutThemeService);\n //\n this.searchBarShown = signal(true, ...(ngDevMode ? [{ debugName: \"searchBarShown\" }] : []));\n this.activeEndSideView = signal('column', ...(ngDevMode ? [{ debugName: \"activeEndSideView\" }] : []));\n this.categorySearchValue = signal('', ...(ngDevMode ? [{ debugName: \"categorySearchValue\" }] : []));\n // @ViewChild('grid', { static: true}) grid: AXDataTableComponent;\n this.grid = viewChild('grid', ...(ngDevMode ? [{ debugName: \"grid\" }] : []));\n this.initializedFromRoute = false;\n this.commandRowItems = computed(() => {\n return this.vm.primaryRowActions().map((c) => {\n return {\n icon: c.icon,\n name: c.name,\n text: translateSync(c.title),\n color: c.color,\n disabled: c.disabled,\n default: c.default,\n };\n });\n }, ...(ngDevMode ? [{ debugName: \"commandRowItems\" }] : []));\n this.getDropdownRowItems = (rowData) => {\n return Promise.resolve(this.dropdownRowItems(rowData));\n };\n this.getCommandRowItems = () => {\n return this.commandRowItems();\n };\n effect(() => {\n if (this.grid()) {\n this.grid().selectedRows = this.vm.selectedItems();\n }\n });\n //\n this.vm.events$.subscribe(async (e) => {\n const refreshTargetId = e.meta?.refreshTargetId;\n if (e.action == 'refresh') {\n if (refreshTargetId) {\n this.grid()?.refreshItemChildren(refreshTargetId);\n }\n else {\n this.grid()?.refresh({\n reset: false,\n });\n }\n }\n });\n // Keep URL query param `view` in sync with current vm view\n effect(() => {\n if (!this.initializedFromRoute) {\n return;\n }\n const currentViewName = this.vm.view().name;\n const urlView = this.activeRoute.snapshot.queryParamMap.get('view');\n if (currentViewName && currentViewName !== urlView) {\n this.router.navigate([], {\n relativeTo: this.activeRoute,\n queryParams: { view: currentViewName },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n });\n }\n async ngOnInit() {\n // React to external URL changes (back/forward navigation or deep links)\n this.queryParamSub = this.activeRoute.queryParamMap.subscribe(async (qp) => {\n const viewFromUrl = qp.get('view');\n await this.vm.setView(viewFromUrl);\n });\n }\n async ngAfterViewInit() {\n const viewFromUrl = this.activeRoute.snapshot.queryParamMap.get('view');\n await this.vm.setView(viewFromUrl);\n const resolvedView = this.vm.view().name;\n const currentUrlView = this.activeRoute.snapshot.queryParamMap.get('view');\n if (currentUrlView !== resolvedView) {\n this.router.navigate([], {\n relativeTo: this.activeRoute,\n queryParams: { view: resolvedView },\n queryParamsHandling: 'merge',\n replaceUrl: true,\n });\n }\n this.initializedFromRoute = true;\n }\n onColumnSizeChanged(e) {\n if (e.isUserInteraction && e.type === 'end') {\n this.vm.saveSettings('columnSizes', e.data);\n }\n }\n onPageChanged(e) {\n if (e.isUserInteraction) {\n const pageSizeChanged = e.take != this.vm.dataSource.pageSize;\n if (pageSizeChanged) {\n this.vm.saveSettings('pageSize', e.take);\n }\n }\n }\n onColumnsOrderChanged(e) {\n if (e.isUserInteraction) {\n this.vm.onColumnsOrderChanged(e.data.event);\n }\n }\n async dropdownRowItems(rowData) {\n return (await this.vm.secondaryRowActions(rowData)).map((c) => ({\n icon: c.icon,\n name: c.name,\n text: c.title,\n color: c.color,\n disabled: c.disabled,\n default: c.default,\n divided: c.separated,\n }));\n }\n async handleRowDbClick(e) {\n if (this.grid()?.dataSource.isLoading) {\n return;\n }\n const allItems = [...this.commandRowItems(), ...(await this.dropdownRowItems(e.data))];\n // const defaultAction = allItems.find((c) => (c as any).default) || allItems[0];\n const defaultAction = allItems.find((c) => {\n const commandName = c.name.split('&')[0];\n return (c.default || commandName === 'open-entity') && !c.disabled;\n });\n if (!defaultAction) {\n return;\n }\n const d = {\n component: e.component,\n name: defaultAction.name,\n data: e.data,\n };\n this.handleRowCommandClick(d);\n }\n async handleRowCommandClick(e) {\n if (this.grid()?.dataSource.isLoading) {\n return;\n }\n if (e.setLoading) {\n e.setLoading(true);\n }\n await this.vm.executeCommand(e.name, e.data);\n if (e.setLoading) {\n e.setLoading(false);\n }\n }\n async handleSelectedRowsChange(rows) {\n this.vm.selectedItems.set(rows);\n }\n makeResponsive(value) {\n if (this.platform.is('Mobile') || this.platform.is('SM')) {\n return '';\n }\n else {\n return value;\n }\n }\n toggleSideBar(sideBar) {\n this.toggleEndSide();\n if (sideBar) {\n this.activeEndSideView.set(sideBar);\n }\n }\n toggleSearchBar() {\n this.searchBarShown.update((v) => !v);\n }\n handleResetClick(sideBar) {\n switch (sideBar) {\n case 'filter': {\n this.vm.resetFilters();\n break;\n }\n case 'sort': {\n this.vm.resetSorts();\n break;\n }\n case 'column': {\n this.vm.resetColumns();\n break;\n }\n }\n }\n // protected handleDiscardClick(sideBar: 'filter' | 'sort' | 'column') {\n // switch (sideBar) {\n // case 'filter': {\n // this.vm.discardFilters();\n // break;\n // }\n // case 'sort': {\n // this.vm.resetSorts();\n // break;\n // }\n // case 'column': {\n // this.vm.resetColumns();\n // break;\n // }\n // }\n // }\n handleApplyClick(sideBar) {\n this.vm.applyFilterAndSort();\n this.toggleEndSide();\n }\n ngOnDestroy() {\n this.queryParamSub?.unsubscribe();\n this.vm.destroy();\n }\n toggleCategoryDrawer() {\n this.toggleStartSide();\n }\n getPageTitle() {\n return this.vm.title();\n }\n async getPageDescription() {\n const description = this.vm.description();\n if (description) {\n return this.translateService.translateAsync(description);\n }\n return '';\n }\n getPageBreadcrumbs() {\n return this.vm.beardcrumbs();\n }\n async getPrimaryMenuItems() {\n return (await this.vm.getPrimaryActions()).map((tr) => ({\n name: tr.name,\n title: tr.title,\n icon: tr.icon,\n color: tr.color,\n disabled: tr.disabled,\n command: {\n name: tr.name,\n options: tr.options,\n metadata: tr.metadata,\n },\n }));\n }\n async getSecondaryMenuItems() {\n return (await this.vm.getSecondaryActions()).map((tr) => ({\n name: tr.name,\n title: tr.title,\n icon: tr.icon,\n color: tr.color,\n disabled: tr.disabled,\n separated: tr.separated,\n command: {\n name: tr.name,\n options: tr.options,\n metadata: tr.metadata,\n },\n }));\n }\n async execute(command) {\n if (command) {\n this.vm.execute(command);\n }\n }\n handleUnselectAll() {\n this.vm.selectedItems.set([]);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityMasterListViewComponent, deps: [{ token: i1.AXPlatform }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXPEntityMasterListViewComponent, isStandalone: true, selector: \"axp-entity-master-list\", providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPEntityMasterListViewComponent,\n },\n ], viewQueries: [{ propertyName: \"grid\", first: true, predicate: [\"grid\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout *translate=\\\"let t\\\">\\n @if (vm.entityDef.category) {\\n <axp-layout-start-side id=\\\"axp-entity-category-drawer\\\">\\n <axp-entity-category\\n id=\\\"axp-entity-category\\\"\\n class=\\\"ax-w-80\\\"\\n [vm]=\\\"vm\\\"\\n [searchValue]=\\\"categorySearchValue()\\\"\\n ></axp-entity-category>\\n </axp-layout-start-side>\\n }\\n <axp-page-toolbar id=\\\"axp-entity-toolbar\\\">\\n <axp-entity-master-toolbar-view [viewModel]=\\\"vm\\\"></axp-entity-master-toolbar-view>\\n </axp-page-toolbar>\\n <axp-page-content class=\\\"ax-overflow-auto ax-pt-0\\\">\\n <div\\n class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-1 ax-pb-1\\\"\\n [class.ax-invisible]=\\\"!grid.selectedRows.length\\\"\\n >\\n <span\\n >{{ grid.selectedRows.length }}\\n <span>{{ '@general:terms.interface.items-selected' | translate | async }}</span>\\n </span>\\n <ax-button text=\\\"@general:terms.interface.unselect-all\\\" class=\\\"ax-xs\\\" (onClick)=\\\"handleUnselectAll()\\\"></ax-button>\\n </div>\\n <ax-data-table\\n id=\\\"axp-entity-table\\\"\\n [allowReordering]=\\\"true\\\"\\n (onColumnsOrderChanged)=\\\"onColumnsOrderChanged($event)\\\"\\n #grid\\n [showFooter]=\\\"false\\\"\\n class=\\\"ax-flex-1\\\"\\n [paging]=\\\"true\\\"\\n [fetchDataMode]=\\\"'manual'\\\"\\n [parentField]=\\\"vm.parentKey()\\\"\\n [loading]=\\\"{ enabled: true, animation: true }\\\"\\n [dataSource]=\\\"vm.dataSource\\\"\\n (selectedRowsChange)=\\\"handleSelectedRowsChange($event)\\\"\\n (onRowDbClick)=\\\"handleRowDbClick($event)\\\"\\n (onColumnSizeChanged)=\\\"onColumnSizeChanged($event)\\\"\\n (onPageChanged)=\\\"onPageChanged($event)\\\"\\n >\\n @if (vm.view().indexCol === true) {\\n <ax-index-column id=\\\"axp-table-col-index\\\" fixed=\\\"start\\\" [width]=\\\"'80px'\\\" [padZero]=\\\"true\\\"></ax-index-column>\\n }\\n @if (vm.selectedScopeActionsCount()) {\\n <ax-select-column id=\\\"axp-table-col-select\\\" fixed=\\\"start\\\" [width]=\\\"'60px'\\\"></ax-select-column>\\n }\\n @for (col of vm.columns(); track col.name) {\\n @if (col.visible) {\\n <axp-widget-column-renderer\\n [attr.id]=\\\"'axp-table-col-' + col.name\\\"\\n [expandHandler]=\\\"$index === 0 && vm.parentKey() ? true : false\\\"\\n [caption]=\\\"(col.title | translate | async)!\\\"\\n [node]=\\\"col.node()\\\"\\n [customWidth]=\\\"col.width\\\"\\n ></axp-widget-column-renderer>\\n }\\n }\\n @if (getCommandRowItems().length) {\\n <ax-command-column\\n id=\\\"axp-table-col-commands\\\"\\n fixed=\\\"end\\\"\\n [width]=\\\"getCommandRowItems().length * 70 + 'px'\\\"\\n [items]=\\\"getCommandRowItems()\\\"\\n (onItemClick)=\\\"handleRowCommandClick($event)\\\"\\n ></ax-command-column>\\n }\\n <ax-dropdown-command-column\\n id=\\\"axp-table-col-dropdown-commands\\\"\\n fixed=\\\"end\\\"\\n [width]=\\\"'60px'\\\"\\n [items]=\\\"getDropdownRowItems\\\"\\n (onItemClick)=\\\"handleRowCommandClick($event)\\\"\\n ></ax-dropdown-command-column>\\n </ax-data-table>\\n </axp-page-content>\\n</axp-page-layout>\\n\", styles: [\"axp-entity-master-list axp-layout-start-side{min-width:20rem!important;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-entity-master-list axp-layout-header{padding-bottom:.25rem!important}.cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}.view-drawer{width:85vw}@media (min-width: 768px){.view-drawer{width:45vw}}@media (min-width: 1024px){.view-drawer{width:35vw}}@media (min-width: 1536px){.view-drawer{width:20vw}}.view-drawer{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));border-inline-start-width:1px;border-inline-start-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));border-top-width:1px;--tw-border-opacity: 1;border-top-color:rgba(var(--ax-sys-color-primary-600),var(--tw-border-opacity, 1))}.view-drawer ax-header{display:flex;align-items:center;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1));padding:.5rem 1rem}.view-drawer ax-header h2{font-size:1.25rem;line-height:1.75rem;font-weight:700;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lighter-surface),var(--tw-text-opacity, 1))}.view-drawer ax-footer{position:absolute!important;bottom:0!important;width:100%!important;justify-content:flex-start!important;border-top-width:1px!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1))!important;padding:.5rem 1rem!important}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: RouterModule }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"ngmodule\", type: AXPopoverModule }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"ngmodule\", type: AXActionSheetModule }, { kind: \"ngmodule\", type: AXDrawerModule }, { kind: \"ngmodule\", type: AXDialogModule }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"ngmodule\", type: AXTabsModule }, { kind: \"ngmodule\", type: AXTooltipModule }, { kind: \"ngmodule\", type: AXBreadcrumbsModule }, { kind: \"ngmodule\", type: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXSearchBoxModule }, { kind: \"ngmodule\", type: AXDataTableModule }, { kind: \"component\", type: i3.AXDataTableComponent, selector: \"ax-data-table\", inputs: [\"dataSource\", \"selectedRows\", \"parentField\", \"rowDetailsTemplate\", \"rowTemplate\", \"emptyTemplate\", \"noDataTemplate\", \"alternative\", \"showHeader\", \"fixedHeader\", \"showFooter\", \"fixedFooter\", \"itemHeight\", \"allowReordering\", \"paging\", \"fetchDataMode\", \"loading\", \"focusedRow\"], outputs: [\"selectedRowsChange\", \"focusedRowChange\", \"onRowClick\", \"onRowDbClick\", \"onColumnsOrderChanged\", \"onColumnSizeChanged\", \"onPageChanged\"] }, { kind: \"component\", type: i3.AXRowIndexColumnComponent, selector: \"ax-index-column\", inputs: [\"width\", \"caption\", \"fixed\", \"footerTemplate\", \"padZero\"] }, { kind: \"component\", type: i3.AXRowSelectColumnComponent, selector: \"ax-select-column\", inputs: [\"width\", \"caption\", \"fixed\"] }, { kind: \"component\", type: i3.AXRowCommandColumnComponent, selector: \"ax-command-column\", inputs: [\"width\", \"caption\", \"fixed\", \"footerTemplate\", \"items\"], outputs: [\"onItemClick\"] }, { kind: \"component\", type: i3.AXRowDropdownCommandColumnComponent, selector: \"ax-dropdown-command-column\", inputs: [\"width\", \"caption\", \"fixed\", \"footerTemplate\", \"emptyStateTemplate\", \"emptyStateText\", \"items\"], outputs: [\"onItemClick\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"directive\", type: i4.AXTranslatorDirective, selector: \"[translate]\" }, { kind: \"ngmodule\", type: DragDropModule }, { kind: \"ngmodule\", type: \n //\n AXPWidgetCoreModule }, { kind: \"component\", type: i5.AXPWidgetColumnRendererComponent, selector: \"axp-widget-column-renderer\", inputs: [\"caption\", \"customExpandIcon\", \"customCollapseIcon\", \"customWidth\", \"node\", \"footerTemplate\", \"expandHandler\", \"cellTemplate\", \"headerTemplate\"] }, { kind: \"ngmodule\", type: AXPWidgetsModule }, { kind: \"ngmodule\", type: AXPAuthModule }, { kind: \"component\", type: \n //\n AXPEntityMasterToolbarViewComponent, selector: \"axp-entity-master-toolbar-view\", inputs: [\"viewModel\"] }, { kind: \"component\", type: \n //\n AXPPageLayoutComponent, selector: \"axp-page-layout\" }, { kind: \"component\", type: AXPThemeLayoutBlockComponent, selector: \" axp-page-content, axp-page-footer-container, axp-page-footer, axp-page-header, axp-page-header-container, axp-page-toolbar, axp-layout-content, axp-layout-page-content, axp-layout-sections, axp-layout-body, axp-layout-page-body, axp-layout-prefix, axp-layout-suffix, axp-layout-title-bar, axp-layout-title, axp-layout-title-actions, axp-layout-nav-button, axp-layout-description, axp-layout-breadcrumbs, axp-layout-list-action, \" }, { kind: \"component\", type: AXPThemeLayoutStartSideComponent, selector: \"axp-layout-page-start-side, axp-layout-start-side\" }, { kind: \"component\", type: AXPEntityCategoryComponent, selector: \"axp-entity-category\", inputs: [\"vm\", \"searchValue\", \"selectMode\", \"selectionBehavior\", \"dragArea\", \"dragBehavior\", \"showIcons\", \"showChildrenBadge\", \"expandedIcon\", \"collapsedIcon\", \"indentSize\", \"look\", \"searchWithChildren\"] }, { kind: \"pipe\", type: i6.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i4.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPEntityMasterListViewComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-entity-master-list', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n CommonModule,\n FormsModule,\n RouterModule,\n AXButtonModule,\n AXDecoratorModule,\n AXBadgeModule,\n AXDropdownModule,\n AXPopoverModule,\n AXFormModule,\n AXActionSheetModule,\n AXDrawerModule,\n AXDialogModule,\n AXLoadingModule,\n AXTabsModule,\n AXTooltipModule,\n AXBreadcrumbsModule,\n AXDropdownButtonModule,\n AXSearchBoxModule,\n AXDataTableModule,\n AXTranslationModule,\n DragDropModule,\n //\n AXPWidgetCoreModule,\n AXPWidgetsModule,\n AXPAuthModule,\n //\n AXPEntityMasterToolbarViewComponent,\n //\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXDropdownButtonModule,\n AXPThemeLayoutStartSideComponent,\n AXPEntityCategoryComponent,\n ], providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXPEntityMasterListViewComponent,\n },\n ], template: \"<axp-page-layout *translate=\\\"let t\\\">\\n @if (vm.entityDef.category) {\\n <axp-layout-start-side id=\\\"axp-entity-category-drawer\\\">\\n <axp-entity-category\\n id=\\\"axp-entity-category\\\"\\n class=\\\"ax-w-80\\\"\\n [vm]=\\\"vm\\\"\\n [searchValue]=\\\"categorySearchValue()\\\"\\n ></axp-entity-category>\\n </axp-layout-start-side>\\n }\\n <axp-page-toolbar id=\\\"axp-entity-toolbar\\\">\\n <axp-entity-master-toolbar-view [viewModel]=\\\"vm\\\"></axp-entity-master-toolbar-view>\\n </axp-page-toolbar>\\n <axp-page-content class=\\\"ax-overflow-auto ax-pt-0\\\">\\n <div\\n class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-1 ax-pb-1\\\"\\n [class.ax-invisible]=\\\"!grid.selectedRows.length\\\"\\n >\\n <span\\n >{{ grid.selectedRows.length }}\\n <span>{{ '@general:terms.interface.items-selected' | translate | async }}</span>\\n </span>\\n <ax-button text=\\\"@general:terms.interface.unselect-all\\\" class=\\\"ax-xs\\\" (onClick)=\\\"handleUnselectAll()\\\"></ax-button>\\n </div>\\n <ax-data-table\\n id=\\\"axp-entity-table\\\"\\n [allowReordering]=\\\"true\\\"\\n (onColumnsOrderChanged)=\\\"onColumnsOrderChanged($event)\\\"\\n #grid\\n [showFooter]=\\\"false\\\"\\n class=\\\"ax-flex-1\\\"\\n [paging]=\\\"true\\\"\\n [fetchDataMode]=\\\"'manual'\\\"\\n [parentField]=\\\"vm.parentKey()\\\"\\n [loading]=\\\"{ enabled: true, animation: true }\\\"\\n [dataSource]=\\\"vm.dataSource\\\"\\n (selectedRowsChange)=\\\"handleSelectedRowsChange($event)\\\"\\n (onRowDbClick)=\\\"handleRowDbClick($event)\\\"\\n (onColumnSizeChanged)=\\\"onColumnSizeChanged($event)\\\"\\n (onPageChanged)=\\\"onPageChanged($event)\\\"\\n >\\n @if (vm.view().indexCol === true) {\\n <ax-index-column id=\\\"axp-table-col-index\\\" fixed=\\\"start\\\" [width]=\\\"'80px'\\\" [padZero]=\\\"true\\\"></ax-index-column>\\n }\\n @if (vm.selectedScopeActionsCount()) {\\n <ax-select-column id=\\\"axp-table-col-select\\\" fixed=\\\"start\\\" [width]=\\\"'60px'\\\"></ax-select-column>\\n }\\n @for (col of vm.columns(); track col.name) {\\n @if (col.visible) {\\n <axp-widget-column-renderer\\n [attr.id]=\\\"'axp-table-col-' + col.name\\\"\\n [expandHandler]=\\\"$index === 0 && vm.parentKey() ? true : false\\\"\\n [caption]=\\\"(col.title | translate | async)!\\\"\\n [node]=\\\"col.node()\\\"\\n [customWidth]=\\\"col.width\\\"\\n ></axp-widget-column-renderer>\\n }\\n }\\n @if (getCommandRowItems().length) {\\n <ax-command-column\\n id=\\\"axp-table-col-commands\\\"\\n fixed=\\\"end\\\"\\n [width]=\\\"getCommandRowItems().length * 70 + 'px'\\\"\\n [items]=\\\"getCommandRowItems()\\\"\\n (onItemClick)=\\\"handleRowCommandClick($event)\\\"\\n ></ax-command-column>\\n }\\n <ax-dropdown-command-column\\n id=\\\"axp-table-col-dropdown-commands\\\"\\n fixed=\\\"end\\\"\\n [width]=\\\"'60px'\\\"\\n [items]=\\\"getDropdownRowItems\\\"\\n (onItemClick)=\\\"handleRowCommandClick($event)\\\"\\n ></ax-dropdown-command-column>\\n </ax-data-table>\\n </axp-page-content>\\n</axp-page-layout>\\n\", styles: [\"axp-entity-master-list axp-layout-start-side{min-width:20rem!important;border-inline-end-width:1px;background-color:rgb(var(--ax-sys-color-lightest-surface));color:rgb(var(--ax-sys-color-on-lightest-surface));border-color:rgb(var(--ax-sys-color-border-lightest-surface))}axp-entity-master-list axp-layout-header{padding-bottom:.25rem!important}.cdk-drag-preview{border-radius:.375rem;border-width:1px;--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow);background:rgba(var(--ax-color-on-surface));padding:.5rem;height:max-content!important}.collapsed-search-box{margin-top:0;height:0px;opacity:0}.view-drawer{width:85vw}@media (min-width: 768px){.view-drawer{width:45vw}}@media (min-width: 1024px){.view-drawer{width:35vw}}@media (min-width: 1536px){.view-drawer{width:20vw}}.view-drawer{--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lightest-surface),var(--tw-bg-opacity, 1));border-inline-start-width:1px;border-inline-start-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));border-top-width:1px;--tw-border-opacity: 1;border-top-color:rgba(var(--ax-sys-color-primary-600),var(--tw-border-opacity, 1))}.view-drawer ax-header{display:flex;align-items:center;border-bottom-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-lighter-surface),var(--tw-bg-opacity, 1));padding:.5rem 1rem}.view-drawer ax-header h2{font-size:1.25rem;line-height:1.75rem;font-weight:700;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-on-lighter-surface),var(--tw-text-opacity, 1))}.view-drawer ax-footer{position:absolute!important;bottom:0!important;width:100%!important;justify-content:flex-start!important;border-top-width:1px!important;--tw-border-opacity: 1 !important;border-color:rgba(var(--ax-sys-color-border-lightest-surface),var(--tw-border-opacity, 1))!important;padding:.5rem 1rem!important}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.AXPlatform }], propDecorators: { grid: [{ type: i0.ViewChild, args: ['grid', { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW1hc3Rlci1saXN0LXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvZW50aXR5LWxheW91dHMvZW50aXR5LW1hc3Rlci1saXN0LXZpZXcvZW50aXR5LW1hc3Rlci1saXN0LXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvZW50aXR5LWxheW91dHMvZW50aXR5LW1hc3Rlci1saXN0LXZpZXcvZW50aXR5LW1hc3Rlci1saXN0LXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUdMLGlCQUFpQixHQUtsQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIs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LG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLEVBQUU7d0JBQ0YsbUNBQW1DO3dCQUNuQyxFQUFFO3dCQUNGLHNCQUFzQjt3QkFDdEIsNEJBQTRCO3dCQUM1QixzQkFBc0I7d0JBQ3RCLGdDQUFnQzt3QkFDaEMsMEJBQTBCO3FCQUMzQixhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsa0NBQWtDO3lCQUM5QztxQkFDRjttSEFpQmdELE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEFjdGlvblNoZWV0TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2FjdGlvbi1zaGVldCc7XG5pbXBvcnQge1xuICBBWENvbHVtbnNPcmRlckNoYW5nZWRFdmVudCxcbiAgQVhEYXRhVGFibGVDb21wb25lbnQsXG4gIEFYRGF0YVRhYmxlTW9kdWxlLFxuICBBWERhdGFUYWJsZVJvd0RiQ2xpY2ssXG4gIEFYUm93Q29tbWFuZEl0ZW0sXG4gIEFYUm93Q29tbWFuZEl0ZW1DbGlja0V2ZW50LFxuICBvbkNvbHVtblNpemVDaGFuZ2VkRXZlbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kYXRhLXRhYmxlJztcbmltcG9ydCB7IEFYRHJhd2VyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RyYXdlcic7XG5pbXBvcnQgeyBBWFBsYXRmb3JtIH0gZnJvbSAnQGFjb3JleC9jb3JlL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEFYQmFkZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQVhCcmVhZGNydW1ic01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9icmVhZGNydW1icyc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEYXRhUGFnZXJDaGFuZ2VkRXZlbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGF0YS1wYWdlcic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RpYWxvZyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEFYRm9ybU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCB7IEFYTG9hZGluZ01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sb2FkaW5nJztcbmltcG9ydCB7IEFYUG9wb3Zlck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEFYU2VhcmNoQm94TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NlYXJjaC1ib3gnO1xuaW1wb3J0IHsgQVhUYWJzTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RhYnMnO1xuaW1wb3J0IHsgQVhUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSwgdHJhbnNsYXRlU3luYyB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBBdXRoTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsIEFYUFRoZW1lTGF5b3V0U3RhcnRTaWRlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld01vZGVsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUFdpZGdldENvcmVNb2R1bGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBBWFBXaWRnZXRzTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0cyc7XG5pbXBvcnQgeyBEcmFnRHJvcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBBWERyb3Bkb3duQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBBWFBBY3Rpb25NZW51SXRlbSwgQVhQQnJlYWRjcnVtYkl0ZW0sIEFYUEV4ZWN1dGVDb21tYW5kIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUFBhZ2VMYXlvdXRCYXNlLCBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCwgQVhQUGFnZUxheW91dENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3ZpZXdzJztcbmltcG9ydCB7IEFYUExheW91dFRoZW1lU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vdGhlbWVzL3NoYXJlZCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUEVudGl0eUNhdGVnb3J5Q29tcG9uZW50IH0gZnJvbSAnLi4vZW50aXR5LWNhdGVnb3J5L2VudGl0eS1jYXRlZ29yeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhQRW50aXR5TWFzdGVyVG9vbGJhclZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9lbnRpdHktbWFzdGVyLXRvb2xiYXItdmlldy9lbnRpdHktbWFzdGVyLXRvb2xiYXItdmlldy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdlbnRpdHktbWFzdGVyLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydlbnRpdHktbWFzdGVyLWxpc3Qtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICBzZWxlY3RvcjogJ2F4cC1lbnRpdHktbWFzdGVyLWxpc3QnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhCYWRnZU1vZHVsZSxcbiAgICBBWERyb3Bkb3duTW9kdWxlLFxuICAgIEFYUG9wb3Zlck1vZHVsZSxcbiAgICBBWEZvcm1Nb2R1bGUsXG4gICAgQVhBY3Rpb25TaGVldE1vZHVsZSxcbiAgICBBWERyYXdlck1vZHVsZSxcbiAgICBBWERpYWxvZ01vZHVsZSxcbiAgICBBWExvYWRpbmdNb2R1bGUsXG4gICAgQVhUYWJzTW9kdWxlLFxuICAgIEFYVG9vbHRpcE1vZHVsZSxcbiAgICBBWEJyZWFkY3J1bWJzTW9kdWxlLFxuICAgIEFYRHJvcGRvd25CdXR0b25Nb2R1bGUsXG4gICAgQVhTZWFyY2hCb3hNb2R1bGUsXG4gICAgQVhEYXRhVGFibGVNb2R1bGUsXG4gICAgQVhUcmFuc2xhdGlvbk1vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICAvL1xuICAgIEFYUFdpZGdldENvcmVNb2R1bGUsXG4gICAgQVhQV2lkZ2V0c01vZHVsZSxcbiAgICBBWFBBdXRoTW9kdWxlLFxuICAgIC8vXG4gICAgQVhQRW50aXR5TWFzdGVyVG9vbGJhclZpZXdDb21wb25lbnQsXG4gICAgLy9cbiAgICBBWFBQYWdlTGF5b3V0Q29tcG9uZW50LFxuICAgIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gICAgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSxcbiAgICBBWFBUaGVtZUxheW91dFN0YXJ0U2lkZUNvbXBvbmVudCxcbiAgICBBWFBFbnRpdHlDYXRlZ29yeUNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQUGFnZUxheW91dEJhc2UsXG4gICAgICB1c2VFeGlzdGluZzogQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdDb21wb25lbnQsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdDb21wb25lbnQgZXh0ZW5kcyBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgYWN0aXZlUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB2bSA9IHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QuZGF0YVsndm0nXSBhcyBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld01vZGVsO1xuXG4gIC8vXG4gIHByb3RlY3RlZCBzdG9yZSA9IGluamVjdChBWFBMYXlvdXRUaGVtZVNlcnZpY2UpO1xuICAvL1xuICBwcm90ZWN0ZWQgc2VhcmNoQmFyU2hvd24gPSBzaWduYWwodHJ1ZSk7XG4gIHByb3RlY3RlZCBhY3RpdmVFbmRTaWRlVmlldyA9IHNpZ25hbDwnY29sdW1uJyB8ICdmaWx0ZXInIHwgJ3NvcnQnPignY29sdW1uJyk7XG5cbiAgcHJvdGVjdGVkIGNhdGVnb3J5U2VhcmNoVmFsdWUgPSBzaWduYWwoJycpO1xuXG4gIC8vIEBWaWV3Q2hpbGQoJ2dyaWQnLCB7IHN0YXRpYzogdHJ1ZX0pIGdyaWQ6IEFYRGF0YVRhYmxlQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgZ3JpZCA9IHZpZXdDaGlsZDxBWERhdGFUYWJsZUNvbXBvbmVudD4oJ2dyaWQnKTtcbiAgcHJpdmF0ZSBxdWVyeVBhcmFtU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGluaXRpYWxpemVkRnJvbVJvdXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHBsYXRmb3JtOiBBWFBsYXRmb3JtKSB7XG4gICAgc3VwZXIoKTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JpZCgpIS5zZWxlY3RlZFJvd3MgPSB0aGlzLnZtLnNlbGVjdGVkSXRlbXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMudm0uZXZlbnRzJC5zdWJzY3JpYmUoYXN5bmMgKGUpID0+IHtcbiAgICAgIGNvbnN0IHJlZnJlc2hUYXJnZXRJZCA9IGUubWV0YT8ucmVmcmVzaFRhcmdldElkO1xuICAgICAgaWYgKGUuYWN0aW9uID09ICdyZWZyZXNoJykge1xuICAgICAgICBpZiAocmVmcmVzaFRhcmdldElkKSB7XG4gICAgICAgICAgdGhpcy5ncmlkKCk/LnJlZnJlc2hJdGVtQ2hpbGRyZW4ocmVmcmVzaFRhcmdldElkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmdyaWQoKT8ucmVmcmVzaCh7XG4gICAgICAgICAgICByZXNldDogZmFsc2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEtlZXAgVVJMIHF1ZXJ5IHBhcmFtIGB2aWV3YCBpbiBzeW5jIHdpdGggY3VycmVudCB2bSB2aWV3XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZEZyb21Sb3V0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50Vmlld05hbWUgPSB0aGlzLnZtLnZpZXcoKS5uYW1lO1xuICAgICAgY29uc3QgdXJsVmlldyA9IHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ3ZpZXcnKTtcbiAgICAgIGlmIChjdXJyZW50Vmlld05hbWUgJiYgY3VycmVudFZpZXdOYW1lICE9PSB1cmxWaWV3KSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmVSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtczogeyB2aWV3OiBjdXJyZW50Vmlld05hbWUgfSxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUmVhY3QgdG8gZXh0ZXJuYWwgVVJMIGNoYW5nZXMgKGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uIG9yIGRlZXAgbGlua3MpXG4gICAgdGhpcy5xdWVyeVBhcmFtU3ViID0gdGhpcy5hY3RpdmVSb3V0ZS5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZShhc3luYyAocXApID0+IHtcbiAgICAgIGNvbnN0IHZpZXdGcm9tVXJsID0gcXAuZ2V0KCd2aWV3Jyk7XG4gICAgICBhd2FpdCB0aGlzLnZtLnNldFZpZXcodmlld0Zyb21VcmwpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHZpZXdGcm9tVXJsID0gdGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgndmlldycpO1xuICAgIGF3YWl0IHRoaXMudm0uc2V0Vmlldyh2aWV3RnJvbVVybCk7XG5cbiAgICBjb25zdCByZXNvbHZlZFZpZXcgPSB0aGlzLnZtLnZpZXcoKS5uYW1lO1xuICAgIGNvbnN0IGN1cnJlbnRVcmxWaWV3ID0gdGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgndmlldycpO1xuICAgIGlmIChjdXJyZW50VXJsVmlldyAhPT0gcmVzb2x2ZWRWaWV3KSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2ZVJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogeyB2aWV3OiByZXNvbHZlZFZpZXcgfSxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVkRnJvbVJvdXRlID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNvbHVtblNpemVDaGFuZ2VkKGU6IG9uQ29sdW1uU2l6ZUNoYW5nZWRFdmVudCkge1xuICAgIGlmIChlLmlzVXNlckludGVyYWN0aW9uICYmIGUudHlwZSA9PT0gJ2VuZCcpIHtcbiAgICAgIHRoaXMudm0uc2F2ZVNldHRpbmdzKCdjb2x1bW5TaXplcycsIGUuZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uUGFnZUNoYW5nZWQoZTogQVhEYXRhUGFnZXJDaGFuZ2VkRXZlbnQpIHtcbiAgICBpZiAoZS5pc1VzZXJJbnRlcmFjdGlvbikge1xuICAgICAgY29uc3QgcGFnZVNpemVDaGFuZ2VkID0gZS50YWtlICE9IHRoaXMudm0uZGF0YVNvdXJjZS5wYWdlU2l6ZTtcbiAgICAgIGlmIChwYWdlU2l6ZUNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy52bS5zYXZlU2V0dGluZ3MoJ3BhZ2VTaXplJywgZS50YWtlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Db2x1bW5zT3JkZXJDaGFuZ2VkKGU6IEFYQ29sdW1uc09yZGVyQ2hhbmdlZEV2ZW50KSB7XG4gICAgaWYgKGUuaXNVc2VySW50ZXJhY3Rpb24pIHtcbiAgICAgIHRoaXMudm0ub25Db2x1bW5zT3JkZXJDaGFuZ2VkKGUuZGF0YS5ldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRyb3Bkb3duUm93SXRlbXMocm93RGF0YTogYW55KTogUHJvbWlzZTxBWFJvd0NvbW1hbmRJdGVtW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMudm0uc2Vjb25kYXJ5Um93QWN0aW9ucyhyb3dEYXRhKSkubWFwKChjKSA9PiAoe1xuICAgICAgaWNvbjogYy5pY29uLFxuICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgdGV4dDogYy50aXRsZSxcbiAgICAgIGNvbG9yOiBjLmNvbG9yLFxuICAgICAgZGlzYWJsZWQ6IGMuZGlzYWJsZWQsXG4gICAgICBkZWZhdWx0OiBjLmRlZmF1bHQsXG4gICAgICBkaXZpZGVkOiBjLnNlcGFyYXRlZCxcbiAgICB9KSkgYXMgQVhSb3dDb21tYW5kSXRlbVtdO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21tYW5kUm93SXRlbXMgPSBjb21wdXRlZDxBWFJvd0NvbW1hbmRJdGVtW10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy52bS5wcmltYXJ5Um93QWN0aW9ucygpLm1hcCgoYykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogYy5pY29uLFxuICAgICAgICBuYW1lOiBjLm5hbWUsXG4gICAgICAgIHRleHQ6IHRyYW5zbGF0ZVN5bmMoYy50aXRsZSksXG4gICAgICAgIGNvbG9yOiBjLmNvbG9yLFxuICAgICAgICBkaXNhYmxlZDogYy5kaXNhYmxlZCxcbiAgICAgICAgZGVmYXVsdDogYy5kZWZhdWx0LFxuICAgICAgfSBhcyBBWFJvd0NvbW1hbmRJdGVtO1xuICAgIH0pO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlUm93RGJDbGljayhlOiBBWERhdGFUYWJsZVJvd0RiQ2xpY2spIHtcbiAgICBpZiAodGhpcy5ncmlkKCk/LmRhdGFTb3VyY2UuaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFsbEl0ZW1zID0gWy4uLnRoaXMuY29tbWFuZFJvd0l0ZW1zKCksIC4uLihhd2FpdCB0aGlzLmRyb3Bkb3duUm93SXRlbXMoZS5kYXRhKSldO1xuICAgIC8vIGNvbnN0IGRlZmF1bHRBY3Rpb24gPSBhbGxJdGVtcy5maW5kKChjKSA9PiAoYyBhcyBhbnkpLmRlZmF1bHQpIHx8IGFsbEl0ZW1zWzBdO1xuXG4gICAgY29uc3QgZGVmYXVsdEFjdGlvbiA9IGFsbEl0ZW1zLmZpbmQoKGMpID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gYy5uYW1lLnNwbGl0KCcmJylbMF07XG4gICAgICByZXR1cm4gKChjIGFzIGFueSkuZGVmYXVsdCB8fCBjb21tYW5kTmFtZSA9PT0gJ29wZW4tZW50aXR5JykgJiYgIWMuZGlzYWJsZWQ7XG4gICAgfSk7XG5cbiAgICBpZiAoIWRlZmF1bHRBY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCA9IHtcbiAgICAgIGNvbXBvbmVudDogZS5jb21wb25lbnQsXG4gICAgICBuYW1lOiBkZWZhdWx0QWN0aW9uLm5hbWUsXG4gICAgICBkYXRhOiBlLmRhdGEsXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZVJvd0NvbW1hbmRDbGljayhkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREcm9wZG93blJvd0l0ZW1zID0gKHJvd0RhdGE6IHVua25vd24pOiBQcm9taXNlPEFYUm93Q29tbWFuZEl0ZW1bXT4gPT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5kcm9wZG93blJvd0l0ZW1zKHJvd0RhdGEpKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZ2V0Q29tbWFuZFJvd0l0ZW1zID0gKCk6IEFYUm93Q29tbWFuZEl0ZW1bXSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZFJvd0l0ZW1zKCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVJvd0NvbW1hbmRDbGljayhlOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCkge1xuICAgIGlmICh0aGlzLmdyaWQoKT8uZGF0YVNvdXJjZS5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGUuc2V0TG9hZGluZykge1xuICAgICAgZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnZtLmV4ZWN1dGVDb21tYW5kKGUubmFtZSwgZS5kYXRhKTtcbiAgICBpZiAoZS5zZXRMb2FkaW5nKSB7XG4gICAgICBlLnNldExvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVTZWxlY3RlZFJvd3NDaGFuZ2Uocm93czogdW5rbm93bltdKSB7XG4gICAgdGhpcy52bS5zZWxlY3RlZEl0ZW1zLnNldChyb3dzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYWtlUmVzcG9uc2l2ZTx0Pih2YWx1ZTogdCk6IHQgfCBzdHJpbmcge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdNb2JpbGUnKSB8fCB0aGlzLnBsYXRmb3JtLmlzKCdTTScpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU2lkZUJhcihzaWRlQmFyPzogJ2NvbHVtbicgfCAnZmlsdGVyJyB8ICdzb3J0Jykge1xuICAgIHRoaXMudG9nZ2xlRW5kU2lkZSgpO1xuICAgIGlmIChzaWRlQmFyKSB7XG4gICAgICB0aGlzLmFjdGl2ZUVuZFNpZGVWaWV3LnNldChzaWRlQmFyKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU2VhcmNoQmFyKCkge1xuICAgIHRoaXMuc2VhcmNoQmFyU2hvd24udXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlUmVzZXRDbGljayhzaWRlQmFyOiAnZmlsdGVyJyB8ICdzb3J0JyB8ICdjb2x1bW4nKSB7XG4gICAgc3dpdGNoIChzaWRlQmFyKSB7XG4gICAgICBjYXNlICdmaWx0ZXInOiB7XG4gICAgICAgIHRoaXMudm0ucmVzZXRGaWx0ZXJzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc29ydCc6IHtcbiAgICAgICAgdGhpcy52bS5yZXNldFNvcnRzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICB0aGlzLnZtLnJlc2V0Q29sdW1ucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBwcm90ZWN0ZWQgaGFuZGxlRGlzY2FyZENsaWNrKHNpZGVCYXI6ICdmaWx0ZXInIHwgJ3NvcnQnIHwgJ2NvbHVtbicpIHtcbiAgLy8gICBzd2l0Y2ggKHNpZGVCYXIpIHtcbiAgLy8gICAgIGNhc2UgJ2ZpbHRlcic6IHtcbiAgLy8gICAgICAgdGhpcy52bS5kaXNjYXJkRmlsdGVycygpO1xuICAvLyAgICAgICBicmVhaztcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNhc2UgJ3NvcnQnOiB7XG4gIC8vICAgICAgIHRoaXMudm0ucmVzZXRTb3J0cygpO1xuICAvLyAgICAgICBicmVhaztcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgLy8gICAgICAgdGhpcy52bS5yZXNldENvbHVtbnMoKTtcbiAgLy8gICAgICAgYnJlYWs7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUFwcGx5Q2xpY2soc2lkZUJhcjogJ2ZpbHRlcicgfCAnc29ydCcgfCAnY29sdW1uJykge1xuICAgIHRoaXMudm0uYXBwbHlGaWx0ZXJBbmRTb3J0KCk7XG4gICAgdGhpcy50b2dnbGVFbmRTaWRlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1TdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy52bS5kZXN0cm95KCk7XG4gIH1cblxuICB0b2dnbGVDYXRlZ29yeURyYXdlcigpIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXJ0U2lkZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0UGFnZVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudm0udGl0bGUoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VEZXNjcmlwdGlvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy52bS5kZXNjcmlwdGlvbigpO1xuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYyhkZXNjcmlwdGlvbik7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFBhZ2VCcmVhZGNydW1icygpOiBBWFBCcmVhZGNydW1iSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy52bS5iZWFyZGNydW1icygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UHJpbWFyeU1lbnVJdGVtcygpOiBQcm9taXNlPEFYUEFjdGlvbk1lbnVJdGVtW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMudm0uZ2V0UHJpbWFyeUFjdGlvbnMoKSkubWFwKFxuICAgICAgKHRyKSA9PlxuICAgICAgICAoe1xuICAgICAgICAgIG5hbWU6IHRyLm5hbWUsXG4gICAgICAgICAgdGl0bGU6IHRyLnRpdGxlLFxuICAgICAgICAgIGljb246IHRyLmljb24sXG4gICAgICAgICAgY29sb3I6IHRyLmNvbG9yLFxuICAgICAgICAgIGRpc2FibGVkOiB0ci5kaXNhYmxlZCxcbiAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICBuYW1lOiB0ci5uYW1lLFxuICAgICAgICAgICAgb3B0aW9uczogdHIub3B0aW9ucyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0ci5tZXRhZGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSBhcyBBWFBBY3Rpb25NZW51SXRlbSxcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy52bS5nZXRTZWNvbmRhcnlBY3Rpb25zKCkpLm1hcCgodHIpID0+ICh7XG4gICAgICBuYW1lOiB0ci5uYW1lLFxuICAgICAgdGl0bGU6IHRyLnRpdGxlLFxuICAgICAgaWNvbjogdHIuaWNvbixcbiAgICAgIGNvbG9yOiB0ci5jb2xvcixcbiAgICAgIGRpc2FibGVkOiB0ci5kaXNhYmxlZCxcbiAgICAgIHNlcGFyYXRlZDogdHIuc2VwYXJhdGVkLFxuICAgICAgY29tbWFuZDoge1xuICAgICAgICBuYW1lOiB0ci5uYW1lLFxuICAgICAgICBvcHRpb25zOiB0ci5vcHRpb25zLFxuICAgICAgICBtZXRhZGF0YTogdHIubWV0YWRhdGEsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGV4ZWN1dGUoY29tbWFuZDogQVhQRXhlY3V0ZUNvbW1hbmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY29tbWFuZCkge1xuICAgICAgdGhpcy52bS5leGVjdXRlKGNvbW1hbmQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVVbnNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLnZtLnNlbGVjdGVkSXRlbXMuc2V0KFtdKTtcbiAgfVxufVxuIiwiPGF4cC1wYWdlLWxheW91dCAqdHJhbnNsYXRlPVwibGV0IHRcIj5cbiAgQGlmICh2bS5lbnRpdHlEZWYuY2F0ZWdvcnkpIHtcbiAgICA8YXhwLWxheW91dC1zdGFydC1zaWRlIGlkPVwiYXhwLWVudGl0eS1jYXRlZ29yeS1kcmF3ZXJcIj5cbiAgICAgIDxheHAtZW50aXR5LWNhdGVnb3J5XG4gICAgICAgIGlkPVwiYXhwLWVudGl0eS1jYXRlZ29yeVwiXG4gICAgICAgIGNsYXNzPVwiYXgtdy04MFwiXG4gICAgICAgIFt2bV09XCJ2bVwiXG4gICAgICAgIFtzZWFyY2hWYWx1ZV09XCJjYXRlZ29yeVNlYXJjaFZhbHVlKClcIlxuICAgICAgPjwvYXhwLWVudGl0eS1jYXRlZ29yeT5cbiAgICA8L2F4cC1sYXlvdXQtc3RhcnQtc2lkZT5cbiAgfVxuICA8YXhwLXBhZ2UtdG9vbGJhciBpZD1cImF4cC1lbnRpdHktdG9vbGJhclwiPlxuICAgIDxheHAtZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcgW3ZpZXdNb2RlbF09XCJ2bVwiPjwvYXhwLWVudGl0eS1tYXN0ZXItdG9vbGJhci12aWV3PlxuICA8L2F4cC1wYWdlLXRvb2xiYXI+XG4gIDxheHAtcGFnZS1jb250ZW50IGNsYXNzPVwiYXgtb3ZlcmZsb3ctYXV0byBheC1wdC0wXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWJldHdlZW4gYXgtZ2FwLTEgYXgtcGItMVwiXG4gICAgICBbY2xhc3MuYXgtaW52aXNpYmxlXT1cIiFncmlkLnNlbGVjdGVkUm93cy5sZW5ndGhcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgID57eyBncmlkLnNlbGVjdGVkUm93cy5sZW5ndGggfX1cbiAgICAgICAgPHNwYW4+e3sgJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5pdGVtcy1zZWxlY3RlZCcgfCB0cmFuc2xhdGUgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxheC1idXR0b24gdGV4dD1cIkBnZW5lcmFsOnRlcm1zLmludGVyZmFjZS51bnNlbGVjdC1hbGxcIiBjbGFzcz1cImF4LXhzXCIgKG9uQ2xpY2spPVwiaGFuZGxlVW5zZWxlY3RBbGwoKVwiPjwvYXgtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxheC1kYXRhLXRhYmxlXG4gICAgICBpZD1cImF4cC1lbnRpdHktdGFibGVcIlxuICAgICAgW2FsbG93UmVvcmRlcmluZ109XCJ0cnVlXCJcbiAgICAgIChvbkNvbHVtbnNPcmRlckNoYW5nZWQpPVwib25Db2x1bW5zT3JkZXJDaGFuZ2VkKCRldmVudClcIlxuICAgICAgI2dyaWRcbiAgICAgIFtzaG93Rm9vdGVyXT1cImZhbHNlXCJcbiAgICAgIGNsYXNzPVwiYXgtZmxleC0xXCJcbiAgICAgIFtwYWdpbmddPVwidHJ1ZVwiXG4gICAgICBbZmV0Y2hEYXRhTW9kZV09XCInbWFudWFsJ1wiXG4gICAgICBbcGFyZW50RmllbGRdPVwidm0ucGFyZW50S2V5KClcIlxuICAgICAgW2xvYWRpbmddPVwieyBlbmFibGVkOiB0cnVlLCBhbmltYXRpb246IHRydWUgfVwiXG4gICAgICBbZGF0YVNvdXJjZV09XCJ2bS5kYXRhU291cmNlXCJcbiAgICAgIChzZWxlY3RlZFJvd3NDaGFuZ2UpPVwiaGFuZGxlU2VsZWN0ZWRSb3dzQ2hhbmdlKCRldmVudClcIlxuICAgICAgKG9uUm93RGJDbGljayk9XCJoYW5kbGVSb3dEYkNsaWNrKCRldmVudClcIlxuICAgICAgKG9uQ29sdW1uU2l6ZUNoYW5nZWQpPVwib25Db2x1bW5TaXplQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgIChvblBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgQGlmICh2bS52aWV3KCkuaW5kZXhDb2wgPT09IHRydWUpIHtcbiAgICAgICAgPGF4LWluZGV4LWNvbHVtbiBpZD1cImF4cC10YWJsZS1jb2wtaW5kZXhcIiBmaXhlZD1cInN0YXJ0XCIgW3dpZHRoXT1cIic4MHB4J1wiIFtwYWRaZXJvXT1cInRydWVcIj48L2F4LWluZGV4LWNvbHVtbj5cbiAgICAgIH1cbiAgICAgIEBpZiAodm0uc2VsZWN0ZWRTY29wZUFjdGlvbnNDb3VudCgpKSB7XG4gICAgICAgIDxheC1zZWxlY3QtY29sdW1uIGlkPVwiYXhwLXRhYmxlLWNvbC1zZWxlY3RcIiBmaXhlZD1cInN0YXJ0XCIgW3dpZHRoXT1cIic2MHB4J1wiPjwvYXgtc2VsZWN0LWNvbHVtbj5cbiAgICAgIH1cbiAgICAgIEBmb3IgKGNvbCBvZiB2bS5jb2x1bW5zKCk7IHRyYWNrIGNvbC5uYW1lKSB7XG4gICAgICAgIEBpZiAoY29sLnZpc2libGUpIHtcbiAgICAgICAgICA8YXhwLXdpZGdldC1jb2x1bW4tcmVuZGVyZXJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIidheHAtdGFibGUtY29sLScgKyBjb2wubmFtZVwiXG4gICAgICAgICAgICBbZXhwYW5kSGFuZGxlcl09XCIkaW5kZXggPT09IDAgJiYgdm0ucGFyZW50S2V5KCkgPyB0cnVlIDogZmFsc2VcIlxuICAgICAgICAgICAgW2NhcHRpb25dPVwiKGNvbC50aXRsZSB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgICAgICAgW25vZGVdPVwiY29sLm5vZGUoKVwiXG4gICAgICAgICAgICBbY3VzdG9tV2lkdGhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICA+PC9heHAtd2lkZ2V0LWNvbHVtbi1yZW5kZXJlcj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGlmIChnZXRDb21tYW5kUm93SXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgPGF4LWNvbW1hbmQtY29sdW1uXG4gICAgICAgICAgaWQ9XCJheHAtdGFibGUtY29sLWNvbW1hbmRzXCJcbiAgICAgICAgICBmaXhlZD1cImVuZFwiXG4gICAgICAgICAgW3dpZHRoXT1cImdldENvbW1hbmRSb3dJdGVtcygpLmxlbmd0aCAqIDcwICsgJ3B4J1wiXG4gICAgICAgICAgW2l0ZW1zXT1cImdldENvbW1hbmRSb3dJdGVtcygpXCJcbiAgICAgICAgICAob25JdGVtQ2xpY2spPVwiaGFuZGxlUm93Q29tbWFuZENsaWNrKCRldmVudClcIlxuICAgICAgICA+PC9heC1jb21tYW5kLWNvbHVtbj5cbiAgICAgIH1cbiAgICAgIDxheC1kcm9wZG93bi1jb21tYW5kLWNvbHVtblxuICAgICAgICBpZD1cImF4cC10YWJsZS1jb2wtZHJvcGRvd24tY29tbWFuZHNcIlxuICAgICAgICBmaXhlZD1cImVuZFwiXG4gICAgICAgIFt3aWR0aF09XCInNjBweCdcIlxuICAgICAgICBbaXRlbXNdPVwiZ2V0RHJvcGRvd25Sb3dJdGVtc1wiXG4gICAgICAgIChvbkl0ZW1DbGljayk9XCJoYW5kbGVSb3dDb21tYW5kQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9heC1kcm9wZG93bi1jb21tYW5kLWNvbHVtbj5cbiAgICA8L2F4LWRhdGEtdGFibGU+XG4gIDwvYXhwLXBhZ2UtY29udGVudD5cbjwvYXhwLXBhZ2UtbGF5b3V0PlxuIl19"],"names":["i1","i2","i3","i4","i6","i7","i5"],"mappings":"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"}
|