@acorex/platform 20.3.0-next.14 → 20.3.0-next.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/acorex-platform-auth.mjs +19 -19
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/acorex-platform-common.mjs +99 -99
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +42 -42
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs +16 -16
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +1690 -1030
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-components.mjs +2189 -1567
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +73 -73
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-entity-create-entity.command-CuueLekJ.mjs → acorex-platform-layout-entity-create-entity.command-CFBqiwfy.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-entity-create-entity.command-CuueLekJ.mjs.map → acorex-platform-layout-entity-create-entity.command-CFBqiwfy.mjs.map} +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +160 -161
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +15 -15
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +163 -74
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-C82aG5Rf.mjs → acorex-platform-layout-widgets-button-widget-designer.component-BzsfTNs2.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-C82aG5Rf.mjs.map → acorex-platform-layout-widgets-button-widget-designer.component-BzsfTNs2.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-CMmz70I8.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-Dvk76-2W.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-CMmz70I8.mjs.map → acorex-platform-layout-widgets-extra-properties-schema-widget-edit.component-Dvk76-2W.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-DDOyf7NG.mjs → acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-BYLaipWi.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-DDOyf7NG.mjs.map → acorex-platform-layout-widgets-extra-properties-schema-widget-view.component-BYLaipWi.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-flsveRJc.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-DcSllNik.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-flsveRJc.mjs.map → acorex-platform-layout-widgets-extra-properties-values-widget-edit.component-DcSllNik.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-view.component-CFXLM9Ls.mjs → acorex-platform-layout-widgets-extra-properties-values-widget-view.component-BT-U4BiA.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-values-widget-view.component-CFXLM9Ls.mjs.map → acorex-platform-layout-widgets-extra-properties-values-widget-view.component-BT-U4BiA.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-edit.component-1Wd5IUpo.mjs → acorex-platform-layout-widgets-extra-properties-widget-edit.component-Il7jnRBg.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-edit.component-1Wd5IUpo.mjs.map → acorex-platform-layout-widgets-extra-properties-widget-edit.component-Il7jnRBg.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-view.component-WLyXXg19.mjs → acorex-platform-layout-widgets-extra-properties-widget-view.component-CBEPu7Fl.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-extra-properties-widget-view.component-WLyXXg19.mjs.map → acorex-platform-layout-widgets-extra-properties-widget-view.component-CBEPu7Fl.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-DxTXIO_k.mjs → acorex-platform-layout-widgets-file-list-popup.component-BPzn8lr3.mjs} +5 -5
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-BPzn8lr3.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-44YSAqDc.mjs → acorex-platform-layout-widgets-page-widget-designer.component-C_JrGoXy.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-44YSAqDc.mjs.map → acorex-platform-layout-widgets-page-widget-designer.component-C_JrGoXy.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Dat0cqWe.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-C6DaBt_N.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Dat0cqWe.mjs.map → acorex-platform-layout-widgets-tabular-data-edit-popup.component-C6DaBt_N.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-CtJBzqq_.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-Bth3jI9T.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-CtJBzqq_.mjs.map → acorex-platform-layout-widgets-tabular-data-view-popup.component-Bth3jI9T.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-Djpj1fNO.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-CUHptbP4.mjs} +4 -4
- package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-Djpj1fNO.mjs.map → acorex-platform-layout-widgets-text-block-widget-designer.component-CUHptbP4.mjs.map} +1 -1
- package/fesm2022/acorex-platform-layout-widgets.mjs +697 -664
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-native.mjs +7 -7
- package/fesm2022/acorex-platform-native.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs +40 -40
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-oOA674Jd.mjs → acorex-platform-themes-default-entity-master-create-view.component-eGzN6g2Y.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-oOA674Jd.mjs.map → acorex-platform-themes-default-entity-master-create-view.component-eGzN6g2Y.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-Bk4p9oHD.mjs → acorex-platform-themes-default-entity-master-list-view.component-DjNvH3OA.mjs} +10 -10
- package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-Bk4p9oHD.mjs.map → acorex-platform-themes-default-entity-master-list-view.component-DjNvH3OA.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-CrDQOCpB.mjs → acorex-platform-themes-default-entity-master-modify-view.component-HJyalvcu.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-CrDQOCpB.mjs.map → acorex-platform-themes-default-entity-master-modify-view.component-HJyalvcu.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-CT-1gX4H.mjs → acorex-platform-themes-default-entity-master-single-view.component-e7m70Wls.mjs} +7 -7
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-CT-1gX4H.mjs.map → acorex-platform-themes-default-entity-master-single-view.component-e7m70Wls.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-error-401.component-CHJFmJ2W.mjs → acorex-platform-themes-default-error-401.component-CoBaQFTn.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-error-401.component-CHJFmJ2W.mjs.map → acorex-platform-themes-default-error-401.component-CoBaQFTn.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-error-404.component-Db8KkVIF.mjs → acorex-platform-themes-default-error-404.component-BLlVOsS2.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-error-404.component-Db8KkVIF.mjs.map → acorex-platform-themes-default-error-404.component-BLlVOsS2.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-default-error-offline.component-DH39Viy-.mjs → acorex-platform-themes-default-error-offline.component-CybYQI9F.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-default-error-offline.component-DH39Viy-.mjs.map → acorex-platform-themes-default-error-offline.component-CybYQI9F.mjs.map} +1 -1
- package/fesm2022/acorex-platform-themes-default.mjs +39 -39
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-mFBYGE0_.mjs → acorex-platform-themes-shared-icon-chooser-view.component-ReKSoVeN.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-mFBYGE0_.mjs.map → acorex-platform-themes-shared-icon-chooser-view.component-ReKSoVeN.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-viyyova6.mjs → acorex-platform-themes-shared-theme-color-chooser-column.component-B2HDyY2z.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-column.component-viyyova6.mjs.map → acorex-platform-themes-shared-theme-color-chooser-column.component-B2HDyY2z.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-BrUtKTXd.mjs → acorex-platform-themes-shared-theme-color-chooser-view.component-CeZxa49U.mjs} +4 -4
- package/fesm2022/{acorex-platform-themes-shared-theme-color-chooser-view.component-BrUtKTXd.mjs.map → acorex-platform-themes-shared-theme-color-chooser-view.component-CeZxa49U.mjs.map} +1 -1
- package/fesm2022/acorex-platform-themes-shared.mjs +42 -42
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +25 -25
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/layout/builder/index.d.ts +458 -237
- package/layout/components/index.d.ts +130 -42
- package/layout/widget-core/index.d.ts +8 -1
- package/layout/widgets/index.d.ts +80 -2
- package/package.json +6 -6
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-DxTXIO_k.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-layout-builder.mjs","sources":["../tmp-esm2022/layout/builder/lib/layout-builder.service.js","../tmp-esm2022/layout/builder/lib/layout-renderer.component.js","../tmp-esm2022/layout/builder/lib/layout-builder.module.js","../tmp-esm2022/layout/builder/acorex-platform-layout-builder.js"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPLayoutBuilderService {\n /**\n * Create a new layout builder\n */\n create() {\n return new LayoutBuilder();\n }\n /**\n * Convert Layout Builder definition to Layout Renderer format\n * با processing و cleaning options\n */\n convertToLayoutRenderer(definition) {\n const layoutDefinition = {\n zones: {},\n styles: definition.layoutConfig ? this.convertGridLayoutToStyles(definition.layoutConfig) : {}\n };\n const layoutNodes = [];\n let nodeCounter = 0;\n // Helper: count all nodes recursively\n const countNodes = (nodes) => {\n if (!nodes || nodes.length === 0)\n return 0;\n return nodes.reduce((acc, n) => acc + 1 + countNodes(n.children), 0);\n };\n const totalNodeCount = countNodes(definition.nodes);\n const hasMultipleNodes = totalNodeCount > 1;\n // Process nodes recursively - flatten everything into the same zone\n const processNodes = (nodes, parentZone = 'main') => {\n nodes.forEach((node) => {\n if (!node.widget)\n return;\n // Create layout node for widget\n const nodeId = node.id || `widget-${nodeCounter++}`;\n const layoutNode = {\n id: nodeId,\n type: node.widget.type,\n zone: parentZone,\n mode: node.mode || 'edit',\n options: node.widget.options || {}\n };\n // Convert layout config to node layout\n if (node.layout) {\n layoutNode.layout = this.convertToNodeLayout(node.layout);\n }\n else if (hasMultipleNodes && definition.layoutConfig) {\n // Apply default layout for multi-node structures when node has no explicit layout\n layoutNode.layout = this.convertToNodeLayout(definition.layoutConfig);\n }\n // Add order if specified\n if (node.order !== undefined) {\n if (!layoutNode.layout)\n layoutNode.layout = {};\n layoutNode.layout.order = typeof node.order === 'number' ? node.order : parseInt(node.order.toString());\n }\n // Process widget options and content\n this.processWidgetOptions(layoutNode, node);\n layoutNodes.push(layoutNode);\n // Recursively add children into the same zone (flat)\n if (node.children && node.children.length > 0) {\n processNodes(node.children, parentZone);\n }\n });\n };\n // Create zones in order and assign auto-order to nodes (recursively)\n let nodeOrder = 1;\n const assignOrder = (nodes) => {\n if (!nodes)\n return;\n nodes.forEach(n => {\n if (n.order === undefined || n.order === null) {\n n.order = nodeOrder++;\n }\n if (n.children && n.children.length > 0)\n assignOrder(n.children);\n });\n };\n assignOrder(definition.nodes);\n // Always create a default main zone when there are nodes\n if (totalNodeCount > 0) {\n layoutDefinition.zones['main'] = {\n layout: {\n type: 'flex',\n flexDirection: definition.direction === 'horizontal' ? 'row' : 'column',\n gap: '16px'\n },\n order: 0 // Main zone gets order 0 (first)\n };\n }\n processNodes(definition.nodes);\n return {\n layoutDefinition,\n layoutNodes\n };\n }\n // Removed container mapping helpers - all nodes are treated uniformly\n /**\n * Convert grid layout options to CSS styles\n */\n convertGridLayoutToStyles(layout) {\n const styles = {};\n // Handle responsive positions\n if (layout.positions) {\n // Use largest breakpoint for base styles\n const position = layout.positions.xxl || layout.positions.xl || layout.positions.lg ||\n layout.positions.md || layout.positions.sm;\n if (position) {\n if (position.colSpan && position.colSpan < 12) {\n styles['width'] = `${(position.colSpan / 12) * 100}%`;\n }\n }\n }\n return styles;\n }\n /**\n * Convert grid layout to node layout configuration\n */\n convertToNodeLayout(layout) {\n const nodeLayout = {};\n if (layout.positions) {\n const position = layout.positions.xxl || layout.positions.xl || layout.positions.lg ||\n layout.positions.md || layout.positions.sm;\n if (position) {\n if (position.colSpan && position.colSpan < 12) {\n nodeLayout.flex = `0 0 ${(position.colSpan / 12) * 100}%`;\n }\n if (position.rowSpan && position.rowSpan > 1) {\n nodeLayout.gridArea = `span ${position.rowSpan}`;\n }\n }\n }\n return nodeLayout;\n }\n /**\n * Process widget options based on actual widget configurations\n */\n processWidgetOptions(layoutNode, sourceNode) {\n if (!sourceNode.widget?.options)\n return;\n const options = sourceNode.widget.options;\n const processedOptions = { ...options };\n // Process based on actual widget type\n switch (sourceNode.widget.type) {\n case 'text-block-layout':\n // Text Block Widget - فقط content\n processedOptions.content = this.processTextBlockContent(options);\n break;\n case 'grid-layout':\n // Grid Layout Widget - complete grid system\n processedOptions.grid = this.processGridOptions(options);\n processedOptions.spacing = this.processSpacingOptions(options);\n processedOptions.border = this.processBorderOptions(options);\n if (options.backgroundColor)\n processedOptions.backgroundColor = options.backgroundColor;\n break;\n case 'flex-layout':\n // Flex Layout Widget\n processedOptions.flex = this.processFlexOptions(options);\n break;\n case 'panel-layout':\n // Panel Layout Widget\n processedOptions.panel = this.processPanelOptions(options);\n break;\n case 'tag':\n // Tag Widget (custom)\n processedOptions.label = options.label || options.content || 'Tag';\n processedOptions.tone = options.tone || 'primary';\n break;\n default:\n // Generic processing برای custom widgets\n if (options.content) {\n processedOptions.content = this.processGenericContent(options);\n }\n break;\n }\n layoutNode.options = processedOptions;\n }\n /**\n * Process text-block-layout content\n */\n processTextBlockContent(options) {\n if (!options.content)\n return '';\n let content = options.content;\n // اگر قبلاً HTML tag داره، استفاده کن\n if (content.includes('<')) {\n return content;\n }\n // تبدیل plain text به HTML با styling مناسب\n if (options.type === 'heading' || options.level === 'h1' || options.level === 'h2') {\n const level = options.level || 'h2';\n return `<${level} style=\"margin: 0 0 16px 0; color: #333; font-weight: 600;\">${content}</${level}>`;\n }\n if (options.weight === 'bold' || options.bold) {\n return `<strong style=\"color: #333;\">${content}</strong>`;\n }\n // Default text styling\n return `<span style=\"color: #333; line-height: 1.5;\">${content}</span>`;\n }\n /**\n * Process grid-layout options\n */\n processGridOptions(options) {\n return {\n default: {\n columns: options.columns || 12,\n rows: options.rows || 'auto',\n gap: options.gap || '16px',\n justifyItems: options.justifyItems || 'stretch',\n alignItems: options.alignItems || 'stretch',\n autoFlow: options.autoFlow || 'row'\n }\n };\n }\n /**\n * Process spacing options\n */\n processSpacingOptions(options) {\n if (!options.spacing && !options.padding && !options.margin)\n return undefined;\n return {\n padding: options.spacing?.padding || options.padding || '0px',\n margin: options.spacing?.margin || options.margin || '0px'\n };\n }\n /**\n * Process border options\n */\n processBorderOptions(options) {\n if (!options.border && !options.borderRadius && !options.borderWidth)\n return undefined;\n return {\n radius: options.border?.radius || options.borderRadius || '0px',\n width: options.border?.width || options.borderWidth || '0px',\n color: options.border?.color || options.borderColor || '#ddd',\n style: options.border?.style || options.borderStyle || 'solid'\n };\n }\n /**\n * Process flex-layout options\n */\n processFlexOptions(options) {\n return {\n flexDirection: options.flexDirection || 'row',\n justifyContent: options.justifyContent || 'flex-start',\n alignItems: options.alignItems || 'stretch',\n gap: options.gap || '16px',\n flexWrap: options.flexWrap || 'nowrap'\n };\n }\n /**\n * Process panel-layout options\n */\n processPanelOptions(options) {\n return {\n title: options.title || '',\n collapsible: options.collapsible || false,\n collapsed: options.collapsed || false,\n padding: options.padding || '16px'\n };\n }\n /**\n * Process tag content\n */\n processTagContent(options) {\n return options.label || options.content || 'Tag';\n }\n /**\n * Process generic content\n */\n processGenericContent(options) {\n if (!options.content)\n return '';\n // اگر HTML tags داره، استفاده کن\n if (options.content.includes('<')) {\n return options.content;\n }\n // Plain text با basic styling\n return `<span style=\"color: #333;\">${options.content}</span>`;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: AXPLayoutBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: AXPLayoutBuilderService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: AXPLayoutBuilderService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//#region ---- Layout Builder Implementation ----\nclass LayoutBuilder {\n constructor() {\n this.state = {\n nodes: [],\n mode: 'edit',\n direction: 'vertical',\n look: 'normal',\n layoutConfig: {\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 8 },\n lg: { colSpan: 6 },\n xl: { colSpan: 5 },\n xxl: { colSpan: 4 },\n },\n },\n };\n }\n widget(name, delegate) {\n const widgetBuilder = new WidgetBuilder(name);\n if (delegate) {\n delegate(widgetBuilder);\n }\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n layout(config) {\n this.state.layoutConfig = { ...this.state.layoutConfig, ...config };\n return this;\n }\n mode(mode) {\n this.state.mode = mode;\n return this;\n }\n direction(direction) {\n this.state.direction = direction;\n return this;\n }\n look(look) {\n this.state.look = look;\n return this;\n }\n // Predefined layout containers at root level - delegate pattern required\n grid(delegate) {\n const container = new GridContainerBuilder();\n if (delegate) {\n delegate(container);\n }\n this.state.nodes.push(container.build());\n return this;\n }\n flex(delegate) {\n const container = new FlexContainerBuilder();\n if (delegate) {\n delegate(container);\n }\n this.state.nodes.push(container.build());\n return this;\n }\n panel(delegate) {\n const container = new PanelContainerBuilder();\n if (delegate) {\n delegate(container);\n }\n this.state.nodes.push(container.build());\n return this;\n }\n page(delegate) {\n const container = new PageContainerBuilder();\n if (delegate) {\n delegate(container);\n }\n this.state.nodes.push(container.build());\n return this;\n }\n tabset(delegate) {\n const container = new TabsetContainerBuilder();\n if (delegate) {\n delegate(container);\n }\n this.state.nodes.push(container.build());\n return this;\n }\n // Direct widget methods at root level\n textBox(options) {\n const widgetBuilder = new WidgetBuilder().textBox(options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n largeTextBox(options) {\n const widgetBuilder = new WidgetBuilder().largeTextBox(options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n richText(options) {\n const widgetBuilder = new WidgetBuilder().richText(options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n passwordBox(options) {\n const widgetBuilder = new WidgetBuilder().passwordBox(options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n numberBox(options) {\n const widgetBuilder = new WidgetBuilder().numberBox(options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n selectBox(options) {\n const widgetBuilder = new WidgetBuilder().selectBox(options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n lookupBox(options) {\n const widgetBuilder = new WidgetBuilder().lookupBox(options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n selectionList(options) {\n const widgetBuilder = new WidgetBuilder().selectionList(options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n dateTimeBox(options) {\n const widgetBuilder = new WidgetBuilder().dateTimeBox(options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n toggleSwitch(options) {\n const widgetBuilder = new WidgetBuilder().toggleSwitch(options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n colorBox(options) {\n const widgetBuilder = new WidgetBuilder().colorBox(options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n customWidget(type, options) {\n const widgetBuilder = new WidgetBuilder().customWidget(type, options);\n this.state.nodes.push(widgetBuilder.build());\n return this;\n }\n build() {\n return {\n nodes: this.state.nodes,\n mode: this.state.mode,\n direction: this.state.direction,\n look: this.state.look,\n layoutConfig: this.state.layoutConfig,\n };\n }\n render() {\n console.log('render() called, state:', JSON.parse(JSON.stringify(this.state)));\n if (!this.state.nodes || !Array.isArray(this.state.nodes)) {\n console.error('Invalid nodes in state:', this.state.nodes);\n return {};\n }\n try {\n const nodes = this.transformToWidgetNodes(this.state.nodes);\n console.log('render() transformed nodes:', JSON.parse(JSON.stringify(nodes)));\n // No nodes\n if (!nodes || nodes.length === 0) {\n return {};\n }\n // Single node → return directly\n if (nodes.length === 1) {\n return nodes[0];\n }\n // Multiple nodes → wrap in a container node with layout config\n const flexDirection = this.state.direction === 'horizontal' ? 'row' : 'column';\n const container = {\n type: 'flex-layout',\n name: 'root',\n options: {\n flexDirection,\n gap: '16px',\n },\n children: nodes,\n };\n return container;\n }\n catch (error) {\n console.error('Error in render():', error);\n return {};\n }\n }\n transformToWidgetNodes(nodes) {\n console.log('transformToWidgetNodes called with nodes:', nodes);\n const sorted = this.sortNodes(nodes);\n // Helper to compute flex-item options from grid layout positions\n const toFlexItemOptions = (layout, order) => {\n let colSpan;\n const positions = layout?.positions ?? this.state.layoutConfig?.positions;\n if (positions) {\n colSpan = positions.xxl?.colSpan || positions.xl?.colSpan || positions.lg?.colSpan || positions.md?.colSpan || positions.sm?.colSpan;\n }\n const basis = colSpan && colSpan > 0 && colSpan <= 12 ? `${(colSpan / 12) * 100}%` : undefined;\n const opt = {};\n if (basis)\n opt.basis = basis;\n if (order !== undefined)\n opt.order = typeof order === 'number' ? order : parseInt(order.toString());\n return opt;\n };\n const multipleSiblings = sorted.length > 1;\n return sorted.map((node) => {\n console.log('Processing node:', node);\n // Build the actual widget node\n const widget = {\n type: node.widget?.type || 'unknown',\n name: node.id,\n options: {\n ...node.widget?.options,\n mode: node.mode,\n visible: node.visible,\n disabled: node.disabled,\n readonly: node.readonly,\n },\n };\n if (node.children && node.children.length > 0) {\n widget.children = this.transformToWidgetNodes(this.sortNodes(node.children));\n }\n // If we have multiple siblings at this level, wrap each item in a flex-item container\n if (multipleSiblings) {\n const flexItemOptions = toFlexItemOptions(node.layout, node.order);\n const wrapped = {\n type: 'flex-item-layout',\n name: `${node.id || 'item'}-container`,\n options: {\n ...flexItemOptions,\n },\n children: [widget],\n };\n return wrapped;\n }\n return widget;\n });\n }\n sortNodes(nodes) {\n if (!Array.isArray(nodes))\n return [];\n return nodes\n .map((n, idx) => ({ n, idx }))\n .sort((a, b) => {\n const ao = a.n.order;\n const bo = b.n.order;\n const aHas = ao !== undefined && ao !== null;\n const bHas = bo !== undefined && bo !== null;\n if (aHas && bHas) {\n if (typeof ao === 'number' && typeof bo === 'number')\n return ao - bo;\n return String(ao).localeCompare(String(bo));\n }\n if (aHas && !bHas)\n return -1;\n if (!aHas && bHas)\n return 1;\n return a.idx - b.idx;\n })\n .map(x => x.n);\n }\n}\n//#endregion\n//#region ---- Container Builder Implementation ----\n// Base Container Builder\nclass BaseContainerBuilder {\n constructor(containerType) {\n this.containerState = {\n type: 'widget',\n children: [],\n };\n this.containerState.widget = { type: containerType, options: {} };\n }\n baseId(id) {\n this.containerState.id = id;\n return this;\n }\n baseLayout(value) {\n if (typeof value === 'number') {\n this.containerState.layout = {\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 12 },\n lg: { colSpan: value },\n xl: { colSpan: value },\n xxl: { colSpan: value },\n },\n };\n }\n else {\n this.containerState.layout = value;\n }\n return this;\n }\n // Base methods shared by all containers\n ensureChildren() {\n this.containerState.children = this.containerState.children || [];\n }\n addDirectWidget(type, options) {\n const child = new WidgetBuilder();\n child.customWidget(type, options);\n this.ensureChildren();\n this.containerState.children.push(child.build());\n return this;\n }\n build() {\n return {\n id: this.containerState.id,\n name: this.containerState.name,\n widget: this.containerState.widget,\n children: this.containerState.children,\n layout: this.containerState.layout,\n mode: this.containerState.mode,\n order: this.containerState.order,\n visible: this.containerState.visible,\n disabled: this.containerState.disabled,\n readonly: this.containerState.readonly,\n };\n }\n}\n// Flex Container Builder\nclass FlexContainerBuilder extends BaseContainerBuilder {\n constructor() {\n super('flex-layout');\n }\n id(id) {\n return this.baseId(id);\n }\n layout(value) {\n return this.baseLayout(value);\n }\n mode(mode) {\n this.containerState.mode = mode;\n return this;\n }\n order(value) {\n this.containerState.order = value;\n return this;\n }\n visible(condition) {\n this.containerState.visible = condition;\n return this;\n }\n disabled(condition) {\n this.containerState.disabled = condition;\n return this;\n }\n readonly(condition) {\n this.containerState.readonly = condition;\n return this;\n }\n setOptions(options) {\n this.containerState.widget.options = { ...this.containerState.widget.options, ...options };\n return this;\n }\n // Individual fluent methods for Flex\n setFlexDirection(direction) {\n return this.setOptions({ flexDirection: direction });\n }\n setFlexWrap(wrap) {\n return this.setOptions({ flexWrap: wrap });\n }\n setJustifyContent(justify) {\n return this.setOptions({ justifyContent: justify });\n }\n setAlignItems(align) {\n return this.setOptions({ alignItems: align });\n }\n setGap(gap) {\n return this.setOptions({ gap });\n }\n setBackgroundColor(color) {\n return this.setOptions({ backgroundColor: color });\n }\n setPadding(padding) {\n return this.setOptions({ spacing: { padding } });\n }\n setMargin(margin) {\n return this.setOptions({ spacing: { margin } });\n }\n addContainer(name, delegate) {\n // Implementation will be simplified for now\n return this;\n }\n addWidget(name, delegate) {\n const childWidget = new WidgetBuilder(name);\n if (delegate) {\n delegate(childWidget);\n }\n this.ensureChildren();\n this.containerState.children.push(childWidget.build());\n return this;\n }\n textBox(options) {\n return this.addDirectWidget('text-editor', options);\n }\n largeTextBox(options) {\n return this.addDirectWidget('large-text-editor', options);\n }\n richText(options) {\n return this.addDirectWidget('rich-text-editor', options);\n }\n passwordBox(options) {\n return this.addDirectWidget('password-editor', options);\n }\n numberBox(options) {\n return this.addDirectWidget('number-editor', options);\n }\n selectBox(options) {\n return this.addDirectWidget('select-editor', options);\n }\n lookupBox(options) {\n return this.addDirectWidget('lookup-editor', options);\n }\n selectionList(options) {\n return this.addDirectWidget('selection-list', options);\n }\n dateTimeBox(options) {\n return this.addDirectWidget('date-time-editor', options);\n }\n toggleSwitch(options) {\n return this.addDirectWidget('toggle-editor', options);\n }\n colorBox(options) {\n return this.addDirectWidget('color-editor', options);\n }\n customWidget(type, options) {\n return this.addDirectWidget(type, options);\n }\n}\n// Grid Container Builder\nclass GridContainerBuilder extends BaseContainerBuilder {\n constructor() {\n super('grid-layout');\n }\n id(id) { return this.baseId(id); }\n layout(value) { return this.baseLayout(value); }\n mode(mode) { this.containerState.mode = mode; return this; }\n order(value) { this.containerState.order = value; return this; }\n visible(condition) { this.containerState.visible = condition; return this; }\n disabled(condition) { this.containerState.disabled = condition; return this; }\n readonly(condition) { this.containerState.readonly = condition; return this; }\n setOptions(options) {\n this.containerState.widget.options = { ...this.containerState.widget.options, ...options };\n return this;\n }\n // Individual fluent methods for Grid\n setColumns(columns) {\n return this.setOptions({ grid: { default: { columns } } });\n }\n setRows(rows) {\n return this.setOptions({ grid: { default: { rows } } });\n }\n setGap(gap) {\n return this.setOptions({ grid: { default: { gap } } });\n }\n setJustifyItems(justify) {\n return this.setOptions({ grid: { default: { justifyItems: justify } } });\n }\n setAlignItems(align) {\n return this.setOptions({ grid: { default: { alignItems: align } } });\n }\n setAutoFlow(flow) {\n return this.setOptions({ grid: { default: { autoFlow: flow } } });\n }\n setBackgroundColor(color) {\n return this.setOptions({ backgroundColor: color });\n }\n setPadding(padding) {\n return this.setOptions({ spacing: { padding } });\n }\n setMargin(margin) {\n return this.setOptions({ spacing: { margin } });\n }\n addContainer(name, delegate) { return this; }\n addWidget(name, delegate) {\n const childWidget = new WidgetBuilder(name);\n if (delegate)\n delegate(childWidget);\n this.ensureChildren();\n this.containerState.children.push(childWidget.build());\n return this;\n }\n textBox(options) { return this.addDirectWidget('text-editor', options); }\n largeTextBox(options) { return this.addDirectWidget('large-text-editor', options); }\n richText(options) { return this.addDirectWidget('rich-text-editor', options); }\n passwordBox(options) { return this.addDirectWidget('password-editor', options); }\n numberBox(options) { return this.addDirectWidget('number-editor', options); }\n selectBox(options) { return this.addDirectWidget('select-editor', options); }\n lookupBox(options) { return this.addDirectWidget('lookup-editor', options); }\n selectionList(options) { return this.addDirectWidget('selection-list', options); }\n dateTimeBox(options) { return this.addDirectWidget('date-time-editor', options); }\n toggleSwitch(options) { return this.addDirectWidget('toggle-editor', options); }\n colorBox(options) { return this.addDirectWidget('color-editor', options); }\n customWidget(type, options) { return this.addDirectWidget(type, options); }\n}\n// Panel Container Builder\nclass PanelContainerBuilder extends BaseContainerBuilder {\n constructor() {\n super('panel-layout');\n }\n id(id) { return this.baseId(id); }\n layout(value) { return this.baseLayout(value); }\n mode(mode) { this.containerState.mode = mode; return this; }\n order(value) { this.containerState.order = value; return this; }\n visible(condition) { this.containerState.visible = condition; return this; }\n disabled(condition) { this.containerState.disabled = condition; return this; }\n readonly(condition) { this.containerState.readonly = condition; return this; }\n setOptions(options) {\n this.containerState.widget.options = { ...this.containerState.widget.options, ...options };\n return this;\n }\n // Individual fluent methods for Panel\n setCaption(caption) {\n return this.setOptions({ caption });\n }\n setIcon(icon) {\n return this.setOptions({ icon });\n }\n setLook(look) {\n return this.setOptions({ look });\n }\n setShowHeader(show) {\n return this.setOptions({ showHeader: show });\n }\n setCollapsed(collapsed) {\n return this.setOptions({ collapsed });\n }\n addContainer(name, delegate) { return this; }\n addWidget(name, delegate) {\n const childWidget = new WidgetBuilder(name);\n if (delegate)\n delegate(childWidget);\n this.ensureChildren();\n this.containerState.children.push(childWidget.build());\n return this;\n }\n textBox(options) { return this.addDirectWidget('text-editor', options); }\n largeTextBox(options) { return this.addDirectWidget('large-text-editor', options); }\n richText(options) { return this.addDirectWidget('rich-text-editor', options); }\n passwordBox(options) { return this.addDirectWidget('password-editor', options); }\n numberBox(options) { return this.addDirectWidget('number-editor', options); }\n selectBox(options) { return this.addDirectWidget('select-editor', options); }\n lookupBox(options) { return this.addDirectWidget('lookup-editor', options); }\n selectionList(options) { return this.addDirectWidget('selection-list', options); }\n dateTimeBox(options) { return this.addDirectWidget('date-time-editor', options); }\n toggleSwitch(options) { return this.addDirectWidget('toggle-editor', options); }\n colorBox(options) { return this.addDirectWidget('color-editor', options); }\n customWidget(type, options) { return this.addDirectWidget(type, options); }\n}\n// Page Container Builder\nclass PageContainerBuilder extends BaseContainerBuilder {\n constructor() {\n super('page-layout');\n }\n id(id) { return this.baseId(id); }\n layout(value) { return this.baseLayout(value); }\n mode(mode) { this.containerState.mode = mode; return this; }\n order(value) { this.containerState.order = value; return this; }\n visible(condition) { this.containerState.visible = condition; return this; }\n disabled(condition) { this.containerState.disabled = condition; return this; }\n readonly(condition) { this.containerState.readonly = condition; return this; }\n setOptions(options) {\n this.containerState.widget.options = { ...this.containerState.widget.options, ...options };\n return this;\n }\n // Individual fluent methods for Page\n setBackgroundColor(color) {\n return this.setOptions({ backgroundColor: color });\n }\n setTheme(theme) {\n return this.setOptions({ theme });\n }\n setHasHeader(hasHeader) {\n return this.setOptions({ hasHeader });\n }\n setHasFooter(hasFooter) {\n return this.setOptions({ hasFooter });\n }\n setDirection(direction) {\n return this.setOptions({ direction });\n }\n addContainer(name, delegate) { return this; }\n addWidget(name, delegate) {\n const childWidget = new WidgetBuilder(name);\n if (delegate)\n delegate(childWidget);\n this.ensureChildren();\n this.containerState.children.push(childWidget.build());\n return this;\n }\n textBox(options) { return this.addDirectWidget('text-editor', options); }\n largeTextBox(options) { return this.addDirectWidget('large-text-editor', options); }\n richText(options) { return this.addDirectWidget('rich-text-editor', options); }\n passwordBox(options) { return this.addDirectWidget('password-editor', options); }\n numberBox(options) { return this.addDirectWidget('number-editor', options); }\n selectBox(options) { return this.addDirectWidget('select-editor', options); }\n lookupBox(options) { return this.addDirectWidget('lookup-editor', options); }\n selectionList(options) { return this.addDirectWidget('selection-list', options); }\n dateTimeBox(options) { return this.addDirectWidget('date-time-editor', options); }\n toggleSwitch(options) { return this.addDirectWidget('toggle-editor', options); }\n colorBox(options) { return this.addDirectWidget('color-editor', options); }\n customWidget(type, options) { return this.addDirectWidget(type, options); }\n}\n// Tabset Container Builder\nclass TabsetContainerBuilder extends BaseContainerBuilder {\n constructor() {\n super('tabset-layout');\n }\n id(id) { return this.baseId(id); }\n layout(value) { return this.baseLayout(value); }\n mode(mode) { this.containerState.mode = mode; return this; }\n order(value) { this.containerState.order = value; return this; }\n visible(condition) { this.containerState.visible = condition; return this; }\n disabled(condition) { this.containerState.disabled = condition; return this; }\n readonly(condition) { this.containerState.readonly = condition; return this; }\n setOptions(options) {\n this.containerState.widget.options = { ...this.containerState.widget.options, ...options };\n return this;\n }\n // Individual fluent methods for Tabset\n setLook(look) {\n return this.setOptions({ look });\n }\n setOrientation(orientation) {\n return this.setOptions({ orientation });\n }\n setActiveIndex(index) {\n return this.setOptions({ activeIndex: index });\n }\n addContainer(name, delegate) { return this; }\n addWidget(name, delegate) {\n const childWidget = new WidgetBuilder(name);\n if (delegate)\n delegate(childWidget);\n this.ensureChildren();\n this.containerState.children.push(childWidget.build());\n return this;\n }\n textBox(options) { return this.addDirectWidget('text-editor', options); }\n largeTextBox(options) { return this.addDirectWidget('large-text-editor', options); }\n richText(options) { return this.addDirectWidget('rich-text-editor', options); }\n passwordBox(options) { return this.addDirectWidget('password-editor', options); }\n numberBox(options) { return this.addDirectWidget('number-editor', options); }\n selectBox(options) { return this.addDirectWidget('select-editor', options); }\n lookupBox(options) { return this.addDirectWidget('lookup-editor', options); }\n selectionList(options) { return this.addDirectWidget('selection-list', options); }\n dateTimeBox(options) { return this.addDirectWidget('date-time-editor', options); }\n toggleSwitch(options) { return this.addDirectWidget('toggle-editor', options); }\n colorBox(options) { return this.addDirectWidget('color-editor', options); }\n customWidget(type, options) { return this.addDirectWidget(type, options); }\n}\n//#endregion\n//#region ---- Widget Builder Implementation ----\nclass WidgetBuilder {\n constructor(name) {\n this.widgetState = {\n type: 'widget',\n children: [],\n };\n if (name) {\n this.widgetState.name = name;\n }\n }\n // No utility methods needed - widget options are pure now\n isContainerWidgetType(type) {\n if (!type)\n return false;\n return ['grid-layout', 'flex-layout', 'panel-layout', 'page-layout', 'tabset-layout'].includes(type);\n }\n id(id) {\n this.widgetState.id = id;\n return this;\n }\n layout(value) {\n if (typeof value === 'number') {\n this.widgetState.layout = {\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 12 },\n lg: { colSpan: value },\n xl: { colSpan: value },\n xxl: { colSpan: value },\n }\n };\n }\n else {\n this.widgetState.layout = value;\n }\n return this;\n }\n mode(mode) {\n this.widgetState.mode = mode;\n return this;\n }\n visible(condition) {\n this.widgetState.visible = condition;\n return this;\n }\n disabled(condition) {\n this.widgetState.disabled = condition;\n return this;\n }\n readonly(condition) {\n this.widgetState.readonly = condition;\n return this;\n }\n order(value) {\n this.widgetState.order = value;\n return this;\n }\n // Container helpers - delegate pattern required\n grid(delegate) {\n const container = new GridContainerBuilder();\n if (delegate) {\n delegate(container);\n }\n const built = container.build();\n this.widgetState.widget = built.widget;\n this.widgetState.children = built.children;\n return this;\n }\n flex(delegate) {\n const container = new FlexContainerBuilder();\n if (delegate) {\n delegate(container);\n }\n const built = container.build();\n this.widgetState.widget = built.widget;\n this.widgetState.children = built.children;\n return this;\n }\n panel(delegate) {\n const container = new PanelContainerBuilder();\n if (delegate) {\n delegate(container);\n }\n const built = container.build();\n this.widgetState.widget = built.widget;\n this.widgetState.children = built.children;\n return this;\n }\n page(delegate) {\n const container = new PageContainerBuilder();\n if (delegate) {\n delegate(container);\n }\n const built = container.build();\n this.widgetState.widget = built.widget;\n this.widgetState.children = built.children;\n return this;\n }\n tabset(delegate) {\n const container = new TabsetContainerBuilder();\n if (delegate) {\n delegate(container);\n }\n const built = container.build();\n this.widgetState.widget = built.widget;\n this.widgetState.children = built.children;\n return this;\n }\n widget(name, delegate) {\n const child = new WidgetBuilder(name);\n if (delegate) {\n delegate(child);\n }\n this.widgetState.children = this.widgetState.children || [];\n this.widgetState.children.push(child.build());\n return this;\n }\n // Widget type methods\n textBox(options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.textBox(options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type: 'text-editor',\n options,\n };\n return this;\n }\n }\n largeTextBox(options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.largeTextBox(options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type: 'large-text-editor',\n options,\n };\n return this;\n }\n }\n richText(options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.richText(options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type: 'rich-text-editor',\n options,\n };\n return this;\n }\n }\n passwordBox(options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.passwordBox(options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type: 'password-editor',\n options,\n };\n return this;\n }\n }\n numberBox(options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.numberBox(options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type: 'number-editor',\n options,\n };\n return this;\n }\n }\n selectBox(options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.selectBox(options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type: 'select-editor',\n options,\n };\n return this;\n }\n }\n lookupBox(options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.lookupBox(options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type: 'lookup-editor',\n options,\n };\n return this;\n }\n }\n selectionList(options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.selectionList(options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type: 'selection-list',\n options,\n };\n return this;\n }\n }\n dateTimeBox(options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.dateTimeBox(options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type: 'date-time-editor',\n options,\n };\n return this;\n }\n }\n toggleSwitch(options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.toggleSwitch(options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type: 'toggle-editor',\n options,\n };\n return this;\n }\n }\n colorBox(options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.colorBox(options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type: 'color-editor',\n options,\n };\n return this;\n }\n }\n customWidget(type, options) {\n if (this.isContainerWidgetType(this.widgetState.widget?.type)) {\n const child = new WidgetBuilder();\n child.customWidget(type, options);\n this.widgetState.children.push(child.build());\n return this;\n }\n else {\n this.widgetState.widget = {\n type,\n options: options,\n };\n return this;\n }\n }\n build() {\n return {\n id: this.widgetState.id,\n name: this.widgetState.name,\n widget: this.widgetState.widget,\n children: this.widgetState.children,\n layout: this.widgetState.layout,\n mode: this.widgetState.mode,\n order: this.widgetState.order,\n visible: this.widgetState.visible,\n disabled: this.widgetState.disabled,\n readonly: this.widgetState.readonly,\n };\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9sYXlvdXQtYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBNEMzQyxNQUFNLE9BQU8sdUJBQXVCO0lBQ2xDOztPQUVHO0lBQ0gsTUFBTTtRQUNKLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsdUJBQXVCLENBQUMsVUFBK0I7UUFJckQsTUFBTSxnQkFBZ0IsR0FBcUI7WUFDekMsS0FBSyxFQUFFLEVBQUU7WUFDVCxNQUFNLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUMvRixDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFcEIsc0NBQXNDO1FBQ3RDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBNEMsRUFBVSxFQUFFO1lBQzFFLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FB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QyxNQUFNO1lBQy9CLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDM0IsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQ2pDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVE7WUFDbkMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUTtTQUNwQyxDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQR3JpZExheW91dE9wdGlvbnMgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhQTGF5b3V0RGVmaW5pdGlvbixcbiAgQVhQTGF5b3V0RGlyZWN0aW9uLFxuICBBWFBMYXlvdXRMb29rLFxuICBBWFBMYXlvdXRNb2RlLFxuICBBWFBMYXlvdXROb2RlRGVmaW5pdGlvbixcbiAgQ29sb3JCb3hPcHRpb25zLFxuICBEYXRlVGltZUJveE9wdGlvbnMsXG4gIElMYXlvdXRCdWlsZGVyLFxuICBJV2lkZ2V0QnVpbGRlcixcbiAgSUdyaWRDb250YWluZXJCdWlsZGVyLFxuICBJRmxleENvbnRhaW5lckJ1aWxkZXIsXG4gIElQYW5lbENvbnRhaW5lckJ1aWxkZXIsXG4gIElQYWdlQ29udGFpbmVyQnVpbGRlcixcbiAgSVRhYnNldENvbnRhaW5lckJ1aWxkZXIsXG4gIExhcmdlVGV4dEJveE9wdGlvbnMsXG4gIExheW91dEJ1aWxkZXJTdGF0ZSxcbiAgTnVtYmVyQm94T3B0aW9ucyxcbiAgTG9va3VwQm94T3B0aW9ucyxcbiAgU2VsZWN0aW9uTGlzdE9wdGlvbnMsXG4gIFJpY2hUZXh0T3B0aW9ucyxcbiAgUGFzc3dvcmRCb3hPcHRpb25zLFxuICBTZWxlY3RCb3hPcHRpb25zLFxuICBUZXh0Qm94T3B0aW9ucyxcbiAgVG9nZ2xlU3dpdGNoT3B0aW9ucyxcbiAgV2lkZ2V0QnVpbGRlclN0YXRlLFxuICAvLyBDb250YWluZXIgb3B0aW9uc1xuICBBWFBHcmlkQ29udGFpbmVyT3B0aW9ucyxcbiAgQVhQRmxleENvbnRhaW5lck9wdGlvbnMsXG4gIEFYUFBhbmVsQ29udGFpbmVyT3B0aW9ucyxcbiAgQVhQUGFnZUNvbnRhaW5lck9wdGlvbnMsXG4gIEFYUFRhYnNldENvbnRhaW5lck9wdGlvbnMsXG4gIC8vIExheW91dCBSZW5kZXJlciB0eXBlc1xuICBMYXlvdXREZWZpbml0aW9uLFxuICBMYXlvdXROb2RlLFxuICBOb2RlTGF5b3V0Q29uZmlnLFxufSBmcm9tICcuL2xheW91dC1idWlsZGVyLnR5cGVzJztcbmltcG9ydCB7IEFYUFdpZGdldE5vZGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFYUExheW91dEJ1aWxkZXJTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBsYXlvdXQgYnVpbGRlclxuICAgKi9cbiAgY3JlYXRlKCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IExheW91dEJ1aWxkZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IExheW91dCBCdWlsZGVyIGRlZmluaXRpb24gdG8gTGF5b3V0IFJlbmRlcmVyIGZvcm1hdFxuICAgKiDYqNinIHByb2Nlc3Npbmcg2YggY2xlYW5pbmcgb3B0aW9uc1xuICAgKi9cbiAgY29udmVydFRvTGF5b3V0UmVuZGVyZXIoZGVmaW5pdGlvbjogQVhQTGF5b3V0RGVmaW5pdGlvbik6IHtcbiAgICBsYXlvdXREZWZpbml0aW9uOiBMYXlvdXREZWZpbml0aW9uO1xuICAgIGxheW91dE5vZGVzOiBMYXlvdXROb2RlW107XG4gIH0ge1xuICAgIGNvbnN0IGxheW91dERlZmluaXRpb246IExheW91dERlZmluaXRpb24gPSB7XG4gICAgICB6b25lczoge30sXG4gICAgICBzdHlsZXM6IGRlZmluaXRpb24ubGF5b3V0Q29uZmlnID8gdGhpcy5jb252ZXJ0R3JpZExheW91dFRvU3R5bGVzKGRlZmluaXRpb24ubGF5b3V0Q29uZmlnKSA6IHt9XG4gICAgfTtcblxuICAgIGNvbnN0IGxheW91dE5vZGVzOiBMYXlvdXROb2RlW10gPSBbXTtcbiAgICBsZXQgbm9kZUNvdW50ZXIgPSAwO1xuXG4gICAgLy8gSGVscGVyOiBjb3VudCBhbGwgbm9kZXMgcmVjdXJzaXZlbHlcbiAgICBjb25zdCBjb3VudE5vZGVzID0gKG5vZGVzOiBBWFBMYXlvdXROb2RlRGVmaW5pdGlvbltdIHwgdW5kZWZpbmVkKTogbnVtYmVyID0+IHtcbiAgICAgIGlmICghbm9kZXMgfHwgbm9kZXMubGVuZ3RoID09PSAwKSByZXR1cm4gMDtcbiAgICAgIHJldHVybiBub2Rlcy5yZWR1Y2UoKGFjYywgbikgPT4gYWNjICsgMSArIGNvdW50Tm9kZXMobi5jaGlsZHJlbiksIDApO1xuICAgIH07XG5cbiAgICBjb25zdCB0b3RhbE5vZGVDb3VudCA9IGNvdW50Tm9kZXMoZGVmaW5pdGlvbi5ub2Rlcyk7XG4gICAgY29uc3QgaGFzTXVsdGlwbGVOb2RlcyA9IHRvdGFsTm9kZUNvdW50ID4gMTtcblxuICAgIC8vIFByb2Nlc3Mgbm9kZXMgcmVjdXJzaXZlbHkgLSBmbGF0dGVuIGV2ZXJ5dGhpbmcgaW50byB0aGUgc2FtZSB6b25lXG4gICAgY29uc3QgcHJvY2Vzc05vZGVzID0gKG5vZGVzOiBBWFBMYXlvdXROb2RlRGVmaW5pdGlvbltdLCBwYXJlbnRab25lOiBzdHJpbmcgPSAnbWFpbicpID0+IHtcbiAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgaWYgKCFub2RlLndpZGdldCkgcmV0dXJuO1xuICAgICAgICAvLyBDcmVhdGUgbGF5b3V0IG5vZGUgZm9yIHdpZGdldFxuICAgICAgICBjb25zdCBub2RlSWQgPSBub2RlLmlkIHx8IGB3aWRnZXQtJHtub2RlQ291bnRlcisrfWA7XG4gICAgICAgIGNvbnN0IGxheW91dE5vZGU6IExheW91dE5vZGUgPSB7XG4gICAgICAgICAgaWQ6IG5vZGVJZCxcbiAgICAgICAgICB0eXBlOiBub2RlLndpZGdldC50eXBlLFxuICAgICAgICAgIHpvbmU6IHBhcmVudFpvbmUsXG4gICAgICAgICAgbW9kZTogbm9kZS5tb2RlIHx8ICdlZGl0JyxcbiAgICAgICAgICBvcHRpb25zOiBub2RlLndpZGdldC5vcHRpb25zIHx8IHt9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ29udmVydCBsYXlvdXQgY29uZmlnIHRvIG5vZGUgbGF5b3V0XG4gICAgICAgIGlmIChub2RlLmxheW91dCkge1xuICAgICAgICAgIGxheW91dE5vZGUubGF5b3V0ID0gdGhpcy5jb252ZXJ0VG9Ob2RlTGF5b3V0KG5vZGUubGF5b3V0KTtcbiAgICAgICAgfSBlbHNlIGlmIChoYXNNdWx0aXBsZU5vZGVzICYmIGRlZmluaXRpb24ubGF5b3V0Q29uZmlnKSB7XG4gICAgICAgICAgLy8gQXBwbHkgZGVmYXVsdCBsYXlvdXQgZm9yIG11bHRpLW5vZGUgc3RydWN0dXJlcyB3aGVuIG5vZGUgaGFzIG5vIGV4cGxpY2l0IGxheW91dFxuICAgICAgICAgIGxheW91dE5vZGUubGF5b3V0ID0gdGhpcy5jb252ZXJ0VG9Ob2RlTGF5b3V0KGRlZmluaXRpb24ubGF5b3V0Q29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFkZCBvcmRlciBpZiBzcGVjaWZpZWRcbiAgICAgICAgaWYgKG5vZGUub3JkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICghbGF5b3V0Tm9kZS5sYXlvdXQpIGxheW91dE5vZGUubGF5b3V0ID0ge307XG4gICAgICAgICAgbGF5b3V0Tm9kZS5sYXlvdXQub3JkZXIgPSB0eXBlb2Ygbm9kZS5vcmRlciA9PT0gJ251bWJlcicgPyBub2RlLm9yZGVyIDogcGFyc2VJbnQobm9kZS5vcmRlci50b1N0cmluZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3Mgd2lkZ2V0IG9wdGlvbnMgYW5kIGNvbnRlbnRcbiAgICAgICAgdGhpcy5wcm9jZXNzV2lkZ2V0T3B0aW9ucyhsYXlvdXROb2RlLCBub2RlKTtcblxuICAgICAgICBsYXlvdXROb2Rlcy5wdXNoKGxheW91dE5vZGUpO1xuXG4gICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGFkZCBjaGlsZHJlbiBpbnRvIHRoZSBzYW1lIHpvbmUgKGZsYXQpXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHByb2Nlc3NOb2Rlcyhub2RlLmNoaWxkcmVuLCBwYXJlbnRab25lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIENyZWF0ZSB6b25lcyBpbiBvcmRlciBhbmQgYXNzaWduIGF1dG8tb3JkZXIgdG8gbm9kZXMgKHJlY3Vyc2l2ZWx5KVxuICAgIGxldCBub2RlT3JkZXIgPSAxO1xuICAgIGNvbnN0IGFzc2lnbk9yZGVyID0gKG5vZGVzOiBBWFBMYXlvdXROb2RlRGVmaW5pdGlvbltdIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgICBub2Rlcy5mb3JFYWNoKG4gPT4ge1xuICAgICAgICBpZiAobi5vcmRlciA9PT0gdW5kZWZpbmVkIHx8IG4ub3JkZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBuLm9yZGVyID0gbm9kZU9yZGVyKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG4uY2hpbGRyZW4gJiYgbi5jaGlsZHJlbi5sZW5ndGggPiAwKSBhc3NpZ25PcmRlcihuLmNoaWxkcmVuKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgYXNzaWduT3JkZXIoZGVmaW5pdGlvbi5ub2Rlcyk7XG4gICAgXG4gICAgLy8gQWx3YXlzIGNyZWF0ZSBhIGRlZmF1bHQgbWFpbiB6b25lIHdoZW4gdGhlcmUgYXJlIG5vZGVzXG4gICAgaWYgKHRvdGFsTm9kZUNvdW50ID4gMCkge1xuICAgICAgbGF5b3V0RGVmaW5pdGlvbi56b25lc1snbWFpbiddID0ge1xuICAgICAgICBsYXlvdXQ6IHtcbiAgICAgICAgICB0eXBlOiAnZmxleCcsXG4gICAgICAgICAgZmxleERpcmVjdGlvbjogZGVmaW5pdGlvbi5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyA/ICdyb3cnIDogJ2NvbHVtbicsXG4gICAgICAgICAgZ2FwOiAnMTZweCdcbiAgICAgICAgfSxcbiAgICAgICAgb3JkZXI6IDAgLy8gTWFpbiB6b25lIGdldHMgb3JkZXIgMCAoZmlyc3QpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHByb2Nlc3NOb2RlcyhkZWZpbml0aW9uLm5vZGVzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYXlvdXREZWZpbml0aW9uLFxuICAgICAgbGF5b3V0Tm9kZXNcbiAgICB9O1xuICB9XG5cbiAgLy8gUmVtb3ZlZCBjb250YWluZXIgbWFwcGluZyBoZWxwZXJzIC0gYWxsIG5vZGVzIGFyZSB0cmVhdGVkIHVuaWZvcm1seVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGdyaWQgbGF5b3V0IG9wdGlvbnMgdG8gQ1NTIHN0eWxlc1xuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0R3JpZExheW91dFRvU3R5bGVzKGxheW91dDogQVhQR3JpZExheW91dE9wdGlvbnMpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBzdHlsZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBcbiAgICAvLyBIYW5kbGUgcmVzcG9uc2l2ZSBwb3NpdGlvbnNcbiAgICBpZiAobGF5b3V0LnBvc2l0aW9ucykge1xuICAgICAgLy8gVXNlIGxhcmdlc3QgYnJlYWtwb2ludCBmb3IgYmFzZSBzdHlsZXNcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gbGF5b3V0LnBvc2l0aW9ucy54eGwgfHwgbGF5b3V0LnBvc2l0aW9ucy54bCB8fCBsYXlvdXQucG9zaXRpb25zLmxnIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQucG9zaXRpb25zLm1kIHx8IGxheW91dC5wb3NpdGlvbnMuc207XG4gICAgICBcbiAgICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgICBpZiAocG9zaXRpb24uY29sU3BhbiAmJiBwb3NpdGlvbi5jb2xTcGFuIDwgMTIpIHtcbiAgICAgICAgICBzdHlsZXNbJ3dpZHRoJ10gPSBgJHsocG9zaXRpb24uY29sU3BhbiAvIDEyKSAqIDEwMH0lYDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHlsZXM7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBncmlkIGxheW91dCB0byBub2RlIGxheW91dCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRUb05vZGVMYXlvdXQobGF5b3V0OiBBWFBHcmlkTGF5b3V0T3B0aW9ucyk6IE5vZGVMYXlvdXRDb25maWcge1xuICAgIGNvbnN0IG5vZGVMYXlvdXQ6IE5vZGVMYXlvdXRDb25maWcgPSB7fTtcbiAgICBcbiAgICBpZiAobGF5b3V0LnBvc2l0aW9ucykge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSBsYXlvdXQucG9zaXRpb25zLnh4bCB8fCBsYXlvdXQucG9zaXRpb25zLnhsIHx8IGxheW91dC5wb3NpdGlvbnMubGcgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgIGxheW91dC5wb3NpdGlvbnMubWQgfHwgbGF5b3V0LnBvc2l0aW9ucy5zbTtcbiAgICAgIFxuICAgICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICAgIGlmIChwb3NpdGlvbi5jb2xTcGFuICYmIHBvc2l0aW9uLmNvbFNwYW4gPCAxMikge1xuICAgICAgICAgIG5vZGVMYXlvdXQuZmxleCA9IGAwIDAgJHsocG9zaXRpb24uY29sU3BhbiAvIDEyKSAqIDEwMH0lYDtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHBvc2l0aW9uLnJvd1NwYW4gJiYgcG9zaXRpb24ucm93U3BhbiA+IDEpIHtcbiAgICAgICAgICBub2RlTGF5b3V0LmdyaWRBcmVhID0gYHNwYW4gJHtwb3NpdGlvbi5yb3dTcGFufWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZUxheW91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHdpZGdldCBvcHRpb25zIGJhc2VkIG9uIGFjdHVhbCB3aWRnZXQgY29uZmlndXJhdGlvbnNcbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc1dpZGdldE9wdGlvbnMobGF5b3V0Tm9kZTogTGF5b3V0Tm9kZSwgc291cmNlTm9kZTogQVhQTGF5b3V0Tm9kZURlZmluaXRpb24pIHtcbiAgICBpZiAoIXNvdXJjZU5vZGUud2lkZ2V0Py5vcHRpb25zKSByZXR1cm47XG5cbiAgICBjb25zdCBvcHRpb25zID0gc291cmNlTm9kZS53aWRnZXQub3B0aW9ucztcbiAgICBjb25zdCBwcm9jZXNzZWRPcHRpb25zOiBhbnkgPSB7IC4uLm9wdGlvbnMgfTtcblxuICAgIC8vIFByb2Nlc3MgYmFzZWQgb24gYWN0dWFsIHdpZGdldCB0eXBlXG4gICAgc3dpdGNoIChzb3VyY2VOb2RlLndpZGdldC50eXBlKSB7XG4gICAgICBjYXNlICd0ZXh0LWJsb2NrLWxheW91dCc6XG4gICAgICAgIC8vIFRleHQgQmxvY2sgV2lkZ2V0IC0g2YHZgti3IGNvbnRlbnRcbiAgICAgICAgcHJvY2Vzc2VkT3B0aW9ucy5jb250ZW50ID0gdGhpcy5wcm9jZXNzVGV4dEJsb2NrQ29udGVudChvcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgY2FzZSAnZ3JpZC1sYXlvdXQnOlxuICAgICAgICAvLyBHcmlkIExheW91dCBXaWRnZXQgLSBjb21wbGV0ZSBncmlkIHN5c3RlbVxuICAgICAgICBwcm9jZXNzZWRPcHRpb25zLmdyaWQgPSB0aGlzLnByb2Nlc3NHcmlkT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgcHJvY2Vzc2VkT3B0aW9ucy5zcGFjaW5nID0gdGhpcy5wcm9jZXNzU3BhY2luZ09wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHByb2Nlc3NlZE9wdGlvbnMuYm9yZGVyID0gdGhpcy5wcm9jZXNzQm9yZGVyT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYmFja2dyb3VuZENvbG9yKSBwcm9jZXNzZWRPcHRpb25zLmJhY2tncm91bmRDb2xvciA9IG9wdGlvbnMuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICBjYXNlICdmbGV4LWxheW91dCc6XG4gICAgICAgIC8vIEZsZXggTGF5b3V0IFdpZGdldFxuICAgICAgICBwcm9jZXNzZWRPcHRpb25zLmZsZXggPSB0aGlzLnByb2Nlc3NGbGV4T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgY2FzZSAncGFuZWwtbGF5b3V0JzpcbiAgICAgICAgLy8gUGFuZWwgTGF5b3V0IFdpZGdldFxuICAgICAgICBwcm9jZXNzZWRPcHRpb25zLnBhbmVsID0gdGhpcy5wcm9jZXNzUGFuZWxPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICBjYXNlICd0YWcnOlxuICAgICAgICAvLyBUYWcgV2lkZ2V0IChjdXN0b20pXG4gICAgICAgIHByb2Nlc3NlZE9wdGlvbnMubGFiZWwgPSBvcHRpb25zLmxhYmVsIHx8IG9wdGlvbnMuY29udGVudCB8fCAnVGFnJztcbiAgICAgICAgcHJvY2Vzc2VkT3B0aW9ucy50b25lID0gb3B0aW9ucy50b25lIHx8ICdwcmltYXJ5JztcbiAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gR2VuZXJpYyBwcm9jZXNzaW5nINio2LHYp9uMIGN1c3RvbSB3aWRnZXRzXG4gICAgICAgIGlmIChvcHRpb25zLmNvbnRlbnQpIHtcbiAgICAgICAgICBwcm9jZXNzZWRPcHRpb25zLmNvbnRlbnQgPSB0aGlzLnByb2Nlc3NHZW5lcmljQ29udGVudChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsYXlvdXROb2RlLm9wdGlvbnMgPSBwcm9jZXNzZWRPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgdGV4dC1ibG9jay1sYXlvdXQgY29udGVudFxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzVGV4dEJsb2NrQ29udGVudChvcHRpb25zOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghb3B0aW9ucy5jb250ZW50KSByZXR1cm4gJyc7XG4gICAgXG4gICAgbGV0IGNvbnRlbnQgPSBvcHRpb25zLmNvbnRlbnQ7XG4gICAgXG4gICAgLy8g2Kfar9ixINmC2KjZhNin2YsgSFRNTCB0YWcg2K/Yp9ix2YfYjCDYp9iz2KrZgdin2K/ZhyDaqdmGXG4gICAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJzwnKSkge1xuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfVxuICAgIFxuICAgIC8vINiq2KjYr9uM2YQgcGxhaW4gdGV4dCDYqNmHIEhUTUwg2KjYpyBzdHlsaW5nINmF2YbYp9iz2KhcbiAgICBpZiAob3B0aW9ucy50eXBlID09PSAnaGVhZGluZycgfHwgb3B0aW9ucy5sZXZlbCA9PT0gJ2gxJyB8fCBvcHRpb25zLmxldmVsID09PSAnaDInKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IG9wdGlvbnMubGV2ZWwgfHwgJ2gyJztcbiAgICAgIHJldHVybiBgPCR7bGV2ZWx9IHN0eWxlPVwibWFyZ2luOiAwIDAgMTZweCAwOyBjb2xvcjogIzMzMzsgZm9udC13ZWlnaHQ6IDYwMDtcIj4ke2NvbnRlbnR9PC8ke2xldmVsfT5gO1xuICAgIH1cbiAgICBcbiAgICBpZiAob3B0aW9ucy53ZWlnaHQgPT09ICdib2xkJyB8fCBvcHRpb25zLmJvbGQpIHtcbiAgICAgIHJldHVybiBgPHN0cm9uZyBzdHlsZT1cImNvbG9yOiAjMzMzO1wiPiR7Y29udGVudH08L3N0cm9uZz5gO1xuICAgIH1cbiAgICBcbiAgICAvLyBEZWZhdWx0IHRleHQgc3R5bGluZ1xuICAgIHJldHVybiBgPHNwYW4gc3R5bGU9XCJjb2xvcjogIzMzMzsgbGluZS1oZWlnaHQ6IDEuNTtcIj4ke2NvbnRlbnR9PC9zcGFuPmA7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBncmlkLWxheW91dCBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NHcmlkT3B0aW9ucyhvcHRpb25zOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGNvbHVtbnM6IG9wdGlvbnMuY29sdW1ucyB8fCAxMixcbiAgICAgICAgcm93czogb3B0aW9ucy5yb3dzIHx8ICdhdXRvJyxcbiAgICAgICAgZ2FwOiBvcHRpb25zLmdhcCB8fCAnMTZweCcsXG4gICAgICAgIGp1c3RpZnlJdGVtczogb3B0aW9ucy5qdXN0aWZ5SXRlbXMgfHwgJ3N0cmV0Y2gnLFxuICAgICAgICBhbGlnbkl0ZW1zOiBvcHRpb25zLmFsaWduSXRlbXMgfHwgJ3N0cmV0Y2gnLFxuICAgICAgICBhdXRvRmxvdzogb3B0aW9ucy5hdXRvRmxvdyB8fCAncm93J1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBzcGFjaW5nIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgcHJvY2Vzc1NwYWNpbmdPcHRpb25zKG9wdGlvbnM6IGFueSk6IGFueSB7XG4gICAgaWYgKCFvcHRpb25zLnNwYWNpbmcgJiYgIW9wdGlvbnMucGFkZGluZyAmJiAhb3B0aW9ucy5tYXJnaW4pIHJldHVybiB1bmRlZmluZWQ7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZGRpbmc6IG9wdGlvbnMuc3BhY2luZz8ucGFkZGluZyB8fCBvcHRpb25zLnBhZGRpbmcgfHwgJzBweCcsXG4gICAgICBtYXJnaW46IG9wdGlvbnMuc3BhY2luZz8ubWFyZ2luIHx8IG9wdGlvbnMubWFyZ2luIHx8ICcwcHgnXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGJvcmRlciBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NCb3JkZXJPcHRpb25zKG9wdGlvbnM6IGFueSk6IGFueSB7XG4gICAgaWYgKCFvcHRpb25zLmJvcmRlciAmJiAhb3B0aW9ucy5ib3JkZXJSYWRpdXMgJiYgIW9wdGlvbnMuYm9yZGVyV2lkdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHJhZGl1czogb3B0aW9ucy5ib3JkZXI/LnJhZGl1cyB8fCBvcHRpb25zLmJvcmRlclJhZGl1cyB8fCAnMHB4JyxcbiAgICAgIHdpZHRoOiBvcHRpb25zLmJvcmRlcj8ud2lkdGggfHwgb3B0aW9ucy5ib3JkZXJXaWR0aCB8fCAnMHB4JyxcbiAgICAgIGNvbG9yOiBvcHRpb25zLmJvcmRlcj8uY29sb3IgfHwgb3B0aW9ucy5ib3JkZXJDb2xvciB8fCAnI2RkZCcsXG4gICAgICBzdHlsZTogb3B0aW9ucy5ib3JkZXI/LnN0eWxlIHx8IG9wdGlvbnMuYm9yZGVyU3R5bGUgfHwgJ3NvbGlkJ1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBmbGV4LWxheW91dCBvcHRpb25zXG4gICAqL1xuICBwcml2YXRlIHByb2Nlc3NGbGV4T3B0aW9ucyhvcHRpb25zOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBmbGV4RGlyZWN0aW9uOiBvcHRpb25zLmZsZXhEaXJlY3Rpb24gfHwgJ3JvdycsXG4gICAgICBqdXN0aWZ5Q29udGVudDogb3B0aW9ucy5qdXN0aWZ5Q29udGVudCB8fCAnZmxleC1zdGFydCcsXG4gICAgICBhbGlnbkl0ZW1zOiBvcHRpb25zLmFsaWduSXRlbXMgfHwgJ3N0cmV0Y2gnLFxuICAgICAgZ2FwOiBvcHRpb25zLmdhcCB8fCAnMTZweCcsXG4gICAgICBmbGV4V3JhcDogb3B0aW9ucy5mbGV4V3JhcCB8fCAnbm93cmFwJ1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBwYW5lbC1sYXlvdXQgb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzUGFuZWxPcHRpb25zKG9wdGlvbnM6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpdGxlOiBvcHRpb25zLnRpdGxlIHx8ICcnLFxuICAgICAgY29sbGFwc2libGU6IG9wdGlvbnMuY29sbGFwc2libGUgfHwgZmFsc2UsXG4gICAgICBjb2xsYXBzZWQ6IG9wdGlvbnMuY29sbGFwc2VkIHx8IGZhbHNlLFxuICAgICAgcGFkZGluZzogb3B0aW9ucy5wYWRkaW5nIHx8ICcxNnB4J1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0YWcgY29udGVudFxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzVGFnQ29udGVudChvcHRpb25zOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBvcHRpb25zLmxhYmVsIHx8IG9wdGlvbnMuY29udGVudCB8fCAnVGFnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGdlbmVyaWMgY29udGVudFxuICAgKi9cbiAgcHJpdmF0ZSBwcm9jZXNzR2VuZXJpY0NvbnRlbnQob3B0aW9uczogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIW9wdGlvbnMuY29udGVudCkgcmV0dXJuICcnO1xuICAgIFxuICAgIC8vINin2q/YsSBIVE1MIHRhZ3Mg2K/Yp9ix2YfYjCDYp9iz2KrZgdin2K/ZhyDaqdmGXG4gICAgaWYgKG9wdGlvbnMuY29udGVudC5pbmNsdWRlcygnPCcpKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jb250ZW50O1xuICAgIH1cbiAgICBcbiAgICAvLyBQbGFpbiB0ZXh0INio2KcgYmFzaWMgc3R5bGluZ1xuICAgIHJldHVybiBgPHNwYW4gc3R5bGU9XCJjb2xvcjogIzMzMztcIj4ke29wdGlvbnMuY29udGVudH08L3NwYW4+YDtcbiAgfVxuXG59XG5cbi8vI3JlZ2lvbiAtLS0tICAgTGF5b3V0IEJ1aWxkZXIgSW1wbGVtZW50YXRpb24gICAtLS0tXG5cbmNsYXNzIExheW91dEJ1aWxkZXIgaW1wbGVtZW50cyBJTGF5b3V0QnVpbGRlciB7XG4gIHByaXZhdGUgc3RhdGU6IExheW91dEJ1aWxkZXJTdGF0ZSA9IHtcbiAgICBub2RlczogW10sXG4gICAgbW9kZTogJ2VkaXQnLFxuICAgIGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyxcbiAgICBsb29rOiAnbm9ybWFsJyxcbiAgICBsYXlvdXRDb25maWc6IHtcbiAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICBzbTogeyBjb2xTcGFuOiAxMiB9LFxuICAgICAgICBtZDogeyBjb2xTcGFuOiA4IH0sXG4gICAgICAgIGxnOiB7IGNvbFNwYW46IDYgfSxcbiAgICAgICAgeGw6IHsgY29sU3BhbjogNSB9LFxuICAgICAgICB4eGw6IHsgY29sU3BhbjogNCB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9O1xuXG4gIHdpZGdldChuYW1lPzogc3RyaW5nLCBkZWxlZ2F0ZT86ICh3aWRnZXQ6IElXaWRnZXRCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXIge1xuICAgIGNvbnN0IHdpZGdldEJ1aWxkZXIgPSBuZXcgV2lkZ2V0QnVpbGRlcihuYW1lKTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKHdpZGdldEJ1aWxkZXIpO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLm5vZGVzLnB1c2god2lkZ2V0QnVpbGRlci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxheW91dChjb25maWc6IFBhcnRpYWw8QVhQR3JpZExheW91dE9wdGlvbnM+KTogSUxheW91dEJ1aWxkZXIge1xuICAgIHRoaXMuc3RhdGUubGF5b3V0Q29uZmlnID0geyAuLi50aGlzLnN0YXRlLmxheW91dENvbmZpZywgLi4uY29uZmlnIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtb2RlKG1vZGU6IEFYUExheW91dE1vZGUpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgdGhpcy5zdGF0ZS5tb2RlID0gbW9kZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpcmVjdGlvbihkaXJlY3Rpb246IEFYUExheW91dERpcmVjdGlvbik6IElMYXlvdXRCdWlsZGVyIHtcbiAgICB0aGlzLnN0YXRlLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxvb2sobG9vazogQVhQTGF5b3V0TG9vayk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICB0aGlzLnN0YXRlLmxvb2sgPSBsb29rO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cblxuICAvLyBQcmVkZWZpbmVkIGxheW91dCBjb250YWluZXJzIGF0IHJvb3QgbGV2ZWwgLSBkZWxlZ2F0ZSBwYXR0ZXJuIHJlcXVpcmVkXG4gIGdyaWQoZGVsZWdhdGU6IChjb250YWluZXI6IElHcmlkQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgR3JpZENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMuc3RhdGUubm9kZXMucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmbGV4KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJRmxleENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IEZsZXhDb250YWluZXJCdWlsZGVyKCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLm5vZGVzLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGFuZWwoZGVsZWdhdGU6IChjb250YWluZXI6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IFBhbmVsQ29udGFpbmVyQnVpbGRlcigpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5ub2Rlcy5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhZ2UoZGVsZWdhdGU6IChjb250YWluZXI6IElQYWdlQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgUGFnZUNvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMuc3RhdGUubm9kZXMucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0YWJzZXQoZGVsZWdhdGU6IChjb250YWluZXI6IElUYWJzZXRDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXIge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBUYWJzZXRDb250YWluZXJCdWlsZGVyKCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlLm5vZGVzLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gRGlyZWN0IHdpZGdldCBtZXRob2RzIGF0IHJvb3QgbGV2ZWxcbiAgdGV4dEJveChvcHRpb25zPzogVGV4dEJveE9wdGlvbnMpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgY29uc3Qgd2lkZ2V0QnVpbGRlciA9IG5ldyBXaWRnZXRCdWlsZGVyKCkudGV4dEJveChvcHRpb25zKTtcbiAgICB0aGlzLnN0YXRlLm5vZGVzLnB1c2god2lkZ2V0QnVpbGRlci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxhcmdlVGV4dEJveChvcHRpb25zPzogTGFyZ2VUZXh0Qm94T3B0aW9ucyk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCB3aWRnZXRCdWlsZGVyID0gbmV3IFdpZGdldEJ1aWxkZXIoKS5sYXJnZVRleHRCb3gob3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZS5ub2Rlcy5wdXNoKHdpZGdldEJ1aWxkZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICByaWNoVGV4dChvcHRpb25zPzogUmljaFRleHRPcHRpb25zKTogSUxheW91dEJ1aWxkZXIge1xuICAgIGNvbnN0IHdpZGdldEJ1aWxkZXIgPSBuZXcgV2lkZ2V0QnVpbGRlcigpLnJpY2hUZXh0KG9wdGlvbnMpO1xuICAgIHRoaXMuc3RhdGUubm9kZXMucHVzaCh3aWRnZXRCdWlsZGVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGFzc3dvcmRCb3gob3B0aW9ucz86IFBhc3N3b3JkQm94T3B0aW9ucyk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCB3aWRnZXRCdWlsZGVyID0gbmV3IFdpZGdldEJ1aWxkZXIoKS5wYXNzd29yZEJveChvcHRpb25zKTtcbiAgICB0aGlzLnN0YXRlLm5vZGVzLnB1c2god2lkZ2V0QnVpbGRlci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG51bWJlckJveChvcHRpb25zPzogTnVtYmVyQm94T3B0aW9ucyk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCB3aWRnZXRCdWlsZGVyID0gbmV3IFdpZGdldEJ1aWxkZXIoKS5udW1iZXJCb3gob3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZS5ub2Rlcy5wdXNoKHdpZGdldEJ1aWxkZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZWxlY3RCb3gob3B0aW9uczogU2VsZWN0Qm94T3B0aW9ucyk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCB3aWRnZXRCdWlsZGVyID0gbmV3IFdpZGdldEJ1aWxkZXIoKS5zZWxlY3RCb3gob3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZS5ub2Rlcy5wdXNoKHdpZGdldEJ1aWxkZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsb29rdXBCb3gob3B0aW9uczogTG9va3VwQm94T3B0aW9ucyk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCB3aWRnZXRCdWlsZGVyID0gbmV3IFdpZGdldEJ1aWxkZXIoKS5sb29rdXBCb3gob3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZS5ub2Rlcy5wdXNoKHdpZGdldEJ1aWxkZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZWxlY3Rpb25MaXN0KG9wdGlvbnM6IFNlbGVjdGlvbkxpc3RPcHRpb25zKTogSUxheW91dEJ1aWxkZXIge1xuICAgIGNvbnN0IHdpZGdldEJ1aWxkZXIgPSBuZXcgV2lkZ2V0QnVpbGRlcigpLnNlbGVjdGlvbkxpc3Qob3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZS5ub2Rlcy5wdXNoKHdpZGdldEJ1aWxkZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkYXRlVGltZUJveChvcHRpb25zPzogRGF0ZVRpbWVCb3hPcHRpb25zKTogSUxheW91dEJ1aWxkZXIge1xuICAgIGNvbnN0IHdpZGdldEJ1aWxkZXIgPSBuZXcgV2lkZ2V0QnVpbGRlcigpLmRhdGVUaW1lQm94KG9wdGlvbnMpO1xuICAgIHRoaXMuc3RhdGUubm9kZXMucHVzaCh3aWRnZXRCdWlsZGVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdG9nZ2xlU3dpdGNoKG9wdGlvbnM/OiBUb2dnbGVTd2l0Y2hPcHRpb25zKTogSUxheW91dEJ1aWxkZXIge1xuICAgIGNvbnN0IHdpZGdldEJ1aWxkZXIgPSBuZXcgV2lkZ2V0QnVpbGRlcigpLnRvZ2dsZVN3aXRjaChvcHRpb25zKTtcbiAgICB0aGlzLnN0YXRlLm5vZGVzLnB1c2god2lkZ2V0QnVpbGRlci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbG9yQm94KG9wdGlvbnM/OiBDb2xvckJveE9wdGlvbnMpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgY29uc3Qgd2lkZ2V0QnVpbGRlciA9IG5ldyBXaWRnZXRCdWlsZGVyKCkuY29sb3JCb3gob3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZS5ub2Rlcy5wdXNoKHdpZGdldEJ1aWxkZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjdXN0b21XaWRnZXQ8VD4odHlwZTogc3RyaW5nLCBvcHRpb25zPzogVCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCB3aWRnZXRCdWlsZGVyID0gbmV3IFdpZGdldEJ1aWxkZXIoKS5jdXN0b21XaWRnZXQ8VD4odHlwZSwgb3B0aW9ucyk7XG4gICAgdGhpcy5zdGF0ZS5ub2Rlcy5wdXNoKHdpZGdldEJ1aWxkZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBidWlsZCgpOiBBWFBMYXlvdXREZWZpbml0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgbm9kZXM6IHRoaXMuc3RhdGUubm9kZXMsXG4gICAgICBtb2RlOiB0aGlzLnN0YXRlLm1vZGUsXG4gICAgICBkaXJlY3Rpb246IHRoaXMuc3RhdGUuZGlyZWN0aW9uLFxuICAgICAgbG9vazogdGhpcy5zdGF0ZS5sb29rLFxuICAgICAgbGF5b3V0Q29uZmlnOiB0aGlzLnN0YXRlLmxheW91dENvbmZpZyxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKCk6IEFYUFdpZGdldE5vZGUge1xuICAgIGNvbnNvbGUubG9nKCdyZW5kZXIoKSBjYWxsZWQsIHN0YXRlOicsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zdGF0ZSkpKTtcblxuICAgIGlmICghdGhpcy5zdGF0ZS5ub2RlcyB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLnN0YXRlLm5vZGVzKSkge1xuICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBub2RlcyBpbiBzdGF0ZTonLCB0aGlzLnN0YXRlLm5vZGVzKTtcbiAgICAgIHJldHVybiB7fSBhcyBBWFBXaWRnZXROb2RlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBub2RlcyA9IHRoaXMudHJhbnNmb3JtVG9XaWRnZXROb2Rlcyh0aGlzLnN0YXRlLm5vZGVzKTtcbiAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXIoKSB0cmFuc2Zvcm1lZCBub2RlczonLCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG5vZGVzKSkpO1xuXG4gICAgICAvLyBObyBub2Rlc1xuICAgICAgaWYgKCFub2RlcyB8fCBub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHt9IGFzIEFYUFdpZGdldE5vZGU7XG4gICAgICB9XG5cbiAgICAgIC8vIFNpbmdsZSBub2RlIOKGkiByZXR1cm4gZGlyZWN0bHlcbiAgICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG5vZGVzWzBdO1xuICAgICAgfVxuXG4gICAgICAvLyBNdWx0aXBsZSBub2RlcyDihpIgd3JhcCBpbiBhIGNvbnRhaW5lciBub2RlIHdpdGggbGF5b3V0IGNvbmZpZ1xuICAgICAgY29uc3QgZmxleERpcmVjdGlvbiA9IHRoaXMuc3RhdGUuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAncm93JyA6ICdjb2x1bW4nO1xuICAgICAgY29uc3QgY29udGFpbmVyOiBBWFBXaWRnZXROb2RlID0ge1xuICAgICAgICB0eXBlOiAnZmxleC1sYXlvdXQnLFxuICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uLFxuICAgICAgICAgIGdhcDogJzE2cHgnLFxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogbm9kZXMsXG4gICAgICB9IGFzIEFYUFdpZGdldE5vZGU7XG5cbiAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIHJlbmRlcigpOicsIGVycm9yKTtcbiAgICAgIHJldHVybiB7fSBhcyBBWFBXaWRnZXROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtVG9XaWRnZXROb2Rlcyhub2RlczogQVhQTGF5b3V0Tm9kZURlZmluaXRpb25bXSk6IEFYUFdpZGdldE5vZGVbXSB7XG4gICAgY29uc29sZS5sb2coJ3RyYW5zZm9ybVRvV2lkZ2V0Tm9kZXMgY2FsbGVkIHdpdGggbm9kZXM6Jywgbm9kZXMpO1xuICAgIGNvbnN0IHNvcnRlZCA9IHRoaXMuc29ydE5vZGVzKG5vZGVzKTtcblxuICAgIC8vIEhlbHBlciB0byBjb21wdXRlIGZsZXgtaXRlbSBvcHRpb25zIGZyb20gZ3JpZCBsYXlvdXQgcG9zaXRpb25zXG4gICAgY29uc3QgdG9GbGV4SXRlbU9wdGlvbnMgPSAobGF5b3V0PzogQVhQR3JpZExheW91dE9wdGlvbnMsIG9yZGVyPzogbnVtYmVyIHwgc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgY29sU3BhbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcG9zaXRpb25zID0gbGF5b3V0Py5wb3NpdGlvbnMgPz8gdGhpcy5zdGF0ZS5sYXlvdXRDb25maWc/LnBvc2l0aW9ucztcbiAgICAgIGlmIChwb3NpdGlvbnMpIHtcbiAgICAgICAgY29sU3BhbiA9IHBvc2l0aW9ucy54eGw/LmNvbFNwYW4gfHwgcG9zaXRpb25zLnhsPy5jb2xTcGFuIHx8IHBvc2l0aW9ucy5sZz8uY29sU3BhbiB8fCBwb3NpdGlvbnMubWQ/LmNvbFNwYW4gfHwgcG9zaXRpb25zLnNtPy5jb2xTcGFuO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFzaXMgPSBjb2xTcGFuICYmIGNvbFNwYW4gPiAwICYmIGNvbFNwYW4gPD0gMTIgPyBgJHsoY29sU3BhbiAvIDEyKSAqIDEwMH0lYCA6IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IG9wdDogYW55ID0ge307XG4gICAgICBpZiAoYmFzaXMpIG9wdC5iYXNpcyA9IGJhc2lzO1xuICAgICAgaWYgKG9yZGVyICE9PSB1bmRlZmluZWQpIG9wdC5vcmRlciA9IHR5cGVvZiBvcmRlciA9PT0gJ251bWJlcicgPyBvcmRlciA6IHBhcnNlSW50KG9yZGVyLnRvU3RyaW5nKCkpO1xuICAgICAgcmV0dXJuIG9wdDtcbiAgICB9O1xuXG4gICAgY29uc3QgbXVsdGlwbGVTaWJsaW5ncyA9IHNvcnRlZC5sZW5ndGggPiAxO1xuXG4gICAgcmV0dXJuIHNvcnRlZC5tYXAoKG5vZGUpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzaW5nIG5vZGU6Jywgbm9kZSk7XG5cbiAgICAgIC8vIEJ1aWxkIHRoZSBhY3R1YWwgd2lkZ2V0IG5vZGVcbiAgICAgIGNvbnN0IHdpZGdldDogQVhQV2lkZ2V0Tm9kZSA9IHtcbiAgICAgICAgdHlwZTogbm9kZS53aWRnZXQ/LnR5cGUgfHwgJ3Vua25vd24nLFxuICAgICAgICBuYW1lOiBub2RlLmlkLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgLi4ubm9kZS53aWRnZXQ/Lm9wdGlvbnMsXG4gICAgICAgICAgbW9kZTogbm9kZS5tb2RlLFxuICAgICAgICAgIHZpc2libGU6IG5vZGUudmlzaWJsZSxcbiAgICAgICAgICBkaXNhYmxlZDogbm9kZS5kaXNhYmxlZCxcbiAgICAgICAgICByZWFkb25seTogbm9kZS5yZWFkb25seSxcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgQVhQV2lkZ2V0Tm9kZTtcblxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHdpZGdldC5jaGlsZHJlbiA9IHRoaXMudHJhbnNmb3JtVG9XaWRnZXROb2Rlcyh0aGlzLnNvcnROb2Rlcyhub2RlLmNoaWxkcmVuKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgbXVsdGlwbGUgc2libGluZ3MgYXQgdGhpcyBsZXZlbCwgd3JhcCBlYWNoIGl0ZW0gaW4gYSBmbGV4LWl0ZW0gY29udGFpbmVyXG4gICAgICBpZiAobXVsdGlwbGVTaWJsaW5ncykge1xuICAgICAgICBjb25zdCBmbGV4SXRlbU9wdGlvbnMgPSB0b0ZsZXhJdGVtT3B0aW9ucyhub2RlLmxheW91dCwgbm9kZS5vcmRlcik7XG4gICAgICAgIGNvbnN0IHdyYXBwZWQ6IEFYUFdpZGdldE5vZGUgPSB7XG4gICAgICAgICAgdHlwZTogJ2ZsZXgtaXRlbS1sYXlvdXQnLFxuICAgICAgICAgIG5hbWU6IGAke25vZGUuaWQgfHwgJ2l0ZW0nfS1jb250YWluZXJgLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIC4uLmZsZXhJdGVtT3B0aW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNoaWxkcmVuOiBbd2lkZ2V0XSxcbiAgICAgICAgfSBhcyBBWFBXaWRnZXROb2RlO1xuICAgICAgICByZXR1cm4gd3JhcHBlZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHdpZGdldDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydE5vZGVzKG5vZGVzOiBBWFBMYXlvdXROb2RlRGVmaW5pdGlvbltdKTogQVhQTGF5b3V0Tm9kZURlZmluaXRpb25bXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG5vZGVzKSkgcmV0dXJuIFtdO1xuICAgIHJldHVybiBub2Rlc1xuICAgICAgLm1hcCgobiwgaWR4KSA9PiAoeyBuLCBpZHggfSkpXG4gICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBhbyA9IGEubi5vcmRlcjtcbiAgICAgICAgY29uc3QgYm8gPSBiLm4ub3JkZXI7XG4gICAgICAgIGNvbnN0IGFIYXMgPSBhbyAhPT0gdW5kZWZpbmVkICYmIGFvICE9PSBudWxsO1xuICAgICAgICBjb25zdCBiSGFzID0gYm8gIT09IHVuZGVmaW5lZCAmJiBibyAhPT0gbnVsbDtcbiAgICAgICAgaWYgKGFIYXMgJiYgYkhhcykge1xuICAgICAgICAgIGlmICh0eXBlb2YgYW8gPT09ICdudW1iZXInICYmIHR5cGVvZiBibyA9PT0gJ251bWJlcicpIHJldHVybiBhbyAtIGJvO1xuICAgICAgICAgIHJldHVybiBTdHJpbmcoYW8pLmxvY2FsZUNvbXBhcmUoU3RyaW5nKGJvKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFIYXMgJiYgIWJIYXMpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKCFhSGFzICYmIGJIYXMpIHJldHVybiAxO1xuICAgICAgICByZXR1cm4gYS5pZHggLSBiLmlkeDtcbiAgICAgIH0pXG4gICAgICAubWFwKHggPT4geC5uKTtcbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBDb250YWluZXIgQnVpbGRlciBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuLy8gQmFzZSBDb250YWluZXIgQnVpbGRlclxuYWJzdHJhY3QgY2xhc3MgQmFzZUNvbnRhaW5lckJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgY29udGFpbmVyU3RhdGU6IFdpZGdldEJ1aWxkZXJTdGF0ZSA9IHtcbiAgICB0eXBlOiAnd2lkZ2V0JyBhcyBjb25zdCxcbiAgICBjaGlsZHJlbjogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IoY29udGFpbmVyVHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS53aWRnZXQgPSB7IHR5cGU6IGNvbnRhaW5lclR5cGUsIG9wdGlvbnM6IHt9IH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYmFzZUlkKGlkOiBzdHJpbmcpOiB0aGlzIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmlkID0gaWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcm90ZWN0ZWQgYmFzZUxheW91dCh2YWx1ZTogUGFydGlhbDxBWFBHcmlkTGF5b3V0T3B0aW9ucz4gfCBudW1iZXIpOiB0aGlzIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5jb250YWluZXJTdGF0ZS5sYXlvdXQgPSB7XG4gICAgICAgIHBvc2l0aW9uczoge1xuICAgICAgICAgIHNtOiB7IGNvbFNwYW46IDEyIH0sXG4gICAgICAgICAgbWQ6IHsgY29sU3BhbjogMTIgfSxcbiAgICAgICAgICBsZzogeyBjb2xTcGFuOiB2YWx1ZSB9LFxuICAgICAgICAgIHhsOiB7IGNvbFNwYW46IHZhbHVlIH0sXG4gICAgICAgICAgeHhsOiB7IGNvbFNwYW46IHZhbHVlIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmxheW91dCA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEJhc2UgbWV0aG9kcyBzaGFyZWQgYnkgYWxsIGNvbnRhaW5lcnNcbiAgcHJvdGVjdGVkIGVuc3VyZUNoaWxkcmVuKCkge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4gPSB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIHx8IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZERpcmVjdFdpZGdldDxUPih0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBUKTogdGhpcyB7XG4gICAgY29uc3QgY2hpbGQgPSBuZXcgV2lkZ2V0QnVpbGRlcigpO1xuICAgIGNoaWxkLmN1c3RvbVdpZGdldDxUPih0eXBlLCBvcHRpb25zKTtcbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjaGlsZC5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGJ1aWxkKCk6IEFYUExheW91dE5vZGVEZWZpbml0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuY29udGFpbmVyU3RhdGUuaWQsXG4gICAgICBuYW1lOiB0aGlzLmNvbnRhaW5lclN0YXRlLm5hbWUsXG4gICAgICB3aWRnZXQ6IHRoaXMuY29udGFpbmVyU3RhdGUud2lkZ2V0LFxuICAgICAgY2hpbGRyZW46IHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4sXG4gICAgICBsYXlvdXQ6IHRoaXMuY29udGFpbmVyU3RhdGUubGF5b3V0LFxuICAgICAgbW9kZTogdGhpcy5jb250YWluZXJTdGF0ZS5tb2RlLFxuICAgICAgb3JkZXI6IHRoaXMuY29udGFpbmVyU3RhdGUub3JkZXIsXG4gICAgICB2aXNpYmxlOiB0aGlzLmNvbnRhaW5lclN0YXRlLnZpc2libGUsXG4gICAgICBkaXNhYmxlZDogdGhpcy5jb250YWluZXJTdGF0ZS5kaXNhYmxlZCxcbiAgICAgIHJlYWRvbmx5OiB0aGlzLmNvbnRhaW5lclN0YXRlLnJlYWRvbmx5LFxuICAgIH07XG4gIH1cbn1cblxuLy8gRmxleCBDb250YWluZXIgQnVpbGRlclxuY2xhc3MgRmxleENvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBCYXNlQ29udGFpbmVyQnVpbGRlciBpbXBsZW1lbnRzIElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdmbGV4LWxheW91dCcpO1xuICB9XG5cbiAgaWQoaWQ6IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZUlkKGlkKTtcbiAgfVxuXG4gIGxheW91dCh2YWx1ZTogUGFydGlhbDxBWFBHcmlkTGF5b3V0T3B0aW9ucz4gfCBudW1iZXIpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmJhc2VMYXlvdXQodmFsdWUpO1xuICB9XG5cbiAgbW9kZShtb2RlOiBBWFBMYXlvdXRNb2RlKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm1vZGUgPSBtb2RlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3JkZXIodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5vcmRlciA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdmlzaWJsZShjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUudmlzaWJsZSA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpc2FibGVkKGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5kaXNhYmxlZCA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlYWRvbmx5KGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5yZWFkb25seSA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQRmxleENvbnRhaW5lck9wdGlvbnMpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUud2lkZ2V0IS5vcHRpb25zID0geyAuLi50aGlzLmNvbnRhaW5lclN0YXRlLndpZGdldCEub3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSW5kaXZpZHVhbCBmbHVlbnQgbWV0aG9kcyBmb3IgRmxleFxuICBzZXRGbGV4RGlyZWN0aW9uKGRpcmVjdGlvbjogJ3JvdycgfCAnY29sdW1uJyB8ICdyb3ctcmV2ZXJzZScgfCAnY29sdW1uLXJldmVyc2UnKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZmxleERpcmVjdGlvbjogZGlyZWN0aW9uIH0pO1xuICB9XG5cbiAgc2V0RmxleFdyYXAod3JhcDogJ25vd3JhcCcgfCAnd3JhcCcgfCAnd3JhcC1yZXZlcnNlJyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGZsZXhXcmFwOiB3cmFwIH0pO1xuICB9XG5cbiAgc2V0SnVzdGlmeUNvbnRlbnQoanVzdGlmeTogJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ3NwYWNlLWJldHdlZW4nIHwgJ3NwYWNlLWFyb3VuZCcgfCAnc3BhY2UtZXZlbmx5Jyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGp1c3RpZnlDb250ZW50OiBqdXN0aWZ5IH0pO1xuICB9XG5cbiAgc2V0QWxpZ25JdGVtcyhhbGlnbjogJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ2Jhc2VsaW5lJyB8ICdzdHJldGNoJyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGFsaWduSXRlbXM6IGFsaWduIH0pO1xuICB9XG5cbiAgc2V0R2FwKGdhcDogc3RyaW5nKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ2FwIH0pO1xuICB9XG5cbiAgc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yOiBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yIH0pO1xuICB9XG5cbiAgc2V0UGFkZGluZyhwYWRkaW5nOiBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzcGFjaW5nOiB7IHBhZGRpbmcgfSB9KTtcbiAgfVxuXG4gIHNldE1hcmdpbihtYXJnaW46IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNwYWNpbmc6IHsgbWFyZ2luIH0gfSk7XG4gIH1cblxuICBhZGRDb250YWluZXI8VCBleHRlbmRzIGltcG9ydCgnLi9sYXlvdXQtYnVpbGRlci50eXBlcycpLklCYXNlQ29udGFpbmVyQnVpbGRlcj4obmFtZT86IHN0cmluZywgZGVsZWdhdGU/OiAoY29udGFpbmVyOiBUKSA9PiB2b2lkKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICAvLyBJbXBsZW1lbnRhdGlvbiB3aWxsIGJlIHNpbXBsaWZpZWQgZm9yIG5vd1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkV2lkZ2V0KG5hbWU/OiBzdHJpbmcsIGRlbGVnYXRlPzogKHdpZGdldDogSVdpZGdldEJ1aWxkZXIpID0+IHZvaWQpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIGNvbnN0IGNoaWxkV2lkZ2V0ID0gbmV3IFdpZGdldEJ1aWxkZXIobmFtZSk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjaGlsZFdpZGdldCk7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKGNoaWxkV2lkZ2V0LmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGV4dEJveChvcHRpb25zPzogVGV4dEJveE9wdGlvbnMpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgndGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxhcmdlVGV4dEJveChvcHRpb25zPzogTGFyZ2VUZXh0Qm94T3B0aW9ucyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdsYXJnZS10ZXh0LWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmljaFRleHQob3B0aW9ucz86IFJpY2hUZXh0T3B0aW9ucyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdyaWNoLXRleHQtZWRpdG9yJywgb3B0aW9ucyk7XG4gIH1cblxuICBwYXNzd29yZEJveChvcHRpb25zPzogUGFzc3dvcmRCb3hPcHRpb25zKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3Bhc3N3b3JkLWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgbnVtYmVyQm94KG9wdGlvbnM/OiBOdW1iZXJCb3hPcHRpb25zKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ251bWJlci1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIHNlbGVjdEJveChvcHRpb25zOiBTZWxlY3RCb3hPcHRpb25zKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3NlbGVjdC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxvb2t1cEJveChvcHRpb25zOiBMb29rdXBCb3hPcHRpb25zKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ2xvb2t1cC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIHNlbGVjdGlvbkxpc3Qob3B0aW9uczogU2VsZWN0aW9uTGlzdE9wdGlvbnMpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnc2VsZWN0aW9uLWxpc3QnLCBvcHRpb25zKTtcbiAgfVxuXG4gIGRhdGVUaW1lQm94KG9wdGlvbnM/OiBEYXRlVGltZUJveE9wdGlvbnMpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnZGF0ZS10aW1lLWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgdG9nZ2xlU3dpdGNoKG9wdGlvbnM/OiBUb2dnbGVTd2l0Y2hPcHRpb25zKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3RvZ2dsZS1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNvbG9yQm94KG9wdGlvbnM/OiBDb2xvckJveE9wdGlvbnMpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnY29sb3ItZWRpdG9yJywgb3B0aW9ucyk7XG4gIH1cblxuICBjdXN0b21XaWRnZXQ8VD4odHlwZTogc3RyaW5nLCBvcHRpb25zPzogVCk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0PFQ+KHR5cGUsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8vIEdyaWQgQ29udGFpbmVyIEJ1aWxkZXJcbmNsYXNzIEdyaWRDb250YWluZXJCdWlsZGVyIGV4dGVuZHMgQmFzZUNvbnRhaW5lckJ1aWxkZXIgaW1wbGVtZW50cyBJR3JpZENvbnRhaW5lckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignZ3JpZC1sYXlvdXQnKTtcbiAgfVxuXG4gIGlkKGlkOiBzdHJpbmcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5iYXNlSWQoaWQpOyB9XG4gIGxheW91dCh2YWx1ZTogUGFydGlhbDxBWFBHcmlkTGF5b3V0T3B0aW9ucz4gfCBudW1iZXIpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5iYXNlTGF5b3V0KHZhbHVlKTsgfVxuICBtb2RlKG1vZGU6IEFYUExheW91dE1vZGUpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIgeyB0aGlzLmNvbnRhaW5lclN0YXRlLm1vZGUgPSBtb2RlOyByZXR1cm4gdGhpczsgfVxuICBvcmRlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHsgdGhpcy5jb250YWluZXJTdGF0ZS5vcmRlciA9IHZhbHVlOyByZXR1cm4gdGhpczsgfVxuICB2aXNpYmxlKGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7IHRoaXMuY29udGFpbmVyU3RhdGUudmlzaWJsZSA9IGNvbmRpdGlvbjsgcmV0dXJuIHRoaXM7IH1cbiAgZGlzYWJsZWQoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHsgdGhpcy5jb250YWluZXJTdGF0ZS5kaXNhYmxlZCA9IGNvbmRpdGlvbjsgcmV0dXJuIHRoaXM7IH1cbiAgcmVhZG9ubHkoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHsgdGhpcy5jb250YWluZXJTdGF0ZS5yZWFkb25seSA9IGNvbmRpdGlvbjsgcmV0dXJuIHRoaXM7IH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUEdyaWRDb250YWluZXJPcHRpb25zKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLndpZGdldCEub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS53aWRnZXQhLm9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEluZGl2aWR1YWwgZmx1ZW50IG1ldGhvZHMgZm9yIEdyaWRcbiAgc2V0Q29sdW1ucyhjb2x1bW5zOiBudW1iZXIpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBncmlkOiB7IGRlZmF1bHQ6IHsgY29sdW1ucyB9IH0gfSk7XG4gIH1cblxuICBzZXRSb3dzKHJvd3M6IG51bWJlcik6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGdyaWQ6IHsgZGVmYXVsdDogeyByb3dzIH0gfSB9KTtcbiAgfVxuXG4gIHNldEdhcChnYXA6IHN0cmluZyk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGdyaWQ6IHsgZGVmYXVsdDogeyBnYXAgfSB9IH0pO1xuICB9XG5cbiAgc2V0SnVzdGlmeUl0ZW1zKGp1c3RpZnk6ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInIHwgJ3N0cmV0Y2gnKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IGp1c3RpZnlJdGVtczoganVzdGlmeSB9IH0gfSk7XG4gIH1cblxuICBzZXRBbGlnbkl0ZW1zKGFsaWduOiAnc3RhcnQnIHwgJ2VuZCcgfCAnY2VudGVyJyB8ICdzdHJldGNoJyk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGdyaWQ6IHsgZGVmYXVsdDogeyBhbGlnbkl0ZW1zOiBhbGlnbiB9IH0gfSk7XG4gIH1cblxuICBzZXRBdXRvRmxvdyhmbG93OiAncm93JyB8ICdjb2x1bW4nIHwgJ3JvdyBkZW5zZScgfCAnY29sdW1uIGRlbnNlJyk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGdyaWQ6IHsgZGVmYXVsdDogeyBhdXRvRmxvdzogZmxvdyB9IH0gfSk7XG4gIH1cblxuICBzZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZyk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGJhY2tncm91bmRDb2xvcjogY29sb3IgfSk7XG4gIH1cblxuICBzZXRQYWRkaW5nKHBhZGRpbmc6IHN0cmluZyk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNwYWNpbmc6IHsgcGFkZGluZyB9IH0pO1xuICB9XG5cbiAgc2V0TWFyZ2luKG1hcmdpbjogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgc3BhY2luZzogeyBtYXJnaW4gfSB9KTtcbiAgfVxuXG4gIGFkZENvbnRhaW5lcjxUIGV4dGVuZHMgaW1wb3J0KCcuL2xheW91dC1idWlsZGVyLnR5cGVzJykuSUJhc2VDb250YWluZXJCdWlsZGVyPihuYW1lPzogc3RyaW5nLCBkZWxlZ2F0ZT86IChjb250YWluZXI6IFQpID0+IHZvaWQpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpczsgfVxuICBhZGRXaWRnZXQobmFtZT86IHN0cmluZywgZGVsZWdhdGU/OiAod2lkZ2V0OiBJV2lkZ2V0QnVpbGRlcikgPT4gdm9pZCk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7XG4gICAgY29uc3QgY2hpbGRXaWRnZXQgPSBuZXcgV2lkZ2V0QnVpbGRlcihuYW1lKTtcbiAgICBpZiAoZGVsZWdhdGUpIGRlbGVnYXRlKGNoaWxkV2lkZ2V0KTtcbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjaGlsZFdpZGdldC5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRleHRCb3gob3B0aW9ucz86IFRleHRCb3hPcHRpb25zKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCd0ZXh0LWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIGxhcmdlVGV4dEJveChvcHRpb25zPzogTGFyZ2VUZXh0Qm94T3B0aW9ucyk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnbGFyZ2UtdGV4dC1lZGl0b3InLCBvcHRpb25zKTsgfVxuICByaWNoVGV4dChvcHRpb25zPzogUmljaFRleHRPcHRpb25zKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdyaWNoLXRleHQtZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgcGFzc3dvcmRCb3gob3B0aW9ucz86IFBhc3N3b3JkQm94T3B0aW9ucyk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgncGFzc3dvcmQtZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgbnVtYmVyQm94KG9wdGlvbnM/OiBOdW1iZXJCb3hPcHRpb25zKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdudW1iZXItZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgc2VsZWN0Qm94KG9wdGlvbnM6IFNlbGVjdEJveE9wdGlvbnMpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3NlbGVjdC1lZGl0b3InLCBvcHRpb25zKTsgfVxuICBsb29rdXBCb3gob3B0aW9uczogTG9va3VwQm94T3B0aW9ucyk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnbG9va3VwLWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIHNlbGVjdGlvbkxpc3Qob3B0aW9uczogU2VsZWN0aW9uTGlzdE9wdGlvbnMpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3NlbGVjdGlvbi1saXN0Jywgb3B0aW9ucyk7IH1cbiAgZGF0ZVRpbWVCb3gob3B0aW9ucz86IERhdGVUaW1lQm94T3B0aW9ucyk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnZGF0ZS10aW1lLWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIHRvZ2dsZVN3aXRjaChvcHRpb25zPzogVG9nZ2xlU3dpdGNoT3B0aW9ucyk6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgndG9nZ2xlLWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIGNvbG9yQm94KG9wdGlvbnM/OiBDb2xvckJveE9wdGlvbnMpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ2NvbG9yLWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIGN1c3RvbVdpZGdldDxUPih0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBUKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0PFQ+KHR5cGUsIG9wdGlvbnMpOyB9XG59XG5cbi8vIFBhbmVsIENvbnRhaW5lciBCdWlsZGVyXG5jbGFzcyBQYW5lbENvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBCYXNlQ29udGFpbmVyQnVpbGRlciBpbXBsZW1lbnRzIElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigncGFuZWwtbGF5b3V0Jyk7XG4gIH1cblxuICBpZChpZDogc3RyaW5nKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmJhc2VJZChpZCk7IH1cbiAgbGF5b3V0KHZhbHVlOiBQYXJ0aWFsPEFYUEdyaWRMYXlvdXRPcHRpb25zPiB8IG51bWJlcik6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5iYXNlTGF5b3V0KHZhbHVlKTsgfVxuICBtb2RlKG1vZGU6IEFYUExheW91dE1vZGUpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyIHsgdGhpcy5jb250YWluZXJTdGF0ZS5tb2RlID0gbW9kZTsgcmV0dXJuIHRoaXM7IH1cbiAgb3JkZXIodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIgeyB0aGlzLmNvbnRhaW5lclN0YXRlLm9yZGVyID0gdmFsdWU7IHJldHVybiB0aGlzOyB9XG4gIHZpc2libGUoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7IHRoaXMuY29udGFpbmVyU3RhdGUudmlzaWJsZSA9IGNvbmRpdGlvbjsgcmV0dXJuIHRoaXM7IH1cbiAgZGlzYWJsZWQoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7IHRoaXMuY29udGFpbmVyU3RhdGUuZGlzYWJsZWQgPSBjb25kaXRpb247IHJldHVybiB0aGlzOyB9XG4gIHJlYWRvbmx5KGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIgeyB0aGlzLmNvbnRhaW5lclN0YXRlLnJlYWRvbmx5ID0gY29uZGl0aW9uOyByZXR1cm4gdGhpczsgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQUGFuZWxDb250YWluZXJPcHRpb25zKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS53aWRnZXQhLm9wdGlvbnMgPSB7IC4uLnRoaXMuY29udGFpbmVyU3RhdGUud2lkZ2V0IS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBQYW5lbFxuICBzZXRDYXB0aW9uKGNhcHRpb246IHN0cmluZyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBjYXB0aW9uIH0pO1xuICB9XG5cbiAgc2V0SWNvbihpY29uOiBzdHJpbmcpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgaWNvbiB9KTtcbiAgfVxuXG4gIHNldExvb2sobG9vazogJ3NvbGlkJyB8ICdmaWxsJyB8ICdvdXRsaW5lJyB8ICdmbGF0JyB8ICdub25lJyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBsb29rIH0pO1xuICB9XG5cbiAgc2V0U2hvd0hlYWRlcihzaG93OiBib29sZWFuKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dIZWFkZXI6IHNob3cgfSk7XG4gIH1cblxuICBzZXRDb2xsYXBzZWQoY29sbGFwc2VkOiBib29sZWFuKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNvbGxhcHNlZCB9KTtcbiAgfVxuXG4gIGFkZENvbnRhaW5lcjxUIGV4dGVuZHMgaW1wb3J0KCcuL2xheW91dC1idWlsZGVyLnR5cGVzJykuSUJhc2VDb250YWluZXJCdWlsZGVyPihuYW1lPzogc3RyaW5nLCBkZWxlZ2F0ZT86IChjb250YWluZXI6IFQpID0+IHZvaWQpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXM7IH1cbiAgYWRkV2lkZ2V0KG5hbWU/OiBzdHJpbmcsIGRlbGVnYXRlPzogKHdpZGdldDogSVdpZGdldEJ1aWxkZXIpID0+IHZvaWQpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyIHtcbiAgICBjb25zdCBjaGlsZFdpZGdldCA9IG5ldyBXaWRnZXRCdWlsZGVyKG5hbWUpO1xuICAgIGlmIChkZWxlZ2F0ZSkgZGVsZWdhdGUoY2hpbGRXaWRnZXQpO1xuICAgIHRoaXMuZW5zdXJlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKGNoaWxkV2lkZ2V0LmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGV4dEJveChvcHRpb25zPzogVGV4dEJveE9wdGlvbnMpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCd0ZXh0LWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIGxhcmdlVGV4dEJveChvcHRpb25zPzogTGFyZ2VUZXh0Qm94T3B0aW9ucyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ2xhcmdlLXRleHQtZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgcmljaFRleHQob3B0aW9ucz86IFJpY2hUZXh0T3B0aW9ucyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3JpY2gtdGV4dC1lZGl0b3InLCBvcHRpb25zKTsgfVxuICBwYXNzd29yZEJveChvcHRpb25zPzogUGFzc3dvcmRCb3hPcHRpb25zKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgncGFzc3dvcmQtZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgbnVtYmVyQm94KG9wdGlvbnM/OiBOdW1iZXJCb3hPcHRpb25zKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnbnVtYmVyLWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIHNlbGVjdEJveChvcHRpb25zOiBTZWxlY3RCb3hPcHRpb25zKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnc2VsZWN0LWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIGxvb2t1cEJveChvcHRpb25zOiBMb29rdXBCb3hPcHRpb25zKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnbG9va3VwLWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIHNlbGVjdGlvbkxpc3Qob3B0aW9uczogU2VsZWN0aW9uTGlzdE9wdGlvbnMpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdzZWxlY3Rpb24tbGlzdCcsIG9wdGlvbnMpOyB9XG4gIGRhdGVUaW1lQm94KG9wdGlvbnM/OiBEYXRlVGltZUJveE9wdGlvbnMpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdkYXRlLXRpbWUtZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgdG9nZ2xlU3dpdGNoKG9wdGlvbnM/OiBUb2dnbGVTd2l0Y2hPcHRpb25zKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgndG9nZ2xlLWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIGNvbG9yQm94KG9wdGlvbnM/OiBDb2xvckJveE9wdGlvbnMpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdjb2xvci1lZGl0b3InLCBvcHRpb25zKTsgfVxuICBjdXN0b21XaWRnZXQ8VD4odHlwZTogc3RyaW5nLCBvcHRpb25zPzogVCk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQ8VD4odHlwZSwgb3B0aW9ucyk7IH1cbn1cblxuLy8gUGFnZSBDb250YWluZXIgQnVpbGRlclxuY2xhc3MgUGFnZUNvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBCYXNlQ29udGFpbmVyQnVpbGRlciBpbXBsZW1lbnRzIElQYWdlQ29udGFpbmVyQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdwYWdlLWxheW91dCcpO1xuICB9XG5cbiAgaWQoaWQ6IHN0cmluZyk6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmJhc2VJZChpZCk7IH1cbiAgbGF5b3V0KHZhbHVlOiBQYXJ0aWFsPEFYUEdyaWRMYXlvdXRPcHRpb25zPiB8IG51bWJlcik6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmJhc2VMYXlvdXQodmFsdWUpOyB9XG4gIG1vZGUobW9kZTogQVhQTGF5b3V0TW9kZSk6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7IHRoaXMuY29udGFpbmVyU3RhdGUubW9kZSA9IG1vZGU7IHJldHVybiB0aGlzOyB9XG4gIG9yZGVyKHZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIgeyB0aGlzLmNvbnRhaW5lclN0YXRlLm9yZGVyID0gdmFsdWU7IHJldHVybiB0aGlzOyB9XG4gIHZpc2libGUoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHsgdGhpcy5jb250YWluZXJTdGF0ZS52aXNpYmxlID0gY29uZGl0aW9uOyByZXR1cm4gdGhpczsgfVxuICBkaXNhYmxlZChjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIgeyB0aGlzLmNvbnRhaW5lclN0YXRlLmRpc2FibGVkID0gY29uZGl0aW9uOyByZXR1cm4gdGhpczsgfVxuICByZWFkb25seShjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIgeyB0aGlzLmNvbnRhaW5lclN0YXRlLnJlYWRvbmx5ID0gY29uZGl0aW9uOyByZXR1cm4gdGhpczsgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQUGFnZUNvbnRhaW5lck9wdGlvbnMpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUud2lkZ2V0IS5vcHRpb25zID0geyAuLi50aGlzLmNvbnRhaW5lclN0YXRlLndpZGdldCEub3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSW5kaXZpZHVhbCBmbHVlbnQgbWV0aG9kcyBmb3IgUGFnZVxuICBzZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZyk6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGJhY2tncm91bmRDb2xvcjogY29sb3IgfSk7XG4gIH1cblxuICBzZXRUaGVtZSh0aGVtZTogeyBpZDogc3RyaW5nIH0pOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyB0aGVtZSB9KTtcbiAgfVxuXG4gIHNldEhhc0hlYWRlcihoYXNIZWFkZXI6IGJvb2xlYW4pOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBoYXNIZWFkZXIgfSk7XG4gIH1cblxuICBzZXRIYXNGb290ZXIoaGFzRm9vdGVyOiBib29sZWFuKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgaGFzRm9vdGVyIH0pO1xuICB9XG5cbiAgc2V0RGlyZWN0aW9uKGRpcmVjdGlvbjogc3RyaW5nKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZGlyZWN0aW9uIH0pO1xuICB9XG5cbiAgYWRkQ29udGFpbmVyPFQgZXh0ZW5kcyBpbXBvcnQoJy4vbGF5b3V0LWJ1aWxkZXIudHlwZXMnKS5JQmFzZUNvbnRhaW5lckJ1aWxkZXI+KG5hbWU/OiBzdHJpbmcsIGRlbGVnYXRlPzogKGNvbnRhaW5lcjogVCkgPT4gdm9pZCk6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzOyB9XG4gIGFkZFdpZGdldChuYW1lPzogc3RyaW5nLCBkZWxlZ2F0ZT86ICh3aWRnZXQ6IElXaWRnZXRCdWlsZGVyKSA9PiB2b2lkKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHtcbiAgICBjb25zdCBjaGlsZFdpZGdldCA9IG5ldyBXaWRnZXRCdWlsZGVyKG5hbWUpO1xuICAgIGlmIChkZWxlZ2F0ZSkgZGVsZWdhdGUoY2hpbGRXaWRnZXQpO1xuICAgIHRoaXMuZW5zdXJlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKGNoaWxkV2lkZ2V0LmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGV4dEJveChvcHRpb25zPzogVGV4dEJveE9wdGlvbnMpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3RleHQtZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgbGFyZ2VUZXh0Qm94KG9wdGlvbnM/OiBMYXJnZVRleHRCb3hPcHRpb25zKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdsYXJnZS10ZXh0LWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIHJpY2hUZXh0KG9wdGlvbnM/OiBSaWNoVGV4dE9wdGlvbnMpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3JpY2gtdGV4dC1lZGl0b3InLCBvcHRpb25zKTsgfVxuICBwYXNzd29yZEJveChvcHRpb25zPzogUGFzc3dvcmRCb3hPcHRpb25zKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdwYXNzd29yZC1lZGl0b3InLCBvcHRpb25zKTsgfVxuICBudW1iZXJCb3gob3B0aW9ucz86IE51bWJlckJveE9wdGlvbnMpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ251bWJlci1lZGl0b3InLCBvcHRpb25zKTsgfVxuICBzZWxlY3RCb3gob3B0aW9uczogU2VsZWN0Qm94T3B0aW9ucyk6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnc2VsZWN0LWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIGxvb2t1cEJveChvcHRpb25zOiBMb29rdXBCb3hPcHRpb25zKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdsb29rdXAtZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgc2VsZWN0aW9uTGlzdChvcHRpb25zOiBTZWxlY3Rpb25MaXN0T3B0aW9ucyk6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnc2VsZWN0aW9uLWxpc3QnLCBvcHRpb25zKTsgfVxuICBkYXRlVGltZUJveChvcHRpb25zPzogRGF0ZVRpbWVCb3hPcHRpb25zKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdkYXRlLXRpbWUtZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgdG9nZ2xlU3dpdGNoKG9wdGlvbnM/OiBUb2dnbGVTd2l0Y2hPcHRpb25zKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCd0b2dnbGUtZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgY29sb3JCb3gob3B0aW9ucz86IENvbG9yQm94T3B0aW9ucyk6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnY29sb3ItZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgY3VzdG9tV2lkZ2V0PFQ+KHR5cGU6IHN0cmluZywgb3B0aW9ucz86IFQpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQ8VD4odHlwZSwgb3B0aW9ucyk7IH1cbn1cblxuLy8gVGFic2V0IENvbnRhaW5lciBCdWlsZGVyXG5jbGFzcyBUYWJzZXRDb250YWluZXJCdWlsZGVyIGV4dGVuZHMgQmFzZUNvbnRhaW5lckJ1aWxkZXIgaW1wbGVtZW50cyBJVGFic2V0Q29udGFpbmVyQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCd0YWJzZXQtbGF5b3V0Jyk7XG4gIH1cblxuICBpZChpZDogc3RyaW5nKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5iYXNlSWQoaWQpOyB9XG4gIGxheW91dCh2YWx1ZTogUGFydGlhbDxBWFBHcmlkTGF5b3V0T3B0aW9ucz4gfCBudW1iZXIpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmJhc2VMYXlvdXQodmFsdWUpOyB9XG4gIG1vZGUobW9kZTogQVhQTGF5b3V0TW9kZSk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyIHsgdGhpcy5jb250YWluZXJTdGF0ZS5tb2RlID0gbW9kZTsgcmV0dXJuIHRoaXM7IH1cbiAgb3JkZXIodmFsdWU6IG51bWJlciB8IHN0cmluZyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyIHsgdGhpcy5jb250YWluZXJTdGF0ZS5vcmRlciA9IHZhbHVlOyByZXR1cm4gdGhpczsgfVxuICB2aXNpYmxlKGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyIHsgdGhpcy5jb250YWluZXJTdGF0ZS52aXNpYmxlID0gY29uZGl0aW9uOyByZXR1cm4gdGhpczsgfVxuICBkaXNhYmxlZChjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlciB7IHRoaXMuY29udGFpbmVyU3RhdGUuZGlzYWJsZWQgPSBjb25kaXRpb247IHJldHVybiB0aGlzOyB9XG4gIHJlYWRvbmx5KGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyIHsgdGhpcy5jb250YWluZXJTdGF0ZS5yZWFkb25seSA9IGNvbmRpdGlvbjsgcmV0dXJuIHRoaXM7IH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUFRhYnNldENvbnRhaW5lck9wdGlvbnMpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS53aWRnZXQhLm9wdGlvbnMgPSB7IC4uLnRoaXMuY29udGFpbmVyU3RhdGUud2lkZ2V0IS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBUYWJzZXRcbiAgc2V0TG9vayhsb29rOiAnd2l0aC1saW5lJyB8ICd3aXRoLWxpbmUtY29sb3InIHwgJ3BpbGxzJyB8ICdwaWxscy1jb2xvcicpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGxvb2sgfSk7XG4gIH1cblxuICBzZXRPcmllbnRhdGlvbihvcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgb3JpZW50YXRpb24gfSk7XG4gIH1cblxuICBzZXRBY3RpdmVJbmRleChpbmRleDogbnVtYmVyKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBhY3RpdmVJbmRleDogaW5kZXggfSk7XG4gIH1cblxuICBhZGRDb250YWluZXI8VCBleHRlbmRzIGltcG9ydCgnLi9sYXlvdXQtYnVpbGRlci50eXBlcycpLklCYXNlQ29udGFpbmVyQnVpbGRlcj4obmFtZT86IHN0cmluZywgZGVsZWdhdGU/OiAoY29udGFpbmVyOiBUKSA9PiB2b2lkKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpczsgfVxuICBhZGRXaWRnZXQobmFtZT86IHN0cmluZywgZGVsZWdhdGU/OiAod2lkZ2V0OiBJV2lkZ2V0QnVpbGRlcikgPT4gdm9pZCk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICBjb25zdCBjaGlsZFdpZGdldCA9IG5ldyBXaWRnZXRCdWlsZGVyKG5hbWUpO1xuICAgIGlmIChkZWxlZ2F0ZSkgZGVsZWdhdGUoY2hpbGRXaWRnZXQpO1xuICAgIHRoaXMuZW5zdXJlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKGNoaWxkV2lkZ2V0LmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGV4dEJveChvcHRpb25zPzogVGV4dEJveE9wdGlvbnMpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgndGV4dC1lZGl0b3InLCBvcHRpb25zKTsgfVxuICBsYXJnZVRleHRCb3gob3B0aW9ucz86IExhcmdlVGV4dEJveE9wdGlvbnMpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnbGFyZ2UtdGV4dC1lZGl0b3InLCBvcHRpb25zKTsgfVxuICByaWNoVGV4dChvcHRpb25zPzogUmljaFRleHRPcHRpb25zKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3JpY2gtdGV4dC1lZGl0b3InLCBvcHRpb25zKTsgfVxuICBwYXNzd29yZEJveChvcHRpb25zPzogUGFzc3dvcmRCb3hPcHRpb25zKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3Bhc3N3b3JkLWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIG51bWJlckJveChvcHRpb25zPzogTnVtYmVyQm94T3B0aW9ucyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdudW1iZXItZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgc2VsZWN0Qm94KG9wdGlvbnM6IFNlbGVjdEJveE9wdGlvbnMpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlciB7IHJldHVybiB0aGlzLmFkZERpcmVjdFdpZGdldCgnc2VsZWN0LWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIGxvb2t1cEJveChvcHRpb25zOiBMb29rdXBCb3hPcHRpb25zKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ2xvb2t1cC1lZGl0b3InLCBvcHRpb25zKTsgfVxuICBzZWxlY3Rpb25MaXN0KG9wdGlvbnM6IFNlbGVjdGlvbkxpc3RPcHRpb25zKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3NlbGVjdGlvbi1saXN0Jywgb3B0aW9ucyk7IH1cbiAgZGF0ZVRpbWVCb3gob3B0aW9ucz86IERhdGVUaW1lQm94T3B0aW9ucyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyIHsgcmV0dXJuIHRoaXMuYWRkRGlyZWN0V2lkZ2V0KCdkYXRlLXRpbWUtZWRpdG9yJywgb3B0aW9ucyk7IH1cbiAgdG9nZ2xlU3dpdGNoKG9wdGlvbnM/OiBUb2dnbGVTd2l0Y2hPcHRpb25zKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ3RvZ2dsZS1lZGl0b3InLCBvcHRpb25zKTsgfVxuICBjb2xvckJveChvcHRpb25zPzogQ29sb3JCb3hPcHRpb25zKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQoJ2NvbG9yLWVkaXRvcicsIG9wdGlvbnMpOyB9XG4gIGN1c3RvbVdpZGdldDxUPih0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBUKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIgeyByZXR1cm4gdGhpcy5hZGREaXJlY3RXaWRnZXQ8VD4odHlwZSwgb3B0aW9ucyk7IH1cbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgV2lkZ2V0IEJ1aWxkZXIgSW1wbGVtZW50YXRpb24gICAtLS0tXG5cbmNsYXNzIFdpZGdldEJ1aWxkZXIgaW1wbGVtZW50cyBJV2lkZ2V0QnVpbGRlciB7XG4gIHByaXZhdGUgd2lkZ2V0U3RhdGU6IFdpZGdldEJ1aWxkZXJTdGF0ZSA9IHtcbiAgICB0eXBlOiAnd2lkZ2V0JyBhcyBjb25zdCxcbiAgICBjaGlsZHJlbjogW10sXG4gIH07XG5cbiAgY29uc3RydWN0b3IobmFtZT86IHN0cmluZykge1xuICAgIGlmIChuYW1lKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm5hbWUgPSBuYW1lO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5vIHV0aWxpdHkgbWV0aG9kcyBuZWVkZWQgLSB3aWRnZXQgb3B0aW9ucyBhcmUgcHVyZSBub3dcbiAgXG4gIHByaXZhdGUgaXNDb250YWluZXJXaWRnZXRUeXBlKHR5cGU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXR5cGUpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gWydncmlkLWxheW91dCcsICdmbGV4LWxheW91dCcsICdwYW5lbC1sYXlvdXQnLCAncGFnZS1sYXlvdXQnLCAndGFic2V0LWxheW91dCddLmluY2x1ZGVzKHR5cGUpO1xuICB9XG5cbiAgaWQoaWQ6IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICB0aGlzLndpZGdldFN0YXRlLmlkID0gaWQ7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBsYXlvdXQodmFsdWU6IFBhcnRpYWw8QVhQR3JpZExheW91dE9wdGlvbnM+IHwgbnVtYmVyKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLmxheW91dCA9IHtcbiAgICAgICAgcG9zaXRpb25zOiB7XG4gICAgICAgICAgc206IHsgY29sU3BhbjogMTIgfSxcbiAgICAgICAgICBtZDogeyBjb2xTcGFuOiAxMiB9LFxuICAgICAgICAgIGxnOiB7IGNvbFNwYW46IHZhbHVlIH0sXG4gICAgICAgICAgeGw6IHsgY29sU3BhbjogdmFsdWUgfSxcbiAgICAgICAgICB4eGw6IHsgY29sU3BhbjogdmFsdWUgfSxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5sYXlvdXQgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtb2RlKG1vZGU6IEFYUExheW91dE1vZGUpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5tb2RlID0gbW9kZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZpc2libGUoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIHRoaXMud2lkZ2V0U3RhdGUudmlzaWJsZSA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpc2FibGVkKGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICB0aGlzLndpZGdldFN0YXRlLmRpc2FibGVkID0gY29uZGl0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVhZG9ubHkoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIHRoaXMud2lkZ2V0U3RhdGUucmVhZG9ubHkgPSBjb25kaXRpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvcmRlcih2YWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIHRoaXMud2lkZ2V0U3RhdGUub3JkZXIgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIENvbnRhaW5lciBoZWxwZXJzIC0gZGVsZWdhdGUgcGF0dGVybiByZXF1aXJlZFxuICBncmlkKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IEdyaWRDb250YWluZXJCdWlsZGVyKCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICBjb25zdCBidWlsdCA9IGNvbnRhaW5lci5idWlsZCgpO1xuICAgIHRoaXMud2lkZ2V0U3RhdGUud2lkZ2V0ID0gYnVpbHQud2lkZ2V0O1xuICAgIHRoaXMud2lkZ2V0U3RhdGUuY2hpbGRyZW4gPSBidWlsdC5jaGlsZHJlbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZsZXgoZGVsZWdhdGU6IChjb250YWluZXI6IElGbGV4Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRmxleENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIGNvbnN0IGJ1aWx0ID0gY29udGFpbmVyLmJ1aWxkKCk7XG4gICAgdGhpcy53aWRnZXRTdGF0ZS53aWRnZXQgPSBidWlsdC53aWRnZXQ7XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5jaGlsZHJlbiA9IGJ1aWx0LmNoaWxkcmVuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGFuZWwoZGVsZWdhdGU6IChjb250YWluZXI6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IFBhbmVsQ29udGFpbmVyQnVpbGRlcigpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgY29uc3QgYnVpbHQgPSBjb250YWluZXIuYnVpbGQoKTtcbiAgICB0aGlzLndpZGdldFN0YXRlLndpZGdldCA9IGJ1aWx0LndpZGdldDtcbiAgICB0aGlzLndpZGdldFN0YXRlLmNoaWxkcmVuID0gYnVpbHQuY2hpbGRyZW47XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwYWdlKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IFBhZ2VDb250YWluZXJCdWlsZGVyKCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICBjb25zdCBidWlsdCA9IGNvbnRhaW5lci5idWlsZCgpO1xuICAgIHRoaXMud2lkZ2V0U3RhdGUud2lkZ2V0ID0gYnVpbHQud2lkZ2V0O1xuICAgIHRoaXMud2lkZ2V0U3RhdGUuY2hpbGRyZW4gPSBidWlsdC5jaGlsZHJlbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRhYnNldChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IFRhYnNldENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIGNvbnN0IGJ1aWx0ID0gY29udGFpbmVyLmJ1aWxkKCk7XG4gICAgdGhpcy53aWRnZXRTdGF0ZS53aWRnZXQgPSBidWlsdC53aWRnZXQ7XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5jaGlsZHJlbiA9IGJ1aWx0LmNoaWxkcmVuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2lkZ2V0KG5hbWU/OiBzdHJpbmcsIGRlbGVnYXRlPzogKHdpZGdldDogSVdpZGdldEJ1aWxkZXIpID0+IHZvaWQpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgY29uc3QgY2hpbGQgPSBuZXcgV2lkZ2V0QnVpbGRlcihuYW1lKTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNoaWxkKTtcbiAgICB9XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5jaGlsZHJlbiA9IHRoaXMud2lkZ2V0U3RhdGUuY2hpbGRyZW4gfHwgW107XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5jaGlsZHJlbi5wdXNoKGNoaWxkLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV2lkZ2V0IHR5cGUgbWV0aG9kc1xuICB0ZXh0Qm94KG9wdGlvbnM/OiBUZXh0Qm94T3B0aW9ucyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBpZiAodGhpcy5pc0NvbnRhaW5lcldpZGdldFR5cGUodGhpcy53aWRnZXRTdGF0ZS53aWRnZXQ/LnR5cGUpKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IG5ldyBXaWRnZXRCdWlsZGVyKCk7XG4gICAgICBjaGlsZC50ZXh0Qm94KG9wdGlvbnMpO1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5jaGlsZHJlbiEucHVzaChjaGlsZC5idWlsZCgpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLndpZGdldCA9IHtcbiAgICAgICAgdHlwZTogJ3RleHQtZWRpdG9yJyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICBsYXJnZVRleHRCb3gob3B0aW9ucz86IExhcmdlVGV4dEJveE9wdGlvbnMpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgaWYgKHRoaXMuaXNDb250YWluZXJXaWRnZXRUeXBlKHRoaXMud2lkZ2V0U3RhdGUud2lkZ2V0Py50eXBlKSkge1xuICAgICAgY29uc3QgY2hpbGQgPSBuZXcgV2lkZ2V0QnVpbGRlcigpO1xuICAgICAgY2hpbGQubGFyZ2VUZXh0Qm94KG9wdGlvbnMpO1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5jaGlsZHJlbiEucHVzaChjaGlsZC5idWlsZCgpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLndpZGdldCA9IHtcbiAgICAgICAgdHlwZTogJ2xhcmdlLXRleHQtZWRpdG9yJyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICByaWNoVGV4dChvcHRpb25zPzogUmljaFRleHRPcHRpb25zKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIGlmICh0aGlzLmlzQ29udGFpbmVyV2lkZ2V0VHlwZSh0aGlzLndpZGdldFN0YXRlLndpZGdldD8udHlwZSkpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gbmV3IFdpZGdldEJ1aWxkZXIoKTtcbiAgICAgIGNoaWxkLnJpY2hUZXh0KG9wdGlvbnMpO1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5jaGlsZHJlbiEucHVzaChjaGlsZC5idWlsZCgpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLndpZGdldCA9IHtcbiAgICAgICAgdHlwZTogJ3JpY2gtdGV4dC1lZGl0b3InLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIHBhc3N3b3JkQm94KG9wdGlvbnM/OiBQYXNzd29yZEJveE9wdGlvbnMpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgaWYgKHRoaXMuaXNDb250YWluZXJXaWRnZXRUeXBlKHRoaXMud2lkZ2V0U3RhdGUud2lkZ2V0Py50eXBlKSkge1xuICAgICAgY29uc3QgY2hpbGQgPSBuZXcgV2lkZ2V0QnVpbGRlcigpO1xuICAgICAgY2hpbGQucGFzc3dvcmRCb3gob3B0aW9ucyk7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLmNoaWxkcmVuIS5wdXNoKGNoaWxkLmJ1aWxkKCkpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUud2lkZ2V0ID0ge1xuICAgICAgICB0eXBlOiAncGFzc3dvcmQtZWRpdG9yJyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICBudW1iZXJCb3gob3B0aW9ucz86IE51bWJlckJveE9wdGlvbnMpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgaWYgKHRoaXMuaXNDb250YWluZXJXaWRnZXRUeXBlKHRoaXMud2lkZ2V0U3RhdGUud2lkZ2V0Py50eXBlKSkge1xuICAgICAgY29uc3QgY2hpbGQgPSBuZXcgV2lkZ2V0QnVpbGRlcigpO1xuICAgICAgY2hpbGQubnVtYmVyQm94KG9wdGlvbnMpO1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5jaGlsZHJlbiEucHVzaChjaGlsZC5idWlsZCgpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLndpZGdldCA9IHtcbiAgICAgICAgdHlwZTogJ251bWJlci1lZGl0b3InLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEJveChvcHRpb25zOiBTZWxlY3RCb3hPcHRpb25zKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIGlmICh0aGlzLmlzQ29udGFpbmVyV2lkZ2V0VHlwZSh0aGlzLndpZGdldFN0YXRlLndpZGdldD8udHlwZSkpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gbmV3IFdpZGdldEJ1aWxkZXIoKTtcbiAgICAgIGNoaWxkLnNlbGVjdEJveChvcHRpb25zKTtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUuY2hpbGRyZW4hLnB1c2goY2hpbGQuYnVpbGQoKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS53aWRnZXQgPSB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3QtZWRpdG9yJyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICBsb29rdXBCb3gob3B0aW9uczogTG9va3VwQm94T3B0aW9ucyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBpZiAodGhpcy5pc0NvbnRhaW5lcldpZGdldFR5cGUodGhpcy53aWRnZXRTdGF0ZS53aWRnZXQ/LnR5cGUpKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IG5ldyBXaWRnZXRCdWlsZGVyKCk7XG4gICAgICBjaGlsZC5sb29rdXBCb3gob3B0aW9ucyk7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLmNoaWxkcmVuIS5wdXNoKGNoaWxkLmJ1aWxkKCkpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUud2lkZ2V0ID0ge1xuICAgICAgICB0eXBlOiAnbG9va3VwLWVkaXRvcicsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0aW9uTGlzdChvcHRpb25zOiBTZWxlY3Rpb25MaXN0T3B0aW9ucyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBpZiAodGhpcy5pc0NvbnRhaW5lcldpZGdldFR5cGUodGhpcy53aWRnZXRTdGF0ZS53aWRnZXQ/LnR5cGUpKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IG5ldyBXaWRnZXRCdWlsZGVyKCk7XG4gICAgICBjaGlsZC5zZWxlY3Rpb25MaXN0KG9wdGlvbnMpO1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5jaGlsZHJlbiEucHVzaChjaGlsZC5idWlsZCgpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLndpZGdldCA9IHtcbiAgICAgICAgdHlwZTogJ3NlbGVjdGlvbi1saXN0JyxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICBkYXRlVGltZUJveChvcHRpb25zPzogRGF0ZVRpbWVCb3hPcHRpb25zKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIGlmICh0aGlzLmlzQ29udGFpbmVyV2lkZ2V0VHlwZSh0aGlzLndpZGdldFN0YXRlLndpZGdldD8udHlwZSkpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gbmV3IFdpZGdldEJ1aWxkZXIoKTtcbiAgICAgIGNoaWxkLmRhdGVUaW1lQm94KG9wdGlvbnMpO1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5jaGlsZHJlbiEucHVzaChjaGlsZC5idWlsZCgpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLndpZGdldCA9IHtcbiAgICAgICAgdHlwZTogJ2RhdGUtdGltZS1lZGl0b3InLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZVN3aXRjaChvcHRpb25zPzogVG9nZ2xlU3dpdGNoT3B0aW9ucyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBpZiAodGhpcy5pc0NvbnRhaW5lcldpZGdldFR5cGUodGhpcy53aWRnZXRTdGF0ZS53aWRnZXQ/LnR5cGUpKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IG5ldyBXaWRnZXRCdWlsZGVyKCk7XG4gICAgICBjaGlsZC50b2dnbGVTd2l0Y2gob3B0aW9ucyk7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLmNoaWxkcmVuIS5wdXNoKGNoaWxkLmJ1aWxkKCkpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUud2lkZ2V0ID0ge1xuICAgICAgICB0eXBlOiAndG9nZ2xlLWVkaXRvcicsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9XG5cbiAgY29sb3JCb3gob3B0aW9ucz86IENvbG9yQm94T3B0aW9ucyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBpZiAodGhpcy5pc0NvbnRhaW5lcldpZGdldFR5cGUodGhpcy53aWRnZXRTdGF0ZS53aWRnZXQ/LnR5cGUpKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IG5ldyBXaWRnZXRCdWlsZGVyKCk7XG4gICAgICBjaGlsZC5jb2xvckJveChvcHRpb25zKTtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUuY2hpbGRyZW4hLnB1c2goY2hpbGQuYnVpbGQoKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS53aWRnZXQgPSB7XG4gICAgICAgIHR5cGU6ICdjb2xvci1lZGl0b3InLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIGN1c3RvbVdpZGdldDxUPih0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBUKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIGlmICh0aGlzLmlzQ29udGFpbmVyV2lkZ2V0VHlwZSh0aGlzLndpZGdldFN0YXRlLndpZGdldD8udHlwZSkpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gbmV3IFdpZGdldEJ1aWxkZXIoKTtcbiAgICAgIGNoaWxkLmN1c3RvbVdpZGdldDxUPih0eXBlLCBvcHRpb25zKTtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUuY2hpbGRyZW4hLnB1c2goY2hpbGQuYnVpbGQoKSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS53aWRnZXQgPSB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMgYXMgdW5rbm93bixcbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH1cblxuICBidWlsZCgpOiBBWFBMYXlvdXROb2RlRGVmaW5pdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLndpZGdldFN0YXRlLmlkLFxuICAgICAgbmFtZTogdGhpcy53aWRnZXRTdGF0ZS5uYW1lLFxuICAgICAgd2lkZ2V0OiB0aGlzLndpZGdldFN0YXRlLndpZGdldCxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLndpZGdldFN0YXRlLmNoaWxkcmVuLFxuICAgICAgbGF5b3V0OiB0aGlzLndpZGdldFN0YXRlLmxheW91dCxcbiAgICAgIG1vZGU6IHRoaXMud2lkZ2V0U3RhdGUubW9kZSxcbiAgICAgIG9yZGVyOiB0aGlzLndpZGdldFN0YXRlLm9yZGVyLFxuICAgICAgdmlzaWJsZTogdGhpcy53aWRnZXRTdGF0ZS52aXNpYmxlLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMud2lkZ2V0U3RhdGUuZGlzYWJsZWQsXG4gICAgICByZWFkb25seTogdGhpcy53aWRnZXRTdGF0ZS5yZWFkb25seSxcbiAgICB9O1xuICB9XG59XG5cbi8vI2VuZHJlZ2lvblxuIl19","import { Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/platform/layout/widget-core\";\nexport class AXPLayoutRendererComponent {\n constructor() {\n this.renderedNode = {};\n }\n ngOnInit() {\n if (this.builder) {\n this.renderedNode = {\n type: 'block-layout',\n mode: this.builder.mode ?? 'view',\n children: (this.builder.nodes ?? []).map((node) => ({\n type: node.widget?.type ?? 'text-block-layout',\n mode: node.mode ?? 'view',\n children: (node.children ?? []).map((child) => ({\n type: child.widget?.type ?? 'text-block-layout',\n mode: child.mode ?? 'view',\n })),\n })),\n };\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: AXPLayoutRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.2.4\", type: AXPLayoutRendererComponent, isStandalone: true, selector: \"axp-layout-renderer\", inputs: { builder: \"builder\" }, ngImport: i0, template: `\n <axp-widgets-container>\n <ng-container \n axp-widget-renderer \n [node]=\"renderedNode\" \n [mode]=\"builder?.mode ?? 'view'\">\n </ng-container>\n </axp-widgets-container>\n `, isInline: true, styles: [\":host{display:block;width:100%}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: AXPWidgetCoreModule }, { kind: \"component\", type: i1.AXPWidgetContainerComponent, selector: \"axp-widgets-container\", inputs: [\"context\", \"functions\"], outputs: [\"onContextChanged\"] }, { kind: \"directive\", type: i1.AXPWidgetRendererDirective, selector: \"[axp-widget-renderer]\", inputs: [\"parentNode\", \"index\", \"mode\", \"node\"], outputs: [\"onOptionsChanged\", \"onValueChanged\"], exportAs: [\"widgetRenderer\"] }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: AXPLayoutRendererComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-layout-renderer', standalone: true, imports: [CommonModule, AXPWidgetCoreModule], template: `\n <axp-widgets-container>\n <ng-container \n axp-widget-renderer \n [node]=\"renderedNode\" \n [mode]=\"builder?.mode ?? 'view'\">\n </ng-container>\n </axp-widgets-container>\n `, styles: [\":host{display:block;width:100%}\\n\"] }]\n }], propDecorators: { builder: [{\n type: Input\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9sYXlvdXQtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsbUJBQW1CLEVBQWlCLE1BQU0scUNBQXFDLENBQUM7OztBQXVCekYsTUFBTSxPQUFPLDBCQUEwQjtJQXBCdkM7UUF1QkUsaUJBQVksR0FBa0IsRUFBbUIsQ0FBQztLQWtCbkQ7SUFoQkMsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxZQUFZLEdBQUc7Z0JBQ2xCLElBQUksRUFBRSxjQUFjO2dCQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTTtnQkFDakMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNsRCxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksbUJBQW1CO29CQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNO29CQUN6QixRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDOUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLG1CQUFtQjt3QkFDL0MsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTTtxQkFDM0IsQ0FBQyxDQUFDO2lCQUNKLENBQUMsQ0FBQzthQUNhLENBQUM7UUFDckIsQ0FBQztJQUNILENBQUM7OEdBcEJVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLCtHQWhCM0I7Ozs7Ozs7O0dBUVQsMEdBVFMsWUFBWSw4QkFBRSxtQkFBbUI7OzJGQWlCaEMsMEJBQTBCO2tCQXBCdEMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLFlBQ2xDOzs7Ozs7OztHQVFUOzhCQVNRLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFYUFdpZGdldENvcmVNb2R1bGUsIEFYUFdpZGdldE5vZGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBBWFBMYXlvdXREZWZpbml0aW9uIH0gZnJvbSAnLi9sYXlvdXQtYnVpbGRlci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1sYXlvdXQtcmVuZGVyZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBWFBXaWRnZXRDb3JlTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8YXhwLXdpZGdldHMtY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBcbiAgICAgICAgYXhwLXdpZGdldC1yZW5kZXJlciBcbiAgICAgICAgW25vZGVdPVwicmVuZGVyZWROb2RlXCIgXG4gICAgICAgIFttb2RlXT1cImJ1aWxkZXI/Lm1vZGUgPz8gJ3ZpZXcnXCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2F4cC13aWRnZXRzLWNvbnRhaW5lcj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBBWFBMYXlvdXRSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGJ1aWxkZXI/OiBBWFBMYXlvdXREZWZpbml0aW9uO1xuICBcbiAgcmVuZGVyZWROb2RlOiBBWFBXaWRnZXROb2RlID0ge30gYXMgQVhQV2lkZ2V0Tm9kZTtcbiAgXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmJ1aWxkZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyZWROb2RlID0ge1xuICAgICAgICB0eXBlOiAnYmxvY2stbGF5b3V0JyxcbiAgICAgICAgbW9kZTogdGhpcy5idWlsZGVyLm1vZGUgPz8gJ3ZpZXcnLFxuICAgICAgICBjaGlsZHJlbjogKHRoaXMuYnVpbGRlci5ub2RlcyA/PyBbXSkubWFwKChub2RlKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IG5vZGUud2lkZ2V0Py50eXBlID8/ICd0ZXh0LWJsb2NrLWxheW91dCcsXG4gICAgICAgICAgbW9kZTogbm9kZS5tb2RlID8/ICd2aWV3JyxcbiAgICAgICAgICBjaGlsZHJlbjogKG5vZGUuY2hpbGRyZW4gPz8gW10pLm1hcCgoY2hpbGQpID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBjaGlsZC53aWRnZXQ/LnR5cGUgPz8gJ3RleHQtYmxvY2stbGF5b3V0JyxcbiAgICAgICAgICAgIG1vZGU6IGNoaWxkLm1vZGUgPz8gJ3ZpZXcnLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpLFxuICAgICAgfSBhcyBBWFBXaWRnZXROb2RlO1xuICAgIH1cbiAgfVxufVxuIl19","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXPLayoutBuilderService } from './layout-builder.service';\nimport { AXPLayoutRendererComponent } from './layout-renderer.component';\nimport * as i0 from \"@angular/core\";\nexport class LayoutBuilderModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: LayoutBuilderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.2.4\", ngImport: i0, type: LayoutBuilderModule, imports: [CommonModule, AXPLayoutRendererComponent], exports: [AXPLayoutRendererComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: LayoutBuilderModule, providers: [AXPLayoutBuilderService], imports: [CommonModule, AXPLayoutRendererComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.2.4\", ngImport: i0, type: LayoutBuilderModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, AXPLayoutRendererComponent],\n providers: [AXPLayoutBuilderService],\n exports: [AXPLayoutRendererComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlci9zcmMvbGliL2xheW91dC1idWlsZGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFPekUsTUFBTSxPQUFPLG1CQUFtQjs4R0FBbkIsbUJBQW1COytHQUFuQixtQkFBbUIsWUFKcEIsWUFBWSxFQUFFLDBCQUEwQixhQUV4QywwQkFBMEI7K0dBRXpCLG1CQUFtQixhQUhuQixDQUFDLHVCQUF1QixDQUFDLFlBRDFCLFlBQVksRUFBRSwwQkFBMEI7OzJGQUl2QyxtQkFBbUI7a0JBTC9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLDBCQUEwQixDQUFDO29CQUNuRCxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztvQkFDcEMsT0FBTyxFQUFFLENBQUMsMEJBQTBCLENBQUM7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBMYXlvdXRCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vbGF5b3V0LWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBWFBMYXlvdXRSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEFYUExheW91dFJlbmRlcmVyQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbQVhQTGF5b3V0QnVpbGRlclNlcnZpY2VdLFxuICBleHBvcnRzOiBbQVhQTGF5b3V0UmVuZGVyZXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMYXlvdXRCdWlsZGVyTW9kdWxlIHt9XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LXBsYXRmb3JtLWxheW91dC1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlci9zcmMvYWNvcmV4LXBsYXRmb3JtLWxheW91dC1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-layout-builder.mjs","sources":["../tmp-esm2022/layout/builder/lib/layout-builder.service.js","../tmp-esm2022/layout/builder/lib/layout-conversion.service.js","../tmp-esm2022/layout/builder/lib/layout-renderer.component.js","../tmp-esm2022/layout/builder/lib/layout-builder.module.js","../tmp-esm2022/layout/builder/lib/layout-builder.types.js","../tmp-esm2022/layout/builder/lib/dialog-renderer.component.js","../tmp-esm2022/layout/builder/acorex-platform-layout-builder.js"],"sourcesContent":["import { AXPopupService } from '@acorex/components/popup';\nimport { Injectable, inject } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n//#region ---- Inheritance Utilities ----\n/**\n * Resolves inherited properties from context and local values\n */\nfunction resolveInheritedProperties(context, localValues = {}) {\n return {\n mode: localValues.mode ?? context.mode ?? 'edit',\n disabled: localValues.disabled ?? context.disabled,\n readonly: localValues.readonly ?? context.readonly,\n direction: localValues.direction ?? context.direction,\n visible: localValues.visible ?? context.visible,\n };\n}\n/**\n * Merges inheritance context with local overrides\n */\nfunction mergeInheritanceContext(parentContext, localOverrides = {}) {\n return {\n ...parentContext,\n ...localOverrides,\n };\n}\n/**\n * Generates a random string for path/name generation\n */\nfunction generateRandomId() {\n return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n}\n/**\n * Converts label to a valid path/name\n */\nfunction labelToPath(label) {\n return label\n .toLowerCase()\n .replace(/[^a-z0-9\\s]/g, '') // Remove special characters\n .replace(/\\s+/g, '_') // Replace spaces with underscores\n .substring(0, 50); // Limit length\n}\n/**\n * Generates path for value widgets based on hierarchy\n */\nfunction generateValueWidgetPath(widgetName, formFieldName, formFieldLabel) {\n // Priority: widget name -> form field name -> generated from label -> random\n if (widgetName) {\n return widgetName;\n }\n if (formFieldName) {\n return formFieldName;\n }\n if (formFieldLabel) {\n return labelToPath(formFieldLabel);\n }\n return generateRandomId();\n}\n//#endregion\n//#region ---- Service Implementation ----\nexport class AXPLayoutBuilderService {\n constructor() {\n this.popupService = inject(AXPopupService);\n }\n /**\n * Create a new layout builder\n */\n create() {\n return new LayoutBuilder(this.popupService);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXPLayoutBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXPLayoutBuilderService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXPLayoutBuilderService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//#endregion\n//#region ---- Layout Builder Implementation ----\n/**\n * Main layout builder - Single Responsibility: Layout orchestration\n * Open/Closed: Extensible through container delegates\n */\nclass LayoutBuilder {\n constructor(popupService) {\n this.popupService = popupService;\n this.root = {\n children: [],\n mode: 'edit',\n type: 'flex-layout',\n };\n this.inheritanceContext = {\n mode: 'edit',\n };\n }\n // Predefined layout containers at root level - delegate pattern required\n grid(delegate) {\n const container = new GridContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n //this.state.children!.push(container.build());\n this.root = container.build();\n return this;\n }\n flex(delegate) {\n const container = new FlexContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children.push(container.build());\n return this;\n }\n panel(delegate) {\n const container = new PanelContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children.push(container.build());\n return this;\n }\n page(delegate) {\n const container = new PageContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children.push(container.build());\n return this;\n }\n tabset(delegate) {\n const container = new TabsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children.push(container.build());\n return this;\n }\n fieldset(delegate) {\n const container = new FieldsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.root.children.push(container.build());\n return this;\n }\n dialog(delegate) {\n const container = new DialogContainerBuilder(this.popupService);\n if (delegate) {\n delegate(container);\n }\n return container;\n }\n formField(label, delegate) {\n const field = new FormFieldBuilder(label);\n field.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(field);\n }\n this.root.children.push(field.build());\n return this;\n }\n build() {\n return {\n type: this.root.type,\n children: this.root.children,\n mode: this.root.mode,\n };\n }\n}\n//#endregion\n//#region ---- Container Builder Implementation ----\n/**\n * Abstract base container builder - Open/Closed Principle\n * Provides common functionality for all container types\n */\nclass BaseContainerBuilder {\n constructor(containerType) {\n this.containerState = {\n mode: 'edit',\n type: 'flex-layout',\n children: [],\n };\n this.inheritanceContext = {};\n this.containerState.type = containerType;\n }\n // Base methods shared by all containers\n ensureChildren() {\n this.containerState.children = this.containerState.children || [];\n }\n addWidget(type, options) {\n const child = new WidgetBuilder();\n child.type(type);\n // For value widgets, ensure path is provided\n const widgetOptions = options ?? {};\n const path = widgetOptions.path;\n const name = widgetOptions.name;\n if (this.isValueWidget(type) && !path) {\n throw new Error(`Value widget '${type}' requires a 'path' property`);\n }\n // Set name and path in widget state, not options\n if (name) {\n child.name(name);\n }\n if (path) {\n child.path(path);\n }\n // Remove name and path from options\n const { name: _, path: __, ...cleanOptions } = widgetOptions;\n child.options(cleanOptions);\n child.withInheritanceContext(this.inheritanceContext);\n this.ensureChildren();\n this.containerState.children.push(child.build());\n return this;\n }\n isValueWidget(type) {\n const valueWidgetTypes = [\n 'text-editor',\n 'large-text-editor',\n 'rich-text-editor',\n 'password-editor',\n 'number-editor',\n 'select-editor',\n 'lookup-editor',\n 'selection-list-editor',\n 'date-time-editor',\n 'toggle-editor',\n 'color-editor',\n ];\n return valueWidgetTypes.includes(type);\n }\n build() {\n const result = {\n type: this.containerState.type,\n children: this.containerState.children,\n options: this.containerState.options,\n mode: this.containerState.mode,\n visible: this.containerState.visible,\n };\n // Add name with _form_field suffix for form fields\n if (this.containerState.type === 'form-field') {\n if (this.containerState.name) {\n result.name = this.containerState.name;\n }\n else if (this.containerState.options?.['label']) {\n result.name = labelToPath(this.containerState.options['label']) + '_form_field';\n }\n // Form fields don't have path\n }\n else {\n // Other containers can have name and path\n if (this.containerState.name) {\n result.name = this.containerState.name;\n }\n if (this.containerState.path) {\n result.path = this.containerState.path;\n }\n if (this.containerState.defaultValue !== undefined) {\n result.defaultValue = this.containerState.defaultValue;\n }\n }\n return result;\n }\n}\n/**\n * Base container builder mixin - Interface Segregation Principle\n * Provides common container operations\n */\nclass BaseContainerMixin extends BaseContainerBuilder {\n name(name) {\n this.containerState.name = name;\n return this;\n }\n path(path) {\n this.containerState.path = path;\n return this;\n }\n mode(mode) {\n this.containerState.mode = mode;\n this.inheritanceContext.mode = mode;\n return this;\n }\n visible(condition) {\n if (!this.containerState.options)\n this.containerState.options = {};\n this.containerState.options['visible'] = condition;\n this.inheritanceContext.visible = condition;\n return this;\n }\n disabled(condition) {\n if (!this.containerState.options)\n this.containerState.options = {};\n this.containerState.options['disabled'] = condition;\n this.inheritanceContext.disabled = condition;\n return this;\n }\n readonly(condition) {\n if (!this.containerState.options)\n this.containerState.options = {};\n this.containerState.options['readonly'] = condition;\n this.inheritanceContext.readonly = condition;\n return this;\n }\n direction(direction) {\n if (!this.containerState.options)\n this.containerState.options = {};\n this.containerState.options['direction'] = direction;\n this.inheritanceContext.direction = direction;\n return this;\n }\n // Inheritance context methods\n withInheritanceContext(context) {\n this.inheritanceContext = mergeInheritanceContext(context);\n return this;\n }\n getInheritanceContext() {\n return { ...this.inheritanceContext };\n }\n}\n/**\n * Layout container mixin - Interface Segregation Principle\n * Provides layout-specific operations\n */\nclass LayoutContainerMixin extends BaseContainerMixin {\n layout(value) {\n // Layout handling can be added here if needed\n return this;\n }\n}\n/**\n * Child container mixin - Interface Segregation Principle\n * Provides child container management\n */\nclass ChildContainerMixin extends LayoutContainerMixin {\n grid(delegate) {\n const container = new GridContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children.push(container.build());\n return this;\n }\n flex(delegate) {\n const container = new FlexContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children.push(container.build());\n return this;\n }\n panel(delegate) {\n const container = new PanelContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children.push(container.build());\n return this;\n }\n page(delegate) {\n const container = new PageContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children.push(container.build());\n return this;\n }\n tabset(delegate) {\n const container = new TabsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children.push(container.build());\n return this;\n }\n fieldset(delegate) {\n const container = new FieldsetContainerBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children.push(container.build());\n return this;\n }\n dialog(delegate) {\n const container = new DialogContainerBuilder(); // Will use inject() fallback\n if (delegate) {\n delegate(container);\n }\n return container;\n }\n formField(label, delegate) {\n const field = new FormFieldBuilder(label);\n field.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(field);\n }\n this.ensureChildren();\n this.containerState.children.push(field.build());\n return this;\n }\n}\n/**\n * Widget container mixin - Interface Segregation Principle\n * Provides widget creation operations\n */\nclass WidgetContainerMixin extends ChildContainerMixin {\n textBox(options) {\n this.addWidget('text-editor', options);\n return this;\n }\n largeTextBox(options) {\n this.addWidget('large-text-editor', options);\n return this;\n }\n richText(options) {\n this.addWidget('rich-text-editor', options);\n return this;\n }\n passwordBox(options) {\n this.addWidget('password-editor', options);\n return this;\n }\n numberBox(options) {\n this.addWidget('number-editor', options);\n return this;\n }\n selectBox(options) {\n this.addWidget('select-editor', options);\n return this;\n }\n lookupBox(options) {\n this.addWidget('lookup-editor', options);\n return this;\n }\n selectionList(options) {\n this.addWidget('selection-list-editor', options);\n return this;\n }\n dateTimeBox(options) {\n this.addWidget('date-time-editor', options);\n return this;\n }\n toggleSwitch(options) {\n this.addWidget('toggle-editor', options);\n return this;\n }\n colorBox(options) {\n this.addWidget('color-editor', options);\n return this;\n }\n list(delegate) {\n const container = new ListWidgetBuilder();\n container.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(container);\n }\n this.ensureChildren();\n this.containerState.children.push(container.build());\n return this;\n }\n customWidget(type, options) {\n this.addWidget(type, options);\n return this;\n }\n}\n/**\n * Flex Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass FlexContainerBuilder extends WidgetContainerMixin {\n constructor() {\n super('flex-layout');\n }\n setOptions(options) {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n // Individual fluent methods for Flex\n setDirection(direction) {\n return this.setOptions({ flexDirection: direction });\n }\n setWrap(wrap) {\n return this.setOptions({ flexWrap: wrap });\n }\n setJustifyContent(justify) {\n return this.setOptions({ justifyContent: justify });\n }\n setAlignItems(align) {\n return this.setOptions({ alignItems: align });\n }\n setGap(gap) {\n return this.setOptions({ gap });\n }\n setBackgroundColor(color) {\n return this.setOptions({ backgroundColor: color });\n }\n setPadding(padding) {\n return this.setOptions({ spacing: { padding } });\n }\n setMargin(margin) {\n return this.setOptions({ spacing: { margin } });\n }\n}\n/**\n * Grid Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass GridContainerBuilder extends WidgetContainerMixin {\n constructor() {\n super('grid-layout');\n }\n setOptions(options) {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n // Individual fluent methods for Grid\n setColumns(columns) {\n return this.setOptions({ grid: { default: { columns } } });\n }\n setRows(rows) {\n return this.setOptions({ grid: { default: { rows } } });\n }\n setGap(gap) {\n return this.setOptions({ grid: { default: { gap } } });\n }\n setJustifyItems(justify) {\n return this.setOptions({ grid: { default: { justifyItems: justify } } });\n }\n setAlignItems(align) {\n return this.setOptions({ grid: { default: { alignItems: align } } });\n }\n setAutoFlow(flow) {\n return this.setOptions({ grid: { default: { autoFlow: flow } } });\n }\n setBackgroundColor(color) {\n return this.setOptions({ backgroundColor: color });\n }\n setPadding(padding) {\n return this.setOptions({ spacing: { padding } });\n }\n setMargin(margin) {\n return this.setOptions({ spacing: { margin } });\n }\n}\n/**\n * Panel Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass PanelContainerBuilder extends WidgetContainerMixin {\n constructor() {\n super('panel-layout');\n }\n setOptions(options) {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n // Individual fluent methods for Panel\n setCaption(caption) {\n return this.setOptions({ caption });\n }\n setIcon(icon) {\n return this.setOptions({ icon });\n }\n setLook(look) {\n return this.setOptions({ look });\n }\n setShowHeader(show) {\n return this.setOptions({ showHeader: show });\n }\n setCollapsed(collapsed) {\n return this.setOptions({ collapsed });\n }\n}\n/**\n * Page Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass PageContainerBuilder extends WidgetContainerMixin {\n constructor() {\n super('page-layout');\n }\n setOptions(options) {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n // Individual fluent methods for Page\n setBackgroundColor(color) {\n return this.setOptions({ backgroundColor: color });\n }\n setTheme(theme) {\n return this.setOptions({ theme });\n }\n setHasHeader(hasHeader) {\n return this.setOptions({ hasHeader });\n }\n setHasFooter(hasFooter) {\n return this.setOptions({ hasFooter });\n }\n setDirection(direction) {\n return this.setOptions({ direction });\n }\n}\n/**\n * Tabset Container Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass TabsetContainerBuilder extends WidgetContainerMixin {\n constructor() {\n super('tabset-layout');\n }\n setOptions(options) {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n // Individual fluent methods for Tabset\n setLook(look) {\n return this.setOptions({ look });\n }\n setOrientation(orientation) {\n return this.setOptions({ orientation });\n }\n setActiveIndex(index) {\n return this.setOptions({ activeIndex: index });\n }\n}\n/**\n * Form Field Builder - Liskov Substitution Principle\n * Can only contain ONE widget with automatic path generation\n */\nclass FormFieldBuilder extends LayoutContainerMixin {\n constructor(label) {\n super('form-field');\n this.hasWidget = false;\n this.containerState.options = { label, showLabel: true };\n }\n setOptions(options) {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n setLabel(label) {\n return this.setOptions({ label });\n }\n setShowLabel(showLabel) {\n return this.setOptions({ showLabel });\n }\n // Single widget methods with automatic path generation\n addSingleWidget(type, options) {\n if (this.hasWidget) {\n throw new Error('Form field can only contain one widget');\n }\n const formFieldName = this.containerState.name;\n const formFieldPath = this.containerState.path; // Get explicit path from form field\n const formFieldLabel = this.containerState.options?.['label'];\n const widgetName = options?.name;\n // Generate widget path: explicit path -> widget name -> form field name -> label -> random\n let widgetPath;\n if (formFieldPath) {\n widgetPath = formFieldPath; // Use explicit form field path first\n }\n else if (widgetName) {\n widgetPath = widgetName;\n }\n else if (formFieldName) {\n widgetPath = formFieldName; // Use form field name as default path\n }\n else if (formFieldLabel) {\n widgetPath = labelToPath(formFieldLabel);\n }\n else {\n widgetPath = generateRandomId();\n }\n const finalName = widgetName || formFieldName || widgetPath;\n const child = new WidgetBuilder();\n child.type(type);\n child.name(finalName);\n child.path(widgetPath);\n // Remove name from options since it's now in state\n const { name: _, ...cleanOptions } = (options || {});\n child.options(cleanOptions);\n child.withInheritanceContext(this.inheritanceContext);\n this.ensureChildren();\n this.containerState.children.push(child.build());\n this.hasWidget = true;\n return this;\n }\n textBox(options) {\n return this.addSingleWidget('text-editor', options);\n }\n largeTextBox(options) {\n return this.addSingleWidget('large-text-editor', options);\n }\n richText(options) {\n return this.addSingleWidget('rich-text-editor', options);\n }\n passwordBox(options) {\n return this.addSingleWidget('password-editor', options);\n }\n numberBox(options) {\n return this.addSingleWidget('number-editor', options);\n }\n selectBox(options) {\n return this.addSingleWidget('select-editor', options);\n }\n lookupBox(options) {\n return this.addSingleWidget('lookup-editor', options);\n }\n selectionList(options) {\n return this.addSingleWidget('selection-list-editor', options);\n }\n dateTimeBox(options) {\n return this.addSingleWidget('date-time-editor', options);\n }\n toggleSwitch(options) {\n return this.addSingleWidget('toggle-editor', options);\n }\n colorBox(options) {\n return this.addSingleWidget('color-editor', options);\n }\n customWidget(type, options) {\n return this.addSingleWidget(type, options);\n }\n}\n/**\n * Fieldset Container Builder - Liskov Substitution Principle\n * Extends LayoutContainerMixin to inherit layout functionality\n * Specialized for form fields only\n */\nclass FieldsetContainerBuilder extends LayoutContainerMixin {\n constructor() {\n super('fieldset-layout');\n this.containerState.options = {};\n }\n setOptions(options) {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n // Individual fluent methods for Fieldset\n setTitle(title) {\n return this.setOptions({ title });\n }\n setDescription(description) {\n return this.setOptions({ description });\n }\n setIcon(icon) {\n return this.setOptions({ icon });\n }\n setCollapsible(collapsible) {\n return this.setOptions({ collapsible });\n }\n setIsOpen(isOpen) {\n return this.setOptions({ isOpen });\n }\n setLook(look) {\n return this.setOptions({ look });\n }\n setShowHeader(showHeader) {\n return this.setOptions({ showHeader });\n }\n setCols(cols) {\n return this.setOptions({ cols });\n }\n // Only form fields are allowed in fieldset\n formField(label, delegate) {\n const field = new FormFieldBuilder(label);\n field.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(field);\n }\n this.ensureChildren();\n this.containerState.children.push(field.build());\n return this;\n }\n}\n/**\n * List Widget Builder - Liskov Substitution Principle\n * Extends WidgetContainerMixin to inherit all common functionality\n */\nclass ListWidgetBuilder extends WidgetContainerMixin {\n constructor() {\n super('list');\n }\n setOptions(options) {\n this.containerState.options = { ...this.containerState.options, ...options };\n return this;\n }\n // Individual fluent methods for List Widget\n setDataSource(dataSource) {\n return this.setOptions({ dataSource });\n }\n setColumns(columns) {\n return this.setOptions({ columns });\n }\n // Event handlers\n setOnRowClick(handler) {\n return this.setOptions({ onRowClick: handler });\n }\n setOnRowDoubleClick(handler) {\n return this.setOptions({ onRowDoubleClick: handler });\n }\n setOnSelectionChange(handler) {\n return this.setOptions({ onSelectionChange: handler });\n }\n setOnRowCommand(handler) {\n return this.setOptions({ onRowCommand: handler });\n }\n // Table features\n setPaging(paging) {\n return this.setOptions({ paging });\n }\n setShowHeader(show) {\n return this.setOptions({ showHeader: show });\n }\n setShowFooter(show) {\n return this.setOptions({ showFooter: show });\n }\n setFixHeader(fix) {\n return this.setOptions({ fixHeader: fix });\n }\n setFixFooter(fix) {\n return this.setOptions({ fixFooter: fix });\n }\n setFetchDataMode(mode) {\n return this.setOptions({ fetchDataMode: mode });\n }\n setParentField(field) {\n return this.setOptions({ parentField: field });\n }\n setMinHeight(height) {\n return this.setOptions({ minHeight: height });\n }\n // Selection & Index\n setShowIndex(show) {\n return this.setOptions({ showIndex: show });\n }\n setAllowSelection(allow) {\n return this.setOptions({ allowSelection: allow });\n }\n // Commands\n setPrimaryCommands(commands) {\n return this.setOptions({ primaryCommands: commands });\n }\n setSecondaryCommands(commands) {\n return this.setOptions({ secondaryCommands: commands });\n }\n // Loading\n setLoading(loading) {\n return this.setOptions({ loading });\n }\n}\n/**\n * Dialog Container Builder - Specialized for dialog functionality\n * Uses composition instead of inheritance for cleaner separation\n */\nclass DialogContainerBuilder {\n constructor(popupService) {\n this.dialogState = {\n type: 'flex-layout', // This will be overridden when content layout exists\n children: [],\n mode: 'edit',\n dialogOptions: {\n title: '',\n size: 'md',\n closeButton: false,\n },\n actions: {\n footer: {\n prefix: [],\n suffix: [],\n },\n },\n };\n if (popupService) {\n this.popupService = popupService;\n }\n else {\n this.popupService = inject(AXPopupService);\n }\n }\n setOptions(options) {\n this.dialogState.dialogOptions = { ...this.dialogState.dialogOptions, ...options };\n return this;\n }\n // Individual fluent methods for Dialog\n setTitle(title) {\n return this.setOptions({ title });\n }\n setMessage(message) {\n return this.setOptions({ message });\n }\n setSize(size) {\n return this.setOptions({ size });\n }\n setCloseButton(closeButton) {\n return this.setOptions({ closeButton });\n }\n setContext(context) {\n return this.setOptions({ context });\n }\n content(delegate) {\n if (delegate) {\n // Create a flex container directly instead of through LayoutBuilder\n const flexContainer = new FlexContainerBuilder();\n flexContainer.setDirection('column');\n flexContainer.setGap('10px');\n delegate(flexContainer);\n this.contentLayout = flexContainer.build();\n }\n return this;\n }\n setActions(delegate) {\n if (delegate) {\n const actionBuilder = new ActionBuilder(this);\n delegate(actionBuilder);\n }\n return this;\n }\n // Build method to create dialog node\n build() {\n // If we have content layout, use it directly to avoid extra wrapper\n if (this.contentLayout) {\n return {\n ...this.contentLayout,\n // Add dialog-specific properties\n options: {\n ...this.contentLayout.options,\n ...this.dialogState.dialogOptions,\n },\n };\n }\n // Fallback to dialog state structure if no content\n const result = {\n ...this.dialogState,\n children: [],\n };\n // Add dialog-specific properties\n if (this.dialogState.dialogOptions) {\n result.options = { ...result.options, ...this.dialogState.dialogOptions };\n }\n return result;\n }\n // Dialog-specific methods\n async show() {\n const dialogNode = this.build();\n // Import the dialog renderer component dynamically\n const { AXPDialogRendererComponent } = await import('./dialog-renderer.component');\n // Create dialog configuration\n const dialogConfig = {\n title: this.dialogState.dialogOptions?.title || '',\n message: this.dialogState.dialogOptions?.message,\n context: this.dialogState.dialogOptions?.context || {},\n definition: dialogNode,\n actions: this.dialogState.actions,\n };\n // The Promise resolves when user clicks an action button\n return new Promise(async (resolve) => {\n this.popupService.open(AXPDialogRendererComponent, {\n title: dialogConfig.title,\n size: this.dialogState.dialogOptions?.size || 'md',\n closeButton: this.dialogState.dialogOptions?.closeButton || false,\n closeOnBackdropClick: false,\n draggable: false,\n data: {\n config: dialogConfig,\n callBack: (result) => {\n // Resolve with the dialog reference when user clicks an action\n resolve(result);\n },\n },\n });\n });\n }\n}\n//#endregion\n//#region ---- Widget Builder Implementation ----\n/**\n * Widget Builder - Single Responsibility Principle\n * Handles individual widget configuration and building\n */\nclass WidgetBuilder {\n constructor(name) {\n this.widgetState = {\n type: 'widget',\n options: {},\n };\n this.inheritanceContext = {};\n if (name) {\n this.widgetState.name = name;\n }\n }\n type(type) {\n this.widgetState.type = type;\n return this;\n }\n name(name) {\n this.widgetState.name = name;\n if (!this.widgetState.path) {\n this.widgetState.path = name;\n }\n return this;\n }\n path(path) {\n this.widgetState.path = path;\n return this;\n }\n options(options) {\n this.widgetState.options = options;\n return this;\n }\n layout(value) {\n if (typeof value === 'number') {\n this.widgetState.layout = {\n positions: {\n sm: { colSpan: 12 },\n md: { colSpan: 12 },\n lg: { colSpan: value },\n xl: { colSpan: value },\n xxl: { colSpan: value },\n },\n };\n }\n else {\n this.widgetState.layout = value;\n }\n return this;\n }\n mode(mode) {\n this.widgetState.mode = mode;\n this.inheritanceContext.mode = mode;\n return this;\n }\n visible(condition) {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['visible'] = condition;\n this.inheritanceContext.visible = condition;\n return this;\n }\n disabled(condition) {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['disabled'] = condition;\n this.inheritanceContext.disabled = condition;\n return this;\n }\n readonly(condition) {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['readonly'] = condition;\n this.inheritanceContext.readonly = condition;\n return this;\n }\n direction(direction) {\n if (!this.widgetState.options) {\n this.widgetState.options = {};\n }\n this.widgetState.options['direction'] = direction;\n this.inheritanceContext.direction = direction;\n return this;\n }\n // Inheritance context methods\n withInheritanceContext(context) {\n this.inheritanceContext = mergeInheritanceContext(context);\n // Apply inherited properties to widget state\n const resolved = resolveInheritedProperties(context, this.inheritanceContext);\n if (resolved.mode && !this.widgetState.mode) {\n this.widgetState.mode = resolved.mode;\n }\n if (!this.widgetState.options)\n this.widgetState.options = {};\n if (resolved.disabled !== undefined && !this.widgetState.options['disabled']) {\n this.widgetState.options['disabled'] = resolved.disabled;\n }\n if (resolved.readonly !== undefined && !this.widgetState.options['readonly']) {\n this.widgetState.options['readonly'] = resolved.readonly;\n }\n if (resolved.direction !== undefined && !this.widgetState.options['direction']) {\n this.widgetState.options['direction'] = resolved.direction;\n }\n if (resolved.visible !== undefined && !this.widgetState.options['visible']) {\n this.widgetState.options['visible'] = resolved.visible;\n }\n return this;\n }\n getInheritanceContext() {\n return { ...this.inheritanceContext };\n }\n build() {\n return {\n name: this.widgetState.name,\n type: this.widgetState.type,\n options: this.widgetState.options,\n mode: this.widgetState.mode,\n path: this.widgetState.path,\n defaultValue: this.widgetState.defaultValue,\n };\n }\n}\n//#region ---- Action Builder Implementation ----\nclass ActionBuilder {\n constructor(dialogBuilder) {\n this.dialogBuilder = dialogBuilder;\n }\n cancel(text) {\n if (!this.dialogBuilder['dialogState'].actions.footer.suffix) {\n this.dialogBuilder['dialogState'].actions.footer.suffix = [];\n }\n this.dialogBuilder['dialogState'].actions.footer.suffix.push({\n title: text || '@general:actions.cancel.title',\n icon: 'fa-times',\n color: 'default',\n command: { name: 'cancel' },\n });\n return this;\n }\n submit(text) {\n if (!this.dialogBuilder['dialogState'].actions.footer.suffix) {\n this.dialogBuilder['dialogState'].actions.footer.suffix = [];\n }\n this.dialogBuilder['dialogState'].actions.footer.suffix.push({\n title: text || '@general:actions.submit.title',\n icon: 'fa-check',\n color: 'primary',\n command: { name: 'submit', options: { validate: true } },\n });\n return this;\n }\n custom(action) {\n if (!this.dialogBuilder['dialogState'].actions.footer.suffix) {\n this.dialogBuilder['dialogState'].actions.footer.suffix = [];\n }\n this.dialogBuilder['dialogState'].actions.footer.suffix.push(action);\n return this;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9sYXlvdXQtYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUkxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUEyQ25ELDZDQUE2QztBQUU3Qzs7R0FFRztBQUNILFNBQVMsMEJBQTBCLENBQ2pDLE9BQTJCLEVBQzNCLGNBQTJDLEVBQUU7SUFFN0MsT0FBTztRQUNMLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTTtRQUNoRCxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUTtRQUNsRCxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUTtRQUNsRCxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUztRQUNyRCxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTztLQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FDOUIsYUFBaUMsRUFDakMsaUJBQThDLEVBQUU7SUFFaEQsT0FBTztRQUNMLEdBQUcsYUFBYTtRQUNoQixHQUFHLGNBQWM7S0FDbEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FB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O1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQXlCO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQVEsQ0FBQyxNQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFRLENBQUMsTUFBTyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakUsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBUSxDQUFDLE1BQU8sQ0FBQyxNQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQb3B1cFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHsgQVhQQWN0aW9uTWVudUl0ZW0sIEFYUEdyaWRMYXlvdXRPcHRpb25zIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUERpYWxvZ1JlZiB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgQVhQV2lkZ2V0Tm9kZSwgQVhQV2lkZ2V0UmVuZGVyTW9kZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3dpZGdldC1jb3JlJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhQRGlhbG9nQ29udGFpbmVyT3B0aW9ucyxcbiAgQVhQRmllbGRzZXRDb250YWluZXJPcHRpb25zLFxuICBBWFBGbGV4Q29udGFpbmVyT3B0aW9ucyxcbiAgQVhQRm9ybUZpZWxkT3B0aW9ucyxcbiAgLy8gQ29udGFpbmVyIG9wdGlvbnNcbiAgQVhQR3JpZENvbnRhaW5lck9wdGlvbnMsXG4gIEFYUExpc3RXaWRnZXRPcHRpb25zLFxuICBBWFBQYWdlQ29udGFpbmVyT3B0aW9ucyxcbiAgQVhQUGFuZWxDb250YWluZXJPcHRpb25zLFxuICBBWFBUYWJzZXRDb250YWluZXJPcHRpb25zLFxuICBDb2xvckJveE9wdGlvbnMsXG4gIERhdGVUaW1lQm94T3B0aW9ucyxcbiAgRGlhbG9nQnVpbGRlclN0YXRlLFxuICBJQWN0aW9uQnVpbGRlcixcbiAgSURpYWxvZ0J1aWxkZXIsXG4gIElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXIsXG4gIElGbGV4Q29udGFpbmVyQnVpbGRlcixcbiAgSUZvcm1GaWVsZEJ1aWxkZXIsXG4gIElHcmlkQ29udGFpbmVyQnVpbGRlcixcbiAgSUxheW91dEJ1aWxkZXIsXG4gIElMaXN0V2lkZ2V0QnVpbGRlcixcbiAgSVBhZ2VDb250YWluZXJCdWlsZGVyLFxuICBJUGFuZWxDb250YWluZXJCdWlsZGVyLFxuICBJVGFic2V0Q29udGFpbmVyQnVpbGRlcixcbiAgSVdpZGdldEJ1aWxkZXIsXG4gIC8vIEluaGVyaXRhbmNlIGNvbnRleHRcbiAgSW5oZXJpdGFuY2VDb250ZXh0LFxuICBJbmhlcml0ZWRQcm9wZXJ0aWVzLFxuICBMYXJnZVRleHRCb3hPcHRpb25zLFxuICBMYXlvdXRCdWlsZGVyU3RhdGUsXG4gIExvb2t1cEJveE9wdGlvbnMsXG4gIE51bWJlckJveE9wdGlvbnMsXG4gIFBhc3N3b3JkQm94T3B0aW9ucyxcbiAgUmljaFRleHRPcHRpb25zLFxuICBTZWxlY3RCb3hPcHRpb25zLFxuICBTZWxlY3Rpb25MaXN0T3B0aW9ucyxcbiAgVGV4dEJveE9wdGlvbnMsXG4gIFRvZ2dsZVN3aXRjaE9wdGlvbnMsXG4gIFdpZGdldEJ1aWxkZXJTdGF0ZSxcbn0gZnJvbSAnLi9sYXlvdXQtYnVpbGRlci50eXBlcyc7XG5cbi8vI3JlZ2lvbiAtLS0tICAgSW5oZXJpdGFuY2UgVXRpbGl0aWVzICAgLS0tLVxuXG4vKipcbiAqIFJlc29sdmVzIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGZyb20gY29udGV4dCBhbmQgbG9jYWwgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVJbmhlcml0ZWRQcm9wZXJ0aWVzKFxuICBjb250ZXh0OiBJbmhlcml0YW5jZUNvbnRleHQsXG4gIGxvY2FsVmFsdWVzOiBQYXJ0aWFsPEluaGVyaXRhbmNlQ29udGV4dD4gPSB7fSxcbik6IEluaGVyaXRlZFByb3BlcnRpZXMge1xuICByZXR1cm4ge1xuICAgIG1vZGU6IGxvY2FsVmFsdWVzLm1vZGUgPz8gY29udGV4dC5tb2RlID8/ICdlZGl0JyxcbiAgICBkaXNhYmxlZDogbG9jYWxWYWx1ZXMuZGlzYWJsZWQgPz8gY29udGV4dC5kaXNhYmxlZCxcbiAgICByZWFkb25seTogbG9jYWxWYWx1ZXMucmVhZG9ubHkgPz8gY29udGV4dC5yZWFkb25seSxcbiAgICBkaXJlY3Rpb246IGxvY2FsVmFsdWVzLmRpcmVjdGlvbiA/PyBjb250ZXh0LmRpcmVjdGlvbixcbiAgICB2aXNpYmxlOiBsb2NhbFZhbHVlcy52aXNpYmxlID8/IGNvbnRleHQudmlzaWJsZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBNZXJnZXMgaW5oZXJpdGFuY2UgY29udGV4dCB3aXRoIGxvY2FsIG92ZXJyaWRlc1xuICovXG5mdW5jdGlvbiBtZXJnZUluaGVyaXRhbmNlQ29udGV4dChcbiAgcGFyZW50Q29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0LFxuICBsb2NhbE92ZXJyaWRlczogUGFydGlhbDxJbmhlcml0YW5jZUNvbnRleHQ+ID0ge30sXG4pOiBJbmhlcml0YW5jZUNvbnRleHQge1xuICByZXR1cm4ge1xuICAgIC4uLnBhcmVudENvbnRleHQsXG4gICAgLi4ubG9jYWxPdmVycmlkZXMsXG4gIH07XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgcmFuZG9tIHN0cmluZyBmb3IgcGF0aC9uYW1lIGdlbmVyYXRpb25cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVSYW5kb21JZCgpOiBzdHJpbmcge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KSArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgbGFiZWwgdG8gYSB2YWxpZCBwYXRoL25hbWVcbiAqL1xuZnVuY3Rpb24gbGFiZWxUb1BhdGgobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsYWJlbFxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL1teYS16MC05XFxzXS9nLCAnJykgLy8gUmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVyc1xuICAgIC5yZXBsYWNlKC9cXHMrL2csICdfJykgLy8gUmVwbGFjZSBzcGFjZXMgd2l0aCB1bmRlcnNjb3Jlc1xuICAgIC5zdWJzdHJpbmcoMCwgNTApOyAvLyBMaW1pdCBsZW5ndGhcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgcGF0aCBmb3IgdmFsdWUgd2lkZ2V0cyBiYXNlZCBvbiBoaWVyYXJjaHlcbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVWYWx1ZVdpZGdldFBhdGgod2lkZ2V0TmFtZT86IHN0cmluZywgZm9ybUZpZWxkTmFtZT86IHN0cmluZywgZm9ybUZpZWxkTGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBQcmlvcml0eTogd2lkZ2V0IG5hbWUgLT4gZm9ybSBmaWVsZCBuYW1lIC0+IGdlbmVyYXRlZCBmcm9tIGxhYmVsIC0+IHJhbmRvbVxuICBpZiAod2lkZ2V0TmFtZSkge1xuICAgIHJldHVybiB3aWRnZXROYW1lO1xuICB9XG5cbiAgaWYgKGZvcm1GaWVsZE5hbWUpIHtcbiAgICByZXR1cm4gZm9ybUZpZWxkTmFtZTtcbiAgfVxuXG4gIGlmIChmb3JtRmllbGRMYWJlbCkge1xuICAgIHJldHVybiBsYWJlbFRvUGF0aChmb3JtRmllbGRMYWJlbCk7XG4gIH1cblxuICByZXR1cm4gZ2VuZXJhdGVSYW5kb21JZCgpO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBTZXJ2aWNlIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgQVhQTGF5b3V0QnVpbGRlclNlcnZpY2Uge1xuICBwcml2YXRlIHBvcHVwU2VydmljZSA9IGluamVjdChBWFBvcHVwU2VydmljZSk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBsYXlvdXQgYnVpbGRlclxuICAgKi9cbiAgY3JlYXRlKCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICByZXR1cm4gbmV3IExheW91dEJ1aWxkZXIodGhpcy5wb3B1cFNlcnZpY2UpO1xuICB9XG59XG5cbi8vI2VuZHJlZ2lvblxuXG4vLyNyZWdpb24gLS0tLSAgIExheW91dCBCdWlsZGVyIEltcGxlbWVudGF0aW9uICAgLS0tLVxuXG4vKipcbiAqIE1haW4gbGF5b3V0IGJ1aWxkZXIgLSBTaW5nbGUgUmVzcG9uc2liaWxpdHk6IExheW91dCBvcmNoZXN0cmF0aW9uXG4gKiBPcGVuL0Nsb3NlZDogRXh0ZW5zaWJsZSB0aHJvdWdoIGNvbnRhaW5lciBkZWxlZ2F0ZXNcbiAqL1xuY2xhc3MgTGF5b3V0QnVpbGRlciBpbXBsZW1lbnRzIElMYXlvdXRCdWlsZGVyIHtcbiAgcHJpdmF0ZSByb290OiBBWFBXaWRnZXROb2RlID0ge1xuICAgIGNoaWxkcmVuOiBbXSxcbiAgICBtb2RlOiAnZWRpdCcsXG4gICAgdHlwZTogJ2ZsZXgtbGF5b3V0JyxcbiAgfTtcblxuICBwcml2YXRlIGluaGVyaXRhbmNlQ29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0ID0ge1xuICAgIG1vZGU6ICdlZGl0JyxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBvcHVwU2VydmljZTogQVhQb3B1cFNlcnZpY2UpIHt9XG5cbiAgLy8gUHJlZGVmaW5lZCBsYXlvdXQgY29udGFpbmVycyBhdCByb290IGxldmVsIC0gZGVsZWdhdGUgcGF0dGVybiByZXF1aXJlZFxuICBncmlkKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IEdyaWRDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgLy90aGlzLnN0YXRlLmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICB0aGlzLnJvb3QgPSBjb250YWluZXIuYnVpbGQoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZsZXgoZGVsZWdhdGU6IChjb250YWluZXI6IElGbGV4Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRmxleENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLnJvb3QuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcGFuZWwoZGVsZWdhdGU6IChjb250YWluZXI6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IFBhbmVsQ29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMucm9vdC5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwYWdlKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IFBhZ2VDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5yb290LmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRhYnNldChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IFRhYnNldENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLnJvb3QuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZmllbGRzZXQoZGVsZWdhdGU6IChjb250YWluZXI6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IEZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMucm9vdC5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaWFsb2coZGVsZWdhdGU6IChjb250YWluZXI6IElEaWFsb2dCdWlsZGVyKSA9PiB2b2lkKTogSURpYWxvZ0J1aWxkZXIge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBEaWFsb2dDb250YWluZXJCdWlsZGVyKHRoaXMucG9wdXBTZXJ2aWNlKTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICBmb3JtRmllbGQobGFiZWw6IHN0cmluZywgZGVsZWdhdGU/OiAoZmllbGQ6IElGb3JtRmllbGRCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXIge1xuICAgIGNvbnN0IGZpZWxkID0gbmV3IEZvcm1GaWVsZEJ1aWxkZXIobGFiZWwpO1xuICAgIGZpZWxkLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoZmllbGQpO1xuICAgIH1cbiAgICB0aGlzLnJvb3QuY2hpbGRyZW4hLnB1c2goZmllbGQuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBidWlsZCgpOiBBWFBXaWRnZXROb2RlIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdGhpcy5yb290LnR5cGUsXG4gICAgICBjaGlsZHJlbjogdGhpcy5yb290LmNoaWxkcmVuLFxuICAgICAgbW9kZTogdGhpcy5yb290Lm1vZGUsXG4gICAgfTtcbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBDb250YWluZXIgQnVpbGRlciBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuLyoqXG4gKiBBYnN0cmFjdCBiYXNlIGNvbnRhaW5lciBidWlsZGVyIC0gT3Blbi9DbG9zZWQgUHJpbmNpcGxlXG4gKiBQcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgYWxsIGNvbnRhaW5lciB0eXBlc1xuICovXG5hYnN0cmFjdCBjbGFzcyBCYXNlQ29udGFpbmVyQnVpbGRlciB7XG4gIHByb3RlY3RlZCBjb250YWluZXJTdGF0ZTogTGF5b3V0QnVpbGRlclN0YXRlID0ge1xuICAgIG1vZGU6ICdlZGl0JyxcbiAgICB0eXBlOiAnZmxleC1sYXlvdXQnLFxuICAgIGNoaWxkcmVuOiBbXSxcbiAgfTtcblxuICBwcm90ZWN0ZWQgaW5oZXJpdGFuY2VDb250ZXh0OiBJbmhlcml0YW5jZUNvbnRleHQgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihjb250YWluZXJUeXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLnR5cGUgPSBjb250YWluZXJUeXBlO1xuICB9XG5cbiAgLy8gQmFzZSBtZXRob2RzIHNoYXJlZCBieSBhbGwgY29udGFpbmVyc1xuICBwcm90ZWN0ZWQgZW5zdXJlQ2hpbGRyZW4oKTogdm9pZCB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiA9IHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4gfHwgW107XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkV2lkZ2V0PFQ+KHR5cGU6IHN0cmluZywgb3B0aW9ucz86IFQpOiB0aGlzIHtcbiAgICBjb25zdCBjaGlsZCA9IG5ldyBXaWRnZXRCdWlsZGVyKCk7XG4gICAgY2hpbGQudHlwZSh0eXBlKTtcblxuICAgIC8vIEZvciB2YWx1ZSB3aWRnZXRzLCBlbnN1cmUgcGF0aCBpcyBwcm92aWRlZFxuICAgIGNvbnN0IHdpZGdldE9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuICAgIGNvbnN0IHBhdGggPSAod2lkZ2V0T3B0aW9ucyBhcyBhbnkpLnBhdGg7XG4gICAgY29uc3QgbmFtZSA9ICh3aWRnZXRPcHRpb25zIGFzIGFueSkubmFtZTtcblxuICAgIGlmICh0aGlzLmlzVmFsdWVXaWRnZXQodHlwZSkgJiYgIXBhdGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVmFsdWUgd2lkZ2V0ICcke3R5cGV9JyByZXF1aXJlcyBhICdwYXRoJyBwcm9wZXJ0eWApO1xuICAgIH1cblxuICAgIC8vIFNldCBuYW1lIGFuZCBwYXRoIGluIHdpZGdldCBzdGF0ZSwgbm90IG9wdGlvbnNcbiAgICBpZiAobmFtZSkge1xuICAgICAgY2hpbGQubmFtZShuYW1lKTtcbiAgICB9XG4gICAgaWYgKHBhdGgpIHtcbiAgICAgIGNoaWxkLnBhdGgocGF0aCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIG5hbWUgYW5kIHBhdGggZnJvbSBvcHRpb25zXG4gICAgY29uc3QgeyBuYW1lOiBfLCBwYXRoOiBfXywgLi4uY2xlYW5PcHRpb25zIH0gPSB3aWRnZXRPcHRpb25zIGFzIGFueTtcbiAgICBjaGlsZC5vcHRpb25zKGNsZWFuT3B0aW9ucyk7XG4gICAgY2hpbGQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgdGhpcy5lbnN1cmVDaGlsZHJlbigpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4hLnB1c2goY2hpbGQuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsdWVXaWRnZXQodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWVXaWRnZXRUeXBlcyA9IFtcbiAgICAgICd0ZXh0LWVkaXRvcicsXG4gICAgICAnbGFyZ2UtdGV4dC1lZGl0b3InLFxuICAgICAgJ3JpY2gtdGV4dC1lZGl0b3InLFxuICAgICAgJ3Bhc3N3b3JkLWVkaXRvcicsXG4gICAgICAnbnVtYmVyLWVkaXRvcicsXG4gICAgICAnc2VsZWN0LWVkaXRvcicsXG4gICAgICAnbG9va3VwLWVkaXRvcicsXG4gICAgICAnc2VsZWN0aW9uLWxpc3QtZWRpdG9yJyxcbiAgICAgICdkYXRlLXRpbWUtZWRpdG9yJyxcbiAgICAgICd0b2dnbGUtZWRpdG9yJyxcbiAgICAgICdjb2xvci1lZGl0b3InLFxuICAgIF07XG4gICAgcmV0dXJuIHZhbHVlV2lkZ2V0VHlwZXMuaW5jbHVkZXModHlwZSk7XG4gIH1cblxuICBidWlsZCgpOiBBWFBXaWRnZXROb2RlIHtcbiAgICBjb25zdCByZXN1bHQ6IEFYUFdpZGdldE5vZGUgPSB7XG4gICAgICB0eXBlOiB0aGlzLmNvbnRhaW5lclN0YXRlLnR5cGUsXG4gICAgICBjaGlsZHJlbjogdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbixcbiAgICAgIG9wdGlvbnM6IHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyxcbiAgICAgIG1vZGU6IHRoaXMuY29udGFpbmVyU3RhdGUubW9kZSxcbiAgICAgIHZpc2libGU6IHRoaXMuY29udGFpbmVyU3RhdGUudmlzaWJsZSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIG5hbWUgd2l0aCBfZm9ybV9maWVsZCBzdWZmaXggZm9yIGZvcm0gZmllbGRzXG4gICAgaWYgKHRoaXMuY29udGFpbmVyU3RhdGUudHlwZSA9PT0gJ2Zvcm0tZmllbGQnKSB7XG4gICAgICBpZiAodGhpcy5jb250YWluZXJTdGF0ZS5uYW1lKSB7XG4gICAgICAgIHJlc3VsdC5uYW1lID0gdGhpcy5jb250YWluZXJTdGF0ZS5uYW1lO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnM/LlsnbGFiZWwnXSkge1xuICAgICAgICByZXN1bHQubmFtZSA9IGxhYmVsVG9QYXRoKHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9uc1snbGFiZWwnXSkgKyAnX2Zvcm1fZmllbGQnO1xuICAgICAgfVxuICAgICAgLy8gRm9ybSBmaWVsZHMgZG9uJ3QgaGF2ZSBwYXRoXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyIGNvbnRhaW5lcnMgY2FuIGhhdmUgbmFtZSBhbmQgcGF0aFxuICAgICAgaWYgKHRoaXMuY29udGFpbmVyU3RhdGUubmFtZSkge1xuICAgICAgICByZXN1bHQubmFtZSA9IHRoaXMuY29udGFpbmVyU3RhdGUubmFtZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lclN0YXRlLnBhdGgpIHtcbiAgICAgICAgcmVzdWx0LnBhdGggPSB0aGlzLmNvbnRhaW5lclN0YXRlLnBhdGg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250YWluZXJTdGF0ZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQuZGVmYXVsdFZhbHVlID0gdGhpcy5jb250YWluZXJTdGF0ZS5kZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY29udGFpbmVyIGJ1aWxkZXIgbWl4aW4gLSBJbnRlcmZhY2UgU2VncmVnYXRpb24gUHJpbmNpcGxlXG4gKiBQcm92aWRlcyBjb21tb24gY29udGFpbmVyIG9wZXJhdGlvbnNcbiAqL1xuYWJzdHJhY3QgY2xhc3MgQmFzZUNvbnRhaW5lck1peGluPFRDb250YWluZXI+IGV4dGVuZHMgQmFzZUNvbnRhaW5lckJ1aWxkZXIge1xuICBuYW1lKG5hbWU6IHN0cmluZyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUubmFtZSA9IG5hbWU7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG4gIHBhdGgocGF0aDogc3RyaW5nKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5wYXRoID0gcGF0aDtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBtb2RlKG1vZGU6IEFYUFdpZGdldFJlbmRlck1vZGUpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0Lm1vZGUgPSBtb2RlO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIHZpc2libGUoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogVENvbnRhaW5lciB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMpIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9uc1sndmlzaWJsZSddID0gY29uZGl0aW9uO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0LnZpc2libGUgPSBjb25kaXRpb247XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgZGlzYWJsZWQoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogVENvbnRhaW5lciB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMpIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9uc1snZGlzYWJsZWQnXSA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5kaXNhYmxlZCA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICByZWFkb25seShjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBUQ29udGFpbmVyIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucykgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zID0ge307XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zWydyZWFkb25seSddID0gY29uZGl0aW9uO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0LnJlYWRvbmx5ID0gY29uZGl0aW9uO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBUQ29udGFpbmVyIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucykgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zID0ge307XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zWydkaXJlY3Rpb24nXSA9IGRpcmVjdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgLy8gSW5oZXJpdGFuY2UgY29udGV4dCBtZXRob2RzXG4gIHdpdGhJbmhlcml0YW5jZUNvbnRleHQoY29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0KTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5pbmhlcml0YW5jZUNvbnRleHQgPSBtZXJnZUluaGVyaXRhbmNlQ29udGV4dChjb250ZXh0KTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBnZXRJbmhlcml0YW5jZUNvbnRleHQoKTogSW5oZXJpdGFuY2VDb250ZXh0IHtcbiAgICByZXR1cm4geyAuLi50aGlzLmluaGVyaXRhbmNlQ29udGV4dCB9O1xuICB9XG59XG5cbi8qKlxuICogTGF5b3V0IGNvbnRhaW5lciBtaXhpbiAtIEludGVyZmFjZSBTZWdyZWdhdGlvbiBQcmluY2lwbGVcbiAqIFByb3ZpZGVzIGxheW91dC1zcGVjaWZpYyBvcGVyYXRpb25zXG4gKi9cbmFic3RyYWN0IGNsYXNzIExheW91dENvbnRhaW5lck1peGluPFRDb250YWluZXI+IGV4dGVuZHMgQmFzZUNvbnRhaW5lck1peGluPFRDb250YWluZXI+IHtcbiAgbGF5b3V0KHZhbHVlOiBQYXJ0aWFsPEFYUEdyaWRMYXlvdXRPcHRpb25zPiB8IG51bWJlcik6IFRDb250YWluZXIge1xuICAgIC8vIExheW91dCBoYW5kbGluZyBjYW4gYmUgYWRkZWQgaGVyZSBpZiBuZWVkZWRcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGlsZCBjb250YWluZXIgbWl4aW4gLSBJbnRlcmZhY2UgU2VncmVnYXRpb24gUHJpbmNpcGxlXG4gKiBQcm92aWRlcyBjaGlsZCBjb250YWluZXIgbWFuYWdlbWVudFxuICovXG5hYnN0cmFjdCBjbGFzcyBDaGlsZENvbnRhaW5lck1peGluPFRDb250YWluZXI+IGV4dGVuZHMgTGF5b3V0Q29udGFpbmVyTWl4aW48VENvbnRhaW5lcj4ge1xuICBncmlkKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgR3JpZENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgZmxleChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSUZsZXhDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IEZsZXhDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGlsZHJlbigpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIHBhbmVsKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJUGFuZWxDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IFBhbmVsQ29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBwYWdlKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgUGFnZUNvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgdGFic2V0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXIge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBUYWJzZXRDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGlsZHJlbigpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGZpZWxkc2V0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IEZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBkaWFsb2coZGVsZWdhdGU6IChjb250YWluZXI6IElEaWFsb2dCdWlsZGVyKSA9PiB2b2lkKTogSURpYWxvZ0J1aWxkZXIge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBEaWFsb2dDb250YWluZXJCdWlsZGVyKCk7IC8vIFdpbGwgdXNlIGluamVjdCgpIGZhbGxiYWNrXG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29udGFpbmVyO1xuICB9XG5cbiAgZm9ybUZpZWxkKGxhYmVsOiBzdHJpbmcsIGRlbGVnYXRlPzogKGZpZWxkOiBJRm9ybUZpZWxkQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXIge1xuICAgIGNvbnN0IGZpZWxkID0gbmV3IEZvcm1GaWVsZEJ1aWxkZXIobGFiZWwpO1xuICAgIGZpZWxkLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoZmllbGQpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChmaWVsZC5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBXaWRnZXQgY29udGFpbmVyIG1peGluIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uIFByaW5jaXBsZVxuICogUHJvdmlkZXMgd2lkZ2V0IGNyZWF0aW9uIG9wZXJhdGlvbnNcbiAqL1xuYWJzdHJhY3QgY2xhc3MgV2lkZ2V0Q29udGFpbmVyTWl4aW48VENvbnRhaW5lcj4gZXh0ZW5kcyBDaGlsZENvbnRhaW5lck1peGluPFRDb250YWluZXI+IHtcbiAgdGV4dEJveChvcHRpb25zPzogVGV4dEJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgndGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBsYXJnZVRleHRCb3gob3B0aW9ucz86IExhcmdlVGV4dEJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgnbGFyZ2UtdGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICByaWNoVGV4dChvcHRpb25zPzogUmljaFRleHRPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ3JpY2gtdGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBwYXNzd29yZEJveChvcHRpb25zPzogUGFzc3dvcmRCb3hPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ3Bhc3N3b3JkLWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIG51bWJlckJveChvcHRpb25zPzogTnVtYmVyQm94T3B0aW9ucyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuYWRkV2lkZ2V0KCdudW1iZXItZWRpdG9yJywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgc2VsZWN0Qm94KG9wdGlvbnM6IFNlbGVjdEJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgnc2VsZWN0LWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGxvb2t1cEJveChvcHRpb25zOiBMb29rdXBCb3hPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ2xvb2t1cC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBzZWxlY3Rpb25MaXN0KG9wdGlvbnM6IFNlbGVjdGlvbkxpc3RPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ3NlbGVjdGlvbi1saXN0LWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGRhdGVUaW1lQm94KG9wdGlvbnM/OiBEYXRlVGltZUJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgnZGF0ZS10aW1lLWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIHRvZ2dsZVN3aXRjaChvcHRpb25zPzogVG9nZ2xlU3dpdGNoT3B0aW9ucyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuYWRkV2lkZ2V0KCd0b2dnbGUtZWRpdG9yJywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgY29sb3JCb3gob3B0aW9ucz86IENvbG9yQm94T3B0aW9ucyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuYWRkV2lkZ2V0KCdjb2xvci1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBsaXN0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJTGlzdFdpZGdldEJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgTGlzdFdpZGdldEJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgY3VzdG9tV2lkZ2V0PFQ+KHR5cGU6IHN0cmluZywgb3B0aW9ucz86IFQpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldDxUPih0eXBlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBGbGV4IENvbnRhaW5lciBCdWlsZGVyIC0gTGlza292IFN1YnN0aXR1dGlvbiBQcmluY2lwbGVcbiAqIEV4dGVuZHMgV2lkZ2V0Q29udGFpbmVyTWl4aW4gdG8gaW5oZXJpdCBhbGwgY29tbW9uIGZ1bmN0aW9uYWxpdHlcbiAqL1xuY2xhc3MgRmxleENvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbjxJRmxleENvbnRhaW5lckJ1aWxkZXI+IGltcGxlbWVudHMgSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2ZsZXgtbGF5b3V0Jyk7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUEZsZXhDb250YWluZXJPcHRpb25zKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMgPSB7IC4uLnRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSW5kaXZpZHVhbCBmbHVlbnQgbWV0aG9kcyBmb3IgRmxleFxuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiAncm93JyB8ICdjb2x1bW4nIHwgJ3Jvdy1yZXZlcnNlJyB8ICdjb2x1bW4tcmV2ZXJzZScpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBmbGV4RGlyZWN0aW9uOiBkaXJlY3Rpb24gfSk7XG4gIH1cblxuICBzZXRXcmFwKHdyYXA6ICdub3dyYXAnIHwgJ3dyYXAnIHwgJ3dyYXAtcmV2ZXJzZScpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBmbGV4V3JhcDogd3JhcCB9KTtcbiAgfVxuXG4gIHNldEp1c3RpZnlDb250ZW50KFxuICAgIGp1c3RpZnk6ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdzcGFjZS1iZXR3ZWVuJyB8ICdzcGFjZS1hcm91bmQnIHwgJ3NwYWNlLWV2ZW5seScsXG4gICk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGp1c3RpZnlDb250ZW50OiBqdXN0aWZ5IH0pO1xuICB9XG5cbiAgc2V0QWxpZ25JdGVtcyhhbGlnbjogJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ2Jhc2VsaW5lJyB8ICdzdHJldGNoJyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGFsaWduSXRlbXM6IGFsaWduIH0pO1xuICB9XG5cbiAgc2V0R2FwKGdhcDogc3RyaW5nKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ2FwIH0pO1xuICB9XG5cbiAgc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yOiBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yIH0pO1xuICB9XG5cbiAgc2V0UGFkZGluZyhwYWRkaW5nOiBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzcGFjaW5nOiB7IHBhZGRpbmcgfSB9KTtcbiAgfVxuXG4gIHNldE1hcmdpbihtYXJnaW46IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNwYWNpbmc6IHsgbWFyZ2luIH0gfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHcmlkIENvbnRhaW5lciBCdWlsZGVyIC0gTGlza292IFN1YnN0aXR1dGlvbiBQcmluY2lwbGVcbiAqIEV4dGVuZHMgV2lkZ2V0Q29udGFpbmVyTWl4aW4gdG8gaW5oZXJpdCBhbGwgY29tbW9uIGZ1bmN0aW9uYWxpdHlcbiAqL1xuY2xhc3MgR3JpZENvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbjxJR3JpZENvbnRhaW5lckJ1aWxkZXI+IGltcGxlbWVudHMgSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2dyaWQtbGF5b3V0Jyk7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUEdyaWRDb250YWluZXJPcHRpb25zKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMgPSB7IC4uLnRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSW5kaXZpZHVhbCBmbHVlbnQgbWV0aG9kcyBmb3IgR3JpZFxuICBzZXRDb2x1bW5zKGNvbHVtbnM6IG51bWJlcik6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGdyaWQ6IHsgZGVmYXVsdDogeyBjb2x1bW5zIH0gfSB9KTtcbiAgfVxuXG4gIHNldFJvd3Mocm93czogbnVtYmVyKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IHJvd3MgfSB9IH0pO1xuICB9XG5cbiAgc2V0R2FwKGdhcDogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IGdhcCB9IH0gfSk7XG4gIH1cblxuICBzZXRKdXN0aWZ5SXRlbXMoanVzdGlmeTogJ3N0YXJ0JyB8ICdlbmQnIHwgJ2NlbnRlcicgfCAnc3RyZXRjaCcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBncmlkOiB7IGRlZmF1bHQ6IHsganVzdGlmeUl0ZW1zOiBqdXN0aWZ5IH0gfSB9KTtcbiAgfVxuXG4gIHNldEFsaWduSXRlbXMoYWxpZ246ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInIHwgJ3N0cmV0Y2gnKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IGFsaWduSXRlbXM6IGFsaWduIH0gfSB9KTtcbiAgfVxuXG4gIHNldEF1dG9GbG93KGZsb3c6ICdyb3cnIHwgJ2NvbHVtbicgfCAncm93IGRlbnNlJyB8ICdjb2x1bW4gZGVuc2UnKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IGF1dG9GbG93OiBmbG93IH0gfSB9KTtcbiAgfVxuXG4gIHNldEJhY2tncm91bmRDb2xvcihjb2xvcjogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgYmFja2dyb3VuZENvbG9yOiBjb2xvciB9KTtcbiAgfVxuXG4gIHNldFBhZGRpbmcocGFkZGluZzogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgc3BhY2luZzogeyBwYWRkaW5nIH0gfSk7XG4gIH1cblxuICBzZXRNYXJnaW4obWFyZ2luOiBzdHJpbmcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzcGFjaW5nOiB7IG1hcmdpbiB9IH0pO1xuICB9XG59XG5cbi8qKlxuICogUGFuZWwgQ29udGFpbmVyIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogRXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbiB0byBpbmhlcml0IGFsbCBjb21tb24gZnVuY3Rpb25hbGl0eVxuICovXG5jbGFzcyBQYW5lbENvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbjxJUGFuZWxDb250YWluZXJCdWlsZGVyPiBpbXBsZW1lbnRzIElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigncGFuZWwtbGF5b3V0Jyk7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUFBhbmVsQ29udGFpbmVyT3B0aW9ucyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBQYW5lbFxuICBzZXRDYXB0aW9uKGNhcHRpb246IHN0cmluZyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBjYXB0aW9uIH0pO1xuICB9XG5cbiAgc2V0SWNvbihpY29uOiBzdHJpbmcpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgaWNvbiB9KTtcbiAgfVxuXG4gIHNldExvb2sobG9vazogJ3NvbGlkJyB8ICdmaWxsJyB8ICdvdXRsaW5lJyB8ICdmbGF0JyB8ICdub25lJyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBsb29rIH0pO1xuICB9XG5cbiAgc2V0U2hvd0hlYWRlcihzaG93OiBib29sZWFuKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dIZWFkZXI6IHNob3cgfSk7XG4gIH1cblxuICBzZXRDb2xsYXBzZWQoY29sbGFwc2VkOiBib29sZWFuKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNvbGxhcHNlZCB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFBhZ2UgQ29udGFpbmVyIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogRXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbiB0byBpbmhlcml0IGFsbCBjb21tb24gZnVuY3Rpb25hbGl0eVxuICovXG5jbGFzcyBQYWdlQ29udGFpbmVyQnVpbGRlciBleHRlbmRzIFdpZGdldENvbnRhaW5lck1peGluPElQYWdlQ29udGFpbmVyQnVpbGRlcj4gaW1wbGVtZW50cyBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigncGFnZS1sYXlvdXQnKTtcbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQUGFnZUNvbnRhaW5lck9wdGlvbnMpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBQYWdlXG4gIHNldEJhY2tncm91bmRDb2xvcihjb2xvcjogc3RyaW5nKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgYmFja2dyb3VuZENvbG9yOiBjb2xvciB9KTtcbiAgfVxuXG4gIHNldFRoZW1lKHRoZW1lOiB7IGlkOiBzdHJpbmcgfSk6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHRoZW1lIH0pO1xuICB9XG5cbiAgc2V0SGFzSGVhZGVyKGhhc0hlYWRlcjogYm9vbGVhbik6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGhhc0hlYWRlciB9KTtcbiAgfVxuXG4gIHNldEhhc0Zvb3RlcihoYXNGb290ZXI6IGJvb2xlYW4pOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBoYXNGb290ZXIgfSk7XG4gIH1cblxuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiBzdHJpbmcpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBkaXJlY3Rpb24gfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWJzZXQgQ29udGFpbmVyIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogRXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbiB0byBpbmhlcml0IGFsbCBjb21tb24gZnVuY3Rpb25hbGl0eVxuICovXG5jbGFzcyBUYWJzZXRDb250YWluZXJCdWlsZGVyIGV4dGVuZHMgV2lkZ2V0Q29udGFpbmVyTWl4aW48SVRhYnNldENvbnRhaW5lckJ1aWxkZXI+IGltcGxlbWVudHMgSVRhYnNldENvbnRhaW5lckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigndGFic2V0LWxheW91dCcpO1xuICB9XG5cbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBUYWJzZXRDb250YWluZXJPcHRpb25zKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBUYWJzZXRcbiAgc2V0TG9vayhsb29rOiAnd2l0aC1saW5lJyB8ICd3aXRoLWxpbmUtY29sb3InIHwgJ3BpbGxzJyB8ICdwaWxscy1jb2xvcicpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGxvb2sgfSk7XG4gIH1cblxuICBzZXRPcmllbnRhdGlvbihvcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgb3JpZW50YXRpb24gfSk7XG4gIH1cblxuICBzZXRBY3RpdmVJbmRleChpbmRleDogbnVtYmVyKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBhY3RpdmVJbmRleDogaW5kZXggfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3JtIEZpZWxkIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogQ2FuIG9ubHkgY29udGFpbiBPTkUgd2lkZ2V0IHdpdGggYXV0b21hdGljIHBhdGggZ2VuZXJhdGlvblxuICovXG5jbGFzcyBGb3JtRmllbGRCdWlsZGVyIGV4dGVuZHMgTGF5b3V0Q29udGFpbmVyTWl4aW48SUZvcm1GaWVsZEJ1aWxkZXI+IGltcGxlbWVudHMgSUZvcm1GaWVsZEJ1aWxkZXIge1xuICBwcml2YXRlIGhhc1dpZGdldCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGxhYmVsOiBzdHJpbmcpIHtcbiAgICBzdXBlcignZm9ybS1maWVsZCcpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgbGFiZWwsIHNob3dMYWJlbDogdHJ1ZSB9O1xuICB9XG5cbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBGb3JtRmllbGRPcHRpb25zKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRMYWJlbChsYWJlbDogc3RyaW5nKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBsYWJlbCB9KTtcbiAgfVxuXG4gIHNldFNob3dMYWJlbChzaG93TGFiZWw6IGJvb2xlYW4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dMYWJlbCB9KTtcbiAgfVxuXG4gIC8vIFNpbmdsZSB3aWRnZXQgbWV0aG9kcyB3aXRoIGF1dG9tYXRpYyBwYXRoIGdlbmVyYXRpb25cbiAgcHJpdmF0ZSBhZGRTaW5nbGVXaWRnZXQ8VD4odHlwZTogc3RyaW5nLCBvcHRpb25zPzogT21pdDxULCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIGlmICh0aGlzLmhhc1dpZGdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3JtIGZpZWxkIGNhbiBvbmx5IGNvbnRhaW4gb25lIHdpZGdldCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1GaWVsZE5hbWUgPSB0aGlzLmNvbnRhaW5lclN0YXRlLm5hbWU7XG4gICAgY29uc3QgZm9ybUZpZWxkUGF0aCA9IHRoaXMuY29udGFpbmVyU3RhdGUucGF0aDsgLy8gR2V0IGV4cGxpY2l0IHBhdGggZnJvbSBmb3JtIGZpZWxkXG4gICAgY29uc3QgZm9ybUZpZWxkTGFiZWwgPSB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnM/LlsnbGFiZWwnXTtcbiAgICBjb25zdCB3aWRnZXROYW1lID0gKG9wdGlvbnMgYXMgYW55KT8ubmFtZTtcblxuICAgIC8vIEdlbmVyYXRlIHdpZGdldCBwYXRoOiBleHBsaWNpdCBwYXRoIC0+IHdpZGdldCBuYW1lIC0+IGZvcm0gZmllbGQgbmFtZSAtPiBsYWJlbCAtPiByYW5kb21cbiAgICBsZXQgd2lkZ2V0UGF0aDogc3RyaW5nO1xuICAgIGlmIChmb3JtRmllbGRQYXRoKSB7XG4gICAgICB3aWRnZXRQYXRoID0gZm9ybUZpZWxkUGF0aDsgLy8gVXNlIGV4cGxpY2l0IGZvcm0gZmllbGQgcGF0aCBmaXJzdFxuICAgIH0gZWxzZSBpZiAod2lkZ2V0TmFtZSkge1xuICAgICAgd2lkZ2V0UGF0aCA9IHdpZGdldE5hbWU7XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGROYW1lKSB7XG4gICAgICB3aWRnZXRQYXRoID0gZm9ybUZpZWxkTmFtZTsgLy8gVXNlIGZvcm0gZmllbGQgbmFtZSBhcyBkZWZhdWx0IHBhdGhcbiAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZExhYmVsKSB7XG4gICAgICB3aWRnZXRQYXRoID0gbGFiZWxUb1BhdGgoZm9ybUZpZWxkTGFiZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWRnZXRQYXRoID0gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsTmFtZSA9IHdpZGdldE5hbWUgfHwgZm9ybUZpZWxkTmFtZSB8fCB3aWRnZXRQYXRoO1xuXG4gICAgY29uc3QgY2hpbGQgPSBuZXcgV2lkZ2V0QnVpbGRlcigpO1xuICAgIGNoaWxkLnR5cGUodHlwZSk7XG4gICAgY2hpbGQubmFtZShmaW5hbE5hbWUpO1xuICAgIGNoaWxkLnBhdGgod2lkZ2V0UGF0aCk7XG5cbiAgICAvLyBSZW1vdmUgbmFtZSBmcm9tIG9wdGlvbnMgc2luY2UgaXQncyBub3cgaW4gc3RhdGVcbiAgICBjb25zdCB7IG5hbWU6IF8sIC4uLmNsZWFuT3B0aW9ucyB9ID0gKG9wdGlvbnMgfHwge30pIGFzIGFueTtcbiAgICBjaGlsZC5vcHRpb25zKGNsZWFuT3B0aW9ucyk7XG4gICAgY2hpbGQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG5cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjaGlsZC5idWlsZCgpKTtcbiAgICB0aGlzLmhhc1dpZGdldCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRleHRCb3gob3B0aW9ucz86IE9taXQ8VGV4dEJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PFRleHRCb3hPcHRpb25zPigndGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxhcmdlVGV4dEJveChvcHRpb25zPzogT21pdDxMYXJnZVRleHRCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxMYXJnZVRleHRCb3hPcHRpb25zPignbGFyZ2UtdGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJpY2hUZXh0KG9wdGlvbnM/OiBPbWl0PFJpY2hUZXh0T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTaW5nbGVXaWRnZXQ8UmljaFRleHRPcHRpb25zPigncmljaC10ZXh0LWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgcGFzc3dvcmRCb3gob3B0aW9ucz86IE9taXQ8UGFzc3dvcmRCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxQYXNzd29yZEJveE9wdGlvbnM+KCdwYXNzd29yZC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIG51bWJlckJveChvcHRpb25zPzogT21pdDxOdW1iZXJCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxOdW1iZXJCb3hPcHRpb25zPignbnVtYmVyLWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgc2VsZWN0Qm94KG9wdGlvbnM6IE9taXQ8U2VsZWN0Qm94T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTaW5nbGVXaWRnZXQ8U2VsZWN0Qm94T3B0aW9ucz4oJ3NlbGVjdC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxvb2t1cEJveChvcHRpb25zOiBPbWl0PExvb2t1cEJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PExvb2t1cEJveE9wdGlvbnM+KCdsb29rdXAtZWRpdG9yJywgb3B0aW9ucyk7XG4gIH1cblxuICBzZWxlY3Rpb25MaXN0KG9wdGlvbnM6IE9taXQ8U2VsZWN0aW9uTGlzdE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PFNlbGVjdGlvbkxpc3RPcHRpb25zPignc2VsZWN0aW9uLWxpc3QtZWRpdG9yJywgb3B0aW9ucyk7XG4gIH1cblxuICBkYXRlVGltZUJveChvcHRpb25zPzogT21pdDxEYXRlVGltZUJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PERhdGVUaW1lQm94T3B0aW9ucz4oJ2RhdGUtdGltZS1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIHRvZ2dsZVN3aXRjaChvcHRpb25zPzogT21pdDxUb2dnbGVTd2l0Y2hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxUb2dnbGVTd2l0Y2hPcHRpb25zPigndG9nZ2xlLWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgY29sb3JCb3gob3B0aW9ucz86IE9taXQ8Q29sb3JCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxDb2xvckJveE9wdGlvbnM+KCdjb2xvci1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGN1c3RvbVdpZGdldDxUPih0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFQsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PFQ+KHR5cGUsIG9wdGlvbnMpO1xuICB9XG59XG5cbi8qKlxuICogRmllbGRzZXQgQ29udGFpbmVyIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogRXh0ZW5kcyBMYXlvdXRDb250YWluZXJNaXhpbiB0byBpbmhlcml0IGxheW91dCBmdW5jdGlvbmFsaXR5XG4gKiBTcGVjaWFsaXplZCBmb3IgZm9ybSBmaWVsZHMgb25seVxuICovXG5jbGFzcyBGaWVsZHNldENvbnRhaW5lckJ1aWxkZXJcbiAgZXh0ZW5kcyBMYXlvdXRDb250YWluZXJNaXhpbjxJRmllbGRzZXRDb250YWluZXJCdWlsZGVyPlxuICBpbXBsZW1lbnRzIElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXJcbntcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2ZpZWxkc2V0LWxheW91dCcpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBGaWVsZHNldENvbnRhaW5lck9wdGlvbnMpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMgPSB7IC4uLnRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSW5kaXZpZHVhbCBmbHVlbnQgbWV0aG9kcyBmb3IgRmllbGRzZXRcbiAgc2V0VGl0bGUodGl0bGU6IHN0cmluZyk6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyB0aXRsZSB9KTtcbiAgfVxuXG4gIHNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZGVzY3JpcHRpb24gfSk7XG4gIH1cblxuICBzZXRJY29uKGljb246IHN0cmluZyk6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBpY29uIH0pO1xuICB9XG5cbiAgc2V0Q29sbGFwc2libGUoY29sbGFwc2libGU6IGJvb2xlYW4pOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgY29sbGFwc2libGUgfSk7XG4gIH1cblxuICBzZXRJc09wZW4oaXNPcGVuOiBib29sZWFuKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGlzT3BlbiB9KTtcbiAgfVxuXG4gIHNldExvb2sobG9vazogJ2ZpZWxkc2V0JyB8ICdjYXJkJyB8ICdncm91cCcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgbG9vayB9KTtcbiAgfVxuXG4gIHNldFNob3dIZWFkZXIoc2hvd0hlYWRlcjogYm9vbGVhbik6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzaG93SGVhZGVyIH0pO1xuICB9XG5cbiAgc2V0Q29scyhjb2xzOiBudW1iZXIpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgY29scyB9KTtcbiAgfVxuXG4gIC8vIE9ubHkgZm9ybSBmaWVsZHMgYXJlIGFsbG93ZWQgaW4gZmllbGRzZXRcbiAgZm9ybUZpZWxkKGxhYmVsOiBzdHJpbmcsIGRlbGVnYXRlPzogKGZpZWxkOiBJRm9ybUZpZWxkQnVpbGRlcikgPT4gdm9pZCk6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIGNvbnN0IGZpZWxkID0gbmV3IEZvcm1GaWVsZEJ1aWxkZXIobGFiZWwpO1xuICAgIGZpZWxkLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoZmllbGQpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChmaWVsZC5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG4vKipcbiAqIExpc3QgV2lkZ2V0IEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogRXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbiB0byBpbmhlcml0IGFsbCBjb21tb24gZnVuY3Rpb25hbGl0eVxuICovXG5jbGFzcyBMaXN0V2lkZ2V0QnVpbGRlciBleHRlbmRzIFdpZGdldENvbnRhaW5lck1peGluPElMaXN0V2lkZ2V0QnVpbGRlcj4gaW1wbGVtZW50cyBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignbGlzdCcpO1xuICB9XG5cbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBMaXN0V2lkZ2V0T3B0aW9ucyk6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zID0geyAuLi50aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEluZGl2aWR1YWwgZmx1ZW50IG1ldGhvZHMgZm9yIExpc3QgV2lkZ2V0XG4gIHNldERhdGFTb3VyY2UoZGF0YVNvdXJjZTogYW55W10pOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBkYXRhU291cmNlIH0pO1xuICB9XG5cbiAgc2V0Q29sdW1ucyhjb2x1bW5zOiBhbnlbXSk6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNvbHVtbnMgfSk7XG4gIH1cblxuICAvLyBFdmVudCBoYW5kbGVyc1xuICBzZXRPblJvd0NsaWNrKGhhbmRsZXI6IChyb3c6IGFueSkgPT4gdm9pZCk6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IG9uUm93Q2xpY2s6IGhhbmRsZXIgfSk7XG4gIH1cblxuICBzZXRPblJvd0RvdWJsZUNsaWNrKGhhbmRsZXI6IChyb3c6IGFueSkgPT4gdm9pZCk6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IG9uUm93RG91YmxlQ2xpY2s6IGhhbmRsZXIgfSk7XG4gIH1cblxuICBzZXRPblNlbGVjdGlvbkNoYW5nZShoYW5kbGVyOiAoc2VsZWN0ZWRSb3dzOiBhbnlbXSkgPT4gdm9pZCk6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IG9uU2VsZWN0aW9uQ2hhbmdlOiBoYW5kbGVyIH0pO1xuICB9XG5cbiAgc2V0T25Sb3dDb21tYW5kKGhhbmRsZXI6IChjb21tYW5kOiBhbnksIHNlbGVjdGVkUm93czogYW55W10pID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBvblJvd0NvbW1hbmQ6IGhhbmRsZXIgfSk7XG4gIH1cblxuICAvLyBUYWJsZSBmZWF0dXJlc1xuICBzZXRQYWdpbmcocGFnaW5nOiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgcGFnaW5nIH0pO1xuICB9XG5cbiAgc2V0U2hvd0hlYWRlcihzaG93OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgc2hvd0hlYWRlcjogc2hvdyB9KTtcbiAgfVxuXG4gIHNldFNob3dGb290ZXIoc2hvdzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dGb290ZXI6IHNob3cgfSk7XG4gIH1cblxuICBzZXRGaXhIZWFkZXIoZml4OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZml4SGVhZGVyOiBmaXggfSk7XG4gIH1cblxuICBzZXRGaXhGb290ZXIoZml4OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZml4Rm9vdGVyOiBmaXggfSk7XG4gIH1cblxuICBzZXRGZXRjaERhdGFNb2RlKG1vZGU6ICdhdXRvJyB8ICdtYW51YWwnKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZmV0Y2hEYXRhTW9kZTogbW9kZSB9KTtcbiAgfVxuXG4gIHNldFBhcmVudEZpZWxkKGZpZWxkOiBzdHJpbmcpOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBwYXJlbnRGaWVsZDogZmllbGQgfSk7XG4gIH1cblxuICBzZXRNaW5IZWlnaHQoaGVpZ2h0OiBzdHJpbmcgfCBudW1iZXIpOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBtaW5IZWlnaHQ6IGhlaWdodCB9KTtcbiAgfVxuXG4gIC8vIFNlbGVjdGlvbiAmIEluZGV4XG4gIHNldFNob3dJbmRleChzaG93OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgc2hvd0luZGV4OiBzaG93IH0pO1xuICB9XG5cbiAgc2V0QWxsb3dTZWxlY3Rpb24oYWxsb3c6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBhbGxvd1NlbGVjdGlvbjogYWxsb3cgfSk7XG4gIH1cblxuICAvLyBDb21tYW5kc1xuICBzZXRQcmltYXJ5Q29tbWFuZHMoY29tbWFuZHM6IGFueVtdKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgcHJpbWFyeUNvbW1hbmRzOiBjb21tYW5kcyB9KTtcbiAgfVxuXG4gIHNldFNlY29uZGFyeUNvbW1hbmRzKGNvbW1hbmRzOiBhbnlbXSk6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNlY29uZGFyeUNvbW1hbmRzOiBjb21tYW5kcyB9KTtcbiAgfVxuXG4gIC8vIExvYWRpbmdcbiAgc2V0TG9hZGluZyhsb2FkaW5nOiB7IGVuYWJsZWQ/OiBib29sZWFuOyBhbmltYXRpb24/OiBib29sZWFuIH0pOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBsb2FkaW5nIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGlhbG9nIENvbnRhaW5lciBCdWlsZGVyIC0gU3BlY2lhbGl6ZWQgZm9yIGRpYWxvZyBmdW5jdGlvbmFsaXR5XG4gKiBVc2VzIGNvbXBvc2l0aW9uIGluc3RlYWQgb2YgaW5oZXJpdGFuY2UgZm9yIGNsZWFuZXIgc2VwYXJhdGlvblxuICovXG5jbGFzcyBEaWFsb2dDb250YWluZXJCdWlsZGVyIGltcGxlbWVudHMgSURpYWxvZ0J1aWxkZXIge1xuICBwcml2YXRlIGRpYWxvZ1N0YXRlOiBEaWFsb2dCdWlsZGVyU3RhdGUgPSB7XG4gICAgdHlwZTogJ2ZsZXgtbGF5b3V0JywgLy8gVGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbiBjb250ZW50IGxheW91dCBleGlzdHNcbiAgICBjaGlsZHJlbjogW10sXG4gICAgbW9kZTogJ2VkaXQnLFxuICAgIGRpYWxvZ09wdGlvbnM6IHtcbiAgICAgIHRpdGxlOiAnJyxcbiAgICAgIHNpemU6ICdtZCcsXG4gICAgICBjbG9zZUJ1dHRvbjogZmFsc2UsXG4gICAgfSxcbiAgICBhY3Rpb25zOiB7XG4gICAgICBmb290ZXI6IHtcbiAgICAgICAgcHJlZml4OiBbXSxcbiAgICAgICAgc3VmZml4OiBbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICBwcml2YXRlIHBvcHVwU2VydmljZTogQVhQb3B1cFNlcnZpY2U7XG4gIHByaXZhdGUgY29udGVudExheW91dD86IEFYUFdpZGdldE5vZGU7XG5cbiAgY29uc3RydWN0b3IocG9wdXBTZXJ2aWNlPzogQVhQb3B1cFNlcnZpY2UpIHtcbiAgICBpZiAocG9wdXBTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnBvcHVwU2VydmljZSA9IHBvcHVwU2VydmljZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3B1cFNlcnZpY2UgPSBpbmplY3QoQVhQb3B1cFNlcnZpY2UpO1xuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQRGlhbG9nQ29udGFpbmVyT3B0aW9ucyk6IElEaWFsb2dCdWlsZGVyIHtcbiAgICB0aGlzLmRpYWxvZ1N0YXRlLmRpYWxvZ09wdGlvbnMgPSB7IC4uLnRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSW5kaXZpZHVhbCBmbHVlbnQgbWV0aG9kcyBmb3IgRGlhbG9nXG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHRpdGxlIH0pO1xuICB9XG5cbiAgc2V0TWVzc2FnZShtZXNzYWdlPzogc3RyaW5nKTogSURpYWxvZ0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBtZXNzYWdlIH0pO1xuICB9XG5cbiAgc2V0U2l6ZShzaXplOiBhbnkpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNpemUgfSk7XG4gIH1cblxuICBzZXRDbG9zZUJ1dHRvbihjbG9zZUJ1dHRvbjogYm9vbGVhbik6IElEaWFsb2dCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgY2xvc2VCdXR0b24gfSk7XG4gIH1cblxuICBzZXRDb250ZXh0KGNvbnRleHQ6IGFueSk6IElEaWFsb2dCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgY29udGV4dCB9KTtcbiAgfVxuXG4gIGNvbnRlbnQoZGVsZWdhdGU6IChsYXlvdXRCdWlsZGVyOiBJRmxleENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAvLyBDcmVhdGUgYSBmbGV4IGNvbnRhaW5lciBkaXJlY3RseSBpbnN0ZWFkIG9mIHRocm91Z2ggTGF5b3V0QnVpbGRlclxuICAgICAgY29uc3QgZmxleENvbnRhaW5lciA9IG5ldyBGbGV4Q29udGFpbmVyQnVpbGRlcigpO1xuICAgICAgZmxleENvbnRhaW5lci5zZXREaXJlY3Rpb24oJ2NvbHVtbicpO1xuICAgICAgZmxleENvbnRhaW5lci5zZXRHYXAoJzEwcHgnKTtcbiAgICAgIGRlbGVnYXRlKGZsZXhDb250YWluZXIpO1xuICAgICAgdGhpcy5jb250ZW50TGF5b3V0ID0gZmxleENvbnRhaW5lci5idWlsZCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEFjdGlvbnMoZGVsZWdhdGU/OiAoYWN0aW9uczogSUFjdGlvbkJ1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBjb25zdCBhY3Rpb25CdWlsZGVyID0gbmV3IEFjdGlvbkJ1aWxkZXIodGhpcyk7XG4gICAgICBkZWxlZ2F0ZShhY3Rpb25CdWlsZGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBCdWlsZCBtZXRob2QgdG8gY3JlYXRlIGRpYWxvZyBub2RlXG4gIGJ1aWxkKCk6IEFYUFdpZGdldE5vZGUge1xuICAgIC8vIElmIHdlIGhhdmUgY29udGVudCBsYXlvdXQsIHVzZSBpdCBkaXJlY3RseSB0byBhdm9pZCBleHRyYSB3cmFwcGVyXG4gICAgaWYgKHRoaXMuY29udGVudExheW91dCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5jb250ZW50TGF5b3V0LFxuICAgICAgICAvLyBBZGQgZGlhbG9nLXNwZWNpZmljIHByb3BlcnRpZXNcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIC4uLnRoaXMuY29udGVudExheW91dC5vcHRpb25zLFxuICAgICAgICAgIC4uLnRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gZGlhbG9nIHN0YXRlIHN0cnVjdHVyZSBpZiBubyBjb250ZW50XG4gICAgY29uc3QgcmVzdWx0OiBBWFBXaWRnZXROb2RlID0ge1xuICAgICAgLi4udGhpcy5kaWFsb2dTdGF0ZSxcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIGRpYWxvZy1zcGVjaWZpYyBwcm9wZXJ0aWVzXG4gICAgaWYgKHRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucykge1xuICAgICAgcmVzdWx0Lm9wdGlvbnMgPSB7IC4uLnJlc3VsdC5vcHRpb25zLCAuLi50aGlzLmRpYWxvZ1N0YXRlLmRpYWxvZ09wdGlvbnMgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gRGlhbG9nLXNwZWNpZmljIG1ldGhvZHNcbiAgYXN5bmMgc2hvdygpOiBQcm9taXNlPEFYUERpYWxvZ1JlZj4ge1xuICAgIGNvbnN0IGRpYWxvZ05vZGUgPSB0aGlzLmJ1aWxkKCk7XG5cbiAgICAvLyBJbXBvcnQgdGhlIGRpYWxvZyByZW5kZXJlciBjb21wb25lbnQgZHluYW1pY2FsbHlcbiAgICBjb25zdCB7IEFYUERpYWxvZ1JlbmRlcmVyQ29tcG9uZW50IH0gPSBhd2FpdCBpbXBvcnQoJy4vZGlhbG9nLXJlbmRlcmVyLmNvbXBvbmVudCcpO1xuXG4gICAgLy8gQ3JlYXRlIGRpYWxvZyBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgZGlhbG9nQ29uZmlnID0ge1xuICAgICAgdGl0bGU6IHRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucz8udGl0bGUgfHwgJycsXG4gICAgICBtZXNzYWdlOiB0aGlzLmRpYWxvZ1N0YXRlLmRpYWxvZ09wdGlvbnM/Lm1lc3NhZ2UsXG4gICAgICBjb250ZXh0OiB0aGlzLmRpYWxvZ1N0YXRlLmRpYWxvZ09wdGlvbnM/LmNvbnRleHQgfHwge30sXG4gICAgICBkZWZpbml0aW9uOiBkaWFsb2dOb2RlLFxuICAgICAgYWN0aW9uczogdGhpcy5kaWFsb2dTdGF0ZS5hY3Rpb25zLFxuICAgIH07XG5cbiAgICAvLyBUaGUgUHJvbWlzZSByZXNvbHZlcyB3aGVuIHVzZXIgY2xpY2tzIGFuIGFjdGlvbiBidXR0b25cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oQVhQRGlhbG9nUmVuZGVyZXJDb21wb25lbnQsIHtcbiAgICAgICAgdGl0bGU6IGRpYWxvZ0NvbmZpZy50aXRsZSxcbiAgICAgICAgc2l6ZTogdGhpcy5kaWFsb2dTdGF0ZS5kaWFsb2dPcHRpb25zPy5zaXplIHx8ICdtZCcsXG4gICAgICAgIGNsb3NlQnV0dG9uOiB0aGlzLmRpYWxvZ1N0YXRlLmRpYWxvZ09wdGlvbnM/LmNsb3NlQnV0dG9uIHx8IGZhbHNlLFxuICAgICAgICBjbG9zZU9uQmFja2Ryb3BDbGljazogZmFsc2UsXG4gICAgICAgIGRyYWdnYWJsZTogZmFsc2UsXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBjb25maWc6IGRpYWxvZ0NvbmZpZyxcbiAgICAgICAgICBjYWxsQmFjazogKHJlc3VsdDogQVhQRGlhbG9nUmVmKSA9PiB7XG4gICAgICAgICAgICAvLyBSZXNvbHZlIHdpdGggdGhlIGRpYWxvZyByZWZlcmVuY2Ugd2hlbiB1c2VyIGNsaWNrcyBhbiBhY3Rpb25cbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgV2lkZ2V0IEJ1aWxkZXIgSW1wbGVtZW50YXRpb24gICAtLS0tXG5cbi8qKlxuICogV2lkZ2V0IEJ1aWxkZXIgLSBTaW5nbGUgUmVzcG9uc2liaWxpdHkgUHJpbmNpcGxlXG4gKiBIYW5kbGVzIGluZGl2aWR1YWwgd2lkZ2V0IGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkaW5nXG4gKi9cbmNsYXNzIFdpZGdldEJ1aWxkZXIgaW1wbGVtZW50cyBJV2lkZ2V0QnVpbGRlciB7XG4gIHByaXZhdGUgd2lkZ2V0U3RhdGU6IFdpZGdldEJ1aWxkZXJTdGF0ZSA9IHtcbiAgICB0eXBlOiAnd2lkZ2V0JyBhcyBjb25zdCxcbiAgICBvcHRpb25zOiB7fSBhcyBhbnksXG4gIH07XG5cbiAgcHJpdmF0ZSBpbmhlcml0YW5jZUNvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAobmFtZSkge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5uYW1lID0gbmFtZTtcbiAgICB9XG4gIH1cblxuICB0eXBlKHR5cGU6IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICB0aGlzLndpZGdldFN0YXRlLnR5cGUgPSB0eXBlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbmFtZShuYW1lOiBzdHJpbmcpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5uYW1lID0gbmFtZTtcbiAgICBpZiAoIXRoaXMud2lkZ2V0U3RhdGUucGF0aCkge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5wYXRoID0gbmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwYXRoKHBhdGg6IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICB0aGlzLndpZGdldFN0YXRlLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3B0aW9ucyhvcHRpb25zOiBhbnkpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zID0gb3B0aW9ucztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxheW91dCh2YWx1ZTogUGFydGlhbDxBWFBHcmlkTGF5b3V0T3B0aW9ucz4gfCBudW1iZXIpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUubGF5b3V0ID0ge1xuICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICBzbTogeyBjb2xTcGFuOiAxMiB9LFxuICAgICAgICAgIG1kOiB7IGNvbFNwYW46IDEyIH0sXG4gICAgICAgICAgbGc6IHsgY29sU3BhbjogdmFsdWUgfSxcbiAgICAgICAgICB4bDogeyBjb2xTcGFuOiB2YWx1ZSB9LFxuICAgICAgICAgIHh4bDogeyBjb2xTcGFuOiB2YWx1ZSB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5sYXlvdXQgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtb2RlKG1vZGU6IEFYUFdpZGdldFJlbmRlck1vZGUpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5tb2RlID0gbW9kZTtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5tb2RlID0gbW9kZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZpc2libGUoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIGlmICghdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zWyd2aXNpYmxlJ10gPSBjb25kaXRpb247XG4gICAgdGhpcy5pbmhlcml0YW5jZUNvbnRleHQudmlzaWJsZSA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpc2FibGVkKGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMud2lkZ2V0U3RhdGUub3B0aW9ucykge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9uc1snZGlzYWJsZWQnXSA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5kaXNhYmxlZCA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlYWRvbmx5KGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMud2lkZ2V0U3RhdGUub3B0aW9ucykge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9uc1sncmVhZG9ubHknXSA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5yZWFkb25seSA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLndpZGdldFN0YXRlLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnNbJ2RpcmVjdGlvbiddID0gZGlyZWN0aW9uO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEluaGVyaXRhbmNlIGNvbnRleHQgbWV0aG9kc1xuICB3aXRoSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dCA9IG1lcmdlSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgLy8gQXBwbHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gd2lkZ2V0IHN0YXRlXG4gICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlSW5oZXJpdGVkUHJvcGVydGllcyhjb250ZXh0LCB0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG5cbiAgICBpZiAocmVzb2x2ZWQubW9kZSAmJiAhdGhpcy53aWRnZXRTdGF0ZS5tb2RlKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm1vZGUgPSByZXNvbHZlZC5tb2RlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zKSB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnMgPSB7fTtcblxuICAgIGlmIChyZXNvbHZlZC5kaXNhYmxlZCAhPT0gdW5kZWZpbmVkICYmICF0aGlzLndpZGdldFN0YXRlLm9wdGlvbnNbJ2Rpc2FibGVkJ10pIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9uc1snZGlzYWJsZWQnXSA9IHJlc29sdmVkLmRpc2FibGVkO1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlZC5yZWFkb25seSAhPT0gdW5kZWZpbmVkICYmICF0aGlzLndpZGdldFN0YXRlLm9wdGlvbnNbJ3JlYWRvbmx5J10pIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9uc1sncmVhZG9ubHknXSA9IHJlc29sdmVkLnJlYWRvbmx5O1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlZC5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZCAmJiAhdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zWydkaXJlY3Rpb24nXSkge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zWydkaXJlY3Rpb24nXSA9IHJlc29sdmVkLmRpcmVjdGlvbjtcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZWQudmlzaWJsZSAhPT0gdW5kZWZpbmVkICYmICF0aGlzLndpZGdldFN0YXRlLm9wdGlvbnNbJ3Zpc2libGUnXSkge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zWyd2aXNpYmxlJ10gPSByZXNvbHZlZC52aXNpYmxlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0SW5oZXJpdGFuY2VDb250ZXh0KCk6IEluaGVyaXRhbmNlQ29udGV4dCB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5pbmhlcml0YW5jZUNvbnRleHQgfTtcbiAgfVxuXG4gIGJ1aWxkKCk6IEFYUFdpZGdldE5vZGUge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLndpZGdldFN0YXRlLm5hbWUsXG4gICAgICB0eXBlOiB0aGlzLndpZGdldFN0YXRlLnR5cGUsXG4gICAgICBvcHRpb25zOiB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnMsXG4gICAgICBtb2RlOiB0aGlzLndpZGdldFN0YXRlLm1vZGUsXG4gICAgICBwYXRoOiB0aGlzLndpZGdldFN0YXRlLnBhdGgsXG4gICAgICBkZWZhdWx0VmFsdWU6IHRoaXMud2lkZ2V0U3RhdGUuZGVmYXVsdFZhbHVlLFxuICAgIH07XG4gIH1cbn1cblxuLy8jcmVnaW9uIC0tLS0gICBBY3Rpb24gQnVpbGRlciBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuY2xhc3MgQWN0aW9uQnVpbGRlciBpbXBsZW1lbnRzIElBY3Rpb25CdWlsZGVyIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2dCdWlsZGVyOiBEaWFsb2dDb250YWluZXJCdWlsZGVyKSB7fVxuXG4gIGNhbmNlbCh0ZXh0Pzogc3RyaW5nKTogSUFjdGlvbkJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4KSB7XG4gICAgICB0aGlzLmRpYWxvZ0J1aWxkZXJbJ2RpYWxvZ1N0YXRlJ10uYWN0aW9ucyEuZm9vdGVyIS5zdWZmaXggPSBbXTtcbiAgICB9XG4gICAgdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4IS5wdXNoKHtcbiAgICAgIHRpdGxlOiB0ZXh0IHx8ICdAZ2VuZXJhbDphY3Rpb25zLmNhbmNlbC50aXRsZScsXG4gICAgICBpY29uOiAnZmEtdGltZXMnLFxuICAgICAgY29sb3I6ICdkZWZhdWx0JyxcbiAgICAgIGNvbW1hbmQ6IHsgbmFtZTogJ2NhbmNlbCcgfSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHN1Ym1pdCh0ZXh0Pzogc3RyaW5nKTogSUFjdGlvbkJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4KSB7XG4gICAgICB0aGlzLmRpYWxvZ0J1aWxkZXJbJ2RpYWxvZ1N0YXRlJ10uYWN0aW9ucyEuZm9vdGVyIS5zdWZmaXggPSBbXTtcbiAgICB9XG4gICAgdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4IS5wdXNoKHtcbiAgICAgIHRpdGxlOiB0ZXh0IHx8ICdAZ2VuZXJhbDphY3Rpb25zLnN1Ym1pdC50aXRsZScsXG4gICAgICBpY29uOiAnZmEtY2hlY2snLFxuICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgIGNvbW1hbmQ6IHsgbmFtZTogJ3N1Ym1pdCcsIG9wdGlvbnM6IHsgdmFsaWRhdGU6IHRydWUgfSB9LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgY3VzdG9tKGFjdGlvbjogQVhQQWN0aW9uTWVudUl0ZW0pOiBJQWN0aW9uQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLmRpYWxvZ0J1aWxkZXJbJ2RpYWxvZ1N0YXRlJ10uYWN0aW9ucyEuZm9vdGVyIS5zdWZmaXgpIHtcbiAgICAgIHRoaXMuZGlhbG9nQnVpbGRlclsnZGlhbG9nU3RhdGUnXS5hY3Rpb25zIS5mb290ZXIhLnN1ZmZpeCA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmRpYWxvZ0J1aWxkZXJbJ2RpYWxvZ1N0YXRlJ10uYWN0aW9ucyEuZm9vdGVyIS5zdWZmaXghLnB1c2goYWN0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cbiJdfQ==","import { Injectable } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class AXPLayoutConversionService {\n constructor() {\n //#region ---- Caching ----\n this.widgetTreeCache = new Map();\n this.formDefinitionCache = new Map();\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Convert AXPDynamicFormDefinition to AXPWidgetNode tree structure\n * Groups become Fieldset Layouts with Form Field widgets as children\n * Fields become Form Field widgets with Editor widgets as children\n */\n convertFormDefinition(formDefinition) {\n // Create cache key based on form definition content\n const cacheKey = this.createFormDefinitionCacheKey(formDefinition);\n // Check cache first\n if (this.widgetTreeCache.has(cacheKey)) {\n return this.widgetTreeCache.get(cacheKey);\n }\n // Generate widget tree\n const widgetTree = {\n type: 'grid-layout',\n name: 'dynamic-form-container',\n options: {\n title: 'Dynamic Form',\n grid: {\n default: {\n columns: 1,\n gap: '1rem'\n }\n }\n },\n children: formDefinition.groups.map(group => this.createGroupAsFieldsetWidget(group))\n };\n // Cache the result\n this.widgetTreeCache.set(cacheKey, widgetTree);\n return widgetTree;\n }\n /**\n * Convert AXPWidgetNode tree back to AXPDynamicFormDefinition\n * Parses Fieldset Layouts back to Groups\n * Parses Form Field widgets back to Fields\n */\n convertWidgetTreeToFormDefinition(widgetTree) {\n // Create cache key based on widget tree content\n const cacheKey = this.createWidgetTreeCacheKey(widgetTree);\n // Check cache first\n if (this.formDefinitionCache.has(cacheKey)) {\n return this.formDefinitionCache.get(cacheKey);\n }\n // Parse widget tree\n const groups = [];\n if (widgetTree.children) {\n widgetTree.children.forEach(child => {\n if (child.type === 'fieldset-layout') {\n const group = this.extractGroupFromFieldset(child);\n groups.push(group);\n }\n });\n }\n const formDefinition = { groups };\n // Cache the result\n this.formDefinitionCache.set(cacheKey, formDefinition);\n return formDefinition;\n }\n /**\n * Validate that a widget tree represents a valid dynamic form structure\n */\n validateFormWidgetTree(widgetTree) {\n if (!widgetTree || widgetTree.type !== 'grid-layout') {\n return false;\n }\n if (!widgetTree.children || widgetTree.children.length === 0) {\n return true; // Empty form is valid\n }\n // Check that all children are fieldset-layout widgets\n return widgetTree.children.every(child => child.type === 'fieldset-layout' &&\n child.children &&\n child.children.every(formField => formField.type === 'form-field' &&\n formField.children &&\n formField.children.length > 0));\n }\n /**\n * Clear all caches\n */\n clearCaches() {\n this.widgetTreeCache.clear();\n this.formDefinitionCache.clear();\n }\n /**\n * Get cache statistics\n */\n getCacheStats() {\n return {\n widgetTreeCacheSize: this.widgetTreeCache.size,\n formDefinitionCacheSize: this.formDefinitionCache.size\n };\n }\n //#endregion\n //#region ---- Private Methods ----\n /**\n * Convert a single group to Fieldset widget structure\n */\n createGroupAsFieldsetWidget(group) {\n // Determine columns count from layout or default to 1\n const columnsCount = 1;\n return {\n type: 'fieldset-layout',\n name: group.name,\n options: {\n title: group.title,\n description: group.description,\n cols: columnsCount\n },\n children: this.createFieldWidgets(group.parameters, columnsCount)\n };\n }\n /**\n * Convert fields to Form Field widgets\n */\n createFieldWidgets(fields, columnsCount) {\n return fields.map(field => this.createFormFieldWidget(field));\n }\n /**\n * Convert a single field to Form Field widget with editor as child\n */\n createFormFieldWidget(field) {\n return {\n type: 'form-field',\n name: field.path,\n options: {\n label: field.title,\n description: field.description,\n showLabel: true\n },\n children: [field.widget] // The editor widget becomes a child of form-field\n };\n }\n /**\n * Extract group information from Fieldset Layout widget\n */\n extractGroupFromFieldset(fieldsetNode) {\n const columnsCount = fieldsetNode.options?.['cols'] || 1;\n // Extract fields directly from fieldset children\n const fields = [];\n if (fieldsetNode.children) {\n fieldsetNode.children.forEach(formField => {\n if (formField.type === 'form-field' && formField.children && formField.children.length > 0) {\n const field = this.extractFieldFromFormWidget(formField);\n if (field) {\n fields.push(field);\n }\n }\n });\n }\n return {\n name: fieldsetNode.name || `group-${Date.now()}`,\n title: fieldsetNode.options?.['title'],\n description: fieldsetNode.options?.['description'],\n parameters: fields,\n };\n }\n /**\n * Extract field information from Form Field widget\n */\n extractFieldFromFormWidget(formFieldNode) {\n if (!formFieldNode.children || formFieldNode.children.length === 0) {\n return null;\n }\n const editorWidget = formFieldNode.children[0];\n return {\n path: formFieldNode.name || editorWidget.name || `field-${Date.now()}`,\n title: formFieldNode.options?.['label'],\n description: formFieldNode.options?.['description'],\n widget: editorWidget,\n mode: formFieldNode.mode\n };\n }\n /**\n * Create cache key for form definition\n */\n createFormDefinitionCacheKey(formDefinition) {\n // Create a hash-like key instead of full JSON string\n const keyParts = [];\n keyParts.push(`groups:${formDefinition.groups.length}`);\n formDefinition.groups.forEach((group, groupIndex) => {\n keyParts.push(`g${groupIndex}:${group.name}:${group.parameters.length}`);\n group.parameters.forEach((param, paramIndex) => {\n keyParts.push(`p${groupIndex}.${paramIndex}:${param.path}:${param.widget.type}`);\n });\n });\n if (formDefinition.mode) {\n keyParts.push(`mode:${formDefinition.mode}`);\n }\n // Join with delimiter and create a shorter hash\n const keyString = keyParts.join('|');\n // If still too long, create a simple hash\n if (keyString.length > 100) {\n return this.createSimpleHash(keyString);\n }\n return keyString;\n }\n /**\n * Create cache key for widget tree\n */\n createWidgetTreeCacheKey(widgetTree) {\n // Create a hash-like key instead of full JSON string\n const keyParts = [];\n keyParts.push(`type:${widgetTree.type}`);\n if (widgetTree.name) {\n keyParts.push(`name:${widgetTree.name}`);\n }\n if (widgetTree.children) {\n keyParts.push(`children:${widgetTree.children.length}`);\n widgetTree.children.forEach((child, index) => {\n keyParts.push(`c${index}:${child.type}`);\n if (child.children) {\n keyParts.push(`cc${index}:${child.children.length}`);\n child.children.forEach((grandChild, gIndex) => {\n keyParts.push(`gc${index}.${gIndex}:${grandChild.type}`);\n if (grandChild.children) {\n keyParts.push(`gcc${index}.${gIndex}:${grandChild.children.length}`);\n }\n });\n }\n });\n }\n // Join with delimiter and create a shorter hash\n const keyString = keyParts.join('|');\n // If still too long, create a simple hash\n if (keyString.length > 100) {\n return this.createSimpleHash(keyString);\n }\n return keyString;\n }\n /**\n * Create a simple hash from a string\n */\n createSimpleHash(str) {\n let hash = 0;\n if (str.length === 0)\n return hash.toString();\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return Math.abs(hash).toString(36); // Convert to base36 for shorter string\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXPLayoutConversionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXPLayoutConversionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXPLayoutConversionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWNvbnZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9sYXlvdXQtY29udmVyc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTzNDLE1BQU0sT0FBTywwQkFBMEI7SUFIdkM7UUFLSSwrQkFBK0I7UUFFdkIsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUNuRCx3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztLQWdUN0U7SUE5U0csWUFBWTtJQUVaLHNDQUFzQztJQUV0Qzs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsY0FBd0M7UUFDMUQsb0RBQW9EO1FBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuRSxvQkFBb0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUM7UUFDL0MsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLFVBQVUsR0FBa0I7WUFDOUIsSUFBSSxFQUFFLGFBQWE7WUFDbkIsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixPQUFPLEVBQUU7Z0JBQ0wsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLElBQUksRUFBRTtvQkFDRixPQUFPLEVBQUU7d0JBQ0wsT0FBTyxFQUFFLENBQUM7d0JBQ1YsR0FBRyxFQUFFLE1BQU07cUJBQ2Q7aUJBQ0o7YUFDSjtZQUNELFFBQVEsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFD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LEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBEeW5hbWljRm9ybURlZmluaXRpb24sIEFYUER5bmFtaWNGb3JtRmllbGREZWZpbml0aW9uLCBBWFBEeW5hbWljRm9ybUdyb3VwRGVmaW5pdGlvbiwgQVhQRHluYW1pY0Zvcm1Nb2RlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBXaWRnZXROb2RlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFYUExheW91dENvbnZlcnNpb25TZXJ2aWNlIHtcblxuICAgIC8vI3JlZ2lvbiAtLS0tICAgQ2FjaGluZyAgIC0tLS1cblxuICAgIHByaXZhdGUgd2lkZ2V0VHJlZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdpZGdldE5vZGU+KCk7XG4gICAgcHJpdmF0ZSBmb3JtRGVmaW5pdGlvbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvbj4oKTtcblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAgIC0tLS1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgQVhQRHluYW1pY0Zvcm1EZWZpbml0aW9uIHRvIEFYUFdpZGdldE5vZGUgdHJlZSBzdHJ1Y3R1cmVcbiAgICAgKiBHcm91cHMgYmVjb21lIEZpZWxkc2V0IExheW91dHMgd2l0aCBGb3JtIEZpZWxkIHdpZGdldHMgYXMgY2hpbGRyZW5cbiAgICAgKiBGaWVsZHMgYmVjb21lIEZvcm0gRmllbGQgd2lkZ2V0cyB3aXRoIEVkaXRvciB3aWRnZXRzIGFzIGNoaWxkcmVuXG4gICAgICovXG4gICAgY29udmVydEZvcm1EZWZpbml0aW9uKGZvcm1EZWZpbml0aW9uOiBBWFBEeW5hbWljRm9ybURlZmluaXRpb24pOiBBWFBXaWRnZXROb2RlIHtcbiAgICAgICAgLy8gQ3JlYXRlIGNhY2hlIGtleSBiYXNlZCBvbiBmb3JtIGRlZmluaXRpb24gY29udGVudFxuICAgICAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuY3JlYXRlRm9ybURlZmluaXRpb25DYWNoZUtleShmb3JtRGVmaW5pdGlvbik7XG5cbiAgICAgICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0VHJlZUNhY2hlLmhhcyhjYWNoZUtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndpZGdldFRyZWVDYWNoZS5nZXQoY2FjaGVLZXkpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdlbmVyYXRlIHdpZGdldCB0cmVlXG4gICAgICAgIGNvbnN0IHdpZGdldFRyZWU6IEFYUFdpZGdldE5vZGUgPSB7XG4gICAgICAgICAgICB0eXBlOiAnZ3JpZC1sYXlvdXQnLFxuICAgICAgICAgICAgbmFtZTogJ2R5bmFtaWMtZm9ybS1jb250YWluZXInLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgIHRpdGxlOiAnRHluYW1pYyBGb3JtJyxcbiAgICAgICAgICAgICAgICBncmlkOiB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBnYXA6ICcxcmVtJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBmb3JtRGVmaW5pdGlvbi5ncm91cHMubWFwKGdyb3VwID0+IHRoaXMuY3JlYXRlR3JvdXBBc0ZpZWxkc2V0V2lkZ2V0KGdyb3VwKSlcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDYWNoZSB0aGUgcmVzdWx0XG4gICAgICAgIHRoaXMud2lkZ2V0VHJlZUNhY2hlLnNldChjYWNoZUtleSwgd2lkZ2V0VHJlZSk7XG5cbiAgICAgICAgcmV0dXJuIHdpZGdldFRyZWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBBWFBXaWRnZXROb2RlIHRyZWUgYmFjayB0byBBWFBEeW5hbWljRm9ybURlZmluaXRpb25cbiAgICAgKiBQYXJzZXMgRmllbGRzZXQgTGF5b3V0cyBiYWNrIHRvIEdyb3Vwc1xuICAgICAqIFBhcnNlcyBGb3JtIEZpZWxkIHdpZGdldHMgYmFjayB0byBGaWVsZHNcbiAgICAgKi9cbiAgICBjb252ZXJ0V2lkZ2V0VHJlZVRvRm9ybURlZmluaXRpb24od2lkZ2V0VHJlZTogQVhQV2lkZ2V0Tm9kZSk6IEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvbiB7XG4gICAgICAgIC8vIENyZWF0ZSBjYWNoZSBrZXkgYmFzZWQgb24gd2lkZ2V0IHRyZWUgY29udGVudFxuICAgICAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuY3JlYXRlV2lkZ2V0VHJlZUNhY2hlS2V5KHdpZGdldFRyZWUpO1xuXG4gICAgICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgICAgIGlmICh0aGlzLmZvcm1EZWZpbml0aW9uQ2FjaGUuaGFzKGNhY2hlS2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybURlZmluaXRpb25DYWNoZS5nZXQoY2FjaGVLZXkpITtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBhcnNlIHdpZGdldCB0cmVlXG4gICAgICAgIGNvbnN0IGdyb3VwczogQVhQRHluYW1pY0Zvcm1Hcm91cERlZmluaXRpb25bXSA9IFtdO1xuXG4gICAgICAgIGlmICh3aWRnZXRUcmVlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICB3aWRnZXRUcmVlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSAnZmllbGRzZXQtbGF5b3V0Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZXh0cmFjdEdyb3VwRnJvbUZpZWxkc2V0KGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBzLnB1c2goZ3JvdXApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm9ybURlZmluaXRpb24gPSB7IGdyb3VwcyB9O1xuXG4gICAgICAgIC8vIENhY2hlIHRoZSByZXN1bHRcbiAgICAgICAgdGhpcy5mb3JtRGVmaW5pdGlvbkNhY2hlLnNldChjYWNoZUtleSwgZm9ybURlZmluaXRpb24pO1xuXG4gICAgICAgIHJldHVybiBmb3JtRGVmaW5pdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZSB0aGF0IGEgd2lkZ2V0IHRyZWUgcmVwcmVzZW50cyBhIHZhbGlkIGR5bmFtaWMgZm9ybSBzdHJ1Y3R1cmVcbiAgICAgKi9cbiAgICB2YWxpZGF0ZUZvcm1XaWRnZXRUcmVlKHdpZGdldFRyZWU6IEFYUFdpZGdldE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF3aWRnZXRUcmVlIHx8IHdpZGdldFRyZWUudHlwZSAhPT0gJ2dyaWQtbGF5b3V0Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF3aWRnZXRUcmVlLmNoaWxkcmVuIHx8IHdpZGdldFRyZWUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gRW1wdHkgZm9ybSBpcyB2YWxpZFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBhbGwgY2hpbGRyZW4gYXJlIGZpZWxkc2V0LWxheW91dCB3aWRnZXRzXG4gICAgICAgIHJldHVybiB3aWRnZXRUcmVlLmNoaWxkcmVuLmV2ZXJ5KGNoaWxkID0+XG4gICAgICAgICAgICBjaGlsZC50eXBlID09PSAnZmllbGRzZXQtbGF5b3V0JyAmJlxuICAgICAgICAgICAgY2hpbGQuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgIGNoaWxkLmNoaWxkcmVuLmV2ZXJ5KGZvcm1GaWVsZCA9PlxuICAgICAgICAgICAgICAgIGZvcm1GaWVsZC50eXBlID09PSAnZm9ybS1maWVsZCcgJiZcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgICBmb3JtRmllbGQuY2hpbGRyZW4ubGVuZ3RoID4gMFxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBjYWNoZXNcbiAgICAgKi9cbiAgICBjbGVhckNhY2hlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy53aWRnZXRUcmVlQ2FjaGUuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5mb3JtRGVmaW5pdGlvbkNhY2hlLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGNhY2hlIHN0YXRpc3RpY3NcbiAgICAgKi9cbiAgICBnZXRDYWNoZVN0YXRzKCk6IHsgd2lkZ2V0VHJlZUNhY2hlU2l6ZTogbnVtYmVyOyBmb3JtRGVmaW5pdGlvbkNhY2hlU2l6ZTogbnVtYmVyIH0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkZ2V0VHJlZUNhY2hlU2l6ZTogdGhpcy53aWRnZXRUcmVlQ2FjaGUuc2l6ZSxcbiAgICAgICAgICAgIGZvcm1EZWZpbml0aW9uQ2FjaGVTaXplOiB0aGlzLmZvcm1EZWZpbml0aW9uQ2FjaGUuc2l6ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIC0tLS0gICBQcml2YXRlIE1ldGhvZHMgICAtLS0tXG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgc2luZ2xlIGdyb3VwIHRvIEZpZWxkc2V0IHdpZGdldCBzdHJ1Y3R1cmVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUdyb3VwQXNGaWVsZHNldFdpZGdldChncm91cDogQVhQRHluYW1pY0Zvcm1Hcm91cERlZmluaXRpb24pOiBBWFBXaWRnZXROb2RlIHtcbiAgICAgICAgLy8gRGV0ZXJtaW5lIGNvbHVtbnMgY291bnQgZnJvbSBsYXlvdXQgb3IgZGVmYXVsdCB0byAxXG4gICAgICAgIGNvbnN0IGNvbHVtbnNDb3VudCA9IDE7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdmaWVsZHNldC1sYXlvdXQnLFxuICAgICAgICAgICAgbmFtZTogZ3JvdXAubmFtZSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogZ3JvdXAudGl0bGUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGdyb3VwLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIGNvbHM6IGNvbHVtbnNDb3VudFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiB0aGlzLmNyZWF0ZUZpZWxkV2lkZ2V0cyhncm91cC5wYXJhbWV0ZXJzLCBjb2x1bW5zQ291bnQpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBmaWVsZHMgdG8gRm9ybSBGaWVsZCB3aWRnZXRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWVsZFdpZGdldHMoZmllbGRzOiBBWFBEeW5hbWljRm9ybUZpZWxkRGVmaW5pdGlvbltdLCBjb2x1bW5zQ291bnQ6IG51bWJlcik6IEFYUFdpZGdldE5vZGVbXSB7XG4gICAgICAgIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+IHRoaXMuY3JlYXRlRm9ybUZpZWxkV2lkZ2V0KGZpZWxkKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIHNpbmdsZSBmaWVsZCB0byBGb3JtIEZpZWxkIHdpZGdldCB3aXRoIGVkaXRvciBhcyBjaGlsZFxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRm9ybUZpZWxkV2lkZ2V0KGZpZWxkOiBBWFBEeW5hbWljRm9ybUZpZWxkRGVmaW5pdGlvbik6IEFYUFdpZGdldE5vZGUge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2Zvcm0tZmllbGQnLFxuICAgICAgICAgICAgbmFtZTogZmllbGQucGF0aCxcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogZmllbGQudGl0bGUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGZpZWxkLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIHNob3dMYWJlbDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbZmllbGQud2lkZ2V0XSAvLyBUaGUgZWRpdG9yIHdpZGdldCBiZWNvbWVzIGEgY2hpbGQgb2YgZm9ybS1maWVsZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4dHJhY3QgZ3JvdXAgaW5mb3JtYXRpb24gZnJvbSBGaWVsZHNldCBMYXlvdXQgd2lkZ2V0XG4gICAgICovXG4gICAgcHJpdmF0ZSBleHRyYWN0R3JvdXBGcm9tRmllbGRzZXQoZmllbGRzZXROb2RlOiBBWFBXaWRnZXROb2RlKTogQVhQRHluYW1pY0Zvcm1Hcm91cERlZmluaXRpb24ge1xuICAgICAgICBjb25zdCBjb2x1bW5zQ291bnQgPSBmaWVsZHNldE5vZGUub3B0aW9ucz8uWydjb2xzJ10gfHwgMTtcblxuICAgICAgICAvLyBFeHRyYWN0IGZpZWxkcyBkaXJlY3RseSBmcm9tIGZpZWxkc2V0IGNoaWxkcmVuXG4gICAgICAgIGNvbnN0IGZpZWxkczogQVhQRHluYW1pY0Zvcm1GaWVsZERlZmluaXRpb25bXSA9IFtdO1xuXG4gICAgICAgIGlmIChmaWVsZHNldE5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGZpZWxkc2V0Tm9kZS5jaGlsZHJlbi5mb3JFYWNoKGZvcm1GaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1GaWVsZC50eXBlID09PSAnZm9ybS1maWVsZCcgJiYgZm9ybUZpZWxkLmNoaWxkcmVuICYmIGZvcm1GaWVsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5leHRyYWN0RmllbGRGcm9tRm9ybVdpZGdldChmb3JtRmllbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGZpZWxkc2V0Tm9kZS5uYW1lIHx8IGBncm91cC0ke0RhdGUubm93KCl9YCxcbiAgICAgICAgICAgIHRpdGxlOiBmaWVsZHNldE5vZGUub3B0aW9ucz8uWyd0aXRsZSddLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGZpZWxkc2V0Tm9kZS5vcHRpb25zPy5bJ2Rlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiBmaWVsZHMsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdCBmaWVsZCBpbmZvcm1hdGlvbiBmcm9tIEZvcm0gRmllbGQgd2lkZ2V0XG4gICAgICovXG4gICAgcHJpdmF0ZSBleHRyYWN0RmllbGRGcm9tRm9ybVdpZGdldChmb3JtRmllbGROb2RlOiBBWFBXaWRnZXROb2RlKTogQVhQRHluYW1pY0Zvcm1GaWVsZERlZmluaXRpb24gfCBudWxsIHtcbiAgICAgICAgaWYgKCFmb3JtRmllbGROb2RlLmNoaWxkcmVuIHx8IGZvcm1GaWVsZE5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVkaXRvcldpZGdldCA9IGZvcm1GaWVsZE5vZGUuY2hpbGRyZW5bMF07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGg6IGZvcm1GaWVsZE5vZGUubmFtZSB8fCBlZGl0b3JXaWRnZXQubmFtZSB8fCBgZmllbGQtJHtEYXRlLm5vdygpfWAsXG4gICAgICAgICAgICB0aXRsZTogZm9ybUZpZWxkTm9kZS5vcHRpb25zPy5bJ2xhYmVsJ10sXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogZm9ybUZpZWxkTm9kZS5vcHRpb25zPy5bJ2Rlc2NyaXB0aW9uJ10sXG4gICAgICAgICAgICB3aWRnZXQ6IGVkaXRvcldpZGdldCxcbiAgICAgICAgICAgIG1vZGU6IGZvcm1GaWVsZE5vZGUubW9kZSBhcyBBWFBEeW5hbWljRm9ybU1vZGVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgY2FjaGUga2V5IGZvciBmb3JtIGRlZmluaXRpb25cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUZvcm1EZWZpbml0aW9uQ2FjaGVLZXkoZm9ybURlZmluaXRpb246IEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgICAgIC8vIENyZWF0ZSBhIGhhc2gtbGlrZSBrZXkgaW5zdGVhZCBvZiBmdWxsIEpTT04gc3RyaW5nXG4gICAgICAgIGNvbnN0IGtleVBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGtleVBhcnRzLnB1c2goYGdyb3Vwczoke2Zvcm1EZWZpbml0aW9uLmdyb3Vwcy5sZW5ndGh9YCk7XG5cbiAgICAgICAgZm9ybURlZmluaXRpb24uZ3JvdXBzLmZvckVhY2goKGdyb3VwLCBncm91cEluZGV4KSA9PiB7XG4gICAgICAgICAgICBrZXlQYXJ0cy5wdXNoKGBnJHtncm91cEluZGV4fToke2dyb3VwLm5hbWV9OiR7Z3JvdXAucGFyYW1ldGVycy5sZW5ndGh9YCk7XG5cbiAgICAgICAgICAgIGdyb3VwLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0sIHBhcmFtSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBrZXlQYXJ0cy5wdXNoKGBwJHtncm91cEluZGV4fS4ke3BhcmFtSW5kZXh9OiR7cGFyYW0ucGF0aH06JHtwYXJhbS53aWRnZXQudHlwZX1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoZm9ybURlZmluaXRpb24ubW9kZSkge1xuICAgICAgICAgICAga2V5UGFydHMucHVzaChgbW9kZToke2Zvcm1EZWZpbml0aW9uLm1vZGV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBKb2luIHdpdGggZGVsaW1pdGVyIGFuZCBjcmVhdGUgYSBzaG9ydGVyIGhhc2hcbiAgICAgICAgY29uc3Qga2V5U3RyaW5nID0ga2V5UGFydHMuam9pbignfCcpO1xuXG4gICAgICAgIC8vIElmIHN0aWxsIHRvbyBsb25nLCBjcmVhdGUgYSBzaW1wbGUgaGFzaFxuICAgICAgICBpZiAoa2V5U3RyaW5nLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2ltcGxlSGFzaChrZXlTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGtleVN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgY2FjaGUga2V5IGZvciB3aWRnZXQgdHJlZVxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlV2lkZ2V0VHJlZUNhY2hlS2V5KHdpZGdldFRyZWU6IEFYUFdpZGdldE5vZGUpOiBzdHJpbmcge1xuICAgICAgICAvLyBDcmVhdGUgYSBoYXNoLWxpa2Uga2V5IGluc3RlYWQgb2YgZnVsbCBKU09OIHN0cmluZ1xuICAgICAgICBjb25zdCBrZXlQYXJ0czogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICBrZXlQYXJ0cy5wdXNoKGB0eXBlOiR7d2lkZ2V0VHJlZS50eXBlfWApO1xuXG4gICAgICAgIGlmICh3aWRnZXRUcmVlLm5hbWUpIHtcbiAgICAgICAgICAgIGtleVBhcnRzLnB1c2goYG5hbWU6JHt3aWRnZXRUcmVlLm5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAod2lkZ2V0VHJlZS5jaGlsZHJlbikge1xuICAgICAgICAgICAga2V5UGFydHMucHVzaChgY2hpbGRyZW46JHt3aWRnZXRUcmVlLmNoaWxkcmVuLmxlbmd0aH1gKTtcblxuICAgICAgICAgICAgd2lkZ2V0VHJlZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBrZXlQYXJ0cy5wdXNoKGBjJHtpbmRleH06JHtjaGlsZC50eXBlfWApO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleVBhcnRzLnB1c2goYGNjJHtpbmRleH06JHtjaGlsZC5jaGlsZHJlbi5sZW5ndGh9YCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuY2hpbGRyZW4uZm9yRWFjaCgoZ3JhbmRDaGlsZCwgZ0luZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlQYXJ0cy5wdXNoKGBnYyR7aW5kZXh9LiR7Z0luZGV4fToke2dyYW5kQ2hpbGQudHlwZX1gKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyYW5kQ2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlQYXJ0cy5wdXNoKGBnY2Mke2luZGV4fS4ke2dJbmRleH06JHtncmFuZENoaWxkLmNoaWxkcmVuLmxlbmd0aH1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBKb2luIHdpdGggZGVsaW1pdGVyIGFuZCBjcmVhdGUgYSBzaG9ydGVyIGhhc2hcbiAgICAgICAgY29uc3Qga2V5U3RyaW5nID0ga2V5UGFydHMuam9pbignfCcpO1xuXG4gICAgICAgIC8vIElmIHN0aWxsIHRvbyBsb25nLCBjcmVhdGUgYSBzaW1wbGUgaGFzaFxuICAgICAgICBpZiAoa2V5U3RyaW5nLmxlbmd0aCA+IDEwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2ltcGxlSGFzaChrZXlTdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGtleVN0cmluZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBzaW1wbGUgaGFzaCBmcm9tIGEgc3RyaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVTaW1wbGVIYXNoKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IGhhc2ggPSAwO1xuICAgICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hhcjtcbiAgICAgICAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDsgLy8gQ29udmVydCB0byAzMi1iaXQgaW50ZWdlclxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKGhhc2gpLnRvU3RyaW5nKDM2KTsgLy8gQ29udmVydCB0byBiYXNlMzYgZm9yIHNob3J0ZXIgc3RyaW5nXG4gICAgfVxuXG4gICAgLy8jZW5kcmVnaW9uXG59XG4iXX0=","import { Component, effect, inject, input, model, output, signal, viewChild, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AXPPageStatus, AXPWidgetContainerComponent, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';\nimport { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { get, isEqual } from 'lodash-es';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPLayoutConversionService } from './layout-conversion.service';\nimport { Subject, debounceTime, distinctUntilChanged, startWith } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/platform/layout/widget-core\";\nimport * as i2 from \"@acorex/components/form\";\nexport class AXPLayoutRendererComponent {\n constructor() {\n this.evaluatorService = inject(AXPExpressionEvaluatorService);\n this.conversionService = inject(AXPLayoutConversionService);\n /**\n * Tracks the latest scheduled evaluation to ensure last-write-wins for async evaluate\n */\n this.evaluationRunId = 0;\n /**\n * RxJS subjects for context management\n */\n this.contextUpdateSubject = new Subject();\n this.contextChangeSubject = new Subject();\n /**\n * Cache for expression evaluation results\n */\n this.expressionCache = new Map();\n /**\n * Cache for widget tree comparisons\n */\n this.widgetTreeCache = new Map();\n /**\n * Last layout hash for change detection\n */\n this.lastLayoutHash = '';\n //#region ---- Inputs ----\n /**\n * Form definition containing groups and fields OR widget tree\n */\n this.layout = input.required(...(ngDevMode ? [{ debugName: \"layout\" }] : []));\n /**\n * Form context/model data\n */\n this.context = model({}, ...(ngDevMode ? [{ debugName: \"context\" }] : []));\n /**\n * Form appearance and density styling (normal, compact, spacious)\n */\n this.look = input('fieldset', ...(ngDevMode ? [{ debugName: \"look\" }] : []));\n /**\n * Default form mode. Can be overridden by section/group and field.\n */\n this.mode = input('edit', ...(ngDevMode ? [{ debugName: \"mode\" }] : []));\n //#endregion\n //#region ---- Widget Tree Conversion ----\n this.widgetTree = signal(null, ...(ngDevMode ? [{ debugName: \"widgetTree\" }] : []));\n /**\n * Convert and evaluate data when inputs change (optimized with RxJS)\n */\n this.conversionEffect = effect(() => {\n const inputData = this.layout();\n const ctx = this.internalContext();\n const look = this.look();\n const runId = ++this.evaluationRunId;\n // Generate layout hash for change detection\n const layoutHash = this.generateLayoutHash(inputData, look);\n // Skip if layout hasn't changed\n if (layoutHash === this.lastLayoutHash && this.widgetTree()) {\n return;\n }\n this.lastLayoutHash = layoutHash;\n (async () => {\n // First evaluate expressions if needed\n const evaluated = await this.expressionEvaluator(inputData, ctx);\n // Ignore stale results\n if (runId !== this.evaluationRunId) {\n return;\n }\n // Convert to widget tree (this will also apply the layout look)\n const tree = evaluated;\n // Update widget tree\n const prev = this.widgetTree();\n if (!isEqual(prev, tree)) {\n tree.mode = this.mode();\n this.widgetTree.set(tree);\n }\n })();\n }, ...(ngDevMode ? [{ debugName: \"conversionEffect\" }] : []));\n //#endregion\n //#region ---- Outputs ----\n /**\n * Emitted when context change is initiated\n */\n this.contextInitiated = output();\n /**\n * Emitted when form becomes valid/invalid\n */\n this.validityChange = output();\n //#endregion\n //#region ---- Properties ----\n this.form = viewChild(AXFormComponent, ...(ngDevMode ? [{ debugName: \"form\" }] : []));\n this.container = viewChild(AXPWidgetContainerComponent, ...(ngDevMode ? [{ debugName: \"container\" }] : []));\n /**\n * Internal context signal for reactivity\n */\n this.internalContext = signal({}, ...(ngDevMode ? [{ debugName: \"internalContext\" }] : []));\n //#endregion\n //#region ---- Effects ----\n /**\n * Effect to sync context changes from external to internal (optimized with RxJS)\n */\n this.#contextSyncEffect = effect(() => {\n const ctx = this.context() ?? {};\n this.contextUpdateSubject.next(ctx);\n }, ...(ngDevMode ? [{ debugName: \"#contextSyncEffect\" }] : []));\n /**\n * Effect to handle widget tree status changes\n */\n this.#widgetStatusEffect = effect(() => {\n const widgetTree = this.widgetTree();\n if (widgetTree) {\n this.container()?.builderService.setStatus(AXPPageStatus.Rendered);\n }\n }, ...(ngDevMode ? [{ debugName: \"#widgetStatusEffect\" }] : []));\n }\n async expressionEvaluator(expression, context) {\n // Check if it's a form definition that needs conversion\n if (this.isFormDefinition(expression)) {\n return this.conversionService.convertFormDefinition(expression);\n }\n // Generate cache key using a more efficient method\n const cacheKey = this.generateCacheKey(expression, context);\n // Check cache first\n if (this.expressionCache.has(cacheKey)) {\n return this.expressionCache.get(cacheKey);\n }\n const scope = {\n context: {\n eval: (path) => get(context, path),\n },\n };\n const result = await this.evaluatorService.evaluate(expression, scope);\n // Cache result with LRU-like behavior\n if (this.expressionCache.size > 50) {\n // Clear half the cache when it gets too large\n const keysToDelete = Array.from(this.expressionCache.keys()).slice(0, 25);\n keysToDelete.forEach(key => this.expressionCache.delete(key));\n }\n this.expressionCache.set(cacheKey, result);\n return result;\n }\n //#endregion\n //#region ---- Lifecycle Methods ----\n ngOnInit() {\n // Initialize internal context with input context\n this.internalContext.set(this.context() ?? {});\n // Setup RxJS streams for context management\n this.setupContextStreams();\n }\n //#endregion\n //#region ---- Effects ----\n /**\n * Effect to sync context changes from external to internal (optimized with RxJS)\n */\n #contextSyncEffect;\n /**\n * Effect to handle widget tree status changes\n */\n #widgetStatusEffect;\n //#endregion\n //#region ---- Event Handlers ----\n /**\n * Handle context change events from widget container (optimized with RxJS)\n */\n handleContextChanged(event) {\n if (event.state === 'initiated') {\n this.contextInitiated.emit(event.data);\n }\n else {\n this.contextChangeSubject.next(event.data ?? {});\n }\n }\n //#endregion\n //#region ---- Public Methods ----\n /**\n * Get the form component instance\n */\n getForm() {\n return this.form();\n }\n /**\n * Get the widget container component instance\n */\n getContainer() {\n return this.container();\n }\n /**\n * Get current form context\n */\n getContext() {\n return this.internalContext();\n }\n /**\n * Update form context programmatically\n */\n updateContext(context) {\n this.internalContext.set(context);\n }\n /**\n * Get the current widget tree\n */\n getWidgetTree() {\n return this.widgetTree();\n }\n /**\n * Validate the form\n */\n async validate() {\n const form = this.form();\n if (form) {\n const isValid = await form.validate();\n this.validityChange.emit(isValid.result);\n return isValid;\n }\n return {\n result: false,\n messages: [],\n rules: [],\n };\n }\n //#endregion\n //#region ---- RxJS Stream Setup ----\n /**\n * Setup RxJS streams for context management\n */\n setupContextStreams() {\n // Debounced context updates from external source\n this.contextUpdateSubject\n .pipe(debounceTime(16), // ~60fps\n distinctUntilChanged((prev, curr) => isEqual(prev, curr)), startWith(this.context() ?? {}))\n .subscribe(ctx => {\n this.internalContext.set(ctx);\n });\n // Debounced context changes from widgets\n this.contextChangeSubject\n .pipe(debounceTime(16), // ~60fps\n distinctUntilChanged((prev, curr) => isEqual(prev, curr)))\n .subscribe(ctx => {\n this.internalContext.set(ctx);\n // Update the model signal directly - it will emit change events automatically\n this.context.set(this.internalContext());\n });\n }\n //#endregion\n //#region ---- Type Guards ----\n /**\n * Type guard to check if the input is a form definition\n */\n isFormDefinition(data) {\n return data &&\n typeof data === 'object' &&\n 'groups' in data &&\n Array.isArray(data.groups);\n }\n //#endregion\n //#region ---- Utility Methods ----\n /**\n * Generate layout hash for change detection (short hash)\n */\n generateLayoutHash(layout, look) {\n if (!layout)\n return '';\n // Generate short hash for large layout strings\n const layoutStr = typeof layout === 'string' ? layout : JSON.stringify(layout);\n const layoutHash = this.simpleHash(layoutStr);\n return `${layoutHash}|${look}`;\n }\n /**\n * Generate cache key for expression evaluation (short hash)\n */\n generateCacheKey(expression, context) {\n // Use short hash for better performance\n const exprStr = typeof expression === 'string' ? expression : JSON.stringify(expression);\n const exprHash = this.simpleHash(exprStr);\n const ctxHash = this.generateContextHash(context);\n return `${exprHash}|${ctxHash}`;\n }\n /**\n * Generate a simple hash for context change detection\n */\n generateContextHash(context) {\n if (!context || typeof context !== 'object') {\n return String(context);\n }\n // Generate short hash for context\n const keys = Object.keys(context).sort();\n const contextStr = keys.map(key => `${key}:${context[key]}`).join('|');\n return this.simpleHash(contextStr);\n }\n /**\n * Simple hash function for generating short keys\n */\n simpleHash(str) {\n let hash = 0;\n if (str.length === 0)\n return hash.toString();\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n // Convert to positive hex string\n return Math.abs(hash).toString(16);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXPLayoutRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXPLayoutRendererComponent, isStandalone: true, selector: \"axp-layout-renderer\", inputs: { layout: { classPropertyName: \"layout\", publicName: \"layout\", isSignal: true, isRequired: true, transformFunction: null }, context: { classPropertyName: \"context\", publicName: \"context\", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: \"look\", publicName: \"look\", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: \"mode\", publicName: \"mode\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { context: \"contextChange\", contextInitiated: \"contextInitiated\", validityChange: \"validityChange\" }, viewQueries: [{ propertyName: \"form\", first: true, predicate: AXFormComponent, descendants: true, isSignal: true }, { propertyName: \"container\", first: true, predicate: AXPWidgetContainerComponent, descendants: true, isSignal: true }], ngImport: i0, template: `\n <ax-form>\n <axp-widgets-container [context]=\"internalContext()\" (onContextChanged)=\"handleContextChanged($event)\">\n @if (widgetTree()) {\n <ng-container axp-widget-renderer [node]=\"widgetTree()!\" [mode]=\"mode()\"></ng-container>\n }\n </axp-widgets-container>\n </ax-form>\n `, isInline: true, styles: [\":host{display:block;width:100%}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"ngmodule\", type: AXPWidgetCoreModule }, { kind: \"component\", type: i1.AXPWidgetContainerComponent, selector: \"axp-widgets-container\", inputs: [\"context\", \"functions\"], outputs: [\"onContextChanged\"] }, { kind: \"directive\", type: i1.AXPWidgetRendererDirective, selector: \"[axp-widget-renderer]\", inputs: [\"parentNode\", \"index\", \"mode\", \"node\"], outputs: [\"onOptionsChanged\", \"onValueChanged\"], exportAs: [\"widgetRenderer\"] }, { kind: \"ngmodule\", type: AXFormModule }, { kind: \"component\", type: i2.AXFormComponent, selector: \"ax-form\", inputs: [\"labelMode\", \"look\", \"messageStyle\", \"updateOn\"], outputs: [\"onValidate\", \"updateOnChange\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXPLayoutRendererComponent, decorators: [{\n type: Component,\n args: [{ selector: 'axp-layout-renderer', standalone: true, imports: [CommonModule, AXPWidgetCoreModule, AXFormModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `\n <ax-form>\n <axp-widgets-container [context]=\"internalContext()\" (onContextChanged)=\"handleContextChanged($event)\">\n @if (widgetTree()) {\n <ng-container axp-widget-renderer [node]=\"widgetTree()!\" [mode]=\"mode()\"></ng-container>\n }\n </axp-widgets-container>\n </ax-form>\n `, styles: [\":host{display:block;width:100%}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9sYXlvdXQtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BJLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLDJCQUEyQixFQUFtQyxtQkFBbUIsRUFBaUIsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0SyxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSw2QkFBNkIsRUFBK0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVuRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUF1QjlFLE1BQU0sT0FBTywwQkFBMEI7SUFyQnZDO1FBdUJVLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3pELHNCQUFpQixHQUFHLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRS9EOztXQUVHO1FBQ0ssb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFFNUI7O1dBRUc7UUFDSyx5QkFBb0IsR0FBRyxJQUFJLE9BQU8sRUFBTyxD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cnQgeyBDb21wb25lbnQsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBQYWdlU3RhdHVzLCBBWFBXaWRnZXRDb250YWluZXJDb21wb25lbnQsIEFYUFdpZGdldENvcmVDb250ZXh0Q2hhbmdlRXZlbnQsIEFYUFdpZGdldENvcmVNb2R1bGUsIEFYUFdpZGdldE5vZGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBBWEZvcm1Db21wb25lbnQsIEFYRm9ybU1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9mb3JtJztcbmltcG9ydCB7IGdldCwgaXNFcXVhbCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2VydmljZSwgQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb3JlJztcbmltcG9ydCB7IEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvbiwgQVhQRHluYW1pY0Zvcm1Mb29rLCBBWFBEeW5hbWljRm9ybU1vZGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcbmltcG9ydCB7IEFYUExheW91dENvbnZlcnNpb25TZXJ2aWNlIH0gZnJvbSAnLi9sYXlvdXQtY29udmVyc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFYVmFsaWRhdGlvblN1bW1hcnkgfSBmcm9tICdAYWNvcmV4L2NvcmUvdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhwLWxheW91dC1yZW5kZXJlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEFYUFdpZGdldENvcmVNb2R1bGUsIEFYRm9ybU1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxheC1mb3JtPlxuICAgICAgPGF4cC13aWRnZXRzLWNvbnRhaW5lciBbY29udGV4dF09XCJpbnRlcm5hbENvbnRleHQoKVwiIChvbkNvbnRleHRDaGFuZ2VkKT1cImhhbmRsZUNvbnRleHRDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgQGlmICh3aWRnZXRUcmVlKCkpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyIGF4cC13aWRnZXQtcmVuZGVyZXIgW25vZGVdPVwid2lkZ2V0VHJlZSgpIVwiIFttb2RlXT1cIm1vZGUoKVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICA8L2F4cC13aWRnZXRzLWNvbnRhaW5lcj5cbiAgICA8L2F4LWZvcm0+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgQVhQTGF5b3V0UmVuZGVyZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIHByaXZhdGUgZXZhbHVhdG9yU2VydmljZSA9IGluamVjdChBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2VydmljZSk7XG4gIHByaXZhdGUgY29udmVyc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQTGF5b3V0Q29udmVyc2lvblNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBUcmFja3MgdGhlIGxhdGVzdCBzY2hlZHVsZWQgZXZhbHVhdGlvbiB0byBlbnN1cmUgbGFzdC13cml0ZS13aW5zIGZvciBhc3luYyBldmFsdWF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBldmFsdWF0aW9uUnVuSWQgPSAwO1xuXG4gIC8qKlxuICAgKiBSeEpTIHN1YmplY3RzIGZvciBjb250ZXh0IG1hbmFnZW1lbnRcbiAgICovXG4gIHByaXZhdGUgY29udGV4dFVwZGF0ZVN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHByaXZhdGUgY29udGV4dENoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhY2hlIGZvciBleHByZXNzaW9uIGV2YWx1YXRpb24gcmVzdWx0c1xuICAgKi9cbiAgcHJpdmF0ZSBleHByZXNzaW9uQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWNoZSBmb3Igd2lkZ2V0IHRyZWUgY29tcGFyaXNvbnNcbiAgICovXG4gIHByaXZhdGUgd2lkZ2V0VHJlZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdpZGdldE5vZGU+KCk7XG5cbiAgLyoqXG4gICAqIExhc3QgbGF5b3V0IGhhc2ggZm9yIGNoYW5nZSBkZXRlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgbGFzdExheW91dEhhc2ggPSAnJztcblxuICAvLyNyZWdpb24gLS0tLSAgIElucHV0cyAgIC0tLS1cblxuICAvKipcbiAgICogRm9ybSBkZWZpbml0aW9uIGNvbnRhaW5pbmcgZ3JvdXBzIGFuZCBmaWVsZHMgT1Igd2lkZ2V0IHRyZWVcbiAgICovXG4gIGxheW91dCA9IGlucHV0LnJlcXVpcmVkPEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvbiB8IEFYUFdpZGdldE5vZGU+KCk7XG5cbiAgLyoqXG4gICAqIEZvcm0gY29udGV4dC9tb2RlbCBkYXRhXG4gICAqL1xuICBjb250ZXh0ID0gbW9kZWw8YW55Pih7fSk7XG5cbiAgLyoqXG4gICAqIEZvcm0gYXBwZWFyYW5jZSBhbmQgZGVuc2l0eSBzdHlsaW5nIChub3JtYWwsIGNvbXBhY3QsIHNwYWNpb3VzKVxuICAgKi9cbiAgbG9vayA9IGlucHV0PEFYUER5bmFtaWNGb3JtTG9vaz4oJ2ZpZWxkc2V0Jyk7XG5cblxuICAvKipcbiAgICogRGVmYXVsdCBmb3JtIG1vZGUuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHNlY3Rpb24vZ3JvdXAgYW5kIGZpZWxkLlxuICAgKi9cbiAgbW9kZSA9IGlucHV0PEFYUER5bmFtaWNGb3JtTW9kZT4oJ2VkaXQnKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFdpZGdldCBUcmVlIENvbnZlcnNpb24gICAtLS0tXG5cblxuXG4gIHByb3RlY3RlZCB3aWRnZXRUcmVlID0gc2lnbmFsPEFYUFdpZGdldE5vZGUgfCBudWxsPihudWxsKTtcblxuICAvKipcbiAgICogQ29udmVydCBhbmQgZXZhbHVhdGUgZGF0YSB3aGVuIGlucHV0cyBjaGFuZ2UgKG9wdGltaXplZCB3aXRoIFJ4SlMpXG4gICAqL1xuICBjb252ZXJzaW9uRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpbnB1dERhdGEgPSB0aGlzLmxheW91dCgpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuaW50ZXJuYWxDb250ZXh0KCk7XG4gICAgY29uc3QgbG9vayA9IHRoaXMubG9vaygpO1xuICAgIGNvbnN0IHJ1bklkID0gKyt0aGlzLmV2YWx1YXRpb25SdW5JZDtcblxuICAgIC8vIEdlbmVyYXRlIGxheW91dCBoYXNoIGZvciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgY29uc3QgbGF5b3V0SGFzaCA9IHRoaXMuZ2VuZXJhdGVMYXlvdXRIYXNoKGlucHV0RGF0YSwgbG9vayk7XG5cbiAgICAvLyBTa2lwIGlmIGxheW91dCBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChsYXlvdXRIYXNoID09PSB0aGlzLmxhc3RMYXlvdXRIYXNoICYmIHRoaXMud2lkZ2V0VHJlZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0TGF5b3V0SGFzaCA9IGxheW91dEhhc2g7XG5cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gRmlyc3QgZXZhbHVhdGUgZXhwcmVzc2lvbnMgaWYgbmVlZGVkXG4gICAgICBjb25zdCBldmFsdWF0ZWQgPSBhd2FpdCB0aGlzLmV4cHJlc3Npb25FdmFsdWF0b3IoaW5wdXREYXRhLCBjdHgpO1xuXG4gICAgICAvLyBJZ25vcmUgc3RhbGUgcmVzdWx0c1xuICAgICAgaWYgKHJ1bklkICE9PSB0aGlzLmV2YWx1YXRpb25SdW5JZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnZlcnQgdG8gd2lkZ2V0IHRyZWUgKHRoaXMgd2lsbCBhbHNvIGFwcGx5IHRoZSBsYXlvdXQgbG9vaylcbiAgICAgIGNvbnN0IHRyZWUgPSBldmFsdWF0ZWQ7XG5cbiAgICAgIC8vIFVwZGF0ZSB3aWRnZXQgdHJlZVxuICAgICAgY29uc3QgcHJldiA9IHRoaXMud2lkZ2V0VHJlZSgpO1xuICAgICAgaWYgKCFpc0VxdWFsKHByZXYsIHRyZWUpKSB7XG4gICAgICAgIHRyZWUubW9kZSA9IHRoaXMubW9kZSgpO1xuICAgICAgICB0aGlzLndpZGdldFRyZWUuc2V0KHRyZWUpO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBhc3luYyBleHByZXNzaW9uRXZhbHVhdG9yKGV4cHJlc3Npb246IGFueSwgY29udGV4dDogYW55KSB7XG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIGZvcm0gZGVmaW5pdGlvbiB0aGF0IG5lZWRzIGNvbnZlcnNpb25cbiAgICBpZiAodGhpcy5pc0Zvcm1EZWZpbml0aW9uKGV4cHJlc3Npb24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJzaW9uU2VydmljZS5jb252ZXJ0Rm9ybURlZmluaXRpb24oZXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgY2FjaGUga2V5IHVzaW5nIGEgbW9yZSBlZmZpY2llbnQgbWV0aG9kXG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoZXhwcmVzc2lvbiwgY29udGV4dCk7XG5cbiAgICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICAgIGlmICh0aGlzLmV4cHJlc3Npb25DYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uQ2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBzY29wZTogQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlID0ge1xuICAgICAgY29udGV4dDoge1xuICAgICAgICBldmFsOiAocGF0aDogc3RyaW5nKSA9PiBnZXQoY29udGV4dCwgcGF0aCksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV2YWx1YXRvclNlcnZpY2UuZXZhbHVhdGUoZXhwcmVzc2lvbiwgc2NvcGUpO1xuXG4gICAgLy8gQ2FjaGUgcmVzdWx0IHdpdGggTFJVLWxpa2UgYmVoYXZpb3JcbiAgICBpZiAodGhpcy5leHByZXNzaW9uQ2FjaGUuc2l6ZSA+IDUwKSB7XG4gICAgICAvLyBDbGVhciBoYWxmIHRoZSBjYWNoZSB3aGVuIGl0IGdldHMgdG9vIGxhcmdlXG4gICAgICBjb25zdCBrZXlzVG9EZWxldGUgPSBBcnJheS5mcm9tKHRoaXMuZXhwcmVzc2lvbkNhY2hlLmtleXMoKSkuc2xpY2UoMCwgMjUpO1xuICAgICAga2V5c1RvRGVsZXRlLmZvckVhY2goa2V5ID0+IHRoaXMuZXhwcmVzc2lvbkNhY2hlLmRlbGV0ZShrZXkpKTtcbiAgICB9XG4gICAgdGhpcy5leHByZXNzaW9uQ2FjaGUuc2V0KGNhY2hlS2V5LCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBPdXRwdXRzICAgLS0tLVxuXG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBjb250ZXh0IGNoYW5nZSBpcyBpbml0aWF0ZWRcbiAgICovXG4gIGNvbnRleHRJbml0aWF0ZWQgPSBvdXRwdXQ8YW55PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gZm9ybSBiZWNvbWVzIHZhbGlkL2ludmFsaWRcbiAgICovXG4gIHZhbGlkaXR5Q2hhbmdlID0gb3V0cHV0PGJvb2xlYW4+KCk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQcm9wZXJ0aWVzICAgLS0tLVxuXG4gIHByaXZhdGUgZm9ybSA9IHZpZXdDaGlsZChBWEZvcm1Db21wb25lbnQpO1xuICBwcml2YXRlIGNvbnRhaW5lciA9IHZpZXdDaGlsZChBWFBXaWRnZXRDb250YWluZXJDb21wb25lbnQpO1xuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBjb250ZXh0IHNpZ25hbCBmb3IgcmVhY3Rpdml0eVxuICAgKi9cbiAgcHJvdGVjdGVkIGludGVybmFsQ29udGV4dCA9IHNpZ25hbDxhbnk+KHt9KTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIExpZmVjeWNsZSBNZXRob2RzICAgLS0tLVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgaW50ZXJuYWwgY29udGV4dCB3aXRoIGlucHV0IGNvbnRleHRcbiAgICB0aGlzLmludGVybmFsQ29udGV4dC5zZXQodGhpcy5jb250ZXh0KCkgPz8ge30pO1xuXG4gICAgLy8gU2V0dXAgUnhKUyBzdHJlYW1zIGZvciBjb250ZXh0IG1hbmFnZW1lbnRcbiAgICB0aGlzLnNldHVwQ29udGV4dFN0cmVhbXMoKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgRWZmZWN0cyAgIC0tLS1cblxuICAvKipcbiAgICogRWZmZWN0IHRvIHN5bmMgY29udGV4dCBjaGFuZ2VzIGZyb20gZXh0ZXJuYWwgdG8gaW50ZXJuYWwgKG9wdGltaXplZCB3aXRoIFJ4SlMpXG4gICAqL1xuICAjY29udGV4dFN5bmNFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY29udGV4dCgpID8/IHt9O1xuICAgIHRoaXMuY29udGV4dFVwZGF0ZVN1YmplY3QubmV4dChjdHgpO1xuICB9KTtcblxuICAvKipcbiAgICogRWZmZWN0IHRvIGhhbmRsZSB3aWRnZXQgdHJlZSBzdGF0dXMgY2hhbmdlc1xuICAgKi9cbiAgI3dpZGdldFN0YXR1c0VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgd2lkZ2V0VHJlZSA9IHRoaXMud2lkZ2V0VHJlZSgpO1xuICAgIGlmICh3aWRnZXRUcmVlKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lcigpPy5idWlsZGVyU2VydmljZS5zZXRTdGF0dXMoQVhQUGFnZVN0YXR1cy5SZW5kZXJlZCk7XG4gICAgfVxuICB9KTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIEV2ZW50IEhhbmRsZXJzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY29udGV4dCBjaGFuZ2UgZXZlbnRzIGZyb20gd2lkZ2V0IGNvbnRhaW5lciAob3B0aW1pemVkIHdpdGggUnhKUylcbiAgICovXG4gIHByb3RlY3RlZCBoYW5kbGVDb250ZXh0Q2hhbmdlZChldmVudDogQVhQV2lkZ2V0Q29yZUNvbnRleHRDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5zdGF0ZSA9PT0gJ2luaXRpYXRlZCcpIHtcbiAgICAgIHRoaXMuY29udGV4dEluaXRpYXRlZC5lbWl0KGV2ZW50LmRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRleHRDaGFuZ2VTdWJqZWN0Lm5leHQoZXZlbnQuZGF0YSA/PyB7fSk7XG4gICAgfVxuICB9XG5cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZvcm0gY29tcG9uZW50IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgZ2V0Rm9ybSgpOiBBWEZvcm1Db21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdpZGdldCBjb250YWluZXIgY29tcG9uZW50IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29udGFpbmVyKCk6IEFYUFdpZGdldENvbnRhaW5lckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZm9ybSBjb250ZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0Q29udGV4dCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmludGVybmFsQ29udGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBmb3JtIGNvbnRleHQgcHJvZ3JhbW1hdGljYWxseVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUNvbnRleHQoY29udGV4dDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcm5hbENvbnRleHQuc2V0KGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB3aWRnZXQgdHJlZVxuICAgKi9cbiAgcHVibGljIGdldFdpZGdldFRyZWUoKTogQVhQV2lkZ2V0Tm9kZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLndpZGdldFRyZWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgZm9ybVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlKCk6IFByb21pc2U8QVhWYWxpZGF0aW9uU3VtbWFyeT4ge1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm0oKTtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGZvcm0udmFsaWRhdGUoKTtcbiAgICAgIHRoaXMudmFsaWRpdHlDaGFuZ2UuZW1pdChpc1ZhbGlkLnJlc3VsdCk7XG4gICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICBtZXNzYWdlczogW10sXG4gICAgICBydWxlczogW10sXG4gICAgfSBhcyBBWFZhbGlkYXRpb25TdW1tYXJ5O1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBSeEpTIFN0cmVhbSBTZXR1cCAgIC0tLS1cblxuICAvKipcbiAgICogU2V0dXAgUnhKUyBzdHJlYW1zIGZvciBjb250ZXh0IG1hbmFnZW1lbnRcbiAgICovXG4gIHByaXZhdGUgc2V0dXBDb250ZXh0U3RyZWFtcygpOiB2b2lkIHtcbiAgICAvLyBEZWJvdW5jZWQgY29udGV4dCB1cGRhdGVzIGZyb20gZXh0ZXJuYWwgc291cmNlXG4gICAgdGhpcy5jb250ZXh0VXBkYXRlU3ViamVjdFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgxNiksIC8vIH42MGZwc1xuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gaXNFcXVhbChwcmV2LCBjdXJyKSksXG4gICAgICAgIHN0YXJ0V2l0aCh0aGlzLmNvbnRleHQoKSA/PyB7fSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoY3R4ID0+IHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbENvbnRleHQuc2V0KGN0eCk7XG4gICAgICB9KTtcblxuICAgIC8vIERlYm91bmNlZCBjb250ZXh0IGNoYW5nZXMgZnJvbSB3aWRnZXRzXG4gICAgdGhpcy5jb250ZXh0Q2hhbmdlU3ViamVjdFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgxNiksIC8vIH42MGZwc1xuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gaXNFcXVhbChwcmV2LCBjdXJyKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoY3R4ID0+IHtcbiAgICAgICAgdGhpcy5pbnRlcm5hbENvbnRleHQuc2V0KGN0eCk7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwgc2lnbmFsIGRpcmVjdGx5IC0gaXQgd2lsbCBlbWl0IGNoYW5nZSBldmVudHMgYXV0b21hdGljYWxseVxuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KHRoaXMuaW50ZXJuYWxDb250ZXh0KCkpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFR5cGUgR3VhcmRzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIHRoZSBpbnB1dCBpcyBhIGZvcm0gZGVmaW5pdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBpc0Zvcm1EZWZpbml0aW9uKGRhdGE6IGFueSk6IGRhdGEgaXMgQVhQRHluYW1pY0Zvcm1EZWZpbml0aW9uIHtcbiAgICByZXR1cm4gZGF0YSAmJlxuICAgICAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmXG4gICAgICAnZ3JvdXBzJyBpbiBkYXRhICYmXG4gICAgICBBcnJheS5pc0FycmF5KGRhdGEuZ3JvdXBzKTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgVXRpbGl0eSBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBsYXlvdXQgaGFzaCBmb3IgY2hhbmdlIGRldGVjdGlvbiAoc2hvcnQgaGFzaClcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVMYXlvdXRIYXNoKGxheW91dDogYW55LCBsb29rOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghbGF5b3V0KSByZXR1cm4gJyc7XG5cbiAgICAvLyBHZW5lcmF0ZSBzaG9ydCBoYXNoIGZvciBsYXJnZSBsYXlvdXQgc3RyaW5nc1xuICAgIGNvbnN0IGxheW91dFN0ciA9IHR5cGVvZiBsYXlvdXQgPT09ICdzdHJpbmcnID8gbGF5b3V0IDogSlNPTi5zdHJpbmdpZnkobGF5b3V0KTtcbiAgICBjb25zdCBsYXlvdXRIYXNoID0gdGhpcy5zaW1wbGVIYXNoKGxheW91dFN0cik7XG4gICAgcmV0dXJuIGAke2xheW91dEhhc2h9fCR7bG9va31gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGNhY2hlIGtleSBmb3IgZXhwcmVzc2lvbiBldmFsdWF0aW9uIChzaG9ydCBoYXNoKVxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhY2hlS2V5KGV4cHJlc3Npb246IGFueSwgY29udGV4dDogYW55KTogc3RyaW5nIHtcbiAgICAvLyBVc2Ugc2hvcnQgaGFzaCBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgY29uc3QgZXhwclN0ciA9IHR5cGVvZiBleHByZXNzaW9uID09PSAnc3RyaW5nJyA/IGV4cHJlc3Npb24gOiBKU09OLnN0cmluZ2lmeShleHByZXNzaW9uKTtcbiAgICBjb25zdCBleHBySGFzaCA9IHRoaXMuc2ltcGxlSGFzaChleHByU3RyKTtcbiAgICBjb25zdCBjdHhIYXNoID0gdGhpcy5nZW5lcmF0ZUNvbnRleHRIYXNoKGNvbnRleHQpO1xuICAgIHJldHVybiBgJHtleHBySGFzaH18JHtjdHhIYXNofWA7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBzaW1wbGUgaGFzaCBmb3IgY29udGV4dCBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlQ29udGV4dEhhc2goY29udGV4dDogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWNvbnRleHQgfHwgdHlwZW9mIGNvbnRleHQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGNvbnRleHQpO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIHNob3J0IGhhc2ggZm9yIGNvbnRleHRcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY29udGV4dCkuc29ydCgpO1xuICAgIGNvbnN0IGNvbnRleHRTdHIgPSBrZXlzLm1hcChrZXkgPT4gYCR7a2V5fToke2NvbnRleHRba2V5XX1gKS5qb2luKCd8Jyk7XG4gICAgcmV0dXJuIHRoaXMuc2ltcGxlSGFzaChjb250ZXh0U3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW1wbGUgaGFzaCBmdW5jdGlvbiBmb3IgZ2VuZXJhdGluZyBzaG9ydCBrZXlzXG4gICAqL1xuICBwcml2YXRlIHNpbXBsZUhhc2goc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBoYXNoID0gMDtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBjaGFyO1xuICAgICAgaGFzaCA9IGhhc2ggJiBoYXNoOyAvLyBDb252ZXJ0IHRvIDMyLWJpdCBpbnRlZ2VyXG4gICAgfVxuXG4gICAgLy8gQ29udmVydCB0byBwb3NpdGl2ZSBoZXggc3RyaW5nXG4gICAgcmV0dXJuIE1hdGguYWJzKGhhc2gpLnRvU3RyaW5nKDE2KTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxufVxuIl19","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { AXPLayoutBuilderService } from './layout-builder.service';\nimport { AXPLayoutRendererComponent } from './layout-renderer.component';\nimport * as i0 from \"@angular/core\";\nexport class LayoutBuilderModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: LayoutBuilderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.3\", ngImport: i0, type: LayoutBuilderModule, imports: [CommonModule, AXPLayoutRendererComponent], exports: [AXPLayoutRendererComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: LayoutBuilderModule, providers: [AXPLayoutBuilderService], imports: [CommonModule, AXPLayoutRendererComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: LayoutBuilderModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule, AXPLayoutRendererComponent],\n providers: [AXPLayoutBuilderService],\n exports: [AXPLayoutRendererComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlci9zcmMvbGliL2xheW91dC1idWlsZGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7QUFPekUsTUFBTSxPQUFPLG1CQUFtQjs4R0FBbkIsbUJBQW1COytHQUFuQixtQkFBbUIsWUFKcEIsWUFBWSxFQUFFLDBCQUEwQixhQUV4QywwQkFBMEI7K0dBRXpCLG1CQUFtQixhQUhuQixDQUFDLHVCQUF1QixDQUFDLFlBRDFCLFlBQVksRUFBRSwwQkFBMEI7OzJGQUl2QyxtQkFBbUI7a0JBTC9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLDBCQUEwQixDQUFDO29CQUNuRCxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztvQkFDcEMsT0FBTyxFQUFFLENBQUMsMEJBQTBCLENBQUM7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWFBMYXlvdXRCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vbGF5b3V0LWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBWFBMYXlvdXRSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEFYUExheW91dFJlbmRlcmVyQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbQVhQTGF5b3V0QnVpbGRlclNlcnZpY2VdLFxuICBleHBvcnRzOiBbQVhQTGF5b3V0UmVuZGVyZXJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBMYXlvdXRCdWlsZGVyTW9kdWxlIHt9XG4iXX0=","export {};\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9idWlsZGVyL3NyYy9saWIvbGF5b3V0LWJ1aWxkZXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQXluQkEsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYRGF0YVNvdXJjZSB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBvcHVwU2l6ZVR5cGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHtcbiAgQVhQQWN0aW9uTWVudUl0ZW0sXG4gIEFYUEV4cHJlc3Npb24sXG4gIEFYUEdyaWRMYXlvdXRPcHRpb25zLFxuICBBWFBPcHRpb25zRGF0YSxcbiAgQVhQVmFsaWRhdGlvblJ1bGVzLFxufSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQRGlhbG9nUmVmIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBWFBXaWRnZXROb2RlLCBBWFBXaWRnZXRSZW5kZXJNb2RlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuXG4vLyNyZWdpb24gLS0tLSAgIFdpZGdldCBPcHRpb25zIEludGVyZmFjZXMgICAtLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0V2lkZ2V0T3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmFsdWVXaWRnZXRPcHRpb25zIGV4dGVuZHMgTGF5b3V0V2lkZ2V0T3B0aW9ucyB7XG4gIHBhdGg6IHN0cmluZzsgLy8gUmVxdWlyZWQgZm9yIGFsbCB2YWx1ZSB3aWRnZXRzXG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcbiAgdmFsaWRhdGlvbnM/OiBBWFBWYWxpZGF0aW9uUnVsZXM7XG59XG5cbi8vIFdpZGdldCB0eXBlIG9wdGlvbnMgLSBvbmx5IGludGVybmFsIHdpZGdldCBiZWhhdmlvciwgbm8gc3R5bGluZy9sYXlvdXRcbmV4cG9ydCBpbnRlcmZhY2UgVGV4dEJveE9wdGlvbnMgZXh0ZW5kcyBWYWx1ZVdpZGdldE9wdGlvbnMge1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xuICBtaW5MZW5ndGg/OiBudW1iZXI7XG4gIHByZWZpeD86IHN0cmluZztcbiAgc3VmZml4Pzogc3RyaW5nO1xuICBjbGVhckJ1dHRvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtYmVyQm94T3B0aW9ucyBleHRlbmRzIFZhbHVlV2lkZ2V0T3B0aW9ucyB7XG4gIG1pbj86IG51bWJlcjtcbiAgbWF4PzogbnVtYmVyO1xuICBzdGVwPzogbnVtYmVyO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgZm9ybWF0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdEJveE9wdGlvbnMgZXh0ZW5kcyBWYWx1ZVdpZGdldE9wdGlvbnMge1xuICBkYXRhU291cmNlOiBhbnlbXSB8ICgoKSA9PiBhbnlbXSkgfCAoKCkgPT4gUHJvbWlzZTxhbnlbXT4pIHwgQVhEYXRhU291cmNlPGFueT47XG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XG4gIHRleHRGaWVsZD86IHN0cmluZztcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gIGNsZWFyQnV0dG9uPzogYm9vbGVhbjtcbiAgYWxsb3dTZWFyY2g/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGVUaW1lQm94T3B0aW9ucyBleHRlbmRzIFZhbHVlV2lkZ2V0T3B0aW9ucyB7XG4gIHR5cGU/OiAnZGF0ZScgfCAndGltZScgfCAnZGF0ZXRpbWUnO1xuICBmb3JtYXQ/OiBzdHJpbmc7XG4gIG1pbj86IERhdGUgfCBzdHJpbmc7XG4gIG1heD86IERhdGUgfCBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBjbGVhckJ1dHRvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9nZ2xlU3dpdGNoT3B0aW9ucyBleHRlbmRzIFZhbHVlV2lkZ2V0T3B0aW9ucyB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICB0cnVlVGV4dD86IHN0cmluZztcbiAgZmFsc2VUZXh0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExhcmdlVGV4dEJveE9wdGlvbnMgZXh0ZW5kcyBWYWx1ZVdpZGdldE9wdGlvbnMge1xuICByb3dzPzogbnVtYmVyO1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG4gIG1pbkxlbmd0aD86IG51bWJlcjtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHJlc2l6YWJsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JCb3hPcHRpb25zIGV4dGVuZHMgVmFsdWVXaWRnZXRPcHRpb25zIHtcbiAgZm9ybWF0PzogJ2hleCcgfCAncmdiJyB8ICdoc2wnO1xuICBzaG93QWxwaGE/OiBib29sZWFuO1xuICBzaG93UGFsZXR0ZT86IGJvb2xlYW47XG59XG5cbi8vIENvbnRhaW5lci1zcGVjaWZpYyBvcHRpb25zIGJhc2VkIG9uIGFjdHVhbCB3aWRnZXQgY29uZmlnc1xuZXhwb3J0IGludGVyZmFjZSBBWFBGbGV4Q29udGFpbmVyT3B0aW9ucyBleHRlbmRzIExheW91dFdpZGdldE9wdGlvbnMge1xuICBmbGV4RGlyZWN0aW9uPzogJ3JvdycgfCAnY29sdW1uJyB8ICdyb3ctcmV2ZXJzZScgfCAnY29sdW1uLXJldmVyc2UnO1xuICBmbGV4V3JhcD86ICdub3dyYXAnIHwgJ3dyYXAnIHwgJ3dyYXAtcmV2ZXJzZSc7XG4gIGp1c3RpZnlDb250ZW50PzogJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ3NwYWNlLWJldHdlZW4nIHwgJ3NwYWNlLWFyb3VuZCcgfCAnc3BhY2UtZXZlbmx5JztcbiAgYWxpZ25JdGVtcz86ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdiYXNlbGluZScgfCAnc3RyZXRjaCc7XG4gIGdhcD86IHN0cmluZztcbiAgc3BhY2luZz86IHtcbiAgICBwYWRkaW5nPzogc3RyaW5nO1xuICAgIG1hcmdpbj86IHN0cmluZztcbiAgfTtcbiAgYm9yZGVyPzoge1xuICAgIHJhZGl1cz86IHN0cmluZztcbiAgICB3aWR0aD86IHN0cmluZztcbiAgICBjb2xvcj86IHN0cmluZztcbiAgICBzdHlsZT86IHN0cmluZztcbiAgfTtcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBkaXJlY3Rpb24/OiBzdHJpbmc7XG4gIG92ZXJmbG93Pzogc3RyaW5nO1xuICBvdmVyZmxvd1g/OiBzdHJpbmc7XG4gIG92ZXJmbG93WT86IHN0cmluZztcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIG1pbldpZHRoPzogc3RyaW5nO1xuICBtYXhXaWR0aD86IHN0cmluZztcbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBtaW5IZWlnaHQ/OiBzdHJpbmc7XG4gIG1heEhlaWdodD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBHcmlkQ29udGFpbmVyT3B0aW9ucyBleHRlbmRzIExheW91dFdpZGdldE9wdGlvbnMge1xuICBncmlkPzoge1xuICAgIGRlZmF1bHQ/OiB7XG4gICAgICBjb2x1bW5zPzogbnVtYmVyO1xuICAgICAgcm93cz86IG51bWJlcjtcbiAgICAgIGdhcD86IHN0cmluZztcbiAgICAgIGp1c3RpZnlJdGVtcz86IHN0cmluZztcbiAgICAgIGFsaWduSXRlbXM/OiBzdHJpbmc7XG4gICAgICBhdXRvRmxvdz86IHN0cmluZztcbiAgICB9O1xuICB9O1xuICBzcGFjaW5nPzoge1xuICAgIHBhZGRpbmc/OiBzdHJpbmc7XG4gICAgbWFyZ2luPzogc3RyaW5nO1xuICB9O1xuICBib3JkZXI/OiB7XG4gICAgcmFkaXVzPzogc3RyaW5nO1xuICAgIHdpZHRoPzogc3RyaW5nO1xuICAgIGNvbG9yPzogc3RyaW5nO1xuICAgIHN0eWxlPzogc3RyaW5nO1xuICB9O1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGRpcmVjdGlvbj86IHN0cmluZztcbiAgb3ZlcmZsb3c/OiBzdHJpbmc7XG4gIG92ZXJmbG93WD86IHN0cmluZztcbiAgb3ZlcmZsb3dZPzogc3RyaW5nO1xuICB3aWR0aD86IHN0cmluZztcbiAgbWluV2lkdGg/OiBzdHJpbmc7XG4gIG1heFdpZHRoPzogc3RyaW5nO1xuICBoZWlnaHQ/OiBzdHJpbmc7XG4gIG1pbkhlaWdodD86IHN0cmluZztcbiAgbWF4SGVpZ2h0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFBhbmVsQ29udGFpbmVyT3B0aW9ucyBleHRlbmRzIExheW91dFdpZGdldE9wdGlvbnMge1xuICBjYXB0aW9uPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBsb29rPzogJ3NvbGlkJyB8ICdmaWxsJyB8ICdvdXRsaW5lJyB8ICdmbGF0JyB8ICdub25lJztcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBzaG93SGVhZGVyPzogYm9vbGVhbjtcbiAgY29sbGFwc2VkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBQYWdlQ29udGFpbmVyT3B0aW9ucyBleHRlbmRzIExheW91dFdpZGdldE9wdGlvbnMge1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIHRoZW1lPzogeyBpZDogc3RyaW5nIH07XG4gIGhhc0hlYWRlcj86IGJvb2xlYW47XG4gIGhhc0Zvb3Rlcj86IGJvb2xlYW47XG4gIGRpcmVjdGlvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBUYWJzZXRDb250YWluZXJPcHRpb25zIGV4dGVuZHMgTGF5b3V0V2lkZ2V0T3B0aW9ucyB7XG4gIGxvb2s/OiAnd2l0aC1saW5lJyB8ICd3aXRoLWxpbmUtY29sb3InIHwgJ3BpbGxzJyB8ICdwaWxscy1jb2xvcic7XG4gIG9yaWVudGF0aW9uPzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJztcbiAgYWN0aXZlSW5kZXg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRmllbGRzZXRDb250YWluZXJPcHRpb25zIGV4dGVuZHMgTGF5b3V0V2lkZ2V0T3B0aW9ucyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgY29sbGFwc2libGU/OiBib29sZWFuO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBsb29rPzogJ2ZpZWxkc2V0JyB8ICdjYXJkJyB8ICdncm91cCc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgc2hvd0hlYWRlcj86IGJvb2xlYW47XG4gIGNvbHM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRm9ybUZpZWxkT3B0aW9ucyBleHRlbmRzIExheW91dFdpZGdldE9wdGlvbnMge1xuICBsYWJlbD86IHN0cmluZztcbiAgc2hvd0xhYmVsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEaWFsb2dDb250YWluZXJPcHRpb25zIGV4dGVuZHMgTGF5b3V0V2lkZ2V0T3B0aW9ucyB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBzaXplPzogQVhQb3B1cFNpemVUeXBlO1xuICBjbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gIGNvbnRleHQ/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmljaFRleHRPcHRpb25zIGV4dGVuZHMgVmFsdWVXaWRnZXRPcHRpb25zIHtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHRvb2xiYXI/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHk/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhc3N3b3JkQm94T3B0aW9ucyBleHRlbmRzIFZhbHVlV2lkZ2V0T3B0aW9ucyB7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICByZXZlYWxUb2dnbGU/OiBib29sZWFuO1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9va3VwQm94T3B0aW9ucyBleHRlbmRzIFZhbHVlV2lkZ2V0T3B0aW9ucyB7XG4gIGRhdGFTb3VyY2U/OiBhbnlbXSB8ICgoKSA9PiBhbnlbXSkgfCAoKCkgPT4gUHJvbWlzZTxhbnlbXT4pO1xuICB2YWx1ZUZpZWxkPzogc3RyaW5nO1xuICB0ZXh0RmllbGQ/OiBzdHJpbmc7XG4gIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICBlbnRpdHk/OiBzdHJpbmc7XG4gIGxvb2s/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBhbnlbXTtcbiAgZXhwb3NlPzogYW55W107XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgYWxsb3dDbGVhcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uTGlzdE9wdGlvbnMgZXh0ZW5kcyBWYWx1ZVdpZGdldE9wdGlvbnMge1xuICBkYXRhU291cmNlOiBhbnlbXSB8ICgoKSA9PiBhbnlbXSkgfCAoKCkgPT4gUHJvbWlzZTxhbnlbXT4pIHwgQVhEYXRhU291cmNlPGFueT47XG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XG4gIHRleHRGaWVsZD86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBzZWFyY2hhYmxlPzogYm9vbGVhbjtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG59XG5cbi8vIExpc3QgV2lkZ2V0IFR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIEFYUExpc3RXaWRnZXRDb2x1bW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgd2lkdGg/OiBzdHJpbmc7XG4gIHdpZGdldD86IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgcGF0aD86IHN0cmluZztcbiAgICBvcHRpb25zPzogYW55O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUExpc3RXaWRnZXRSb3dDb21tYW5kIHtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG4gIGNvbG9yPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW4gfCBzdHJpbmc7XG4gIGhpZGRlbj86IGJvb2xlYW4gfCBzdHJpbmc7XG4gIGNvbW1hbmQ/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQTGlzdFdpZGdldE9wdGlvbnMgZXh0ZW5kcyBMYXlvdXRXaWRnZXRPcHRpb25zIHtcbiAgZGF0YVNvdXJjZT86IGFueVtdIHwgQVhEYXRhU291cmNlO1xuICBjb2x1bW5zPzogQVhQTGlzdFdpZGdldENvbHVtbltdO1xuXG4gIC8vIEV2ZW50IENhbGxiYWNrc1xuICBvblJvd0NsaWNrPzogKHJvdzogYW55KSA9PiB2b2lkO1xuICBvblJvd0RvdWJsZUNsaWNrPzogKHJvdzogYW55KSA9PiB2b2lkO1xuICBvblNlbGVjdGlvbkNoYW5nZT86IChzZWxlY3RlZFJvd3M6IGFueVtdKSA9PiB2b2lkO1xuICBvblJvd0NvbW1hbmQ/OiAoY29tbWFuZDogYW55LCBzZWxlY3RlZFJvd3M6IGFueVtdKSA9PiB2b2lkO1xuXG4gIC8vIFRhYmxlIEZlYXR1cmVzXG4gIHBhZ2luZz86IGJvb2xlYW47XG4gIHNob3dIZWFkZXI/OiBib29sZWFuO1xuICBzaG93Rm9vdGVyPzogYm9vbGVhbjtcbiAgZml4SGVhZGVyPzogYm9vbGVhbjtcbiAgZml4Rm9vdGVyPzogYm9vbGVhbjtcbiAgZmV0Y2hEYXRhTW9kZT86ICdhdXRvJyB8ICdtYW51YWwnO1xuICBwYXJlbnRGaWVsZD86IHN0cmluZztcbiAgbWluSGVpZ2h0Pzogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIC8vIFNlbGVjdGlvbiAmIEluZGV4XG4gIHNob3dJbmRleD86IGJvb2xlYW47XG4gIGFsbG93U2VsZWN0aW9uPzogYm9vbGVhbjtcblxuICAvLyBSb3cgQ29tbWFuZHNcbiAgcHJpbWFyeUNvbW1hbmRzPzogYW55W107XG4gIHNlY29uZGFyeUNvbW1hbmRzPzogQVhQTGlzdFdpZGdldFJvd0NvbW1hbmRbXTtcblxuICAvLyBMb2FkaW5nIFN0YXRlXG4gIGxvYWRpbmc/OiB7XG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgYW5pbWF0aW9uPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgSW5oZXJpdGFuY2UgQ29udGV4dCBUeXBlcyAgIC0tLS1cblxuLy8gQ29udGV4dCBmb3IgaW5oZXJpdGluZyBwcm9wZXJ0aWVzIGZyb20gcGFyZW50IG5vZGVzXG5leHBvcnQgaW50ZXJmYWNlIEluaGVyaXRhbmNlQ29udGV4dCB7XG4gIG1vZGU/OiBBWFBXaWRnZXRSZW5kZXJNb2RlO1xuICBkaXNhYmxlZD86IGJvb2xlYW4gfCBzdHJpbmc7XG4gIHJlYWRvbmx5PzogYm9vbGVhbiB8IHN0cmluZztcbiAgZGlyZWN0aW9uPzogJ3J0bCcgfCAnbHRyJztcbiAgdmlzaWJsZT86IGJvb2xlYW4gfCBzdHJpbmc7XG59XG5cbi8vIEhlbHBlciB0eXBlIGZvciByZXNvbHZpbmcgaW5oZXJpdGVkIHByb3BlcnRpZXNcbmV4cG9ydCBpbnRlcmZhY2UgSW5oZXJpdGVkUHJvcGVydGllcyB7XG4gIG1vZGU6IEFYUFdpZGdldFJlbmRlck1vZGU7XG4gIGRpc2FibGVkOiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgZGlyZWN0aW9uOiAncnRsJyB8ICdsdHInIHwgdW5kZWZpbmVkO1xuICB2aXNpYmxlOiBib29sZWFuIHwgc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBCdWlsZGVyIFN0YXRlIFR5cGVzICAgLS0tLVxuXG4vLyBCYXNlIHdpZGdldCBjb25maWd1cmF0aW9uIC0gbm8gcGF0aCBtYW5hZ2VtZW50IGhlcmVcbmV4cG9ydCBpbnRlcmZhY2UgQVhQV2lkZ2V0Q29uZmlndXJhdGlvbiB7XG4gIHR5cGU6IHN0cmluZztcbiAgb3B0aW9ucz86IEFYUE9wdGlvbnNEYXRhO1xufVxuXG4vLyBCdWlsZGVyIHN0YXRlIGludGVyZmFjZXNcbmV4cG9ydCB0eXBlIExheW91dEJ1aWxkZXJTdGF0ZSA9IEFYUFdpZGdldE5vZGU7XG5cbi8vIFdpZGdldEJ1aWxkZXJTdGF0ZSBtaXJyb3JzIEFYUFdpZGdldE5vZGUgYnV0IGludGVudGlvbmFsbHkgZXhjbHVkZXMgYGNoaWxkcmVuYCBmb3IgbW9zdCB3aWRnZXRzXG5leHBvcnQgdHlwZSBXaWRnZXRCdWlsZGVyU3RhdGUgPSBPbWl0PEFYUFdpZGdldE5vZGUsICdjaGlsZHJlbic+ICYgeyBsYXlvdXQ/OiBBWFBHcmlkTGF5b3V0T3B0aW9ucyB9O1xuXG4vLyBGb3JtRmllbGRCdWlsZGVyU3RhdGUgaW5jbHVkZXMgY2hpbGRyZW4gc2luY2UgZm9ybSBmaWVsZHMgY2FuIGNvbnRhaW4gd2lkZ2V0c1xuZXhwb3J0IHR5cGUgRm9ybUZpZWxkQnVpbGRlclN0YXRlID0gQVhQV2lkZ2V0Tm9kZSAmIHsgbGF5b3V0PzogQVhQR3JpZExheW91dE9wdGlvbnMgfTtcblxuLy8gRGlhbG9nQnVpbGRlclN0YXRlIGluY2x1ZGVzIGRpYWxvZy1zcGVjaWZpYyBwcm9wZXJ0aWVzXG5leHBvcnQgdHlwZSBEaWFsb2dCdWlsZGVyU3RhdGUgPSBBWFBXaWRnZXROb2RlICYge1xuICBsYXlvdXQ/OiBBWFBHcmlkTGF5b3V0T3B0aW9ucztcbiAgZGlhbG9nT3B0aW9ucz86IEFYUERpYWxvZ0NvbnRhaW5lck9wdGlvbnM7XG4gIGFjdGlvbnM/OiB7XG4gICAgZm9vdGVyPzoge1xuICAgICAgcHJlZml4PzogQVhQQWN0aW9uTWVudUl0ZW1bXTtcbiAgICAgIHN1ZmZpeD86IEFYUEFjdGlvbk1lbnVJdGVtW107XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGlvbkJ1aWxkZXIge1xuICBjYW5jZWwodGV4dD86IHN0cmluZyk6IElBY3Rpb25CdWlsZGVyO1xuICBzdWJtaXQodGV4dD86IHN0cmluZyk6IElBY3Rpb25CdWlsZGVyO1xuICBjdXN0b20oYWN0aW9uOiBBWFBBY3Rpb25NZW51SXRlbSk6IElBY3Rpb25CdWlsZGVyO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBDb3JlIEJ1aWxkZXIgSW50ZXJmYWNlcyAgIC0tLS1cblxuLy8gTWFpbiBsYXlvdXQgYnVpbGRlciBpbnRlcmZhY2UgLSBTaW5nbGUgUmVzcG9uc2liaWxpdHk6IExheW91dCBvcmNoZXN0cmF0aW9uXG5leHBvcnQgaW50ZXJmYWNlIElMYXlvdXRCdWlsZGVyIHtcbiAgLy8gUHJlZGVmaW5lZCBsYXlvdXQgY29udGFpbmVycyBhdCByb290IGxldmVsIC0gb25seSB0aGVzZSBhcmUgYWxsb3dlZCB3aXRoIHNwZWNpZmljIHR5cGVzXG4gIGdyaWQoZGVsZWdhdGU6IChjb250YWluZXI6IElHcmlkQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyO1xuICBmbGV4KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJRmxleENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlcjtcbiAgcGFuZWwoZGVsZWdhdGU6IChjb250YWluZXI6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlcjtcbiAgcGFnZShkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSVBhZ2VDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXI7XG4gIHRhYnNldChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlcjtcbiAgZmllbGRzZXQoZGVsZWdhdGU6IChjb250YWluZXI6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlcjtcbiAgZGlhbG9nKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJRGlhbG9nQnVpbGRlcikgPT4gdm9pZCk6IElEaWFsb2dCdWlsZGVyO1xuXG4gIC8vIEJ1aWxkIGFuZCByZW5kZXJcbiAgYnVpbGQoKTogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgV2lkZ2V0IEJ1aWxkZXIgSW50ZXJmYWNlcyAgIC0tLS1cblxuLy8gQmFzZSB3aWRnZXQgYnVpbGRlciBpbnRlcmZhY2UgLSBTaW5nbGUgUmVzcG9uc2liaWxpdHk6IFdpZGdldCBjb25maWd1cmF0aW9uXG5leHBvcnQgaW50ZXJmYWNlIElXaWRnZXRCdWlsZGVyIHtcbiAgbmFtZShuYW1lOiBzdHJpbmcpOiBJV2lkZ2V0QnVpbGRlcjtcbiAgcGF0aChwYXRoOiBzdHJpbmcpOiBJV2lkZ2V0QnVpbGRlcjtcbiAgdHlwZSh0eXBlOiBzdHJpbmcpOiBJV2lkZ2V0QnVpbGRlcjtcbiAgb3B0aW9ucyhvcHRpb25zOiBBWFBPcHRpb25zRGF0YSk6IElXaWRnZXRCdWlsZGVyO1xuXG4gIC8vIExheW91dFxuICBsYXlvdXQoY29uZmlnOiBQYXJ0aWFsPEFYUEdyaWRMYXlvdXRPcHRpb25zPik6IElXaWRnZXRCdWlsZGVyO1xuICBsYXlvdXQoY29sU3BhbjogbnVtYmVyKTogSVdpZGdldEJ1aWxkZXI7XG4gIG1vZGUobW9kZTogQVhQV2lkZ2V0UmVuZGVyTW9kZSk6IElXaWRnZXRCdWlsZGVyO1xuXG4gIC8vIFN0YXRlIChtYW5hZ2VkIGJ5IGhpZ2hlci1sZXZlbCBzeXN0ZW1zIGxpa2UgZHluYW1pYyBmb3JtcylcbiAgdmlzaWJsZShjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBJV2lkZ2V0QnVpbGRlcjtcbiAgZGlzYWJsZWQoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSVdpZGdldEJ1aWxkZXI7XG4gIHJlYWRvbmx5KGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyO1xuICBkaXJlY3Rpb24oZGlyZWN0aW9uOiAncnRsJyB8ICdsdHInKTogSVdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gSW5oZXJpdGFuY2UgY29udGV4dCBtZXRob2RzXG4gIHdpdGhJbmhlcml0YW5jZUNvbnRleHQoY29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0KTogSVdpZGdldEJ1aWxkZXI7XG4gIGdldEluaGVyaXRhbmNlQ29udGV4dCgpOiBJbmhlcml0YW5jZUNvbnRleHQ7XG5cbiAgLy8gQnVpbGRcbiAgYnVpbGQoKTogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgQ29udGFpbmVyIEJ1aWxkZXIgSW50ZXJmYWNlcyAgIC0tLS1cblxuLy8gQmFzZSBjb250YWluZXIgYnVpbGRlciBpbnRlcmZhY2UgLSBJbnRlcmZhY2UgU2VncmVnYXRpb246IENvbW1vbiBjb250YWluZXIgb3BlcmF0aW9uc1xuZXhwb3J0IGludGVyZmFjZSBJQmFzZUNvbnRhaW5lckJ1aWxkZXI8VENvbnRhaW5lciA9IGFueT4ge1xuICBuYW1lKG5hbWU6IHN0cmluZyk6IFRDb250YWluZXI7XG4gIHBhdGgocGF0aDogc3RyaW5nKTogVENvbnRhaW5lcjtcbiAgbW9kZShtb2RlOiBBWFBXaWRnZXRSZW5kZXJNb2RlKTogVENvbnRhaW5lcjtcbiAgdmlzaWJsZShjb25kaXRpb246IGJvb2xlYW4gfCBBWFBFeHByZXNzaW9uKTogVENvbnRhaW5lcjtcbiAgZGlzYWJsZWQoY29uZGl0aW9uOiBib29sZWFuIHwgQVhQRXhwcmVzc2lvbik6IFRDb250YWluZXI7XG4gIHJlYWRvbmx5KGNvbmRpdGlvbjogYm9vbGVhbiB8IEFYUEV4cHJlc3Npb24pOiBUQ29udGFpbmVyO1xuICBkaXJlY3Rpb24oZGlyZWN0aW9uOiAncnRsJyB8ICdsdHInKTogVENvbnRhaW5lcjtcblxuICAvLyBJbmhlcml0YW5jZSBjb250ZXh0IG1ldGhvZHNcbiAgd2l0aEluaGVyaXRhbmNlQ29udGV4dChjb250ZXh0OiBJbmhlcml0YW5jZUNvbnRleHQpOiBUQ29udGFpbmVyO1xuICBnZXRJbmhlcml0YW5jZUNvbnRleHQoKTogSW5oZXJpdGFuY2VDb250ZXh0O1xuXG4gIGJ1aWxkKCk6IEFYUFdpZGdldE5vZGU7XG59XG5cbi8vIExheW91dC1zcGVjaWZpYyBjb250YWluZXIgb3BlcmF0aW9uc1xuZXhwb3J0IGludGVyZmFjZSBJTGF5b3V0Q29udGFpbmVyQnVpbGRlcjxUQ29udGFpbmVyID0gYW55PiB7XG4gIGxheW91dChjb25maWc6IFBhcnRpYWw8QVhQR3JpZExheW91dE9wdGlvbnM+KTogVENvbnRhaW5lcjtcbiAgbGF5b3V0KGNvbFNwYW46IG51bWJlcik6IFRDb250YWluZXI7XG59XG5cbi8vIENoaWxkIGNvbnRhaW5lciBtYW5hZ2VtZW50XG5leHBvcnQgaW50ZXJmYWNlIElDaGlsZENvbnRhaW5lckJ1aWxkZXI8VENvbnRhaW5lciA9IGFueT4ge1xuICBncmlkKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyO1xuICBmbGV4KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJRmxleENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyO1xuICBwYW5lbChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSVBhbmVsQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG4gIHBhZ2UoZGVsZWdhdGU6IChjb250YWluZXI6IElQYWdlQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG4gIHRhYnNldChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyO1xuICBmaWVsZHNldChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG4gIGZvcm1GaWVsZChsYWJlbDogc3RyaW5nLCBkZWxlZ2F0ZT86IChmaWVsZDogSUZvcm1GaWVsZEJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyO1xufVxuXG4vLyBXaWRnZXQgY3JlYXRpb24gb3BlcmF0aW9uc1xuZXhwb3J0IGludGVyZmFjZSBJV2lkZ2V0Q29udGFpbmVyQnVpbGRlcjxUQ29udGFpbmVyID0gYW55PiB7XG4gIHRleHRCb3gob3B0aW9ucz86IFRleHRCb3hPcHRpb25zKTogVENvbnRhaW5lcjtcbiAgbGFyZ2VUZXh0Qm94KG9wdGlvbnM/OiBMYXJnZVRleHRCb3hPcHRpb25zKTogVENvbnRhaW5lcjtcbiAgcmljaFRleHQob3B0aW9ucz86IFJpY2hUZXh0T3B0aW9ucyk6IFRDb250YWluZXI7XG4gIHBhc3N3b3JkQm94KG9wdGlvbnM/OiBQYXNzd29yZEJveE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICBudW1iZXJCb3gob3B0aW9ucz86IE51bWJlckJveE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICBzZWxlY3RCb3gob3B0aW9uczogU2VsZWN0Qm94T3B0aW9ucyk6IFRDb250YWluZXI7XG4gIGxvb2t1cEJveChvcHRpb25zOiBMb29rdXBCb3hPcHRpb25zKTogVENvbnRhaW5lcjtcbiAgc2VsZWN0aW9uTGlzdChvcHRpb25zOiBTZWxlY3Rpb25MaXN0T3B0aW9ucyk6IFRDb250YWluZXI7XG4gIGRhdGVUaW1lQm94KG9wdGlvbnM/OiBEYXRlVGltZUJveE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICB0b2dnbGVTd2l0Y2gob3B0aW9ucz86IFRvZ2dsZVN3aXRjaE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICBjb2xvckJveChvcHRpb25zPzogQ29sb3JCb3hPcHRpb25zKTogVENvbnRhaW5lcjtcbiAgbGlzdChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSUxpc3RXaWRnZXRCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lcjtcbiAgY3VzdG9tV2lkZ2V0PFQ+KHR5cGU6IHN0cmluZywgb3B0aW9ucz86IFQpOiBUQ29udGFpbmVyO1xufVxuXG4vLyBGbGV4IGNvbnRhaW5lciBidWlsZGVyIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uOiBDb21iaW5lcyBhbGwgY29udGFpbmVyIGludGVyZmFjZXNcbmV4cG9ydCBpbnRlcmZhY2UgSUZsZXhDb250YWluZXJCdWlsZGVyXG4gIGV4dGVuZHMgSUJhc2VDb250YWluZXJCdWlsZGVyPElGbGV4Q29udGFpbmVyQnVpbGRlcj4sXG4gICAgSUxheW91dENvbnRhaW5lckJ1aWxkZXI8SUZsZXhDb250YWluZXJCdWlsZGVyPixcbiAgICBJQ2hpbGRDb250YWluZXJCdWlsZGVyPElGbGV4Q29udGFpbmVyQnVpbGRlcj4sXG4gICAgSVdpZGdldENvbnRhaW5lckJ1aWxkZXI8SUZsZXhDb250YWluZXJCdWlsZGVyPiB7XG4gIC8vIEZsZXgtc3BlY2lmaWMgb3B0aW9ucyAtIGJvdGggb2JqZWN0IGFuZCBpbmRpdmlkdWFsIG1ldGhvZHNcbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBGbGV4Q29udGFpbmVyT3B0aW9ucyk6IElGbGV4Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0RGlyZWN0aW9uKGRpcmVjdGlvbjogJ3JvdycgfCAnY29sdW1uJyB8ICdyb3ctcmV2ZXJzZScgfCAnY29sdW1uLXJldmVyc2UnKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xuICBzZXRXcmFwKHdyYXA6ICdub3dyYXAnIHwgJ3dyYXAnIHwgJ3dyYXAtcmV2ZXJzZScpOiBJRmxleENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldEp1c3RpZnlDb250ZW50KFxuICAgIGp1c3RpZnk6ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdzcGFjZS1iZXR3ZWVuJyB8ICdzcGFjZS1hcm91bmQnIHwgJ3NwYWNlLWV2ZW5seScsXG4gICk6IElGbGV4Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0QWxpZ25JdGVtcyhhbGlnbjogJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ2Jhc2VsaW5lJyB8ICdzdHJldGNoJyk6IElGbGV4Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0R2FwKGdhcDogc3RyaW5nKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xuICBzZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0UGFkZGluZyhwYWRkaW5nOiBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldE1hcmdpbihtYXJnaW46IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlcjtcbn1cblxuLy8gR3JpZCBjb250YWluZXIgYnVpbGRlciAtIEludGVyZmFjZSBTZWdyZWdhdGlvbjogQ29tYmluZXMgYWxsIGNvbnRhaW5lciBpbnRlcmZhY2VzXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkQ29udGFpbmVyQnVpbGRlclxuICBleHRlbmRzIElCYXNlQ29udGFpbmVyQnVpbGRlcjxJR3JpZENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElMYXlvdXRDb250YWluZXJCdWlsZGVyPElHcmlkQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSUNoaWxkQ29udGFpbmVyQnVpbGRlcjxJR3JpZENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElXaWRnZXRDb250YWluZXJCdWlsZGVyPElHcmlkQ29udGFpbmVyQnVpbGRlcj4ge1xuICAvLyBHcmlkLXNwZWNpZmljIG9wdGlvbnMgLSBib3RoIG9iamVjdCBhbmQgaW5kaXZpZHVhbCBtZXRob2RzXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQR3JpZENvbnRhaW5lck9wdGlvbnMpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldENvbHVtbnMoY29sdW1uczogbnVtYmVyKTogSUdyaWRDb250YWluZXJCdWlsZGVyO1xuICBzZXRSb3dzKHJvd3M6IG51bWJlcik6IElHcmlkQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0R2FwKGdhcDogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyO1xuICBzZXRKdXN0aWZ5SXRlbXMoanVzdGlmeTogJ3N0YXJ0JyB8ICdlbmQnIHwgJ2NlbnRlcicgfCAnc3RyZXRjaCcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldEFsaWduSXRlbXMoYWxpZ246ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInIHwgJ3N0cmV0Y2gnKTogSUdyaWRDb250YWluZXJCdWlsZGVyO1xuICBzZXRBdXRvRmxvdyhmbG93OiAncm93JyB8ICdjb2x1bW4nIHwgJ3JvdyBkZW5zZScgfCAnY29sdW1uIGRlbnNlJyk6IElHcmlkQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yOiBzdHJpbmcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldFBhZGRpbmcocGFkZGluZzogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyO1xuICBzZXRNYXJnaW4obWFyZ2luOiBzdHJpbmcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG59XG5cbi8vIFBhbmVsIGNvbnRhaW5lciBidWlsZGVyIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uOiBDb21iaW5lcyBhbGwgY29udGFpbmVyIGludGVyZmFjZXNcbmV4cG9ydCBpbnRlcmZhY2UgSVBhbmVsQ29udGFpbmVyQnVpbGRlclxuICBleHRlbmRzIElCYXNlQ29udGFpbmVyQnVpbGRlcjxJUGFuZWxDb250YWluZXJCdWlsZGVyPixcbiAgICBJTGF5b3V0Q29udGFpbmVyQnVpbGRlcjxJUGFuZWxDb250YWluZXJCdWlsZGVyPixcbiAgICBJQ2hpbGRDb250YWluZXJCdWlsZGVyPElQYW5lbENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElXaWRnZXRDb250YWluZXJCdWlsZGVyPElQYW5lbENvbnRhaW5lckJ1aWxkZXI+IHtcbiAgLy8gUGFuZWwtc3BlY2lmaWMgb3B0aW9uc1xuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUFBhbmVsQ29udGFpbmVyT3B0aW9ucyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldENhcHRpb24oY2FwdGlvbjogc3RyaW5nKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0SWNvbihpY29uOiBzdHJpbmcpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyO1xuICBzZXRMb29rKGxvb2s6ICdzb2xpZCcgfCAnZmlsbCcgfCAnb3V0bGluZScgfCAnZmxhdCcgfCAnbm9uZScpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyO1xuICBzZXRTaG93SGVhZGVyKHNob3c6IGJvb2xlYW4pOiBJUGFuZWxDb250YWluZXJCdWlsZGVyO1xuICBzZXRDb2xsYXBzZWQoY29sbGFwc2VkOiBib29sZWFuKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlcjtcbn1cblxuLy8gUGFnZSBjb250YWluZXIgYnVpbGRlciAtIEludGVyZmFjZSBTZWdyZWdhdGlvbjogQ29tYmluZXMgYWxsIGNvbnRhaW5lciBpbnRlcmZhY2VzXG5leHBvcnQgaW50ZXJmYWNlIElQYWdlQ29udGFpbmVyQnVpbGRlclxuICBleHRlbmRzIElCYXNlQ29udGFpbmVyQnVpbGRlcjxJUGFnZUNvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElMYXlvdXRDb250YWluZXJCdWlsZGVyPElQYWdlQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSUNoaWxkQ29udGFpbmVyQnVpbGRlcjxJUGFnZUNvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElXaWRnZXRDb250YWluZXJCdWlsZGVyPElQYWdlQ29udGFpbmVyQnVpbGRlcj4ge1xuICAvLyBQYWdlLXNwZWNpZmljIG9wdGlvbnNcbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBQYWdlQ29udGFpbmVyT3B0aW9ucyk6IElQYWdlQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yOiBzdHJpbmcpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXI7XG4gIHNldFRoZW1lKHRoZW1lOiB7IGlkOiBzdHJpbmcgfSk6IElQYWdlQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0SGFzSGVhZGVyKGhhc0hlYWRlcjogYm9vbGVhbik6IElQYWdlQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0SGFzRm9vdGVyKGhhc0Zvb3RlcjogYm9vbGVhbik6IElQYWdlQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0RGlyZWN0aW9uKGRpcmVjdGlvbjogJ3J0bCcgfCAnbHRyJyk6IElQYWdlQ29udGFpbmVyQnVpbGRlcjtcbn1cblxuLy8gVGFic2V0IGNvbnRhaW5lciBidWlsZGVyIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uOiBDb21iaW5lcyBhbGwgY29udGFpbmVyIGludGVyZmFjZXNcbmV4cG9ydCBpbnRlcmZhY2UgSVRhYnNldENvbnRhaW5lckJ1aWxkZXJcbiAgZXh0ZW5kcyBJQmFzZUNvbnRhaW5lckJ1aWxkZXI8SVRhYnNldENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElMYXlvdXRDb250YWluZXJCdWlsZGVyPElUYWJzZXRDb250YWluZXJCdWlsZGVyPixcbiAgICBJQ2hpbGRDb250YWluZXJCdWlsZGVyPElUYWJzZXRDb250YWluZXJCdWlsZGVyPixcbiAgICBJV2lkZ2V0Q29udGFpbmVyQnVpbGRlcjxJVGFic2V0Q29udGFpbmVyQnVpbGRlcj4ge1xuICAvLyBUYWJzZXQtc3BlY2lmaWMgb3B0aW9uc1xuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUFRhYnNldENvbnRhaW5lck9wdGlvbnMpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0TG9vayhsb29rOiAnd2l0aC1saW5lJyB8ICd3aXRoLWxpbmUtY29sb3InIHwgJ3BpbGxzJyB8ICdwaWxscy1jb2xvcicpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0T3JpZW50YXRpb24ob3JpZW50YXRpb246ICd2ZXJ0aWNhbCcgfCAnaG9yaXpvbnRhbCcpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0QWN0aXZlSW5kZXgoaW5kZXg6IG51bWJlcik6IElUYWJzZXRDb250YWluZXJCdWlsZGVyO1xufVxuXG4vLyBGb3JtIGZpZWxkIGJ1aWxkZXIgLSBJbnRlcmZhY2UgU2VncmVnYXRpb246IENvbWJpbmVzIGJhc2UgYW5kIHdpZGdldCBpbnRlcmZhY2VzXG4vLyBGb3JtIGZpZWxkcyBjYW4gb25seSBjb250YWluIE9ORSB3aWRnZXRcbmV4cG9ydCBpbnRlcmZhY2UgSUZvcm1GaWVsZEJ1aWxkZXJcbiAgZXh0ZW5kcyBJQmFzZUNvbnRhaW5lckJ1aWxkZXI8SUZvcm1GaWVsZEJ1aWxkZXI+LFxuICAgIElMYXlvdXRDb250YWluZXJCdWlsZGVyPElGb3JtRmllbGRCdWlsZGVyPiB7XG4gIC8vIEZvcm0gZmllbGQgc3BlY2lmaWMgb3B0aW9uc1xuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUEZvcm1GaWVsZE9wdGlvbnMpOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgc2V0TGFiZWwobGFiZWw6IHN0cmluZyk6IElGb3JtRmllbGRCdWlsZGVyO1xuICBzZXRTaG93TGFiZWwoc2hvd0xhYmVsOiBib29sZWFuKTogSUZvcm1GaWVsZEJ1aWxkZXI7XG5cbiAgLy8gU2luZ2xlIHdpZGdldCBtZXRob2RzIChyZXBsYWNlcyBJV2lkZ2V0Q29udGFpbmVyQnVpbGRlcilcbiAgdGV4dEJveChvcHRpb25zPzogT21pdDxUZXh0Qm94T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyO1xuICBsYXJnZVRleHRCb3gob3B0aW9ucz86IE9taXQ8TGFyZ2VUZXh0Qm94T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyO1xuICByaWNoVGV4dChvcHRpb25zPzogT21pdDxSaWNoVGV4dE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgcGFzc3dvcmRCb3gob3B0aW9ucz86IE9taXQ8UGFzc3dvcmRCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIG51bWJlckJveChvcHRpb25zPzogT21pdDxOdW1iZXJCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIHNlbGVjdEJveChvcHRpb25zOiBPbWl0PFNlbGVjdEJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgbG9va3VwQm94KG9wdGlvbnM6IE9taXQ8TG9va3VwQm94T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyO1xuICBzZWxlY3Rpb25MaXN0KG9wdGlvbnM6IE9taXQ8U2VsZWN0aW9uTGlzdE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgZGF0ZVRpbWVCb3gob3B0aW9ucz86IE9taXQ8RGF0ZVRpbWVCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIHRvZ2dsZVN3aXRjaChvcHRpb25zPzogT21pdDxUb2dnbGVTd2l0Y2hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIGNvbG9yQm94KG9wdGlvbnM/OiBPbWl0PENvbG9yQm94T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyO1xuICBjdXN0b21XaWRnZXQ8VD4odHlwZTogc3RyaW5nLCBvcHRpb25zPzogT21pdDxULCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG59XG5cbi8vIEZpZWxkc2V0IGNvbnRhaW5lciBidWlsZGVyIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uOiBTcGVjaWFsaXplZCBmb3IgZm9ybSBmaWVsZHMgb25seVxuZXhwb3J0IGludGVyZmFjZSBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyXG4gIGV4dGVuZHMgSUJhc2VDb250YWluZXJCdWlsZGVyPElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElMYXlvdXRDb250YWluZXJCdWlsZGVyPElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI+IHtcbiAgLy8gRmllbGRzZXQtc3BlY2lmaWMgb3B0aW9uc1xuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUEZpZWxkc2V0Q29udGFpbmVyT3B0aW9ucyk6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0SWNvbihpY29uOiBzdHJpbmcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRDb2xsYXBzaWJsZShjb2xsYXBzaWJsZTogYm9vbGVhbik6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldElzT3Blbihpc09wZW46IGJvb2xlYW4pOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRMb29rKGxvb2s6ICdmaWVsZHNldCcgfCAnY2FyZCcgfCAnZ3JvdXAnKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0U2hvd0hlYWRlcihzaG93SGVhZGVyOiBib29sZWFuKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0Q29scyhjb2xzOiBudW1iZXIpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyO1xuXG4gIC8vIE9ubHkgZm9ybSBmaWVsZHMgYXJlIGFsbG93ZWQgaW4gZmllbGRzZXRcbiAgZm9ybUZpZWxkKGxhYmVsOiBzdHJpbmcsIGRlbGVnYXRlPzogKGZpZWxkOiBJRm9ybUZpZWxkQnVpbGRlcikgPT4gdm9pZCk6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI7XG59XG5cbi8vIERpYWxvZyBjb250YWluZXIgYnVpbGRlciAtIEludGVyZmFjZSBTZWdyZWdhdGlvbjogU3BlY2lhbGl6ZWQgZm9yIGRpYWxvZyBmdW5jdGlvbmFsaXR5XG5leHBvcnQgaW50ZXJmYWNlIElEaWFsb2dCdWlsZGVyIHtcbiAgLy8gRGlhbG9nLXNwZWNpZmljIG9wdGlvbnNcbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBEaWFsb2dDb250YWluZXJPcHRpb25zKTogSURpYWxvZ0J1aWxkZXI7XG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiBJRGlhbG9nQnVpbGRlcjtcbiAgc2V0TWVzc2FnZShtZXNzYWdlPzogc3RyaW5nKTogSURpYWxvZ0J1aWxkZXI7XG4gIHNldFNpemUoc2l6ZTogQVhQb3B1cFNpemVUeXBlKTogSURpYWxvZ0J1aWxkZXI7XG4gIHNldENsb3NlQnV0dG9uKGNsb3NlQnV0dG9uOiBib29sZWFuKTogSURpYWxvZ0J1aWxkZXI7XG4gIHNldENvbnRleHQoY29udGV4dDogYW55KTogSURpYWxvZ0J1aWxkZXI7XG5cbiAgLy8gQ29udGVudCBtZXRob2QgLSB3cmFwcyBsYXlvdXQgYnVpbGRlciBtZXRob2RzXG4gIGNvbnRlbnQoZGVsZWdhdGU6IChsYXlvdXRCdWlsZGVyOiBJRmxleENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlcjtcblxuICAvLyBBY3Rpb25zIG1ldGhvZFxuICBzZXRBY3Rpb25zKGRlbGVnYXRlPzogKGFjdGlvbnM6IElBY3Rpb25CdWlsZGVyKSA9PiB2b2lkKTogSURpYWxvZ0J1aWxkZXI7XG5cbiAgLy8gRGlhbG9nLXNwZWNpZmljIG1ldGhvZHNcbiAgc2hvdygpOiBQcm9taXNlPEFYUERpYWxvZ1JlZj47XG59XG5cbi8vIExpc3QgV2lkZ2V0IEJ1aWxkZXIgLSBJbnRlcmZhY2UgU2VncmVnYXRpb246IENvbWJpbmVzIGFsbCBjb250YWluZXIgaW50ZXJmYWNlc1xuZXhwb3J0IGludGVyZmFjZSBJTGlzdFdpZGdldEJ1aWxkZXJcbiAgZXh0ZW5kcyBJQmFzZUNvbnRhaW5lckJ1aWxkZXI8SUxpc3RXaWRnZXRCdWlsZGVyPixcbiAgICBJTGF5b3V0Q29udGFpbmVyQnVpbGRlcjxJTGlzdFdpZGdldEJ1aWxkZXI+LFxuICAgIElDaGlsZENvbnRhaW5lckJ1aWxkZXI8SUxpc3RXaWRnZXRCdWlsZGVyPixcbiAgICBJV2lkZ2V0Q29udGFpbmVyQnVpbGRlcjxJTGlzdFdpZGdldEJ1aWxkZXI+IHtcbiAgLy8gTGlzdC1zcGVjaWZpYyBvcHRpb25zXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQTGlzdFdpZGdldE9wdGlvbnMpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldERhdGFTb3VyY2UoZGF0YVNvdXJjZTogYW55W10gfCBBWERhdGFTb3VyY2UpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldENvbHVtbnMoY29sdW1uczogQVhQTGlzdFdpZGdldENvbHVtbltdKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuXG4gIC8vIEV2ZW50IGhhbmRsZXJzXG4gIHNldE9uUm93Q2xpY2soaGFuZGxlcjogKHJvdzogYW55KSA9PiB2b2lkKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuICBzZXRPblJvd0RvdWJsZUNsaWNrKGhhbmRsZXI6IChyb3c6IGFueSkgPT4gdm9pZCk6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0T25TZWxlY3Rpb25DaGFuZ2UoaGFuZGxlcjogKHNlbGVjdGVkUm93czogYW55W10pID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldE9uUm93Q29tbWFuZChoYW5kbGVyOiAoY29tbWFuZDogYW55LCBzZWxlY3RlZFJvd3M6IGFueVtdKSA9PiB2b2lkKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuXG4gIC8vIFRhYmxlIGZlYXR1cmVzXG4gIHNldFBhZ2luZyhwYWdpbmc6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldFNob3dIZWFkZXIoc2hvdzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0U2hvd0Zvb3RlcihzaG93OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuICBzZXRGaXhIZWFkZXIoZml4OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuICBzZXRGaXhGb290ZXIoZml4OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuICBzZXRGZXRjaERhdGFNb2RlKG1vZGU6ICdhdXRvJyB8ICdtYW51YWwnKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuICBzZXRQYXJlbnRGaWVsZChmaWVsZDogc3RyaW5nKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuICBzZXRNaW5IZWlnaHQoaGVpZ2h0OiBzdHJpbmcgfCBudW1iZXIpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gU2VsZWN0aW9uICYgSW5kZXhcbiAgc2V0U2hvd0luZGV4KHNob3c6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldEFsbG93U2VsZWN0aW9uKGFsbG93OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuXG4gIC8vIENvbW1hbmRzXG4gIHNldFByaW1hcnlDb21tYW5kcyhjb21tYW5kczogYW55W10pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldFNlY29uZGFyeUNvbW1hbmRzKGNvbW1hbmRzOiBBWFBMaXN0V2lkZ2V0Um93Q29tbWFuZFtdKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuXG4gIC8vIExvYWRpbmdcbiAgc2V0TG9hZGluZyhsb2FkaW5nOiB7IGVuYWJsZWQ/OiBib29sZWFuOyBhbmltYXRpb24/OiBib29sZWFuIH0pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG59XG5cbi8vI2VuZHJlZ2lvblxuIl19","import { Component, Input, Output, EventEmitter, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AXPLayoutRendererComponent } from './layout-renderer.component';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@acorex/components/button\";\nimport * as i3 from \"@acorex/components/decorators\";\nimport * as i4 from \"@acorex/components/loading\";\nimport * as i5 from \"@acorex/core/translation\";\nexport class AXPDialogRendererComponent extends AXBasePageComponent {\n constructor() {\n super(...arguments);\n this.result = new EventEmitter();\n this.context = signal({}, ...(ngDevMode ? [{ debugName: \"context\" }] : []));\n // This will be set by the popup service automatically - same as dynamic-dialog\n this.callBack = () => { };\n this.isDialogLoading = signal(false, ...(ngDevMode ? [{ debugName: \"isDialogLoading\" }] : []));\n }\n ngOnInit() {\n // Initialize context with provided context\n this.context.set(this.config?.context || {});\n }\n handleContextChanged(event) {\n this.context.set(event);\n }\n handleContextInitiated(event) {\n this.context.set(event);\n }\n visibleFooterPrefixActions() {\n return this.config?.actions?.footer?.prefix || [];\n }\n visibleFooterSuffixActions() {\n return this.config?.actions?.footer?.suffix || [\n { title: 'Cancel', color: 'secondary', command: { name: 'cancel' } },\n { title: 'Confirm', color: 'primary', command: { name: 'confirm' } }\n ];\n }\n isFormLoading() {\n return this.isDialogLoading();\n }\n isSubmitting() {\n return this.isDialogLoading();\n }\n async executeAction(action) {\n const actionName = action.command?.name || action.title?.toLowerCase();\n // Store the action and context - same pattern as dynamic-dialog\n const result = {\n context: this.context(),\n action: actionName\n };\n // Store result in component property\n this.dialogResult = result;\n // Store in popup data for DialogRef access\n if (this.data) {\n this.data.context = result.context;\n this.data.action = result.action;\n }\n // Call the callback with DialogRef - same pattern as dynamic-dialog\n this.callBack({\n close: (result) => {\n this.close(result);\n },\n context: () => {\n return this.context();\n },\n action: () => {\n return result.action;\n },\n setLoading: (loading) => {\n this.isDialogLoading.set(loading);\n }\n });\n }\n close(result) {\n if (result) {\n this.result.emit(result);\n }\n super.close(result);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXPDialogRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.3\", type: AXPDialogRendererComponent, isStandalone: true, selector: \"axp-dialog-renderer\", inputs: { config: \"config\" }, outputs: { result: \"result\" }, usesInheritance: true, ngImport: i0, template: `\n<div class=\"ax-p-4\">\n <axp-layout-renderer\n [layout]=\"config.definition\"\n [context]=\"context()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-layout-renderer>\n</div>\n\n<ax-footer>\n <ax-prefix>\n <ng-container *ngTemplateOutlet=\"footerPrefixActions\"></ng-container>\n </ax-prefix>\n <ax-suffix>\n <ng-container *ngTemplateOutlet=\"footerSuffixActions\"></ng-container>\n </ax-suffix>\n</ax-footer>\n\n<!-- Footer Prefix Actions -->\n<ng-template #footerPrefixActions>\n @for (action of visibleFooterPrefixActions(); track $index) {\n <ax-button\n [disabled]=\"action.disabled || isFormLoading()\"\n [text]=\"(action.title | translate | async)!\"\n [look]=\"'outline'\"\n [color]=\"action.color\"\n (onClick)=\"executeAction(action)\"\n >\n @if (isFormLoading() && action.command?.name != 'cancel') {\n <ax-loading></ax-loading>\n }\n <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n</ng-template>\n\n<!-- Footer Suffix Actions -->\n<ng-template #footerSuffixActions>\n @for (action of visibleFooterSuffixActions(); track $index) {\n <ax-button\n [disabled]=\"action.disabled || isSubmitting()\"\n [text]=\"(action.title | translate | async)!\"\n [look]=\"'solid'\"\n [color]=\"action.color\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon icon=\"{{ action.icon }}\"></ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n</ng-template>\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: AXPLayoutRendererComponent, selector: \"axp-layout-renderer\", inputs: [\"layout\", \"context\", \"look\", \"mode\"], outputs: [\"contextChange\", \"contextInitiated\", \"validityChange\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i2.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i3.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i3.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: AXLoadingModule }, { kind: \"component\", type: i4.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"pipe\", type: i1.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i5.AXTranslatorPipe, name: \"translate\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXPDialogRendererComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'axp-dialog-renderer',\n standalone: true,\n imports: [CommonModule, AXPLayoutRendererComponent, AXButtonModule, AXDecoratorModule, AXLoadingModule, AXTranslationModule],\n template: `\n<div class=\"ax-p-4\">\n <axp-layout-renderer\n [layout]=\"config.definition\"\n [context]=\"context()\"\n (contextChange)=\"handleContextChanged($event)\"\n (contextInitiated)=\"handleContextInitiated($event)\"\n >\n </axp-layout-renderer>\n</div>\n\n<ax-footer>\n <ax-prefix>\n <ng-container *ngTemplateOutlet=\"footerPrefixActions\"></ng-container>\n </ax-prefix>\n <ax-suffix>\n <ng-container *ngTemplateOutlet=\"footerSuffixActions\"></ng-container>\n </ax-suffix>\n</ax-footer>\n\n<!-- Footer Prefix Actions -->\n<ng-template #footerPrefixActions>\n @for (action of visibleFooterPrefixActions(); track $index) {\n <ax-button\n [disabled]=\"action.disabled || isFormLoading()\"\n [text]=\"(action.title | translate | async)!\"\n [look]=\"'outline'\"\n [color]=\"action.color\"\n (onClick)=\"executeAction(action)\"\n >\n @if (isFormLoading() && action.command?.name != 'cancel') {\n <ax-loading></ax-loading>\n }\n <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n</ng-template>\n\n<!-- Footer Suffix Actions -->\n<ng-template #footerSuffixActions>\n @for (action of visibleFooterSuffixActions(); track $index) {\n <ax-button\n [disabled]=\"action.disabled || isSubmitting()\"\n [text]=\"(action.title | translate | async)!\"\n [look]=\"'solid'\"\n [color]=\"action.color\"\n (onClick)=\"executeAction(action)\"\n >\n @if (action.icon) {\n <ax-prefix>\n <ax-icon icon=\"{{ action.icon }}\"></ax-icon>\n </ax-prefix>\n }\n </ax-button>\n }\n</ng-template>\n `\n }]\n }], propDecorators: { config: [{\n type: Input\n }], result: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9kaWFsb2ctcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBcUYvRCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsbUJBQW1CO0lBaEVuRTs7UUFrRVksV0FBTSxHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBSzVELFlBQU8sR0FBRyxNQUFNLENBQU0sRUFBRSxtREFBQyxDQUFDO1FBRTFCLCtFQUErRTtRQUMvRSxhQUFRLEdBQXNDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUdoRCxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxLQUFLLDJEQUFDLENBQUM7S0E0RXpDO0lBMUVVLFFBQVE7UUFDZiwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLElB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LDZYQUFFLGlCQUFpQixzVkFBRSxlQUFlLDhLQUFFLG1CQUFtQjs7MkZBNkRoSCwwQkFBMEI7a0JBaEV0QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxtQkFBbUIsQ0FBQztvQkFDNUgsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERUO2lCQUNGOzhCQUVVLE1BQU07c0JBQWQsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBzaWduYWwsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFYUExheW91dFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQtcmVuZGVyZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFYUFdpZGdldE5vZGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBWExvYWRpbmdNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvbG9hZGluZyc7XG5pbXBvcnQgeyBBWEJhc2VQYWdlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BhZ2UnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBEaWFsb2dSZWYgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9jb21wb25lbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBEaWFsb2dSZW5kZXJlckNvbmZpZyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG4gIGNvbnRleHQ6IGFueTtcbiAgZGVmaW5pdGlvbjogQVhQV2lkZ2V0Tm9kZTtcbiAgYWN0aW9ucz86IHtcbiAgICBmb290ZXI/OiB7XG4gICAgICBwcmVmaXg/OiBhbnlbXTtcbiAgICAgIHN1ZmZpeD86IGFueVtdO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nUmVuZGVyZXJSZXN1bHQge1xuICBjb250ZXh0OiBhbnk7XG4gIGFjdGlvbj86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhwLWRpYWxvZy1yZW5kZXJlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEFYUExheW91dFJlbmRlcmVyQ29tcG9uZW50LCBBWEJ1dHRvbk1vZHVsZSwgQVhEZWNvcmF0b3JNb2R1bGUsIEFYTG9hZGluZ01vZHVsZSwgQVhUcmFuc2xhdGlvbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG48ZGl2IGNsYXNzPVwiYXgtcC00XCI+XG4gIDxheHAtbGF5b3V0LXJlbmRlcmVyXG4gICAgW2xheW91dF09XCJjb25maWcuZGVmaW5pdGlvblwiXG4gICAgW2NvbnRleHRdPVwiY29udGV4dCgpXCJcbiAgICAoY29udGV4dENoYW5nZSk9XCJoYW5kbGVDb250ZXh0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAoY29udGV4dEluaXRpYXRlZCk9XCJoYW5kbGVDb250ZXh0SW5pdGlhdGVkKCRldmVudClcIlxuICA+XG4gIDwvYXhwLWxheW91dC1yZW5kZXJlcj5cbjwvZGl2PlxuXG48YXgtZm9vdGVyPlxuICA8YXgtcHJlZml4PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJQcmVmaXhBY3Rpb25zXCI+PC9uZy1jb250YWluZXI+XG4gIDwvYXgtcHJlZml4PlxuICA8YXgtc3VmZml4PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJTdWZmaXhBY3Rpb25zXCI+PC9uZy1jb250YWluZXI+XG4gIDwvYXgtc3VmZml4PlxuPC9heC1mb290ZXI+XG5cbjwhLS0gRm9vdGVyIFByZWZpeCBBY3Rpb25zIC0tPlxuPG5nLXRlbXBsYXRlICNmb290ZXJQcmVmaXhBY3Rpb25zPlxuICBAZm9yIChhY3Rpb24gb2YgdmlzaWJsZUZvb3RlclByZWZpeEFjdGlvbnMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgPGF4LWJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZCB8fCBpc0Zvcm1Mb2FkaW5nKClcIlxuICAgICAgW3RleHRdPVwiKGFjdGlvbi50aXRsZSB8IHRyYW5zbGF0ZSB8IGFzeW5jKSFcIlxuICAgICAgW2xvb2tdPVwiJ291dGxpbmUnXCJcbiAgICAgIFtjb2xvcl09XCJhY3Rpb24uY29sb3JcIlxuICAgICAgKG9uQ2xpY2spPVwiZXhlY3V0ZUFjdGlvbihhY3Rpb24pXCJcbiAgICA+XG4gICAgICBAaWYgKGlzRm9ybUxvYWRpbmcoKSAmJiBhY3Rpb24uY29tbWFuZD8ubmFtZSAhPSAnY2FuY2VsJykge1xuICAgICAgICA8YXgtbG9hZGluZz48L2F4LWxvYWRpbmc+XG4gICAgICB9XG4gICAgICA8YXgtcHJlZml4PlxuICAgICAgICA8aSBjbGFzcz1cInt7IGFjdGlvbi5pY29uIH19XCI+PC9pPlxuICAgICAgPC9heC1wcmVmaXg+XG4gICAgPC9heC1idXR0b24+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRm9vdGVyIFN1ZmZpeCBBY3Rpb25zIC0tPlxuPG5nLXRlbXBsYXRlICNmb290ZXJTdWZmaXhBY3Rpb25zPlxuICBAZm9yIChhY3Rpb24gb2YgdmlzaWJsZUZvb3RlclN1ZmZpeEFjdGlvbnMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgPGF4LWJ1dHRvblxuICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZCB8fCBpc1N1Ym1pdHRpbmcoKVwiXG4gICAgICBbdGV4dF09XCIoYWN0aW9uLnRpdGxlIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICBbbG9va109XCInc29saWQnXCJcbiAgICAgIFtjb2xvcl09XCJhY3Rpb24uY29sb3JcIlxuICAgICAgKG9uQ2xpY2spPVwiZXhlY3V0ZUFjdGlvbihhY3Rpb24pXCJcbiAgICA+XG4gICAgICBAaWYgKGFjdGlvbi5pY29uKSB7XG4gICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgPGF4LWljb24gaWNvbj1cInt7IGFjdGlvbi5pY29uIH19XCI+PC9heC1pY29uPlxuICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgIH1cbiAgICA8L2F4LWJ1dHRvbj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBBWFBEaWFsb2dSZW5kZXJlckNvbXBvbmVudCBleHRlbmRzIEFYQmFzZVBhZ2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjb25maWchOiBEaWFsb2dSZW5kZXJlckNvbmZpZztcbiAgQE91dHB1dCgpIHJlc3VsdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGlhbG9nUmVuZGVyZXJSZXN1bHQ+KCk7XG5cbiAgLy8gU3RvcmUgZGlhbG9nIHJlc3VsdCBmb3IgbWFudWFsIGNsb3NpbmdcbiAgcHJpdmF0ZSBkaWFsb2dSZXN1bHQ/OiBEaWFsb2dSZW5kZXJlclJlc3VsdDtcblxuICBjb250ZXh0ID0gc2lnbmFsPGFueT4oe30pO1xuXG4gIC8vIFRoaXMgd2lsbCBiZSBzZXQgYnkgdGhlIHBvcHVwIHNlcnZpY2UgYXV0b21hdGljYWxseSAtIHNhbWUgYXMgZHluYW1pYy1kaWFsb2dcbiAgY2FsbEJhY2s6IChkaWFsb2dSZWY6IEFYUERpYWxvZ1JlZikgPT4gdm9pZCA9ICgpID0+IHsgfTtcbiAgZGF0YTogYW55O1xuXG4gIHByaXZhdGUgaXNEaWFsb2dMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICAvLyBJbml0aWFsaXplIGNvbnRleHQgd2l0aCBwcm92aWRlZCBjb250ZXh0XG4gICAgdGhpcy5jb250ZXh0LnNldCh0aGlzLmNvbmZpZz8uY29udGV4dCB8fCB7fSk7XG4gIH1cblxuICBoYW5kbGVDb250ZXh0Q2hhbmdlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5jb250ZXh0LnNldChldmVudCk7XG4gIH1cblxuICBoYW5kbGVDb250ZXh0SW5pdGlhdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmNvbnRleHQuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHZpc2libGVGb290ZXJQcmVmaXhBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZz8uYWN0aW9ucz8uZm9vdGVyPy5wcmVmaXggfHwgW107XG4gIH1cblxuICB2aXNpYmxlRm9vdGVyU3VmZml4QWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWc/LmFjdGlvbnM/LmZvb3Rlcj8uc3VmZml4IHx8IFtcbiAgICAgIHsgdGl0bGU6ICdDYW5jZWwnLCBjb2xvcjogJ3NlY29uZGFyeScsIGNvbW1hbmQ6IHsgbmFtZTogJ2NhbmNlbCcgfSB9LFxuICAgICAgeyB0aXRsZTogJ0NvbmZpcm0nLCBjb2xvcjogJ3ByaW1hcnknLCBjb21tYW5kOiB7IG5hbWU6ICdjb25maXJtJyB9IH1cbiAgICBdO1xuICB9XG5cbiAgaXNGb3JtTG9hZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RpYWxvZ0xvYWRpbmcoKTtcbiAgfVxuXG4gIGlzU3VibWl0dGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RpYWxvZ0xvYWRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICBjb25zdCBhY3Rpb25OYW1lID0gYWN0aW9uLmNvbW1hbmQ/Lm5hbWUgfHwgYWN0aW9uLnRpdGxlPy50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gU3RvcmUgdGhlIGFjdGlvbiBhbmQgY29udGV4dCAtIHNhbWUgcGF0dGVybiBhcyBkeW5hbWljLWRpYWxvZ1xuICAgIGNvbnN0IHJlc3VsdDogRGlhbG9nUmVuZGVyZXJSZXN1bHQgPSB7XG4gICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQoKSxcbiAgICAgIGFjdGlvbjogYWN0aW9uTmFtZVxuICAgIH07XG5cbiAgICAvLyBTdG9yZSByZXN1bHQgaW4gY29tcG9uZW50IHByb3BlcnR5XG4gICAgdGhpcy5kaWFsb2dSZXN1bHQgPSByZXN1bHQ7XG5cbiAgICAvLyBTdG9yZSBpbiBwb3B1cCBkYXRhIGZvciBEaWFsb2dSZWYgYWNjZXNzXG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhLmNvbnRleHQgPSByZXN1bHQuY29udGV4dDtcbiAgICAgIHRoaXMuZGF0YS5hY3Rpb24gPSByZXN1bHQuYWN0aW9uO1xuICAgIH1cblxuICAgIC8vIENhbGwgdGhlIGNhbGxiYWNrIHdpdGggRGlhbG9nUmVmIC0gc2FtZSBwYXR0ZXJuIGFzIGR5bmFtaWMtZGlhbG9nXG4gICAgdGhpcy5jYWxsQmFjayh7XG4gICAgICBjbG9zZTogKHJlc3VsdD86IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKHJlc3VsdCk7XG4gICAgICB9LFxuICAgICAgY29udGV4dDogKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0KCk7XG4gICAgICB9LFxuICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiByZXN1bHQuYWN0aW9uO1xuICAgICAgfSxcbiAgICAgIHNldExvYWRpbmc6IChsb2FkaW5nOiBib29sZWFuKSA9PiB7XG4gICAgICAgIHRoaXMuaXNEaWFsb2dMb2FkaW5nLnNldChsb2FkaW5nKTtcbiAgICAgIH1cbiAgICB9IGFzIEFYUERpYWxvZ1JlZik7XG4gIH1cblxuICBvdmVycmlkZSBjbG9zZShyZXN1bHQ/OiBEaWFsb2dSZW5kZXJlclJlc3VsdCkge1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHRoaXMucmVzdWx0LmVtaXQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBzdXBlci5jbG9zZShyZXN1bHQpO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LXBsYXRmb3JtLWxheW91dC1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlci9zcmMvYWNvcmV4LXBsYXRmb3JtLWxheW91dC1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1","i2"],"mappings":"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"}
|