@acorex/platform 20.7.8 → 20.7.10
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 +26 -5
- package/core/index.d.ts +13 -7
- package/fesm2022/acorex-platform-common.mjs +5 -1
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +20 -11
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +31 -4
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-ZnTG7wlJ.mjs → acorex-platform-layout-components-binding-expression-editor-popup.component-Cb6Lk4Ch.mjs} +5 -5
- package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-ZnTG7wlJ.mjs.map → acorex-platform-layout-components-binding-expression-editor-popup.component-Cb6Lk4Ch.mjs.map} +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +913 -36
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +471 -789
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-repeater-widget-column.component-fcCirNxz.mjs → acorex-platform-layout-widgets-repeater-widget-column.component-DnhR00cH.mjs} +2 -2
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-DnhR00cH.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +219 -327
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-DzWjSMSK.mjs → acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.mjs} +20 -5
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +2 -2
- package/layout/builder/index.d.ts +25 -14
- package/layout/components/index.d.ts +295 -2
- package/layout/entity/index.d.ts +59 -58
- package/layout/widgets/index.d.ts +38 -32
- package/package.json +5 -5
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-fcCirNxz.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DzWjSMSK.mjs.map +0 -1
package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-themes-default-entity-master-list-view.component-HBr-ZTSt.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, } 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.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 /** When true, add/edit/delete category actions are hidden (from category plugin readonly option). */\n this.categoryReadonly = computed(() => this.vm().entityDef?.extensions?.category?.readonly === true, ...(ngDevMode ? [{ debugName: \"categoryReadonly\" }] : []));\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 and track selected category for create command\n */\n handleNodeClick(node) {\n const nodeData = this.extractNodeData(node);\n const applyConditions = this.vm().entityDef.category?.applyConditions || [];\n const valueField = this.valueField();\n const textField = this.textField();\n const nodeId = String(nodeData[valueField] ?? node['id'] ?? '');\n // Track selected category for default category when creating new entities\n if (nodeId === 'all' || !nodeId) {\n this.vm().setSelectedCategory(null);\n }\n else {\n this.vm().setSelectedCategory({\n id: nodeId,\n title: String(nodeData[textField] ?? node['title'] ?? ''),\n });\n }\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.16\", ngImport: i0, type: AXPEntityCategoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", 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 (onValueChanged)=\\\"handleCategorySearchChange($event)\\\" [delayTime]=\\\"300\\\"\\n [placeholder]=\\\"'@general:terms.interface.category.search.placeholder' | translate | async\\\">\\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 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 </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 [datasource]=\\\"datasource\\\" [selectMode]=\\\"selectMode()\\\" [selectionBehavior]=\\\"selectionBehavior()\\\"\\n [dragArea]=\\\"dragArea()\\\" [dragBehavior]=\\\"dragBehavior()\\\" [showIcons]=\\\"showIcons()\\\"\\n [showChildrenBadge]=\\\"showChildrenBadge()\\\" [expandedIcon]=\\\"expandedIcon()\\\" [collapsedIcon]=\\\"collapsedIcon()\\\"\\n [indentSize]=\\\"indentSize()\\\" [look]=\\\"look()\\\" [titleField]=\\\"textField()\\\" [idField]=\\\"valueField()\\\"\\n [expandOnDoubleClick]=\\\"true\\\" [nodeTemplate]=\\\"itemTemplate\\\" (onNodeToggle)=\\\"onNodeToggle($event)\\\"\\n (onNodeClick)=\\\"handleNodeClick($event.node)\\\" #tree>\\n </ax-tree-view>\\n </div>\\n } @else {\\n <div class=\\\"__empty-state\\\">\\n <axp-state-message 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 @if (!categoryReadonly()) {\\n <ax-button slot=\\\"actions\\\" (onClick)=\\\"handleCreateRootClick($event)\\\" look=\\\"solid\\\" color=\\\"primary\\\"\\n [text]=\\\"'@general:actions.add-new.title' | translate | async\\\">\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button>\\n }\\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 class=\\\"fas fa-folder\\\"\\n [style.color]=\\\"item.color ?? 'rgba(var(--ax-sys-color-warning-500), 1)'\\\"></ax-icon>\\n <span class=\\\"ax-truncate\\\">{{ itemTitle }}</span>\\n </div>\\n @if (itemId && itemId !== 'all' && !categoryReadonly()) {\\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 (onClick)=\\\"handleCreateChildClick(node, $event)\\\" look=\\\"blank\\\" color=\\\"default\\\"\\n [text]=\\\"('@general:actions.add-new-child.title' | translate | async)!\\\">\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item (onClick)=\\\"handleEditNodeClick(node, $event)\\\" look=\\\"blank\\\"\\n [text]=\\\"('@general:actions.edit.title' | translate | async)!\\\">\\n <ax-icon class=\\\"fas fa-pen\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item (onClick)=\\\"handleDeleteNodeClick(node, $event)\\\" color=\\\"danger\\\" look=\\\"blank\\\"\\n [text]=\\\"('@general:actions.delete.title' | translate | async)!\\\">\\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' && !categoryReadonly()) {\\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>\", 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\", \"doubleClickDuration\", \"tooltipDelay\"], 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.16\", 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 (onValueChanged)=\\\"handleCategorySearchChange($event)\\\" [delayTime]=\\\"300\\\"\\n [placeholder]=\\\"'@general:terms.interface.category.search.placeholder' | translate | async\\\">\\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 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 </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 [datasource]=\\\"datasource\\\" [selectMode]=\\\"selectMode()\\\" [selectionBehavior]=\\\"selectionBehavior()\\\"\\n [dragArea]=\\\"dragArea()\\\" [dragBehavior]=\\\"dragBehavior()\\\" [showIcons]=\\\"showIcons()\\\"\\n [showChildrenBadge]=\\\"showChildrenBadge()\\\" [expandedIcon]=\\\"expandedIcon()\\\" [collapsedIcon]=\\\"collapsedIcon()\\\"\\n [indentSize]=\\\"indentSize()\\\" [look]=\\\"look()\\\" [titleField]=\\\"textField()\\\" [idField]=\\\"valueField()\\\"\\n [expandOnDoubleClick]=\\\"true\\\" [nodeTemplate]=\\\"itemTemplate\\\" (onNodeToggle)=\\\"onNodeToggle($event)\\\"\\n (onNodeClick)=\\\"handleNodeClick($event.node)\\\" #tree>\\n </ax-tree-view>\\n </div>\\n } @else {\\n <div class=\\\"__empty-state\\\">\\n <axp-state-message 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 @if (!categoryReadonly()) {\\n <ax-button slot=\\\"actions\\\" (onClick)=\\\"handleCreateRootClick($event)\\\" look=\\\"solid\\\" color=\\\"primary\\\"\\n [text]=\\\"'@general:actions.add-new.title' | translate | async\\\">\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button>\\n }\\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 class=\\\"fas fa-folder\\\"\\n [style.color]=\\\"item.color ?? 'rgba(var(--ax-sys-color-warning-500), 1)'\\\"></ax-icon>\\n <span class=\\\"ax-truncate\\\">{{ itemTitle }}</span>\\n </div>\\n @if (itemId && itemId !== 'all' && !categoryReadonly()) {\\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 (onClick)=\\\"handleCreateChildClick(node, $event)\\\" look=\\\"blank\\\" color=\\\"default\\\"\\n [text]=\\\"('@general:actions.add-new-child.title' | translate | async)!\\\">\\n <ax-icon class=\\\"fas fa-plus\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item (onClick)=\\\"handleEditNodeClick(node, $event)\\\" look=\\\"blank\\\"\\n [text]=\\\"('@general:actions.edit.title' | translate | async)!\\\">\\n <ax-icon class=\\\"fas fa-pen\\\"></ax-icon>\\n </ax-button-item>\\n <ax-button-item (onClick)=\\\"handleDeleteNodeClick(node, $event)\\\" color=\\\"danger\\\" look=\\\"blank\\\"\\n [text]=\\\"('@general:actions.delete.title' | translate | async)!\\\">\\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' && !categoryReadonly()) {\\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 }], 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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QUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsd0JBQXdCO3FCQUN6QjsrS0FpQnFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBhZnRlck5leHRSZW5kZXIsXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYQ2xpY2tFdmVudCwgQVhEYXRhU291cmNlRmlsdGVyT3B0aW9uLCBBWFZhbHVlQ2hhbmdlZEV2ZW50IH0gZnJvbSAnQGFjb3JleC9jZGsvY29tbW9uJztcbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEFYU2VhcmNoQm94TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NlYXJjaC1ib3gnO1xuaW1wb3J0IHsgQVhTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9za2VsZXRvbic7XG5pbXBvcnQge1xuICBBWFRyZWVWaWV3Q29tcG9uZW50LFxuICBBWFRyZWVWaWV3RHJhZ0FyZWEsXG4gIEFYVHJlZVZpZXdEcmFnQmVoYXZpb3IsXG4gIEFYVHJlZVZpZXdNb2R1bGUsXG4gIEFYVHJlZVZpZXdOb2RlLFxuICBBWFRyZWVWaWV3Tm9kZVRvZ2dsZUV2ZW50LFxuICBBWFRyZWVWaWV3U2VsZWN0aW9uQmVoYXZpb3IsXG4gIEFYVHJlZVZpZXdTZWxlY3RNb2RlLFxuICBBWFRyZWVWaWV3Vmlld0xvb2ssXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90cmVlLXZpZXcnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSwgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQUXVlcnlGaWx0ZXIsIEFYUFJlZnJlc2hFdmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYSGlnaGxpZ2h0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQge1xuICBBWFBTdGF0ZU1lc3NhZ2VDb21wb25lbnQsXG4gIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gIEFYUFRoZW1lTGF5b3V0SGVhZGVyQ29tcG9uZW50LFxuICBBWFBUaGVtZUxheW91dFRvb2xiYXJDb21wb25lbnQsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgQVhQQ2F0ZWdvcnlUcmVlU2VydmljZSxcbiAgQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdNb2RlbCxcbiAgQ2F0ZWdvcnlUcmVlQ29uZmlnLFxuICBDYXRlZ29yeVRyZWVOb2RlRGF0YSxcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUFdvcmtmbG93Q29udGV4dCwgQVhQV29ya2Zsb3dTZXJ2aWNlLCBvZlR5cGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL3dvcmtmbG93JztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuLy8jcmVnaW9uIC0tLS0gICBDb25zdGFudHMgICAtLS0tXG5cbmNvbnN0IFJPT1RfTk9ERV9JRCA9ICdhbGwnO1xuY29uc3QgTE9BRElOR19ERUxBWV9NUyA9IDMwMDtcbmNvbnN0IERFRkFVTFRfVEVYVF9GSUVMRCA9ICd0aXRsZSc7XG5jb25zdCBERUZBVUxUX1ZBTFVFX0ZJRUxEID0gJ2lkJztcblxuLy8jZW5kcmVnaW9uXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1lbnRpdHktY2F0ZWdvcnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYVHJlZVZpZXdNb2R1bGUsXG4gICAgQVhUcmVlVmlld0NvbXBvbmVudCxcbiAgICBBWFNrZWxldG9uTW9kdWxlLFxuICAgIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gICAgQVhTZWFyY2hCb3hNb2R1bGUsXG4gICAgQVhQVGhlbWVMYXlvdXRIZWFkZXJDb21wb25lbnQsXG4gICAgQVhQVGhlbWVMYXlvdXRUb29sYmFyQ29tcG9uZW50LFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhEcm9wZG93bk1vZHVsZSxcbiAgICBBWFBTdGF0ZU1lc3NhZ2VDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktY2F0ZWdvcnkuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZW50aXR5LWNhdGVnb3J5LmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRW50aXR5Q2F0ZWdvcnlDb21wb25lbnQge1xuICAvLyNyZWdpb24gLS0tLSAgIFNlcnZpY2VzICYgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoQVhUcmFuc2xhdGlvblNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgd29ya2Zsb3cgPSBpbmplY3QoQVhQV29ya2Zsb3dTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhdGVnb3J5VHJlZVNlcnZpY2UgPSBpbmplY3QoQVhQQ2F0ZWdvcnlUcmVlU2VydmljZSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBoaWdobGlnaHRTZXJ2aWNlID0gaW5qZWN0KEFYSGlnaGxpZ2h0U2VydmljZSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21wb25lbnQgSW5wdXRzICYgVmlldyBRdWVyaWVzICAgLS0tLVxuXG4gIHZtID0gaW5wdXQucmVxdWlyZWQ8QVhQRW50aXR5TWFzdGVyTGlzdFZpZXdNb2RlbD4oKTtcbiAgdHJlZSA9IHZpZXdDaGlsZDxBWFRyZWVWaWV3Q29tcG9uZW50PigndHJlZScpO1xuICBzZWFyY2hWYWx1ZSA9IGlucHV0PHN0cmluZz4oJycpO1xuXG4gIC8vIFRyZWUgdmlldyBpbnB1dHMgd2l0aCBkZWZhdWx0c1xuICBzZWxlY3RNb2RlID0gaW5wdXQ8QVhUcmVlVmlld1NlbGVjdE1vZGU+KCdzaW5nbGUnKTtcbiAgc2VsZWN0aW9uQmVoYXZpb3IgPSBpbnB1dDxBWFRyZWVWaWV3U2VsZWN0aW9uQmVoYXZpb3I+KCdpbnRlcm1lZGlhdGUnKTtcbiAgZHJhZ0FyZWEgPSBpbnB1dDxBWFRyZWVWaWV3RHJhZ0FyZWE+KCdoYW5kbGVyJyk7XG4gIGRyYWdCZWhhdmlvciA9IGlucHV0PEFYVHJlZVZpZXdEcmFnQmVoYXZpb3I+KCdub25lJyk7XG4gIHNob3dJY29ucyA9IGlucHV0KHRydWUpO1xuICBzaG93Q2hpbGRyZW5CYWRnZSA9IGlucHV0KGZhbHNlKTtcbiAgZXhwYW5kZWRJY29uID0gaW5wdXQoJ2ZhLXNvbGlkIGZhLWNoZXZyb24tZG93bicpO1xuICBjb2xsYXBzZWRJY29uID0gaW5wdXQoJ2ZhLXNvbGlkIGZhLWNoZXZyb24tcmlnaHQnKTtcbiAgaW5kZW50U2l6ZSA9IGlucHV0KDE2KTtcbiAgbG9vayA9IGlucHV0PEFYVHJlZVZpZXdWaWV3TG9vaz4oJ2RlZmF1bHQnKTtcbiAgc2VhcmNoV2l0aENoaWxkcmVuID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7IC8vIEluY2x1ZGUgY2hpbGRyZW4gb2Ygc2VhcmNoIHJlc3VsdHNcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIENvbXBvbmVudCBTdGF0ZSAgIC0tLS1cblxuICBpc0xvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG4gIHByb3RlY3RlZCBpc1NlYXJjaGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBzZWFyY2hSZXN1bHRDb3VudCA9IHNpZ25hbCgwKTtcbiAgcHJvdGVjdGVkIGN1cnJlbnRTZWFyY2hWYWx1ZSA9IHNpZ25hbCgnJyk7XG4gIHByb3RlY3RlZCByZXN1bHRzRm91bmRUZXh0ID0gc2lnbmFsKCcnKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFByaXZhdGUgUHJvcGVydGllcyAgIC0tLS1cblxuICBwcml2YXRlIGxvYWRpbmdUaW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCB0cmVlRGF0YTogQ2F0ZWdvcnlUcmVlTm9kZURhdGEgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0cmVlQ29uZmlnOiBDYXRlZ29yeVRyZWVDb25maWcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtYXRjaGluZ05vZGVJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSByZWxldmFudE5vZGVJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTsgLy8gRm9yIHNlYXJjaCBmaWx0ZXJpbmdcbiAgcHJpdmF0ZSBub2RlRGF0YUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpOyAvLyBDYWNoZSBwYXJlbnQgZGF0YSBmcm9tIHNlYXJjaCByZXN1bHRzXG4gIHByaXZhdGUgZXhwYW5kZWROb2Rlc0JlZm9yZVNlYXJjaDogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBub2Rlc0V4cGFuZGVkRHVyaW5nU2VhcmNoOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGN1cnJlbnRTZWFyY2hUZXJtOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIENvbXB1dGVkIFByb3BlcnRpZXMgICAtLS0tXG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRleHRGaWVsZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudm0oKS5lbnRpdHlEZWYuY2F0ZWdvcnk/LnRleHRGaWVsZCB8fCBERUZBVUxUX1RFWFRfRklFTEQpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmFsdWVGaWVsZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudm0oKS5lbnRpdHlEZWYuY2F0ZWdvcnk/LnZhbHVlRmllbGQgfHwgREVGQVVMVF9WQUxVRV9GSUVMRCk7XG5cbiAgLyoqIFdoZW4gdHJ1ZSwgYWRkL2VkaXQvZGVsZXRlIGNhdGVnb3J5IGFjdGlvbnMgYXJlIGhpZGRlbiAoZnJvbSBjYXRlZ29yeSBwbHVnaW4gcmVhZG9ubHkgb3B0aW9uKS4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhdGVnb3J5UmVhZG9ubHkgPSBjb21wdXRlZChcbiAgICAoKSA9PiAodGhpcy52bSgpLmVudGl0eURlZiBhcyBhbnkpPy5leHRlbnNpb25zPy5jYXRlZ29yeT8ucmVhZG9ubHkgPT09IHRydWUsXG4gICk7XG5cbiAgLyoqXG4gICAqIENvbXB1dGVkIHByb3BlcnR5IHRvIGNoZWNrIGlmIHdlIHNob3VsZCBzaG93IHRoZSBcIm5vIHNlYXJjaCByZXN1bHRzXCIgZW1wdHkgc3RhdGUuXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIHNlYXJjaCBpcyBhY3RpdmUsIG5vdCBzZWFyY2hpbmcsIGFuZCBubyByZXN1bHRzIGZvdW5kLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dOb1NlYXJjaFJlc3VsdHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc2VhcmNoVmFsdWUgPSB0aGlzLmN1cnJlbnRTZWFyY2hWYWx1ZSgpLnRyaW0oKTtcbiAgICBjb25zdCBpc1NlYXJjaGluZyA9IHRoaXMuaXNTZWFyY2hpbmcoKTtcbiAgICBjb25zdCByZXN1bHRDb3VudCA9IHRoaXMuc2VhcmNoUmVzdWx0Q291bnQoKTtcbiAgICByZXR1cm4gc2VhcmNoVmFsdWUubGVuZ3RoID4gMCAmJiAhaXNTZWFyY2hpbmcgJiYgcmVzdWx0Q291bnQgPT09IDA7XG4gIH0pO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlFbnRpdHlLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy52bSgpLmVudGl0eURlZi5jYXRlZ29yeT8uZW50aXR5O1xuICAgIGlmICgha2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhdGVnb3J5IGVudGl0eSBpcyBub3QgY29uZmlndXJlZCcpO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9KTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIENvbnN0cnVjdG9yICYgTGlmZWN5Y2xlICAgLS0tLVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICB0aGlzLmluaXRpYWxpemVUcmVlKCk7XG4gICAgfSk7XG4gICAgdGhpcy53b3JrZmxvdy5ldmVudHMkXG4gICAgICAucGlwZShvZlR5cGUoQVhQUmVmcmVzaEV2ZW50KSlcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy50cmVlKCk/LnJlbG9hZERhdGEoKTtcbiAgICAgICAgLy8gdGhpcy50cmVlKCk/LnJlZnJlc2goKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogSGFuZGxlcyBjYXRlZ29yeSBzZWFyY2ggaW5wdXQgY2hhbmdlcyAtIFVzZXMgc2VydmVyLXNpZGUgc2VhcmNoIGZvciBlZmZpY2llbmN5IGFuZCByZWxpYWJpbGl0eVxuICAgKi9cbiAgYXN5bmMgaGFuZGxlQ2F0ZWdvcnlTZWFyY2hDaGFuZ2UoZXZlbnQ6IEFYVmFsdWVDaGFuZ2VkRXZlbnQ8c3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc1RyZWVJbml0aWFsaXplZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoVGVybSA9IChldmVudC52YWx1ZSA/PyAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgcHJldmlvdXNTZWFyY2hUZXJtID0gdGhpcy5jdXJyZW50U2VhcmNoVmFsdWUoKTtcblxuICAgIC8vIElmIHNlYXJjaCBpcyBjbGVhcmVkLCByZXNldCB0cmVlXG4gICAgaWYgKCFzZWFyY2hUZXJtKSB7XG4gICAgICBpZiAocHJldmlvdXNTZWFyY2hUZXJtIHx8IHRoaXMubWF0Y2hpbmdOb2RlSWRzLnNpemUgPiAwKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFZhbHVlLnNldCgnJyk7XG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSBudWxsO1xuICAgICAgICBhd2FpdCB0aGlzLnJlc2V0U2VhcmNoKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIG5vbi1lbXB0eSBzZWFyY2gsIG9ubHkgcHJvY2VzcyB1c2VyIGludGVyYWN0aW9uc1xuICAgIGlmICghZXZlbnQuaXNVc2VySW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBQcmV2ZW50IGNvbmN1cnJlbnQgc2VhcmNoZXNcbiAgICBpZiAodGhpcy5pc1NlYXJjaGluZygpICYmIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID09PSBzZWFyY2hUZXJtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRTZWFyY2hWYWx1ZS5zZXQoZXZlbnQudmFsdWUgPz8gJycpO1xuICAgIHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtO1xuXG4gICAgY29uc3QgdHJlZUNvbXBvbmVudCA9IHRoaXMudHJlZSgpO1xuICAgIGlmICghdHJlZUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFN0b3JlIGV4cGFuZGVkIG5vZGVzIGJlZm9yZSBzdGFydGluZyBhIG5ldyBzZWFyY2ggKG9ubHkgb24gZmlyc3Qgc2VhcmNoKVxuICAgIGlmICghcHJldmlvdXNTZWFyY2hUZXJtICYmIHRoaXMuZXhwYW5kZWROb2Rlc0JlZm9yZVNlYXJjaC5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGV4cGFuZGVkTm9kZXMgPSB0cmVlQ29tcG9uZW50LmdldEV4cGFuZGVkTm9kZXMoKTtcbiAgICAgIHRoaXMuZXhwYW5kZWROb2Rlc0JlZm9yZVNlYXJjaCA9IGV4cGFuZGVkTm9kZXNcbiAgICAgICAgLm1hcCgobm9kZSkgPT4gU3RyaW5nKG5vZGVbJ2lkJ10gPz8gJycpKVxuICAgICAgICAuZmlsdGVyKChpZCkgPT4gaWQgJiYgaWQgIT09IFJPT1RfTk9ERV9JRCk7XG4gICAgfVxuXG4gICAgLy8gQ29sbGFwc2Ugbm9kZXMgZnJvbSBwcmV2aW91cyBzZWFyY2ggYmVmb3JlIHN0YXJ0aW5nIG5ldyBzZWFyY2hcbiAgICBpZiAocHJldmlvdXNTZWFyY2hUZXJtICYmIHRoaXMubm9kZXNFeHBhbmRlZER1cmluZ1NlYXJjaC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBub2Rlc1RvQ29sbGFwc2UgPSBbLi4udGhpcy5ub2Rlc0V4cGFuZGVkRHVyaW5nU2VhcmNoXS5yZXZlcnNlKCk7XG4gICAgICB0aGlzLm5vZGVzRXhwYW5kZWREdXJpbmdTZWFyY2ggPSBbXTtcbiAgICAgIGZvciAoY29uc3Qgbm9kZUlkIG9mIG5vZGVzVG9Db2xsYXBzZSkge1xuICAgICAgICAvLyBPbmx5IGNvbGxhcHNlIGlmIGl0IHdhc24ndCBvcmlnaW5hbGx5IGV4cGFuZGVkIGJlZm9yZSBzZWFyY2hcbiAgICAgICAgaWYgKCF0aGlzLmV4cGFuZGVkTm9kZXNCZWZvcmVTZWFyY2guaW5jbHVkZXMobm9kZUlkKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0cmVlQ29tcG9uZW50LmNvbGxhcHNlTm9kZShub2RlSWQpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gTm9kZSBtaWdodCBub3QgZXhpc3QgYW55bW9yZSwgaWdub3JlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pc1NlYXJjaGluZy5zZXQodHJ1ZSk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gU3RlcCAxOiBVc2Ugc2VydmVyLXNpZGUgc2VhcmNoIHRvIGdldCBtYXRjaGluZyBpdGVtc1xuICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGF3YWl0IHRoaXMuY2F0ZWdvcnlUcmVlU2VydmljZS5zZWFyY2hDYXRlZ29yaWVzKFxuICAgICAgICBzZWFyY2hUZXJtLFxuICAgICAgICB0aGlzLnRyZWVEYXRhISxcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnISxcbiAgICAgICk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHNlYXJjaCB0ZXJtIGNoYW5nZWQgZHVyaW5nIHRoZSBBUEkgY2FsbFxuICAgICAgaWYgKHRoaXMuY3VycmVudFNlYXJjaFRlcm0gIT09IHNlYXJjaFRlcm0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNlYXJjaFJlc3VsdHMgfHwgc2VhcmNoUmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5tYXRjaGluZ05vZGVJZHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5yZWxldmFudE5vZGVJZHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRDb3VudC5zZXQoMCk7XG4gICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVHJhbnNsYXRlZE1lc3NhZ2VzKDApO1xuICAgICAgICAvLyBDbGVhciBoaWdobGlnaHRpbmcgYW5kIHJlbG9hZCB0cmVlIHRvIHNob3cgYWxsIG5vZGVzXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0U2VydmljZS5jbGVhcigpO1xuICAgICAgICBhd2FpdCB0cmVlQ29tcG9uZW50LnJlbG9hZERhdGEoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTdG9yZSBtYXRjaGluZyBub2RlIElEcyBmcm9tIHNlYXJjaCByZXN1bHRzXG4gICAgICB0aGlzLm1hdGNoaW5nTm9kZUlkcy5jbGVhcigpO1xuICAgICAgY29uc3QgdmFsdWVGaWVsZCA9IHRoaXMudmFsdWVGaWVsZCgpO1xuICAgICAgc2VhcmNoUmVzdWx0cy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVJZCA9IFN0cmluZyhpdGVtW3ZhbHVlRmllbGRdID8/ICcnKTtcbiAgICAgICAgaWYgKG5vZGVJZCkge1xuICAgICAgICAgIHRoaXMubWF0Y2hpbmdOb2RlSWRzLmFkZChub2RlSWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0Q291bnQgPSBzZWFyY2hSZXN1bHRzLmxlbmd0aDtcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0Q291bnQuc2V0KHJlc3VsdENvdW50KTtcblxuICAgICAgLy8gVXBkYXRlIHRyYW5zbGF0ZWQgbWVzc2FnZXNcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlVHJhbnNsYXRlZE1lc3NhZ2VzKHJlc3VsdENvdW50KTtcblxuICAgICAgLy8gU3RlcCAyOiBDb2xsZWN0IHBhcmVudCBJRHMgKGJ1aWxkcyByZWxldmFudE5vZGVJZHMgZm9yIGZpbHRlcmluZylcbiAgICAgIGNvbnN0IHBhcmVudHNUb0V4cGFuZCA9IGF3YWl0IHRoaXMuY29sbGVjdFBhcmVudElkcyhzZWFyY2hSZXN1bHRzKTtcblxuICAgICAgLy8gU3RlcCAyLjU6IENvbGxlY3QgY2hpbGRyZW4gSURzIGlmIHNlYXJjaFdpdGhDaGlsZHJlbiBpcyBlbmFibGVkXG4gICAgICBpZiAodGhpcy5zZWFyY2hXaXRoQ2hpbGRyZW4oKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3RDaGlsZHJlbklkcyhzZWFyY2hSZXN1bHRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gU3RlcCAzOiBSZWxvYWQgdHJlZSB0byBhcHBseSBmaWx0ZXJpbmdcbiAgICAgIGF3YWl0IHRyZWVDb21wb25lbnQucmVsb2FkRGF0YSgpO1xuXG4gICAgICAvLyBTdGVwIDQ6IEV4cGFuZCByb290IG5vZGVcbiAgICAgIGlmICghdHJlZUNvbXBvbmVudC5pc05vZGVFeHBhbmRlZChST09UX05PREVfSUQpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdHJlZUNvbXBvbmVudC5leHBhbmROb2RlKFJPT1RfTk9ERV9JRCk7XG4gICAgICAgICAgdGhpcy5ub2Rlc0V4cGFuZGVkRHVyaW5nU2VhcmNoLnB1c2goUk9PVF9OT0RFX0lEKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gUm9vdCBtaWdodCBub3QgZXhpc3RcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdGVwIDQ6IEV4cGFuZCBhbGwgcGFyZW50IG5vZGVzIGluIG9yZGVyIChmcm9tIHJvb3QgdG8gbGVhdmVzKVxuICAgICAgLy8gU29ydCBwYXJlbnRzIGJ5IHRoZWlyIGRlcHRoIHRvIGV4cGFuZCBpbiBjb3JyZWN0IG9yZGVyXG4gICAgICBjb25zdCBzb3J0ZWRQYXJlbnRzID0gYXdhaXQgdGhpcy5zb3J0UGFyZW50c0J5RGVwdGgoQXJyYXkuZnJvbShwYXJlbnRzVG9FeHBhbmQpKTtcbiAgICAgIGZvciAoY29uc3QgcGFyZW50SWQgb2Ygc29ydGVkUGFyZW50cykge1xuICAgICAgICAvLyBPbmx5IGV4cGFuZCBpZiBub3QgYWxyZWFkeSBleHBhbmRlZFxuICAgICAgICBpZiAoIXRyZWVDb21wb25lbnQuaXNOb2RlRXhwYW5kZWQocGFyZW50SWQpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHRyZWVDb21wb25lbnQuZXhwYW5kTm9kZShwYXJlbnRJZCk7XG4gICAgICAgICAgICB0aGlzLm5vZGVzRXhwYW5kZWREdXJpbmdTZWFyY2gucHVzaChwYXJlbnRJZCk7XG4gICAgICAgICAgICAvLyBTbWFsbCBkZWxheSB0byBwcmV2ZW50IG92ZXJ3aGVsbWluZyB0aGUgdHJlZSBjb21wb25lbnRcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwKSk7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBOb2RlIG1pZ2h0IG5vdCBleGlzdCwgaWdub3JlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFN0ZXAgNTogQXBwbHkgaGlnaGxpZ2h0aW5nIGFmdGVyIHRyZWUgaXMgcmVuZGVyZWRcbiAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSBET00gaXMgdXBkYXRlZCBhZnRlciB0cmVlIHJlbG9hZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTZWFyY2hWYWx1ZSgpLnRyaW0oKSkge1xuICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0U2VydmljZS5oaWdobGlnaHQoJ2F4LXRyZWUtdmlldyAuYXgtdHJ1bmNhdGUnLCB0aGlzLmN1cnJlbnRTZWFyY2hWYWx1ZSgpLnRyaW0oKSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDEwMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlYXJjaGluZyBjYXRlZ29yaWVzOicsIGVycm9yKTtcbiAgICAgIHRoaXMubWF0Y2hpbmdOb2RlSWRzLmNsZWFyKCk7XG4gICAgICB0aGlzLnJlbGV2YW50Tm9kZUlkcy5jbGVhcigpO1xuICAgICAgdGhpcy5zZWFyY2hSZXN1bHRDb3VudC5zZXQoMCk7XG4gICAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuY2xlYXIoKTtcbiAgICAgIC8vIFJlbG9hZCB0cmVlIHRvIGNsZWFyIGFueSBmaWx0ZXJzXG4gICAgICBjb25zdCB0cmVlQ29tcG9uZW50ID0gdGhpcy50cmVlKCk7XG4gICAgICBpZiAodHJlZUNvbXBvbmVudCkge1xuICAgICAgICBhd2FpdCB0cmVlQ29tcG9uZW50LnJlbG9hZERhdGEoKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudFNlYXJjaFRlcm0gPT09IHNlYXJjaFRlcm0pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoVGVybSA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmlzU2VhcmNoaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3RzIGFsbCBwYXJlbnQgSURzIGZvciB0aGUgZ2l2ZW4gc2VhcmNoIHJlc3VsdHNcbiAgICogSGFuZGxlcyBib3RoIG5lc3RlZCAncGFyZW50JyBvYmplY3QgYW5kICdwYXJlbnRJZCcgZmllbGQgaW4gc2VhcmNoIHJlc3VsdHNcbiAgICogUmVjdXJzaXZlbHkgZmV0Y2hlcyBwYXJlbnQgbm9kZXMgdG8gYnVpbGQgdGhlIGZ1bGwgcGFyZW50IGNoYWluXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbGxlY3RQYXJlbnRJZHMoaXRlbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10pOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG4gICAgY29uc3QgcGFyZW50c1RvRXhwYW5kID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdmFsdWVGaWVsZCA9IHRoaXMudmFsdWVGaWVsZCgpO1xuICAgIGNvbnN0IHBhcmVudEtleSA9IHRoaXMudHJlZURhdGE/LmNhdGVnb3J5RW50aXR5RGVmPy5wYXJlbnRLZXkgfHwgJ3BhcmVudElkJztcblxuICAgIC8vIEJ1aWxkIHJlbGV2YW50Tm9kZUlkcyA9IG1hdGNoaW5nIG5vZGVzICsgYWxsIHBhcmVudHNcbiAgICB0aGlzLnJlbGV2YW50Tm9kZUlkcy5jbGVhcigpO1xuICAgIHRoaXMubWF0Y2hpbmdOb2RlSWRzLmZvckVhY2goKGlkKSA9PiB0aGlzLnJlbGV2YW50Tm9kZUlkcy5hZGQoaWQpKTtcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IGV4dHJhY3QgYWxsIHBhcmVudCBJRHNcbiAgICBjb25zdCBleHRyYWN0UGFyZW50SWRzID0gYXN5bmMgKGl0ZW06IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAvLyBGaXJzdCwgdHJ5IHRvIGdldCBwYXJlbnQgZnJvbSBuZXN0ZWQgJ3BhcmVudCcgb2JqZWN0IChpZiBhdmFpbGFibGUpXG4gICAgICBjb25zdCBwYXJlbnQgPSBpdGVtWydwYXJlbnQnXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgY29uc3QgcGFyZW50SWQgPSBTdHJpbmcocGFyZW50W3ZhbHVlRmllbGRdID8/IHBhcmVudFsnaWQnXSA/PyAnJyk7XG4gICAgICAgIGlmIChwYXJlbnRJZCAmJiBwYXJlbnRJZCAhPT0gUk9PVF9OT0RFX0lEKSB7XG4gICAgICAgICAgcGFyZW50c1RvRXhwYW5kLmFkZChwYXJlbnRJZCk7XG4gICAgICAgICAgdGhpcy5yZWxldmFudE5vZGVJZHMuYWRkKHBhcmVudElkKTsgLy8gQWRkIHRvIGZpbHRlciBzZXRcbiAgICAgICAgICB0aGlzLm5vZGVEYXRhQ2FjaGUuc2V0KHBhcmVudElkLCBwYXJlbnQpO1xuICAgICAgICAgIGF3YWl0IGV4dHJhY3RQYXJlbnRJZHMocGFyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmFsbGJhY2s6IHVzZSBwYXJlbnRJZCBmaWVsZCBhbmQgZmV0Y2ggcGFyZW50IGZyb20gc2VydmVyXG4gICAgICAgIC8vIFRyeSBib3RoIHBhcmVudEtleSBmcm9tIGVudGl0eSBkZWZpbml0aW9uIGFuZCBjb21tb24gJ3BhcmVudElkJyBmaWVsZFxuICAgICAgICBjb25zdCBwYXJlbnRJZFZhbHVlID0gaXRlbVtwYXJlbnRLZXldID8/IGl0ZW1bJ3BhcmVudElkJ107XG4gICAgICAgIGlmIChwYXJlbnRJZFZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBTdHJpbmcocGFyZW50SWRWYWx1ZSk7XG4gICAgICAgICAgaWYgKHBhcmVudElkICYmIHBhcmVudElkICE9PSBST09UX05PREVfSUQpIHtcbiAgICAgICAgICAgIC8vIEFkZCB0byBzZXRzIGZpcnN0XG4gICAgICAgICAgICBwYXJlbnRzVG9FeHBhbmQuYWRkKHBhcmVudElkKTtcbiAgICAgICAgICAgIHRoaXMucmVsZXZhbnROb2RlSWRzLmFkZChwYXJlbnRJZCk7XG5cbiAgICAgICAgICAgIC8vIEZldGNoIHBhcmVudCBmcm9tIHNlcnZlciBpZiBub3QgYWxyZWFkeSBjYWNoZWRcbiAgICAgICAgICAgIGlmICghdGhpcy5ub2RlRGF0YUNhY2hlLmhhcyhwYXJlbnRJZCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyZW50SXRlbSA9IGF3YWl0IHRoaXMuZmV0Y2hJdGVtQnlJZChwYXJlbnRJZCk7XG4gICAgICAgICAgICAgIGlmIChwYXJlbnRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlRGF0YUNhY2hlLnNldChwYXJlbnRJZCwgcGFyZW50SXRlbSk7XG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmV0Y2ggcGFyZW50J3MgcGFyZW50XG4gICAgICAgICAgICAgICAgYXdhaXQgZXh0cmFjdFBhcmVudElkcyhwYXJlbnRJdGVtKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gUGFyZW50IGFscmVhZHkgaW4gY2FjaGUsIHJlY3Vyc2l2ZWx5IHByb2Nlc3MgaXRcbiAgICAgICAgICAgICAgY29uc3QgY2FjaGVkUGFyZW50ID0gdGhpcy5ub2RlRGF0YUNhY2hlLmdldChwYXJlbnRJZCk7XG4gICAgICAgICAgICAgIGlmIChjYWNoZWRQYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBleHRyYWN0UGFyZW50SWRzKGNhY2hlZFBhcmVudCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gUHJvY2VzcyBhbGwgaXRlbXNcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGF3YWl0IGV4dHJhY3RQYXJlbnRJZHMoaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudHNUb0V4cGFuZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyBjaGlsZHJlbiBJRHMgZm9yIG1hdGNoaW5nIHNlYXJjaCByZXN1bHRzIHJlY3Vyc2l2ZWx5XG4gICAqIEFkZHMgYWxsIGRlc2NlbmRhbnRzIChjaGlsZHJlbiwgZ3JhbmRjaGlsZHJlbiwgZXRjLikgdG8gcmVsZXZhbnROb2RlSWRzIHNvIHRoZXkgYXBwZWFyIGluIHRoZSBmaWx0ZXJlZCB0cmVlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbGxlY3RDaGlsZHJlbklkcyhpdGVtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy50cmVlRGF0YT8uY2F0ZWdvcnlFbnRpdHlRdWVyeUZ1bmMgfHwgIXRoaXMudHJlZUNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlRmllbGQgPSB0aGlzLnZhbHVlRmllbGQoKTtcbiAgICBjb25zdCBwYXJlbnRLZXkgPSB0aGlzLnRyZWVEYXRhLmNhdGVnb3J5RW50aXR5RGVmPy5wYXJlbnRLZXk7XG4gICAgaWYgKCFwYXJlbnRLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb3IgZWFjaCBtYXRjaGluZyBub2RlLCByZWN1cnNpdmVseSBmZXRjaCBhbGwgaXRzIGRlc2NlbmRhbnRzXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBTdHJpbmcoaXRlbVt2YWx1ZUZpZWxkXSA/PyAnJyk7XG4gICAgICBpZiAoIW5vZGVJZCB8fCBub2RlSWQgPT09IFJPT1RfTk9ERV9JRCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0Q2hpbGRyZW5SZWN1cnNpdmVseShub2RlSWQsIHZhbHVlRmllbGQsIHBhcmVudEtleSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNvbGxlY3RzIGFsbCBkZXNjZW5kYW50IElEcyBmb3IgYSBnaXZlbiBub2RlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGNvbGxlY3RDaGlsZHJlblJlY3Vyc2l2ZWx5KG5vZGVJZDogc3RyaW5nLCB2YWx1ZUZpZWxkOiBzdHJpbmcsIHBhcmVudEtleTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLnRyZWVEYXRhPy5jYXRlZ29yeUVudGl0eVF1ZXJ5RnVuYykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBGZXRjaCBjaGlsZHJlbiBmb3IgdGhpcyBub2RlXG4gICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgLi4udGhpcy50cmVlRGF0YS5iYXNpY1F1ZXJ5RXZlbnQsXG4gICAgICAgIGZpbHRlcjoge1xuICAgICAgICAgIGZpZWxkOiBwYXJlbnRLZXksXG4gICAgICAgICAgdmFsdWU6IG5vZGVJZCxcbiAgICAgICAgICBvcGVyYXRvcjogeyB0eXBlOiAnZXF1YWwnIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnRyZWVEYXRhLmNhdGVnb3J5RW50aXR5UXVlcnlGdW5jKGV2ZW50KTtcbiAgICAgIGlmIChyZXM/Lml0ZW1zICYmIHJlcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEFkZCBjaGlsZHJlbiBJRHMgdG8gcmVsZXZhbnROb2RlSWRzIHNvIHRoZXkgYXBwZWFyIGluIGZpbHRlcmVkIHRyZWVcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiByZXMuaXRlbXMpIHtcbiAgICAgICAgICBjb25zdCBjaGlsZElkID0gU3RyaW5nKGNoaWxkW3ZhbHVlRmllbGRdID8/ICcnKTtcbiAgICAgICAgICBpZiAoY2hpbGRJZCAmJiBjaGlsZElkICE9PSBST09UX05PREVfSUQpIHtcbiAgICAgICAgICAgIHRoaXMucmVsZXZhbnROb2RlSWRzLmFkZChjaGlsZElkKTtcbiAgICAgICAgICAgIC8vIENhY2hlIGNoaWxkIGRhdGFcbiAgICAgICAgICAgIHRoaXMubm9kZURhdGFDYWNoZS5zZXQoY2hpbGRJZCwgY2hpbGQpO1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZmV0Y2ggY2hpbGRyZW4gb2YgdGhpcyBjaGlsZFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0Q2hpbGRyZW5SZWN1cnNpdmVseShjaGlsZElkLCB2YWx1ZUZpZWxkLCBwYXJlbnRLZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBmZXRjaGluZyBjaGlsZHJlbiBmb3Igbm9kZSAke25vZGVJZH06YCwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGEgc2luZ2xlIGl0ZW0gYnkgSUQgZnJvbSB0aGUgc2VydmVyXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZldGNoSXRlbUJ5SWQoaWQ6IHN0cmluZyk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsPiB7XG4gICAgaWYgKCF0aGlzLnRyZWVEYXRhPy5jYXRlZ29yeUVudGl0eVF1ZXJ5RnVuYykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbHVlRmllbGQgPSB0aGlzLnZhbHVlRmllbGQoKTtcbiAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAuLi50aGlzLnRyZWVEYXRhLmJhc2ljUXVlcnlFdmVudCxcbiAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgZmllbGQ6IHZhbHVlRmllbGQsXG4gICAgICAgICAgdmFsdWU6IGlkLFxuICAgICAgICAgIG9wZXJhdG9yOiB7IHR5cGU6ICdlcXVhbCcgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMudHJlZURhdGEuY2F0ZWdvcnlFbnRpdHlRdWVyeUZ1bmMoZXZlbnQpO1xuICAgICAgcmV0dXJuIHJlcz8uaXRlbXM/LlswXSA/PyBudWxsO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBpdGVtIGJ5IElEOicsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyBwYXJlbnQgSURzIGJ5IHRoZWlyIGRlcHRoIChyb290IGZpcnN0LCBsZWF2ZXMgbGFzdClcbiAgICogVXNlcyBjYWNoZWQgZGF0YSBmcm9tIGNvbGxlY3RQYXJlbnRJZHNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc29ydFBhcmVudHNCeURlcHRoKHBhcmVudElkczogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgcGFyZW50S2V5ID0gdGhpcy50cmVlRGF0YT8uY2F0ZWdvcnlFbnRpdHlEZWY/LnBhcmVudEtleTtcbiAgICBpZiAoIXBhcmVudEtleSB8fCBwYXJlbnRJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcGFyZW50SWRzO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGRlcHRoIG1hcCB1c2luZyBjYWNoZWQgZGF0YVxuICAgIGNvbnN0IGRlcHRoTWFwID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIGZvciAoY29uc3QgcGFyZW50SWQgb2YgcGFyZW50SWRzKSB7XG4gICAgICBpZiAoZGVwdGhNYXAuaGFzKHBhcmVudElkKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGRlcHRoID0gMDtcbiAgICAgIGxldCBjdXJyZW50SWQ6IHN0cmluZyB8IG51bGwgPSBwYXJlbnRJZDtcbiAgICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgd2hpbGUgKGN1cnJlbnRJZCAmJiBjdXJyZW50SWQgIT09IFJPT1RfTk9ERV9JRCAmJiAhdmlzaXRlZC5oYXMoY3VycmVudElkKSkge1xuICAgICAgICB2aXNpdGVkLmFkZChjdXJyZW50SWQpO1xuICAgICAgICBkZXB0aCsrO1xuXG4gICAgICAgIC8vIFVzZSBub2RlRGF0YUNhY2hlIHdoaWNoIHdhcyBwb3B1bGF0ZWQgYnkgY29sbGVjdFBhcmVudElkc1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5ub2RlRGF0YUNhY2hlLmdldChjdXJyZW50SWQpO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgIGN1cnJlbnRJZCA9IGl0ZW1bcGFyZW50S2V5XSA/IFN0cmluZyhpdGVtW3BhcmVudEtleV0pIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkZXB0aE1hcC5zZXQocGFyZW50SWQsIGRlcHRoKTtcbiAgICB9XG5cbiAgICAvLyBTb3J0IGJ5IGRlcHRoIChsb3dlciBkZXB0aCA9IGNsb3NlciB0byByb290ID0gZXhwYW5kIGZpcnN0KVxuICAgIHJldHVybiBwYXJlbnRJZHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgZGVwdGhBID0gZGVwdGhNYXAuZ2V0KGEpID8/IDA7XG4gICAgICBjb25zdCBkZXB0aEIgPSBkZXB0aE1hcC5nZXQoYikgPz8gMDtcbiAgICAgIHJldHVybiBkZXB0aEEgLSBkZXB0aEI7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0cmFuc2xhdGVkIG1lc3NhZ2VzIGZvciBzZWFyY2ggcmVzdWx0c1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVUcmFuc2xhdGVkTWVzc2FnZXMocmVzdWx0Q291bnQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChyZXN1bHRDb3VudCA+IDApIHtcbiAgICAgIGNvbnN0IGtleSA9XG4gICAgICAgIHJlc3VsdENvdW50ID09PSAxXG4gICAgICAgICAgPyAnQGdlbmVyYWw6dGVybXMuaW50ZXJmYWNlLmNhdGVnb3J5LnNlYXJjaC5yZXN1bHRzLWZvdW5kLnNpbmd1bGFyJ1xuICAgICAgICAgIDogJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2gucmVzdWx0cy1mb3VuZC5wbHVyYWwnO1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLnRyYW5zbGF0ZUFzeW5jKGtleSwgeyBwYXJhbXM6IHsgY291bnQ6IHJlc3VsdENvdW50IH0gfSk7XG4gICAgICB0aGlzLnJlc3VsdHNGb3VuZFRleHQuc2V0KHRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3VsdHNGb3VuZFRleHQuc2V0KCcnKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHNlYXJjaCBzdGF0ZSBhbmQgcmVzdG9yZXMgdHJlZSB0byBvcmlnaW5hbCBleHBhbmRlZCBzdGF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXNldFNlYXJjaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNlYXJjaFJlc3VsdENvdW50LnNldCgwKTtcbiAgICB0aGlzLnJlc3VsdHNGb3VuZFRleHQuc2V0KCcnKTtcbiAgICB0aGlzLmN1cnJlbnRTZWFyY2hUZXJtID0gbnVsbDtcbiAgICB0aGlzLmlzU2VhcmNoaW5nLnNldChmYWxzZSk7XG4gICAgdGhpcy5tYXRjaGluZ05vZGVJZHMuY2xlYXIoKTtcbiAgICB0aGlzLnJlbGV2YW50Tm9kZUlkcy5jbGVhcigpO1xuICAgIHRoaXMubm9kZURhdGFDYWNoZS5jbGVhcigpO1xuICAgIC8vIENsZWFyIGhpZ2hsaWdodGluZ1xuICAgIHRoaXMuaGlnaGxpZ2h0U2VydmljZS5jbGVhcigpO1xuXG4gICAgY29uc3QgdHJlZUNvbXBvbmVudCA9IHRoaXMudHJlZSgpO1xuICAgIGlmICghdHJlZUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5leHBhbmRlZE5vZGVzQmVmb3JlU2VhcmNoID0gW107XG4gICAgICB0aGlzLm5vZGVzRXhwYW5kZWREdXJpbmdTZWFyY2ggPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZWxvYWQgdHJlZSB0byBzaG93IGFsbCBub2RlcyAobm8gZmlsdGVyaW5nKVxuICAgIGF3YWl0IHRyZWVDb21wb25lbnQucmVsb2FkRGF0YSgpO1xuXG4gICAgLy8gQ29sbGFwc2Ugbm9kZXMgdGhhdCB3ZXJlIGV4cGFuZGVkIGR1cmluZyBzZWFyY2ggKGluIHJldmVyc2Ugb3JkZXIgLSBsZWF2ZXMgZmlyc3QpXG4gICAgY29uc3Qgbm9kZXNUb0NvbGxhcHNlID0gWy4uLnRoaXMubm9kZXNFeHBhbmRlZER1cmluZ1NlYXJjaF0ucmV2ZXJzZSgpO1xuICAgIHRoaXMubm9kZXNFeHBhbmRlZER1cmluZ1NlYXJjaCA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBub2RlSWQgb2Ygbm9kZXNUb0NvbGxhcHNlKSB7XG4gICAgICAvLyBPbmx5IGNvbGxhcHNlIGlmIGl0IHdhc24ndCBvcmlnaW5hbGx5IGV4cGFuZGVkIGJlZm9yZSBzZWFyY2hcbiAgICAgIGlmICghdGhpcy5leHBhbmRlZE5vZGVzQmVmb3JlU2VhcmNoLmluY2x1ZGVzKG5vZGVJZCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0cmVlQ29tcG9uZW50LmNvbGxhcHNlTm9kZShub2RlSWQpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBOb2RlIG1pZ2h0IG5vdCBleGlzdCBhbnltb3JlLCBpZ25vcmVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBzdG9yZWQgZXhwYW5kZWQgbm9kZXNcbiAgICB0aGlzLmV4cGFuZGVkTm9kZXNCZWZvcmVTZWFyY2ggPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBub2RlIG1hdGNoZXMgdGhlIGN1cnJlbnQgc2VhcmNoIHRlcm1cbiAgICovXG4gIHByb3RlY3RlZCBpc01hdGNoaW5nTm9kZShub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1hdGNoaW5nTm9kZUlkcy5oYXMobm9kZUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIG5vZGUgY2xpY2sgZXZlbnRzIHRvIGFwcGx5IGNhdGVnb3J5IGZpbHRlcnMgYW5kIHRyYWNrIHNlbGVjdGVkIGNhdGVnb3J5IGZvciBjcmVhdGUgY29tbWFuZFxuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZU5vZGVDbGljayhub2RlOiBBWFRyZWVWaWV3Tm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGVEYXRhID0gdGhpcy5leHRyYWN0Tm9kZURhdGEobm9kZSk7XG4gICAgY29uc3QgYXBwbHlDb25kaXRpb25zID0gdGhpcy52bSgpLmVudGl0eURlZi5jYXRlZ29yeT8uYXBwbHlDb25kaXRpb25zIHx8IFtdO1xuICAgIGNvbnN0IHZhbHVlRmllbGQgPSB0aGlzLnZhbHVlRmllbGQoKTtcbiAgICBjb25zdCB0ZXh0RmllbGQgPSB0aGlzLnRleHRGaWVsZCgpO1xuICAgIGNvbnN0IG5vZGVJZCA9IFN0cmluZyhub2RlRGF0YVt2YWx1ZUZpZWxkXSA/PyBub2RlWydpZCddID8/ICcnKTtcblxuICAgIC8vIFRyYWNrIHNlbGVjdGVkIGNhdGVnb3J5IGZvciBkZWZhdWx0IGNhdGVnb3J5IHdoZW4gY3JlYXRpbmcgbmV3IGVudGl0aWVzXG4gICAgaWYgKG5vZGVJZCA9PT0gJ2FsbCcgfHwgIW5vZGVJZCkge1xuICAgICAgdGhpcy52bSgpLnNldFNlbGVjdGVkQ2F0ZWdvcnkobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudm0oKS5zZXRTZWxlY3RlZENhdGVnb3J5KHtcbiAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgdGl0bGU6IFN0cmluZyhub2RlRGF0YVt0ZXh0RmllbGRdID8/IG5vZGVbJ3RpdGxlJ10gPz8gJycpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2F0ZWdvcnlGaWx0ZXJzID0gdGhpcy5idWlsZENhdGVnb3J5RmlsdGVycyhub2RlRGF0YSwgYXBwbHlDb25kaXRpb25zKTtcbiAgICBjb25zdCB2aWV3RmlsdGVycyA9IHRoaXMuYnVpbGRWaWV3RmlsdGVycygpO1xuXG4gICAgdGhpcy52bSgpLmRhdGFTb3VyY2UuZmlsdGVyKHtcbiAgICAgIGZpbHRlcnM6IFsuLi52aWV3RmlsdGVycywgLi4uY2F0ZWdvcnlGaWx0ZXJzXSxcbiAgICAgIGxvZ2ljOiAnYW5kJyxcbiAgICB9KTtcbiAgICB0aGlzLnZtKCkuZGF0YVNvdXJjZS5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBub2RlIHRvZ2dsZSBldmVudHMgKGV4cGFuc2lvbi9jb2xsYXBzZSlcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBvbk5vZGVUb2dnbGUoX2V2ZW50OiBBWFRyZWVWaWV3Tm9kZVRvZ2dsZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVHJlZSBjb21wb25lbnQgaGFuZGxlcyBsYXp5IGxvYWRpbmcgdmlhIGRhdGFzb3VyY2UgY2FsbGJhY2tcbiAgfVxuXG4gIC8vIHByb3RlY3RlZCB0b2dnbGVFeHBhbmQoZTogQVhUcmVlVmlld05vZGVEb3VibGVDbGlja0V2ZW50KSB7XG4gIC8vICAgKGUuY29tcG9uZW50IGFzIEFYVHJlZVZpZXdDb21wb25lbnQpLnRvZ2dsZU5vZGVFeHBhbnNpb24oU3RyaW5nKGUubm9kZVt0aGlzLnZhbHVlRmllbGQoKV0gPz8gJycpKTtcbiAgLy8gfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgVHJlZSBEYXRhIFNvdXJjZSAgIC0tLS1cblxuICAvKipcbiAgICogRGF0YXNvdXJjZSBjYWxsYmFjayBmb3IgdHJlZS12aWV3IGNvbXBvbmVudC5cbiAgICogUHJvdmlkZXMgbGF6eSBsb2FkaW5nIHN1cHBvcnQgZm9yIHRyZWUgbm9kZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgZGF0YXNvdXJjZSA9IGFzeW5jIChwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhUcmVlVmlld05vZGVbXT4gPT4ge1xuICAgIGNvbnNvbGUubG9nKCdkYXRhc291cmNlJywgcGFyZW50SWQpO1xuICAgIGlmICghdGhpcy5pc1RyZWVJbml0aWFsaXplZCgpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gTG9hZCByb290IG5vZGVzIGlmIG5vIHBhcmVudCBJRCBwcm92aWRlZFxuICAgIGlmICghcGFyZW50SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRSb290Tm9kZXMoKTtcbiAgICB9XG5cbiAgICAvLyBMb2FkIGNoaWxkcmVuIGZvciB0aGUgc3BlY2lmaWVkIHBhcmVudFxuICAgIHJldHVybiBhd2FpdCB0aGlzLmxvYWRDaGlsZE5vZGVzKHBhcmVudElkKTtcbiAgfTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIENSVUQgT3BlcmF0aW9ucyAgIC0tLS1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyByb290IGNhdGVnb3J5IG5vZGVcbiAgICovXG4gIGFzeW5jIGhhbmRsZUNyZWF0ZVJvb3RDbGljayhldmVudDogQVhDbGlja0V2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wcmV2ZW50RGVmYXVsdEFuZFN0b3BQcm9wYWdhdGlvbihldmVudCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuZXhlY3V0ZUNyZWF0ZVdvcmtmbG93KHVuZGVmaW5lZCk7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZUNyZWF0ZVJlc3VsdChjb250ZXh0LCB1bmRlZmluZWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBjcmVhdGluZyByb290IGNhdGVnb3J5OicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjaGlsZCBjYXRlZ29yeSB1bmRlciB0aGUgZ2l2ZW4gcGFyZW50IG5vZGVcbiAgICovXG4gIGFzeW5jIGhhbmRsZUNyZWF0ZUNoaWxkQ2xpY2sobm9kZTogQVhUcmVlVmlld05vZGUsIGV2ZW50OiBBWENsaWNrRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0QW5kU3RvcFByb3BhZ2F0aW9uKGV2ZW50KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJlbnRJZCA9IHRoaXMuZXh0cmFjdE5vZGVJZChub2RlKTtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVDcmVhdGVXb3JrZmxvdyhwYXJlbnRJZCk7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZUNyZWF0ZVJlc3VsdChjb250ZXh0LCBwYXJlbnRJZCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNyZWF0aW5nIGNoaWxkIGNhdGVnb3J5OicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBjYXRlZ29yeSBub2RlXG4gICAqL1xuICBhc3luYyBoYW5kbGVFZGl0Tm9kZUNsaWNrKG5vZGU6IEFYVHJlZVZpZXdOb2RlLCBldmVudDogQVhDbGlja0V2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5wcmV2ZW50RGVmYXVsdEFuZFN0b3BQcm9wYWdhdGlvbihldmVudCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgbm9kZURhdGEgPSB0aGlzLmV4dHJhY3ROb2RlRGF0YShub2RlKTtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGVNb2RpZnlXb3JrZmxvdyhub2RlRGF0YSk7XG4gICAgICBhd2FpdCB0aGlzLmhhbmRsZU1vZGlmeVJlc3VsdChjb250ZXh0LCBub2RlKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZWRpdGluZyBjYXRlZ29yeTonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBjYXRlZ29yeSBub2RlXG4gICAqL1xuICBhc3luYyBoYW5kbGVEZWxldGVOb2RlQ2xpY2sobm9kZTogQVhUcmVlVmlld05vZGUsIGV2ZW50OiBBWENsaWNrRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnByZXZlbnREZWZhdWx0QW5kU3RvcFByb3BhZ2F0aW9uKGV2ZW50KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBub2RlRGF0YSA9IHRoaXMuZXh0cmFjdE5vZGVEYXRhKG5vZGUpO1xuICAgICAgY29uc3QgY29udGV4dCA9IGF3YWl0IHRoaXMuZXhlY3V0ZURlbGV0ZVdvcmtmbG93KG5vZGVEYXRhKTtcbiAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRGVsZXRlUmVzdWx0KGNvbnRleHQsIG5vZGUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkZWxldGluZyBjYXRlZ29yeTonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQcml2YXRlIFRyZWUgTWFuYWdlbWVudCBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgY2F0ZWdvcnkgdHJlZSBkYXRhIHN0cnVjdHVyZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplVHJlZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNldExvYWRpbmdXaXRoRGVsYXkodHJ1ZSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZW50aXR5S2V5ID0gdGhpcy5jYXRlZ29yeUVudGl0eUtleSgpO1xuICAgICAgdGhpcy50cmVlQ29uZmlnID0ge1xuICAgICAgICBlbnRpdHlLZXksXG4gICAgICAgIHRleHRGaWVsZDogdGhpcy50ZXh0RmllbGQoKSxcbiAgICAgICAgdmFsdWVGaWVsZDogdGhpcy52YWx1ZUZpZWxkKCksXG4gICAgICB9O1xuXG4gICAgICB0aGlzLnRyZWVEYXRhID0gYXdhaXQgdGhpcy5jYXRlZ29yeVRyZWVTZXJ2aWNlLmluaXRpYWxpemVDYXRlZ29yeVRyZWUodGhpcy50cmVlQ29uZmlnKTtcbiAgICAgIGlmICghdGhpcy50cmVlRGF0YSkge1xuICAgICAgICB0aGlzLmNsZWFyTG9hZGluZ1N0YXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IHBhcmVudCBrZXkgZnJvbSBlbnRpdHkgZGVmaW5pdGlvblxuICAgICAgaWYgKHRoaXMudHJlZURhdGEuY2F0ZWdvcnlFbnRpdHlEZWY/LnBhcmVudEtleSkge1xuICAgICAgICB0aGlzLnRyZWVDb25maWcucGFyZW50S2V5ID0gdGhpcy50cmVlRGF0YS5jYXRlZ29yeUVudGl0eURlZi5wYXJlbnRLZXk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY2F0ZWdvcmllczonLCBlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuY2xlYXJMb2FkaW5nU3RhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgcm9vdCBub2RlcyBmb3IgdGhlIHRyZWVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJvb3ROb2RlcygpOiBQcm9taXNlPEFYVHJlZVZpZXdOb2RlW10+IHtcbiAgICBpZiAoIXRoaXMuaXNUcmVlSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vIExvYWQgcm9vdCBjYXRlZ29yaWVzXG4gICAgY29uc3QgaXRlbXMgPSBhd2FpdCB0aGlzLmNhdGVnb3J5VHJlZVNlcnZpY2UubG9hZFJvb3RDYXRlZ29yaWVzKHRoaXMudHJlZURhdGEhLCB0aGlzLnRyZWVDb25maWchKTtcbiAgICBpZiAoIWl0ZW1zKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdE5vZGUgPSBhd2FpdCB0aGlzLmNhdGVnb3J5VHJlZVNlcnZpY2UuY3JlYXRlUm9vdE5vZGUoaXRlbXMsIHRoaXMudHJlZUNvbmZpZyEpO1xuXG4gICAgLy8gRmlsdGVyIHJvb3QncyBjaGlsZHJlbiB3aGVuIHNlYXJjaCBpcyBhY3RpdmVcbiAgICBpZiAodGhpcy5yZWxldmFudE5vZGVJZHMuc2l6ZSA+IDAgJiYgcm9vdE5vZGVbJ2NoaWxkcmVuJ10pIHtcbiAgICAgIHJvb3ROb2RlWydjaGlsZHJlbiddID0gKHJvb3ROb2RlWydjaGlsZHJlbiddIGFzIEFYVHJlZVZpZXdOb2RlW10pLmZpbHRlcigoY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRJZCA9IFN0cmluZyhjaGlsZFsnaWQnXSA/PyAnJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbGV2YW50Tm9kZUlkcy5oYXMoY2hpbGRJZCk7XG4gICAgICB9KTtcbiAgICAgIHJvb3ROb2RlWydjaGlsZHJlbkNvdW50J10gPSAocm9vdE5vZGVbJ2NoaWxkcmVuJ10gYXMgQVhUcmVlVmlld05vZGVbXSkubGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiBbcm9vdE5vZGVdO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGNoaWxkIG5vZGVzIGZvciBhIGdpdmVuIHBhcmVudCBJRFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkQ2hpbGROb2RlcyhwYXJlbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBWFRyZWVWaWV3Tm9kZVtdPiB7XG4gICAgaWYgKCF0aGlzLmlzVHJlZUluaXRpYWxpemVkKCkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgbWluaW1hbCBub2RlIG9iamVjdCAtIGxvYWRDaGlsZHJlbiBvbmx5IG5lZWRzIG5vZGUuaWRcbiAgICBjb25zdCB0YXJnZXROb2RlOiBBWFRyZWVWaWV3Tm9kZSA9IHtcbiAgICAgIGlkOiBwYXJlbnRJZCxcbiAgICB9IGFzIEFYVHJlZVZpZXdOb2RlO1xuXG4gICAgbGV0IGNoaWxkcmVuID0gYXdhaXQgdGhpcy5jYXRlZ29yeVRyZWVTZXJ2aWNlLmxvYWRDaGlsZHJlbih0YXJnZXROb2RlLCB0aGlzLnRyZWVEYXRhISwgdGhpcy50cmVlQ29uZmlnISk7XG5cbiAgICAvLyBGaWx0ZXIgY2hpbGRyZW4gd2hlbiBzZWFyY2ggaXMgYWN0aXZlXG4gICAgaWYgKHRoaXMucmVsZXZhbnROb2RlSWRzLnNpemUgPiAwKSB7XG4gICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcigoY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgY2hpbGRJZCA9IFN0cmluZyhjaGlsZFsnaWQnXSA/PyAnJyk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbGV2YW50Tm9kZUlkcy5oYXMoY2hpbGRJZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaGVzIHRoZSB0cmVlIHZpZXcgY29tcG9uZW50XG4gICAqL1xuICBwcml2YXRlIHJlZnJlc2hUcmVlKCk6IHZvaWQge1xuICAgIGNvbnN0IHRyZWVDb21wb25lbnQgPSB0aGlzLnRyZWUoKTtcbiAgICBpZiAodHJlZUNvbXBvbmVudCkge1xuICAgICAgdHJlZUNvbXBvbmVudC5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyB0cmVlIGFmdGVyIENSVUQgb3BlcmF0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoQWZ0ZXJDaGFuZ2UocGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJlZnJlc2hUcmVlKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBub2RlIHRvIHRoZSB0cmVlIGFmdGVyIGNyZWF0ZSBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYWRkTm9kZVRvVHJlZShlbnRpdHlEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNUcmVlSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyZWVDb21wb25lbnQgPSB0aGlzLnRyZWUoKTtcbiAgICBpZiAoIXRyZWVDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5jYXRlZ29yeVRyZWVTZXJ2aWNlLmNvbnZlcnRUb1RyZWVOb2RlKGVudGl0eURhdGEsIHRoaXMudHJlZUNvbmZpZyEpO1xuXG4gICAgaWYgKHBhcmVudElkKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZENoaWxkTm9kZSh0cmVlQ29tcG9uZW50LCBwYXJlbnRJZCwgbmV3Tm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkUm9vdE5vZGUodHJlZUNvbXBvbmVudCwgbmV3Tm9kZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjaGlsZCBub2RlIHRvIGEgcGFyZW50IG5vZGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYWRkQ2hpbGROb2RlKFxuICAgIHRyZWVDb21wb25lbnQ6IEFYVHJlZVZpZXdDb21wb25lbnQsXG4gICAgcGFyZW50SWQ6IHN0cmluZyxcbiAgICBuZXdOb2RlOiBBWFRyZWVWaWV3Tm9kZSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGFyZW50Tm9kZSA9IHRyZWVDb21wb25lbnQuZmluZE5vZGUocGFyZW50SWQpO1xuICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWZ0ZXJDaGFuZ2UocGFyZW50SWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdHJlZUNvbXBvbmVudC5pc05vZGVFeHBhbmRlZChwYXJlbnRJZCkpIHtcbiAgICAgIGF3YWl0IHRyZWVDb21wb25lbnQuZXhwYW5kTm9kZShwYXJlbnRJZCk7XG4gICAgfVxuXG4gICAgdHJlZUNvbXBvbmVudC5hZGRDaGlsZChwYXJlbnRJZCwgbmV3Tm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJvb3Qgbm9kZSB0byB0aGUgdHJlZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhZGRSb290Tm9kZSh0cmVlQ29tcG9uZW50OiBBWFRyZWVWaWV3Q29tcG9uZW50LCBuZXdOb2RlOiBBWFRyZWVWaWV3Tm9kZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJvb3ROb2RlID0gdHJlZUNvbXBvbmVudC5maW5kTm9kZShST09UX05PREVfSUQpO1xuICAgIGlmICghcm9vdE5vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaEFmdGVyQ2hhbmdlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0cmVlQ29tcG9uZW50LmlzTm9kZUV4cGFuZGVkKFJPT1RfTk9ERV9JRCkpIHtcbiAgICAgIGF3YWl0IHRyZWVDb21wb25lbnQuZXhwYW5kTm9kZShST09UX05PREVfSUQpO1xuICAgIH1cblxuICAgIHRyZWVDb21wb25lbnQuYWRkQ2hpbGQoUk9PVF9OT0RFX0lELCBuZXdOb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuIGV4aXN0aW5nIG5vZGUgaW4gdGhlIHRyZWUgYWZ0ZXIgZWRpdCBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlTm9kZUluVHJlZShub2RlSWQ6IHN0cmluZywgZW50aXR5RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNUcmVlSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyZWVDb21wb25lbnQgPSB0aGlzLnRyZWUoKTtcbiAgICBpZiAoIXRyZWVDb21wb25lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ05vZGUgPSB0cmVlQ29tcG9uZW50LmZpbmROb2RlKG5vZGVJZCk7XG4gICAgaWYgKCFleGlzdGluZ05vZGUpIHtcbiAgICAgIGF3YWl0IHRoaXMucmVmcmVzaE5vZGVQYXJlbnQoZW50aXR5RGF0YSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgcGFyZW50IGNoYW5nZWRcbiAgICBjb25zdCBwYXJlbnRLZXkgPSB0aGlzLnRyZWVEYXRhPy5jYXRlZ29yeUVudGl0eURlZj8ucGFyZW50S2V5O1xuICAgIGxldCBuZXdQYXJlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnRLZXkgJiYgZW50aXR5RGF0YVtwYXJlbnRLZXldKSB7XG4gICAgICBjb25zdCBwYXJlbnRWYWx1ZSA9IFN0cmluZyhlbnRpdHlEYXRhW3BhcmVudEtleV0pO1xuICAgICAgLy8gJ2FsbCcgbWVhbnMgcm9vdCwgc28gdHJlYXQgaXQgYXMgdW5kZWZpbmVkXG4gICAgICBuZXdQYXJlbnRJZCA9IHBhcmVudFZhbHVlICE9PSAnYWxsJyAmJiBwYXJlbnRWYWx1ZSAhPT0gJycgPyBwYXJlbnRWYWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50UGFyZW50ID0gdHJlZUNvbXBvbmVudC5nZXRQYXJlbnQobm9kZUlkKTtcbiAgICBjb25zdCBjdXJyZW50UGFyZW50SWQgPSBjdXJyZW50UGFyZW50ID8gU3RyaW5nKGN1cnJlbnRQYXJlbnRbJ2lkJ10gPz8gJycpIDogdW5kZWZpbmVkO1xuICAgIC8vIE5vcm1hbGl6ZSBjdXJyZW50IHBhcmVudDogJ2FsbCcgbWVhbnMgcm9vdCAodW5kZWZpbmVkKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRDdXJyZW50UGFyZW50SWQgPSBjdXJyZW50UGFyZW50SWQgPT09ICdhbGwnIHx8IGN1cnJlbnRQYXJlbnRJZCA9PT0gJycgPyB1bmRlZmluZWQgOiBjdXJyZW50UGFyZW50SWQ7XG5cbiAgICAvLyBIYW5kbGUgcGFyZW50IGNoYW5nZTogbW92ZSBub2RlIHRvIG5ldyBwYXJlbnQgaWYgcGFyZW50IGNoYW5nZWRcbiAgICBpZiAobmV3UGFyZW50SWQgIT09IG5vcm1hbGl6ZWRDdXJyZW50UGFyZW50SWQpIHtcbiAgICAgIC8vIElmIHBhcmVudCBjaGFuZ2VkLCBtb3ZlIHRoZSBub2RlIGZpcnN0XG4gICAgICBjb25zdCBtb3ZlZCA9IHRyZWVDb21wb25lbnQubW92ZU5vZGUobm9kZUlkLCBuZXdQYXJlbnRJZCk7XG5cbiAgICAgIGlmICghbW92ZWQpIHtcbiAgICAgICAgLy8gSWYgbW92ZSBmYWlsZWQsIHJlZnJlc2ggdGhlIHRyZWUgdG8gZW5zdXJlIGNvbnNpc3RlbmN5XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaE5vZGVQYXJlbnQoZW50aXR5RGF0YSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQWZ0ZXIgbW92aW5nLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUgbmV3IHBhcmVudCBpcyBleHBhbmRlZFxuICAgICAgaWYgKG5ld1BhcmVudElkKSB7XG4gICAgICAgIGlmICghdHJlZUNvbXBvbmVudC5pc05vZGVFeHBhbmRlZChuZXdQYXJlbnRJZCkpIHtcbiAgICAgICAgICBhd2FpdCB0cmVlQ29tcG9uZW50LmV4cGFuZE5vZGUobmV3UGFyZW50SWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNb3ZpbmcgdG8gcm9vdCAtIGVuc3VyZSByb290IGlzIGV4cGFuZGVkXG4gICAgICAgIGlmICghdHJlZUNvbXBvbmVudC5pc05vZGVFeHBhbmRlZChST09UX05PREVfSUQpKSB7XG4gICAgICAgICAgYXdhaXQgdHJlZUNvbXBvbmVudC5leHBhbmROb2RlKFJPT1RfTk9ERV9JRCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbm9kZSBwcm9wZXJ0aWVzICh0aXRsZSwgZGF0YSwgZXRjLilcbiAgICBjb25zdCB1cGRhdGVkTm9kZSA9IHRoaXMuY2F0ZWdvcnlUcmVlU2VydmljZS5jb252ZXJ0VG9UcmVlTm9kZShlbnRpdHlEYXRhLCB0aGlzLnRyZWVDb25maWchKTtcbiAgICBjb25zdCB1cGRhdGVzOiBQYXJ0aWFsPEFYVHJlZVZpZXdOb2RlPiA9IHtcbiAgICAgIFsndGl0bGUnXTogdXBkYXRlZE5vZGVbJ3RpdGxlJ10sXG4gICAgICBbJ2RhdGEnXTogdXBkYXRlZE5vZGVbJ2RhdGEnXSxcbiAgICAgIFsnY2hpbGRyZW5Db3VudCddOiB1cGRhdGVkTm9kZVsnY2hpbGRyZW5Db3VudCddLFxuICAgICAgWydpY29uJ106IHVwZGF0ZWROb2RlWydpY29uJ10sXG4gICAgfTtcblxuICAgIHRyZWVDb21wb25lbnQuZWRpdE5vZGUobm9kZUlkLCB1cGRhdGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgbm9kZSBmcm9tIHRoZSB0cmVlIGFmdGVyIGRlbGV0ZSBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlTm9kZUZyb21UcmVlKG5vZGVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdHJlZUNvbXBvbmVudCA9IHRoaXMudHJlZSgpO1xuICAgIGlmICghdHJlZUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGVUb0RlbGV0ZSA9IHRyZWVDb21wb25lbnQuZmluZE5vZGUobm9kZUlkKTtcbiAgICBpZiAoIW5vZGVUb0RlbGV0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWZ0ZXJDaGFuZ2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cmVlQ29tcG9uZW50LnJlbW92ZU5vZGUobm9kZUlkKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgV29ya2Zsb3cgRXhlY3V0aW9uIE1ldGhvZHMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjcmVhdGUgZW50aXR5IHdvcmtmbG93XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVDcmVhdGVXb3JrZmxvdyhwYXJlbnRJZD86IHN0cmluZyk6IFByb21pc2U8QVhQV29ya2Zsb3dDb250ZXh0PiB7XG4gICAgY29uc3QgZW50aXR5S2V5ID0gdGhpcy5jYXRlZ29yeUVudGl0eUtleSgpO1xuICAgIGNvbnN0IHdvcmtmbG93RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmIChwYXJlbnRJZCAmJiB0aGlzLnRyZWVEYXRhPy5jYXRlZ29yeUVudGl0eURlZj8ucGFyZW50S2V5KSB7XG4gICAgICB3b3JrZmxvd0RhdGFbdGhpcy50cmVlRGF0YS5jYXRlZ29yeUVudGl0eURlZi5wYXJlbnRLZXldID0gcGFyZW50SWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMud29ya2Zsb3cuZXhlY3V0ZSgnY3JlYXRlLWVudGl0eScsIHtcbiAgICAgIGVudGl0eTogZW50aXR5S2V5LFxuICAgICAgZGF0YTogT2JqZWN0LmtleXMod29ya2Zsb3dEYXRhKS5sZW5ndGggPiAwID8gd29ya2Zsb3dEYXRhIDogdW5kZWZpbmVkLFxuICAgICAgb3B0aW9uczogeyBwcm9jZXNzOiB7IHJlZGlyZWN0OiBmYWxzZSwgY2FuQ3JlYXRlTmV3T25lOiAhIXBhcmVudElkIH0gfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgbW9kaWZ5IGVudGl0eSB3b3JrZmxvd1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlTW9kaWZ5V29ya2Zsb3cobm9kZURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxBWFBXb3JrZmxvd0NvbnRleHQ+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy53b3JrZmxvdy5leGVjdXRlKCdxdWljay1tb2RpZnktZW50aXR5Jywge1xuICAgICAgZW50aXR5OiB0aGlzLmNhdGVnb3J5RW50aXR5S2V5KCksXG4gICAgICBkYXRhOiBub2RlRGF0YSxcbiAgICAgIG9wdGlvbnM6IHsgbGF5b3V0OiB7IHNpemU6ICdtZCcgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBkZWxldGUgZW50aXR5IHdvcmtmbG93XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVEZWxldGVXb3JrZmxvdyhub2RlRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPEFYUFdvcmtmbG93Q29udGV4dD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLndvcmtmbG93LmV4ZWN1dGUoJ2RlbGV0ZS1lbnRpdHknLCB7XG4gICAgICBlbnRpdHk6IHRoaXMuY2F0ZWdvcnlFbnRpdHlLZXkoKSxcbiAgICAgIGRhdGE6IG5vZGVEYXRhLFxuICAgICAgb3B0aW9uczogeyBwcm9jZXNzOiB7IHNob3dSZXN1bHQ6IHRydWUgfSB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIHJlc3VsdCBvZiBhIGNyZWF0ZSBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlQ3JlYXRlUmVzdWx0KGNvbnRleHQ6IEFYUFdvcmtmbG93Q29udGV4dCwgcGFyZW50SWQ/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmdldE91dHB1dDxib29sZWFuPigncmVzdWx0Jyk7XG4gICAgaWYgKCFyZXN1bHQgfHwgIXRoaXMuaXNUcmVlSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoQWZ0ZXJDaGFuZ2UocGFyZW50SWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld0VudGl0eURhdGEgPSBjb250ZXh0LmdldFZhcmlhYmxlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PignZGF0YScpO1xuICAgIGlmIChuZXdFbnRpdHlEYXRhKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZE5vZGVUb1RyZWUobmV3RW50aXR5RGF0YSwgcGFyZW50SWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hBZnRlckNoYW5nZShwYXJlbnRJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIHJlc3VsdCBvZiBhIG1vZGlmeSBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlTW9kaWZ5UmVzdWx0KGNvbnRleHQ6IEFYUFdvcmtmbG93Q29udGV4dCwgbm9kZTogQVhUcmVlVmlld05vZGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmdldE91dHB1dDxib29sZWFuPigncmVzdWx0Jyk7XG4gICAgaWYgKCFyZXN1bHQgfHwgIXRoaXMuaXNUcmVlSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoTm9kZVBhcmVudCh0aGlzLmV4dHJhY3ROb2RlRGF0YShub2RlKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlZEVudGl0eURhdGEgPSBjb250ZXh0LmdldFZhcmlhYmxlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PignZGF0YScpO1xuICAgIGlmICh1cGRhdGVkRW50aXR5RGF0YSkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGVOb2RlSW5UcmVlKHRoaXMuZXh0cmFjdE5vZGVJZChub2RlKSwgdXBkYXRlZEVudGl0eURhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hOb2RlUGFyZW50KHRoaXMuZXh0cmFjdE5vZGVEYXRhKG5vZGUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyB0aGUgcmVzdWx0IG9mIGEgZGVsZXRlIG9wZXJhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVEZWxldGVSZXN1bHQoY29udGV4dDogQVhQV29ya2Zsb3dDb250ZXh0LCBub2RlOiBBWFRyZWVWaWV3Tm9kZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuZ2V0T3V0cHV0PGJvb2xlYW4+KCdyZXN1bHQnKTtcbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICBhd2FpdCB0aGlzLnJlbW92ZU5vZGVGcm9tVHJlZSh0aGlzLmV4dHJhY3ROb2RlSWQobm9kZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hOb2RlUGFyZW50KHRoaXMuZXh0cmFjdE5vZGVEYXRhKG5vZGUpKTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFV0aWxpdHkgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRyZWUgZGF0YSBhbmQgY29uZmlnIGFyZSBpbml0aWFsaXplZFxuICAgKi9cbiAgcHJpdmF0ZSBpc1RyZWVJbml0aWFsaXplZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy50cmVlRGF0YSAmJiB0aGlzLnRyZWVDb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIG5vZGUgZGF0YSBmcm9tIGEgdHJlZSBub2RlXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3ROb2RlRGF0YShub2RlOiBBWFRyZWVWaWV3Tm9kZSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gKChub2RlWydkYXRhJ10gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIHx8IG5vZGUpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIG5vZGUgSUQgZnJvbSBhIHRyZWUgbm9kZVxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0Tm9kZUlkKG5vZGU6IEFYVHJlZVZpZXdOb2RlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5nKG5vZGVbJ2lkJ10gPz8gJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBjYXRlZ29yeSBmaWx0ZXJzIGZyb20gbm9kZSBkYXRhIGFuZCBhcHBseSBjb25kaXRpb25zXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQ2F0ZWdvcnlGaWx0ZXJzKFxuICAgIG5vZGVEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICBhcHBseUNvbmRpdGlvbnM6IEFYUFF1ZXJ5RmlsdGVyW10sXG4gICk6IEFYRGF0YVNvdXJjZUZpbHRlck9wdGlvbltdIHtcbiAgICByZXR1cm4gYXBwbHlDb25kaXRpb25zXG4gICAgICAubWFwKChjb25kaXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBub2RlRGF0YVtjb25kaXRpb24udmFsdWVdO1xuICAgICAgICBpZiAodmFsdWUgPT09ICdhbGwnIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpZWxkOiBjb25kaXRpb24ubmFtZSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBvcGVyYXRvcjogY29uZGl0aW9uLm9wZXJhdG9yLFxuICAgICAgICB9IGFzIEFYRGF0YVNvdXJjZUZpbHRlck9wdGlvbjtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChpdGVtKTogaXRlbSBpcyBOb25OdWxsYWJsZTx0eXBlb2YgaXRlbT4gPT4gaXRlbSAhPT0gbnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHZpZXcgZmlsdGVycyBmcm9tIHZpZXcgY29uZGl0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFZpZXdGaWx0ZXJzKCk6IEFYRGF0YVNvdXJjZUZpbHRlck9wdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy52bSgpXG4gICAgICAudmlldygpXG4gICAgICAuY29uZGl0aW9ucy5tYXAoKGNvbmRpdGlvbikgPT4gKHsgLi4uY29uZGl0aW9uLCBmaWVsZDogY29uZGl0aW9uLm5hbWUgfSkgYXMgQVhEYXRhU291cmNlRmlsdGVyT3B0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNoZXMgdGhlIHBhcmVudCBub2RlIG9mIHRoZSBnaXZlbiBlbnRpdHkgZGF0YVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZWZyZXNoTm9kZVBhcmVudChlbnRpdHlEYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBhcmVudEtleSA9IHRoaXMudHJlZURhdGE/LmNhdGVnb3J5RW50aXR5RGVmPy5wYXJlbnRLZXk7XG4gICAgY29uc3QgcGFyZW50SWQgPSBwYXJlbnRLZXkgJiYgZW50aXR5RGF0YVtwYXJlbnRLZXldID8gKGVudGl0eURhdGFbcGFyZW50S2V5XSBhcyBzdHJpbmcpIDogdW5kZWZpbmVkO1xuICAgIGF3YWl0IHRoaXMucmVmcmVzaEFmdGVyQ2hhbmdlKHBhcmVudElkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmV2ZW50cyBkZWZhdWx0IGJlaGF2aW9yIGFuZCBzdG9wcyBldmVudCBwcm9wYWdhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBwcmV2ZW50RGVmYXVsdEFuZFN0b3BQcm9wYWdhdGlvbihldmVudDogQVhDbGlja0V2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQubmF0aXZlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5uYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgTG9hZGluZyBTdGF0ZSBNYW5hZ2VtZW50ICAgLS0tLVxuXG4gIC8qKlxuICAgKiBTZXRzIGxvYWRpbmcgc3RhdGUgd2l0aCBkZWxheSB0byBhdm9pZCBmbGlja2VyaW5nIGZvciBmYXN0IHJlc3BvbnNlc1xuICAgKi9cbiAgcHJpdmF0ZSBzZXRMb2FkaW5nV2l0aERlbGF5KGxvYWRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIWxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sb2FkaW5nVGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZW91dElkKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmdUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMubG9hZGluZ1RpbWVvdXRJZCA9IG51bGw7XG4gICAgfSwgTE9BRElOR19ERUxBWV9NUyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGxvYWRpbmcgc3RhdGUgYW5kIGNhbmNlbHMgYW55IHBlbmRpbmcgdGltZW91dFxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhckxvYWRpbmdTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nVGltZW91dElkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZW91dElkKTtcbiAgICAgIHRoaXMubG9hZGluZ1RpbWVvdXRJZCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIiwiPGF4cC1sYXlvdXQtaGVhZGVyPlxuICA8YXhwLWxheW91dC10aXRsZT57e1xuICAgIHZtKCkuZW50aXR5RGVmLmNhdGVnb3J5Py50aXRsZSB8fCAnQGdlbmVyYWw6dGVybXMuY2xhc3NpZmljYXRpb24uY2F0ZWdvcnknIHwgdHJhbnNsYXRlIHwgYXN5bmNcbiAgICB9fTwvYXhwLWxheW91dC10aXRsZT5cbiAgPGF4cC1sYXlvdXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtMSBheC13LWZ1bGxcIj5cbiAgICAgIDxheC1zZWFyY2gtYm94IChvblZhbHVlQ2hhbmdlZCk9XCJoYW5kbGVDYXRlZ29yeVNlYXJjaENoYW5nZSgkZXZlbnQpXCIgW2RlbGF5VGltZV09XCIzMDBcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2gucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmNcIj5cbiAgICAgIDwvYXgtc2VhcmNoLWJveD5cbiAgICAgIEBpZiAoaXNTZWFyY2hpbmcoKSAmJiBjdXJyZW50U2VhcmNoVmFsdWUoKS50cmltKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJheC10ZXh0LXhzIGF4LXRleHQtbXV0ZWQgYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTFcIj5cbiAgICAgICAgPHNwYW4+e3sgJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2guc2VhcmNoaW5nJyB8IHRyYW5zbGF0ZSB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChjdXJyZW50U2VhcmNoVmFsdWUoKS50cmltKCkgJiYgIWlzU2VhcmNoaW5nKCkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJheC10ZXh0LXhzIGF4LXRleHQtbXV0ZWQgYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtZ2FwLTFcIj5cbiAgICAgICAgQGlmIChzZWFyY2hSZXN1bHRDb3VudCgpID4gMCkge1xuICAgICAgICA8c3Bhbj57eyByZXN1bHRzRm91bmRUZXh0KCkgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2F4cC1sYXlvdXQtdG9vbGJhcj5cbjwvYXhwLWxheW91dC1oZWFkZXI+XG48YXhwLWxheW91dC1jb250ZW50PlxuICBAaWYgKGlzTG9hZGluZygpKSB7XG4gIDxkaXYgY2xhc3M9XCJheC1wLTQgYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtM1wiPlxuICAgIDxheC1za2VsZXRvbiBjbGFzcz1cImF4LXctZnVsbCBheC1oLTYgYXgtcm91bmRlZC1tZFwiPjwvYXgtc2tlbGV0b24+XG4gICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtdy1mdWxsIGF4LWgtNiBheC1yb3VuZGVkLW1kXCI+PC9heC1za2VsZXRvbj5cbiAgICA8YXgtc2tlbGV0b24gY2xhc3M9XCJheC13LWZ1bGwgYXgtaC02IGF4LXJvdW5kZWQtbWRcIj48L2F4LXNrZWxldG9uPlxuICAgIDxheC1za2VsZXRvbiBjbGFzcz1cImF4LXctZnVsbCBheC1oLTYgYXgtcm91bmRlZC1tZFwiPjwvYXgtc2tlbGV0b24+XG4gICAgPGF4LXNrZWxldG9uIGNsYXNzPVwiYXgtdy1mdWxsIGF4LWgtNiBheC1yb3VuZGVkLW1kXCI+PC9heC1za2VsZXRvbj5cbiAgICA8YXgtc2tlbGV0b24gY2xhc3M9XCJheC13LWZ1bGwgYXgtaC02IGF4LXJvdW5kZWQtbWRcIj48L2F4LXNrZWxldG9uPlxuICA8L2Rpdj5cbiAgfSBAZWxzZSBpZiAoc2hvd05vU2VhcmNoUmVzdWx0cygpKSB7XG4gIDxkaXYgY2xhc3M9XCJfX2VtcHR5LXN0YXRlXCI+XG4gICAgPGF4cC1zdGF0ZS1tZXNzYWdlIGljb249XCJmYS1saWdodCBmYS1zZWFyY2hcIlxuICAgICAgW3RpdGxlXT1cIidAZ2VuZXJhbDp0ZXJtcy5pbnRlcmZhY2UuY2F0ZWdvcnkuc2VhcmNoLm5vLXJlc3VsdHMtZm91bmQudGl0bGUnXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInQGdlbmVyYWw6dGVybXMuaW50ZXJmYWNlLmNhdGVnb3J5LnNlYXJjaC5uby1yZXN1bHRzLWZvdW5kLmRlc2NyaXB0aW9uJ1wiPlxuICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gIDwvZGl2PlxuICB9IEBlbHNlIGlmICh0cmVlRGF0YSkge1xuICA8ZGl2IGNsYXNzPVwiYXgtcHgtNCBheC1tYXgtaC1bY2FsYygxMDB2aC0yNTBweCldIGF4LW92ZXJmbG93LWF1dG9cIj5cbiAgICA8YXgtdHJlZS12aWV3IFtkYXRhc291cmNlXT1cImRhdGFzb3VyY2VcIiBbc2VsZWN0TW9kZV09XCJzZWxlY3RNb2RlKClcIiBbc2VsZWN0aW9uQmVoYXZpb3JdPVwic2VsZWN0aW9uQmVoYXZpb3IoKVwiXG4gICAgICBbZHJhZ0FyZWFdPVwiZHJhZ0FyZWEoKVwiIFtkcmFnQmVoYXZpb3JdPVwiZHJhZ0JlaGF2aW9yKClcIiBbc2hvd0ljb25zXT1cInNob3dJY29ucygpXCJcbiAgICAgIFtzaG93Q2hpbGRyZW5CYWRnZV09XCJzaG93Q2hpbGRyZW5CYWRnZSgpXCIgW2V4cGFuZGVkSWNvbl09XCJleHBhbmRlZEljb24oKVwiIFtjb2xsYXBzZWRJY29uXT1cImNvbGxhcHNlZEljb24oKVwiXG4gICAgICBbaW5kZW50U2l6ZV09XCJpbmRlbnRTaXplKClcIiBbbG9va109XCJsb29rKClcIiBbdGl0bGVGaWVsZF09XCJ0ZXh0RmllbGQoKVwiIFtpZEZpZWxkXT1cInZhbHVlRmllbGQoKVwiXG4gICAgICBbZXhwYW5kT25Eb3VibGVDbGlja109XCJ0cnVlXCIgW25vZGVUZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIiAob25Ob2RlVG9nZ2xlKT1cIm9uTm9kZVRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgIChvbk5vZGVDbGljayk9XCJoYW5kbGVOb2RlQ2xpY2soJGV2ZW50Lm5vZGUpXCIgI3RyZWU+XG4gICAgPC9heC10cmVlLXZpZXc+XG4gIDwvZGl2PlxuICB9IEBlbHNlIHtcbiAgPGRpdiBjbGFzcz1cIl9fZW1wdHktc3RhdGVcIj5cbiAgICA8YXhwLXN0YXRlLW1lc3NhZ2UgaWNvbj1cImZhLWxpZ2h0IGZhLWZvbGRlci1vcGVuXCJcbiAgICAgIFt0aXRsZV09XCInQGdlbmVyYWw6dGVybXMuaW50ZXJmYWNlLmNhdGVnb3J5LnNlYXJjaC5uby1yZWNvcmRzLnRpdGxlJ1wiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiJ0BnZW5lcmFsOnRlcm1zLmludGVyZmFjZS5jYXRlZ29yeS5zZWFyY2gubm8tcmVjb3Jkcy5kZXNjcmlwdGlvbidcIj5cbiAgICAgIEBpZiAoIWNhdGVnb3J5UmVhZG9ubHkoKSkge1xuICAgICAgPGF4LWJ1dHRvbiBzbG90PVwiYWN0aW9uc1wiIChvbkNsaWNrKT1cImhhbmRsZUNyZWF0ZVJvb3RDbGljaygkZXZlbnQpXCIgbG9vaz1cInNvbGlkXCIgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgW3RleHRdPVwiJ0BnZW5lcmFsOmFjdGlvbnMuYWRkLW5ldy50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luY1wiPlxuICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhcyBmYS1wbHVzXCI+PC9heC1pY29uPlxuICAgICAgPC9heC1idXR0b24+XG4gICAgICB9XG4gICAgPC9heHAtc3RhdGUtbWVzc2FnZT5cbiAgPC9kaXY+XG4gIH1cblxuICA8bmctdGVtcGxhdGUgI2l0ZW1UZW1wbGF0ZSBsZXQtbm9kZT1cIm5vZGVcIiBsZXQtbGV2ZWw9XCJsZXZlbFwiPlxuICAgIEBsZXQgaXRlbSA9IG5vZGUuZGF0YSB8fCBub2RlO1xuICAgIEBsZXQgdGV4dEZpZWxkID0gdm0oKS5lbnRpdHlEZWYuY2F0ZWdvcnk/LnRleHRGaWVsZCB8fCAndGl0bGUnO1xuICAgIEBsZXQgdmFsdWVGaWVsZCA9IHZtKCkuZW50aXR5RGVmLmNhdGVnb3J5Py52YWx1ZUZpZWxkIHx8ICdpZCc7XG4gICAgQGxldCBpdGVtSWQgPSBpdGVtW3ZhbHVlRmllbGRdIHx8IG5vZGUuaWQ7XG4gICAgQGxldCBpdGVtVGl0bGUgPSBpdGVtW3RleHRGaWVsZF0gfHwgbm9kZS50aXRsZTtcbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1iZXR3ZWVuIGF4LXctZnVsbCBheC1nYXAtMiBheC1vdmVyZmxvdy1oaWRkZW4gYXgtcHktMVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0yIGF4LW1pbi13LTBcIj5cbiAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYXMgZmEtZm9sZGVyXCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiaXRlbS5jb2xvciA/PyAncmdiYSh2YXIoLS1heC1zeXMtY29sb3Itd2FybmluZy01MDApLCAxKSdcIj48L2F4LWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdHJ1bmNhdGVcIj57eyBpdGVtVGl0bGUgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAoaXRlbUlkICYmIGl0ZW1JZCAhPT0gJ2FsbCcgJiYgIWNhdGVnb3J5UmVhZG9ubHkoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0xXCI+XG4gICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC14c1wiIGNvbG9yPVwiZGVmYXVsdFwiIGxvb2s9XCJibGFua1wiIChvbkNsaWNrKT1cIiRldmVudC5uYXRpdmVFdmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmFzIGZhLWVsbGlwc2lzLXZcIj48L2F4LWljb24+XG4gICAgICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbSAob25DbGljayk9XCJoYW5kbGVDcmVhdGVDaGlsZENsaWNrKG5vZGUsICRldmVudClcIiBsb29rPVwiYmxhbmtcIiBjb2xvcj1cImRlZmF1bHRcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIignQGdlbmVyYWw6YWN0aW9ucy5hZGQtbmV3LWNoaWxkLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIj5cbiAgICAgICAgICAgICAgICA8YXgtaWNvbiBjbGFzcz1cImZhcyBmYS1wbHVzXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gKG9uQ2xpY2spPVwiaGFuZGxlRWRpdE5vZGVDbGljayhub2RlLCAkZXZlbnQpXCIgbG9vaz1cImJsYW5rXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCIoJ0BnZW5lcmFsOmFjdGlvbnMuZWRpdC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykhXCI+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYXMgZmEtcGVuXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gKG9uQ2xpY2spPVwiaGFuZGxlRGVsZXRlTm9kZUNsaWNrKG5vZGUsICRldmVudClcIiBjb2xvcj1cImRhbmdlclwiIGxvb2s9XCJibGFua1wiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiKCdAZ2VuZXJhbDphY3Rpb25zLmRlbGV0ZS50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykhXCI+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYXMgZmEtdHJhc2hcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2UgaWYgKGl0ZW1JZCA9PT0gJ2FsbCcgJiYgIWNhdGVnb3J5UmVhZG9ubHkoKSkge1xuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0xXCI+XG4gICAgICAgIDxheC1idXR0b24gY2xhc3M9XCJheC14c1wiIChvbkNsaWNrKT1cImhhbmRsZUNyZWF0ZVJvb3RDbGljaygkZXZlbnQpXCIgbG9vaz1cImJsYW5rXCIgY29sb3I9XCJkZWZhdWx0XCI+XG4gICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYXMgZmEtcGx1c1wiPjwvYXgtaWNvbj5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvYXhwLWxheW91dC1jb250ZW50PiJdfQ==","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, AXPSettingsService } 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(AXPSettingsService);\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.16\", ngImport: i0, type: AXPEntityMasterToolbarViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.16\", 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]=\\\"10\\\"\\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\", \"forceDisableActionSheetStyle\", \"disabled\", \"offsetX\", \"offsetY\", \"target\", \"placement\", \"content\", \"openOn\", \"closeOn\", \"hasBackdrop\", \"openAfter\", \"closeAfter\", \"repositionOnScroll\", \"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.16\", 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]=\\\"10\\\"\\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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QUFRLENBQUMsUUFBUSxFQUFFO29CQUM3RCxHQUFHLFFBQVEsQ0FBQyxNQUFNO29CQUNsQixPQUFPLEVBQUU7d0JBQ1AsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU87d0JBQzFCLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztxQkFDM0I7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILGtDQUFrQztRQUNsQyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM1QywrRUFBK0U7UUFDL0Usd0JBQXdCO0lBQzFCLENBQUM7K0dBdE1VLG1DQUFtQzttR0FBbkMsbUNBQW1DLHNLQzNEaEQsbXZIQWtHQSwyQ0RyREksWUFBWSw4QkFDWixjQUFjLDZYQUNkLGlCQUFpQixxUEFDakIsbUJBQW1CLCtCQUNuQix3QkFBd0IsOElBQ3hCLGVBQWUsOFlBQ2Ysc0JBQXNCLHdLQUN0QixzQkFBc0IsK0lBQ3RCLHdCQUF3Qjs7NEZBTWYsbUNBQW1DO2tCQXJCL0MsU0FBUzsrQkFDRSxnQ0FBZ0MsaUJBRTNCLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QixlQUFlO3dCQUNmLHNCQUFzQjt3QkFDdEIsc0JBQXNCO3dCQUN0Qix3QkFBd0I7cUJBQ3pCLFFBQ0s7d0JBQ0osS0FBSyxFQUFFLFdBQVc7cUJBQ25COztzQkF1Q0EsS0FBSzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQb3BvdmVyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQge1xuICBBWFBDb2x1bW5RdWVyeSxcbiAgQVhQRGV2aWNlU2VydmljZSxcbiAgQVhQRmlsdGVyRGVmaW5pdGlvbixcbiAgQVhQRmlsdGVyUXVlcnksXG4gIEFYUFNvcnREZWZpbml0aW9uLFxuICBBWFBTb3J0UXVlcnksXG4gIEFYUFZpZXdRdWVyeSxcbn0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7XG4gIEFYUFF1ZXJ5Q29sdW1uc0NvbXBvbmVudCxcbiAgQVhQUXVlcnlGaWx0ZXJzQ29tcG9uZW50LFxuICBBWFBRdWVyeVNvcnRzQ29tcG9uZW50LFxuICBBWFBRdWVyeVZpZXdzQ29tcG9uZW50LFxufSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYUEVudGl0eUxpc3RWaWV3Q29sdW1uVmlld01vZGVsLCBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld01vZGVsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUExheW91dFRoZW1lU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vdGhlbWVzL3NoYXJlZCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgc2lnbmFsLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYUENvbW1vblNldHRpbmdzLCBBWFBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9lbnRpdHktbWFzdGVyLWxpc3Qtdmlldy9lbnRpdHktbWFzdGVyLWxpc3Qtdmlldy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheHAtZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcnLFxuICB0ZW1wbGF0ZVVybDogJy4vZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWERlY29yYXRvck1vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICAgIEFYUFF1ZXJ5RmlsdGVyc0NvbXBvbmVudCxcbiAgICBBWFBvcG92ZXJNb2R1bGUsXG4gICAgQVhQUXVlcnlTb3J0c0NvbXBvbmVudCxcbiAgICBBWFBRdWVyeVZpZXdzQ29tcG9uZW50LFxuICAgIEFYUFF1ZXJ5Q29sdW1uc0NvbXBvbmVudCxcbiAgXSxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYXgtdy1mdWxsJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRW50aXR5TWFzdGVyVG9vbGJhclZpZXdDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgbGF5b3V0U2VydmljZSA9IGluamVjdChBWFBMYXlvdXRUaGVtZVNlcnZpY2UpO1xuICBwcm90ZWN0ZWQgZGV2aWNlU2VydmljZSA9IGluamVjdChBWFBEZXZpY2VTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHBhcmVudCA9IGluamVjdChBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld0NvbXBvbmVudCk7XG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgYWN0aXZlUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHNldHRpbmdzU2VydmljZSA9IGluamVjdChBWFBTZXR0aW5nc1NlcnZpY2UpO1xuXG4gIHByaXZhdGUgaXNJbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBwZW5kaW5nSW5pdGlhbEZpbHRlcnMgPSB0cnVlO1xuICBwcml2YXRlIHBlbmRpbmdJbml0aWFsU29ydHMgPSB0cnVlO1xuXG4gIHByb3RlY3RlZCBmaWx0ZXJUcmlnZ2VyTW9kZTogJ2F1dG8nIHwgJ21hbnVhbCcgPSAnbWFudWFsJztcblxuICBwcm90ZWN0ZWQgcHJldmlvdXNGaWx0ZXJRdWVyaWVzID0gc2lnbmFsPEFYUEZpbHRlclF1ZXJ5W10+KFtdKTtcblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBQcmVmZXIgc2F2ZWQgc2V0dGluZ3MgKHZpZXcvY29sdW1ucy9zb3J0cy9maWx0ZXJzKSBpZiBhdmFpbGFibGUsIHRoZW4gYXBwbHlcbiAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuICAgIGF3YWl0IHRoaXMudm0uc2V0VmlldygpO1xuICAgIHRoaXMuZmlsdGVyc0RlZmluaXRpb25zLnNldCh0aGlzLnZtLmZpbHRlcnNEZWYpO1xuICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSB0cnVlO1xuICAgIC8vIHRoaXMucGVuZGluZ0luaXRpYWxGaWx0ZXJzID0gdHJ1ZTtcbiAgICAvLyB0aGlzLnBlbmRpbmdJbml0aWFsU29ydHMgPSB0cnVlO1xuICAgIHRoaXMuc2V0SW5pdGlhbEZpbHRlcnNGcm9tU2V0dGluZ3NPclZpZXcoKTtcbiAgICAvLyBFbnN1cmUgaW5pdGlhbCBsb2FkIGV2ZW4gd2hlbiBmaWx0ZXJzL3NvcnRzIGFyZSBhYnNlbnRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2NoZWR1bGVBcHBseSgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkU2V0dGluZ3MoKSB7XG4gICAgY29uc3QgZmlsdGVyVHJpZ2dlck1vZGUgPSBhd2FpdCB0aGlzLnNldHRpbmdzU2VydmljZS5nZXQoQVhQQ29tbW9uU2V0dGluZ3MuRW50aXR5RmlsdGVyQXBwbHlNb2RlKTtcbiAgICB0aGlzLmZpbHRlclRyaWdnZXJNb2RlID0gKGZpbHRlclRyaWdnZXJNb2RlPy52YWx1ZSA/PyAnYXV0bycpIGFzICdhdXRvJyB8ICdtYW51YWwnO1xuICB9XG5cbiAgQElucHV0KCd2aWV3TW9kZWwnKVxuICBwdWJsaWMgdm0hOiBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld01vZGVsO1xuXG4gIHByb3RlY3RlZCBpbml0aWFsRmlsdGVycyA9IHNpZ25hbDxBWFBGaWx0ZXJRdWVyeVtdPihbXSk7XG4gIHByb3RlY3RlZCBmaWx0ZXJzRGVmaW5pdGlvbnMgPSBzaWduYWw8QVhQRmlsdGVyRGVmaW5pdGlvbltdPihbXSk7XG5cbiAgcHJvdGVjdGVkIHZpZXdRdWVyaWVzID0gY29tcHV0ZWQ8QVhQVmlld1F1ZXJ5W10+KCgpID0+XG4gICAgdGhpcy52bS52aWV3cygpLm1hcCgodikgPT4gKHtcbiAgICAgIG5hbWU6IHYubmFtZSxcbiAgICAgIGZpeGVkOiBmYWxzZSxcbiAgICAgIHRpdGxlOiB2LnRpdGxlLFxuICAgICAgY29sdW1uczogdi5jb2x1bW5zLFxuICAgICAgY29uZGl0aW9uczogdi5jb25kaXRpb25zLm1hcCgoYykgPT4gKHtcbiAgICAgICAgZmllbGQ6IGMubmFtZSxcbiAgICAgICAgb3BlcmF0b3I6IGMub3BlcmF0b3IsXG4gICAgICAgIHZhbHVlOiBjLnZhbHVlLFxuICAgICAgfSkpLFxuICAgICAgc29ydHM6IHYuc29ydHMsXG4gICAgfSkpLFxuICApO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRWaWV3UXVlcnkgPSBjb21wdXRlZDxBWFBWaWV3UXVlcnk+KCgpID0+ICh7XG4gICAgbmFtZTogdGhpcy52bS52aWV3KCkubmFtZSxcbiAgICBmaXhlZDogZmFsc2UsXG4gICAgdGl0bGU6IHRoaXMudm0udmlldygpLnRpdGxlLFxuICAgIGNvbHVtbnM6IHRoaXMudm0udmlldygpLmNvbHVtbnMsXG4gICAgY29uZGl0aW9uczogdGhpcy52bS52aWV3KCkuY29uZGl0aW9ucy5tYXAoKGMpID0+ICh7XG4gICAgICBmaWVsZDogYy5uYW1lLFxuICAgICAgb3BlcmF0b3I6IGMub3BlcmF0b3IsXG4gICAgICB2YWx1ZTogYy52YWx1ZSxcbiAgICB9KSksXG4gICAgc29ydHM6IHRoaXMudm0udmlldygpLnNvcnRzLFxuICB9KSk7XG5cbiAgcHJvdGVjdGVkIGlzRmlsdGVyc0RpcnR5ID0gY29tcHV0ZWQoKCkgPT4gIWlzRXF1YWwodGhpcy52bS5maWx0ZXJRdWVyaWVzKCksIHRoaXMucHJldmlvdXNGaWx0ZXJRdWVyaWVzKCkpKTtcblxuICAvLyBEZWJvdW5jZWQgYXBwbHkgdG8gY29hbGVzY2UgbXVsdGlwbGUgVUkgY2hhbmdlcyAoZmlsdGVycy9zb3J0cy9jb2x1bW5zKVxuICBwcml2YXRlIGFwcGx5VGltZXI6IGFueSA9IG51bGw7XG4gIHByaXZhdGUgc2NoZWR1bGVBcHBseSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5hcHBseVRpbWVyKTtcbiAgICB0aGlzLmFwcGx5VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudm0uYXBwbHlGaWx0ZXJBbmRTb3J0KCk7XG4gICAgfSwgNTApO1xuICB9XG5cbiAgYXN5bmMgb25WaWV3Q2hhbmdlZCh2aWV3OiBBWFBWaWV3UXVlcnkpIHtcbiAgICBhd2FpdCB0aGlzLnZtLnNldFZpZXcodmlldy5uYW1lKTtcbiAgICAvLyBTeW5jIHF1ZXJ5IHBhcmFtIGltbWVkaWF0ZWx5IG9uIHRhYiBjaGFuZ2VcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmVSb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IHZpZXc6IHZpZXcubmFtZSB9LFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5pc0luaXRpYWxpemluZyA9IHRydWU7XG4gICAgdGhpcy5wZW5kaW5nSW5pdGlhbEZpbHRlcnMgPSB0cnVlO1xuICAgIHRoaXMucGVuZGluZ0luaXRpYWxTb3J0cyA9IHRydWU7XG4gICAgdGhpcy5zZXRJbml0aWFsRmlsdGVyc0Zyb21TZXR0aW5nc09yVmlldygpO1xuICAgIC8vIEVuc3VyZSBpbml0aWFsIGxvYWQgYWZ0ZXIgdmlldyBjaGFuZ2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2NoZWR1bGVBcHBseSgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgI2VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgLy8gS2VlcCBkZWZpbml0aW9ucyB1cCB0byBkYXRlOyBpbml0aWFsIGZpbHRlcnMgYXJlIHNldCBleHBsaWNpdGx5IGZyb20gc2V0dGluZ3Mgb3Igdmlld1xuICAgIHRoaXMuZmlsdGVyc0RlZmluaXRpb25zLnNldCh0aGlzLnZtLmZpbHRlcnNEZWYpO1xuICB9KTtcblxuICBwcml2YXRlIHNldEluaXRpYWxGaWx0ZXJzRnJvbVNldHRpbmdzT3JWaWV3KCkge1xuICAgIGNvbnN0IHNhdmVkID0gdGhpcy52bS5maWx0ZXJRdWVyaWVzKCk7XG4gICAgdGhpcy5wcmV2aW91c0ZpbHRlclF1ZXJpZXMuc2V0KHNhdmVkKTtcbiAgICBjb25zdCB2aWV3Q29uZGl0aW9ucyA9IHRoaXMudm0udmlldygpLmNvbmRpdGlvbnMubWFwKChjKSA9PiBjLm5hbWUpO1xuICAgIGlmIChzYXZlZCAmJiBzYXZlZC5sZW5ndGgpIHtcbiAgICAgIHRoaXMuaW5pdGlhbEZpbHRlcnMuc2V0KHNhdmVkLm1hcCgocykgPT4gKHsgLi4ucywgaGlkZGVuOiB2aWV3Q29uZGl0aW9ucy5pbmNsdWRlcyhzLmZpZWxkISkgfSkpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsRmlsdGVycy5zZXQoXG4gICAgICB0aGlzLnZtLnZpZXcoKS5jb25kaXRpb25zLm1hcChcbiAgICAgICAgKGMpID0+XG4gICAgICAgICAgKHtcbiAgICAgICAgICAgIGZpZWxkOiBjLm5hbWUsXG4gICAgICAgICAgICBvcGVyYXRvcjogYy5vcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBjLnZhbHVlLFxuICAgICAgICAgICAgaGlkZGVuOiB0cnVlLFxuICAgICAgICAgIH0pIGFzIGFueSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIG9uRmlsdGVyc0NoYW5nZWQoZmlsdGVyczogQVhQRmlsdGVyUXVlcnlbXSkge1xuICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6aW5nIHx8IHRoaXMucGVuZGluZ0luaXRpYWxGaWx0ZXJzKSB7XG4gICAgICB0aGlzLnBlbmRpbmdJbml0aWFsRmlsdGVycyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudm0uZmlsdGVyUXVlcmllcy5zZXQoZmlsdGVycyk7XG4gICAgaWYgKHRoaXMuZmlsdGVyVHJpZ2dlck1vZGUgPT09ICdhdXRvJykge1xuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwbHlGaWx0ZXJzKCkge1xuICAgIHRoaXMucHJldmlvdXNGaWx0ZXJRdWVyaWVzLnNldCh0aGlzLnZtLmZpbHRlclF1ZXJpZXMoKSk7XG4gICAgdGhpcy52bS5zYXZlU2V0dGluZ3MoJ2ZpbHRlcnMnLCB0aGlzLnZtLmZpbHRlclF1ZXJpZXMoKSk7XG4gICAgdGhpcy5zY2hlZHVsZUFwcGx5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc29ydFF1ZXJpZXMgPSBjb21wdXRlZDxBWFBTb3J0UXVlcnlbXT4oKCkgPT5cbiAgICB0aGlzLnZtXG4gICAgICAuc29ydGVkRmllbGRzKClcbiAgICAgIC5maWx0ZXIoKHMpID0+ICEhcy5kaXIpXG4gICAgICAubWFwKChzKSA9PiAoeyBuYW1lOiBzLm5hbWUsIGRpcjogcy5kaXIgYXMgJ2FzYycgfCAnZGVzYycgfSkpLFxuICApO1xuXG4gIHByb3RlY3RlZCBzb3J0RGVmaW5pdGlvbnMgPSBjb21wdXRlZDxBWFBTb3J0RGVmaW5pdGlvbltdPigoKSA9PlxuICAgIHRoaXMudm0uc29ydGFibGVGaWVsZHMoKS5tYXAoKHMpID0+ICh7XG4gICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICB0aXRsZTogcy50aXRsZSxcbiAgICAgIGRpcjogcy5kaXIgYXMgJ2FzYycgfCAnZGVzYycgfCB1bmRlZmluZWQsXG4gICAgfSkpLFxuICApO1xuXG4gIHByb3RlY3RlZCBvblNvcnRRdWVyaWVzQ2hhbmdlKGU6IEFYUFNvcnRRdWVyeVtdKSB7XG4gICAgaWYgKHRoaXMuaXNJbml0aWFsaXppbmcgfHwgdGhpcy5wZW5kaW5nSW5pdGlhbFNvcnRzKSB7XG4gICAgICB0aGlzLnBlbmRpbmdJbml0aWFsU29ydHMgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52bS5zb3J0ZWRGaWVsZHMuc2V0KFxuICAgICAgZS5tYXAoKHMpID0+ICh7XG4gICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgdGl0bGU6IHMubmFtZSxcbiAgICAgICAgZGlyOiBzLmRpcixcbiAgICAgIH0pKSxcbiAgICApO1xuICAgIC8vIFBlcnNpc3Qgc29ydHMgcGVyIG1vZHVsZS9lbnRpdHkvdmlld1xuICAgIHRoaXMudm0uc2F2ZVNldHRpbmdzKCdzb3J0cycsIGUpO1xuICAgIHRoaXMuc2NoZWR1bGVBcHBseSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ29sdW1uc0NoYW5nZShjb2x1bW5zOiBBWFBDb2x1bW5RdWVyeVtdKSB7XG4gICAgY29uc3Qga2V5T2YgPSAoYzogeyBuYW1lOiBzdHJpbmc7IGNvbHVtbj86IGFueSB9KSA9PiBjLmNvbHVtbj8ub3B0aW9ucz8uZGF0YVBhdGggPz8gYy5uYW1lO1xuXG4gICAgdGhpcy52bS5jb2x1bW5zLnVwZGF0ZSgocHJldikgPT4ge1xuICAgICAgY29uc3QgYnlLZXkgPSBuZXcgTWFwKHByZXYubWFwKChjKSA9PiBba2V5T2YoYyBhcyBhbnkpLCBjXSkpO1xuXG4gICAgICByZXR1cm4gY29sdW1ucy5tYXAoKG5ld0NvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCBleGlzdGluZyA9IGJ5S2V5LmdldChrZXlPZihuZXdDb2x1bW4pKSE7XG4gICAgICAgIHJldHVybiBuZXcgQVhQRW50aXR5TGlzdFZpZXdDb2x1bW5WaWV3TW9kZWwoZXhpc3RpbmcucHJvcGVydHksIHtcbiAgICAgICAgICAuLi5leGlzdGluZy5jb2x1bW4sXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgLi4uZXhpc3RpbmcuY29sdW1uLm9wdGlvbnMsXG4gICAgICAgICAgICB2aXNpYmxlOiBuZXdDb2x1bW4udmlzaWJsZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIC8vIFBlcnNpc3QgY29sdW1uIG9yZGVyL3Zpc2liaWxpdHlcbiAgICB0aGlzLnZtLm9uQ29sdW1uc0NoYW5nZWQodGhpcy52bS5jb2x1bW5zKCkpO1xuICAgIC8vIFVzZSBkZWJvdW5jZWQgYXBwbHkgdG8gYXZvaWQgdHJpcGxlIHJlZnJlc2ggd2hlbiBjb21iaW5lZCB3aXRoIHNvcnRzL2ZpbHRlcnNcbiAgICAvLyB0aGlzLnNjaGVkdWxlQXBwbHkoKTtcbiAgfVxufVxuIiwiPCEtLSA8YXhwLWVudGl0eS12aWV3LXRvb2xiYXIgW3ZpZXdNb2RlbF09XCJ2bVwiPjwvYXhwLWVudGl0eS12aWV3LXRvb2xiYXI+IC0tPlxuPGF4cC1xdWVyeS12aWV3c1xuICBpZD1cImF4cC10b29sYmFyLXZpZXctc2VsZWN0b3JcIlxuICBbdmlld3NdPVwidmlld1F1ZXJpZXMoKVwiXG4gIFtzZWxlY3RlZFZpZXddPVwic2VsZWN0ZWRWaWV3UXVlcnkoKVwiXG4gIChzZWxlY3RlZFZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlZCgkZXZlbnQpXCJcbj48L2F4cC1xdWVyeS12aWV3cz5cbjxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtMiBheC1ib3JkZXItYiBheC1ib3JkZXItbGlnaHQgdy1mdWxsXCI+XG4gIDwhLS0gPGF4cC1lbnRpdHktZmlsdGVyLXRvb2xiYXIgW3ZpZXdNb2RlbF09XCJ2bVwiPjwvYXhwLWVudGl0eS1maWx0ZXItdG9vbGJhcj4gLS0+XG4gIDxheHAtcXVlcnktZmlsdGVyc1xuICAgIGlkPVwiYXhwLXRvb2xiYXItZmlsdGVyc1wiXG4gICAgW2ZpbHRlcnNEZWZpbml0aW9uc109XCJmaWx0ZXJzRGVmaW5pdGlvbnMoKVwiXG4gICAgW2luaXRpYWxGaWx0ZXJzXT1cImluaXRpYWxGaWx0ZXJzKClcIlxuICAgIChvbkZpbHRlcnNDaGFuZ2VkKT1cIm9uRmlsdGVyc0NoYW5nZWQoJGV2ZW50KVwiXG4gID48L2F4cC1xdWVyeS1maWx0ZXJzPlxuXG4gIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtMiBtZDpheC1nYXAtMlwiPlxuICAgIEBpZiAoZmlsdGVyVHJpZ2dlck1vZGUgPT09ICdtYW51YWwnICYmIGlzRmlsdGVyc0RpcnR5KCkpIHtcbiAgICAgIDxheC1idXR0b25cbiAgICAgICAgaWQ9XCJheHAtdG9vbGJhci1idG4tZmlsdGVyXCJcbiAgICAgICAgW3RpdGxlXT1cIidAZ2VuZXJhbDphY3Rpb25zLmFwcGx5LnRpdGxlJ1wiXG4gICAgICAgIFtpY29uT25seV09XCJ0cnVlXCJcbiAgICAgICAgI2ZpbHRlckJ1dHRvblxuICAgICAgICBbY29sb3JdPVwiJ3ByaW1hcnknXCJcbiAgICAgICAgKG9uQ2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIlxuICAgICAgPlxuICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtc2VhcmNoXCI+PC9pPlxuICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgIDwvYXgtYnV0dG9uPlxuICAgIH1cbiAgICA8ZGl2PlxuICAgICAgPGF4LWJ1dHRvbiBpZD1cImF4cC10b29sYmFyLWJ0bi1jb2x1bW5zXCIgW2ljb25Pbmx5XT1cInRydWVcIiAjY29sdW1uQnV0dG9uIFtjb2xvcl09XCInZGVmYXVsdCdcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS10YWJsZS1jb2x1bW5zXCI+PC9pPlxuICAgICAgPC9heC1idXR0b24+XG4gICAgICA8YXgtcG9wb3ZlclxuICAgICAgICBpZD1cImF4cC1wb3BvdmVyLWNvbHVtbnNcIlxuICAgICAgICBbYWRhcHRpdml0eUVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgIFtvZmZzZXRZXT1cIjEwXCJcbiAgICAgICAgW3RhcmdldF09XCJjb2x1bW5CdXR0b25cIlxuICAgICAgICBbb3Blbk9uXT1cIid0b2dnbGUnXCJcbiAgICAgICAgW2Nsb3NlT25dPVwiJ2NsaWNrT3V0J1wiXG4gICAgICAgICNwb3BvdmVyXG4gICAgICA+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 const resetPagination = e.meta?.resetPagination === true;\n if (e.action == 'refresh') {\n if (refreshTargetId) {\n this.grid()?.refreshItemChildren(refreshTargetId);\n }\n else {\n this.grid()?.refresh({\n reset: resetPagination,\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.16\", 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.16\", 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 id=\\\"axp-entity-category\\\" class=\\\"ax-w-80\\\" [vm]=\\\"vm\\\"\\n [searchValue]=\\\"categorySearchValue()\\\"></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 class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-1 ax-pb-1 ax-text-muted ax-text-sm\\\"\\n [class.ax-invisible]=\\\"!grid.selectedRows.length\\\">\\n <span>{{ 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 id=\\\"axp-entity-table\\\" [allowReordering]=\\\"true\\\"\\n (onColumnsOrderChanged)=\\\"onColumnsOrderChanged($event)\\\" #grid [showFooter]=\\\"false\\\" class=\\\"ax-flex-1\\\"\\n [paging]=\\\"true\\\" [fetchDataMode]=\\\"'manual'\\\" [parentField]=\\\"vm.parentKey()\\\"\\n [loading]=\\\"{ enabled: true, animation: true }\\\" [dataSource]=\\\"vm.dataSource\\\"\\n (selectedRowsChange)=\\\"handleSelectedRowsChange($event)\\\" (onRowDbClick)=\\\"handleRowDbClick($event)\\\"\\n (onColumnSizeChanged)=\\\"onColumnSizeChanged($event)\\\" (onPageChanged)=\\\"onPageChanged($event)\\\">\\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 [attr.id]=\\\"'axp-table-col-' + col.name\\\"\\n [expandHandler]=\\\"$index === 0 && vm.parentKey() ? true : false\\\" [caption]=\\\"(col.title | translate | async)!\\\"\\n [node]=\\\"col.node()\\\" [customWidth]=\\\"col.width\\\"></axp-widget-column-renderer>\\n }\\n }\\n @if (getCommandRowItems().length) {\\n <ax-command-column id=\\\"axp-table-col-commands\\\" fixed=\\\"end\\\" [width]=\\\"getCommandRowItems().length * 70 + 'px'\\\"\\n [items]=\\\"getCommandRowItems()\\\" (onItemClick)=\\\"handleRowCommandClick($event)\\\"></ax-command-column>\\n }\\n <ax-dropdown-command-column id=\\\"axp-table-col-dropdown-commands\\\" fixed=\\\"end\\\" [width]=\\\"'60px'\\\"\\n [items]=\\\"getDropdownRowItems\\\" (onItemClick)=\\\"handleRowCommandClick($event)\\\"></ax-dropdown-command-column>\\n </ax-data-table>\\n </axp-page-content>\\n</axp-page-layout>\", 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.16\", 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 id=\\\"axp-entity-category\\\" class=\\\"ax-w-80\\\" [vm]=\\\"vm\\\"\\n [searchValue]=\\\"categorySearchValue()\\\"></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 class=\\\"ax-flex ax-items-center ax-justify-between ax-gap-1 ax-pb-1 ax-text-muted ax-text-sm\\\"\\n [class.ax-invisible]=\\\"!grid.selectedRows.length\\\">\\n <span>{{ 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 id=\\\"axp-entity-table\\\" [allowReordering]=\\\"true\\\"\\n (onColumnsOrderChanged)=\\\"onColumnsOrderChanged($event)\\\" #grid [showFooter]=\\\"false\\\" class=\\\"ax-flex-1\\\"\\n [paging]=\\\"true\\\" [fetchDataMode]=\\\"'manual'\\\" [parentField]=\\\"vm.parentKey()\\\"\\n [loading]=\\\"{ enabled: true, animation: true }\\\" [dataSource]=\\\"vm.dataSource\\\"\\n (selectedRowsChange)=\\\"handleSelectedRowsChange($event)\\\" (onRowDbClick)=\\\"handleRowDbClick($event)\\\"\\n (onColumnSizeChanged)=\\\"onColumnSizeChanged($event)\\\" (onPageChanged)=\\\"onPageChanged($event)\\\">\\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 [attr.id]=\\\"'axp-table-col-' + col.name\\\"\\n [expandHandler]=\\\"$index === 0 && vm.parentKey() ? true : false\\\" [caption]=\\\"(col.title | translate | async)!\\\"\\n [node]=\\\"col.node()\\\" [customWidth]=\\\"col.width\\\"></axp-widget-column-renderer>\\n }\\n }\\n @if (getCommandRowItems().length) {\\n <ax-command-column id=\\\"axp-table-col-commands\\\" fixed=\\\"end\\\" [width]=\\\"getCommandRowItems().length * 70 + 'px'\\\"\\n [items]=\\\"getCommandRowItems()\\\" (onItemClick)=\\\"handleRowCommandClick($event)\\\"></ax-command-column>\\n }\\n <ax-dropdown-command-column id=\\\"axp-table-col-dropdown-commands\\\" fixed=\\\"end\\\" [width]=\\\"'60px'\\\"\\n [items]=\\\"getDropdownRowItems\\\" (onItemClick)=\\\"handleRowCommandClick($event)\\\"></ax-dropdown-command-column>\\n </ax-data-table>\\n </axp-page-content>\\n</axp-page-layout>\", 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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aUJBQWlCO3dCQUNqQixpQkFBaUI7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxFQUFFO3dCQUNGLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLEVBQUU7d0JBQ0YsbUNBQW1DO3dCQUNuQyxFQUFFO3dCQUNGLHNCQUFzQjt3QkFDdEIsNEJBQTRCO3dCQUM1QixzQkFBc0I7d0JBQ3RCLGdDQUFnQzt3QkFDaEMsMEJBQTBCO3FCQUMzQixhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsa0NBQWtDO3lCQUM5QztxQkFDRjttSEFpQmdELE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEFjdGlvblNoZWV0TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2FjdGlvbi1zaGVldCc7XG5pbXBvcnQge1xuICBBWENvbHVtbnNPcmRlckNoYW5nZWRFdmVudCxcbiAgQVhEYXRhVGFibGVDb21wb25lbnQsXG4gIEFYRGF0YVRhYmxlTW9kdWxlLFxuICBBWERhdGFUYWJsZVJvd0RiQ2xpY2ssXG4gIEFYUm93Q29tbWFuZEl0ZW0sXG4gIEFYUm93Q29tbWFuZEl0ZW1DbGlja0V2ZW50LFxuICBvbkNvbHVtblNpemVDaGFuZ2VkRXZlbnQsXG59IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kYXRhLXRhYmxlJztcbmltcG9ydCB7IEFYRHJhd2VyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RyYXdlcic7XG5pbXBvcnQgeyBBWFBsYXRmb3JtIH0gZnJvbSAnQGFjb3JleC9jb3JlL3BsYXRmb3JtJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEFYQmFkZ2VNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHsgQVhCcmVhZGNydW1ic01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9icmVhZGNydW1icyc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEYXRhUGFnZXJDaGFuZ2VkRXZlbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGF0YS1wYWdlcic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RpYWxvZyc7XG5pbXBvcnQgeyBBWERyb3Bkb3duTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duJztcbmltcG9ydCB7IEFYRm9ybU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCB7IEFYTG9hZGluZ01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9sb2FkaW5nJztcbmltcG9ydCB7IEFYUG9wb3Zlck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEFYU2VhcmNoQm94TW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3NlYXJjaC1ib3gnO1xuaW1wb3J0IHsgQVhUYWJzTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RhYnMnO1xuaW1wb3J0IHsgQVhUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSwgdHJhbnNsYXRlU3luYyB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBBdXRoTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9hdXRoJztcbmltcG9ydCB7IEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsIEFYUFRoZW1lTGF5b3V0U3RhcnRTaWRlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld01vZGVsIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvZW50aXR5JztcbmltcG9ydCB7IEFYUFdpZGdldENvcmVNb2R1bGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBBWFBXaWRnZXRzTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0cyc7XG5pbXBvcnQgeyBEcmFnRHJvcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBBWERyb3Bkb3duQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBBWFBBY3Rpb25NZW51SXRlbSwgQVhQQnJlYWRjcnVtYkl0ZW0sIEFYUEV4ZWN1dGVDb21tYW5kIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUFBhZ2VMYXlvdXRCYXNlLCBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCwgQVhQUGFnZUxheW91dENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3ZpZXdzJztcbmltcG9ydCB7IEFYUExheW91dFRoZW1lU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vdGhlbWVzL3NoYXJlZCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUEVudGl0eUNhdGVnb3J5Q29tcG9uZW50IH0gZnJvbSAnLi4vZW50aXR5LWNhdGVnb3J5L2VudGl0eS1jYXRlZ29yeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhQRW50aXR5TWFzdGVyVG9vbGJhclZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9lbnRpdHktbWFzdGVyLXRvb2xiYXItdmlldy9lbnRpdHktbWFzdGVyLXRvb2xiYXItdmlldy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdlbnRpdHktbWFzdGVyLWxpc3Qtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydlbnRpdHktbWFzdGVyLWxpc3Qtdmlldy5jb21wb25lbnQuc2NzcyddLFxuICBzZWxlY3RvcjogJ2F4cC1lbnRpdHktbWFzdGVyLWxpc3QnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSb3V0ZXJNb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhCYWRnZU1vZHVsZSxcbiAgICBBWERyb3Bkb3duTW9kdWxlLFxuICAgIEFYUG9wb3Zlck1vZHVsZSxcbiAgICBBWEZvcm1Nb2R1bGUsXG4gICAgQVhBY3Rpb25TaGVldE1vZHVsZSxcbiAgICBBWERyYXdlck1vZHVsZSxcbiAgICBBWERpYWxvZ01vZHVsZSxcbiAgICBBWExvYWRpbmdNb2R1bGUsXG4gICAgQVhUYWJzTW9kdWxlLFxuICAgIEFYVG9vbHRpcE1vZHVsZSxcbiAgICBBWEJyZWFkY3J1bWJzTW9kdWxlLFxuICAgIEFYRHJvcGRvd25CdXR0b25Nb2R1bGUsXG4gICAgQVhTZWFyY2hCb3hNb2R1bGUsXG4gICAgQVhEYXRhVGFibGVNb2R1bGUsXG4gICAgQVhUcmFuc2xhdGlvbk1vZHVsZSxcbiAgICBEcmFnRHJvcE1vZHVsZSxcbiAgICAvL1xuICAgIEFYUFdpZGdldENvcmVNb2R1bGUsXG4gICAgQVhQV2lkZ2V0c01vZHVsZSxcbiAgICBBWFBBdXRoTW9kdWxlLFxuICAgIC8vXG4gICAgQVhQRW50aXR5TWFzdGVyVG9vbGJhclZpZXdDb21wb25lbnQsXG4gICAgLy9cbiAgICBBWFBQYWdlTGF5b3V0Q29tcG9uZW50LFxuICAgIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gICAgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSxcbiAgICBBWFBUaGVtZUxheW91dFN0YXJ0U2lkZUNvbXBvbmVudCxcbiAgICBBWFBFbnRpdHlDYXRlZ29yeUNvbXBvbmVudCxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQUGFnZUxheW91dEJhc2UsXG4gICAgICB1c2VFeGlzdGluZzogQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdDb21wb25lbnQsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRW50aXR5TWFzdGVyTGlzdFZpZXdDb21wb25lbnQgZXh0ZW5kcyBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgYWN0aXZlUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB2bSA9IHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QuZGF0YVsndm0nXSBhcyBBWFBFbnRpdHlNYXN0ZXJMaXN0Vmlld01vZGVsO1xuXG4gIC8vXG4gIHByb3RlY3RlZCBzdG9yZSA9IGluamVjdChBWFBMYXlvdXRUaGVtZVNlcnZpY2UpO1xuICAvL1xuICBwcm90ZWN0ZWQgc2VhcmNoQmFyU2hvd24gPSBzaWduYWwodHJ1ZSk7XG4gIHByb3RlY3RlZCBhY3RpdmVFbmRTaWRlVmlldyA9IHNpZ25hbDwnY29sdW1uJyB8ICdmaWx0ZXInIHwgJ3NvcnQnPignY29sdW1uJyk7XG5cbiAgcHJvdGVjdGVkIGNhdGVnb3J5U2VhcmNoVmFsdWUgPSBzaWduYWwoJycpO1xuXG4gIC8vIEBWaWV3Q2hpbGQoJ2dyaWQnLCB7IHN0YXRpYzogdHJ1ZX0pIGdyaWQ6IEFYRGF0YVRhYmxlQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgZ3JpZCA9IHZpZXdDaGlsZDxBWERhdGFUYWJsZUNvbXBvbmVudD4oJ2dyaWQnKTtcbiAgcHJpdmF0ZSBxdWVyeVBhcmFtU3ViPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGluaXRpYWxpemVkRnJvbVJvdXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHBsYXRmb3JtOiBBWFBsYXRmb3JtKSB7XG4gICAgc3VwZXIoKTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JpZCgpIS5zZWxlY3RlZFJvd3MgPSB0aGlzLnZtLnNlbGVjdGVkSXRlbXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMudm0uZXZlbnRzJC5zdWJzY3JpYmUoYXN5bmMgKGUpID0+IHtcbiAgICAgIGNvbnN0IHJlZnJlc2hUYXJnZXRJZCA9IGUubWV0YT8ucmVmcmVzaFRhcmdldElkO1xuICAgICAgY29uc3QgcmVzZXRQYWdpbmF0aW9uID0gZS5tZXRhPy5yZXNldFBhZ2luYXRpb24gPT09IHRydWU7XG4gICAgICBpZiAoZS5hY3Rpb24gPT0gJ3JlZnJlc2gnKSB7XG4gICAgICAgIGlmIChyZWZyZXNoVGFyZ2V0SWQpIHtcbiAgICAgICAgICB0aGlzLmdyaWQoKT8ucmVmcmVzaEl0ZW1DaGlsZHJlbihyZWZyZXNoVGFyZ2V0SWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZ3JpZCgpPy5yZWZyZXNoKHtcbiAgICAgICAgICAgIHJlc2V0OiByZXNldFBhZ2luYXRpb24sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEtlZXAgVVJMIHF1ZXJ5IHBhcmFtIGB2aWV3YCBpbiBzeW5jIHdpdGggY3VycmVudCB2bSB2aWV3XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZEZyb21Sb3V0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50Vmlld05hbWUgPSB0aGlzLnZtLnZpZXcoKS5uYW1lO1xuICAgICAgY29uc3QgdXJsVmlldyA9IHRoaXMuYWN0aXZlUm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ3ZpZXcnKTtcbiAgICAgIGlmIChjdXJyZW50Vmlld05hbWUgJiYgY3VycmVudFZpZXdOYW1lICE9PSB1cmxWaWV3KSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmVSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtczogeyB2aWV3OiBjdXJyZW50Vmlld05hbWUgfSxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUmVhY3QgdG8gZXh0ZXJuYWwgVVJMIGNoYW5nZXMgKGJhY2svZm9yd2FyZCBuYXZpZ2F0aW9uIG9yIGRlZXAgbGlua3MpXG4gICAgdGhpcy5xdWVyeVBhcmFtU3ViID0gdGhpcy5hY3RpdmVSb3V0ZS5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZShhc3luYyAocXApID0+IHtcbiAgICAgIGNvbnN0IHZpZXdGcm9tVXJsID0gcXAuZ2V0KCd2aWV3Jyk7XG4gICAgICBhd2FpdCB0aGlzLnZtLnNldFZpZXcodmlld0Zyb21VcmwpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGNvbnN0IHZpZXdGcm9tVXJsID0gdGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgndmlldycpO1xuICAgIGF3YWl0IHRoaXMudm0uc2V0Vmlldyh2aWV3RnJvbVVybCk7XG5cbiAgICBjb25zdCByZXNvbHZlZFZpZXcgPSB0aGlzLnZtLnZpZXcoKS5uYW1lO1xuICAgIGNvbnN0IGN1cnJlbnRVcmxWaWV3ID0gdGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgndmlldycpO1xuICAgIGlmIChjdXJyZW50VXJsVmlldyAhPT0gcmVzb2x2ZWRWaWV3KSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2ZVJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogeyB2aWV3OiByZXNvbHZlZFZpZXcgfSxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVkRnJvbVJvdXRlID0gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNvbHVtblNpemVDaGFuZ2VkKGU6IG9uQ29sdW1uU2l6ZUNoYW5nZWRFdmVudCkge1xuICAgIGlmIChlLmlzVXNlckludGVyYWN0aW9uICYmIGUudHlwZSA9PT0gJ2VuZCcpIHtcbiAgICAgIHRoaXMudm0uc2F2ZVNldHRpbmdzKCdjb2x1bW5TaXplcycsIGUuZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uUGFnZUNoYW5nZWQoZTogQVhEYXRhUGFnZXJDaGFuZ2VkRXZlbnQpIHtcbiAgICBpZiAoZS5pc1VzZXJJbnRlcmFjdGlvbikge1xuICAgICAgY29uc3QgcGFnZVNpemVDaGFuZ2VkID0gZS50YWtlICE9IHRoaXMudm0uZGF0YVNvdXJjZS5wYWdlU2l6ZTtcbiAgICAgIGlmIChwYWdlU2l6ZUNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy52bS5zYXZlU2V0dGluZ3MoJ3BhZ2VTaXplJywgZS50YWtlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25Db2x1bW5zT3JkZXJDaGFuZ2VkKGU6IEFYQ29sdW1uc09yZGVyQ2hhbmdlZEV2ZW50KSB7XG4gICAgaWYgKGUuaXNVc2VySW50ZXJhY3Rpb24pIHtcbiAgICAgIHRoaXMudm0ub25Db2x1bW5zT3JkZXJDaGFuZ2VkKGUuZGF0YS5ldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGRyb3Bkb3duUm93SXRlbXMocm93RGF0YTogYW55KTogUHJvbWlzZTxBWFJvd0NvbW1hbmRJdGVtW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMudm0uc2Vjb25kYXJ5Um93QWN0aW9ucyhyb3dEYXRhKSkubWFwKChjKSA9PiAoe1xuICAgICAgaWNvbjogYy5pY29uLFxuICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgdGV4dDogYy50aXRsZSxcbiAgICAgIGNvbG9yOiBjLmNvbG9yLFxuICAgICAgZGlzYWJsZWQ6IGMuZGlzYWJsZWQsXG4gICAgICBkZWZhdWx0OiBjLmRlZmF1bHQsXG4gICAgICBkaXZpZGVkOiBjLnNlcGFyYXRlZCxcbiAgICB9KSkgYXMgQVhSb3dDb21tYW5kSXRlbVtdO1xuICB9XG5cbiAgcHJpdmF0ZSBjb21tYW5kUm93SXRlbXMgPSBjb21wdXRlZDxBWFJvd0NvbW1hbmRJdGVtW10+KCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy52bS5wcmltYXJ5Um93QWN0aW9ucygpLm1hcCgoYykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogYy5pY29uLFxuICAgICAgICBuYW1lOiBjLm5hbWUsXG4gICAgICAgIHRleHQ6IHRyYW5zbGF0ZVN5bmMoYy50aXRsZSksXG4gICAgICAgIGNvbG9yOiBjLmNvbG9yLFxuICAgICAgICBkaXNhYmxlZDogYy5kaXNhYmxlZCxcbiAgICAgICAgZGVmYXVsdDogYy5kZWZhdWx0LFxuICAgICAgfSBhcyBBWFJvd0NvbW1hbmRJdGVtO1xuICAgIH0pO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlUm93RGJDbGljayhlOiBBWERhdGFUYWJsZVJvd0RiQ2xpY2spIHtcbiAgICBpZiAodGhpcy5ncmlkKCk/LmRhdGFTb3VyY2UuaXNMb2FkaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFsbEl0ZW1zID0gWy4uLnRoaXMuY29tbWFuZFJvd0l0ZW1zKCksIC4uLihhd2FpdCB0aGlzLmRyb3Bkb3duUm93SXRlbXMoZS5kYXRhKSldO1xuICAgIC8vIGNvbnN0IGRlZmF1bHRBY3Rpb24gPSBhbGxJdGVtcy5maW5kKChjKSA9PiAoYyBhcyBhbnkpLmRlZmF1bHQpIHx8IGFsbEl0ZW1zWzBdO1xuXG4gICAgY29uc3QgZGVmYXVsdEFjdGlvbiA9IGFsbEl0ZW1zLmZpbmQoKGMpID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gYy5uYW1lLnNwbGl0KCcmJylbMF07XG4gICAgICByZXR1cm4gKChjIGFzIGFueSkuZGVmYXVsdCB8fCBjb21tYW5kTmFtZSA9PT0gJ29wZW4tZW50aXR5JykgJiYgIWMuZGlzYWJsZWQ7XG4gICAgfSk7XG5cbiAgICBpZiAoIWRlZmF1bHRBY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCA9IHtcbiAgICAgIGNvbXBvbmVudDogZS5jb21wb25lbnQsXG4gICAgICBuYW1lOiBkZWZhdWx0QWN0aW9uLm5hbWUsXG4gICAgICBkYXRhOiBlLmRhdGEsXG4gICAgfTtcbiAgICB0aGlzLmhhbmRsZVJvd0NvbW1hbmRDbGljayhkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXREcm9wZG93blJvd0l0ZW1zID0gKHJvd0RhdGE6IHVua25vd24pOiBQcm9taXNlPEFYUm93Q29tbWFuZEl0ZW1bXT4gPT4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5kcm9wZG93blJvd0l0ZW1zKHJvd0RhdGEpKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgZ2V0Q29tbWFuZFJvd0l0ZW1zID0gKCk6IEFYUm93Q29tbWFuZEl0ZW1bXSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZFJvd0l0ZW1zKCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVJvd0NvbW1hbmRDbGljayhlOiBBWFJvd0NvbW1hbmRJdGVtQ2xpY2tFdmVudCkge1xuICAgIGlmICh0aGlzLmdyaWQoKT8uZGF0YVNvdXJjZS5pc0xvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGUuc2V0TG9hZGluZykge1xuICAgICAgZS5zZXRMb2FkaW5nKHRydWUpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnZtLmV4ZWN1dGVDb21tYW5kKGUubmFtZSwgZS5kYXRhKTtcbiAgICBpZiAoZS5zZXRMb2FkaW5nKSB7XG4gICAgICBlLnNldExvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVTZWxlY3RlZFJvd3NDaGFuZ2Uocm93czogdW5rbm93bltdKSB7XG4gICAgdGhpcy52bS5zZWxlY3RlZEl0ZW1zLnNldChyb3dzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYWtlUmVzcG9uc2l2ZTx0Pih2YWx1ZTogdCk6IHQgfCBzdHJpbmcge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzKCdNb2JpbGUnKSB8fCB0aGlzLnBsYXRmb3JtLmlzKCdTTScpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU2lkZUJhcihzaWRlQmFyPzogJ2NvbHVtbicgfCAnZmlsdGVyJyB8ICdzb3J0Jykge1xuICAgIHRoaXMudG9nZ2xlRW5kU2lkZSgpO1xuICAgIGlmIChzaWRlQmFyKSB7XG4gICAgICB0aGlzLmFjdGl2ZUVuZFNpZGVWaWV3LnNldChzaWRlQmFyKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdG9nZ2xlU2VhcmNoQmFyKCkge1xuICAgIHRoaXMuc2VhcmNoQmFyU2hvd24udXBkYXRlKCh2KSA9PiAhdik7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlUmVzZXRDbGljayhzaWRlQmFyOiAnZmlsdGVyJyB8ICdzb3J0JyB8ICdjb2x1bW4nKSB7XG4gICAgc3dpdGNoIChzaWRlQmFyKSB7XG4gICAgICBjYXNlICdmaWx0ZXInOiB7XG4gICAgICAgIHRoaXMudm0ucmVzZXRGaWx0ZXJzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnc29ydCc6IHtcbiAgICAgICAgdGhpcy52bS5yZXNldFNvcnRzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sdW1uJzoge1xuICAgICAgICB0aGlzLnZtLnJlc2V0Q29sdW1ucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBwcm90ZWN0ZWQgaGFuZGxlRGlzY2FyZENsaWNrKHNpZGVCYXI6ICdmaWx0ZXInIHwgJ3NvcnQnIHwgJ2NvbHVtbicpIHtcbiAgLy8gICBzd2l0Y2ggKHNpZGVCYXIpIHtcbiAgLy8gICAgIGNhc2UgJ2ZpbHRlcic6IHtcbiAgLy8gICAgICAgdGhpcy52bS5kaXNjYXJkRmlsdGVycygpO1xuICAvLyAgICAgICBicmVhaztcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNhc2UgJ3NvcnQnOiB7XG4gIC8vICAgICAgIHRoaXMudm0ucmVzZXRTb3J0cygpO1xuICAvLyAgICAgICBicmVhaztcbiAgLy8gICAgIH1cbiAgLy8gICAgIGNhc2UgJ2NvbHVtbic6IHtcbiAgLy8gICAgICAgdGhpcy52bS5yZXNldENvbHVtbnMoKTtcbiAgLy8gICAgICAgYnJlYWs7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUFwcGx5Q2xpY2soc2lkZUJhcjogJ2ZpbHRlcicgfCAnc29ydCcgfCAnY29sdW1uJykge1xuICAgIHRoaXMudm0uYXBwbHlGaWx0ZXJBbmRTb3J0KCk7XG4gICAgdGhpcy50b2dnbGVFbmRTaWRlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5UGFyYW1TdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy52bS5kZXN0cm95KCk7XG4gIH1cblxuICB0b2dnbGVDYXRlZ29yeURyYXdlcigpIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXJ0U2lkZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0UGFnZVRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudm0udGl0bGUoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VEZXNjcmlwdGlvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy52bS5kZXNjcmlwdGlvbigpO1xuICAgIGlmIChkZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGVBc3luYyhkZXNjcmlwdGlvbik7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFBhZ2VCcmVhZGNydW1icygpOiBBWFBCcmVhZGNydW1iSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy52bS5iZWFyZGNydW1icygpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UHJpbWFyeU1lbnVJdGVtcygpOiBQcm9taXNlPEFYUEFjdGlvbk1lbnVJdGVtW10+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMudm0uZ2V0UHJpbWFyeUFjdGlvbnMoKSkubWFwKFxuICAgICAgKHRyKSA9PlxuICAgICAgICAoe1xuICAgICAgICAgIG5hbWU6IHRyLm5hbWUsXG4gICAgICAgICAgdGl0bGU6IHRyLnRpdGxlLFxuICAgICAgICAgIGljb246IHRyLmljb24sXG4gICAgICAgICAgY29sb3I6IHRyLmNvbG9yLFxuICAgICAgICAgIGRpc2FibGVkOiB0ci5kaXNhYmxlZCxcbiAgICAgICAgICBjb21tYW5kOiB7XG4gICAgICAgICAgICBuYW1lOiB0ci5uYW1lLFxuICAgICAgICAgICAgb3B0aW9uczogdHIub3B0aW9ucyxcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0ci5tZXRhZGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSBhcyBBWFBBY3Rpb25NZW51SXRlbSxcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy52bS5nZXRTZWNvbmRhcnlBY3Rpb25zKCkpLm1hcCgodHIpID0+ICh7XG4gICAgICBuYW1lOiB0ci5uYW1lLFxuICAgICAgdGl0bGU6IHRyLnRpdGxlLFxuICAgICAgaWNvbjogdHIuaWNvbixcbiAgICAgIGNvbG9yOiB0ci5jb2xvcixcbiAgICAgIGRpc2FibGVkOiB0ci5kaXNhYmxlZCxcbiAgICAgIHNlcGFyYXRlZDogdHIuc2VwYXJhdGVkLFxuICAgICAgY29tbWFuZDoge1xuICAgICAgICBuYW1lOiB0ci5uYW1lLFxuICAgICAgICBvcHRpb25zOiB0ci5vcHRpb25zLFxuICAgICAgICBtZXRhZGF0YTogdHIubWV0YWRhdGEsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGV4ZWN1dGUoY29tbWFuZDogQVhQRXhlY3V0ZUNvbW1hbmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoY29tbWFuZCkge1xuICAgICAgdGhpcy52bS5leGVjdXRlKGNvbW1hbmQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVVbnNlbGVjdEFsbCgpIHtcbiAgICB0aGlzLnZtLnNlbGVjdGVkSXRlbXMuc2V0KFtdKTtcbiAgfVxufVxuIiwiPGF4cC1wYWdlLWxheW91dCAqdHJhbnNsYXRlPVwibGV0IHRcIj5cbiAgQGlmICh2bS5lbnRpdHlEZWYuY2F0ZWdvcnkpIHtcbiAgPGF4cC1sYXlvdXQtc3RhcnQtc2lkZSBpZD1cImF4cC1lbnRpdHktY2F0ZWdvcnktZHJhd2VyXCI+XG4gICAgPGF4cC1lbnRpdHktY2F0ZWdvcnkgaWQ9XCJheHAtZW50aXR5LWNhdGVnb3J5XCIgY2xhc3M9XCJheC13LTgwXCIgW3ZtXT1cInZtXCJcbiAgICAgIFtzZWFyY2hWYWx1ZV09XCJjYXRlZ29yeVNlYXJjaFZhbHVlKClcIj48L2F4cC1lbnRpdHktY2F0ZWdvcnk+XG4gIDwvYXhwLWxheW91dC1zdGFydC1zaWRlPlxuICB9XG4gIDxheHAtcGFnZS10b29sYmFyIGlkPVwiYXhwLWVudGl0eS10b29sYmFyXCI+XG4gICAgPGF4cC1lbnRpdHktbWFzdGVyLXRvb2xiYXItdmlldyBbdmlld01vZGVsXT1cInZtXCI+PC9heHAtZW50aXR5LW1hc3Rlci10b29sYmFyLXZpZXc+XG4gIDwvYXhwLXBhZ2UtdG9vbGJhcj5cbiAgPGF4cC1wYWdlLWNvbnRlbnQgY2xhc3M9XCJheC1vdmVyZmxvdy1hdXRvIGF4LXB0LTBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1iZXR3ZWVuIGF4LWdhcC0xIGF4LXBiLTEgYXgtdGV4dC1tdXRlZCBheC10ZXh0LXNtXCJcbiAgICAgIFtjbGFzcy5heC1pbnZpc2libGVdPVwiIWdyaWQuc2VsZWN0ZWRSb3dzLmxlbmd0aFwiPlxuICAgICAgPHNwYW4+e3sgZ3JpZC5zZWxlY3RlZFJvd3MubGVuZ3RoIH19XG4gICAgICAgIDxzcGFuPnt7ICdAZ2VuZXJhbDp0ZXJtcy5pbnRlcmZhY2UuaXRlbXMtc2VsZWN0ZWQnIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX08L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgICA8YXgtYnV0dG9uIHRleHQ9XCJAZ2VuZXJhbDp0ZXJtcy5pbnRlcmZhY2UudW5zZWxlY3QtYWxsXCIgY2xhc3M9XCJheC14c1wiIChvbkNsaWNrKT1cImhhbmRsZVVuc2VsZWN0QWxsKClcIj48L2F4LWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8YXgtZGF0YS10YWJsZSBpZD1cImF4cC1lbnRpdHktdGFibGVcIiBbYWxsb3dSZW9yZGVyaW5nXT1cInRydWVcIlxuICAgICAgKG9uQ29sdW1uc09yZGVyQ2hhbmdlZCk9XCJvbkNvbHVtbnNPcmRlckNoYW5nZWQoJGV2ZW50KVwiICNncmlkIFtzaG93Rm9vdGVyXT1cImZhbHNlXCIgY2xhc3M9XCJheC1mbGV4LTFcIlxuICAgICAgW3BhZ2luZ109XCJ0cnVlXCIgW2ZldGNoRGF0YU1vZGVdPVwiJ21hbnVhbCdcIiBbcGFyZW50RmllbGRdPVwidm0ucGFyZW50S2V5KClcIlxuICAgICAgW2xvYWRpbmddPVwieyBlbmFibGVkOiB0cnVlLCBhbmltYXRpb246IHRydWUgfVwiIFtkYXRhU291cmNlXT1cInZtLmRhdGFTb3VyY2VcIlxuICAgICAgKHNlbGVjdGVkUm93c0NoYW5nZSk9XCJoYW5kbGVTZWxlY3RlZFJvd3NDaGFuZ2UoJGV2ZW50KVwiIChvblJvd0RiQ2xpY2spPVwiaGFuZGxlUm93RGJDbGljaygkZXZlbnQpXCJcbiAgICAgIChvbkNvbHVtblNpemVDaGFuZ2VkKT1cIm9uQ29sdW1uU2l6ZUNoYW5nZWQoJGV2ZW50KVwiIChvblBhZ2VDaGFuZ2VkKT1cIm9uUGFnZUNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgQGlmICh2bS52aWV3KCkuaW5kZXhDb2wgPT09IHRydWUpIHtcbiAgICAgIDxheC1pbmRleC1jb2x1bW4gaWQ9XCJheHAtdGFibGUtY29sLWluZGV4XCIgZml4ZWQ9XCJzdGFydFwiIFt3aWR0aF09XCInODBweCdcIiBbcGFkWmVyb109XCJ0cnVlXCI+PC9heC1pbmRleC1jb2x1bW4+XG4gICAgICB9XG4gICAgICBAaWYgKHZtLnNlbGVjdGVkU2NvcGVBY3Rpb25zQ291bnQoKSkge1xuICAgICAgPGF4LXNlbGVjdC1jb2x1bW4gaWQ9XCJheHAtdGFibGUtY29sLXNlbGVjdFwiIGZpeGVkPVwic3RhcnRcIiBbd2lkdGhdPVwiJzYwcHgnXCI+PC9heC1zZWxlY3QtY29sdW1uPlxuICAgICAgfVxuICAgICAgQGZvciAoY29sIG9mIHZtLmNvbHVtbnMoKTsgdHJhY2sgY29sLm5hbWUpIHtcbiAgICAgIEBpZiAoY29sLnZpc2libGUpIHtcbiAgICAgIDxheHAtd2lkZ2V0LWNvbHVtbi1yZW5kZXJlciBbYXR0ci5pZF09XCInYXhwLXRhYmxlLWNvbC0nICsgY29sLm5hbWVcIlxuICAgICAgICBbZXhwYW5kSGFuZGxlcl09XCIkaW5kZXggPT09IDAgJiYgdm0ucGFyZW50S2V5KCkgPyB0cnVlIDogZmFsc2VcIiBbY2FwdGlvbl09XCIoY29sLnRpdGxlIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgIFtub2RlXT1cImNvbC5ub2RlKClcIiBbY3VzdG9tV2lkdGhdPVwiY29sLndpZHRoXCI+PC9heHAtd2lkZ2V0LWNvbHVtbi1yZW5kZXJlcj5cbiAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBpZiAoZ2V0Q29tbWFuZFJvd0l0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICA8YXgtY29tbWFuZC1jb2x1bW4gaWQ9XCJheHAtdGFibGUtY29sLWNvbW1hbmRzXCIgZml4ZWQ9XCJlbmRcIiBbd2lkdGhdPVwiZ2V0Q29tbWFuZFJvd0l0ZW1zKCkubGVuZ3RoICogNzAgKyAncHgnXCJcbiAgICAgICAgW2l0ZW1zXT1cImdldENvbW1hbmRSb3dJdGVtcygpXCIgKG9uSXRlbUNsaWNrKT1cImhhbmRsZVJvd0NvbW1hbmRDbGljaygkZXZlbnQpXCI+PC9heC1jb21tYW5kLWNvbHVtbj5cbiAgICAgIH1cbiAgICAgIDxheC1kcm9wZG93bi1jb21tYW5kLWNvbHVtbiBpZD1cImF4cC10YWJsZS1jb2wtZHJvcGRvd24tY29tbWFuZHNcIiBmaXhlZD1cImVuZFwiIFt3aWR0aF09XCInNjBweCdcIlxuICAgICAgICBbaXRlbXNdPVwiZ2V0RHJvcGRvd25Sb3dJdGVtc1wiIChvbkl0ZW1DbGljayk9XCJoYW5kbGVSb3dDb21tYW5kQ2xpY2soJGV2ZW50KVwiPjwvYXgtZHJvcGRvd24tY29tbWFuZC1jb2x1bW4+XG4gICAgPC9heC1kYXRhLXRhYmxlPlxuICA8L2F4cC1wYWdlLWNvbnRlbnQ+XG48L2F4cC1wYWdlLWxheW91dD4iXX0="],"names":["i1","i2","i3","i4","i6","i7","i5"],"mappings":"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"}
|