@acorex/modules 20.6.0-next.14 → 20.6.0-next.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/common/index.d.ts +1 -0
- package/fesm2022/acorex-modules-common.mjs +5 -2
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/{acorex-modules-form-template-management-template-picker.component-BiCwa7Ww.mjs → acorex-modules-form-template-management-template-picker.component-R6Ijm-97.mjs} +13 -13
- package/fesm2022/acorex-modules-form-template-management-template-picker.component-R6Ijm-97.mjs.map +1 -0
- package/fesm2022/acorex-modules-form-template-management.mjs +1 -1
- package/fesm2022/{acorex-modules-party-management-acorex-modules-party-management-1KGMBDfA.mjs → acorex-modules-party-management-acorex-modules-party-management-DB3H-49E.mjs} +7 -7
- package/fesm2022/{acorex-modules-party-management-acorex-modules-party-management-1KGMBDfA.mjs.map → acorex-modules-party-management-acorex-modules-party-management-DB3H-49E.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-industry.entity-DHuE1kt7.mjs → acorex-modules-party-management-industry.entity-E0RPqKYR.mjs} +2 -2
- package/fesm2022/{acorex-modules-party-management-industry.entity-DHuE1kt7.mjs.map → acorex-modules-party-management-industry.entity-E0RPqKYR.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-party-identifier-type.entity-jD8FUA11.mjs → acorex-modules-party-management-party-identifier-type.entity-COMURXUX.mjs} +2 -2
- package/fesm2022/{acorex-modules-party-management-party-identifier-type.entity-jD8FUA11.mjs.map → acorex-modules-party-management-party-identifier-type.entity-COMURXUX.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-party-identifier.entity-BykPw02a.mjs → acorex-modules-party-management-party-identifier.entity-C6b-Vrgs.mjs} +2 -2
- package/fesm2022/{acorex-modules-party-management-party-identifier.entity-BykPw02a.mjs.map → acorex-modules-party-management-party-identifier.entity-C6b-Vrgs.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-party-relationship.entity-DT0eidsI.mjs → acorex-modules-party-management-party-relationship.entity-rZHjByaY.mjs} +2 -2
- package/fesm2022/{acorex-modules-party-management-party-relationship.entity-DT0eidsI.mjs.map → acorex-modules-party-management-party-relationship.entity-rZHjByaY.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-party-role.entity-avNIs_Ga.mjs → acorex-modules-party-management-party-role.entity-B_fesIiR.mjs} +2 -2
- package/fesm2022/{acorex-modules-party-management-party-role.entity-avNIs_Ga.mjs.map → acorex-modules-party-management-party-role.entity-B_fesIiR.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-party-management-party.entity-CPN2U-mp.mjs → acorex-modules-party-management-party.entity-Czvx5O4_.mjs} +3 -13
- package/fesm2022/acorex-modules-party-management-party.entity-Czvx5O4_.mjs.map +1 -0
- package/fesm2022/acorex-modules-party-management.mjs +1 -1
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-B0TrJk70.mjs → acorex-modules-platform-management-acorex-modules-platform-management-B99sSLFQ.mjs} +5 -5
- package/fesm2022/{acorex-modules-platform-management-acorex-modules-platform-management-B0TrJk70.mjs.map → acorex-modules-platform-management-acorex-modules-platform-management-B99sSLFQ.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-platform-management-list-version.component-_xsJ6KyX.mjs → acorex-modules-platform-management-list-version.component-um9dTYaN.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-list-version.component-_xsJ6KyX.mjs.map → acorex-modules-platform-management-list-version.component-um9dTYaN.mjs.map} +1 -1
- package/fesm2022/{acorex-modules-platform-management-menu-list.component-CXlEbNtH.mjs → acorex-modules-platform-management-menu-list.component-DeS8hSoB.mjs} +8 -8
- package/fesm2022/acorex-modules-platform-management-menu-list.component-DeS8hSoB.mjs.map +1 -0
- package/fesm2022/{acorex-modules-platform-management-permission-definition.provider-BWt2Ib-i.mjs → acorex-modules-platform-management-permission-definition.provider-DHfWGH0p.mjs} +2 -2
- package/fesm2022/{acorex-modules-platform-management-permission-definition.provider-BWt2Ib-i.mjs.map → acorex-modules-platform-management-permission-definition.provider-DHfWGH0p.mjs.map} +1 -1
- package/fesm2022/acorex-modules-platform-management.mjs +1 -1
- package/fesm2022/{acorex-modules-report-management-report-runner-root-page.component-BPHpCx1z.mjs → acorex-modules-report-management-report-runner-root-page.component-Cjpx-4Q9.mjs} +5 -9
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-Cjpx-4Q9.mjs.map +1 -0
- package/fesm2022/acorex-modules-report-management.mjs +1 -1
- package/package.json +6 -6
- package/fesm2022/acorex-modules-form-template-management-template-picker.component-BiCwa7Ww.mjs.map +0 -1
- package/fesm2022/acorex-modules-party-management-party.entity-CPN2U-mp.mjs.map +0 -1
- package/fesm2022/acorex-modules-platform-management-menu-list.component-CXlEbNtH.mjs.map +0 -1
- package/fesm2022/acorex-modules-report-management-report-runner-root-page.component-BPHpCx1z.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-modules-platform-management-menu-list.component-CXlEbNtH.mjs","sources":["../tmp-esm2022/platform-management/lib/features/menu-management/menu-management.service.js","../tmp-esm2022/platform-management/lib/features/menu-management/pages/menu-list/menu-list.component.js"],"sourcesContent":["import { AXPMenuProviderService, AXPSettingService } from '@acorex/platform/common';\nimport { inject, Injectable } from '@angular/core';\nimport { cloneDeep } from 'lodash-es';\nimport { AXP_MENU_CUSTOMIZATION_DEFAULT, AXP_MENU_CUSTOMIZATION_KEY } from './menu-customization.const';\nimport * as i0 from \"@angular/core\";\n//#region ---- Menu Management Service ----\n/**\n * Constants for priority calculation\n */\nconst PRIORITY_BASE_ROOT = 0;\nconst PRIORITY_BASE_NESTED = 1000;\nconst PRIORITY_STEP = 10;\nexport class AXPMenuManagementService {\n constructor() {\n //#region ---- Dependencies ----\n this.settingService = inject(AXPSettingService);\n this.menuProviderService = inject(AXPMenuProviderService);\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Get menu tree as AXTreeNode[] for ax-tree2 component\n */\n async getMenuTree(scope) {\n // Get RAW menu items WITHOUT middleware (for management purposes)\n const baseItems = await this.menuProviderService.rawItems();\n // Load customizations for the given scope\n const customization = await this.loadCustomization(scope);\n // Merge custom items with base items\n const allItems = [...baseItems, ...customization.customItems];\n // Apply parent overrides to restructure items BEFORE building tree\n const restructuredItems = this.applyParentOverrides(allItems, customization);\n // Convert to tree nodes with metadata\n return this.convertToTreeNodes(restructuredItems, customization);\n }\n /**\n * Sync tree changes back to customization\n * Called automatically when tree structure changes via drag-drop\n */\n async syncTreeChanges(scope, treeNodes) {\n const customization = await this.loadCustomization(scope);\n // Extract and update priorities and parent relationships from tree structure\n this.updateCustomizationFromTree(treeNodes, customization);\n await this.saveCustomization(scope, customization);\n }\n /**\n * Load menu customization for a specific scope\n */\n async loadCustomization(scope) {\n try {\n const scopedSettings = this.settingService.scope(scope);\n const saved = await scopedSettings.get(AXP_MENU_CUSTOMIZATION_KEY);\n if (saved && saved.version) {\n return saved;\n }\n return cloneDeep(AXP_MENU_CUSTOMIZATION_DEFAULT);\n }\n catch (error) {\n console.warn('Failed to load menu customization, using defaults', error);\n return cloneDeep(AXP_MENU_CUSTOMIZATION_DEFAULT);\n }\n }\n /**\n * Save menu customization for a specific scope\n */\n async saveCustomization(scope, customization) {\n const scopedSettings = this.settingService.scope(scope);\n await scopedSettings.set(AXP_MENU_CUSTOMIZATION_KEY, customization);\n // Clear menu cache to force reload\n this.menuProviderService.clearCache();\n }\n /**\n * Hide a menu item\n */\n async hideMenuItem(scope, menuName) {\n this.validateMenuName(menuName, 'hide');\n const customization = await this.loadCustomization(scope);\n this.ensureOverrideExists(customization, menuName);\n customization.overrides[menuName].hidden = true;\n await this.saveCustomization(scope, customization);\n }\n /**\n * Show a menu item\n */\n async showMenuItem(scope, menuName) {\n this.validateMenuName(menuName, 'show');\n const customization = await this.loadCustomization(scope);\n if (customization.overrides[menuName]) {\n delete customization.overrides[menuName].hidden;\n this.cleanupEmptyOverride(customization, menuName);\n }\n await this.saveCustomization(scope, customization);\n }\n /**\n * Update menu item priority\n */\n async updateMenuPriority(scope, menuName, priority) {\n this.validateMenuName(menuName, 'update priority for');\n const customization = await this.loadCustomization(scope);\n this.ensureOverrideExists(customization, menuName);\n customization.overrides[menuName].priority = priority;\n await this.saveCustomization(scope, customization);\n }\n /**\n * Update menu item properties\n */\n async updateMenuProperties(scope, menuName, properties) {\n this.validateMenuName(menuName, 'update properties for');\n const customization = await this.loadCustomization(scope);\n this.ensureOverrideExists(customization, menuName);\n customization.overrides[menuName].properties = {\n ...customization.overrides[menuName].properties,\n ...properties,\n };\n await this.saveCustomization(scope, customization);\n }\n /**\n * Add custom menu item\n */\n async addCustomMenuItem(scope, menuItem, parent) {\n const customization = await this.loadCustomization(scope);\n // Generate unique name if not provided\n if (!menuItem.name) {\n menuItem.name = `custom-menu-${Date.now()}`;\n }\n customization.customItems.push(menuItem);\n await this.saveCustomization(scope, customization);\n }\n /**\n * Update custom menu item\n */\n async updateCustomMenuItem(scope, menuName, menuItem) {\n this.validateMenuName(menuName, 'update');\n const customization = await this.loadCustomization(scope);\n const index = customization.customItems.findIndex((item) => item.name === menuName);\n if (index === -1) {\n throw new Error(`Custom menu item '${menuName}' not found`);\n }\n customization.customItems[index] = menuItem;\n await this.saveCustomization(scope, customization);\n }\n /**\n * Delete custom menu item\n */\n async deleteCustomMenuItem(scope, menuName) {\n this.validateMenuName(menuName, 'delete');\n const customization = await this.loadCustomization(scope);\n const initialLength = customization.customItems.length;\n customization.customItems = customization.customItems.filter((item) => item.name !== menuName);\n if (customization.customItems.length === initialLength) {\n throw new Error(`Custom menu item '${menuName}' not found`);\n }\n await this.saveCustomization(scope, customization);\n }\n /**\n * Reset all customizations for a scope\n */\n async resetCustomizations(scope) {\n await this.saveCustomization(scope, cloneDeep(AXP_MENU_CUSTOMIZATION_DEFAULT));\n }\n //#endregion\n //#region ---- Private Methods ----\n /**\n * Apply parent overrides from customization to restructure menu items\n * This ensures the tree reflects saved parent changes (moves)\n */\n applyParentOverrides(items, customization) {\n // First, flatten all items into a map for easy lookup\n const itemMap = this.flattenMenuItems(items);\n // Build new structure based on effective parent relationships\n const rootItems = [];\n const childrenMap = new Map();\n for (const [itemName, item] of itemMap.entries()) {\n const override = customization.overrides[itemName];\n // Determine effective parent (override takes precedence)\n let effectiveParent;\n if (override?.parentName !== undefined) {\n // parentName is explicitly set (could be null for root, or a parent name)\n effectiveParent = override.parentName;\n }\n else {\n // No override - find original parent by searching original structure\n effectiveParent = this.findOriginalParent(items, itemName);\n }\n if (effectiveParent === null || effectiveParent === undefined) {\n // Root level item\n rootItems.push(item);\n }\n else {\n // Child item - add to parent's children\n if (!childrenMap.has(effectiveParent)) {\n childrenMap.set(effectiveParent, []);\n }\n childrenMap.get(effectiveParent).push(item);\n }\n }\n // Attach children to their parents recursively\n const attachChildren = (item) => {\n if (item.name && childrenMap.has(item.name)) {\n item.children = childrenMap.get(item.name);\n item.children?.forEach(attachChildren);\n }\n };\n rootItems.forEach(attachChildren);\n return rootItems;\n }\n /**\n * Find the original parent name of an item in the original structure\n * Returns undefined for root items, string for items with parents, null for not found\n */\n findOriginalParent(items, targetName, currentParent) {\n for (const item of items) {\n if (item.name === targetName) {\n return currentParent; // undefined if root, string if has parent\n }\n if (item.children) {\n const found = this.findOriginalParent(item.children, targetName, item.name);\n if (found !== null) {\n // Found in children (could be undefined for root of subtree, or string for nested item)\n return found;\n }\n // found === null means not found in this subtree, continue searching\n }\n }\n return null; // Not found in this level or any children\n }\n /**\n * Convert menu items to AXTreeNode[] with metadata\n */\n convertToTreeNodes(items, customization, parentName) {\n const nodes = items.map((item) => {\n const itemName = item.name;\n const override = itemName ? customization.overrides[itemName] : undefined;\n const isCustom = itemName ? customization.customItems.some((ci) => ci.name === itemName) : false;\n // Create metadata\n const metadata = {\n isBuiltIn: !isCustom,\n isCustom,\n isHidden: override?.hidden || false,\n originalPriority: item.priority,\n originalParentName: parentName,\n };\n // Apply priority override\n const effectivePriority = override?.priority !== undefined ? override.priority : item.priority;\n const itemWithPriority = { ...item, priority: effectivePriority };\n // Create tree node data\n const nodeData = {\n menuItem: itemWithPriority,\n metadata,\n };\n // Create tree node\n const treeNode = {\n id: itemName || item.path || this.generateNodeId(),\n label: item.text || item.path || 'Unnamed',\n icon: item.icon,\n expanded: false,\n selected: false,\n visible: true, // Always visible in management interface, CSS handles hidden styling\n children: item.children ? this.convertToTreeNodes(item.children, customization, itemName) : undefined,\n childrenCount: item.children?.length,\n data: nodeData,\n };\n return treeNode;\n });\n // Sort by priority\n nodes.sort((a, b) => {\n const aPriority = a.data?.menuItem.priority ?? 0;\n const bPriority = b.data?.menuItem.priority ?? 0;\n return aPriority - bPriority;\n });\n return nodes;\n }\n /**\n * Update customization from tree structure\n * Extracts priorities and parent relationships from tree nodes\n */\n updateCustomizationFromTree(treeNodes, customization, parentName) {\n // Calculate base priority for this level to maintain relative ordering\n const basePriority = parentName ? PRIORITY_BASE_NESTED : PRIORITY_BASE_ROOT;\n const priorityStep = PRIORITY_STEP;\n treeNodes.forEach((node, index) => {\n const nodeData = node.data;\n const menuItem = nodeData?.menuItem;\n if (menuItem?.name) {\n this.ensureOverrideExists(customization, menuItem.name);\n // Calculate new priority based on current position\n const newPriority = basePriority + index * priorityStep;\n // Get current effective priority (considering existing overrides)\n const currentEffectivePriority = customization.overrides[menuItem.name]?.priority ?? nodeData.metadata.originalPriority ?? 0;\n // Always update priority to reflect current position in tree\n // This ensures reordering works correctly even after multiple moves\n if (newPriority !== currentEffectivePriority) {\n customization.overrides[menuItem.name].priority = newPriority;\n }\n // Determine current effective parent (considering existing overrides)\n const currentEffectiveParent = customization.overrides[menuItem.name]?.parentName ?? nodeData.metadata.originalParentName;\n // Update parent relationship if it changed from current effective parent\n if (parentName !== currentEffectiveParent) {\n if (parentName) {\n customization.overrides[menuItem.name].parentName = parentName;\n }\n else {\n // Moving to root - set to null (not undefined) so middleware will process it\n // moveTo(null) moves the item to root level\n customization.overrides[menuItem.name].parentName = null;\n }\n }\n // Clean up empty overrides\n this.cleanupEmptyOverride(customization, menuItem.name);\n // Recursively process children\n if (node.children && node.children.length > 0) {\n this.updateCustomizationFromTree(node.children, customization, menuItem.name);\n }\n }\n });\n }\n /**\n * Validate menu name before operations\n */\n validateMenuName(menuName, operation) {\n if (!menuName) {\n throw new Error(`Menu item must have a name to be ${operation}`);\n }\n }\n /**\n * Ensure override object exists for a menu item\n */\n ensureOverrideExists(customization, menuName) {\n if (!customization.overrides[menuName]) {\n customization.overrides[menuName] = {};\n }\n }\n /**\n * Clean up empty override objects\n */\n cleanupEmptyOverride(customization, menuName) {\n if (Object.keys(customization.overrides[menuName] || {}).length === 0) {\n delete customization.overrides[menuName];\n }\n }\n /**\n * Flatten menu items recursively into a map\n */\n flattenMenuItems(items) {\n const itemMap = new Map();\n const flatten = (itemList) => {\n for (const item of itemList) {\n if (item.name) {\n // Clone item without children to rebuild structure\n itemMap.set(item.name, { ...item, children: undefined });\n }\n if (item.children) {\n flatten(item.children);\n }\n }\n };\n flatten(items);\n return itemMap;\n }\n /**\n * Generate unique ID for tree nodes\n */\n generateNodeId() {\n return `node-${Date.now()}-${Math.floor(Math.random() * 10000)}`;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPMenuManagementService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPMenuManagementService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXPMenuManagementService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvcGxhdGZvcm0tbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL21lbnUtbWFuYWdlbWVudC9tZW51LW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWUsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQWlCeEcsK0NBQStDO0FBRS9DOztHQUVHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDN0IsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDbEMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBR3pCLE1BQU0sT0FBTyx3QkFBd0I7SUFEckM7UUFFRSxvQ0FBb0M7UUFFNUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzQyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztLQTRiOUQ7SUExYkMsWUFBWTtJQUVaLHNDQUFzQztJQUV0Qzs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBdUI7UUFDdkMsa0VBQWtFO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVELDBDQUEwQztRQUMxQyxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FB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LE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBdUIsRUFBRSxFQUFFO1lBQzFDLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzVCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNkLG1EQUFtRDtvQkFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQzNELENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQixPQUFPLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDbkUsQ0FBQzsrR0E3YlUsd0JBQXdCO21IQUF4Qix3QkFBd0IsY0FEWCxNQUFNOzs0RkFDbkIsd0JBQXdCO2tCQURwQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYVHJlZU5vZGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdHJlZTInO1xuaW1wb3J0IHsgQVhQTWVudUl0ZW0sIEFYUE1lbnVQcm92aWRlclNlcnZpY2UsIEFYUFNldHRpbmdTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQUGxhdGZvcm1TY29wZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWFBfTUVOVV9DVVNUT01JWkFUSU9OX0RFRkFVTFQsIEFYUF9NRU5VX0NVU1RPTUlaQVRJT05fS0VZIH0gZnJvbSAnLi9tZW51LWN1c3RvbWl6YXRpb24uY29uc3QnO1xuaW1wb3J0IHsgQVhQTWVudUN1c3RvbWl6YXRpb24gfSBmcm9tICcuL21lbnUtY3VzdG9taXphdGlvbi50eXBlcyc7XG5cbi8qKlxuICogRGF0YSBzdHJ1Y3R1cmUgZm9yIHRyZWUgbm9kZSBjb21iaW5pbmcgbWVudSBpdGVtIHdpdGggbWV0YWRhdGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBNZW51VHJlZU5vZGVEYXRhIHtcbiAgbWVudUl0ZW06IEFYUE1lbnVJdGVtO1xuICBtZXRhZGF0YToge1xuICAgIGlzQnVpbHRJbjogYm9vbGVhbjtcbiAgICBpc0N1c3RvbTogYm9vbGVhbjtcbiAgICBpc0hpZGRlbjogYm9vbGVhbjtcbiAgICBvcmlnaW5hbFByaW9yaXR5PzogbnVtYmVyO1xuICAgIG9yaWdpbmFsUGFyZW50TmFtZT86IHN0cmluZztcbiAgfTtcbn1cblxuLy8jcmVnaW9uIC0tLS0gICBNZW51IE1hbmFnZW1lbnQgU2VydmljZSAgIC0tLS1cblxuLyoqXG4gKiBDb25zdGFudHMgZm9yIHByaW9yaXR5IGNhbGN1bGF0aW9uXG4gKi9cbmNvbnN0IFBSSU9SSVRZX0JBU0VfUk9PVCA9IDA7XG5jb25zdCBQUklPUklUWV9CQVNFX05FU1RFRCA9IDEwMDA7XG5jb25zdCBQUklPUklUWV9TVEVQID0gMTA7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQVhQTWVudU1hbmFnZW1lbnRTZXJ2aWNlIHtcbiAgLy8jcmVnaW9uIC0tLS0gICBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSBzZXR0aW5nU2VydmljZSA9IGluamVjdChBWFBTZXR0aW5nU2VydmljZSk7XG4gIHByaXZhdGUgbWVudVByb3ZpZGVyU2VydmljZSA9IGluamVjdChBWFBNZW51UHJvdmlkZXJTZXJ2aWNlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBHZXQgbWVudSB0cmVlIGFzIEFYVHJlZU5vZGVbXSBmb3IgYXgtdHJlZTIgY29tcG9uZW50XG4gICAqL1xuICBhc3luYyBnZXRNZW51VHJlZShzY29wZTogQVhQUGxhdGZvcm1TY29wZSk6IFByb21pc2U8QVhUcmVlTm9kZVtdPiB7XG4gICAgLy8gR2V0IFJBVyBtZW51IGl0ZW1zIFdJVEhPVVQgbWlkZGxld2FyZSAoZm9yIG1hbmFnZW1lbnQgcHVycG9zZXMpXG4gICAgY29uc3QgYmFzZUl0ZW1zID0gYXdhaXQgdGhpcy5tZW51UHJvdmlkZXJTZXJ2aWNlLnJhd0l0ZW1zKCk7XG5cbiAgICAvLyBMb2FkIGN1c3RvbWl6YXRpb25zIGZvciB0aGUgZ2l2ZW4gc2NvcGVcbiAgICBjb25zdCBjdXN0b21pemF0aW9uID0gYXdhaXQgdGhpcy5sb2FkQ3VzdG9taXphdGlvbihzY29wZSk7XG5cbiAgICAvLyBNZXJnZSBjdXN0b20gaXRlbXMgd2l0aCBiYXNlIGl0ZW1zXG4gICAgY29uc3QgYWxsSXRlbXMgPSBbLi4uYmFzZUl0ZW1zLCAuLi5jdXN0b21pemF0aW9uLmN1c3RvbUl0ZW1zXTtcblxuICAgIC8vIEFwcGx5IHBhcmVudCBvdmVycmlkZXMgdG8gcmVzdHJ1Y3R1cmUgaXRlbXMgQkVGT1JFIGJ1aWxkaW5nIHRyZWVcbiAgICBjb25zdCByZXN0cnVjdHVyZWRJdGVtcyA9IHRoaXMuYXBwbHlQYXJlbnRPdmVycmlkZXMoYWxsSXRlbXMsIGN1c3RvbWl6YXRpb24pO1xuXG4gICAgLy8gQ29udmVydCB0byB0cmVlIG5vZGVzIHdpdGggbWV0YWRhdGFcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0VG9UcmVlTm9kZXMocmVzdHJ1Y3R1cmVkSXRlbXMsIGN1c3RvbWl6YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgdHJlZSBjaGFuZ2VzIGJhY2sgdG8gY3VzdG9taXphdGlvblxuICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRyZWUgc3RydWN0dXJlIGNoYW5nZXMgdmlhIGRyYWctZHJvcFxuICAgKi9cbiAgYXN5bmMgc3luY1RyZWVDaGFuZ2VzKHNjb3BlOiBBWFBQbGF0Zm9ybVNjb3BlLCB0cmVlTm9kZXM6IEFYVHJlZU5vZGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1c3RvbWl6YXRpb24gPSBhd2FpdCB0aGlzLmxvYWRDdXN0b21pemF0aW9uKHNjb3BlKTtcblxuICAgIC8vIEV4dHJhY3QgYW5kIHVwZGF0ZSBwcmlvcml0aWVzIGFuZCBwYXJlbnQgcmVsYXRpb25zaGlwcyBmcm9tIHRyZWUgc3RydWN0dXJlXG4gICAgdGhpcy51cGRhdGVDdXN0b21pemF0aW9uRnJvbVRyZWUodHJlZU5vZGVzLCBjdXN0b21pemF0aW9uKTtcblxuICAgIGF3YWl0IHRoaXMuc2F2ZUN1c3RvbWl6YXRpb24oc2NvcGUsIGN1c3RvbWl6YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbWVudSBjdXN0b21pemF0aW9uIGZvciBhIHNwZWNpZmljIHNjb3BlXG4gICAqL1xuICBhc3luYyBsb2FkQ3VzdG9taXphdGlvbihzY29wZTogQVhQUGxhdGZvcm1TY29wZSk6IFByb21pc2U8QVhQTWVudUN1c3RvbWl6YXRpb24+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2NvcGVkU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdTZXJ2aWNlLnNjb3BlKHNjb3BlKTtcbiAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgc2NvcGVkU2V0dGluZ3MuZ2V0PEFYUE1lbnVDdXN0b21pemF0aW9uPihBWFBfTUVOVV9DVVNUT01JWkFUSU9OX0tFWSk7XG5cbiAgICAgIGlmIChzYXZlZCAmJiBzYXZlZC52ZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBzYXZlZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsb25lRGVlcChBWFBfTUVOVV9DVVNUT01JWkFUSU9OX0RFRkFVTFQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIG1lbnUgY3VzdG9taXphdGlvbiwgdXNpbmcgZGVmYXVsdHMnLCBlcnJvcik7XG4gICAgICByZXR1cm4gY2xvbmVEZWVwKEFYUF9NRU5VX0NVU1RPTUlaQVRJT05fREVGQVVMVCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgbWVudSBjdXN0b21pemF0aW9uIGZvciBhIHNwZWNpZmljIHNjb3BlXG4gICAqL1xuICBhc3luYyBzYXZlQ3VzdG9taXphdGlvbihzY29wZTogQVhQUGxhdGZvcm1TY29wZSwgY3VzdG9taXphdGlvbjogQVhQTWVudUN1c3RvbWl6YXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzY29wZWRTZXR0aW5ncyA9IHRoaXMuc2V0dGluZ1NlcnZpY2Uuc2NvcGUoc2NvcGUpO1xuICAgIGF3YWl0IHNjb3BlZFNldHRpbmdzLnNldChBWFBfTUVOVV9DVVNUT01JWkFUSU9OX0tFWSwgY3VzdG9taXphdGlvbik7XG5cbiAgICAvLyBDbGVhciBtZW51IGNhY2hlIHRvIGZvcmNlIHJlbG9hZFxuICAgIHRoaXMubWVudVByb3ZpZGVyU2VydmljZS5jbGVhckNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBhIG1lbnUgaXRlbVxuICAgKi9cbiAgYXN5bmMgaGlkZU1lbnVJdGVtKHNjb3BlOiBBWFBQbGF0Zm9ybVNjb3BlLCBtZW51TmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy52YWxpZGF0ZU1lbnVOYW1lKG1lbnVOYW1lLCAnaGlkZScpO1xuXG4gICAgY29uc3QgY3VzdG9taXphdGlvbiA9IGF3YWl0IHRoaXMubG9hZEN1c3RvbWl6YXRpb24oc2NvcGUpO1xuICAgIHRoaXMuZW5zdXJlT3ZlcnJpZGVFeGlzdHMoY3VzdG9taXphdGlvbiwgbWVudU5hbWUpO1xuICAgIGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW21lbnVOYW1lXS5oaWRkZW4gPSB0cnVlO1xuXG4gICAgYXdhaXQgdGhpcy5zYXZlQ3VzdG9taXphdGlvbihzY29wZSwgY3VzdG9taXphdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBhIG1lbnUgaXRlbVxuICAgKi9cbiAgYXN5bmMgc2hvd01lbnVJdGVtKHNjb3BlOiBBWFBQbGF0Zm9ybVNjb3BlLCBtZW51TmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy52YWxpZGF0ZU1lbnVOYW1lKG1lbnVOYW1lLCAnc2hvdycpO1xuXG4gICAgY29uc3QgY3VzdG9taXphdGlvbiA9IGF3YWl0IHRoaXMubG9hZEN1c3RvbWl6YXRpb24oc2NvcGUpO1xuXG4gICAgaWYgKGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW21lbnVOYW1lXSkge1xuICAgICAgZGVsZXRlIGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW21lbnVOYW1lXS5oaWRkZW47XG4gICAgICB0aGlzLmNsZWFudXBFbXB0eU92ZXJyaWRlKGN1c3RvbWl6YXRpb24sIG1lbnVOYW1lKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVDdXN0b21pemF0aW9uKHNjb3BlLCBjdXN0b21pemF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbWVudSBpdGVtIHByaW9yaXR5XG4gICAqL1xuICBhc3luYyB1cGRhdGVNZW51UHJpb3JpdHkoc2NvcGU6IEFYUFBsYXRmb3JtU2NvcGUsIG1lbnVOYW1lOiBzdHJpbmcsIHByaW9yaXR5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnZhbGlkYXRlTWVudU5hbWUobWVudU5hbWUsICd1cGRhdGUgcHJpb3JpdHkgZm9yJyk7XG5cbiAgICBjb25zdCBjdXN0b21pemF0aW9uID0gYXdhaXQgdGhpcy5sb2FkQ3VzdG9taXphdGlvbihzY29wZSk7XG4gICAgdGhpcy5lbnN1cmVPdmVycmlkZUV4aXN0cyhjdXN0b21pemF0aW9uLCBtZW51TmFtZSk7XG4gICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudU5hbWVdLnByaW9yaXR5ID0gcHJpb3JpdHk7XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVDdXN0b21pemF0aW9uKHNjb3BlLCBjdXN0b21pemF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbWVudSBpdGVtIHByb3BlcnRpZXNcbiAgICovXG4gIGFzeW5jIHVwZGF0ZU1lbnVQcm9wZXJ0aWVzKFxuICAgIHNjb3BlOiBBWFBQbGF0Zm9ybVNjb3BlLFxuICAgIG1lbnVOYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydGllczogUGFydGlhbDxBWFBNZW51SXRlbT4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudmFsaWRhdGVNZW51TmFtZShtZW51TmFtZSwgJ3VwZGF0ZSBwcm9wZXJ0aWVzIGZvcicpO1xuXG4gICAgY29uc3QgY3VzdG9taXphdGlvbiA9IGF3YWl0IHRoaXMubG9hZEN1c3RvbWl6YXRpb24oc2NvcGUpO1xuICAgIHRoaXMuZW5zdXJlT3ZlcnJpZGVFeGlzdHMoY3VzdG9taXphdGlvbiwgbWVudU5hbWUpO1xuXG4gICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudU5hbWVdLnByb3BlcnRpZXMgPSB7XG4gICAgICAuLi5jdXN0b21pemF0aW9uLm92ZXJyaWRlc1ttZW51TmFtZV0ucHJvcGVydGllcyxcbiAgICAgIC4uLnByb3BlcnRpZXMsXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc2F2ZUN1c3RvbWl6YXRpb24oc2NvcGUsIGN1c3RvbWl6YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBjdXN0b20gbWVudSBpdGVtXG4gICAqL1xuICBhc3luYyBhZGRDdXN0b21NZW51SXRlbShzY29wZTogQVhQUGxhdGZvcm1TY29wZSwgbWVudUl0ZW06IEFYUE1lbnVJdGVtLCBwYXJlbnQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1c3RvbWl6YXRpb24gPSBhd2FpdCB0aGlzLmxvYWRDdXN0b21pemF0aW9uKHNjb3BlKTtcblxuICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBuYW1lIGlmIG5vdCBwcm92aWRlZFxuICAgIGlmICghbWVudUl0ZW0ubmFtZSkge1xuICAgICAgbWVudUl0ZW0ubmFtZSA9IGBjdXN0b20tbWVudS0ke0RhdGUubm93KCl9YDtcbiAgICB9XG5cbiAgICBjdXN0b21pemF0aW9uLmN1c3RvbUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuXG4gICAgYXdhaXQgdGhpcy5zYXZlQ3VzdG9taXphdGlvbihzY29wZSwgY3VzdG9taXphdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGN1c3RvbSBtZW51IGl0ZW1cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUN1c3RvbU1lbnVJdGVtKHNjb3BlOiBBWFBQbGF0Zm9ybVNjb3BlLCBtZW51TmFtZTogc3RyaW5nLCBtZW51SXRlbTogQVhQTWVudUl0ZW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnZhbGlkYXRlTWVudU5hbWUobWVudU5hbWUsICd1cGRhdGUnKTtcblxuICAgIGNvbnN0IGN1c3RvbWl6YXRpb24gPSBhd2FpdCB0aGlzLmxvYWRDdXN0b21pemF0aW9uKHNjb3BlKTtcblxuICAgIGNvbnN0IGluZGV4ID0gY3VzdG9taXphdGlvbi5jdXN0b21JdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gbWVudU5hbWUpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b20gbWVudSBpdGVtICcke21lbnVOYW1lfScgbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgY3VzdG9taXphdGlvbi5jdXN0b21JdGVtc1tpbmRleF0gPSBtZW51SXRlbTtcbiAgICBhd2FpdCB0aGlzLnNhdmVDdXN0b21pemF0aW9uKHNjb3BlLCBjdXN0b21pemF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgY3VzdG9tIG1lbnUgaXRlbVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlQ3VzdG9tTWVudUl0ZW0oc2NvcGU6IEFYUFBsYXRmb3JtU2NvcGUsIG1lbnVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnZhbGlkYXRlTWVudU5hbWUobWVudU5hbWUsICdkZWxldGUnKTtcblxuICAgIGNvbnN0IGN1c3RvbWl6YXRpb24gPSBhd2FpdCB0aGlzLmxvYWRDdXN0b21pemF0aW9uKHNjb3BlKTtcblxuICAgIGNvbnN0IGluaXRpYWxMZW5ndGggPSBjdXN0b21pemF0aW9uLmN1c3RvbUl0ZW1zLmxlbmd0aDtcbiAgICBjdXN0b21pemF0aW9uLmN1c3RvbUl0ZW1zID0gY3VzdG9taXphdGlvbi5jdXN0b21JdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubmFtZSAhPT0gbWVudU5hbWUpO1xuXG4gICAgaWYgKGN1c3RvbWl6YXRpb24uY3VzdG9tSXRlbXMubGVuZ3RoID09PSBpbml0aWFsTGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbSBtZW51IGl0ZW0gJyR7bWVudU5hbWV9JyBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVDdXN0b21pemF0aW9uKHNjb3BlLCBjdXN0b21pemF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBhbGwgY3VzdG9taXphdGlvbnMgZm9yIGEgc2NvcGVcbiAgICovXG4gIGFzeW5jIHJlc2V0Q3VzdG9taXphdGlvbnMoc2NvcGU6IEFYUFBsYXRmb3JtU2NvcGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNhdmVDdXN0b21pemF0aW9uKHNjb3BlLCBjbG9uZURlZXAoQVhQX01FTlVfQ1VTVE9NSVpBVElPTl9ERUZBVUxUKSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFByaXZhdGUgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogQXBwbHkgcGFyZW50IG92ZXJyaWRlcyBmcm9tIGN1c3RvbWl6YXRpb24gdG8gcmVzdHJ1Y3R1cmUgbWVudSBpdGVtc1xuICAgKiBUaGlzIGVuc3VyZXMgdGhlIHRyZWUgcmVmbGVjdHMgc2F2ZWQgcGFyZW50IGNoYW5nZXMgKG1vdmVzKVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVBhcmVudE92ZXJyaWRlcyhpdGVtczogQVhQTWVudUl0ZW1bXSwgY3VzdG9taXphdGlvbjogQVhQTWVudUN1c3RvbWl6YXRpb24pOiBBWFBNZW51SXRlbVtdIHtcbiAgICAvLyBGaXJzdCwgZmxhdHRlbiBhbGwgaXRlbXMgaW50byBhIG1hcCBmb3IgZWFzeSBsb29rdXBcbiAgICBjb25zdCBpdGVtTWFwID0gdGhpcy5mbGF0dGVuTWVudUl0ZW1zKGl0ZW1zKTtcblxuICAgIC8vIEJ1aWxkIG5ldyBzdHJ1Y3R1cmUgYmFzZWQgb24gZWZmZWN0aXZlIHBhcmVudCByZWxhdGlvbnNoaXBzXG4gICAgY29uc3Qgcm9vdEl0ZW1zOiBBWFBNZW51SXRlbVtdID0gW107XG4gICAgY29uc3QgY2hpbGRyZW5NYXAgPSBuZXcgTWFwPHN0cmluZywgQVhQTWVudUl0ZW1bXT4oKTtcblxuICAgIGZvciAoY29uc3QgW2l0ZW1OYW1lLCBpdGVtXSBvZiBpdGVtTWFwLmVudHJpZXMoKSkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21pemF0aW9uLm92ZXJyaWRlc1tpdGVtTmFtZV07XG5cbiAgICAgIC8vIERldGVybWluZSBlZmZlY3RpdmUgcGFyZW50IChvdmVycmlkZSB0YWtlcyBwcmVjZWRlbmNlKVxuICAgICAgbGV0IGVmZmVjdGl2ZVBhcmVudDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvdmVycmlkZT8ucGFyZW50TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHBhcmVudE5hbWUgaXMgZXhwbGljaXRseSBzZXQgKGNvdWxkIGJlIG51bGwgZm9yIHJvb3QsIG9yIGEgcGFyZW50IG5hbWUpXG4gICAgICAgIGVmZmVjdGl2ZVBhcmVudCA9IG92ZXJyaWRlLnBhcmVudE5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBObyBvdmVycmlkZSAtIGZpbmQgb3JpZ2luYWwgcGFyZW50IGJ5IHNlYXJjaGluZyBvcmlnaW5hbCBzdHJ1Y3R1cmVcbiAgICAgICAgZWZmZWN0aXZlUGFyZW50ID0gdGhpcy5maW5kT3JpZ2luYWxQYXJlbnQoaXRlbXMsIGl0ZW1OYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVmZmVjdGl2ZVBhcmVudCA9PT0gbnVsbCB8fCBlZmZlY3RpdmVQYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBSb290IGxldmVsIGl0ZW1cbiAgICAgICAgcm9vdEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDaGlsZCBpdGVtIC0gYWRkIHRvIHBhcmVudCdzIGNoaWxkcmVuXG4gICAgICAgIGlmICghY2hpbGRyZW5NYXAuaGFzKGVmZmVjdGl2ZVBhcmVudCkpIHtcbiAgICAgICAgICBjaGlsZHJlbk1hcC5zZXQoZWZmZWN0aXZlUGFyZW50LCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRyZW5NYXAuZ2V0KGVmZmVjdGl2ZVBhcmVudCkhLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXR0YWNoIGNoaWxkcmVuIHRvIHRoZWlyIHBhcmVudHMgcmVjdXJzaXZlbHlcbiAgICBjb25zdCBhdHRhY2hDaGlsZHJlbiA9IChpdGVtOiBBWFBNZW51SXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0ubmFtZSAmJiBjaGlsZHJlbk1hcC5oYXMoaXRlbS5uYW1lKSkge1xuICAgICAgICBpdGVtLmNoaWxkcmVuID0gY2hpbGRyZW5NYXAuZ2V0KGl0ZW0ubmFtZSk7XG4gICAgICAgIGl0ZW0uY2hpbGRyZW4/LmZvckVhY2goYXR0YWNoQ2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByb290SXRlbXMuZm9yRWFjaChhdHRhY2hDaGlsZHJlbik7XG5cbiAgICByZXR1cm4gcm9vdEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIG9yaWdpbmFsIHBhcmVudCBuYW1lIG9mIGFuIGl0ZW0gaW4gdGhlIG9yaWdpbmFsIHN0cnVjdHVyZVxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBmb3Igcm9vdCBpdGVtcywgc3RyaW5nIGZvciBpdGVtcyB3aXRoIHBhcmVudHMsIG51bGwgZm9yIG5vdCBmb3VuZFxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kT3JpZ2luYWxQYXJlbnQoXG4gICAgaXRlbXM6IEFYUE1lbnVJdGVtW10sXG4gICAgdGFyZ2V0TmFtZTogc3RyaW5nLFxuICAgIGN1cnJlbnRQYXJlbnQ/OiBzdHJpbmcsXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaWYgKGl0ZW0ubmFtZSA9PT0gdGFyZ2V0TmFtZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudFBhcmVudDsgLy8gdW5kZWZpbmVkIGlmIHJvb3QsIHN0cmluZyBpZiBoYXMgcGFyZW50XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZE9yaWdpbmFsUGFyZW50KGl0ZW0uY2hpbGRyZW4sIHRhcmdldE5hbWUsIGl0ZW0ubmFtZSk7XG4gICAgICAgIGlmIChmb3VuZCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZvdW5kIGluIGNoaWxkcmVuIChjb3VsZCBiZSB1bmRlZmluZWQgZm9yIHJvb3Qgb2Ygc3VidHJlZSwgb3Igc3RyaW5nIGZvciBuZXN0ZWQgaXRlbSlcbiAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm91bmQgPT09IG51bGwgbWVhbnMgbm90IGZvdW5kIGluIHRoaXMgc3VidHJlZSwgY29udGludWUgc2VhcmNoaW5nXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsOyAvLyBOb3QgZm91bmQgaW4gdGhpcyBsZXZlbCBvciBhbnkgY2hpbGRyZW5cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IG1lbnUgaXRlbXMgdG8gQVhUcmVlTm9kZVtdIHdpdGggbWV0YWRhdGFcbiAgICovXG4gIHByaXZhdGUgY29udmVydFRvVHJlZU5vZGVzKFxuICAgIGl0ZW1zOiBBWFBNZW51SXRlbVtdLFxuICAgIGN1c3RvbWl6YXRpb246IEFYUE1lbnVDdXN0b21pemF0aW9uLFxuICAgIHBhcmVudE5hbWU/OiBzdHJpbmcsXG4gICk6IEFYVHJlZU5vZGVbXSB7XG4gICAgY29uc3Qgbm9kZXMgPSBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1OYW1lID0gaXRlbS5uYW1lO1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBpdGVtTmFtZSA/IGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW2l0ZW1OYW1lXSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGlzQ3VzdG9tID0gaXRlbU5hbWUgPyBjdXN0b21pemF0aW9uLmN1c3RvbUl0ZW1zLnNvbWUoKGNpKSA9PiBjaS5uYW1lID09PSBpdGVtTmFtZSkgOiBmYWxzZTtcblxuICAgICAgLy8gQ3JlYXRlIG1ldGFkYXRhXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICAgICAgaXNCdWlsdEluOiAhaXNDdXN0b20sXG4gICAgICAgIGlzQ3VzdG9tLFxuICAgICAgICBpc0hpZGRlbjogb3ZlcnJpZGU/LmhpZGRlbiB8fCBmYWxzZSxcbiAgICAgICAgb3JpZ2luYWxQcmlvcml0eTogaXRlbS5wcmlvcml0eSxcbiAgICAgICAgb3JpZ2luYWxQYXJlbnROYW1lOiBwYXJlbnROYW1lLFxuICAgICAgfTtcblxuICAgICAgLy8gQXBwbHkgcHJpb3JpdHkgb3ZlcnJpZGVcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZVByaW9yaXR5ID0gb3ZlcnJpZGU/LnByaW9yaXR5ICE9PSB1bmRlZmluZWQgPyBvdmVycmlkZS5wcmlvcml0eSA6IGl0ZW0ucHJpb3JpdHk7XG4gICAgICBjb25zdCBpdGVtV2l0aFByaW9yaXR5ID0geyAuLi5pdGVtLCBwcmlvcml0eTogZWZmZWN0aXZlUHJpb3JpdHkgfTtcblxuICAgICAgLy8gQ3JlYXRlIHRyZWUgbm9kZSBkYXRhXG4gICAgICBjb25zdCBub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSA9IHtcbiAgICAgICAgbWVudUl0ZW06IGl0ZW1XaXRoUHJpb3JpdHksXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgfTtcblxuICAgICAgLy8gQ3JlYXRlIHRyZWUgbm9kZVxuICAgICAgY29uc3QgdHJlZU5vZGU6IEFYVHJlZU5vZGUgPSB7XG4gICAgICAgIGlkOiBpdGVtTmFtZSB8fCBpdGVtLnBhdGggfHwgdGhpcy5nZW5lcmF0ZU5vZGVJZCgpLFxuICAgICAgICBsYWJlbDogaXRlbS50ZXh0IHx8IGl0ZW0ucGF0aCB8fCAnVW5uYW1lZCcsXG4gICAgICAgIGljb246IGl0ZW0uaWNvbixcbiAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHZpc2libGU6IHRydWUsIC8vIEFsd2F5cyB2aXNpYmxlIGluIG1hbmFnZW1lbnQgaW50ZXJmYWNlLCBDU1MgaGFuZGxlcyBoaWRkZW4gc3R5bGluZ1xuICAgICAgICBjaGlsZHJlbjogaXRlbS5jaGlsZHJlbiA/IHRoaXMuY29udmVydFRvVHJlZU5vZGVzKGl0ZW0uY2hpbGRyZW4sIGN1c3RvbWl6YXRpb24sIGl0ZW1OYW1lKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgY2hpbGRyZW5Db3VudDogaXRlbS5jaGlsZHJlbj8ubGVuZ3RoLFxuICAgICAgICBkYXRhOiBub2RlRGF0YSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0cmVlTm9kZTtcbiAgICB9KTtcblxuICAgIC8vIFNvcnQgYnkgcHJpb3JpdHlcbiAgICBub2Rlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBhUHJpb3JpdHkgPSAoYS5kYXRhIGFzIEFYUE1lbnVUcmVlTm9kZURhdGEpPy5tZW51SXRlbS5wcmlvcml0eSA/PyAwO1xuICAgICAgY29uc3QgYlByaW9yaXR5ID0gKGIuZGF0YSBhcyBBWFBNZW51VHJlZU5vZGVEYXRhKT8ubWVudUl0ZW0ucHJpb3JpdHkgPz8gMDtcbiAgICAgIHJldHVybiBhUHJpb3JpdHkgLSBiUHJpb3JpdHk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGN1c3RvbWl6YXRpb24gZnJvbSB0cmVlIHN0cnVjdHVyZVxuICAgKiBFeHRyYWN0cyBwcmlvcml0aWVzIGFuZCBwYXJlbnQgcmVsYXRpb25zaGlwcyBmcm9tIHRyZWUgbm9kZXNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQ3VzdG9taXphdGlvbkZyb21UcmVlKFxuICAgIHRyZWVOb2RlczogQVhUcmVlTm9kZVtdLFxuICAgIGN1c3RvbWl6YXRpb246IEFYUE1lbnVDdXN0b21pemF0aW9uLFxuICAgIHBhcmVudE5hbWU/OiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIC8vIENhbGN1bGF0ZSBiYXNlIHByaW9yaXR5IGZvciB0aGlzIGxldmVsIHRvIG1haW50YWluIHJlbGF0aXZlIG9yZGVyaW5nXG4gICAgY29uc3QgYmFzZVByaW9yaXR5ID0gcGFyZW50TmFtZSA/IFBSSU9SSVRZX0JBU0VfTkVTVEVEIDogUFJJT1JJVFlfQkFTRV9ST09UO1xuICAgIGNvbnN0IHByaW9yaXR5U3RlcCA9IFBSSU9SSVRZX1NURVA7XG5cbiAgICB0cmVlTm9kZXMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVEYXRhID0gbm9kZS5kYXRhIGFzIEFYUE1lbnVUcmVlTm9kZURhdGE7XG4gICAgICBjb25zdCBtZW51SXRlbSA9IG5vZGVEYXRhPy5tZW51SXRlbTtcblxuICAgICAgaWYgKG1lbnVJdGVtPy5uYW1lKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlT3ZlcnJpZGVFeGlzdHMoY3VzdG9taXphdGlvbiwgbWVudUl0ZW0ubmFtZSk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBwcmlvcml0eSBiYXNlZCBvbiBjdXJyZW50IHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IG5ld1ByaW9yaXR5ID0gYmFzZVByaW9yaXR5ICsgaW5kZXggKiBwcmlvcml0eVN0ZXA7XG5cbiAgICAgICAgLy8gR2V0IGN1cnJlbnQgZWZmZWN0aXZlIHByaW9yaXR5IChjb25zaWRlcmluZyBleGlzdGluZyBvdmVycmlkZXMpXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFZmZlY3RpdmVQcmlvcml0eSA9XG4gICAgICAgICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudUl0ZW0ubmFtZV0/LnByaW9yaXR5ID8/IG5vZGVEYXRhLm1ldGFkYXRhLm9yaWdpbmFsUHJpb3JpdHkgPz8gMDtcblxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIHByaW9yaXR5IHRvIHJlZmxlY3QgY3VycmVudCBwb3NpdGlvbiBpbiB0cmVlXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyByZW9yZGVyaW5nIHdvcmtzIGNvcnJlY3RseSBldmVuIGFmdGVyIG11bHRpcGxlIG1vdmVzXG4gICAgICAgIGlmIChuZXdQcmlvcml0eSAhPT0gY3VycmVudEVmZmVjdGl2ZVByaW9yaXR5KSB7XG4gICAgICAgICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudUl0ZW0ubmFtZV0ucHJpb3JpdHkgPSBuZXdQcmlvcml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSBjdXJyZW50IGVmZmVjdGl2ZSBwYXJlbnQgKGNvbnNpZGVyaW5nIGV4aXN0aW5nIG92ZXJyaWRlcylcbiAgICAgICAgY29uc3QgY3VycmVudEVmZmVjdGl2ZVBhcmVudCA9XG4gICAgICAgICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudUl0ZW0ubmFtZV0/LnBhcmVudE5hbWUgPz8gbm9kZURhdGEubWV0YWRhdGEub3JpZ2luYWxQYXJlbnROYW1lO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBwYXJlbnQgcmVsYXRpb25zaGlwIGlmIGl0IGNoYW5nZWQgZnJvbSBjdXJyZW50IGVmZmVjdGl2ZSBwYXJlbnRcbiAgICAgICAgaWYgKHBhcmVudE5hbWUgIT09IGN1cnJlbnRFZmZlY3RpdmVQYXJlbnQpIHtcbiAgICAgICAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgICAgICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudUl0ZW0ubmFtZV0ucGFyZW50TmFtZSA9IHBhcmVudE5hbWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE1vdmluZyB0byByb290IC0gc2V0IHRvIG51bGwgKG5vdCB1bmRlZmluZWQpIHNvIG1pZGRsZXdhcmUgd2lsbCBwcm9jZXNzIGl0XG4gICAgICAgICAgICAvLyBtb3ZlVG8obnVsbCkgbW92ZXMgdGhlIGl0ZW0gdG8gcm9vdCBsZXZlbFxuICAgICAgICAgICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudUl0ZW0ubmFtZV0ucGFyZW50TmFtZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgZW1wdHkgb3ZlcnJpZGVzXG4gICAgICAgIHRoaXMuY2xlYW51cEVtcHR5T3ZlcnJpZGUoY3VzdG9taXphdGlvbiwgbWVudUl0ZW0ubmFtZSk7XG5cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBjaGlsZHJlblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUN1c3RvbWl6YXRpb25Gcm9tVHJlZShub2RlLmNoaWxkcmVuLCBjdXN0b21pemF0aW9uLCBtZW51SXRlbS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIG1lbnUgbmFtZSBiZWZvcmUgb3BlcmF0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZU1lbnVOYW1lKG1lbnVOYW1lOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFtZW51TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZW51IGl0ZW0gbXVzdCBoYXZlIGEgbmFtZSB0byBiZSAke29wZXJhdGlvbn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIG92ZXJyaWRlIG9iamVjdCBleGlzdHMgZm9yIGEgbWVudSBpdGVtXG4gICAqL1xuICBwcml2YXRlIGVuc3VyZU92ZXJyaWRlRXhpc3RzKGN1c3RvbWl6YXRpb246IEFYUE1lbnVDdXN0b21pemF0aW9uLCBtZW51TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFjdXN0b21pemF0aW9uLm92ZXJyaWRlc1ttZW51TmFtZV0pIHtcbiAgICAgIGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW21lbnVOYW1lXSA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCBlbXB0eSBvdmVycmlkZSBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIGNsZWFudXBFbXB0eU92ZXJyaWRlKGN1c3RvbWl6YXRpb246IEFYUE1lbnVDdXN0b21pemF0aW9uLCBtZW51TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW21lbnVOYW1lXSB8fCB7fSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudU5hbWVdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbGF0dGVuIG1lbnUgaXRlbXMgcmVjdXJzaXZlbHkgaW50byBhIG1hcFxuICAgKi9cbiAgcHJpdmF0ZSBmbGF0dGVuTWVudUl0ZW1zKGl0ZW1zOiBBWFBNZW51SXRlbVtdKTogTWFwPHN0cmluZywgQVhQTWVudUl0ZW0+IHtcbiAgICBjb25zdCBpdGVtTWFwID0gbmV3IE1hcDxzdHJpbmcsIEFYUE1lbnVJdGVtPigpO1xuXG4gICAgY29uc3QgZmxhdHRlbiA9IChpdGVtTGlzdDogQVhQTWVudUl0ZW1bXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1MaXN0KSB7XG4gICAgICAgIGlmIChpdGVtLm5hbWUpIHtcbiAgICAgICAgICAvLyBDbG9uZSBpdGVtIHdpdGhvdXQgY2hpbGRyZW4gdG8gcmVidWlsZCBzdHJ1Y3R1cmVcbiAgICAgICAgICBpdGVtTWFwLnNldChpdGVtLm5hbWUsIHsgLi4uaXRlbSwgY2hpbGRyZW46IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgIGZsYXR0ZW4oaXRlbS5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZmxhdHRlbihpdGVtcyk7XG4gICAgcmV0dXJuIGl0ZW1NYXA7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdW5pcXVlIElEIGZvciB0cmVlIG5vZGVzXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlTm9kZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBub2RlLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMCl9YDtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4vLyNlbmRyZWdpb25cblxuIl19","import { AXBadgeModule } from '@acorex/components/badge';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDialogService } from '@acorex/components/dialog';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXDropdownButtonModule } from '@acorex/components/dropdown-button';\nimport { AXToastService } from '@acorex/components/toast';\nimport { AXTree2Component } from '@acorex/components/tree2';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { AXPPlatformScope } from '@acorex/platform/core';\nimport { AXPLayoutBuilderService } from '@acorex/platform/layout/builder';\nimport { AXPStateMessageComponent, AXPThemeLayoutBlockComponent } from '@acorex/platform/layout/components';\nimport { AXPPageLayoutBase, AXPPageLayoutBaseComponent, AXPPageLayoutComponent } from '@acorex/platform/layout/views';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, signal, viewChild, ViewEncapsulation, } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subject, takeUntil } from 'rxjs';\nimport { AXPMenuManagementService } from '../../menu-management.service';\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/dropdown\";\nimport * as i4 from \"@acorex/components/badge\";\nimport * as i5 from \"@angular/common\";\nimport * as i6 from \"@acorex/core/translation\";\n//#region ---- Menu List Component ----\nexport class AXMMenuListComponent extends AXPPageLayoutBaseComponent {\n constructor() {\n super(...arguments);\n //#region ---- Dependencies ----\n this.menuManagementService = inject(AXPMenuManagementService);\n this.layoutBuilder = inject(AXPLayoutBuilderService);\n this.dialogService = inject(AXDialogService);\n this.toastService = inject(AXToastService);\n this.translationService = inject(AXTranslationService);\n this.route = inject(ActivatedRoute);\n //#endregion\n //#region ---- Component State ----\n this.tree = viewChild(AXTree2Component, ...(ngDevMode ? [{ debugName: \"tree\" }] : []));\n this.treeNodes = signal([], ...(ngDevMode ? [{ debugName: \"treeNodes\" }] : []));\n this.isLoading = signal(false, ...(ngDevMode ? [{ debugName: \"isLoading\" }] : []));\n this.error = signal('', ...(ngDevMode ? [{ debugName: \"error\" }] : []));\n this.currentScope = signal(AXPPlatformScope.User, ...(ngDevMode ? [{ debugName: \"currentScope\" }] : []));\n this.isSyncing = false; // Prevent concurrent sync operations\n this.destroy$ = new Subject(); // For subscription cleanup\n }\n //#endregion\n //#region ---- Lifecycle ----\n async ngOnInit() {\n await super.ngOnInit();\n // Get scope from route (with memory leak prevention)\n this.route.params.pipe(takeUntil(this.destroy$)).subscribe(async (params) => {\n const scope = params['scope'];\n if (scope) {\n this.currentScope.set(scope);\n await this.loadMenuItems();\n this.recompute(); // Update page header after loading\n }\n });\n }\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n //#endregion\n //#region ---- Event Handlers ----\n /**\n * Handle before drop validation\n */\n async handleBeforeDrop(e) {\n const targetParent = e.currentParent?.data;\n // Prevent dropping into items with paths (leaf nodes)\n if (targetParent?.menuItem?.path) {\n e.canceled = true;\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.move');\n this.toastService.warning(message);\n return;\n }\n // Note: Circular reference validation is handled by the tree component itself\n // Additional validation can be added here if needed based on business rules\n }\n /**\n * Handle after drop event to sync changes\n */\n async handleAfterDrop() {\n await this.syncTreeChanges();\n }\n //#endregion\n //#region ---- Data Loading ----\n /**\n * Load menu tree for current scope\n */\n async loadMenuItems() {\n try {\n this.isLoading.set(true);\n this.error.set('');\n const treeNodes = await this.menuManagementService.getMenuTree(this.currentScope());\n this.treeNodes.set(treeNodes);\n this.recompute();\n }\n catch (error) {\n this.error.set(error instanceof Error ? error.message : 'Failed to load menu items');\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.load');\n this.toastService.danger(message);\n }\n finally {\n this.isLoading.set(false);\n }\n }\n /**\n * Sync tree changes to backend\n */\n async syncTreeChanges() {\n // Prevent concurrent sync operations\n if (this.isSyncing) {\n return;\n }\n try {\n this.isSyncing = true;\n const nodes = this.treeNodes();\n const scope = this.currentScope();\n if (nodes.length === 0) {\n return;\n }\n await this.menuManagementService.syncTreeChanges(scope, nodes);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.reorder');\n this.toastService.success(message);\n }\n catch (error) {\n console.error('Failed to sync tree changes:', error);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.sync');\n this.toastService.danger(message);\n }\n finally {\n this.isSyncing = false;\n }\n }\n //#endregion\n //#region ---- Page Layout Interface ----\n /**\n * Get page title\n */\n async getPageTitle() {\n const scopeName = this.currentScope();\n const scopeKey = scopeName === AXPPlatformScope.User ? 'user' : 'tenant';\n return this.translationService.translateAsync(`@platform-management:menu-management.menus.${scopeKey}.title`);\n }\n /**\n * Get page description\n */\n async getPageDescription() {\n return this.translationService.translateAsync('@platform-management:menu-management.components.menu-list.description');\n }\n /**\n * Get primary menu items (actions)\n */\n async getPrimaryMenuItems() {\n return [\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.add-root.title'),\n icon: 'fa-light fa-plus',\n color: 'primary',\n command: { name: 'add-root' },\n },\n ];\n }\n /**\n * Get secondary menu items\n */\n async getSecondaryMenuItems() {\n return [\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.collapse.title'),\n icon: 'fa-light fa-minus-square',\n command: { name: 'collapse' },\n },\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.expand.title'),\n icon: 'fa-light fa-plus-square',\n command: { name: 'expand' },\n break: true,\n },\n {\n title: await this.translationService.translateAsync('@platform-management:menu-management.actions.reset.title'),\n icon: 'fa-light fa-rotate-left',\n color: 'danger',\n command: { name: 'reset' },\n },\n ];\n }\n /**\n * Execute commands from page actions\n */\n async execute(command) {\n switch (command.name) {\n case 'add-root':\n await this.addRootMenuItem();\n break;\n case 'collapse':\n this.tree()?.collapseAll();\n break;\n case 'expand':\n this.tree()?.expandAll();\n break;\n case 'reset':\n await this.resetCustomizations();\n break;\n }\n }\n //#endregion\n //#region ---- Action Handlers ----\n /**\n * Handle menu item action\n */\n async onAction(action, nodeData) {\n switch (action) {\n case 'show':\n await this.showMenuItem(nodeData);\n break;\n case 'hide':\n await this.hideMenuItem(nodeData);\n break;\n case 'edit':\n await this.editMenuItem(nodeData);\n break;\n case 'delete':\n await this.deleteMenuItem(nodeData);\n break;\n case 'add-child':\n await this.addChildMenuItem(nodeData);\n break;\n }\n }\n /**\n * Add new root menu item\n */\n async addRootMenuItem() {\n await this.showMenuItemDialog(null, null);\n }\n /**\n * Add new child menu item\n */\n async addChildMenuItem(parentNodeData) {\n await this.showMenuItemDialog(null, parentNodeData.menuItem.name);\n }\n /**\n * Reset customizations\n */\n async resetCustomizations() {\n const title = await this.translationService.translateAsync('@platform-management:menu-management.actions.reset.confirm.title');\n const message = await this.translationService.translateAsync('@platform-management:menu-management.actions.reset.confirm.message');\n const confirmed = await this.dialogService.confirm(title, message);\n if (!confirmed)\n return;\n try {\n // Reset customizations for current scope\n await this.menuManagementService.resetCustomizations(this.currentScope());\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.reset');\n this.toastService.success(message);\n }\n catch (error) {\n console.error('Failed to reset customizations:', error);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.reset');\n this.toastService.danger(message);\n }\n finally {\n // Reload anyway to show current state\n await this.loadMenuItems();\n }\n }\n //#endregion\n //#region ---- Menu Item Actions ----\n /**\n * Show menu item\n */\n async showMenuItem(nodeData) {\n await this.executeMenuAction(() => this.menuManagementService.showMenuItem(this.currentScope(), nodeData.menuItem.name), '@platform-management:menu-management.messages.success.show', '@platform-management:menu-management.messages.error.show');\n }\n /**\n * Hide menu item\n */\n async hideMenuItem(nodeData) {\n await this.executeMenuAction(() => this.menuManagementService.hideMenuItem(this.currentScope(), nodeData.menuItem.name), '@platform-management:menu-management.messages.success.hide', '@platform-management:menu-management.messages.error.hide');\n }\n /**\n * Edit menu item\n */\n async editMenuItem(nodeData) {\n await this.showMenuItemDialog(nodeData);\n }\n /**\n * Delete custom menu item\n */\n async deleteMenuItem(nodeData) {\n const title = await this.translationService.translateAsync('@general:actions.delete.title');\n const message = await this.translationService.translateAsync('@platform-management:menu-management.actions.delete.confirm.message');\n const confirmed = await this.dialogService.confirm(title, message);\n if (!confirmed)\n return;\n try {\n const item = nodeData.menuItem;\n if (!item.name)\n return;\n await this.menuManagementService.deleteCustomMenuItem(this.currentScope(), item.name);\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.delete');\n this.toastService.success(message);\n await this.loadMenuItems();\n }\n catch (error) {\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.delete');\n this.toastService.danger(message);\n }\n }\n //#endregion\n //#region ---- Dialog Helpers ----\n /**\n * Show menu item dialog (add/edit)\n */\n async showMenuItemDialog(nodeData, parentName = null) {\n const item = nodeData?.menuItem;\n const isEdit = !!item;\n const title = isEdit\n ? '@platform-management:menu-management.components.edit-dialog.title'\n : '@platform-management:menu-management.components.add-dialog.title';\n const context = {\n name: item?.name || '',\n text: item?.text || '',\n type: item?.type || 'menu',\n icon: item?.icon || '',\n path: item?.path || '',\n priority: item?.priority || 0,\n description: item?.description || '',\n };\n const dialogRef = await this.layoutBuilder\n .create()\n .dialog((dialog) => {\n dialog\n .setTitle(title)\n .setContext(context)\n .content((flex) => {\n flex\n .setDirection('column')\n .formField('@platform-management:menu-management.fields.name', (field) => {\n field.path('name');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.name',\n validations: [{ rule: 'required' }],\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@platform-management:menu-management.fields.text', (field) => {\n field.path('text');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.text',\n validations: [{ rule: 'required' }],\n });\n })\n .formField('@platform-management:menu-management.fields.icon', (field) => {\n field.path('icon');\n field.customWidget('icon-chooser', {});\n })\n .formField('@platform-management:menu-management.fields.path', (field) => {\n field.path('path');\n field.textBox({\n placeholder: '@platform-management:menu-management.fields.path',\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@platform-management:menu-management.fields.priority', (field) => {\n field.path('priority');\n field.numberBox({\n placeholder: '@platform-management:menu-management.fields.priority',\n step: 10,\n });\n })\n .formField('@platform-management:menu-management.fields.description', (field) => {\n field.path('description');\n field.largeTextBox({\n placeholder: '@platform-management:menu-management.fields.description',\n rows: 3,\n });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n });\n })\n .show();\n const action = dialogRef.action();\n if (action === 'cancel') {\n dialogRef.close();\n return;\n }\n const formData = dialogRef.context();\n try {\n if (isEdit && item?.name) {\n // Update existing item\n if (nodeData?.metadata?.isCustom) {\n await this.menuManagementService.updateCustomMenuItem(this.currentScope(), item.name, formData);\n }\n else {\n await this.menuManagementService.updateMenuProperties(this.currentScope(), item.name, formData);\n }\n }\n else {\n // Add new custom item\n const newItem = {\n name: formData.name,\n text: formData.text,\n icon: formData.icon,\n path: formData.path,\n priority: formData.priority,\n description: formData.description,\n };\n // If parent is specified, add as child\n if (parentName) {\n // Add custom item as child of parent\n await this.menuManagementService.addCustomMenuItem(this.currentScope(), newItem, parentName);\n }\n else {\n // Add as root level item\n await this.menuManagementService.addCustomMenuItem(this.currentScope(), newItem, null);\n }\n }\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.success.save');\n this.toastService.success(message);\n await this.loadMenuItems();\n dialogRef.close();\n }\n catch (error) {\n const message = await this.translationService.translateAsync('@platform-management:menu-management.messages.error.save');\n this.toastService.danger(message);\n }\n }\n /**\n * Execute a menu action with common error handling\n */\n async executeMenuAction(action, successMessageKey, errorMessageKey) {\n try {\n await action();\n const message = await this.translationService.translateAsync(successMessageKey);\n this.toastService.success(message);\n await this.loadMenuItems();\n }\n catch (error) {\n console.error('Menu action failed:', error);\n const message = await this.translationService.translateAsync(errorMessageKey);\n this.toastService.danger(message);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMenuListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.12\", type: AXMMenuListComponent, isStandalone: true, selector: \"axm-menu-list\", host: { classAttribute: \"axm-menu-list-page\" }, providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMMenuListComponent,\n },\n ], viewQueries: [{ propertyName: \"tree\", first: true, predicate: AXTree2Component, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<axp-page-layout>\\n <axp-page-content>\\n @if (isLoading()) {\\n <!-- Loading State -->\\n <axp-state-message mode=\\\"loading\\\" icon=\\\"fa-light fa-spinner-third fa-spin\\\"\\n [title]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.loading.title' | translate | async)!\\\"\\n [description]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.loading.description' | translate | async)!\\\" />\\n } @else if (error()) {\\n <!-- Error State -->\\n <axp-state-message mode=\\\"error\\\" icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.error.title' | translate | async)!\\\"\\n [description]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.error.description' | translate | async)!\\\">\\n <ax-button slot=\\\"actions\\\" [text]=\\\"'@general:actions.retry.title' | translate | async\\\" [look]=\\\"'outline'\\\"\\n [color]=\\\"'primary'\\\" (onClick)=\\\"loadMenuItems()\\\">\\n <i class=\\\"fa-light fa-rotate-left\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else if (treeNodes().length === 0) {\\n <!-- Empty State -->\\n <axp-state-message mode=\\\"empty\\\" icon=\\\"fa-light fa-bars\\\"\\n [title]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.no-data.title' | translate | async)!\\\"\\n [description]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.no-data.description' | translate | async)!\\\">\\n <ax-button slot=\\\"actions\\\" [text]=\\\"'@platform-management:menu-management.actions.add-root.title' | translate | async\\\"\\n [look]=\\\"'solid'\\\" [color]=\\\"'primary'\\\" (onClick)=\\\"addRootMenuItem()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else {\\n <!-- Menu Tree Content -->\\n <div class=\\\"axm-menu-list__container\\\">\\n <!-- Menu Tree -->\\n <div class=\\\"axm-menu-list__tree\\\">\\n <ax-tree2 [(nodes)]=\\\"treeNodes\\\" look=\\\"default\\\" [itemTemplate]=\\\"itemTemplate\\\" [showCheckbox]=\\\"false\\\"\\n [showIcons]=\\\"false\\\" [showChildrenBadge]=\\\"false\\\" [nodeHeight]=\\\"'normal'\\\" [dragMode]=\\\"'handler'\\\"\\n (onBeforeDrop)=\\\"handleBeforeDrop($event)\\\" (onItemsChange)=\\\"handleAfterDrop()\\\"></ax-tree2>\\n </div>\\n </div>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n\\n<!-- Custom Item Template -->\\n<ng-template #itemTemplate let-node=\\\"node\\\" let-level=\\\"level\\\">\\n @let nodeData = node.data;\\n @let item = nodeData.menuItem;\\n @let metadata = nodeData.metadata;\\n <div class=\\\"axm-menu-tree-item__wrapper\\\" [class.axm-menu-tree-item__wrapper--hidden]=\\\"metadata.isHidden\\\"\\n [class.axm-menu-tree-item__wrapper--custom]=\\\"metadata.isCustom\\\"\\n [class.axm-menu-tree-item__wrapper--group]=\\\"item.type === 'group'\\\">\\n <!-- Icon (hidden for groups) -->\\n @if (item.icon && item.type !== 'group') {\\n <i class=\\\"axm-menu-tree-item__icon\\\" [class]=\\\"item.icon\\\"></i>\\n }\\n\\n <!-- Text or Info -->\\n @if (item.type === 'group') {\\n <!-- Group Heading -->\\n <span class=\\\"axm-menu-tree-item__group\\\">\\n <i class=\\\"fa-light fa-layer-group\\\"></i>\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.type === 'break') {\\n <!-- Divider -->\\n <span class=\\\"axm-menu-tree-item__divider\\\">\\n <i class=\\\"fa-light fa-minus\\\"></i>\\n {{ '@platform-management:menu-management.states.divider' | translate | async }}\\n </span>\\n } @else if (item.text) {\\n <!-- Regular Menu Item -->\\n <span class=\\\"axm-menu-tree-item__text\\\">\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.path) {\\n <!-- Path-only Item -->\\n <span class=\\\"axm-menu-tree-item__path\\\">\\n <i class=\\\"fa-light fa-link\\\"></i>\\n {{ item.path }}\\n </span>\\n }\\n\\n <!-- Menu Name/Key -->\\n @if (item.name) {\\n <code class=\\\"axm-menu-tree-item__name\\\">{{ item.name }}</code>\\n }\\n\\n <!-- Status Badges -->\\n @if (metadata.isHidden) {\\n <ax-badge [text]=\\\"('@platform-management:menu-management.states.hidden' | translate | async)!\\\"\\n color=\\\"danger\\\"></ax-badge>\\n } @else if (metadata.isCustom) {\\n <ax-badge [text]=\\\"('@platform-management:menu-management.states.custom' | translate | async)!\\\"\\n color=\\\"success\\\"></ax-badge>\\n } @else if (metadata.isBuiltIn) {\\n <ax-badge [text]=\\\"('@platform-management:menu-management.states.built-in' | translate | async)!\\\"\\n color=\\\"primary\\\"></ax-badge>\\n }\\n\\n <!-- Actions Dropdown -->\\n <ax-button class=\\\"axm-menu-tree-item__actions\\\" [look]=\\\"'blank'\\\" [size]=\\\"'sm'\\\" [iconOnly]=\\\"true\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-ellipsis-vertical\\\"></i>\\n </ax-prefix>\\n\\n <ax-dropdown-panel #panel>\\n <ax-button-item-list>\\n <!-- Edit (only for items with names) -->\\n @if (item.name) {\\n <ax-button-item [text]=\\\"('@general:actions.edit.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('edit', nodeData); panel.close()\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-edit\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Show/Hide (only for items with names) -->\\n @if (item.name && metadata.isBuiltIn) {\\n @if (metadata.isHidden) {\\n <ax-button-item [text]=\\\"('@platform-management:menu-management.actions.show.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('show', nodeData); panel.close()\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n } @else {\\n <ax-button-item [text]=\\\"('@platform-management:menu-management.actions.hide.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('hide', nodeData); panel.close()\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye-slash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n }\\n\\n @if (!item.path && (item.type === 'menu' || !item.type)) {\\n <!-- Add Child -->\\n <ax-button-item [text]=\\\"('@platform-management:menu-management.actions.add-child.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('add-child', nodeData); panel.close()\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Delete (only for custom items with names) -->\\n @if (item.name && metadata.isCustom) {\\n <ax-divider></ax-divider>\\n <ax-button-item [color]=\\\"'danger'\\\" [text]=\\\"('@general:actions.delete.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('delete', nodeData); panel.close()\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Info message for items without names -->\\n @if (!item.name) {\\n <ax-divider></ax-divider>\\n <div class=\\\"ax-p-2 ax-text-xs ax-text-neutral-500 ax-italic\\\">\\n {{ '@platform-management:menu-management.messages.info.no-name' | translate | async }}\\n </div>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n</ng-template>\", styles: [\".axm-menu-list-page .axm-menu-list__container{display:flex;flex-direction:column;gap:1rem;padding:1.5rem}.axm-menu-list-page .axm-menu-list__tree{display:flex;flex-direction:column;gap:.5rem}.axm-menu-list-page .axm-menu-tree-item__wrapper{display:flex;flex:1 1 0%;align-items:center;gap:1rem;border-radius:.375rem;padding:.5rem;border-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));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.axm-menu-list-page .axm-menu-tree-item__wrapper:hover{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-menu-list-page .axm-menu-tree-item__wrapper--hidden{opacity:.5}.axm-menu-list-page .axm-menu-tree-item__wrapper--custom{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__wrapper--group{padding-top:.75rem;padding-bottom:.75rem}.axm-menu-list-page .axm-menu-tree-item__icon{display:flex;align-items:center;justify-content:center;height:1.5rem;width:1.5rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__text{flex:1 1 0%;font-size:.875rem;line-height:1.25rem;font-weight:500}.axm-menu-list-page .axm-menu-tree-item__group,.axm-menu-list-page .axm-menu-tree-item__divider,.axm-menu-list-page .axm-menu-tree-item__path{display:flex;flex:1 1 0%;align-items:center;gap:.5rem;font-size:.75rem;line-height:1rem;font-style:italic;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__divider i,.axm-menu-list-page .axm-menu-tree-item__path i{--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__name{display:flex;align-items:center;border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1));font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-weight:400;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 229 229 / var(--tw-border-opacity, 1));white-space:nowrap;-webkit-user-select:all;user-select:all}.axm-menu-list-page .axm-menu-tree-item__actions{margin-left:.5rem}\\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: \"component\", type: i1.AXButtonItemComponent, selector: \"ax-button-item\", inputs: [\"color\", \"disabled\", \"text\", \"selected\", \"divided\", \"data\", \"name\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\", \"disabledChange\"] }, { kind: \"component\", type: i1.AXButtonItemListComponent, selector: \"ax-button-item-list\", inputs: [\"items\", \"closeParentOnClick\", \"lockOnLoading\"], outputs: [\"onItemClick\"] }, { 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: AXDropdownButtonModule }, { kind: \"ngmodule\", type: AXDropdownModule }, { kind: \"component\", type: i3.AXDropdownPanelComponent, selector: \"ax-dropdown-panel\", inputs: [\"isOpen\", \"fitParent\", \"dropdownWidth\", \"position\", \"placement\", \"_target\", \"adaptivityEnabled\"], outputs: [\"onOpened\", \"onClosed\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"component\", type: AXTree2Component, selector: \"ax-tree2\", inputs: [\"nodes\", \"showCheckbox\", \"dragMode\", \"dragOperationType\", \"showIcons\", \"showChildrenBadge\", \"expandedIcon\", \"collapsedIcon\", \"indentSize\", \"nodeHeight\", \"look\", \"itemTemplate\", \"lazyLoad\", \"enableLazyLoad\"], outputs: [\"nodesChange\", \"onBeforeDrop\", \"onNodeToggle\", \"onNodeSelect\", \"onOrderChange\", \"onMoveChange\", \"onItemsChange\"] }, { kind: \"component\", type: 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: AXPStateMessageComponent, selector: \"axp-state-message\", inputs: [\"mode\", \"icon\", \"title\", \"description\", \"variant\"] }, { kind: \"ngmodule\", type: AXBadgeModule }, { kind: \"component\", type: i4.AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"pipe\", type: i5.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i6.AXTranslatorPipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.12\", ngImport: i0, type: AXMMenuListComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-menu-list', imports: [\n CommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownButtonModule,\n AXDropdownModule,\n AXTranslationModule,\n AXTree2Component,\n AXPPageLayoutComponent,\n AXPThemeLayoutBlockComponent,\n AXPStateMessageComponent,\n AXBadgeModule,\n ], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [\n {\n provide: AXPPageLayoutBase,\n useExisting: AXMMenuListComponent,\n },\n ], host: { class: 'axm-menu-list-page' }, template: \"<axp-page-layout>\\n <axp-page-content>\\n @if (isLoading()) {\\n <!-- Loading State -->\\n <axp-state-message mode=\\\"loading\\\" icon=\\\"fa-light fa-spinner-third fa-spin\\\"\\n [title]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.loading.title' | translate | async)!\\\"\\n [description]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.loading.description' | translate | async)!\\\" />\\n } @else if (error()) {\\n <!-- Error State -->\\n <axp-state-message mode=\\\"error\\\" icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.error.title' | translate | async)!\\\"\\n [description]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.error.description' | translate | async)!\\\">\\n <ax-button slot=\\\"actions\\\" [text]=\\\"'@general:actions.retry.title' | translate | async\\\" [look]=\\\"'outline'\\\"\\n [color]=\\\"'primary'\\\" (onClick)=\\\"loadMenuItems()\\\">\\n <i class=\\\"fa-light fa-rotate-left\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else if (treeNodes().length === 0) {\\n <!-- Empty State -->\\n <axp-state-message mode=\\\"empty\\\" icon=\\\"fa-light fa-bars\\\"\\n [title]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.no-data.title' | translate | async)!\\\"\\n [description]=\\\"('@platform-management:menu-management.components.menu-list.empty-states.no-data.description' | translate | async)!\\\">\\n <ax-button slot=\\\"actions\\\" [text]=\\\"'@platform-management:menu-management.actions.add-root.title' | translate | async\\\"\\n [look]=\\\"'solid'\\\" [color]=\\\"'primary'\\\" (onClick)=\\\"addRootMenuItem()\\\">\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-button>\\n </axp-state-message>\\n } @else {\\n <!-- Menu Tree Content -->\\n <div class=\\\"axm-menu-list__container\\\">\\n <!-- Menu Tree -->\\n <div class=\\\"axm-menu-list__tree\\\">\\n <ax-tree2 [(nodes)]=\\\"treeNodes\\\" look=\\\"default\\\" [itemTemplate]=\\\"itemTemplate\\\" [showCheckbox]=\\\"false\\\"\\n [showIcons]=\\\"false\\\" [showChildrenBadge]=\\\"false\\\" [nodeHeight]=\\\"'normal'\\\" [dragMode]=\\\"'handler'\\\"\\n (onBeforeDrop)=\\\"handleBeforeDrop($event)\\\" (onItemsChange)=\\\"handleAfterDrop()\\\"></ax-tree2>\\n </div>\\n </div>\\n }\\n </axp-page-content>\\n</axp-page-layout>\\n\\n<!-- Custom Item Template -->\\n<ng-template #itemTemplate let-node=\\\"node\\\" let-level=\\\"level\\\">\\n @let nodeData = node.data;\\n @let item = nodeData.menuItem;\\n @let metadata = nodeData.metadata;\\n <div class=\\\"axm-menu-tree-item__wrapper\\\" [class.axm-menu-tree-item__wrapper--hidden]=\\\"metadata.isHidden\\\"\\n [class.axm-menu-tree-item__wrapper--custom]=\\\"metadata.isCustom\\\"\\n [class.axm-menu-tree-item__wrapper--group]=\\\"item.type === 'group'\\\">\\n <!-- Icon (hidden for groups) -->\\n @if (item.icon && item.type !== 'group') {\\n <i class=\\\"axm-menu-tree-item__icon\\\" [class]=\\\"item.icon\\\"></i>\\n }\\n\\n <!-- Text or Info -->\\n @if (item.type === 'group') {\\n <!-- Group Heading -->\\n <span class=\\\"axm-menu-tree-item__group\\\">\\n <i class=\\\"fa-light fa-layer-group\\\"></i>\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.type === 'break') {\\n <!-- Divider -->\\n <span class=\\\"axm-menu-tree-item__divider\\\">\\n <i class=\\\"fa-light fa-minus\\\"></i>\\n {{ '@platform-management:menu-management.states.divider' | translate | async }}\\n </span>\\n } @else if (item.text) {\\n <!-- Regular Menu Item -->\\n <span class=\\\"axm-menu-tree-item__text\\\">\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.path) {\\n <!-- Path-only Item -->\\n <span class=\\\"axm-menu-tree-item__path\\\">\\n <i class=\\\"fa-light fa-link\\\"></i>\\n {{ item.path }}\\n </span>\\n }\\n\\n <!-- Menu Name/Key -->\\n @if (item.name) {\\n <code class=\\\"axm-menu-tree-item__name\\\">{{ item.name }}</code>\\n }\\n\\n <!-- Status Badges -->\\n @if (metadata.isHidden) {\\n <ax-badge [text]=\\\"('@platform-management:menu-management.states.hidden' | translate | async)!\\\"\\n color=\\\"danger\\\"></ax-badge>\\n } @else if (metadata.isCustom) {\\n <ax-badge [text]=\\\"('@platform-management:menu-management.states.custom' | translate | async)!\\\"\\n color=\\\"success\\\"></ax-badge>\\n } @else if (metadata.isBuiltIn) {\\n <ax-badge [text]=\\\"('@platform-management:menu-management.states.built-in' | translate | async)!\\\"\\n color=\\\"primary\\\"></ax-badge>\\n }\\n\\n <!-- Actions Dropdown -->\\n <ax-button class=\\\"axm-menu-tree-item__actions\\\" [look]=\\\"'blank'\\\" [size]=\\\"'sm'\\\" [iconOnly]=\\\"true\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-ellipsis-vertical\\\"></i>\\n </ax-prefix>\\n\\n <ax-dropdown-panel #panel>\\n <ax-button-item-list>\\n <!-- Edit (only for items with names) -->\\n @if (item.name) {\\n <ax-button-item [text]=\\\"('@general:actions.edit.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('edit', nodeData); panel.close()\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-edit\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Show/Hide (only for items with names) -->\\n @if (item.name && metadata.isBuiltIn) {\\n @if (metadata.isHidden) {\\n <ax-button-item [text]=\\\"('@platform-management:menu-management.actions.show.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('show', nodeData); panel.close()\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n } @else {\\n <ax-button-item [text]=\\\"('@platform-management:menu-management.actions.hide.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('hide', nodeData); panel.close()\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye-slash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n }\\n\\n @if (!item.path && (item.type === 'menu' || !item.type)) {\\n <!-- Add Child -->\\n <ax-button-item [text]=\\\"('@platform-management:menu-management.actions.add-child.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('add-child', nodeData); panel.close()\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-plus\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Delete (only for custom items with names) -->\\n @if (item.name && metadata.isCustom) {\\n <ax-divider></ax-divider>\\n <ax-button-item [color]=\\\"'danger'\\\" [text]=\\\"('@general:actions.delete.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('delete', nodeData); panel.close()\\\">\\n <ax-prefix>\\n <i class=\\\"fa-light fa-trash\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n }\\n\\n <!-- Info message for items without names -->\\n @if (!item.name) {\\n <ax-divider></ax-divider>\\n <div class=\\\"ax-p-2 ax-text-xs ax-text-neutral-500 ax-italic\\\">\\n {{ '@platform-management:menu-management.messages.info.no-name' | translate | async }}\\n </div>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n</ng-template>\", styles: [\".axm-menu-list-page .axm-menu-list__container{display:flex;flex-direction:column;gap:1rem;padding:1.5rem}.axm-menu-list-page .axm-menu-list__tree{display:flex;flex-direction:column;gap:.5rem}.axm-menu-list-page .axm-menu-tree-item__wrapper{display:flex;flex:1 1 0%;align-items:center;gap:1rem;border-radius:.375rem;padding:.5rem;border-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));transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.axm-menu-list-page .axm-menu-tree-item__wrapper:hover{background-color:rgb(var(--ax-sys-color-lighter-surface));color:rgb(var(--ax-sys-color-on-lighter-surface));border-color:rgb(var(--ax-sys-color-border-lighter-surface))}.axm-menu-list-page .axm-menu-tree-item__wrapper--hidden{opacity:.5}.axm-menu-list-page .axm-menu-tree-item__wrapper--custom{--tw-border-opacity: 1;border-color:rgba(var(--ax-sys-color-primary-500),var(--tw-border-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__wrapper--group{padding-top:.75rem;padding-bottom:.75rem}.axm-menu-list-page .axm-menu-tree-item__icon{display:flex;align-items:center;justify-content:center;height:1.5rem;width:1.5rem;--tw-text-opacity: 1;color:rgba(var(--ax-sys-color-primary-500),var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__text{flex:1 1 0%;font-size:.875rem;line-height:1.25rem;font-weight:500}.axm-menu-list-page .axm-menu-tree-item__group,.axm-menu-list-page .axm-menu-tree-item__divider,.axm-menu-list-page .axm-menu-tree-item__path{display:flex;flex:1 1 0%;align-items:center;gap:.5rem;font-size:.75rem;line-height:1rem;font-style:italic;--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__divider i,.axm-menu-list-page .axm-menu-tree-item__path i{--tw-text-opacity: 1;color:rgb(163 163 163 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-tree-item__name{display:flex;align-items:center;border-radius:.25rem;padding:.25rem .5rem;font-size:.75rem;line-height:1rem;--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(64 64 64 / var(--tw-text-opacity, 1));font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-weight:400;border-width:1px;--tw-border-opacity: 1;border-color:rgb(229 229 229 / var(--tw-border-opacity, 1));white-space:nowrap;-webkit-user-select:all;user-select:all}.axm-menu-list-page .axm-menu-tree-item__actions{margin-left:.5rem}\\n\"] }]\n }], propDecorators: { tree: [{ type: i0.ViewChild, args: [i0.forwardRef(() => AXTree2Component), { isSignal: true }] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9wbGF0Zm9ybS1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvbWVudS1tYW5hZ2VtZW50L3BhZ2VzL21lbnUtbGlzdC9tZW51LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL3BsYXRmb3JtLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9tZW51LW1hbmFnZW1lbnQvcGFnZXMvbWVudS1saXN0L21lbnUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFxQyxNQUFNLDBCQUEwQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJGLE9BQU8sRUFBd0MsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUs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SixvQkFBb0I7a0JBM0JoQyxTQUFTOytCQUNFLGVBQWUsV0FDaEI7d0JBQ1AsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsc0JBQXNCO3dCQUN0QixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixzQkFBc0I7d0JBQ3RCLDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3dCQUN4QixhQUFhO3FCQUNkLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsc0JBQXNCO3lCQUNsQztxQkFDRixRQUNLLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFO3NGQWdCVixnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEJhZGdlTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2JhZGdlJztcbmltcG9ydCB7IEFYQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRGlhbG9nU2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kaWFsb2cnO1xuaW1wb3J0IHsgQVhEcm9wZG93bk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bic7XG5pbXBvcnQgeyBBWERyb3Bkb3duQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2Ryb3Bkb3duLWJ1dHRvbic7XG5pbXBvcnQgeyBBWFRvYXN0U2VydmljZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90b2FzdCc7XG5pbXBvcnQgeyBBWFRyZWUyQ29tcG9uZW50LCBBWFRyZWVCZWZvcmVEcm9wRXZlbnQsIEFYVHJlZU5vZGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdHJlZTInO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSwgQVhUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQTWVudUl0ZW0gfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBBY3Rpb25NZW51SXRlbSwgQVhQRXhlY3V0ZUNvbW1hbmQsIEFYUFBsYXRmb3JtU2NvcGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQTGF5b3V0QnVpbGRlclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9idWlsZGVyJztcbmltcG9ydCB7IEFYUFN0YXRlTWVzc2FnZUNvbXBvbmVudCwgQVhQVGhlbWVMYXlvdXRCbG9ja0NvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhQUGFnZUxheW91dEJhc2UsIEFYUFBhZ2VMYXlvdXRCYXNlQ29tcG9uZW50LCBBWFBQYWdlTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvdmlld3MnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGluamVjdCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYUE1lbnVJdGVtQWN0aW9uIH0gZnJvbSAnLi4vLi4vbWVudS1jdXN0b21pemF0aW9uLnR5cGVzJztcbmltcG9ydCB7IEFYUE1lbnVNYW5hZ2VtZW50U2VydmljZSwgQVhQTWVudVRyZWVOb2RlRGF0YSB9IGZyb20gJy4uLy4uL21lbnUtbWFuYWdlbWVudC5zZXJ2aWNlJztcblxuLy8jcmVnaW9uIC0tLS0gICBNZW51IExpc3QgQ29tcG9uZW50ICAgLS0tLVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheG0tbWVudS1saXN0JyxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBBWEJ1dHRvbk1vZHVsZSxcbiAgICBBWERlY29yYXRvck1vZHVsZSxcbiAgICBBWERyb3Bkb3duQnV0dG9uTW9kdWxlLFxuICAgIEFYRHJvcGRvd25Nb2R1bGUsXG4gICAgQVhUcmFuc2xhdGlvbk1vZHVsZSxcbiAgICBBWFRyZWUyQ29tcG9uZW50LFxuICAgIEFYUFBhZ2VMYXlvdXRDb21wb25lbnQsXG4gICAgQVhQVGhlbWVMYXlvdXRCbG9ja0NvbXBvbmVudCxcbiAgICBBWFBTdGF0ZU1lc3NhZ2VDb21wb25lbnQsXG4gICAgQVhCYWRnZU1vZHVsZSxcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUtbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lbnUtbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhQUGFnZUxheW91dEJhc2UsXG4gICAgICB1c2VFeGlzdGluZzogQVhNTWVudUxpc3RDb21wb25lbnQsXG4gICAgfSxcbiAgXSxcbiAgaG9zdDogeyBjbGFzczogJ2F4bS1tZW51LWxpc3QtcGFnZScgfSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNTWVudUxpc3RDb21wb25lbnQgZXh0ZW5kcyBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8jcmVnaW9uIC0tLS0gICBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSBtZW51TWFuYWdlbWVudFNlcnZpY2UgPSBpbmplY3QoQVhQTWVudU1hbmFnZW1lbnRTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBsYXlvdXRCdWlsZGVyID0gaW5qZWN0KEFYUExheW91dEJ1aWxkZXJTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoQVhEaWFsb2dTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHRvYXN0U2VydmljZSA9IGluamVjdChBWFRvYXN0U2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlID0gaW5qZWN0KEFYVHJhbnNsYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBDb21wb25lbnQgU3RhdGUgICAtLS0tXG5cbiAgcHJvdGVjdGVkIHRyZWUgPSB2aWV3Q2hpbGQoQVhUcmVlMkNvbXBvbmVudCk7XG4gIHByb3RlY3RlZCB0cmVlTm9kZXMgPSBzaWduYWw8QVhUcmVlTm9kZVtdPihbXSk7XG4gIHByb3RlY3RlZCBpc0xvYWRpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgZXJyb3IgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByb3RlY3RlZCBjdXJyZW50U2NvcGUgPSBzaWduYWw8QVhQUGxhdGZvcm1TY29wZT4oQVhQUGxhdGZvcm1TY29wZS5Vc2VyKTtcbiAgcHJpdmF0ZSBpc1N5bmNpbmcgPSBmYWxzZTsgLy8gUHJldmVudCBjb25jdXJyZW50IHN5bmMgb3BlcmF0aW9uc1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTsgLy8gRm9yIHN1YnNjcmlwdGlvbiBjbGVhbnVwXG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBMaWZlY3ljbGUgICAtLS0tXG5cbiAgb3ZlcnJpZGUgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc3VwZXIubmdPbkluaXQoKTtcblxuICAgIC8vIEdldCBzY29wZSBmcm9tIHJvdXRlICh3aXRoIG1lbW9yeSBsZWFrIHByZXZlbnRpb24pXG4gICAgdGhpcy5yb3V0ZS5wYXJhbXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhc3luYyAocGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBzY29wZSA9IHBhcmFtc1snc2NvcGUnXSBhcyBBWFBQbGF0Zm9ybVNjb3BlO1xuICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFNjb3BlLnNldChzY29wZSk7XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE1lbnVJdGVtcygpO1xuICAgICAgICB0aGlzLnJlY29tcHV0ZSgpOyAvLyBVcGRhdGUgcGFnZSBoZWFkZXIgYWZ0ZXIgbG9hZGluZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBFdmVudCBIYW5kbGVycyAgIC0tLS1cblxuICAvKipcbiAgICogSGFuZGxlIGJlZm9yZSBkcm9wIHZhbGlkYXRpb25cbiAgICovXG4gIGFzeW5jIGhhbmRsZUJlZm9yZURyb3AoZTogQVhUcmVlQmVmb3JlRHJvcEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGFyZ2V0UGFyZW50ID0gZS5jdXJyZW50UGFyZW50Py5kYXRhIGFzIEFYUE1lbnVUcmVlTm9kZURhdGE7XG5cbiAgICAvLyBQcmV2ZW50IGRyb3BwaW5nIGludG8gaXRlbXMgd2l0aCBwYXRocyAobGVhZiBub2RlcylcbiAgICBpZiAodGFyZ2V0UGFyZW50Py5tZW51SXRlbT8ucGF0aCkge1xuICAgICAgZS5jYW5jZWxlZCA9IHRydWU7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5tb3ZlJyk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS53YXJuaW5nKG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IENpcmN1bGFyIHJlZmVyZW5jZSB2YWxpZGF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIHRyZWUgY29tcG9uZW50IGl0c2VsZlxuICAgIC8vIEFkZGl0aW9uYWwgdmFsaWRhdGlvbiBjYW4gYmUgYWRkZWQgaGVyZSBpZiBuZWVkZWQgYmFzZWQgb24gYnVzaW5lc3MgcnVsZXNcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYWZ0ZXIgZHJvcCBldmVudCB0byBzeW5jIGNoYW5nZXNcbiAgICovXG4gIGFzeW5jIGhhbmRsZUFmdGVyRHJvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnN5bmNUcmVlQ2hhbmdlcygpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBEYXRhIExvYWRpbmcgICAtLS0tXG5cbiAgLyoqXG4gICAqIExvYWQgbWVudSB0cmVlIGZvciBjdXJyZW50IHNjb3BlXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZE1lbnVJdGVtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5lcnJvci5zZXQoJycpO1xuXG4gICAgICBjb25zdCB0cmVlTm9kZXMgPSBhd2FpdCB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5nZXRNZW51VHJlZSh0aGlzLmN1cnJlbnRTY29wZSgpKTtcbiAgICAgIHRoaXMudHJlZU5vZGVzLnNldCh0cmVlTm9kZXMpO1xuICAgICAgdGhpcy5yZWNvbXB1dGUoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5lcnJvci5zZXQoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnRmFpbGVkIHRvIGxvYWQgbWVudSBpdGVtcycpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuZXJyb3IubG9hZCcpO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKG1lc3NhZ2UpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jIHRyZWUgY2hhbmdlcyB0byBiYWNrZW5kXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHN5bmNUcmVlQ2hhbmdlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBQcmV2ZW50IGNvbmN1cnJlbnQgc3luYyBvcGVyYXRpb25zXG4gICAgaWYgKHRoaXMuaXNTeW5jaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNTeW5jaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IG5vZGVzID0gdGhpcy50cmVlTm9kZXMoKTtcbiAgICAgIGNvbnN0IHNjb3BlID0gdGhpcy5jdXJyZW50U2NvcGUoKTtcblxuICAgICAgaWYgKG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMubWVudU1hbmFnZW1lbnRTZXJ2aWNlLnN5bmNUcmVlQ2hhbmdlcyhzY29wZSwgbm9kZXMpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuc3VjY2Vzcy5yZW9yZGVyJyk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zdWNjZXNzKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gc3luYyB0cmVlIGNoYW5nZXM6JywgZXJyb3IpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuZXJyb3Iuc3luYycpO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKG1lc3NhZ2UpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzU3luY2luZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUGFnZSBMYXlvdXQgSW50ZXJmYWNlICAgLS0tLVxuXG4gIC8qKlxuICAgKiBHZXQgcGFnZSB0aXRsZVxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZVRpdGxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgc2NvcGVOYW1lID0gdGhpcy5jdXJyZW50U2NvcGUoKTtcbiAgICBjb25zdCBzY29wZUtleSA9IHNjb3BlTmFtZSA9PT0gQVhQUGxhdGZvcm1TY29wZS5Vc2VyID8gJ3VzZXInIDogJ3RlbmFudCc7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGBAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVudXMuJHtzY29wZUtleX0udGl0bGVgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGFnZSBkZXNjcmlwdGlvblxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UGFnZURlc2NyaXB0aW9uKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuY29tcG9uZW50cy5tZW51LWxpc3QuZGVzY3JpcHRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcHJpbWFyeSBtZW51IGl0ZW1zIChhY3Rpb25zKVxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0UHJpbWFyeU1lbnVJdGVtcygpOiBQcm9taXNlPEFYUEFjdGlvbk1lbnVJdGVtW10+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5hY3Rpb25zLmFkZC1yb290LnRpdGxlJyksXG4gICAgICAgIGljb246ICdmYS1saWdodCBmYS1wbHVzJyxcbiAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgY29tbWFuZDogeyBuYW1lOiAnYWRkLXJvb3QnIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlY29uZGFyeSBtZW51IGl0ZW1zXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBnZXRTZWNvbmRhcnlNZW51SXRlbXMoKTogUHJvbWlzZTxBWFBBY3Rpb25NZW51SXRlbVtdPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5jb2xsYXBzZS50aXRsZScpLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtbWludXMtc3F1YXJlJyxcbiAgICAgICAgY29tbWFuZDogeyBuYW1lOiAnY29sbGFwc2UnIH0sXG4gICAgICB9LFxuXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuZXhwYW5kLnRpdGxlJyksXG4gICAgICAgIGljb246ICdmYS1saWdodCBmYS1wbHVzLXNxdWFyZScsXG4gICAgICAgIGNvbW1hbmQ6IHsgbmFtZTogJ2V4cGFuZCcgfSxcbiAgICAgICAgYnJlYWs6IHRydWUsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5hY3Rpb25zLnJlc2V0LnRpdGxlJyksXG4gICAgICAgIGljb246ICdmYS1saWdodCBmYS1yb3RhdGUtbGVmdCcsXG4gICAgICAgIGNvbG9yOiAnZGFuZ2VyJyxcbiAgICAgICAgY29tbWFuZDogeyBuYW1lOiAncmVzZXQnIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBjb21tYW5kcyBmcm9tIHBhZ2UgYWN0aW9uc1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZShjb21tYW5kOiBBWFBFeGVjdXRlQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAoY29tbWFuZC5uYW1lKSB7XG4gICAgICBjYXNlICdhZGQtcm9vdCc6XG4gICAgICAgIGF3YWl0IHRoaXMuYWRkUm9vdE1lbnVJdGVtKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29sbGFwc2UnOlxuICAgICAgICB0aGlzLnRyZWUoKT8uY29sbGFwc2VBbGwoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdleHBhbmQnOlxuICAgICAgICB0aGlzLnRyZWUoKT8uZXhwYW5kQWxsKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVzZXQnOlxuICAgICAgICBhd2FpdCB0aGlzLnJlc2V0Q3VzdG9taXphdGlvbnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBBY3Rpb24gSGFuZGxlcnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBtZW51IGl0ZW0gYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25BY3Rpb24oYWN0aW9uOiBBWFBNZW51SXRlbUFjdGlvbiwgbm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgIGF3YWl0IHRoaXMuc2hvd01lbnVJdGVtKG5vZGVEYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoaWRlJzpcbiAgICAgICAgYXdhaXQgdGhpcy5oaWRlTWVudUl0ZW0obm9kZURhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICBhd2FpdCB0aGlzLmVkaXRNZW51SXRlbShub2RlRGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVNZW51SXRlbShub2RlRGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWRkLWNoaWxkJzpcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRDaGlsZE1lbnVJdGVtKG5vZGVEYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgcm9vdCBtZW51IGl0ZW1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBhZGRSb290TWVudUl0ZW0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zaG93TWVudUl0ZW1EaWFsb2cobnVsbCwgbnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG5ldyBjaGlsZCBtZW51IGl0ZW1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBhZGRDaGlsZE1lbnVJdGVtKHBhcmVudE5vZGVEYXRhOiBBWFBNZW51VHJlZU5vZGVEYXRhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zaG93TWVudUl0ZW1EaWFsb2cobnVsbCwgcGFyZW50Tm9kZURhdGEubWVudUl0ZW0ubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgY3VzdG9taXphdGlvbnNcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyByZXNldEN1c3RvbWl6YXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5hY3Rpb25zLnJlc2V0LmNvbmZpcm0udGl0bGUnKTtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5hY3Rpb25zLnJlc2V0LmNvbmZpcm0ubWVzc2FnZScpO1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKHRpdGxlLCBtZXNzYWdlKTtcblxuICAgIGlmICghY29uZmlybWVkKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmVzZXQgY3VzdG9taXphdGlvbnMgZm9yIGN1cnJlbnQgc2NvcGVcbiAgICAgIGF3YWl0IHRoaXMubWVudU1hbmFnZW1lbnRTZXJ2aWNlLnJlc2V0Q3VzdG9taXphdGlvbnModGhpcy5jdXJyZW50U2NvcGUoKSk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5zdWNjZXNzLnJlc2V0Jyk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zdWNjZXNzKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gcmVzZXQgY3VzdG9taXphdGlvbnM6JywgZXJyb3IpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuZXJyb3IucmVzZXQnKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcihtZXNzYWdlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gUmVsb2FkIGFueXdheSB0byBzaG93IGN1cnJlbnQgc3RhdGVcbiAgICAgIGF3YWl0IHRoaXMubG9hZE1lbnVJdGVtcygpO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgTWVudSBJdGVtIEFjdGlvbnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIFNob3cgbWVudSBpdGVtXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNob3dNZW51SXRlbShub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZU1lbnVBY3Rpb24oXG4gICAgICAoKSA9PiB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5zaG93TWVudUl0ZW0odGhpcy5jdXJyZW50U2NvcGUoKSwgbm9kZURhdGEubWVudUl0ZW0ubmFtZSEpLFxuICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5zdWNjZXNzLnNob3cnLFxuICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5zaG93JyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgbWVudSBpdGVtXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhpZGVNZW51SXRlbShub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZU1lbnVBY3Rpb24oXG4gICAgICAoKSA9PiB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5oaWRlTWVudUl0ZW0odGhpcy5jdXJyZW50U2NvcGUoKSwgbm9kZURhdGEubWVudUl0ZW0ubmFtZSEpLFxuICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5zdWNjZXNzLmhpZGUnLFxuICAgICAgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5lcnJvci5oaWRlJyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVkaXQgbWVudSBpdGVtXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGVkaXRNZW51SXRlbShub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2hvd01lbnVJdGVtRGlhbG9nKG5vZGVEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgY3VzdG9tIG1lbnUgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGVNZW51SXRlbShub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BnZW5lcmFsOmFjdGlvbnMuZGVsZXRlLnRpdGxlJyk7XG4gICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5kZWxldGUuY29uZmlybS5tZXNzYWdlJyk7XG4gICAgY29uc3QgY29uZmlybWVkID0gYXdhaXQgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGl0bGUsIG1lc3NhZ2UpO1xuXG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpdGVtID0gbm9kZURhdGEubWVudUl0ZW07XG4gICAgICBpZiAoIWl0ZW0ubmFtZSkgcmV0dXJuO1xuXG4gICAgICBhd2FpdCB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5kZWxldGVDdXN0b21NZW51SXRlbSh0aGlzLmN1cnJlbnRTY29wZSgpLCBpdGVtLm5hbWUpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuc3VjY2Vzcy5kZWxldGUnKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MobWVzc2FnZSk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRNZW51SXRlbXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuZXJyb3IuZGVsZXRlJyk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBEaWFsb2cgSGVscGVycyAgIC0tLS1cblxuICAvKipcbiAgICogU2hvdyBtZW51IGl0ZW0gZGlhbG9nIChhZGQvZWRpdClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2hvd01lbnVJdGVtRGlhbG9nKFxuICAgIG5vZGVEYXRhOiBBWFBNZW51VHJlZU5vZGVEYXRhIHwgbnVsbCxcbiAgICBwYXJlbnROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXRlbSA9IG5vZGVEYXRhPy5tZW51SXRlbTtcbiAgICBjb25zdCBpc0VkaXQgPSAhIWl0ZW07XG4gICAgY29uc3QgdGl0bGUgPSBpc0VkaXRcbiAgICAgID8gJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5jb21wb25lbnRzLmVkaXQtZGlhbG9nLnRpdGxlJ1xuICAgICAgOiAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmNvbXBvbmVudHMuYWRkLWRpYWxvZy50aXRsZSc7XG5cbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgbmFtZTogaXRlbT8ubmFtZSB8fCAnJyxcbiAgICAgIHRleHQ6IGl0ZW0/LnRleHQgfHwgJycsXG4gICAgICB0eXBlOiBpdGVtPy50eXBlIHx8ICdtZW51JyxcbiAgICAgIGljb246IGl0ZW0/Lmljb24gfHwgJycsXG4gICAgICBwYXRoOiBpdGVtPy5wYXRoIHx8ICcnLFxuICAgICAgcHJpb3JpdHk6IGl0ZW0/LnByaW9yaXR5IHx8IDAsXG4gICAgICBkZXNjcmlwdGlvbjogaXRlbT8uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgfTtcblxuICAgIGNvbnN0IGRpYWxvZ1JlZjogYW55ID0gYXdhaXQgdGhpcy5sYXlvdXRCdWlsZGVyXG4gICAgICAuY3JlYXRlKClcbiAgICAgIC5kaWFsb2coKGRpYWxvZzogYW55KSA9PiB7XG4gICAgICAgIGRpYWxvZ1xuICAgICAgICAgIC5zZXRUaXRsZSh0aXRsZSlcbiAgICAgICAgICAuc2V0Q29udGV4dChjb250ZXh0KVxuICAgICAgICAgIC5jb250ZW50KChmbGV4OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy5uYW1lJywgKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCduYW1lJyk7XG4gICAgICAgICAgICAgICAgZmllbGQudGV4dEJveCh7XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMubmFtZScsXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uczogW3sgcnVsZTogJ3JlcXVpcmVkJyB9XSxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpc0VkaXQgJiYgbm9kZURhdGE/Lm1ldGFkYXRhPy5pc0J1aWx0SW4sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMudGV4dCcsIChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQucGF0aCgndGV4dCcpO1xuICAgICAgICAgICAgICAgIGZpZWxkLnRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLnRleHQnLFxuICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbnM6IFt7IHJ1bGU6ICdyZXF1aXJlZCcgfV0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMuaWNvbicsIChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQucGF0aCgnaWNvbicpO1xuICAgICAgICAgICAgICAgIGZpZWxkLmN1c3RvbVdpZGdldCgnaWNvbi1jaG9vc2VyJywge30pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLnBhdGgnLCAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ3BhdGgnKTtcbiAgICAgICAgICAgICAgICBmaWVsZC50ZXh0Qm94KHtcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy5wYXRoJyxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpc0VkaXQgJiYgbm9kZURhdGE/Lm1ldGFkYXRhPy5pc0J1aWx0SW4sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMucHJpb3JpdHknLCAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ3ByaW9yaXR5Jyk7XG4gICAgICAgICAgICAgICAgZmllbGQubnVtYmVyQm94KHtcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy5wcmlvcml0eScsXG4gICAgICAgICAgICAgICAgICBzdGVwOiAxMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy5kZXNjcmlwdGlvbicsIChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQucGF0aCgnZGVzY3JpcHRpb24nKTtcbiAgICAgICAgICAgICAgICBmaWVsZC5sYXJnZVRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLmRlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgICAgICAgIHJvd3M6IDMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnNldEFjdGlvbnMoKGFjdGlvbnM6IGFueSkgPT4ge1xuICAgICAgICAgICAgYWN0aW9ucy5jYW5jZWwoJ0BnZW5lcmFsOmFjdGlvbnMuY2FuY2VsLnRpdGxlJykuc3VibWl0KCdAZ2VuZXJhbDphY3Rpb25zLnNhdmUudGl0bGUnKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAuc2hvdygpO1xuXG4gICAgY29uc3QgYWN0aW9uID0gZGlhbG9nUmVmLmFjdGlvbigpO1xuICAgIGlmIChhY3Rpb24gPT09ICdjYW5jZWwnKSB7XG4gICAgICBkaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtRGF0YSA9IGRpYWxvZ1JlZi5jb250ZXh0KCkgYXMgUGFydGlhbDxBWFBNZW51SXRlbT47XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGlzRWRpdCAmJiBpdGVtPy5uYW1lKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBpdGVtXG4gICAgICAgIGlmIChub2RlRGF0YT8ubWV0YWRhdGE/LmlzQ3VzdG9tKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UudXBkYXRlQ3VzdG9tTWVudUl0ZW0oXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTY29wZSgpLFxuICAgICAgICAgICAgaXRlbS5uYW1lLFxuICAgICAgICAgICAgZm9ybURhdGEgYXMgQVhQTWVudUl0ZW0sXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS51cGRhdGVNZW51UHJvcGVydGllcyh0aGlzLmN1cnJlbnRTY29wZSgpLCBpdGVtLm5hbWUsIGZvcm1EYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWRkIG5ldyBjdXN0b20gaXRlbVxuICAgICAgICBjb25zdCBuZXdJdGVtOiBBWFBNZW51SXRlbSA9IHtcbiAgICAgICAgICBuYW1lOiBmb3JtRGF0YS5uYW1lISxcbiAgICAgICAgICB0ZXh0OiBmb3JtRGF0YS50ZXh0ISxcbiAgICAgICAgICBpY29uOiBmb3JtRGF0YS5pY29uLFxuICAgICAgICAgIHBhdGg6IGZvcm1EYXRhLnBhdGgsXG4gICAgICAgICAgcHJpb3JpdHk6IGZvcm1EYXRhLnByaW9yaXR5LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3JtRGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJZiBwYXJlbnQgaXMgc3BlY2lmaWVkLCBhZGQgYXMgY2hpbGRcbiAgICAgICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgICAgICAvLyBBZGQgY3VzdG9tIGl0ZW0gYXMgY2hpbGQgb2YgcGFyZW50XG4gICAgICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UuYWRkQ3VzdG9tTWVudUl0ZW0odGhpcy5jdXJyZW50U2NvcGUoKSwgbmV3SXRlbSwgcGFyZW50TmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQWRkIGFzIHJvb3QgbGV2ZWwgaXRlbVxuICAgICAgICAgIGF3YWl0IHRoaXMubWVudU1hbmFnZW1lbnRTZXJ2aWNlLmFkZEN1c3RvbU1lbnVJdGVtKHRoaXMuY3VycmVudFNjb3BlKCksIG5ld0l0ZW0sIG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLnN1Y2Nlc3Muc2F2ZScpO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcyhtZXNzYWdlKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZE1lbnVJdGVtcygpO1xuICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLmVycm9yLnNhdmUnKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcihtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBhIG1lbnUgYWN0aW9uIHdpdGggY29tbW9uIGVycm9yIGhhbmRsaW5nXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVNZW51QWN0aW9uKFxuICAgIGFjdGlvbjogKCkgPT4gUHJvbWlzZTx2b2lkPixcbiAgICBzdWNjZXNzTWVzc2FnZUtleTogc3RyaW5nLFxuICAgIGVycm9yTWVzc2FnZUtleTogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYWN0aW9uKCk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoc3VjY2Vzc01lc3NhZ2VLZXkpO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcyhtZXNzYWdlKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZE1lbnVJdGVtcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdNZW51IGFjdGlvbiBmYWlsZWQ6JywgZXJyb3IpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKGVycm9yTWVzc2FnZUtleSk7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG5cbi8vI2VuZHJlZ2lvblxuXG4iLCI8YXhwLXBhZ2UtbGF5b3V0PlxuICA8YXhwLXBhZ2UtY29udGVudD5cbiAgICBAaWYgKGlzTG9hZGluZygpKSB7XG4gICAgPCEtLSBMb2FkaW5nIFN0YXRlIC0tPlxuICAgIDxheHAtc3RhdGUtbWVzc2FnZSBtb2RlPVwibG9hZGluZ1wiIGljb249XCJmYS1saWdodCBmYS1zcGlubmVyLXRoaXJkIGZhLXNwaW5cIlxuICAgICAgW3RpdGxlXT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmNvbXBvbmVudHMubWVudS1saXN0LmVtcHR5LXN0YXRlcy5sb2FkaW5nLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmNvbXBvbmVudHMubWVudS1saXN0LmVtcHR5LXN0YXRlcy5sb2FkaW5nLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIiAvPlxuICAgIH0gQGVsc2UgaWYgKGVycm9yKCkpIHtcbiAgICA8IS0tIEVycm9yIFN0YXRlIC0tPlxuICAgIDxheHAtc3RhdGUtbWVzc2FnZSBtb2RlPVwiZXJyb3JcIiBpY29uPVwiZmEtbGlnaHQgZmEtY2lyY2xlLWV4Y2xhbWF0aW9uXCJcbiAgICAgIFt0aXRsZV09XCIoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5jb21wb25lbnRzLm1lbnUtbGlzdC5lbXB0eS1zdGF0ZXMuZXJyb3IudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuY29tcG9uZW50cy5tZW51LWxpc3QuZW1wdHktc3RhdGVzLmVycm9yLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIj5cbiAgICAgIDxheC1idXR0b24gc2xvdD1cImFjdGlvbnNcIiBbdGV4dF09XCInQGdlbmVyYWw6YWN0aW9ucy5yZXRyeS50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luY1wiIFtsb29rXT1cIidvdXRsaW5lJ1wiXG4gICAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIiAob25DbGljayk9XCJsb2FkTWVudUl0ZW1zKClcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1yb3RhdGUtbGVmdFwiPjwvaT5cbiAgICAgIDwvYXgtYnV0dG9uPlxuICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgfSBAZWxzZSBpZiAodHJlZU5vZGVzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgPCEtLSBFbXB0eSBTdGF0ZSAtLT5cbiAgICA8YXhwLXN0YXRlLW1lc3NhZ2UgbW9kZT1cImVtcHR5XCIgaWNvbj1cImZhLWxpZ2h0IGZhLWJhcnNcIlxuICAgICAgW3RpdGxlXT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmNvbXBvbmVudHMubWVudS1saXN0LmVtcHR5LXN0YXRlcy5uby1kYXRhLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmNvbXBvbmVudHMubWVudS1saXN0LmVtcHR5LXN0YXRlcy5uby1kYXRhLmRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIj5cbiAgICAgIDxheC1idXR0b24gc2xvdD1cImFjdGlvbnNcIiBbdGV4dF09XCInQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuYWRkLXJvb3QudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICBbbG9va109XCInc29saWQnXCIgW2NvbG9yXT1cIidwcmltYXJ5J1wiIChvbkNsaWNrKT1cImFkZFJvb3RNZW51SXRlbSgpXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtcGx1c1wiPjwvaT5cbiAgICAgIDwvYXgtYnV0dG9uPlxuICAgIDwvYXhwLXN0YXRlLW1lc3NhZ2U+XG4gICAgfSBAZWxzZSB7XG4gICAgPCEtLSBNZW51IFRyZWUgQ29udGVudCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYXhtLW1lbnUtbGlzdF9fY29udGFpbmVyXCI+XG4gICAgICA8IS0tIE1lbnUgVHJlZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJheG0tbWVudS1saXN0X190cmVlXCI+XG4gICAgICAgIDxheC10cmVlMiBbKG5vZGVzKV09XCJ0cmVlTm9kZXNcIiBsb29rPVwiZGVmYXVsdFwiIFtpdGVtVGVtcGxhdGVdPVwiaXRlbVRlbXBsYXRlXCIgW3Nob3dDaGVja2JveF09XCJmYWxzZVwiXG4gICAgICAgICAgW3Nob3dJY29uc109XCJmYWxzZVwiIFtzaG93Q2hpbGRyZW5CYWRnZV09XCJmYWxzZVwiIFtub2RlSGVpZ2h0XT1cIidub3JtYWwnXCIgW2RyYWdNb2RlXT1cIidoYW5kbGVyJ1wiXG4gICAgICAgICAgKG9uQmVmb3JlRHJvcCk9XCJoYW5kbGVCZWZvcmVEcm9wKCRldmVudClcIiAob25JdGVtc0NoYW5nZSk9XCJoYW5kbGVBZnRlckRyb3AoKVwiPjwvYXgtdHJlZTI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICB9XG4gIDwvYXhwLXBhZ2UtY29udGVudD5cbjwvYXhwLXBhZ2UtbGF5b3V0PlxuXG48IS0tIEN1c3RvbSBJdGVtIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNpdGVtVGVtcGxhdGUgbGV0LW5vZGU9XCJub2RlXCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgQGxldCBub2RlRGF0YSA9IG5vZGUuZGF0YTtcbiAgQGxldCBpdGVtID0gbm9kZURhdGEubWVudUl0ZW07XG4gIEBsZXQgbWV0YWRhdGEgPSBub2RlRGF0YS5tZXRhZGF0YTtcbiAgPGRpdiBjbGFzcz1cImF4bS1tZW51LXRyZWUtaXRlbV9fd3JhcHBlclwiIFtjbGFzcy5heG0tbWVudS10cmVlLWl0ZW1fX3dyYXBwZXItLWhpZGRlbl09XCJtZXRhZGF0YS5pc0hpZGRlblwiXG4gICAgW2NsYXNzLmF4bS1tZW51LXRyZWUtaXRlbV9fd3JhcHBlci0tY3VzdG9tXT1cIm1ldGFkYXRhLmlzQ3VzdG9tXCJcbiAgICBbY2xhc3MuYXhtLW1lbnUtdHJlZS1pdGVtX193cmFwcGVyLS1ncm91cF09XCJpdGVtLnR5cGUgPT09ICdncm91cCdcIj5cbiAgICA8IS0tIEljb24gKGhpZGRlbiBmb3IgZ3JvdXBzKSAtLT5cbiAgICBAaWYgKGl0ZW0uaWNvbiAmJiBpdGVtLnR5cGUgIT09ICdncm91cCcpIHtcbiAgICA8aSBjbGFzcz1cImF4bS1tZW51LXRyZWUtaXRlbV9faWNvblwiIFtjbGFzc109XCJpdGVtLmljb25cIj48L2k+XG4gICAgfVxuXG4gICAgPCEtLSBUZXh0IG9yIEluZm8gLS0+XG4gICAgQGlmIChpdGVtLnR5cGUgPT09ICdncm91cCcpIHtcbiAgICA8IS0tIEdyb3VwIEhlYWRpbmcgLS0+XG4gICAgPHNwYW4gY2xhc3M9XCJheG0tbWVudS10cmVlLWl0ZW1fX2dyb3VwXCI+XG4gICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWxheWVyLWdyb3VwXCI+PC9pPlxuICAgICAge3sgaXRlbS50ZXh0IHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICA8L3NwYW4+XG4gICAgfSBAZWxzZSBpZiAoaXRlbS50eXBlID09PSAnYnJlYWsnKSB7XG4gICAgPCEtLSBEaXZpZGVyIC0tPlxuICAgIDxzcGFuIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19kaXZpZGVyXCI+XG4gICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLW1pbnVzXCI+PC9pPlxuICAgICAge3sgJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5zdGF0ZXMuZGl2aWRlcicgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIGlmIChpdGVtLnRleHQpIHtcbiAgICA8IS0tIFJlZ3VsYXIgTWVudSBJdGVtIC0tPlxuICAgIDxzcGFuIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX190ZXh0XCI+XG4gICAgICB7eyBpdGVtLnRleHQgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIGlmIChpdGVtLnBhdGgpIHtcbiAgICA8IS0tIFBhdGgtb25seSBJdGVtIC0tPlxuICAgIDxzcGFuIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19wYXRoXCI+XG4gICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWxpbmtcIj48L2k+XG4gICAgICB7eyBpdGVtLnBhdGggfX1cbiAgICA8L3NwYW4+XG4gICAgfVxuXG4gICAgPCEtLSBNZW51IE5hbWUvS2V5IC0tPlxuICAgIEBpZiAoaXRlbS5uYW1lKSB7XG4gICAgPGNvZGUgY2xhc3M9XCJheG0tbWVudS10cmVlLWl0ZW1fX25hbWVcIj57eyBpdGVtLm5hbWUgfX08L2NvZGU+XG4gICAgfVxuXG4gICAgPCEtLSBTdGF0dXMgQmFkZ2VzIC0tPlxuICAgIEBpZiAobWV0YWRhdGEuaXNIaWRkZW4pIHtcbiAgICA8YXgtYmFkZ2UgW3RleHRdPVwiKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuc3RhdGVzLmhpZGRlbicgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgIGNvbG9yPVwiZGFuZ2VyXCI+PC9heC1iYWRnZT5cbiAgICB9IEBlbHNlIGlmIChtZXRhZGF0YS5pc0N1c3RvbSkge1xuICAgIDxheC1iYWRnZSBbdGV4dF09XCIoJ0BwbGF0Zm9ybS1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5zdGF0ZXMuY3VzdG9tJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgY29sb3I9XCJzdWNjZXNzXCI+PC9heC1iYWRnZT5cbiAgICB9IEBlbHNlIGlmIChtZXRhZGF0YS5pc0J1aWx0SW4pIHtcbiAgICA8YXgtYmFkZ2UgW3RleHRdPVwiKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuc3RhdGVzLmJ1aWx0LWluJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgY29sb3I9XCJwcmltYXJ5XCI+PC9heC1iYWRnZT5cbiAgICB9XG5cbiAgICA8IS0tIEFjdGlvbnMgRHJvcGRvd24gLS0+XG4gICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4bS1tZW51LXRyZWUtaXRlbV9fYWN0aW9uc1wiIFtsb29rXT1cIidibGFuaydcIiBbc2l6ZV09XCInc20nXCIgW2ljb25Pbmx5XT1cInRydWVcIj5cbiAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtZWxsaXBzaXMtdmVydGljYWxcIj48L2k+XG4gICAgICA8L2F4LXByZWZpeD5cblxuICAgICAgPGF4LWRyb3Bkb3duLXBhbmVsICNwYW5lbD5cbiAgICAgICAgPGF4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICAgICAgPCEtLSBFZGl0IChvbmx5IGZvciBpdGVtcyB3aXRoIG5hbWVzKSAtLT5cbiAgICAgICAgICBAaWYgKGl0ZW0ubmFtZSkge1xuICAgICAgICAgIDxheC1idXR0b24taXRlbSBbdGV4dF09XCIoJ0BnZW5lcmFsOmFjdGlvbnMuZWRpdC50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdlZGl0Jywgbm9kZURhdGEpOyBwYW5lbC5jbG9zZSgpXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWVkaXRcIj48L2k+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gU2hvdy9IaWRlIChvbmx5IGZvciBpdGVtcyB3aXRoIG5hbWVzKSAtLT5cbiAgICAgICAgICBAaWYgKGl0ZW0ubmFtZSAmJiBtZXRhZGF0YS5pc0J1aWx0SW4pIHtcbiAgICAgICAgICBAaWYgKG1ldGFkYXRhLmlzSGlkZGVuKSB7XG4gICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIFt0ZXh0XT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuc2hvdy50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdzaG93Jywgbm9kZURhdGEpOyBwYW5lbC5jbG9zZSgpXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWV5ZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIFt0ZXh0XT1cIignQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuaGlkZS50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdoaWRlJywgbm9kZURhdGEpOyBwYW5lbC5jbG9zZSgpXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWV5ZS1zbGFzaFwiPjwvaT5cbiAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAoIWl0ZW0ucGF0aCAmJiAoaXRlbS50eXBlID09PSAnbWVudScgfHwgIWl0ZW0udHlwZSkpIHtcbiAgICAgICAgICA8IS0tIEFkZCBDaGlsZCAtLT5cbiAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW0gW3RleHRdPVwiKCdAcGxhdGZvcm0tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5hZGQtY2hpbGQudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgICAgICAob25DbGljayk9XCJvbkFjdGlvbignYWRkLWNoaWxkJywgbm9kZURhdGEpOyBwYW5lbC5jbG9zZSgpXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXBsdXNcIj48L2k+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIDwhLS0gRGVsZXRlIChvbmx5IGZvciBjdXN0b20gaXRlbXMgd2l0aCBuYW1lcykgLS0+XG4gICAgICAgICAgQGlmIChpdGVtLm5hbWUgJiYgbWV0YWRhdGEuaXNDdXN0b20pIHtcbiAgICAgICAgICA8YXgtZGl2aWRlcj48L2F4LWRpdmlkZXI+XG4gICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtIFtjb2xvcl09XCInZGFuZ2VyJ1wiIFt0ZXh0XT1cIignQGdlbmVyYWw6YWN0aW9ucy5kZWxldGUudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgICAgICAob25DbGljayk9XCJvbkFjdGlvbignZGVsZXRlJywgbm9kZURhdGEpOyBwYW5lbC5jbG9zZSgpXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXRyYXNoXCI+PC9pPlxuICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIEluZm8gbWVzc2FnZSBmb3IgaXRlbXMgd2l0aG91dCBuYW1lcyAtLT5cbiAgICAgICAgICBAaWYgKCFpdGVtLm5hbWUpIHtcbiAgICAgICAgICA8YXgtZGl2aWRlcj48L2F4LWRpdmlkZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXAtMiBheC10ZXh0LXhzIGF4LXRleHQtbmV1dHJhbC01MDAgYXgtaXRhbGljXCI+XG4gICAgICAgICAgICB7eyAnQHBsYXRmb3JtLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLmluZm8ubm8tbmFtZScgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9heC1idXR0b24taXRlbS1saXN0PlxuICAgICAgPC9heC1kcm9wZG93bi1wYW5lbD5cbiAgICA8L2F4LWJ1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPiJdfQ=="],"names":[],"mappings":"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"}
|