@acorex/modules 20.5.0-next.0 → 20.5.0-next.1
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 +11 -17
- package/fesm2022/{acorex-modules-application-management-acorex-modules-application-management-CQMnhxLa.mjs → acorex-modules-application-management-acorex-modules-application-management-BqYLpEvY.mjs} +23 -41
- package/fesm2022/acorex-modules-application-management-acorex-modules-application-management-BqYLpEvY.mjs.map +1 -0
- package/fesm2022/acorex-modules-application-management-menu-list.component-D4uW0aXY.mjs +830 -0
- package/fesm2022/acorex-modules-application-management-menu-list.component-D4uW0aXY.mjs.map +1 -0
- package/fesm2022/acorex-modules-application-management.mjs +1 -1
- package/fesm2022/acorex-modules-common.mjs +429 -559
- package/fesm2022/acorex-modules-common.mjs.map +1 -1
- package/fesm2022/acorex-modules-data-management.mjs +0 -2
- package/fesm2022/acorex-modules-data-management.mjs.map +1 -1
- package/package.json +14 -14
- package/fesm2022/acorex-modules-application-management-acorex-modules-application-management-CQMnhxLa.mjs.map +0 -1
- package/fesm2022/acorex-modules-application-management-menu-list.component-BMbl5rtn.mjs +0 -1046
- package/fesm2022/acorex-modules-application-management-menu-list.component-BMbl5rtn.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-modules-application-management-menu-list.component-D4uW0aXY.mjs","sources":["../tmp-esm2022/application-management/lib/features/menu-management/menu-management.service.js","../tmp-esm2022/application-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.4\", ngImport: i0, type: AXPMenuManagementService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPMenuManagementService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPMenuManagementService, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1tYW5hZ2VtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL21vZHVsZXMvYXBwbGljYXRpb24tbWFuYWdlbWVudC9zcmMvbGliL2ZlYXR1cmVzL21lbnUtbWFuYWdlbWVudC9tZW51LW1hbmFnZW1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWUsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQWlCeEcsK0NBQStDO0FBRS9DOztHQUVHO0FBQ0gsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDN0IsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDbEMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBR3pCLE1BQU0sT0FBTyx3QkFBd0I7SUFEckM7UUFFRSxvQ0FBb0M7UUFFNUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMzQyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztLQTRiOUQ7SUExYkMsWUFBWTtJQUVaLHNDQUFzQztJQUV0Qzs7T0FFRztJQUNILEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBdUI7UUFDdkMsa0VBQWtFO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTVELDBDQUEwQztRQUMxQyxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMs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RS9DLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBdUIsRUFBRSxFQUFFO1lBQzFDLEtBQUssTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQzVCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNkLG1EQUFtRDtvQkFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQzNELENBQUM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYztRQUNwQixPQUFPLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7SUFDbkUsQ0FBQzs4R0E3YlUsd0JBQXdCO2tIQUF4Qix3QkFBd0IsY0FEWCxNQUFNOzsyRkFDbkIsd0JBQXdCO2tCQURwQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYVHJlZU5vZGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdHJlZTInO1xuaW1wb3J0IHsgQVhQTWVudUl0ZW0sIEFYUE1lbnVQcm92aWRlclNlcnZpY2UsIEFYUFNldHRpbmdTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQUGxhdGZvcm1TY29wZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWFBfTUVOVV9DVVNUT01JWkFUSU9OX0RFRkFVTFQsIEFYUF9NRU5VX0NVU1RPTUlaQVRJT05fS0VZIH0gZnJvbSAnLi9tZW51LWN1c3RvbWl6YXRpb24uY29uc3QnO1xuaW1wb3J0IHsgQVhQTWVudUN1c3RvbWl6YXRpb24gfSBmcm9tICcuL21lbnUtY3VzdG9taXphdGlvbi50eXBlcyc7XG5cbi8qKlxuICogRGF0YSBzdHJ1Y3R1cmUgZm9yIHRyZWUgbm9kZSBjb21iaW5pbmcgbWVudSBpdGVtIHdpdGggbWV0YWRhdGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBWFBNZW51VHJlZU5vZGVEYXRhIHtcbiAgbWVudUl0ZW06IEFYUE1lbnVJdGVtO1xuICBtZXRhZGF0YToge1xuICAgIGlzQnVpbHRJbjogYm9vbGVhbjtcbiAgICBpc0N1c3RvbTogYm9vbGVhbjtcbiAgICBpc0hpZGRlbjogYm9vbGVhbjtcbiAgICBvcmlnaW5hbFByaW9yaXR5PzogbnVtYmVyO1xuICAgIG9yaWdpbmFsUGFyZW50TmFtZT86IHN0cmluZztcbiAgfTtcbn1cblxuLy8jcmVnaW9uIC0tLS0gICBNZW51IE1hbmFnZW1lbnQgU2VydmljZSAgIC0tLS1cblxuLyoqXG4gKiBDb25zdGFudHMgZm9yIHByaW9yaXR5IGNhbGN1bGF0aW9uXG4gKi9cbmNvbnN0IFBSSU9SSVRZX0JBU0VfUk9PVCA9IDA7XG5jb25zdCBQUklPUklUWV9CQVNFX05FU1RFRCA9IDEwMDA7XG5jb25zdCBQUklPUklUWV9TVEVQID0gMTA7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQVhQTWVudU1hbmFnZW1lbnRTZXJ2aWNlIHtcbiAgLy8jcmVnaW9uIC0tLS0gICBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgcHJpdmF0ZSBzZXR0aW5nU2VydmljZSA9IGluamVjdChBWFBTZXR0aW5nU2VydmljZSk7XG4gIHByaXZhdGUgbWVudVByb3ZpZGVyU2VydmljZSA9IGluamVjdChBWFBNZW51UHJvdmlkZXJTZXJ2aWNlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBHZXQgbWVudSB0cmVlIGFzIEFYVHJlZU5vZGVbXSBmb3IgYXgtdHJlZTIgY29tcG9uZW50XG4gICAqL1xuICBhc3luYyBnZXRNZW51VHJlZShzY29wZTogQVhQUGxhdGZvcm1TY29wZSk6IFByb21pc2U8QVhUcmVlTm9kZVtdPiB7XG4gICAgLy8gR2V0IFJBVyBtZW51IGl0ZW1zIFdJVEhPVVQgbWlkZGxld2FyZSAoZm9yIG1hbmFnZW1lbnQgcHVycG9zZXMpXG4gICAgY29uc3QgYmFzZUl0ZW1zID0gYXdhaXQgdGhpcy5tZW51UHJvdmlkZXJTZXJ2aWNlLnJhd0l0ZW1zKCk7XG5cbiAgICAvLyBMb2FkIGN1c3RvbWl6YXRpb25zIGZvciB0aGUgZ2l2ZW4gc2NvcGVcbiAgICBjb25zdCBjdXN0b21pemF0aW9uID0gYXdhaXQgdGhpcy5sb2FkQ3VzdG9taXphdGlvbihzY29wZSk7XG5cbiAgICAvLyBNZXJnZSBjdXN0b20gaXRlbXMgd2l0aCBiYXNlIGl0ZW1zXG4gICAgY29uc3QgYWxsSXRlbXMgPSBbLi4uYmFzZUl0ZW1zLCAuLi5jdXN0b21pemF0aW9uLmN1c3RvbUl0ZW1zXTtcblxuICAgIC8vIEFwcGx5IHBhcmVudCBvdmVycmlkZXMgdG8gcmVzdHJ1Y3R1cmUgaXRlbXMgQkVGT1JFIGJ1aWxkaW5nIHRyZWVcbiAgICBjb25zdCByZXN0cnVjdHVyZWRJdGVtcyA9IHRoaXMuYXBwbHlQYXJlbnRPdmVycmlkZXMoYWxsSXRlbXMsIGN1c3RvbWl6YXRpb24pO1xuXG4gICAgLy8gQ29udmVydCB0byB0cmVlIG5vZGVzIHdpdGggbWV0YWRhdGFcbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0VG9UcmVlTm9kZXMocmVzdHJ1Y3R1cmVkSXRlbXMsIGN1c3RvbWl6YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmMgdHJlZSBjaGFuZ2VzIGJhY2sgdG8gY3VzdG9taXphdGlvblxuICAgKiBDYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRyZWUgc3RydWN0dXJlIGNoYW5nZXMgdmlhIGRyYWctZHJvcFxuICAgKi9cbiAgYXN5bmMgc3luY1RyZWVDaGFuZ2VzKHNjb3BlOiBBWFBQbGF0Zm9ybVNjb3BlLCB0cmVlTm9kZXM6IEFYVHJlZU5vZGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1c3RvbWl6YXRpb24gPSBhd2FpdCB0aGlzLmxvYWRDdXN0b21pemF0aW9uKHNjb3BlKTtcblxuICAgIC8vIEV4dHJhY3QgYW5kIHVwZGF0ZSBwcmlvcml0aWVzIGFuZCBwYXJlbnQgcmVsYXRpb25zaGlwcyBmcm9tIHRyZWUgc3RydWN0dXJlXG4gICAgdGhpcy51cGRhdGVDdXN0b21pemF0aW9uRnJvbVRyZWUodHJlZU5vZGVzLCBjdXN0b21pemF0aW9uKTtcblxuICAgIGF3YWl0IHRoaXMuc2F2ZUN1c3RvbWl6YXRpb24oc2NvcGUsIGN1c3RvbWl6YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbWVudSBjdXN0b21pemF0aW9uIGZvciBhIHNwZWNpZmljIHNjb3BlXG4gICAqL1xuICBhc3luYyBsb2FkQ3VzdG9taXphdGlvbihzY29wZTogQVhQUGxhdGZvcm1TY29wZSk6IFByb21pc2U8QVhQTWVudUN1c3RvbWl6YXRpb24+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2NvcGVkU2V0dGluZ3MgPSB0aGlzLnNldHRpbmdTZXJ2aWNlLnNjb3BlKHNjb3BlKTtcbiAgICAgIGNvbnN0IHNhdmVkID0gYXdhaXQgc2NvcGVkU2V0dGluZ3MuZ2V0PEFYUE1lbnVDdXN0b21pemF0aW9uPihBWFBfTUVOVV9DVVNUT01JWkFUSU9OX0tFWSk7XG5cbiAgICAgIGlmIChzYXZlZCAmJiBzYXZlZC52ZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBzYXZlZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsb25lRGVlcChBWFBfTUVOVV9DVVNUT01JWkFUSU9OX0RFRkFVTFQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBsb2FkIG1lbnUgY3VzdG9taXphdGlvbiwgdXNpbmcgZGVmYXVsdHMnLCBlcnJvcik7XG4gICAgICByZXR1cm4gY2xvbmVEZWVwKEFYUF9NRU5VX0NVU1RPTUlaQVRJT05fREVGQVVMVCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgbWVudSBjdXN0b21pemF0aW9uIGZvciBhIHNwZWNpZmljIHNjb3BlXG4gICAqL1xuICBhc3luYyBzYXZlQ3VzdG9taXphdGlvbihzY29wZTogQVhQUGxhdGZvcm1TY29wZSwgY3VzdG9taXphdGlvbjogQVhQTWVudUN1c3RvbWl6YXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzY29wZWRTZXR0aW5ncyA9IHRoaXMuc2V0dGluZ1NlcnZpY2Uuc2NvcGUoc2NvcGUpO1xuICAgIGF3YWl0IHNjb3BlZFNldHRpbmdzLnNldChBWFBfTUVOVV9DVVNUT01JWkFUSU9OX0tFWSwgY3VzdG9taXphdGlvbik7XG5cbiAgICAvLyBDbGVhciBtZW51IGNhY2hlIHRvIGZvcmNlIHJlbG9hZFxuICAgIHRoaXMubWVudVByb3ZpZGVyU2VydmljZS5jbGVhckNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBhIG1lbnUgaXRlbVxuICAgKi9cbiAgYXN5bmMgaGlkZU1lbnVJdGVtKHNjb3BlOiBBWFBQbGF0Zm9ybVNjb3BlLCBtZW51TmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy52YWxpZGF0ZU1lbnVOYW1lKG1lbnVOYW1lLCAnaGlkZScpO1xuXG4gICAgY29uc3QgY3VzdG9taXphdGlvbiA9IGF3YWl0IHRoaXMubG9hZEN1c3RvbWl6YXRpb24oc2NvcGUpO1xuICAgIHRoaXMuZW5zdXJlT3ZlcnJpZGVFeGlzdHMoY3VzdG9taXphdGlvbiwgbWVudU5hbWUpO1xuICAgIGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW21lbnVOYW1lXS5oaWRkZW4gPSB0cnVlO1xuXG4gICAgYXdhaXQgdGhpcy5zYXZlQ3VzdG9taXphdGlvbihzY29wZSwgY3VzdG9taXphdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBhIG1lbnUgaXRlbVxuICAgKi9cbiAgYXN5bmMgc2hvd01lbnVJdGVtKHNjb3BlOiBBWFBQbGF0Zm9ybVNjb3BlLCBtZW51TmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy52YWxpZGF0ZU1lbnVOYW1lKG1lbnVOYW1lLCAnc2hvdycpO1xuXG4gICAgY29uc3QgY3VzdG9taXphdGlvbiA9IGF3YWl0IHRoaXMubG9hZEN1c3RvbWl6YXRpb24oc2NvcGUpO1xuXG4gICAgaWYgKGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW21lbnVOYW1lXSkge1xuICAgICAgZGVsZXRlIGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW21lbnVOYW1lXS5oaWRkZW47XG4gICAgICB0aGlzLmNsZWFudXBFbXB0eU92ZXJyaWRlKGN1c3RvbWl6YXRpb24sIG1lbnVOYW1lKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVDdXN0b21pemF0aW9uKHNjb3BlLCBjdXN0b21pemF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbWVudSBpdGVtIHByaW9yaXR5XG4gICAqL1xuICBhc3luYyB1cGRhdGVNZW51UHJpb3JpdHkoc2NvcGU6IEFYUFBsYXRmb3JtU2NvcGUsIG1lbnVOYW1lOiBzdHJpbmcsIHByaW9yaXR5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnZhbGlkYXRlTWVudU5hbWUobWVudU5hbWUsICd1cGRhdGUgcHJpb3JpdHkgZm9yJyk7XG5cbiAgICBjb25zdCBjdXN0b21pemF0aW9uID0gYXdhaXQgdGhpcy5sb2FkQ3VzdG9taXphdGlvbihzY29wZSk7XG4gICAgdGhpcy5lbnN1cmVPdmVycmlkZUV4aXN0cyhjdXN0b21pemF0aW9uLCBtZW51TmFtZSk7XG4gICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudU5hbWVdLnByaW9yaXR5ID0gcHJpb3JpdHk7XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVDdXN0b21pemF0aW9uKHNjb3BlLCBjdXN0b21pemF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgbWVudSBpdGVtIHByb3BlcnRpZXNcbiAgICovXG4gIGFzeW5jIHVwZGF0ZU1lbnVQcm9wZXJ0aWVzKFxuICAgIHNjb3BlOiBBWFBQbGF0Zm9ybVNjb3BlLFxuICAgIG1lbnVOYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydGllczogUGFydGlhbDxBWFBNZW51SXRlbT4sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudmFsaWRhdGVNZW51TmFtZShtZW51TmFtZSwgJ3VwZGF0ZSBwcm9wZXJ0aWVzIGZvcicpO1xuXG4gICAgY29uc3QgY3VzdG9taXphdGlvbiA9IGF3YWl0IHRoaXMubG9hZEN1c3RvbWl6YXRpb24oc2NvcGUpO1xuICAgIHRoaXMuZW5zdXJlT3ZlcnJpZGVFeGlzdHMoY3VzdG9taXphdGlvbiwgbWVudU5hbWUpO1xuXG4gICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudU5hbWVdLnByb3BlcnRpZXMgPSB7XG4gICAgICAuLi5jdXN0b21pemF0aW9uLm92ZXJyaWRlc1ttZW51TmFtZV0ucHJvcGVydGllcyxcbiAgICAgIC4uLnByb3BlcnRpZXMsXG4gICAgfTtcblxuICAgIGF3YWl0IHRoaXMuc2F2ZUN1c3RvbWl6YXRpb24oc2NvcGUsIGN1c3RvbWl6YXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBjdXN0b20gbWVudSBpdGVtXG4gICAqL1xuICBhc3luYyBhZGRDdXN0b21NZW51SXRlbShzY29wZTogQVhQUGxhdGZvcm1TY29wZSwgbWVudUl0ZW06IEFYUE1lbnVJdGVtLCBwYXJlbnQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGN1c3RvbWl6YXRpb24gPSBhd2FpdCB0aGlzLmxvYWRDdXN0b21pemF0aW9uKHNjb3BlKTtcblxuICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBuYW1lIGlmIG5vdCBwcm92aWRlZFxuICAgIGlmICghbWVudUl0ZW0ubmFtZSkge1xuICAgICAgbWVudUl0ZW0ubmFtZSA9IGBjdXN0b20tbWVudS0ke0RhdGUubm93KCl9YDtcbiAgICB9XG5cbiAgICBjdXN0b21pemF0aW9uLmN1c3RvbUl0ZW1zLnB1c2gobWVudUl0ZW0pO1xuXG4gICAgYXdhaXQgdGhpcy5zYXZlQ3VzdG9taXphdGlvbihzY29wZSwgY3VzdG9taXphdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGN1c3RvbSBtZW51IGl0ZW1cbiAgICovXG4gIGFzeW5jIHVwZGF0ZUN1c3RvbU1lbnVJdGVtKHNjb3BlOiBBWFBQbGF0Zm9ybVNjb3BlLCBtZW51TmFtZTogc3RyaW5nLCBtZW51SXRlbTogQVhQTWVudUl0ZW0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnZhbGlkYXRlTWVudU5hbWUobWVudU5hbWUsICd1cGRhdGUnKTtcblxuICAgIGNvbnN0IGN1c3RvbWl6YXRpb24gPSBhd2FpdCB0aGlzLmxvYWRDdXN0b21pemF0aW9uKHNjb3BlKTtcblxuICAgIGNvbnN0IGluZGV4ID0gY3VzdG9taXphdGlvbi5jdXN0b21JdGVtcy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gbWVudU5hbWUpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDdXN0b20gbWVudSBpdGVtICcke21lbnVOYW1lfScgbm90IGZvdW5kYCk7XG4gICAgfVxuXG4gICAgY3VzdG9taXphdGlvbi5jdXN0b21JdGVtc1tpbmRleF0gPSBtZW51SXRlbTtcbiAgICBhd2FpdCB0aGlzLnNhdmVDdXN0b21pemF0aW9uKHNjb3BlLCBjdXN0b21pemF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgY3VzdG9tIG1lbnUgaXRlbVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlQ3VzdG9tTWVudUl0ZW0oc2NvcGU6IEFYUFBsYXRmb3JtU2NvcGUsIG1lbnVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnZhbGlkYXRlTWVudU5hbWUobWVudU5hbWUsICdkZWxldGUnKTtcblxuICAgIGNvbnN0IGN1c3RvbWl6YXRpb24gPSBhd2FpdCB0aGlzLmxvYWRDdXN0b21pemF0aW9uKHNjb3BlKTtcblxuICAgIGNvbnN0IGluaXRpYWxMZW5ndGggPSBjdXN0b21pemF0aW9uLmN1c3RvbUl0ZW1zLmxlbmd0aDtcbiAgICBjdXN0b21pemF0aW9uLmN1c3RvbUl0ZW1zID0gY3VzdG9taXphdGlvbi5jdXN0b21JdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubmFtZSAhPT0gbWVudU5hbWUpO1xuXG4gICAgaWYgKGN1c3RvbWl6YXRpb24uY3VzdG9tSXRlbXMubGVuZ3RoID09PSBpbml0aWFsTGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEN1c3RvbSBtZW51IGl0ZW0gJyR7bWVudU5hbWV9JyBub3QgZm91bmRgKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVDdXN0b21pemF0aW9uKHNjb3BlLCBjdXN0b21pemF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCBhbGwgY3VzdG9taXphdGlvbnMgZm9yIGEgc2NvcGVcbiAgICovXG4gIGFzeW5jIHJlc2V0Q3VzdG9taXphdGlvbnMoc2NvcGU6IEFYUFBsYXRmb3JtU2NvcGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNhdmVDdXN0b21pemF0aW9uKHNjb3BlLCBjbG9uZURlZXAoQVhQX01FTlVfQ1VTVE9NSVpBVElPTl9ERUZBVUxUKSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFByaXZhdGUgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogQXBwbHkgcGFyZW50IG92ZXJyaWRlcyBmcm9tIGN1c3RvbWl6YXRpb24gdG8gcmVzdHJ1Y3R1cmUgbWVudSBpdGVtc1xuICAgKiBUaGlzIGVuc3VyZXMgdGhlIHRyZWUgcmVmbGVjdHMgc2F2ZWQgcGFyZW50IGNoYW5nZXMgKG1vdmVzKVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVBhcmVudE92ZXJyaWRlcyhpdGVtczogQVhQTWVudUl0ZW1bXSwgY3VzdG9taXphdGlvbjogQVhQTWVudUN1c3RvbWl6YXRpb24pOiBBWFBNZW51SXRlbVtdIHtcbiAgICAvLyBGaXJzdCwgZmxhdHRlbiBhbGwgaXRlbXMgaW50byBhIG1hcCBmb3IgZWFzeSBsb29rdXBcbiAgICBjb25zdCBpdGVtTWFwID0gdGhpcy5mbGF0dGVuTWVudUl0ZW1zKGl0ZW1zKTtcblxuICAgIC8vIEJ1aWxkIG5ldyBzdHJ1Y3R1cmUgYmFzZWQgb24gZWZmZWN0aXZlIHBhcmVudCByZWxhdGlvbnNoaXBzXG4gICAgY29uc3Qgcm9vdEl0ZW1zOiBBWFBNZW51SXRlbVtdID0gW107XG4gICAgY29uc3QgY2hpbGRyZW5NYXAgPSBuZXcgTWFwPHN0cmluZywgQVhQTWVudUl0ZW1bXT4oKTtcblxuICAgIGZvciAoY29uc3QgW2l0ZW1OYW1lLCBpdGVtXSBvZiBpdGVtTWFwLmVudHJpZXMoKSkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21pemF0aW9uLm92ZXJyaWRlc1tpdGVtTmFtZV07XG5cbiAgICAgIC8vIERldGVybWluZSBlZmZlY3RpdmUgcGFyZW50IChvdmVycmlkZSB0YWtlcyBwcmVjZWRlbmNlKVxuICAgICAgbGV0IGVmZmVjdGl2ZVBhcmVudDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChvdmVycmlkZT8ucGFyZW50TmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHBhcmVudE5hbWUgaXMgZXhwbGljaXRseSBzZXQgKGNvdWxkIGJlIG51bGwgZm9yIHJvb3QsIG9yIGEgcGFyZW50IG5hbWUpXG4gICAgICAgIGVmZmVjdGl2ZVBhcmVudCA9IG92ZXJyaWRlLnBhcmVudE5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBObyBvdmVycmlkZSAtIGZpbmQgb3JpZ2luYWwgcGFyZW50IGJ5IHNlYXJjaGluZyBvcmlnaW5hbCBzdHJ1Y3R1cmVcbiAgICAgICAgZWZmZWN0aXZlUGFyZW50ID0gdGhpcy5maW5kT3JpZ2luYWxQYXJlbnQoaXRlbXMsIGl0ZW1OYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVmZmVjdGl2ZVBhcmVudCA9PT0gbnVsbCB8fCBlZmZlY3RpdmVQYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBSb290IGxldmVsIGl0ZW1cbiAgICAgICAgcm9vdEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDaGlsZCBpdGVtIC0gYWRkIHRvIHBhcmVudCdzIGNoaWxkcmVuXG4gICAgICAgIGlmICghY2hpbGRyZW5NYXAuaGFzKGVmZmVjdGl2ZVBhcmVudCkpIHtcbiAgICAgICAgICBjaGlsZHJlbk1hcC5zZXQoZWZmZWN0aXZlUGFyZW50LCBbXSk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRyZW5NYXAuZ2V0KGVmZmVjdGl2ZVBhcmVudCkhLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXR0YWNoIGNoaWxkcmVuIHRvIHRoZWlyIHBhcmVudHMgcmVjdXJzaXZlbHlcbiAgICBjb25zdCBhdHRhY2hDaGlsZHJlbiA9IChpdGVtOiBBWFBNZW51SXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0ubmFtZSAmJiBjaGlsZHJlbk1hcC5oYXMoaXRlbS5uYW1lKSkge1xuICAgICAgICBpdGVtLmNoaWxkcmVuID0gY2hpbGRyZW5NYXAuZ2V0KGl0ZW0ubmFtZSk7XG4gICAgICAgIGl0ZW0uY2hpbGRyZW4/LmZvckVhY2goYXR0YWNoQ2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByb290SXRlbXMuZm9yRWFjaChhdHRhY2hDaGlsZHJlbik7XG5cbiAgICByZXR1cm4gcm9vdEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIG9yaWdpbmFsIHBhcmVudCBuYW1lIG9mIGFuIGl0ZW0gaW4gdGhlIG9yaWdpbmFsIHN0cnVjdHVyZVxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBmb3Igcm9vdCBpdGVtcywgc3RyaW5nIGZvciBpdGVtcyB3aXRoIHBhcmVudHMsIG51bGwgZm9yIG5vdCBmb3VuZFxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kT3JpZ2luYWxQYXJlbnQoXG4gICAgaXRlbXM6IEFYUE1lbnVJdGVtW10sXG4gICAgdGFyZ2V0TmFtZTogc3RyaW5nLFxuICAgIGN1cnJlbnRQYXJlbnQ/OiBzdHJpbmcsXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgICAgaWYgKGl0ZW0ubmFtZSA9PT0gdGFyZ2V0TmFtZSkge1xuICAgICAgICByZXR1cm4gY3VycmVudFBhcmVudDsgLy8gdW5kZWZpbmVkIGlmIHJvb3QsIHN0cmluZyBpZiBoYXMgcGFyZW50XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZE9yaWdpbmFsUGFyZW50KGl0ZW0uY2hpbGRyZW4sIHRhcmdldE5hbWUsIGl0ZW0ubmFtZSk7XG4gICAgICAgIGlmIChmb3VuZCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZvdW5kIGluIGNoaWxkcmVuIChjb3VsZCBiZSB1bmRlZmluZWQgZm9yIHJvb3Qgb2Ygc3VidHJlZSwgb3Igc3RyaW5nIGZvciBuZXN0ZWQgaXRlbSlcbiAgICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZm91bmQgPT09IG51bGwgbWVhbnMgbm90IGZvdW5kIGluIHRoaXMgc3VidHJlZSwgY29udGludWUgc2VhcmNoaW5nXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsOyAvLyBOb3QgZm91bmQgaW4gdGhpcyBsZXZlbCBvciBhbnkgY2hpbGRyZW5cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IG1lbnUgaXRlbXMgdG8gQVhUcmVlTm9kZVtdIHdpdGggbWV0YWRhdGFcbiAgICovXG4gIHByaXZhdGUgY29udmVydFRvVHJlZU5vZGVzKFxuICAgIGl0ZW1zOiBBWFBNZW51SXRlbVtdLFxuICAgIGN1c3RvbWl6YXRpb246IEFYUE1lbnVDdXN0b21pemF0aW9uLFxuICAgIHBhcmVudE5hbWU/OiBzdHJpbmcsXG4gICk6IEFYVHJlZU5vZGVbXSB7XG4gICAgY29uc3Qgbm9kZXMgPSBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1OYW1lID0gaXRlbS5uYW1lO1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBpdGVtTmFtZSA/IGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW2l0ZW1OYW1lXSA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGlzQ3VzdG9tID0gaXRlbU5hbWUgPyBjdXN0b21pemF0aW9uLmN1c3RvbUl0ZW1zLnNvbWUoKGNpKSA9PiBjaS5uYW1lID09PSBpdGVtTmFtZSkgOiBmYWxzZTtcblxuICAgICAgLy8gQ3JlYXRlIG1ldGFkYXRhXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHtcbiAgICAgICAgaXNCdWlsdEluOiAhaXNDdXN0b20sXG4gICAgICAgIGlzQ3VzdG9tLFxuICAgICAgICBpc0hpZGRlbjogb3ZlcnJpZGU/LmhpZGRlbiB8fCBmYWxzZSxcbiAgICAgICAgb3JpZ2luYWxQcmlvcml0eTogaXRlbS5wcmlvcml0eSxcbiAgICAgICAgb3JpZ2luYWxQYXJlbnROYW1lOiBwYXJlbnROYW1lLFxuICAgICAgfTtcblxuICAgICAgLy8gQXBwbHkgcHJpb3JpdHkgb3ZlcnJpZGVcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZVByaW9yaXR5ID0gb3ZlcnJpZGU/LnByaW9yaXR5ICE9PSB1bmRlZmluZWQgPyBvdmVycmlkZS5wcmlvcml0eSA6IGl0ZW0ucHJpb3JpdHk7XG4gICAgICBjb25zdCBpdGVtV2l0aFByaW9yaXR5ID0geyAuLi5pdGVtLCBwcmlvcml0eTogZWZmZWN0aXZlUHJpb3JpdHkgfTtcblxuICAgICAgLy8gQ3JlYXRlIHRyZWUgbm9kZSBkYXRhXG4gICAgICBjb25zdCBub2RlRGF0YTogQVhQTWVudVRyZWVOb2RlRGF0YSA9IHtcbiAgICAgICAgbWVudUl0ZW06IGl0ZW1XaXRoUHJpb3JpdHksXG4gICAgICAgIG1ldGFkYXRhLFxuICAgICAgfTtcblxuICAgICAgLy8gQ3JlYXRlIHRyZWUgbm9kZVxuICAgICAgY29uc3QgdHJlZU5vZGU6IEFYVHJlZU5vZGUgPSB7XG4gICAgICAgIGlkOiBpdGVtTmFtZSB8fCBpdGVtLnBhdGggfHwgdGhpcy5nZW5lcmF0ZU5vZGVJZCgpLFxuICAgICAgICBsYWJlbDogaXRlbS50ZXh0IHx8IGl0ZW0ucGF0aCB8fCAnVW5uYW1lZCcsXG4gICAgICAgIGljb246IGl0ZW0uaWNvbixcbiAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgIHZpc2libGU6IHRydWUsIC8vIEFsd2F5cyB2aXNpYmxlIGluIG1hbmFnZW1lbnQgaW50ZXJmYWNlLCBDU1MgaGFuZGxlcyBoaWRkZW4gc3R5bGluZ1xuICAgICAgICBjaGlsZHJlbjogaXRlbS5jaGlsZHJlbiA/IHRoaXMuY29udmVydFRvVHJlZU5vZGVzKGl0ZW0uY2hpbGRyZW4sIGN1c3RvbWl6YXRpb24sIGl0ZW1OYW1lKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgY2hpbGRyZW5Db3VudDogaXRlbS5jaGlsZHJlbj8ubGVuZ3RoLFxuICAgICAgICBkYXRhOiBub2RlRGF0YSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiB0cmVlTm9kZTtcbiAgICB9KTtcblxuICAgIC8vIFNvcnQgYnkgcHJpb3JpdHlcbiAgICBub2Rlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBhUHJpb3JpdHkgPSAoYS5kYXRhIGFzIEFYUE1lbnVUcmVlTm9kZURhdGEpPy5tZW51SXRlbS5wcmlvcml0eSA/PyAwO1xuICAgICAgY29uc3QgYlByaW9yaXR5ID0gKGIuZGF0YSBhcyBBWFBNZW51VHJlZU5vZGVEYXRhKT8ubWVudUl0ZW0ucHJpb3JpdHkgPz8gMDtcbiAgICAgIHJldHVybiBhUHJpb3JpdHkgLSBiUHJpb3JpdHk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGN1c3RvbWl6YXRpb24gZnJvbSB0cmVlIHN0cnVjdHVyZVxuICAgKiBFeHRyYWN0cyBwcmlvcml0aWVzIGFuZCBwYXJlbnQgcmVsYXRpb25zaGlwcyBmcm9tIHRyZWUgbm9kZXNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQ3VzdG9taXphdGlvbkZyb21UcmVlKFxuICAgIHRyZWVOb2RlczogQVhUcmVlTm9kZVtdLFxuICAgIGN1c3RvbWl6YXRpb246IEFYUE1lbnVDdXN0b21pemF0aW9uLFxuICAgIHBhcmVudE5hbWU/OiBzdHJpbmcsXG4gICk6IHZvaWQge1xuICAgIC8vIENhbGN1bGF0ZSBiYXNlIHByaW9yaXR5IGZvciB0aGlzIGxldmVsIHRvIG1haW50YWluIHJlbGF0aXZlIG9yZGVyaW5nXG4gICAgY29uc3QgYmFzZVByaW9yaXR5ID0gcGFyZW50TmFtZSA/IFBSSU9SSVRZX0JBU0VfTkVTVEVEIDogUFJJT1JJVFlfQkFTRV9ST09UO1xuICAgIGNvbnN0IHByaW9yaXR5U3RlcCA9IFBSSU9SSVRZX1NURVA7XG5cbiAgICB0cmVlTm9kZXMuZm9yRWFjaCgobm9kZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVEYXRhID0gbm9kZS5kYXRhIGFzIEFYUE1lbnVUcmVlTm9kZURhdGE7XG4gICAgICBjb25zdCBtZW51SXRlbSA9IG5vZGVEYXRhPy5tZW51SXRlbTtcblxuICAgICAgaWYgKG1lbnVJdGVtPy5uYW1lKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlT3ZlcnJpZGVFeGlzdHMoY3VzdG9taXphdGlvbiwgbWVudUl0ZW0ubmFtZSk7XG5cbiAgICAgICAgLy8gQ2FsY3VsYXRlIG5ldyBwcmlvcml0eSBiYXNlZCBvbiBjdXJyZW50IHBvc2l0aW9uXG4gICAgICAgIGNvbnN0IG5ld1ByaW9yaXR5ID0gYmFzZVByaW9yaXR5ICsgaW5kZXggKiBwcmlvcml0eVN0ZXA7XG5cbiAgICAgICAgLy8gR2V0IGN1cnJlbnQgZWZmZWN0aXZlIHByaW9yaXR5IChjb25zaWRlcmluZyBleGlzdGluZyBvdmVycmlkZXMpXG4gICAgICAgIGNvbnN0IGN1cnJlbnRFZmZlY3RpdmVQcmlvcml0eSA9XG4gICAgICAgICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudUl0ZW0ubmFtZV0/LnByaW9yaXR5ID8/IG5vZGVEYXRhLm1ldGFkYXRhLm9yaWdpbmFsUHJpb3JpdHkgPz8gMDtcblxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIHByaW9yaXR5IHRvIHJlZmxlY3QgY3VycmVudCBwb3NpdGlvbiBpbiB0cmVlXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyByZW9yZGVyaW5nIHdvcmtzIGNvcnJlY3RseSBldmVuIGFmdGVyIG11bHRpcGxlIG1vdmVzXG4gICAgICAgIGlmIChuZXdQcmlvcml0eSAhPT0gY3VycmVudEVmZmVjdGl2ZVByaW9yaXR5KSB7XG4gICAgICAgICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudUl0ZW0ubmFtZV0ucHJpb3JpdHkgPSBuZXdQcmlvcml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERldGVybWluZSBjdXJyZW50IGVmZmVjdGl2ZSBwYXJlbnQgKGNvbnNpZGVyaW5nIGV4aXN0aW5nIG92ZXJyaWRlcylcbiAgICAgICAgY29uc3QgY3VycmVudEVmZmVjdGl2ZVBhcmVudCA9XG4gICAgICAgICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudUl0ZW0ubmFtZV0/LnBhcmVudE5hbWUgPz8gbm9kZURhdGEubWV0YWRhdGEub3JpZ2luYWxQYXJlbnROYW1lO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBwYXJlbnQgcmVsYXRpb25zaGlwIGlmIGl0IGNoYW5nZWQgZnJvbSBjdXJyZW50IGVmZmVjdGl2ZSBwYXJlbnRcbiAgICAgICAgaWYgKHBhcmVudE5hbWUgIT09IGN1cnJlbnRFZmZlY3RpdmVQYXJlbnQpIHtcbiAgICAgICAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgICAgICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudUl0ZW0ubmFtZV0ucGFyZW50TmFtZSA9IHBhcmVudE5hbWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE1vdmluZyB0byByb290IC0gc2V0IHRvIG51bGwgKG5vdCB1bmRlZmluZWQpIHNvIG1pZGRsZXdhcmUgd2lsbCBwcm9jZXNzIGl0XG4gICAgICAgICAgICAvLyBtb3ZlVG8obnVsbCkgbW92ZXMgdGhlIGl0ZW0gdG8gcm9vdCBsZXZlbFxuICAgICAgICAgICAgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudUl0ZW0ubmFtZV0ucGFyZW50TmFtZSA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgZW1wdHkgb3ZlcnJpZGVzXG4gICAgICAgIHRoaXMuY2xlYW51cEVtcHR5T3ZlcnJpZGUoY3VzdG9taXphdGlvbiwgbWVudUl0ZW0ubmFtZSk7XG5cbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBjaGlsZHJlblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUN1c3RvbWl6YXRpb25Gcm9tVHJlZShub2RlLmNoaWxkcmVuLCBjdXN0b21pemF0aW9uLCBtZW51SXRlbS5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIG1lbnUgbmFtZSBiZWZvcmUgb3BlcmF0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZU1lbnVOYW1lKG1lbnVOYW1lOiBzdHJpbmcsIG9wZXJhdGlvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFtZW51TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNZW51IGl0ZW0gbXVzdCBoYXZlIGEgbmFtZSB0byBiZSAke29wZXJhdGlvbn1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIG92ZXJyaWRlIG9iamVjdCBleGlzdHMgZm9yIGEgbWVudSBpdGVtXG4gICAqL1xuICBwcml2YXRlIGVuc3VyZU92ZXJyaWRlRXhpc3RzKGN1c3RvbWl6YXRpb246IEFYUE1lbnVDdXN0b21pemF0aW9uLCBtZW51TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFjdXN0b21pemF0aW9uLm92ZXJyaWRlc1ttZW51TmFtZV0pIHtcbiAgICAgIGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW21lbnVOYW1lXSA9IHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhbiB1cCBlbXB0eSBvdmVycmlkZSBvYmplY3RzXG4gICAqL1xuICBwcml2YXRlIGNsZWFudXBFbXB0eU92ZXJyaWRlKGN1c3RvbWl6YXRpb246IEFYUE1lbnVDdXN0b21pemF0aW9uLCBtZW51TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGN1c3RvbWl6YXRpb24ub3ZlcnJpZGVzW21lbnVOYW1lXSB8fCB7fSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgY3VzdG9taXphdGlvbi5vdmVycmlkZXNbbWVudU5hbWVdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbGF0dGVuIG1lbnUgaXRlbXMgcmVjdXJzaXZlbHkgaW50byBhIG1hcFxuICAgKi9cbiAgcHJpdmF0ZSBmbGF0dGVuTWVudUl0ZW1zKGl0ZW1zOiBBWFBNZW51SXRlbVtdKTogTWFwPHN0cmluZywgQVhQTWVudUl0ZW0+IHtcbiAgICBjb25zdCBpdGVtTWFwID0gbmV3IE1hcDxzdHJpbmcsIEFYUE1lbnVJdGVtPigpO1xuXG4gICAgY29uc3QgZmxhdHRlbiA9IChpdGVtTGlzdDogQVhQTWVudUl0ZW1bXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1MaXN0KSB7XG4gICAgICAgIGlmIChpdGVtLm5hbWUpIHtcbiAgICAgICAgICAvLyBDbG9uZSBpdGVtIHdpdGhvdXQgY2hpbGRyZW4gdG8gcmVidWlsZCBzdHJ1Y3R1cmVcbiAgICAgICAgICBpdGVtTWFwLnNldChpdGVtLm5hbWUsIHsgLi4uaXRlbSwgY2hpbGRyZW46IHVuZGVmaW5lZCB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgIGZsYXR0ZW4oaXRlbS5jaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZmxhdHRlbihpdGVtcyk7XG4gICAgcmV0dXJuIGl0ZW1NYXA7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdW5pcXVlIElEIGZvciB0cmVlIG5vZGVzXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlTm9kZUlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBub2RlLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMCl9YDtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4vLyNlbmRyZWdpb25cbiJdfQ==","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 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 this.toastService.warning('@application-management:menu-management.messages.move-error');\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 this.toastService.danger('@application-management:menu-management.messages.load-error');\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 this.toastService.success('@application-management:menu-management.messages.reorder-success');\n }\n catch (error) {\n console.error('Failed to sync tree changes:', error);\n this.toastService.danger('@application-management:menu-management.messages.sync-error');\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(`@application-management:menu-management.${scopeKey}.title`);\n }\n /**\n * Get page description\n */\n async getPageDescription() {\n return this.translationService.translateAsync('@application-management:menu-management.description');\n }\n /**\n * Get primary menu items (actions)\n */\n async getPrimaryMenuItems() {\n return [\n {\n title: await this.translationService.translateAsync('@application-management:menu-management.actions.add-root'),\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('@application-management:menu-management.actions.collapse'),\n icon: 'fa-light fa-minus-square',\n color: 'primary',\n command: { name: 'collapse' },\n },\n {\n title: await this.translationService.translateAsync('@application-management:menu-management.actions.expand'),\n icon: 'fa-light fa-plus-square',\n color: 'primary',\n command: { name: 'expand' },\n },\n {\n title: await this.translationService.translateAsync('@application-management:menu-management.actions.reset'),\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 confirmed = await this.dialogService.confirm('@application-management:menu-management.reset.title', '@application-management:menu-management.reset.message');\n if (!confirmed)\n return;\n try {\n // Reset customizations for current scope\n await this.menuManagementService.resetCustomizations(this.currentScope());\n this.toastService.success('@application-management:menu-management.messages.reset-success');\n }\n catch (error) {\n console.error('Failed to reset customizations:', error);\n this.toastService.danger('@application-management:menu-management.messages.reset-error');\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), '@application-management:menu-management.messages.show-success', '@application-management:menu-management.messages.show-error');\n }\n /**\n * Hide menu item\n */\n async hideMenuItem(nodeData) {\n await this.executeMenuAction(() => this.menuManagementService.hideMenuItem(this.currentScope(), nodeData.menuItem.name), '@application-management:menu-management.messages.hide-success', '@application-management:menu-management.messages.hide-error');\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 confirmed = await this.dialogService.confirm('@general:actions.delete.title', '@application-management:menu-management.delete.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 this.toastService.success('@application-management:menu-management.messages.delete-success');\n await this.loadMenuItems();\n }\n catch (error) {\n this.toastService.danger('@application-management:menu-management.messages.delete-error');\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 ? '@application-management:menu-management.edit-dialog.title'\n : '@application-management:menu-management.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 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('@application-management:menu-management.fields.name', (field) => {\n field.path('name');\n field.textBox({\n placeholder: '@application-management:menu-management.fields.name',\n validations: [{ rule: 'required' }],\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@application-management:menu-management.fields.text', (field) => {\n field.path('text');\n field.textBox({\n placeholder: '@application-management:menu-management.fields.text',\n validations: [{ rule: 'required' }],\n });\n })\n .formField('@application-management:menu-management.fields.icon', (field) => {\n field.path('icon');\n field.customWidget('icon-chooser', {});\n })\n .formField('@application-management:menu-management.fields.path', (field) => {\n field.path('path');\n field.textBox({\n placeholder: '@application-management:menu-management.fields.path',\n disabled: isEdit && nodeData?.metadata?.isBuiltIn,\n });\n })\n .formField('@application-management:menu-management.fields.description', (field) => {\n field.path('description');\n field.largeTextBox({\n placeholder: '@application-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 (parent?.name) {\n // Add custom item as child of parent\n await this.menuManagementService.addCustomMenuItem(this.currentScope(), newItem, parent.name);\n }\n else {\n // Add as root level item\n await this.menuManagementService.addCustomMenuItem(this.currentScope(), newItem, null);\n }\n }\n this.toastService.success('@application-management:menu-management.messages.save-success');\n await this.loadMenuItems();\n dialogRef.close();\n }\n catch (error) {\n this.toastService.danger('@application-management:menu-management.messages.save-error');\n }\n }\n /**\n * Execute a menu action with common error handling\n */\n async executeMenuAction(action, successMessage, errorMessage) {\n try {\n await action();\n this.toastService.success(successMessage);\n await this.loadMenuItems();\n }\n catch (error) {\n console.error('Menu action failed:', error);\n this.toastService.danger(errorMessage);\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXMMenuListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.4\", 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\\n mode=\\\"loading\\\"\\n icon=\\\"fa-light fa-spinner-third fa-spin\\\"\\n [title]=\\\"('@application-management:menu-management.loading.title' | translate | async) || 'Loading...'\\\"\\n [description]=\\\"\\n ('@application-management:menu-management.loading.description' | translate | async) || 'Please wait'\\n \\\"\\n />\\n } @else if (error()) {\\n <!-- Error State -->\\n <axp-state-message\\n mode=\\\"error\\\"\\n icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"('@application-management:menu-management.error.title' | translate | async) || 'Error'\\\"\\n [description]=\\\"error() || 'An error occurred'\\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@general:actions.retry.title' | translate | async\\\"\\n [look]=\\\"'outline'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"loadMenuItems()\\\"\\n >\\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\\n mode=\\\"empty\\\"\\n icon=\\\"fa-light fa-bars\\\"\\n [title]=\\\"('@application-management:menu-management.empty-state.title' | translate | async) || 'No menu items'\\\"\\n [description]=\\\"\\n ('@application-management:menu-management.empty-state.description' | translate | async) ||\\n 'Add a new menu item to get started'\\n \\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@application-management:menu-management.actions.add-root' | translate | async\\\"\\n [look]=\\\"'solid'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"addRootMenuItem()\\\"\\n >\\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\\n [(nodes)]=\\\"treeNodes\\\"\\n look=\\\"default\\\"\\n [itemTemplate]=\\\"itemTemplate\\\"\\n [showCheckbox]=\\\"false\\\"\\n [showIcons]=\\\"false\\\"\\n [showChildrenBadge]=\\\"false\\\"\\n [nodeHeight]=\\\"'normal'\\\"\\n [dragMode]=\\\"'handler'\\\"\\n (onBeforeDrop)=\\\"handleBeforeDrop($event)\\\"\\n (onItemsChange)=\\\"handleAfterDrop()\\\"\\n ></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\\n class=\\\"axm-menu-tree-item__wrapper\\\"\\n [class.axm-menu-tree-item__wrapper--hidden]=\\\"metadata.isHidden\\\"\\n [class.axm-menu-tree-item__wrapper--custom]=\\\"metadata.isCustom\\\"\\n >\\n <!-- Icon -->\\n @if (item.icon) {\\n <i class=\\\"axm-menu-tree-item__icon\\\" [class]=\\\"item.icon\\\"></i>\\n }\\n\\n <!-- Text or Info -->\\n @if (item.text) {\\n <span class=\\\"axm-menu-tree-item__text\\\">\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.path) {\\n <span class=\\\"axm-menu-tree-item__path\\\">\\n <i class=\\\"fa-light fa-link\\\"></i>\\n {{ item.path }}\\n </span>\\n } @else {\\n <span class=\\\"axm-menu-tree-item__divider\\\">\\n <i class=\\\"fa-light fa-minus\\\"></i>\\n {{ '@application-management:menu-management.badge.divider' | translate | async }}\\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 <ax-badge [text]=\\\"item.type ?? 'menu'\\\" color=\\\"primary\\\"></ax-badge>\\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\\n [text]=\\\"('@general:actions.edit.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('edit', nodeData); panel.close()\\\"\\n >\\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\\n [text]=\\\"('@application-management:menu-management.actions.show' | translate | async)!\\\"\\n (onClick)=\\\"onAction('show', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n } @else {\\n <ax-button-item\\n [text]=\\\"('@application-management:menu-management.actions.hide' | translate | async)!\\\"\\n (onClick)=\\\"onAction('hide', nodeData); panel.close()\\\"\\n >\\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\\n [text]=\\\"('@application-management:menu-management.actions.add-child' | translate | async)!\\\"\\n (onClick)=\\\"onAction('add-child', nodeData); panel.close()\\\"\\n >\\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\\n [color]=\\\"'danger'\\\"\\n [text]=\\\"('@general:actions.delete.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('delete', nodeData); panel.close()\\\"\\n >\\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 {{ '@application-management:menu-management.messages.no-name-info' | translate | async }}\\n </div>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n</ng-template>\\n\", 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__info-banner{display:flex;align-items:center;gap:.75rem;border-radius:.375rem;padding:1rem;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-list__info-banner i{font-size:1.125rem;line-height:1.75rem}.axm-menu-list-page .axm-menu-list__info-banner span{font-size:.875rem;line-height:1.25rem}.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__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__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;-moz-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\"], 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.4\", ngImport: i0, type: AXMMenuListComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axm-menu-list', standalone: true, 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\\n mode=\\\"loading\\\"\\n icon=\\\"fa-light fa-spinner-third fa-spin\\\"\\n [title]=\\\"('@application-management:menu-management.loading.title' | translate | async) || 'Loading...'\\\"\\n [description]=\\\"\\n ('@application-management:menu-management.loading.description' | translate | async) || 'Please wait'\\n \\\"\\n />\\n } @else if (error()) {\\n <!-- Error State -->\\n <axp-state-message\\n mode=\\\"error\\\"\\n icon=\\\"fa-light fa-circle-exclamation\\\"\\n [title]=\\\"('@application-management:menu-management.error.title' | translate | async) || 'Error'\\\"\\n [description]=\\\"error() || 'An error occurred'\\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@general:actions.retry.title' | translate | async\\\"\\n [look]=\\\"'outline'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"loadMenuItems()\\\"\\n >\\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\\n mode=\\\"empty\\\"\\n icon=\\\"fa-light fa-bars\\\"\\n [title]=\\\"('@application-management:menu-management.empty-state.title' | translate | async) || 'No menu items'\\\"\\n [description]=\\\"\\n ('@application-management:menu-management.empty-state.description' | translate | async) ||\\n 'Add a new menu item to get started'\\n \\\"\\n >\\n <ax-button\\n slot=\\\"actions\\\"\\n [text]=\\\"'@application-management:menu-management.actions.add-root' | translate | async\\\"\\n [look]=\\\"'solid'\\\"\\n [color]=\\\"'primary'\\\"\\n (onClick)=\\\"addRootMenuItem()\\\"\\n >\\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\\n [(nodes)]=\\\"treeNodes\\\"\\n look=\\\"default\\\"\\n [itemTemplate]=\\\"itemTemplate\\\"\\n [showCheckbox]=\\\"false\\\"\\n [showIcons]=\\\"false\\\"\\n [showChildrenBadge]=\\\"false\\\"\\n [nodeHeight]=\\\"'normal'\\\"\\n [dragMode]=\\\"'handler'\\\"\\n (onBeforeDrop)=\\\"handleBeforeDrop($event)\\\"\\n (onItemsChange)=\\\"handleAfterDrop()\\\"\\n ></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\\n class=\\\"axm-menu-tree-item__wrapper\\\"\\n [class.axm-menu-tree-item__wrapper--hidden]=\\\"metadata.isHidden\\\"\\n [class.axm-menu-tree-item__wrapper--custom]=\\\"metadata.isCustom\\\"\\n >\\n <!-- Icon -->\\n @if (item.icon) {\\n <i class=\\\"axm-menu-tree-item__icon\\\" [class]=\\\"item.icon\\\"></i>\\n }\\n\\n <!-- Text or Info -->\\n @if (item.text) {\\n <span class=\\\"axm-menu-tree-item__text\\\">\\n {{ item.text | translate | async }}\\n </span>\\n } @else if (item.path) {\\n <span class=\\\"axm-menu-tree-item__path\\\">\\n <i class=\\\"fa-light fa-link\\\"></i>\\n {{ item.path }}\\n </span>\\n } @else {\\n <span class=\\\"axm-menu-tree-item__divider\\\">\\n <i class=\\\"fa-light fa-minus\\\"></i>\\n {{ '@application-management:menu-management.badge.divider' | translate | async }}\\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 <ax-badge [text]=\\\"item.type ?? 'menu'\\\" color=\\\"primary\\\"></ax-badge>\\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\\n [text]=\\\"('@general:actions.edit.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('edit', nodeData); panel.close()\\\"\\n >\\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\\n [text]=\\\"('@application-management:menu-management.actions.show' | translate | async)!\\\"\\n (onClick)=\\\"onAction('show', nodeData); panel.close()\\\"\\n >\\n <ax-prefix>\\n <i class=\\\"fa-light fa-eye\\\"></i>\\n </ax-prefix>\\n </ax-button-item>\\n } @else {\\n <ax-button-item\\n [text]=\\\"('@application-management:menu-management.actions.hide' | translate | async)!\\\"\\n (onClick)=\\\"onAction('hide', nodeData); panel.close()\\\"\\n >\\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\\n [text]=\\\"('@application-management:menu-management.actions.add-child' | translate | async)!\\\"\\n (onClick)=\\\"onAction('add-child', nodeData); panel.close()\\\"\\n >\\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\\n [color]=\\\"'danger'\\\"\\n [text]=\\\"('@general:actions.delete.title' | translate | async)!\\\"\\n (onClick)=\\\"onAction('delete', nodeData); panel.close()\\\"\\n >\\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 {{ '@application-management:menu-management.messages.no-name-info' | translate | async }}\\n </div>\\n }\\n </ax-button-item-list>\\n </ax-dropdown-panel>\\n </ax-button>\\n </div>\\n</ng-template>\\n\", 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__info-banner{display:flex;align-items:center;gap:.75rem;border-radius:.375rem;padding:1rem;--tw-bg-opacity: 1;background-color:rgba(var(--ax-sys-color-primary-500),var(--tw-bg-opacity, 1));--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.axm-menu-list-page .axm-menu-list__info-banner i{font-size:1.125rem;line-height:1.75rem}.axm-menu-list-page .axm-menu-list__info-banner span{font-size:.875rem;line-height:1.25rem}.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__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__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;-moz-user-select:all;user-select:all}.axm-menu-list-page .axm-menu-tree-item__actions{margin-left:.5rem}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbW9kdWxlcy9hcHBsaWNhdGlvbi1tYW5hZ2VtZW50L3NyYy9saWIvZmVhdHVyZXMvbWVudS1tYW5hZ2VtZW50L3BhZ2VzL21lbnUtbGlzdC9tZW51LWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9tb2R1bGVzL2FwcGxpY2F0aW9uLW1hbmFnZW1lbnQvc3JjL2xpYi9mZWF0dXJlcy9tZW51LW1hbmFnZW1lbnQvcGFnZXMvbWVudS1saXN0L21lbnUtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFxQyxNQUFNLDBCQUEwQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJGLE9BQU8sRUFBd0MsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsd0JBQXdC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LENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0gsQ0FBQzs4R0FsZFUsb0JBQW9CO2tHQUFwQixvQkFBb0IsNEdBUnBCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLG9CQUFvQjthQUNsQztTQUNGLGdFQWlCMEIsZ0JBQWdCLHVGQzFFN0MsdzlOQWtNQSxvK0ZEOUpJLFlBQVksOEJBQ1osY0FBYyxvdUJBQ2QsaUJBQWlCLHFQQUNqQixzQkFBc0IsOEJBQ3RCLGdCQUFnQixxUUFDaEIsbUJBQW1CLCtCQUNuQixnQkFBZ0IsMFlBQ2hCLHNCQUFzQiw0REFDdEIsNEJBQTRCLGdpQkFDNUIsd0JBQXdCLDBIQUN4QixhQUFhOzsyRkFjSixvQkFBb0I7a0JBNUJoQyxTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsc0JBQXNCO3dCQUN0QixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixzQkFBc0I7d0JBQ3RCLDRCQUE0Qjt3QkFDNUIsd0JBQXdCO3dCQUN4QixhQUFhO3FCQUNkLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsc0JBQXNCO3lCQUNsQztxQkFDRixRQUNLLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCYWRnZU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9iYWRnZSc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGlhbG9nJztcbmltcG9ydCB7IEFYRHJvcGRvd25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcm9wZG93bi1idXR0b24nO1xuaW1wb3J0IHsgQVhUb2FzdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9hc3QnO1xuaW1wb3J0IHsgQVhUcmVlMkNvbXBvbmVudCwgQVhUcmVlQmVmb3JlRHJvcEV2ZW50LCBBWFRyZWVOb2RlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RyZWUyJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUsIEFYVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcbmltcG9ydCB7IEFYUE1lbnVJdGVtIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgQVhQQWN0aW9uTWVudUl0ZW0sIEFYUEV4ZWN1dGVDb21tYW5kLCBBWFBQbGF0Zm9ybVNjb3BlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUExheW91dEJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlcic7XG5pbXBvcnQgeyBBWFBTdGF0ZU1lc3NhZ2VDb21wb25lbnQsIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYUFBhZ2VMYXlvdXRCYXNlLCBBWFBQYWdlTGF5b3V0QmFzZUNvbXBvbmVudCwgQVhQUGFnZUxheW91dENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3ZpZXdzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBpbmplY3QsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBNZW51SXRlbUFjdGlvbiB9IGZyb20gJy4uLy4uL21lbnUtY3VzdG9taXphdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBBWFBNZW51TWFuYWdlbWVudFNlcnZpY2UsIEFYUE1lbnVUcmVlTm9kZURhdGEgfSBmcm9tICcuLi8uLi9tZW51LW1hbmFnZW1lbnQuc2VydmljZSc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgTWVudSBMaXN0IENvbXBvbmVudCAgIC0tLS1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhtLW1lbnUtbGlzdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhEZWNvcmF0b3JNb2R1bGUsXG4gICAgQVhEcm9wZG93bkJ1dHRvbk1vZHVsZSxcbiAgICBBWERyb3Bkb3duTW9kdWxlLFxuICAgIEFYVHJhbnNsYXRpb25Nb2R1bGUsXG4gICAgQVhUcmVlMkNvbXBvbmVudCxcbiAgICBBWFBQYWdlTGF5b3V0Q29tcG9uZW50LFxuICAgIEFYUFRoZW1lTGF5b3V0QmxvY2tDb21wb25lbnQsXG4gICAgQVhQU3RhdGVNZXNzYWdlQ29tcG9uZW50LFxuICAgIEFYQmFkZ2VNb2R1bGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZW51LWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFYUFBhZ2VMYXlvdXRCYXNlLFxuICAgICAgdXNlRXhpc3Rpbmc6IEFYTU1lbnVMaXN0Q29tcG9uZW50LFxuICAgIH0sXG4gIF0sXG4gIGhvc3Q6IHsgY2xhc3M6ICdheG0tbWVudS1saXN0LXBhZ2UnIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTU1lbnVMaXN0Q29tcG9uZW50IGV4dGVuZHMgQVhQUGFnZUxheW91dEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vI3JlZ2lvbiAtLS0tICAgRGVwZW5kZW5jaWVzICAgLS0tLVxuXG4gIHByaXZhdGUgbWVudU1hbmFnZW1lbnRTZXJ2aWNlID0gaW5qZWN0KEFYUE1lbnVNYW5hZ2VtZW50U2VydmljZSk7XG4gIHByaXZhdGUgbGF5b3V0QnVpbGRlciA9IGluamVjdChBWFBMYXlvdXRCdWlsZGVyU2VydmljZSk7XG4gIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KEFYRGlhbG9nU2VydmljZSk7XG4gIHByb3RlY3RlZCBvdmVycmlkZSB0b2FzdFNlcnZpY2UgPSBpbmplY3QoQVhUb2FzdFNlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZSA9IGluamVjdChBWFRyYW5zbGF0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgQ29tcG9uZW50IFN0YXRlICAgLS0tLVxuXG4gIHByb3RlY3RlZCB0cmVlID0gdmlld0NoaWxkKEFYVHJlZTJDb21wb25lbnQpO1xuICBwcm90ZWN0ZWQgdHJlZU5vZGVzID0gc2lnbmFsPEFYVHJlZU5vZGVbXT4oW10pO1xuICBwcm90ZWN0ZWQgaXNMb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGVycm9yID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcm90ZWN0ZWQgY3VycmVudFNjb3BlID0gc2lnbmFsPEFYUFBsYXRmb3JtU2NvcGU+KEFYUFBsYXRmb3JtU2NvcGUuVXNlcik7XG4gIHByaXZhdGUgaXNTeW5jaW5nID0gZmFsc2U7IC8vIFByZXZlbnQgY29uY3VycmVudCBzeW5jIG9wZXJhdGlvbnNcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7IC8vIEZvciBzdWJzY3JpcHRpb24gY2xlYW51cFxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgTGlmZWN5Y2xlICAgLS0tLVxuXG4gIG92ZXJyaWRlIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBHZXQgc2NvcGUgZnJvbSByb3V0ZSAod2l0aCBtZW1vcnkgbGVhayBwcmV2ZW50aW9uKVxuICAgIHRoaXMucm91dGUucGFyYW1zLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYXN5bmMgKHBhcmFtcykgPT4ge1xuICAgICAgY29uc3Qgc2NvcGUgPSBwYXJhbXNbJ3Njb3BlJ10gYXMgQVhQUGxhdGZvcm1TY29wZTtcbiAgICAgIGlmIChzY29wZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRTY29wZS5zZXQoc2NvcGUpO1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRNZW51SXRlbXMoKTtcbiAgICAgICAgdGhpcy5yZWNvbXB1dGUoKTsgLy8gVXBkYXRlIHBhZ2UgaGVhZGVyIGFmdGVyIGxvYWRpbmdcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgRXZlbnQgSGFuZGxlcnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBiZWZvcmUgZHJvcCB2YWxpZGF0aW9uXG4gICAqL1xuICBoYW5kbGVCZWZvcmVEcm9wKGU6IEFYVHJlZUJlZm9yZURyb3BFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IGUuY3VycmVudFBhcmVudD8uZGF0YSBhcyBBWFBNZW51VHJlZU5vZGVEYXRhO1xuXG4gICAgLy8gUHJldmVudCBkcm9wcGluZyBpbnRvIGl0ZW1zIHdpdGggcGF0aHMgKGxlYWYgbm9kZXMpXG4gICAgaWYgKHRhcmdldFBhcmVudD8ubWVudUl0ZW0/LnBhdGgpIHtcbiAgICAgIGUuY2FuY2VsZWQgPSB0cnVlO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uud2FybmluZygnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLm1vdmUtZXJyb3InKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBDaXJjdWxhciByZWZlcmVuY2UgdmFsaWRhdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSB0cmVlIGNvbXBvbmVudCBpdHNlbGZcbiAgICAvLyBBZGRpdGlvbmFsIHZhbGlkYXRpb24gY2FuIGJlIGFkZGVkIGhlcmUgaWYgbmVlZGVkIGJhc2VkIG9uIGJ1c2luZXNzIHJ1bGVzXG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFmdGVyIGRyb3AgZXZlbnQgdG8gc3luYyBjaGFuZ2VzXG4gICAqL1xuICBhc3luYyBoYW5kbGVBZnRlckRyb3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zeW5jVHJlZUNoYW5nZXMoKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgRGF0YSBMb2FkaW5nICAgLS0tLVxuXG4gIC8qKlxuICAgKiBMb2FkIG1lbnUgdHJlZSBmb3IgY3VycmVudCBzY29wZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGxvYWRNZW51SXRlbXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KCcnKTtcblxuICAgICAgY29uc3QgdHJlZU5vZGVzID0gYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UuZ2V0TWVudVRyZWUodGhpcy5jdXJyZW50U2NvcGUoKSk7XG4gICAgICB0aGlzLnRyZWVOb2Rlcy5zZXQodHJlZU5vZGVzKTtcbiAgICAgIHRoaXMucmVjb21wdXRlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuZXJyb3Iuc2V0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ0ZhaWxlZCB0byBsb2FkIG1lbnUgaXRlbXMnKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcignQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLmxvYWQtZXJyb3InKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3luYyB0cmVlIGNoYW5nZXMgdG8gYmFja2VuZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzeW5jVHJlZUNoYW5nZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUHJldmVudCBjb25jdXJyZW50IHN5bmMgb3BlcmF0aW9uc1xuICAgIGlmICh0aGlzLmlzU3luY2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmlzU3luY2luZyA9IHRydWU7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMudHJlZU5vZGVzKCk7XG4gICAgICBjb25zdCBzY29wZSA9IHRoaXMuY3VycmVudFNjb3BlKCk7XG5cbiAgICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5zeW5jVHJlZUNoYW5nZXMoc2NvcGUsIG5vZGVzKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnN1Y2Nlc3MoJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5yZW9yZGVyLXN1Y2Nlc3MnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN5bmMgdHJlZSBjaGFuZ2VzOicsIGVycm9yKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcignQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLnN5bmMtZXJyb3InKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1N5bmNpbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFBhZ2UgTGF5b3V0IEludGVyZmFjZSAgIC0tLS1cblxuICAvKipcbiAgICogR2V0IHBhZ2UgdGl0bGVcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VUaXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHNjb3BlTmFtZSA9IHRoaXMuY3VycmVudFNjb3BlKCk7XG4gICAgY29uc3Qgc2NvcGVLZXkgPSBzY29wZU5hbWUgPT09IEFYUFBsYXRmb3JtU2NvcGUuVXNlciA/ICd1c2VyJyA6ICd0ZW5hbnQnO1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYyhgQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LiR7c2NvcGVLZXl9LnRpdGxlYCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHBhZ2UgZGVzY3JpcHRpb25cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGdldFBhZ2VEZXNjcmlwdGlvbigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmRlc2NyaXB0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHByaW1hcnkgbWVudSBpdGVtcyAoYWN0aW9ucylcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGdldFByaW1hcnlNZW51SXRlbXMoKTogUHJvbWlzZTxBWFBBY3Rpb25NZW51SXRlbVtdPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgdGl0bGU6IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKCdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5hZGQtcm9vdCcpLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGx1cycsXG4gICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgIGNvbW1hbmQ6IHsgbmFtZTogJ2FkZC1yb290JyB9LFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZWNvbmRhcnkgbWVudSBpdGVtc1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZ2V0U2Vjb25kYXJ5TWVudUl0ZW1zKCk6IFByb21pc2U8QVhQQWN0aW9uTWVudUl0ZW1bXT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIHRpdGxlOiBhd2FpdCB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGVBc3luYygnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuY29sbGFwc2UnKSxcbiAgICAgICAgaWNvbjogJ2ZhLWxpZ2h0IGZhLW1pbnVzLXNxdWFyZScsXG4gICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgIGNvbW1hbmQ6IHsgbmFtZTogJ2NvbGxhcHNlJyB9LFxuICAgICAgfSxcblxuICAgICAge1xuICAgICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5hY3Rpb25zLmV4cGFuZCcpLFxuICAgICAgICBpY29uOiAnZmEtbGlnaHQgZmEtcGx1cy1zcXVhcmUnLFxuICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgICBjb21tYW5kOiB7IG5hbWU6ICdleHBhbmQnIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0aXRsZTogYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5hY3Rpb25zLnJlc2V0JyksXG4gICAgICAgIGljb246ICdmYS1saWdodCBmYS1yb3RhdGUtbGVmdCcsXG4gICAgICAgIGNvbG9yOiAnZGFuZ2VyJyxcbiAgICAgICAgY29tbWFuZDogeyBuYW1lOiAncmVzZXQnIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZSBjb21tYW5kcyBmcm9tIHBhZ2UgYWN0aW9uc1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZShjb21tYW5kOiBBWFBFeGVjdXRlQ29tbWFuZCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAoY29tbWFuZC5uYW1lKSB7XG4gICAgICBjYXNlICdhZGQtcm9vdCc6XG4gICAgICAgIGF3YWl0IHRoaXMuYWRkUm9vdE1lbnVJdGVtKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29sbGFwc2UnOlxuICAgICAgICB0aGlzLnRyZWUoKT8uY29sbGFwc2VBbGwoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdleHBhbmQnOlxuICAgICAgICB0aGlzLnRyZWUoKT8uZXhwYW5kQWxsKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncmVzZXQnOlxuICAgICAgICBhd2FpdCB0aGlzLnJlc2V0Q3VzdG9taXphdGlvbnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBBY3Rpb24gSGFuZGxlcnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBtZW51IGl0ZW0gYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgb25BY3Rpb24oYWN0aW9uOiBBWFBNZW51SXRlbUFjdGlvbiwgbm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgY2FzZSAnc2hvdyc6XG4gICAgICAgIGF3YWl0IHRoaXMuc2hvd01lbnVJdGVtKG5vZGVEYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoaWRlJzpcbiAgICAgICAgYXdhaXQgdGhpcy5oaWRlTWVudUl0ZW0obm9kZURhdGEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICBhd2FpdCB0aGlzLmVkaXRNZW51SXRlbShub2RlRGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVNZW51SXRlbShub2RlRGF0YSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYWRkLWNoaWxkJzpcbiAgICAgICAgYXdhaXQgdGhpcy5hZGRDaGlsZE1lbnVJdGVtKG5vZGVEYXRhKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgcm9vdCBtZW51IGl0ZW1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBhZGRSb290TWVudUl0ZW0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zaG93TWVudUl0ZW1EaWFsb2cobnVsbCwgbnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIG5ldyBjaGlsZCBtZW51IGl0ZW1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBhZGRDaGlsZE1lbnVJdGVtKHBhcmVudE5vZGVEYXRhOiBBWFBNZW51VHJlZU5vZGVEYXRhKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5zaG93TWVudUl0ZW1EaWFsb2cobnVsbCwgcGFyZW50Tm9kZURhdGEubWVudUl0ZW0ubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgY3VzdG9taXphdGlvbnNcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyByZXNldEN1c3RvbWl6YXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbmZpcm1lZCA9IGF3YWl0IHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKFxuICAgICAgJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5yZXNldC50aXRsZScsXG4gICAgICAnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LnJlc2V0Lm1lc3NhZ2UnLFxuICAgICk7XG5cbiAgICBpZiAoIWNvbmZpcm1lZCkgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc2V0IGN1c3RvbWl6YXRpb25zIGZvciBjdXJyZW50IHNjb3BlXG4gICAgICBhd2FpdCB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5yZXNldEN1c3RvbWl6YXRpb25zKHRoaXMuY3VycmVudFNjb3BlKCkpO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcygnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLnJlc2V0LXN1Y2Nlc3MnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlc2V0IGN1c3RvbWl6YXRpb25zOicsIGVycm9yKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcignQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLnJlc2V0LWVycm9yJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFJlbG9hZCBhbnl3YXkgdG8gc2hvdyBjdXJyZW50IHN0YXRlXG4gICAgICBhd2FpdCB0aGlzLmxvYWRNZW51SXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIE1lbnUgSXRlbSBBY3Rpb25zICAgLS0tLVxuXG4gIC8qKlxuICAgKiBTaG93IG1lbnUgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzaG93TWVudUl0ZW0obm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVNZW51QWN0aW9uKFxuICAgICAgKCkgPT4gdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2Uuc2hvd01lbnVJdGVtKHRoaXMuY3VycmVudFNjb3BlKCksIG5vZGVEYXRhLm1lbnVJdGVtLm5hbWUhKSxcbiAgICAgICdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuc2hvdy1zdWNjZXNzJyxcbiAgICAgICdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuc2hvdy1lcnJvcicsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIG1lbnUgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBoaWRlTWVudUl0ZW0obm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGVNZW51QWN0aW9uKFxuICAgICAgKCkgPT4gdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UuaGlkZU1lbnVJdGVtKHRoaXMuY3VycmVudFNjb3BlKCksIG5vZGVEYXRhLm1lbnVJdGVtLm5hbWUhKSxcbiAgICAgICdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuaGlkZS1zdWNjZXNzJyxcbiAgICAgICdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuaGlkZS1lcnJvcicsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFZGl0IG1lbnUgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBlZGl0TWVudUl0ZW0obm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNob3dNZW51SXRlbURpYWxvZyhub2RlRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGN1c3RvbSBtZW51IGl0ZW1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVsZXRlTWVudUl0ZW0obm9kZURhdGE6IEFYUE1lbnVUcmVlTm9kZURhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLmRpYWxvZ1NlcnZpY2UuY29uZmlybShcbiAgICAgICdAZ2VuZXJhbDphY3Rpb25zLmRlbGV0ZS50aXRsZScsXG4gICAgICAnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmRlbGV0ZS5tZXNzYWdlJyxcbiAgICApO1xuXG4gICAgaWYgKCFjb25maXJtZWQpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBpdGVtID0gbm9kZURhdGEubWVudUl0ZW07XG4gICAgICBpZiAoIWl0ZW0ubmFtZSkgcmV0dXJuO1xuXG4gICAgICBhd2FpdCB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5kZWxldGVDdXN0b21NZW51SXRlbSh0aGlzLmN1cnJlbnRTY29wZSgpLCBpdGVtLm5hbWUpO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcygnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLmRlbGV0ZS1zdWNjZXNzJyk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRNZW51SXRlbXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZGFuZ2VyKCdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuZGVsZXRlLWVycm9yJyk7XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBEaWFsb2cgSGVscGVycyAgIC0tLS1cblxuICAvKipcbiAgICogU2hvdyBtZW51IGl0ZW0gZGlhbG9nIChhZGQvZWRpdClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2hvd01lbnVJdGVtRGlhbG9nKFxuICAgIG5vZGVEYXRhOiBBWFBNZW51VHJlZU5vZGVEYXRhIHwgbnVsbCxcbiAgICBwYXJlbnROYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaXRlbSA9IG5vZGVEYXRhPy5tZW51SXRlbTtcbiAgICBjb25zdCBpc0VkaXQgPSAhIWl0ZW07XG4gICAgY29uc3QgdGl0bGUgPSBpc0VkaXRcbiAgICAgID8gJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5lZGl0LWRpYWxvZy50aXRsZSdcbiAgICAgIDogJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5hZGQtZGlhbG9nLnRpdGxlJztcblxuICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICBuYW1lOiBpdGVtPy5uYW1lIHx8ICcnLFxuICAgICAgdGV4dDogaXRlbT8udGV4dCB8fCAnJyxcbiAgICAgIHR5cGU6IGl0ZW0/LnR5cGUgfHwgJ21lbnUnLFxuICAgICAgaWNvbjogaXRlbT8uaWNvbiB8fCAnJyxcbiAgICAgIHBhdGg6IGl0ZW0/LnBhdGggfHwgJycsXG4gICAgICBkZXNjcmlwdGlvbjogaXRlbT8uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgfTtcblxuICAgIGNvbnN0IGRpYWxvZ1JlZjogYW55ID0gYXdhaXQgdGhpcy5sYXlvdXRCdWlsZGVyXG4gICAgICAuY3JlYXRlKClcbiAgICAgIC5kaWFsb2coKGRpYWxvZzogYW55KSA9PiB7XG4gICAgICAgIGRpYWxvZ1xuICAgICAgICAgIC5zZXRUaXRsZSh0aXRsZSlcbiAgICAgICAgICAuc2V0Q29udGV4dChjb250ZXh0KVxuICAgICAgICAgIC5jb250ZW50KChmbGV4OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGZsZXhcbiAgICAgICAgICAgICAgLnNldERpcmVjdGlvbignY29sdW1uJylcbiAgICAgICAgICAgICAgLmZvcm1GaWVsZCgnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy5uYW1lJywgKGZpZWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBmaWVsZC5wYXRoKCduYW1lJyk7XG4gICAgICAgICAgICAgICAgZmllbGQudGV4dEJveCh7XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMubmFtZScsXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uczogW3sgcnVsZTogJ3JlcXVpcmVkJyB9XSxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpc0VkaXQgJiYgbm9kZURhdGE/Lm1ldGFkYXRhPy5pc0J1aWx0SW4sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMudGV4dCcsIChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQucGF0aCgndGV4dCcpO1xuICAgICAgICAgICAgICAgIGZpZWxkLnRleHRCb3goe1xuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLnRleHQnLFxuICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbnM6IFt7IHJ1bGU6ICdyZXF1aXJlZCcgfV0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMuaWNvbicsIChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQucGF0aCgnaWNvbicpO1xuICAgICAgICAgICAgICAgIGZpZWxkLmN1c3RvbVdpZGdldCgnaWNvbi1jaG9vc2VyJywge30pO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuZm9ybUZpZWxkKCdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZmllbGRzLnBhdGgnLCAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ3BhdGgnKTtcbiAgICAgICAgICAgICAgICBmaWVsZC50ZXh0Qm94KHtcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy5wYXRoJyxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBpc0VkaXQgJiYgbm9kZURhdGE/Lm1ldGFkYXRhPy5pc0J1aWx0SW4sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5mb3JtRmllbGQoJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5maWVsZHMuZGVzY3JpcHRpb24nLCAoZmllbGQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGZpZWxkLnBhdGgoJ2Rlc2NyaXB0aW9uJyk7XG4gICAgICAgICAgICAgICAgZmllbGQubGFyZ2VUZXh0Qm94KHtcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmZpZWxkcy5kZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAgICAgICByb3dzOiAzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5zZXRBY3Rpb25zKChhY3Rpb25zOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGFjdGlvbnMuY2FuY2VsKCdAZ2VuZXJhbDphY3Rpb25zLmNhbmNlbC50aXRsZScpLnN1Ym1pdCgnQGdlbmVyYWw6YWN0aW9ucy5zYXZlLnRpdGxlJyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgLnNob3coKTtcblxuICAgIGNvbnN0IGFjdGlvbiA9IGRpYWxvZ1JlZi5hY3Rpb24oKTtcbiAgICBpZiAoYWN0aW9uID09PSAnY2FuY2VsJykge1xuICAgICAgZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybURhdGEgPSBkaWFsb2dSZWYuY29udGV4dCgpIGFzIFBhcnRpYWw8QVhQTWVudUl0ZW0+O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChpc0VkaXQgJiYgaXRlbT8ubmFtZSkge1xuICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgaXRlbVxuICAgICAgICBpZiAobm9kZURhdGE/Lm1ldGFkYXRhPy5pc0N1c3RvbSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubWVudU1hbmFnZW1lbnRTZXJ2aWNlLnVwZGF0ZUN1c3RvbU1lbnVJdGVtKFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2NvcGUoKSxcbiAgICAgICAgICAgIGl0ZW0ubmFtZSxcbiAgICAgICAgICAgIGZvcm1EYXRhIGFzIEFYUE1lbnVJdGVtLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UudXBkYXRlTWVudVByb3BlcnRpZXModGhpcy5jdXJyZW50U2NvcGUoKSwgaXRlbS5uYW1lLCBmb3JtRGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFkZCBuZXcgY3VzdG9tIGl0ZW1cbiAgICAgICAgY29uc3QgbmV3SXRlbTogQVhQTWVudUl0ZW0gPSB7XG4gICAgICAgICAgbmFtZTogZm9ybURhdGEubmFtZSEsXG4gICAgICAgICAgdGV4dDogZm9ybURhdGEudGV4dCEsXG4gICAgICAgICAgaWNvbjogZm9ybURhdGEuaWNvbixcbiAgICAgICAgICBwYXRoOiBmb3JtRGF0YS5wYXRoLFxuICAgICAgICAgIHByaW9yaXR5OiBmb3JtRGF0YS5wcmlvcml0eSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZm9ybURhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSWYgcGFyZW50IGlzIHNwZWNpZmllZCwgYWRkIGFzIGNoaWxkXG4gICAgICAgIGlmIChwYXJlbnQ/Lm5hbWUpIHtcbiAgICAgICAgICAvLyBBZGQgY3VzdG9tIGl0ZW0gYXMgY2hpbGQgb2YgcGFyZW50XG4gICAgICAgICAgYXdhaXQgdGhpcy5tZW51TWFuYWdlbWVudFNlcnZpY2UuYWRkQ3VzdG9tTWVudUl0ZW0odGhpcy5jdXJyZW50U2NvcGUoKSwgbmV3SXRlbSwgcGFyZW50Lm5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFkZCBhcyByb290IGxldmVsIGl0ZW1cbiAgICAgICAgICBhd2FpdCB0aGlzLm1lbnVNYW5hZ2VtZW50U2VydmljZS5hZGRDdXN0b21NZW51SXRlbSh0aGlzLmN1cnJlbnRTY29wZSgpLCBuZXdJdGVtLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5zdWNjZXNzKCdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubWVzc2FnZXMuc2F2ZS1zdWNjZXNzJyk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRNZW51SXRlbXMoKTtcbiAgICAgIGRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5kYW5nZXIoJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5tZXNzYWdlcy5zYXZlLWVycm9yJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBtZW51IGFjdGlvbiB3aXRoIGNvbW1vbiBlcnJvciBoYW5kbGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlTWVudUFjdGlvbihcbiAgICBhY3Rpb246ICgpID0+IFByb21pc2U8dm9pZD4sXG4gICAgc3VjY2Vzc01lc3NhZ2U6IHN0cmluZyxcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFjdGlvbigpO1xuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc3VjY2VzcyhzdWNjZXNzTWVzc2FnZSk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRNZW51SXRlbXMoKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignTWVudSBhY3Rpb24gZmFpbGVkOicsIGVycm9yKTtcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmRhbmdlcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuXG4vLyNlbmRyZWdpb25cbiIsIjxheHAtcGFnZS1sYXlvdXQ+XG4gIDxheHAtcGFnZS1jb250ZW50PlxuICAgIEBpZiAoaXNMb2FkaW5nKCkpIHtcbiAgICAgIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cbiAgICAgIDxheHAtc3RhdGUtbWVzc2FnZVxuICAgICAgICBtb2RlPVwibG9hZGluZ1wiXG4gICAgICAgIGljb249XCJmYS1saWdodCBmYS1zcGlubmVyLXRoaXJkIGZhLXNwaW5cIlxuICAgICAgICBbdGl0bGVdPVwiKCdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQubG9hZGluZy50aXRsZScgfCB0cmFuc2xhdGUgfCBhc3luYykgfHwgJ0xvYWRpbmcuLi4nXCJcbiAgICAgICAgW2Rlc2NyaXB0aW9uXT1cIlxuICAgICAgICAgICgnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmxvYWRpbmcuZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlIHwgYXN5bmMpIHx8ICdQbGVhc2Ugd2FpdCdcbiAgICAgICAgXCJcbiAgICAgIC8+XG4gICAgfSBAZWxzZSBpZiAoZXJyb3IoKSkge1xuICAgICAgPCEtLSBFcnJvciBTdGF0ZSAtLT5cbiAgICAgIDxheHAtc3RhdGUtbWVzc2FnZVxuICAgICAgICBtb2RlPVwiZXJyb3JcIlxuICAgICAgICBpY29uPVwiZmEtbGlnaHQgZmEtY2lyY2xlLWV4Y2xhbWF0aW9uXCJcbiAgICAgICAgW3RpdGxlXT1cIignQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmVycm9yLnRpdGxlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSB8fCAnRXJyb3InXCJcbiAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImVycm9yKCkgfHwgJ0FuIGVycm9yIG9jY3VycmVkJ1wiXG4gICAgICA+XG4gICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICBzbG90PVwiYWN0aW9uc1wiXG4gICAgICAgICAgW3RleHRdPVwiJ0BnZW5lcmFsOmFjdGlvbnMucmV0cnkudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgIFtsb29rXT1cIidvdXRsaW5lJ1wiXG4gICAgICAgICAgW2NvbG9yXT1cIidwcmltYXJ5J1wiXG4gICAgICAgICAgKG9uQ2xpY2spPVwibG9hZE1lbnVJdGVtcygpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtcm90YXRlLWxlZnRcIj48L2k+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgPC9heHAtc3RhdGUtbWVzc2FnZT5cbiAgICB9IEBlbHNlIGlmICh0cmVlTm9kZXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIDwhLS0gRW1wdHkgU3RhdGUgLS0+XG4gICAgICA8YXhwLXN0YXRlLW1lc3NhZ2VcbiAgICAgICAgbW9kZT1cImVtcHR5XCJcbiAgICAgICAgaWNvbj1cImZhLWxpZ2h0IGZhLWJhcnNcIlxuICAgICAgICBbdGl0bGVdPVwiKCdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuZW1wdHktc3RhdGUudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIHx8ICdObyBtZW51IGl0ZW1zJ1wiXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCJcbiAgICAgICAgICAoJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5lbXB0eS1zdGF0ZS5kZXNjcmlwdGlvbicgfCB0cmFuc2xhdGUgfCBhc3luYykgfHxcbiAgICAgICAgICAnQWRkIGEgbmV3IG1lbnUgaXRlbSB0byBnZXQgc3RhcnRlZCdcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGF4LWJ1dHRvblxuICAgICAgICAgIHNsb3Q9XCJhY3Rpb25zXCJcbiAgICAgICAgICBbdGV4dF09XCInQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuYWRkLXJvb3QnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICAgIFtsb29rXT1cIidzb2xpZCdcIlxuICAgICAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIlxuICAgICAgICAgIChvbkNsaWNrKT1cImFkZFJvb3RNZW51SXRlbSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtcGx1c1wiPjwvaT5cbiAgICAgICAgPC9heC1idXR0b24+XG4gICAgICA8L2F4cC1zdGF0ZS1tZXNzYWdlPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPCEtLSBNZW51IFRyZWUgQ29udGVudCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJheG0tbWVudS1saXN0X19jb250YWluZXJcIj5cbiAgICAgICAgPCEtLSBNZW51IFRyZWUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheG0tbWVudS1saXN0X190cmVlXCI+XG4gICAgICAgICAgPGF4LXRyZWUyXG4gICAgICAgICAgICBbKG5vZGVzKV09XCJ0cmVlTm9kZXNcIlxuICAgICAgICAgICAgbG9vaz1cImRlZmF1bHRcIlxuICAgICAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgW3Nob3dDaGVja2JveF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbc2hvd0ljb25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtzaG93Q2hpbGRyZW5CYWRnZV09XCJmYWxzZVwiXG4gICAgICAgICAgICBbbm9kZUhlaWdodF09XCInbm9ybWFsJ1wiXG4gICAgICAgICAgICBbZHJhZ01vZGVdPVwiJ2hhbmRsZXInXCJcbiAgICAgICAgICAgIChvbkJlZm9yZURyb3ApPVwiaGFuZGxlQmVmb3JlRHJvcCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvbkl0ZW1zQ2hhbmdlKT1cImhhbmRsZUFmdGVyRHJvcCgpXCJcbiAgICAgICAgICA+PC9heC10cmVlMj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvYXhwLXBhZ2UtY29udGVudD5cbjwvYXhwLXBhZ2UtbGF5b3V0PlxuXG48IS0tIEN1c3RvbSBJdGVtIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNpdGVtVGVtcGxhdGUgbGV0LW5vZGU9XCJub2RlXCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgQGxldCBub2RlRGF0YSA9IG5vZGUuZGF0YTtcbiAgQGxldCBpdGVtID0gbm9kZURhdGEubWVudUl0ZW07XG4gIEBsZXQgbWV0YWRhdGEgPSBub2RlRGF0YS5tZXRhZGF0YTtcbiAgPGRpdlxuICAgIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX193cmFwcGVyXCJcbiAgICBbY2xhc3MuYXhtLW1lbnUtdHJlZS1pdGVtX193cmFwcGVyLS1oaWRkZW5dPVwibWV0YWRhdGEuaXNIaWRkZW5cIlxuICAgIFtjbGFzcy5heG0tbWVudS10cmVlLWl0ZW1fX3dyYXBwZXItLWN1c3RvbV09XCJtZXRhZGF0YS5pc0N1c3RvbVwiXG4gID5cbiAgICA8IS0tIEljb24gLS0+XG4gICAgQGlmIChpdGVtLmljb24pIHtcbiAgICAgIDxpIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19pY29uXCIgW2NsYXNzXT1cIml0ZW0uaWNvblwiPjwvaT5cbiAgICB9XG5cbiAgICA8IS0tIFRleHQgb3IgSW5mbyAtLT5cbiAgICBAaWYgKGl0ZW0udGV4dCkge1xuICAgICAgPHNwYW4gY2xhc3M9XCJheG0tbWVudS10cmVlLWl0ZW1fX3RleHRcIj5cbiAgICAgICAge3sgaXRlbS50ZXh0IHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9IEBlbHNlIGlmIChpdGVtLnBhdGgpIHtcbiAgICAgIDxzcGFuIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19wYXRoXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtbGlua1wiPjwvaT5cbiAgICAgICAge3sgaXRlbS5wYXRoIH19XG4gICAgICA8L3NwYW4+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8c3BhbiBjbGFzcz1cImF4bS1tZW51LXRyZWUtaXRlbV9fZGl2aWRlclwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLW1pbnVzXCI+PC9pPlxuICAgICAgICB7eyAnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmJhZGdlLmRpdmlkZXInIHwgdHJhbnNsYXRlIHwgYXN5bmMgfX1cbiAgICAgIDwvc3Bhbj5cbiAgICB9XG5cbiAgICA8IS0tIE1lbnUgTmFtZS9LZXkgLS0+XG4gICAgQGlmIChpdGVtLm5hbWUpIHtcbiAgICAgIDxjb2RlIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19uYW1lXCI+e3sgaXRlbS5uYW1lIH19PC9jb2RlPlxuICAgIH1cblxuICAgIDxheC1iYWRnZSBbdGV4dF09XCJpdGVtLnR5cGUgPz8gJ21lbnUnXCIgY29sb3I9XCJwcmltYXJ5XCI+PC9heC1iYWRnZT5cblxuICAgIDwhLS0gQWN0aW9ucyBEcm9wZG93biAtLT5cbiAgICA8YXgtYnV0dG9uIGNsYXNzPVwiYXhtLW1lbnUtdHJlZS1pdGVtX19hY3Rpb25zXCIgW2xvb2tdPVwiJ2JsYW5rJ1wiIFtzaXplXT1cIidzbSdcIiBbaWNvbk9ubHldPVwidHJ1ZVwiPlxuICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1lbGxpcHNpcy12ZXJ0aWNhbFwiPjwvaT5cbiAgICAgIDwvYXgtcHJlZml4PlxuXG4gICAgICA8YXgtZHJvcGRvd24tcGFuZWwgI3BhbmVsPlxuICAgICAgICA8YXgtYnV0dG9uLWl0ZW0tbGlzdD5cbiAgICAgICAgICA8IS0tIEVkaXQgKG9ubHkgZm9yIGl0ZW1zIHdpdGggbmFtZXMpIC0tPlxuICAgICAgICAgIEBpZiAoaXRlbS5uYW1lKSB7XG4gICAgICAgICAgICA8YXgtYnV0dG9uLWl0ZW1cbiAgICAgICAgICAgICAgW3RleHRdPVwiKCdAZ2VuZXJhbDphY3Rpb25zLmVkaXQudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdlZGl0Jywgbm9kZURhdGEpOyBwYW5lbC5jbG9zZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWVkaXRcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIFNob3cvSGlkZSAob25seSBmb3IgaXRlbXMgd2l0aCBuYW1lcykgLS0+XG4gICAgICAgICAgQGlmIChpdGVtLm5hbWUgJiYgbWV0YWRhdGEuaXNCdWlsdEluKSB7XG4gICAgICAgICAgICBAaWYgKG1ldGFkYXRhLmlzSGlkZGVuKSB7XG4gICAgICAgICAgICAgIDxheC1idXR0b24taXRlbVxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIignQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50LmFjdGlvbnMuc2hvdycgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJvbkFjdGlvbignc2hvdycsIG5vZGVEYXRhKTsgcGFuZWwuY2xvc2UoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1leWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiKCdAYXBwbGljYXRpb24tbWFuYWdlbWVudDptZW51LW1hbmFnZW1lbnQuYWN0aW9ucy5oaWRlJyB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdoaWRlJywgbm9kZURhdGEpOyBwYW5lbC5jbG9zZSgpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLWV5ZS1zbGFzaFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBAaWYgKCFpdGVtLnBhdGggJiYgKGl0ZW0udHlwZSA9PT0gJ21lbnUnIHx8ICFpdGVtLnR5cGUpKSB7XG4gICAgICAgICAgICA8IS0tIEFkZCBDaGlsZCAtLT5cbiAgICAgICAgICAgIDxheC1idXR0b24taXRlbVxuICAgICAgICAgICAgICBbdGV4dF09XCIoJ0BhcHBsaWNhdGlvbi1tYW5hZ2VtZW50Om1lbnUtbWFuYWdlbWVudC5hY3Rpb25zLmFkZC1jaGlsZCcgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25BY3Rpb24oJ2FkZC1jaGlsZCcsIG5vZGVEYXRhKTsgcGFuZWwuY2xvc2UoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS1wbHVzXCI+PC9pPlxuICAgICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uLWl0ZW0+XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgPCEtLSBEZWxldGUgKG9ubHkgZm9yIGN1c3RvbSBpdGVtcyB3aXRoIG5hbWVzKSAtLT5cbiAgICAgICAgICBAaWYgKGl0ZW0ubmFtZSAmJiBtZXRhZGF0YS5pc0N1c3RvbSkge1xuICAgICAgICAgICAgPGF4LWRpdmlkZXI+PC9heC1kaXZpZGVyPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbi1pdGVtXG4gICAgICAgICAgICAgIFtjb2xvcl09XCInZGFuZ2VyJ1wiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIignQGdlbmVyYWw6YWN0aW9ucy5kZWxldGUudGl0bGUnIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uQWN0aW9uKCdkZWxldGUnLCBub2RlRGF0YSk7IHBhbmVsLmNsb3NlKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtdHJhc2hcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPC9heC1idXR0b24taXRlbT5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8IS0tIEluZm8gbWVzc2FnZSBmb3IgaXRlbXMgd2l0aG91dCBuYW1lcyAtLT5cbiAgICAgICAgICBAaWYgKCFpdGVtLm5hbWUpIHtcbiAgICAgICAgICAgIDxheC1kaXZpZGVyPjwvYXgtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1wLTIgYXgtdGV4dC14cyBheC10ZXh0LW5ldXRyYWwtNTAwIGF4LWl0YWxpY1wiPlxuICAgICAgICAgICAgICB7eyAnQGFwcGxpY2F0aW9uLW1hbmFnZW1lbnQ6bWVudS1tYW5hZ2VtZW50Lm1lc3NhZ2VzLm5vLW5hbWUtaW5mbycgfCB0cmFuc2xhdGUgfCBhc3luYyB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2F4LWJ1dHRvbi1pdGVtLWxpc3Q+XG4gICAgICA8L2F4LWRyb3Bkb3duLXBhbmVsPlxuICAgIDwvYXgtYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0="],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA;AACA;AACA;AACA;AACA,MAAM,kBAAkB,GAAG,CAAC;AAC5B,MAAM,oBAAoB,GAAG,IAAI;AACjC,MAAM,aAAa,GAAG,EAAE;AACjB,MAAM,wBAAwB,CAAC;AACtC,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACvD,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACjE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,WAAW,CAAC,KAAK,EAAE;AAC7B;AACA,QAAQ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE;AACnE;AACA,QAAQ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjE;AACA,QAAQ,MAAM,QAAQ,GAAG,CAAC,GAAG,SAAS,EAAE,GAAG,aAAa,CAAC,WAAW,CAAC;AACrE;AACA,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,aAAa,CAAC;AACpF;AACA,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,aAAa,CAAC;AACxE,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,MAAM,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE;AAC5C,QAAQ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjE;AACA,QAAQ,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,aAAa,CAAC;AAClE,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC;AAC1D,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,iBAAiB,CAAC,KAAK,EAAE;AACnC,QAAQ,IAAI;AACZ,YAAY,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;AACnE,YAAY,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,0BAA0B,CAAC;AAC9E,YAAY,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE;AACxC,gBAAgB,OAAO,KAAK;AAC5B,YAAY;AACZ,YAAY,OAAO,SAAS,CAAC,8BAA8B,CAAC;AAC5D,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,KAAK,CAAC;AACpF,YAAY,OAAO,SAAS,CAAC,8BAA8B,CAAC;AAC5D,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE;AAClD,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;AAC/D,QAAQ,MAAM,cAAc,CAAC,GAAG,CAAC,0BAA0B,EAAE,aAAa,CAAC;AAC3E;AACA,QAAQ,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE;AAC7C,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE;AACxC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC/C,QAAQ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjE,QAAQ,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC1D,QAAQ,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,IAAI;AACvD,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC;AAC1D,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE;AACxC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC/C,QAAQ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjE,QAAQ,IAAI,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AAC/C,YAAY,OAAO,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM;AAC3D,YAAY,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC9D,QAAQ;AACR,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC;AAC1D,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AACxD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,qBAAqB,CAAC;AAC9D,QAAQ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjE,QAAQ,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC1D,QAAQ,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,QAAQ,GAAG,QAAQ;AAC7D,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC;AAC1D,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE;AAC5D,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,uBAAuB,CAAC;AAChE,QAAQ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjE,QAAQ,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC1D,QAAQ,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,UAAU,GAAG;AACvD,YAAY,GAAG,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,UAAU;AAC3D,YAAY,GAAG,UAAU;AACzB,SAAS;AACT,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC;AAC1D,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE;AACrD,QAAQ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjE;AACA,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC5B,YAAY,QAAQ,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACvD,QAAQ;AACR,QAAQ,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChD,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC;AAC1D,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAC1D,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjD,QAAQ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjE,QAAQ,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC3F,QAAQ,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAC1B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;AACvE,QAAQ;AACR,QAAQ,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,QAAQ;AACnD,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC;AAC1D,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,oBAAoB,CAAC,KAAK,EAAE,QAAQ,EAAE;AAChD,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACjD,QAAQ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;AACjE,QAAQ,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,CAAC,MAAM;AAC9D,QAAQ,aAAa,CAAC,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;AACtG,QAAQ,IAAI,aAAa,CAAC,WAAW,CAAC,MAAM,KAAK,aAAa,EAAE;AAChE,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;AACvE,QAAQ;AACR,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,aAAa,CAAC;AAC1D,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,mBAAmB,CAAC,KAAK,EAAE;AACrC,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,8BAA8B,CAAC,CAAC;AACtF,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,KAAK,EAAE,aAAa,EAAE;AAC/C;AACA,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACpD;AACA,QAAQ,MAAM,SAAS,GAAG,EAAE;AAC5B,QAAQ,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE;AACrC,QAAQ,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE;AAC1D,YAAY,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC;AAC9D;AACA,YAAY,IAAI,eAAe;AAC/B,YAAY,IAAI,QAAQ,EAAE,UAAU,KAAK,SAAS,EAAE;AACpD;AACA,gBAAgB,eAAe,GAAG,QAAQ,CAAC,UAAU;AACrD,YAAY;AACZ,iBAAiB;AACjB;AACA,gBAAgB,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC1E,YAAY;AACZ,YAAY,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,SAAS,EAAE;AAC3E;AACA,gBAAgB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AACpC,YAAY;AACZ,iBAAiB;AACjB;AACA,gBAAgB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;AACvD,oBAAoB,WAAW,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC;AACxD,gBAAgB;AAChB,gBAAgB,WAAW,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;AAC3D,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,MAAM,cAAc,GAAG,CAAC,IAAI,KAAK;AACzC,YAAY,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;AACzD,gBAAgB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1D,gBAAgB,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,CAAC;AACtD,YAAY;AACZ,QAAQ,CAAC;AACT,QAAQ,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC;AACzC,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE;AACzD,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAClC,YAAY,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AAC1C,gBAAgB,OAAO,aAAa,CAAC;AACrC,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/B,gBAAgB,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;AAC3F,gBAAgB,IAAI,KAAK,KAAK,IAAI,EAAE;AACpC;AACA,oBAAoB,OAAO,KAAK;AAChC,gBAAgB;AAChB;AACA,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI;AACJ;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE;AACzD,QAAQ,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AAC1C,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI;AACtC,YAAY,MAAM,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,SAAS;AACrF,YAAY,MAAM,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,KAAK;AAC5G;AACA,YAAY,MAAM,QAAQ,GAAG;AAC7B,gBAAgB,SAAS,EAAE,CAAC,QAAQ;AACpC,gBAAgB,QAAQ;AACxB,gBAAgB,QAAQ,EAAE,QAAQ,EAAE,MAAM,IAAI,KAAK;AACnD,gBAAgB,gBAAgB,EAAE,IAAI,CAAC,QAAQ;AAC/C,gBAAgB,kBAAkB,EAAE,UAAU;AAC9C,aAAa;AACb;AACA,YAAY,MAAM,iBAAiB,GAAG,QAAQ,EAAE,QAAQ,KAAK,SAAS,GAAG,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AAC1G,YAAY,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAC7E;AACA,YAAY,MAAM,QAAQ,GAAG;AAC7B,gBAAgB,QAAQ,EAAE,gBAAgB;AAC1C,gBAAgB,QAAQ;AACxB,aAAa;AACb;AACA,YAAY,MAAM,QAAQ,GAAG;AAC7B,gBAAgB,EAAE,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,cAAc,EAAE;AAClE,gBAAgB,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS;AAC1D,gBAAgB,IAAI,EAAE,IAAI,CAAC,IAAI;AAC/B,gBAAgB,QAAQ,EAAE,KAAK;AAC/B,gBAAgB,QAAQ,EAAE,KAAK;AAC/B,gBAAgB,OAAO,EAAE,IAAI;AAC7B,gBAAgB,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,GAAG,SAAS;AACrH,gBAAgB,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM;AACpD,gBAAgB,IAAI,EAAE,QAAQ;AAC9B,aAAa;AACb,YAAY,OAAO,QAAQ;AAC3B,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC7B,YAAY,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,IAAI,CAAC;AAC5D,YAAY,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,QAAQ,IAAI,CAAC;AAC5D,YAAY,OAAO,SAAS,GAAG,SAAS;AACxC,QAAQ,CAAC,CAAC;AACV,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,2BAA2B,CAAC,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE;AACtE;AACA,QAAQ,MAAM,YAAY,GAAG,UAAU,GAAG,oBAAoB,GAAG,kBAAkB;AACnF,QAAQ,MAAM,YAAY,GAAG,aAAa;AAC1C,QAAQ,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK;AAC3C,YAAY,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI;AACtC,YAAY,MAAM,QAAQ,GAAG,QAAQ,EAAE,QAAQ;AAC/C,YAAY,IAAI,QAAQ,EAAE,IAAI,EAAE;AAChC,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC;AACvE;AACA,gBAAgB,MAAM,WAAW,GAAG,YAAY,GAAG,KAAK,GAAG,YAAY;AACvE;AACA,gBAAgB,MAAM,wBAAwB,GAAG,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,IAAI,CAAC;AAC5I;AACA;AACA,gBAAgB,IAAI,WAAW,KAAK,wBAAwB,EAAE;AAC9D,oBAAoB,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,WAAW;AACjF,gBAAgB;AAChB;AACA,gBAAgB,MAAM,sBAAsB,GAAG,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,IAAI,QAAQ,CAAC,QAAQ,CAAC,kBAAkB;AACzI;AACA,gBAAgB,IAAI,UAAU,KAAK,sBAAsB,EAAE;AAC3D,oBAAoB,IAAI,UAAU,EAAE;AACpC,wBAAwB,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,UAAU;AACtF,oBAAoB;AACpB,yBAAyB;AACzB;AACA;AACA,wBAAwB,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,IAAI;AAChF,oBAAoB;AACpB,gBAAgB;AAChB;AACA,gBAAgB,IAAI,CAAC,oBAAoB,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC;AACvE;AACA,gBAAgB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/D,oBAAoB,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC;AACjG,gBAAgB;AAChB,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,QAAQ,EAAE,SAAS,EAAE;AAC1C,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5E,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,aAAa,EAAE,QAAQ,EAAE;AAClD,QAAQ,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;AAChD,YAAY,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE;AAClD,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,aAAa,EAAE,QAAQ,EAAE;AAClD,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AAC/E,YAAY,OAAO,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC;AACpD,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,KAAK,EAAE;AAC5B,QAAQ,MAAM,OAAO,GAAG,IAAI,GAAG,EAAE;AACjC,QAAQ,MAAM,OAAO,GAAG,CAAC,QAAQ,KAAK;AACtC,YAAY,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;AACzC,gBAAgB,IAAI,IAAI,CAAC,IAAI,EAAE;AAC/B;AACA,oBAAoB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC5E,gBAAgB;AAChB,gBAAgB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnC,oBAAoB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC1C,gBAAgB;AAChB,YAAY;AACZ,QAAQ,CAAC;AACT,QAAQ,OAAO,CAAC,KAAK,CAAC;AACtB,QAAQ,OAAO,OAAO;AACtB,IAAI;AACJ;AACA;AACA;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AACxE,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC3L,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AAClK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,UAAU,EAAE,CAAC;AAClI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE;AACzC,SAAS,CAAC,EAAE,CAAC;;AC1Vb;AACO,MAAM,oBAAoB,SAAS,0BAA0B,CAAC;AACrE,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B;AACA,QAAQ,IAAI,CAAC,qBAAqB,GAAG,MAAM,CAAC,wBAAwB,CAAC;AACrE,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC5D,QAAQ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC;AACpD,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AAClD,QAAQ,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAC9D,QAAQ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC3C;AACA;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,gBAAgB,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9F,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvF,QAAQ,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1F,QAAQ,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC/E,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAChH,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AAC/B,QAAQ,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;AACtC,IAAI;AACJ;AACA;AACA,IAAI,MAAM,QAAQ,GAAG;AACrB,QAAQ,MAAM,KAAK,CAAC,QAAQ,EAAE;AAC9B;AACA,QAAQ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,MAAM,KAAK;AACrF,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;AACzC,YAAY,IAAI,KAAK,EAAE;AACvB,gBAAgB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;AAC5C,gBAAgB,MAAM,IAAI,CAAC,aAAa,EAAE;AAC1C,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjC,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AAC5B,QAAQ,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;AAChC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,CAAC,EAAE;AACxB,QAAQ,MAAM,YAAY,GAAG,CAAC,CAAC,aAAa,EAAE,IAAI;AAClD;AACA,QAAQ,IAAI,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC1C,YAAY,CAAC,CAAC,QAAQ,GAAG,IAAI;AAC7B,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,6DAA6D,CAAC;AACpG,YAAY;AACZ,QAAQ;AACR;AACA;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,eAAe,GAAG;AAC5B,QAAQ,MAAM,IAAI,CAAC,eAAe,EAAE;AACpC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,IAAI;AACZ,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACpC,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC9B,YAAY,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAC/F,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;AACzC,YAAY,IAAI,CAAC,SAAS,EAAE;AAC5B,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,YAAY,KAAK,GAAG,KAAK,CAAC,OAAO,GAAG,2BAA2B,CAAC;AAChG,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,6DAA6D,CAAC;AACnG,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,eAAe,GAAG;AAC5B;AACA,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI;AACZ,YAAY,IAAI,CAAC,SAAS,GAAG,IAAI;AACjC,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE;AAC1C,YAAY,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE;AAC7C,YAAY,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACpC,gBAAgB;AAChB,YAAY;AACZ,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC;AAC1E,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,kEAAkE,CAAC;AACzG,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC;AAChE,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,6DAA6D,CAAC;AACnG,QAAQ;AACR,gBAAgB;AAChB,YAAY,IAAI,CAAC,SAAS,GAAG,KAAK;AAClC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,YAAY,GAAG;AACzB,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE;AAC7C,QAAQ,MAAM,QAAQ,GAAG,SAAS,KAAK,gBAAgB,CAAC,IAAI,GAAG,MAAM,GAAG,QAAQ;AAChF,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,wCAAwC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClH,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,kBAAkB,GAAG;AAC/B,QAAQ,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,qDAAqD,CAAC;AAC5G,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,mBAAmB,GAAG;AAChC,QAAQ,OAAO;AACf,YAAY;AACZ,gBAAgB,KAAK,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,0DAA0D,CAAC;AAC/H,gBAAgB,IAAI,EAAE,kBAAkB;AACxC,gBAAgB,KAAK,EAAE,SAAS;AAChC,gBAAgB,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;AAC7C,aAAa;AACb,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,qBAAqB,GAAG;AAClC,QAAQ,OAAO;AACf,YAAY;AACZ,gBAAgB,KAAK,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,0DAA0D,CAAC;AAC/H,gBAAgB,IAAI,EAAE,0BAA0B;AAChD,gBAAgB,KAAK,EAAE,SAAS;AAChC,gBAAgB,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;AAC7C,aAAa;AACb,YAAY;AACZ,gBAAgB,KAAK,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,wDAAwD,CAAC;AAC7H,gBAAgB,IAAI,EAAE,yBAAyB;AAC/C,gBAAgB,KAAK,EAAE,SAAS;AAChC,gBAAgB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC3C,aAAa;AACb,YAAY;AACZ,gBAAgB,KAAK,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,uDAAuD,CAAC;AAC5H,gBAAgB,IAAI,EAAE,yBAAyB;AAC/C,gBAAgB,KAAK,EAAE,QAAQ;AAC/B,gBAAgB,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAC1C,aAAa;AACb,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,OAAO,CAAC,OAAO,EAAE;AAC3B,QAAQ,QAAQ,OAAO,CAAC,IAAI;AAC5B,YAAY,KAAK,UAAU;AAC3B,gBAAgB,MAAM,IAAI,CAAC,eAAe,EAAE;AAC5C,gBAAgB;AAChB,YAAY,KAAK,UAAU;AAC3B,gBAAgB,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE;AAC1C,gBAAgB;AAChB,YAAY,KAAK,QAAQ;AACzB,gBAAgB,IAAI,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE;AACxC,gBAAgB;AAChB,YAAY,KAAK,OAAO;AACxB,gBAAgB,MAAM,IAAI,CAAC,mBAAmB,EAAE;AAChD,gBAAgB;AAChB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE;AACrC,QAAQ,QAAQ,MAAM;AACtB,YAAY,KAAK,MAAM;AACvB,gBAAgB,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AACjD,gBAAgB;AAChB,YAAY,KAAK,MAAM;AACvB,gBAAgB,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AACjD,gBAAgB;AAChB,YAAY,KAAK,MAAM;AACvB,gBAAgB,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;AACjD,gBAAgB;AAChB,YAAY,KAAK,QAAQ;AACzB,gBAAgB,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AACnD,gBAAgB;AAChB,YAAY,KAAK,WAAW;AAC5B,gBAAgB,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AACrD,gBAAgB;AAChB;AACA,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,eAAe,GAAG;AAC5B,QAAQ,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;AACjD,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,gBAAgB,CAAC,cAAc,EAAE;AAC3C,QAAQ,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzE,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,mBAAmB,GAAG;AAChC,QAAQ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,qDAAqD,EAAE,uDAAuD,CAAC;AAC1K,QAAQ,IAAI,CAAC,SAAS;AACtB,YAAY;AACZ,QAAQ,IAAI;AACZ;AACA,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AACrF,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,gEAAgE,CAAC;AACvG,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;AACnE,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,8DAA8D,CAAC;AACpG,QAAQ;AACR,gBAAgB;AAChB;AACA,YAAY,MAAM,IAAI,CAAC,aAAa,EAAE;AACtC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,YAAY,CAAC,QAAQ,EAAE;AACjC,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,+DAA+D,EAAE,6DAA6D,CAAC;AAChQ,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,YAAY,CAAC,QAAQ,EAAE;AACjC,QAAQ,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,+DAA+D,EAAE,6DAA6D,CAAC;AAChQ,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,YAAY,CAAC,QAAQ,EAAE;AACjC,QAAQ,MAAM,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AAC/C,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,cAAc,CAAC,QAAQ,EAAE;AACnC,QAAQ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,+BAA+B,EAAE,wDAAwD,CAAC;AACrJ,QAAQ,IAAI,CAAC,SAAS;AACtB,YAAY;AACZ,QAAQ,IAAI;AACZ,YAAY,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ;AAC1C,YAAY,IAAI,CAAC,IAAI,CAAC,IAAI;AAC1B,gBAAgB;AAChB,YAAY,MAAM,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC;AACjG,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,iEAAiE,CAAC;AACxG,YAAY,MAAM,IAAI,CAAC,aAAa,EAAE;AACtC,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,+DAA+D,CAAC;AACrG,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,kBAAkB,CAAC,QAAQ,EAAE,UAAU,GAAG,IAAI,EAAE;AAC1D,QAAQ,MAAM,IAAI,GAAG,QAAQ,EAAE,QAAQ;AACvC,QAAQ,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI;AAC7B,QAAQ,MAAM,KAAK,GAAG;AACtB,cAAc;AACd,cAAc,0DAA0D;AACxE,QAAQ,MAAM,OAAO,GAAG;AACxB,YAAY,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE;AAClC,YAAY,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE;AAClC,YAAY,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,MAAM;AACtC,YAAY,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE;AAClC,YAAY,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE;AAClC,YAAY,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,EAAE;AAChD,SAAS;AACT,QAAQ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC;AACrC,aAAa,MAAM;AACnB,aAAa,MAAM,CAAC,CAAC,MAAM,KAAK;AAChC,YAAY;AACZ,iBAAiB,QAAQ,CAAC,KAAK;AAC/B,iBAAiB,UAAU,CAAC,OAAO;AACnC,iBAAiB,OAAO,CAAC,CAAC,IAAI,KAAK;AACnC,gBAAgB;AAChB,qBAAqB,YAAY,CAAC,QAAQ;AAC1C,qBAAqB,SAAS,CAAC,qDAAqD,EAAE,CAAC,KAAK,KAAK;AACjG,oBAAoB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,oBAAoB,KAAK,CAAC,OAAO,CAAC;AAClC,wBAAwB,WAAW,EAAE,qDAAqD;AAC1F,wBAAwB,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC3D,wBAAwB,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAAE,QAAQ,EAAE,SAAS;AACzE,qBAAqB,CAAC;AACtB,gBAAgB,CAAC;AACjB,qBAAqB,SAAS,CAAC,qDAAqD,EAAE,CAAC,KAAK,KAAK;AACjG,oBAAoB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,oBAAoB,KAAK,CAAC,OAAO,CAAC;AAClC,wBAAwB,WAAW,EAAE,qDAAqD;AAC1F,wBAAwB,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC3D,qBAAqB,CAAC;AACtB,gBAAgB,CAAC;AACjB,qBAAqB,SAAS,CAAC,qDAAqD,EAAE,CAAC,KAAK,KAAK;AACjG,oBAAoB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,oBAAoB,KAAK,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC;AAC1D,gBAAgB,CAAC;AACjB,qBAAqB,SAAS,CAAC,qDAAqD,EAAE,CAAC,KAAK,KAAK;AACjG,oBAAoB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,oBAAoB,KAAK,CAAC,OAAO,CAAC;AAClC,wBAAwB,WAAW,EAAE,qDAAqD;AAC1F,wBAAwB,QAAQ,EAAE,MAAM,IAAI,QAAQ,EAAE,QAAQ,EAAE,SAAS;AACzE,qBAAqB,CAAC;AACtB,gBAAgB,CAAC;AACjB,qBAAqB,SAAS,CAAC,4DAA4D,EAAE,CAAC,KAAK,KAAK;AACxG,oBAAoB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;AAC7C,oBAAoB,KAAK,CAAC,YAAY,CAAC;AACvC,wBAAwB,WAAW,EAAE,4DAA4D;AACjG,wBAAwB,IAAI,EAAE,CAAC;AAC/B,qBAAqB,CAAC;AACtB,gBAAgB,CAAC,CAAC;AAClB,YAAY,CAAC;AACb,iBAAiB,UAAU,CAAC,CAAC,OAAO,KAAK;AACzC,gBAAgB,OAAO,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,MAAM,CAAC,6BAA6B,CAAC;AACrG,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC;AACT,aAAa,IAAI,EAAE;AACnB,QAAQ,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE;AACzC,QAAQ,IAAI,MAAM,KAAK,QAAQ,EAAE;AACjC,YAAY,SAAS,CAAC,KAAK,EAAE;AAC7B,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,EAAE;AAC5C,QAAQ,IAAI;AACZ,YAAY,IAAI,MAAM,IAAI,IAAI,EAAE,IAAI,EAAE;AACtC;AACA,gBAAgB,IAAI,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE;AAClD,oBAAoB,MAAM,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;AACnH,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,MAAM,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;AACnH,gBAAgB;AAChB,YAAY;AACZ,iBAAiB;AACjB;AACA,gBAAgB,MAAM,OAAO,GAAG;AAChC,oBAAoB,IAAI,EAAE,QAAQ,CAAC,IAAI;AACvC,oBAAoB,IAAI,EAAE,QAAQ,CAAC,IAAI;AACvC,oBAAoB,IAAI,EAAE,QAAQ,CAAC,IAAI;AACvC,oBAAoB,IAAI,EAAE,QAAQ,CAAC,IAAI;AACvC,oBAAoB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;AAC/C,oBAAoB,WAAW,EAAE,QAAQ,CAAC,WAAW;AACrD,iBAAiB;AACjB;AACA,gBAAgB,IAAI,MAAM,EAAE,IAAI,EAAE;AAClC;AACA,oBAAoB,MAAM,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC;AACjH,gBAAgB;AAChB,qBAAqB;AACrB;AACA,oBAAoB,MAAM,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;AAC1G,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,+DAA+D,CAAC;AACtG,YAAY,MAAM,IAAI,CAAC,aAAa,EAAE;AACtC,YAAY,SAAS,CAAC,KAAK,EAAE;AAC7B,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,6DAA6D,CAAC;AACnG,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE;AAClE,QAAQ,IAAI;AACZ,YAAY,MAAM,MAAM,EAAE;AAC1B,YAAY,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,cAAc,CAAC;AACrD,YAAY,MAAM,IAAI,CAAC,aAAa,EAAE;AACtC,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC;AACvD,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC;AAClD,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AACxL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,oBAAoB,EAAE,EAAE,SAAS,EAAE;AAClO,YAAY;AACZ,gBAAgB,OAAO,EAAE,iBAAiB;AAC1C,gBAAgB,WAAW,EAAE,oBAAoB;AACjD,aAAa;AACb,SAAS,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,w9NAAw9N,EAAE,MAAM,EAAE,CAAC,66FAA66F,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,qBAAqB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,yBAAyB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,2BAA2B,EAAE,QAAQ,EAAE,8IAA8I,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,wBAAwB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,sBAAsB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,4BAA4B,EAAE,QAAQ,EAAE,qfAAqf,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,wBAAwB,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;AACrha;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC;AAC9H,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE;AAC3E,wBAAwB,YAAY;AACpC,wBAAwB,cAAc;AACtC,wBAAwB,iBAAiB;AACzC,wBAAwB,sBAAsB;AAC9C,wBAAwB,gBAAgB;AACxC,wBAAwB,mBAAmB;AAC3C,wBAAwB,gBAAgB;AACxC,wBAAwB,sBAAsB;AAC9C,wBAAwB,4BAA4B;AACpD,wBAAwB,wBAAwB;AAChD,wBAAwB,aAAa;AACrC,qBAAqB,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE;AAC1H,wBAAwB;AACxB,4BAA4B,OAAO,EAAE,iBAAiB;AACtD,4BAA4B,WAAW,EAAE,oBAAoB;AAC7D,yBAAyB;AACzB,qBAAqB,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE,QAAQ,EAAE,w9NAAw9N,EAAE,MAAM,EAAE,CAAC,66FAA66F,CAAC,EAAE;AAC39T,SAAS,CAAC,EAAE,CAAC;;;;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { e as AXMApplicationEntityModule, b as AXMApplicationManagementModule, c as AXMApplicationManagementModuleConst, u as AXMApplicationManagmentModuleMenuProvider, f as AXMApplicationService, g as AXMApplicationServiceImpl, i as AXMEditionEntityModule, j as AXMEditionService, k as AXMEditionServiceImpl, t as AXMEntityProvider, m as AXMFeatureEntityModule, n as AXMFeatureService, o as AXMFeatureServiceImpl, q as AXMModuleEntityModule, r as AXMModuleService, s as AXMModuleServiceImpl, v as AXMSearchCommandProvider, w as AXMSettingProvider, R as RootConfig, d as applicationEntityFactory, h as editionEntityFactory, l as featureEntityFactory, p as moduleEntityFactory } from './acorex-modules-application-management-acorex-modules-application-management-
|
|
1
|
+
export { e as AXMApplicationEntityModule, b as AXMApplicationManagementModule, c as AXMApplicationManagementModuleConst, u as AXMApplicationManagmentModuleMenuProvider, f as AXMApplicationService, g as AXMApplicationServiceImpl, i as AXMEditionEntityModule, j as AXMEditionService, k as AXMEditionServiceImpl, t as AXMEntityProvider, m as AXMFeatureEntityModule, n as AXMFeatureService, o as AXMFeatureServiceImpl, q as AXMModuleEntityModule, r as AXMModuleService, s as AXMModuleServiceImpl, v as AXMSearchCommandProvider, w as AXMSettingProvider, R as RootConfig, d as applicationEntityFactory, h as editionEntityFactory, l as featureEntityFactory, p as moduleEntityFactory } from './acorex-modules-application-management-acorex-modules-application-management-BqYLpEvY.mjs';
|
|
2
2
|
//# sourceMappingURL=acorex-modules-application-management.mjs.map
|