@acorex/platform 20.5.3 → 20.5.4

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.
@@ -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-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.4\", ngImport: i0, type: AXPLayoutBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPLayoutBuilderService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", 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 if (!this.popupService) {\n throw new Error('LayoutBuilder requires AXPopupService to create dialogs. Please inject it in the service constructor.');\n }\n const container = new DialogContainerBuilder(this.popupService);\n if (delegate) {\n delegate(container);\n }\n return container;\n }\n stepWizard(delegate) {\n const wizard = new StepWizardBuilder();\n wizard.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(wizard);\n }\n this.root.children.push(wizard.build());\n return this;\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 // IMPORTANT: Apply inheritance context BEFORE setting options\n // This ensures that inherited properties (readonly, disabled, etc.) are applied first\n // Then user-provided options will override them if explicitly set\n child.withInheritanceContext(this.inheritanceContext);\n child.options(cleanOptions);\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 // Map layout intent to grid item sizing so containers like `form-field`\n // can span multiple columns inside grid/fieldset layouts.\n if (!this.containerState.options)\n this.containerState.options = {};\n if (typeof value === 'number') {\n // Direct numeric shorthand → colSpan\n this.containerState.options.colSpan = value;\n }\n else if (value) {\n // Try to extract a reasonable colSpan from breakpoint positions\n const positions = value.positions;\n if (positions) {\n const colSpan = positions?.lg?.colSpan ??\n positions?.xl?.colSpan ??\n positions?.xxl?.colSpan ??\n positions?.md?.colSpan ??\n positions?.sm?.colSpan;\n if (colSpan != null) {\n this.containerState.options.colSpan = colSpan;\n }\n }\n }\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 stepWizard(delegate) {\n const wizard = new StepWizardBuilder();\n wizard.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(wizard);\n }\n this.ensureChildren();\n this.containerState.children.push(wizard.build());\n return this;\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.withInheritanceContext(this.inheritanceContext);\n child.options(cleanOptions);\n // IMPORTANT: Store the widget builder, don't build it yet!\n // This allows properties set after this method (like disabled, readonly) to be applied\n this.childWidget = child;\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 // Override property setters to propagate changes to child widget\n disabled(condition) {\n super.disabled(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n readonly(condition) {\n super.readonly(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n visible(condition) {\n super.visible(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n direction(direction) {\n super.direction(direction);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n mode(mode) {\n super.mode(mode);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n // Override withInheritanceContext to pass it to the child widget if it exists\n withInheritanceContext(context) {\n // Call parent implementation first\n super.withInheritanceContext(context);\n // If we have a child widget, update its inheritance context too\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n // Override build() to build the child widget at the last moment\n build() {\n // Build the child widget and add it to children before building the form field\n if (this.childWidget) {\n this.ensureChildren();\n this.containerState.children.push(this.childWidget.build());\n }\n // Call parent build\n return super.build();\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 addCustomAction(action) {\n // Add to actions based on position\n const position = action.position || 'suffix';\n if (position === 'prefix') {\n if (!this.dialogState.actions.footer.prefix) {\n this.dialogState.actions.footer.prefix = [];\n }\n this.dialogState.actions.footer.prefix.push(action);\n }\n else {\n if (!this.dialogState.actions.footer.suffix) {\n this.dialogState.actions.footer.suffix = [];\n }\n this.dialogState.actions.footer.suffix.push(action);\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 // Merge options instead of replacing to preserve inherited properties\n this.widgetState.options = { ...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 // Always apply inherited properties (remove the conditions that check if already set)\n // This allows properties to be updated when inheritance context changes\n if (resolved.mode) {\n this.widgetState.mode = resolved.mode;\n }\n if (!this.widgetState.options)\n this.widgetState.options = {};\n if (resolved.disabled !== undefined) {\n this.widgetState.options['disabled'] = resolved.disabled;\n }\n if (resolved.readonly !== undefined) {\n this.widgetState.options['readonly'] = resolved.readonly;\n }\n if (resolved.direction !== undefined) {\n this.widgetState.options['direction'] = resolved.direction;\n }\n if (resolved.visible !== undefined) {\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//#endregion\n//#region ---- Step Wizard Builder Implementation ----\n/**\n * Step Builder - Builds individual steps for step wizard\n */\nclass StepBuilder {\n constructor(id, title) {\n this.id = id;\n this.title = title;\n this.skippable = false;\n this.inheritanceContext = {};\n }\n setIcon(icon) {\n this.icon = icon;\n return this;\n }\n setDescription(description) {\n this.description = description;\n return this;\n }\n setSkippable(skippable) {\n this.skippable = skippable;\n return this;\n }\n content(delegate) {\n if (delegate) {\n // Create LayoutBuilder in injection context (will be called from component)\n const layoutBuilder = new LayoutBuilder();\n // ✅ IMPORTANT: Propagate inheritance context to content\n layoutBuilder.inheritanceContext = { ...this.inheritanceContext };\n delegate(layoutBuilder);\n this.contentNode = layoutBuilder.build();\n }\n return this;\n }\n withInheritanceContext(context) {\n this.inheritanceContext = mergeInheritanceContext(context);\n return this;\n }\n build() {\n if (!this.contentNode) {\n throw new Error(`Step '${this.id}' must have content`);\n }\n return {\n id: this.id,\n title: this.title,\n icon: this.icon,\n description: this.description,\n skippable: this.skippable,\n content: this.contentNode,\n };\n }\n}\n/**\n * Step Wizard Builder - Builds step wizard widget\n */\nclass StepWizardBuilder extends LayoutContainerMixin {\n constructor() {\n super('step-wizard');\n this.steps = [];\n this.linear = true;\n this.wizardDirection = 'horizontal';\n }\n setLinear(linear) {\n this.linear = linear;\n return this;\n }\n setDirection(direction) {\n this.wizardDirection = direction;\n return this;\n }\n setLook(look) {\n this.look = look;\n return this;\n }\n setShowActions(show) {\n this.showActions = show;\n return this;\n }\n setActions(actions) {\n this.wizardActions = actions;\n return this;\n }\n setGuards(guards) {\n this.guards = guards;\n return this;\n }\n setEvents(events) {\n this.events = events;\n return this;\n }\n step(id, title, delegate) {\n const stepBuilder = new StepBuilder(id, title);\n // ✅ IMPORTANT: Propagate inheritance context to step\n stepBuilder.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(stepBuilder);\n }\n this.steps.push(stepBuilder.build());\n return this;\n }\n build() {\n // ✅ Validation\n if (this.steps.length === 0) {\n throw new Error('StepWizard must have at least one step');\n }\n // ✅ Check duplicate IDs\n const ids = this.steps.map((s) => s.id);\n const duplicates = ids.filter((id, index) => ids.indexOf(id) !== index);\n if (duplicates.length > 0) {\n throw new Error(`Duplicate step IDs found: ${duplicates.join(', ')}`);\n }\n const definition = {\n steps: this.steps,\n linear: this.linear,\n direction: this.wizardDirection,\n look: this.look,\n // Do not auto-detect based on dialog context; keep explicit or undefined\n showActions: this.showActions,\n actions: this.wizardActions,\n guards: this.guards,\n events: this.events,\n };\n const node = {\n name: this.containerState.name,\n type: 'step-wizard',\n options: { definition },\n mode: this.containerState.mode,\n };\n return node;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9sYXlvdXQtYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUkxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFrRG5ELDZDQUE2QztBQUU3Qzs7R0FFRztBQUNILFNBQVMsMEJBQTBCLENBQ2pDLE9BQTJCLEVBQzNCLGNBQTJDLEVBQUU7SUFFN0MsT0FBTztRQUNMLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTTtRQUNoRCxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUTtRQUNsRCxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUTtRQUNsRCxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUztRQUNyRCxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTztLQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FDOUIsYUFBaUMsRUFDakMsaUJBQThDLEVBQUU7SUFFaEQsT0FBTztRQUNMLEdBQUcsYUFBYTtRQUNoQixHQUFHLGNBQWM7S0FDbEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FB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VSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQTRCO1lBQzFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQy9CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLHlFQUF5RTtZQUN6RSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFrQjtZQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJO1lBQzlCLElBQUksRUFBRSxhQUFhO1lBQ25CLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRTtZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJO1NBQy9CLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUG9wdXBTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcHVwJztcbmltcG9ydCB7IEFYUEFjdGlvbk1lbnVJdGVtLCBBWFBHcmlkTGF5b3V0T3B0aW9ucyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5cbmltcG9ydCB7IEFYUFdpZGdldE5vZGUsIEFYUFdpZGdldFJlbmRlck1vZGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFYUERpYWxvZ0NvbnRhaW5lck9wdGlvbnMsXG4gIEFYUERpYWxvZ1JlZixcbiAgQVhQRmllbGRzZXRDb250YWluZXJPcHRpb25zLFxuICBBWFBGbGV4Q29udGFpbmVyT3B0aW9ucyxcbiAgQVhQRm9ybUZpZWxkT3B0aW9ucyxcbiAgLy8gQ29udGFpbmVyIG9wdGlvbnNcbiAgQVhQR3JpZENvbnRhaW5lck9wdGlvbnMsXG4gIEFYUExpc3RXaWRnZXRPcHRpb25zLFxuICBBWFBQYWdlQ29udGFpbmVyT3B0aW9ucyxcbiAgQVhQUGFuZWxDb250YWluZXJPcHRpb25zLFxuICBBWFBTdGVwRGVmaW5pdGlvbixcbiAgQVhQU3RlcFdpemFyZERlZmluaXRpb24sXG4gIEFYUFN0ZXBXaXphcmRHdWFyZFBheWxvYWQsXG4gIEFYUFN0ZXBXaXphcmRTdGF0dXMsXG4gIEFYUFRhYnNldENvbnRhaW5lck9wdGlvbnMsXG4gIEFYUFdpemFyZEFjdGlvbnMsXG4gIENvbG9yQm94T3B0aW9ucyxcbiAgRGF0ZVRpbWVCb3hPcHRpb25zLFxuICBEaWFsb2dCdWlsZGVyU3RhdGUsXG4gIElBY3Rpb25CdWlsZGVyLFxuICBJRGlhbG9nQnVpbGRlcixcbiAgSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcixcbiAgSUZsZXhDb250YWluZXJCdWlsZGVyLFxuICBJRm9ybUZpZWxkQnVpbGRlcixcbiAgSUdyaWRDb250YWluZXJCdWlsZGVyLFxuICBJTGF5b3V0QnVpbGRlcixcbiAgSUxpc3RXaWRnZXRCdWlsZGVyLFxuICBJUGFnZUNvbnRhaW5lckJ1aWxkZXIsXG4gIElQYW5lbENvbnRhaW5lckJ1aWxkZXIsXG4gIElTdGVwV2l6YXJkQnVpbGRlcixcbiAgSVRhYnNldENvbnRhaW5lckJ1aWxkZXIsXG4gIElXaWRnZXRCdWlsZGVyLFxuICAvLyBJbmhlcml0YW5jZSBjb250ZXh0XG4gIEluaGVyaXRhbmNlQ29udGV4dCxcbiAgSW5oZXJpdGVkUHJvcGVydGllcyxcbiAgTGFyZ2VUZXh0Qm94T3B0aW9ucyxcbiAgTGF5b3V0QnVpbGRlclN0YXRlLFxuICBMb29rdXBCb3hPcHRpb25zLFxuICBOdW1iZXJCb3hPcHRpb25zLFxuICBQYXNzd29yZEJveE9wdGlvbnMsXG4gIFJpY2hUZXh0T3B0aW9ucyxcbiAgU2VsZWN0Qm94T3B0aW9ucyxcbiAgU2VsZWN0aW9uTGlzdE9wdGlvbnMsXG4gIFRleHRCb3hPcHRpb25zLFxuICBUb2dnbGVTd2l0Y2hPcHRpb25zLFxuICBXaWRnZXRCdWlsZGVyU3RhdGUsXG59IGZyb20gJy4vbGF5b3V0LWJ1aWxkZXIudHlwZXMnO1xuXG4vLyNyZWdpb24gLS0tLSAgIEluaGVyaXRhbmNlIFV0aWxpdGllcyAgIC0tLS1cblxuLyoqXG4gKiBSZXNvbHZlcyBpbmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIGNvbnRleHQgYW5kIGxvY2FsIHZhbHVlc1xuICovXG5mdW5jdGlvbiByZXNvbHZlSW5oZXJpdGVkUHJvcGVydGllcyhcbiAgY29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0LFxuICBsb2NhbFZhbHVlczogUGFydGlhbDxJbmhlcml0YW5jZUNvbnRleHQ+ID0ge30sXG4pOiBJbmhlcml0ZWRQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICBtb2RlOiBsb2NhbFZhbHVlcy5tb2RlID8/IGNvbnRleHQubW9kZSA/PyAnZWRpdCcsXG4gICAgZGlzYWJsZWQ6IGxvY2FsVmFsdWVzLmRpc2FibGVkID8/IGNvbnRleHQuZGlzYWJsZWQsXG4gICAgcmVhZG9ubHk6IGxvY2FsVmFsdWVzLnJlYWRvbmx5ID8/IGNvbnRleHQucmVhZG9ubHksXG4gICAgZGlyZWN0aW9uOiBsb2NhbFZhbHVlcy5kaXJlY3Rpb24gPz8gY29udGV4dC5kaXJlY3Rpb24sXG4gICAgdmlzaWJsZTogbG9jYWxWYWx1ZXMudmlzaWJsZSA/PyBjb250ZXh0LnZpc2libGUsXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2VzIGluaGVyaXRhbmNlIGNvbnRleHQgd2l0aCBsb2NhbCBvdmVycmlkZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2VJbmhlcml0YW5jZUNvbnRleHQoXG4gIHBhcmVudENvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCxcbiAgbG9jYWxPdmVycmlkZXM6IFBhcnRpYWw8SW5oZXJpdGFuY2VDb250ZXh0PiA9IHt9LFxuKTogSW5oZXJpdGFuY2VDb250ZXh0IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wYXJlbnRDb250ZXh0LFxuICAgIC4uLmxvY2FsT3ZlcnJpZGVzLFxuICB9O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSBzdHJpbmcgZm9yIHBhdGgvbmFtZSBnZW5lcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSkgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGxhYmVsIHRvIGEgdmFsaWQgcGF0aC9uYW1lXG4gKi9cbmZ1bmN0aW9uIGxhYmVsVG9QYXRoKGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbGFiZWxcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOVxcc10vZywgJycpIC8vIFJlbW92ZSBzcGVjaWFsIGNoYXJhY3RlcnNcbiAgICAucmVwbGFjZSgvXFxzKy9nLCAnXycpIC8vIFJlcGxhY2Ugc3BhY2VzIHdpdGggdW5kZXJzY29yZXNcbiAgICAuc3Vic3RyaW5nKDAsIDUwKTsgLy8gTGltaXQgbGVuZ3RoXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHBhdGggZm9yIHZhbHVlIHdpZGdldHMgYmFzZWQgb24gaGllcmFyY2h5XG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlVmFsdWVXaWRnZXRQYXRoKHdpZGdldE5hbWU/OiBzdHJpbmcsIGZvcm1GaWVsZE5hbWU/OiBzdHJpbmcsIGZvcm1GaWVsZExhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gUHJpb3JpdHk6IHdpZGdldCBuYW1lIC0+IGZvcm0gZmllbGQgbmFtZSAtPiBnZW5lcmF0ZWQgZnJvbSBsYWJlbCAtPiByYW5kb21cbiAgaWYgKHdpZGdldE5hbWUpIHtcbiAgICByZXR1cm4gd2lkZ2V0TmFtZTtcbiAgfVxuXG4gIGlmIChmb3JtRmllbGROYW1lKSB7XG4gICAgcmV0dXJuIGZvcm1GaWVsZE5hbWU7XG4gIH1cblxuICBpZiAoZm9ybUZpZWxkTGFiZWwpIHtcbiAgICByZXR1cm4gbGFiZWxUb1BhdGgoZm9ybUZpZWxkTGFiZWwpO1xuICB9XG5cbiAgcmV0dXJuIGdlbmVyYXRlUmFuZG9tSWQoKTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgU2VydmljZSBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUExheW91dEJ1aWxkZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwb3B1cFNlcnZpY2UgPSBpbmplY3QoQVhQb3B1cFNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbGF5b3V0IGJ1aWxkZXJcbiAgICovXG4gIGNyZWF0ZSgpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBMYXlvdXRCdWlsZGVyKHRoaXMucG9wdXBTZXJ2aWNlKTtcbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBMYXlvdXQgQnVpbGRlciBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuLyoqXG4gKiBNYWluIGxheW91dCBidWlsZGVyIC0gU2luZ2xlIFJlc3BvbnNpYmlsaXR5OiBMYXlvdXQgb3JjaGVzdHJhdGlvblxuICogT3Blbi9DbG9zZWQ6IEV4dGVuc2libGUgdGhyb3VnaCBjb250YWluZXIgZGVsZWdhdGVzXG4gKi9cbmNsYXNzIExheW91dEJ1aWxkZXIgaW1wbGVtZW50cyBJTGF5b3V0QnVpbGRlciB7XG4gIHByaXZhdGUgcm9vdDogQVhQV2lkZ2V0Tm9kZSA9IHtcbiAgICBjaGlsZHJlbjogW10sXG4gICAgbW9kZTogJ2VkaXQnLFxuICAgIHR5cGU6ICdmbGV4LWxheW91dCcsXG4gIH07XG5cbiAgcHJpdmF0ZSBpbmhlcml0YW5jZUNvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCA9IHtcbiAgICBtb2RlOiAnZWRpdCcsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwb3B1cFNlcnZpY2U/OiBBWFBvcHVwU2VydmljZSkge31cblxuICAvLyBQcmVkZWZpbmVkIGxheW91dCBjb250YWluZXJzIGF0IHJvb3QgbGV2ZWwgLSBkZWxlZ2F0ZSBwYXR0ZXJuIHJlcXVpcmVkXG4gIGdyaWQoZGVsZWdhdGU6IChjb250YWluZXI6IElHcmlkQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgR3JpZENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICAvL3RoaXMuc3RhdGUuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHRoaXMucm9vdCA9IGNvbnRhaW5lci5idWlsZCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZmxleChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSUZsZXhDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXIge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBGbGV4Q29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMucm9vdC5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwYW5lbChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSVBhbmVsQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgUGFuZWxDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5yb290LmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhZ2UoZGVsZWdhdGU6IChjb250YWluZXI6IElQYWdlQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgUGFnZUNvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLnJvb3QuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGFic2V0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgVGFic2V0Q29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMucm9vdC5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmaWVsZHNldChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRmllbGRzZXRDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5yb290LmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpYWxvZyhkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSURpYWxvZ0J1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLnBvcHVwU2VydmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTGF5b3V0QnVpbGRlciByZXF1aXJlcyBBWFBvcHVwU2VydmljZSB0byBjcmVhdGUgZGlhbG9ncy4gUGxlYXNlIGluamVjdCBpdCBpbiB0aGUgc2VydmljZSBjb25zdHJ1Y3Rvci4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IERpYWxvZ0NvbnRhaW5lckJ1aWxkZXIodGhpcy5wb3B1cFNlcnZpY2UpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIHN0ZXBXaXphcmQoZGVsZWdhdGU6ICh3aXphcmQ6IElTdGVwV2l6YXJkQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCB3aXphcmQgPSBuZXcgU3RlcFdpemFyZEJ1aWxkZXIoKTtcbiAgICB3aXphcmQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZSh3aXphcmQpO1xuICAgIH1cbiAgICB0aGlzLnJvb3QuY2hpbGRyZW4hLnB1c2god2l6YXJkLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZm9ybUZpZWxkKGxhYmVsOiBzdHJpbmcsIGRlbGVnYXRlPzogKGZpZWxkOiBJRm9ybUZpZWxkQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBmaWVsZCA9IG5ldyBGb3JtRmllbGRCdWlsZGVyKGxhYmVsKTtcbiAgICBmaWVsZC53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGZpZWxkKTtcbiAgICB9XG4gICAgdGhpcy5yb290LmNoaWxkcmVuIS5wdXNoKGZpZWxkLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYnVpbGQoKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMucm9vdC50eXBlLFxuICAgICAgY2hpbGRyZW46IHRoaXMucm9vdC5jaGlsZHJlbixcbiAgICAgIG1vZGU6IHRoaXMucm9vdC5tb2RlLFxuICAgIH07XG4gIH1cbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgQ29udGFpbmVyIEJ1aWxkZXIgSW1wbGVtZW50YXRpb24gICAtLS0tXG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjb250YWluZXIgYnVpbGRlciAtIE9wZW4vQ2xvc2VkIFByaW5jaXBsZVxuICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCBjb250YWluZXIgdHlwZXNcbiAqL1xuYWJzdHJhY3QgY2xhc3MgQmFzZUNvbnRhaW5lckJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgY29udGFpbmVyU3RhdGU6IExheW91dEJ1aWxkZXJTdGF0ZSA9IHtcbiAgICBtb2RlOiAnZWRpdCcsXG4gICAgdHlwZTogJ2ZsZXgtbGF5b3V0JyxcbiAgICBjaGlsZHJlbjogW10sXG4gIH07XG5cbiAgcHJvdGVjdGVkIGluaGVyaXRhbmNlQ29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0ID0ge307XG5cbiAgY29uc3RydWN0b3IoY29udGFpbmVyVHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS50eXBlID0gY29udGFpbmVyVHlwZTtcbiAgfVxuXG4gIC8vIEJhc2UgbWV0aG9kcyBzaGFyZWQgYnkgYWxsIGNvbnRhaW5lcnNcbiAgcHJvdGVjdGVkIGVuc3VyZUNoaWxkcmVuKCk6IHZvaWQge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4gPSB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIHx8IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZFdpZGdldDxUPih0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBUKTogdGhpcyB7XG4gICAgY29uc3QgY2hpbGQgPSBuZXcgV2lkZ2V0QnVpbGRlcigpO1xuICAgIGNoaWxkLnR5cGUodHlwZSk7XG5cbiAgICAvLyBGb3IgdmFsdWUgd2lkZ2V0cywgZW5zdXJlIHBhdGggaXMgcHJvdmlkZWRcbiAgICBjb25zdCB3aWRnZXRPcHRpb25zID0gb3B0aW9ucyA/PyB7fTtcbiAgICBjb25zdCBwYXRoID0gKHdpZGdldE9wdGlvbnMgYXMgYW55KS5wYXRoO1xuICAgIGNvbnN0IG5hbWUgPSAod2lkZ2V0T3B0aW9ucyBhcyBhbnkpLm5hbWU7XG5cbiAgICBpZiAodGhpcy5pc1ZhbHVlV2lkZ2V0KHR5cGUpICYmICFwYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlIHdpZGdldCAnJHt0eXBlfScgcmVxdWlyZXMgYSAncGF0aCcgcHJvcGVydHlgKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgbmFtZSBhbmQgcGF0aCBpbiB3aWRnZXQgc3RhdGUsIG5vdCBvcHRpb25zXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGNoaWxkLm5hbWUobmFtZSk7XG4gICAgfVxuICAgIGlmIChwYXRoKSB7XG4gICAgICBjaGlsZC5wYXRoKHBhdGgpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBuYW1lIGFuZCBwYXRoIGZyb20gb3B0aW9uc1xuICAgIGNvbnN0IHsgbmFtZTogXywgcGF0aDogX18sIC4uLmNsZWFuT3B0aW9ucyB9ID0gd2lkZ2V0T3B0aW9ucyBhcyBhbnk7XG5cbiAgICAvLyBJTVBPUlRBTlQ6IEFwcGx5IGluaGVyaXRhbmNlIGNvbnRleHQgQkVGT1JFIHNldHRpbmcgb3B0aW9uc1xuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGluaGVyaXRlZCBwcm9wZXJ0aWVzIChyZWFkb25seSwgZGlzYWJsZWQsIGV0Yy4pIGFyZSBhcHBsaWVkIGZpcnN0XG4gICAgLy8gVGhlbiB1c2VyLXByb3ZpZGVkIG9wdGlvbnMgd2lsbCBvdmVycmlkZSB0aGVtIGlmIGV4cGxpY2l0bHkgc2V0XG4gICAgY2hpbGQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgY2hpbGQub3B0aW9ucyhjbGVhbk9wdGlvbnMpO1xuXG4gICAgdGhpcy5lbnN1cmVDaGlsZHJlbigpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4hLnB1c2goY2hpbGQuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsdWVXaWRnZXQodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWVXaWRnZXRUeXBlcyA9IFtcbiAgICAgICd0ZXh0LWVkaXRvcicsXG4gICAgICAnbGFyZ2UtdGV4dC1lZGl0b3InLFxuICAgICAgJ3JpY2gtdGV4dC1lZGl0b3InLFxuICAgICAgJ3Bhc3N3b3JkLWVkaXRvcicsXG4gICAgICAnbnVtYmVyLWVkaXRvcicsXG4gICAgICAnc2VsZWN0LWVkaXRvcicsXG4gICAgICAnbG9va3VwLWVkaXRvcicsXG4gICAgICAnc2VsZWN0aW9uLWxpc3QtZWRpdG9yJyxcbiAgICAgICdkYXRlLXRpbWUtZWRpdG9yJyxcbiAgICAgICd0b2dnbGUtZWRpdG9yJyxcbiAgICAgICdjb2xvci1lZGl0b3InLFxuICAgIF07XG4gICAgcmV0dXJuIHZhbHVlV2lkZ2V0VHlwZXMuaW5jbHVkZXModHlwZSk7XG4gIH1cblxuICBidWlsZCgpOiBBWFBXaWRnZXROb2RlIHtcbiAgICBjb25zdCByZXN1bHQ6IEFYUFdpZGdldE5vZGUgPSB7XG4gICAgICB0eXBlOiB0aGlzLmNvbnRhaW5lclN0YXRlLnR5cGUsXG4gICAgICBjaGlsZHJlbjogdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbixcbiAgICAgIG9wdGlvbnM6IHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyxcbiAgICAgIG1vZGU6IHRoaXMuY29udGFpbmVyU3RhdGUubW9kZSxcbiAgICAgIHZpc2libGU6IHRoaXMuY29udGFpbmVyU3RhdGUudmlzaWJsZSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIG5hbWUgd2l0aCBfZm9ybV9maWVsZCBzdWZmaXggZm9yIGZvcm0gZmllbGRzXG4gICAgaWYgKHRoaXMuY29udGFpbmVyU3RhdGUudHlwZSA9PT0gJ2Zvcm0tZmllbGQnKSB7XG4gICAgICBpZiAodGhpcy5jb250YWluZXJTdGF0ZS5uYW1lKSB7XG4gICAgICAgIHJlc3VsdC5uYW1lID0gdGhpcy5jb250YWluZXJTdGF0ZS5uYW1lO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnM/LlsnbGFiZWwnXSkge1xuICAgICAgICByZXN1bHQubmFtZSA9IGxhYmVsVG9QYXRoKHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9uc1snbGFiZWwnXSkgKyAnX2Zvcm1fZmllbGQnO1xuICAgICAgfVxuICAgICAgLy8gRm9ybSBmaWVsZHMgZG9uJ3QgaGF2ZSBwYXRoXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyIGNvbnRhaW5lcnMgY2FuIGhhdmUgbmFtZSBhbmQgcGF0aFxuICAgICAgaWYgKHRoaXMuY29udGFpbmVyU3RhdGUubmFtZSkge1xuICAgICAgICByZXN1bHQubmFtZSA9IHRoaXMuY29udGFpbmVyU3RhdGUubmFtZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lclN0YXRlLnBhdGgpIHtcbiAgICAgICAgcmVzdWx0LnBhdGggPSB0aGlzLmNvbnRhaW5lclN0YXRlLnBhdGg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250YWluZXJTdGF0ZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQuZGVmYXVsdFZhbHVlID0gdGhpcy5jb250YWluZXJTdGF0ZS5kZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY29udGFpbmVyIGJ1aWxkZXIgbWl4aW4gLSBJbnRlcmZhY2UgU2VncmVnYXRpb24gUHJpbmNpcGxlXG4gKiBQcm92aWRlcyBjb21tb24gY29udGFpbmVyIG9wZXJhdGlvbnNcbiAqL1xuYWJzdHJhY3QgY2xhc3MgQmFzZUNvbnRhaW5lck1peGluPFRDb250YWluZXI+IGV4dGVuZHMgQmFzZUNvbnRhaW5lckJ1aWxkZXIge1xuICBuYW1lKG5hbWU6IHN0cmluZyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUubmFtZSA9IG5hbWU7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG4gIHBhdGgocGF0aDogc3RyaW5nKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5wYXRoID0gcGF0aDtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBtb2RlKG1vZGU6IEFYUFdpZGdldFJlbmRlck1vZGUpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0Lm1vZGUgPSBtb2RlO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIHZpc2libGUoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogVENvbnRhaW5lciB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMpIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9uc1sndmlzaWJsZSddID0gY29uZGl0aW9uO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0LnZpc2libGUgPSBjb25kaXRpb247XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgZGlzYWJsZWQoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogVENvbnRhaW5lciB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMpIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9uc1snZGlzYWJsZWQnXSA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5kaXNhYmxlZCA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICByZWFkb25seShjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBUQ29udGFpbmVyIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucykgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zID0ge307XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zWydyZWFkb25seSddID0gY29uZGl0aW9uO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0LnJlYWRvbmx5ID0gY29uZGl0aW9uO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBUQ29udGFpbmVyIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucykgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zID0ge307XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zWydkaXJlY3Rpb24nXSA9IGRpcmVjdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgLy8gSW5oZXJpdGFuY2UgY29udGV4dCBtZXRob2RzXG4gIHdpdGhJbmhlcml0YW5jZUNvbnRleHQoY29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0KTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5pbmhlcml0YW5jZUNvbnRleHQgPSBtZXJnZUluaGVyaXRhbmNlQ29udGV4dChjb250ZXh0KTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBnZXRJbmhlcml0YW5jZUNvbnRleHQoKTogSW5oZXJpdGFuY2VDb250ZXh0IHtcbiAgICByZXR1cm4geyAuLi50aGlzLmluaGVyaXRhbmNlQ29udGV4dCB9O1xuICB9XG59XG5cbi8qKlxuICogTGF5b3V0IGNvbnRhaW5lciBtaXhpbiAtIEludGVyZmFjZSBTZWdyZWdhdGlvbiBQcmluY2lwbGVcbiAqIFByb3ZpZGVzIGxheW91dC1zcGVjaWZpYyBvcGVyYXRpb25zXG4gKi9cbmFic3RyYWN0IGNsYXNzIExheW91dENvbnRhaW5lck1peGluPFRDb250YWluZXI+IGV4dGVuZHMgQmFzZUNvbnRhaW5lck1peGluPFRDb250YWluZXI+IHtcbiAgbGF5b3V0KHZhbHVlOiBQYXJ0aWFsPEFYUEdyaWRMYXlvdXRPcHRpb25zPiB8IG51bWJlcik6IFRDb250YWluZXIge1xuICAgIC8vIE1hcCBsYXlvdXQgaW50ZW50IHRvIGdyaWQgaXRlbSBzaXppbmcgc28gY29udGFpbmVycyBsaWtlIGBmb3JtLWZpZWxkYFxuICAgIC8vIGNhbiBzcGFuIG11bHRpcGxlIGNvbHVtbnMgaW5zaWRlIGdyaWQvZmllbGRzZXQgbGF5b3V0cy5cbiAgICBpZiAoIXRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucykgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zID0ge307XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gRGlyZWN0IG51bWVyaWMgc2hvcnRoYW5kIOKGkiBjb2xTcGFuXG4gICAgICAodGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zIGFzIGFueSkuY29sU3BhbiA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIC8vIFRyeSB0byBleHRyYWN0IGEgcmVhc29uYWJsZSBjb2xTcGFuIGZyb20gYnJlYWtwb2ludCBwb3NpdGlvbnNcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9ICh2YWx1ZSBhcyBhbnkpLnBvc2l0aW9ucyBhcyBhbnk7XG4gICAgICBpZiAocG9zaXRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNvbFNwYW4gPVxuICAgICAgICAgIHBvc2l0aW9ucz8ubGc/LmNvbFNwYW4gPz9cbiAgICAgICAgICBwb3NpdGlvbnM/LnhsPy5jb2xTcGFuID8/XG4gICAgICAgICAgcG9zaXRpb25zPy54eGw/LmNvbFNwYW4gPz9cbiAgICAgICAgICBwb3NpdGlvbnM/Lm1kPy5jb2xTcGFuID8/XG4gICAgICAgICAgcG9zaXRpb25zPy5zbT8uY29sU3BhbjtcbiAgICAgICAgaWYgKGNvbFNwYW4gIT0gbnVsbCkge1xuICAgICAgICAgICh0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMgYXMgYW55KS5jb2xTcGFuID0gY29sU3BhbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxufVxuXG4vKipcbiAqIENoaWxkIGNvbnRhaW5lciBtaXhpbiAtIEludGVyZmFjZSBTZWdyZWdhdGlvbiBQcmluY2lwbGVcbiAqIFByb3ZpZGVzIGNoaWxkIGNvbnRhaW5lciBtYW5hZ2VtZW50XG4gKi9cbmFic3RyYWN0IGNsYXNzIENoaWxkQ29udGFpbmVyTWl4aW48VENvbnRhaW5lcj4gZXh0ZW5kcyBMYXlvdXRDb250YWluZXJNaXhpbjxUQ29udGFpbmVyPiB7XG4gIGdyaWQoZGVsZWdhdGU6IChjb250YWluZXI6IElHcmlkQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXIge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBHcmlkQ29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBmbGV4KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJRmxleENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRmxleENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgcGFuZWwoZGVsZWdhdGU6IChjb250YWluZXI6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgUGFuZWxDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGlsZHJlbigpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIHBhZ2UoZGVsZWdhdGU6IChjb250YWluZXI6IElQYWdlQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXIge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBQYWdlQ29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICB0YWJzZXQoZGVsZWdhdGU6IChjb250YWluZXI6IElUYWJzZXRDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IFRhYnNldENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgZmllbGRzZXQoZGVsZWdhdGU6IChjb250YWluZXI6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRmllbGRzZXRDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGlsZHJlbigpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGRpYWxvZyhkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSURpYWxvZ0J1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IERpYWxvZ0NvbnRhaW5lckJ1aWxkZXIoKTsgLy8gV2lsbCB1c2UgaW5qZWN0KCkgZmFsbGJhY2tcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICBzdGVwV2l6YXJkKGRlbGVnYXRlOiAod2l6YXJkOiBJU3RlcFdpemFyZEJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCB3aXphcmQgPSBuZXcgU3RlcFdpemFyZEJ1aWxkZXIoKTtcbiAgICB3aXphcmQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZSh3aXphcmQpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaCh3aXphcmQuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgZm9ybUZpZWxkKGxhYmVsOiBzdHJpbmcsIGRlbGVnYXRlPzogKGZpZWxkOiBJRm9ybUZpZWxkQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXIge1xuICAgIGNvbnN0IGZpZWxkID0gbmV3IEZvcm1GaWVsZEJ1aWxkZXIobGFiZWwpO1xuICAgIGZpZWxkLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoZmllbGQpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChmaWVsZC5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBXaWRnZXQgY29udGFpbmVyIG1peGluIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uIFByaW5jaXBsZVxuICogUHJvdmlkZXMgd2lkZ2V0IGNyZWF0aW9uIG9wZXJhdGlvbnNcbiAqL1xuYWJzdHJhY3QgY2xhc3MgV2lkZ2V0Q29udGFpbmVyTWl4aW48VENvbnRhaW5lcj4gZXh0ZW5kcyBDaGlsZENvbnRhaW5lck1peGluPFRDb250YWluZXI+IHtcbiAgdGV4dEJveChvcHRpb25zPzogVGV4dEJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgndGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBsYXJnZVRleHRCb3gob3B0aW9ucz86IExhcmdlVGV4dEJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgnbGFyZ2UtdGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICByaWNoVGV4dChvcHRpb25zPzogUmljaFRleHRPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ3JpY2gtdGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBwYXNzd29yZEJveChvcHRpb25zPzogUGFzc3dvcmRCb3hPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ3Bhc3N3b3JkLWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIG51bWJlckJveChvcHRpb25zPzogTnVtYmVyQm94T3B0aW9ucyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuYWRkV2lkZ2V0KCdudW1iZXItZWRpdG9yJywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgc2VsZWN0Qm94KG9wdGlvbnM6IFNlbGVjdEJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgnc2VsZWN0LWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGxvb2t1cEJveChvcHRpb25zOiBMb29rdXBCb3hPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ2xvb2t1cC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBzZWxlY3Rpb25MaXN0KG9wdGlvbnM6IFNlbGVjdGlvbkxpc3RPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ3NlbGVjdGlvbi1saXN0LWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGRhdGVUaW1lQm94KG9wdGlvbnM/OiBEYXRlVGltZUJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgnZGF0ZS10aW1lLWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIHRvZ2dsZVN3aXRjaChvcHRpb25zPzogVG9nZ2xlU3dpdGNoT3B0aW9ucyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuYWRkV2lkZ2V0KCd0b2dnbGUtZWRpdG9yJywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgY29sb3JCb3gob3B0aW9ucz86IENvbG9yQm94T3B0aW9ucyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuYWRkV2lkZ2V0KCdjb2xvci1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBsaXN0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJTGlzdFdpZGdldEJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgTGlzdFdpZGdldEJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgY3VzdG9tV2lkZ2V0PFQ+KHR5cGU6IHN0cmluZywgb3B0aW9ucz86IFQpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldDxUPih0eXBlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBGbGV4IENvbnRhaW5lciBCdWlsZGVyIC0gTGlza292IFN1YnN0aXR1dGlvbiBQcmluY2lwbGVcbiAqIEV4dGVuZHMgV2lkZ2V0Q29udGFpbmVyTWl4aW4gdG8gaW5oZXJpdCBhbGwgY29tbW9uIGZ1bmN0aW9uYWxpdHlcbiAqL1xuY2xhc3MgRmxleENvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbjxJRmxleENvbnRhaW5lckJ1aWxkZXI+IGltcGxlbWVudHMgSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2ZsZXgtbGF5b3V0Jyk7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUEZsZXhDb250YWluZXJPcHRpb25zKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMgPSB7IC4uLnRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSW5kaXZpZHVhbCBmbHVlbnQgbWV0aG9kcyBmb3IgRmxleFxuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiAncm93JyB8ICdjb2x1bW4nIHwgJ3Jvdy1yZXZlcnNlJyB8ICdjb2x1bW4tcmV2ZXJzZScpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBmbGV4RGlyZWN0aW9uOiBkaXJlY3Rpb24gfSk7XG4gIH1cblxuICBzZXRXcmFwKHdyYXA6ICdub3dyYXAnIHwgJ3dyYXAnIHwgJ3dyYXAtcmV2ZXJzZScpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBmbGV4V3JhcDogd3JhcCB9KTtcbiAgfVxuXG4gIHNldEp1c3RpZnlDb250ZW50KFxuICAgIGp1c3RpZnk6ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdzcGFjZS1iZXR3ZWVuJyB8ICdzcGFjZS1hcm91bmQnIHwgJ3NwYWNlLWV2ZW5seScsXG4gICk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGp1c3RpZnlDb250ZW50OiBqdXN0aWZ5IH0pO1xuICB9XG5cbiAgc2V0QWxpZ25JdGVtcyhhbGlnbjogJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ2Jhc2VsaW5lJyB8ICdzdHJldGNoJyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGFsaWduSXRlbXM6IGFsaWduIH0pO1xuICB9XG5cbiAgc2V0R2FwKGdhcDogc3RyaW5nKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ2FwIH0pO1xuICB9XG5cbiAgc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yOiBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yIH0pO1xuICB9XG5cbiAgc2V0UGFkZGluZyhwYWRkaW5nOiBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzcGFjaW5nOiB7IHBhZGRpbmcgfSB9KTtcbiAgfVxuXG4gIHNldE1hcmdpbihtYXJnaW46IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNwYWNpbmc6IHsgbWFyZ2luIH0gfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHcmlkIENvbnRhaW5lciBCdWlsZGVyIC0gTGlza292IFN1YnN0aXR1dGlvbiBQcmluY2lwbGVcbiAqIEV4dGVuZHMgV2lkZ2V0Q29udGFpbmVyTWl4aW4gdG8gaW5oZXJpdCBhbGwgY29tbW9uIGZ1bmN0aW9uYWxpdHlcbiAqL1xuY2xhc3MgR3JpZENvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbjxJR3JpZENvbnRhaW5lckJ1aWxkZXI+IGltcGxlbWVudHMgSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2dyaWQtbGF5b3V0Jyk7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUEdyaWRDb250YWluZXJPcHRpb25zKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMgPSB7IC4uLnRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSW5kaXZpZHVhbCBmbHVlbnQgbWV0aG9kcyBmb3IgR3JpZFxuICBzZXRDb2x1bW5zKGNvbHVtbnM6IG51bWJlcik6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGdyaWQ6IHsgZGVmYXVsdDogeyBjb2x1bW5zIH0gfSB9KTtcbiAgfVxuXG4gIHNldFJvd3Mocm93czogbnVtYmVyKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IHJvd3MgfSB9IH0pO1xuICB9XG5cbiAgc2V0R2FwKGdhcDogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IGdhcCB9IH0gfSk7XG4gIH1cblxuICBzZXRKdXN0aWZ5SXRlbXMoanVzdGlmeTogJ3N0YXJ0JyB8ICdlbmQnIHwgJ2NlbnRlcicgfCAnc3RyZXRjaCcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBncmlkOiB7IGRlZmF1bHQ6IHsganVzdGlmeUl0ZW1zOiBqdXN0aWZ5IH0gfSB9KTtcbiAgfVxuXG4gIHNldEFsaWduSXRlbXMoYWxpZ246ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInIHwgJ3N0cmV0Y2gnKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IGFsaWduSXRlbXM6IGFsaWduIH0gfSB9KTtcbiAgfVxuXG4gIHNldEF1dG9GbG93KGZsb3c6ICdyb3cnIHwgJ2NvbHVtbicgfCAncm93IGRlbnNlJyB8ICdjb2x1bW4gZGVuc2UnKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IGF1dG9GbG93OiBmbG93IH0gfSB9KTtcbiAgfVxuXG4gIHNldEJhY2tncm91bmRDb2xvcihjb2xvcjogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgYmFja2dyb3VuZENvbG9yOiBjb2xvciB9KTtcbiAgfVxuXG4gIHNldFBhZGRpbmcocGFkZGluZzogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgc3BhY2luZzogeyBwYWRkaW5nIH0gfSk7XG4gIH1cblxuICBzZXRNYXJnaW4obWFyZ2luOiBzdHJpbmcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzcGFjaW5nOiB7IG1hcmdpbiB9IH0pO1xuICB9XG59XG5cbi8qKlxuICogUGFuZWwgQ29udGFpbmVyIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogRXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbiB0byBpbmhlcml0IGFsbCBjb21tb24gZnVuY3Rpb25hbGl0eVxuICovXG5jbGFzcyBQYW5lbENvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbjxJUGFuZWxDb250YWluZXJCdWlsZGVyPiBpbXBsZW1lbnRzIElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigncGFuZWwtbGF5b3V0Jyk7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUFBhbmVsQ29udGFpbmVyT3B0aW9ucyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBQYW5lbFxuICBzZXRDYXB0aW9uKGNhcHRpb246IHN0cmluZyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBjYXB0aW9uIH0pO1xuICB9XG5cbiAgc2V0SWNvbihpY29uOiBzdHJpbmcpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgaWNvbiB9KTtcbiAgfVxuXG4gIHNldExvb2sobG9vazogJ3NvbGlkJyB8ICdmaWxsJyB8ICdvdXRsaW5lJyB8ICdmbGF0JyB8ICdub25lJyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBsb29rIH0pO1xuICB9XG5cbiAgc2V0U2hvd0hlYWRlcihzaG93OiBib29sZWFuKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dIZWFkZXI6IHNob3cgfSk7XG4gIH1cblxuICBzZXRDb2xsYXBzZWQoY29sbGFwc2VkOiBib29sZWFuKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNvbGxhcHNlZCB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFBhZ2UgQ29udGFpbmVyIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogRXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbiB0byBpbmhlcml0IGFsbCBjb21tb24gZnVuY3Rpb25hbGl0eVxuICovXG5jbGFzcyBQYWdlQ29udGFpbmVyQnVpbGRlciBleHRlbmRzIFdpZGdldENvbnRhaW5lck1peGluPElQYWdlQ29udGFpbmVyQnVpbGRlcj4gaW1wbGVtZW50cyBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigncGFnZS1sYXlvdXQnKTtcbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQUGFnZUNvbnRhaW5lck9wdGlvbnMpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBQYWdlXG4gIHNldEJhY2tncm91bmRDb2xvcihjb2xvcjogc3RyaW5nKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgYmFja2dyb3VuZENvbG9yOiBjb2xvciB9KTtcbiAgfVxuXG4gIHNldFRoZW1lKHRoZW1lOiB7IGlkOiBzdHJpbmcgfSk6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHRoZW1lIH0pO1xuICB9XG5cbiAgc2V0SGFzSGVhZGVyKGhhc0hlYWRlcjogYm9vbGVhbik6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGhhc0hlYWRlciB9KTtcbiAgfVxuXG4gIHNldEhhc0Zvb3RlcihoYXNGb290ZXI6IGJvb2xlYW4pOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBoYXNGb290ZXIgfSk7XG4gIH1cblxuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiBzdHJpbmcpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBkaXJlY3Rpb24gfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWJzZXQgQ29udGFpbmVyIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogRXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbiB0byBpbmhlcml0IGFsbCBjb21tb24gZnVuY3Rpb25hbGl0eVxuICovXG5jbGFzcyBUYWJzZXRDb250YWluZXJCdWlsZGVyIGV4dGVuZHMgV2lkZ2V0Q29udGFpbmVyTWl4aW48SVRhYnNldENvbnRhaW5lckJ1aWxkZXI+IGltcGxlbWVudHMgSVRhYnNldENvbnRhaW5lckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigndGFic2V0LWxheW91dCcpO1xuICB9XG5cbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBUYWJzZXRDb250YWluZXJPcHRpb25zKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBUYWJzZXRcbiAgc2V0TG9vayhsb29rOiAnd2l0aC1saW5lJyB8ICd3aXRoLWxpbmUtY29sb3InIHwgJ3BpbGxzJyB8ICdwaWxscy1jb2xvcicpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGxvb2sgfSk7XG4gIH1cblxuICBzZXRPcmllbnRhdGlvbihvcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgb3JpZW50YXRpb24gfSk7XG4gIH1cblxuICBzZXRBY3RpdmVJbmRleChpbmRleDogbnVtYmVyKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBhY3RpdmVJbmRleDogaW5kZXggfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3JtIEZpZWxkIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogQ2FuIG9ubHkgY29udGFpbiBPTkUgd2lkZ2V0IHdpdGggYXV0b21hdGljIHBhdGggZ2VuZXJhdGlvblxuICovXG5jbGFzcyBGb3JtRmllbGRCdWlsZGVyIGV4dGVuZHMgTGF5b3V0Q29udGFpbmVyTWl4aW48SUZvcm1GaWVsZEJ1aWxkZXI+IGltcGxlbWVudHMgSUZvcm1GaWVsZEJ1aWxkZXIge1xuICBwcml2YXRlIGhhc1dpZGdldCA9IGZhbHNlO1xuICBwcml2YXRlIGNoaWxkV2lkZ2V0PzogV2lkZ2V0QnVpbGRlcjsgLy8gU3RvcmUgdGhlIHdpZGdldCBidWlsZGVyLCBub3QgdGhlIGJ1aWx0IHdpZGdldFxuXG4gIGNvbnN0cnVjdG9yKGxhYmVsOiBzdHJpbmcpIHtcbiAgICBzdXBlcignZm9ybS1maWVsZCcpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgbGFiZWwsIHNob3dMYWJlbDogdHJ1ZSB9O1xuICB9XG5cbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBGb3JtRmllbGRPcHRpb25zKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRMYWJlbChsYWJlbDogc3RyaW5nKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBsYWJlbCB9KTtcbiAgfVxuXG4gIHNldFNob3dMYWJlbChzaG93TGFiZWw6IGJvb2xlYW4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dMYWJlbCB9KTtcbiAgfVxuXG4gIC8vIFNpbmdsZSB3aWRnZXQgbWV0aG9kcyB3aXRoIGF1dG9tYXRpYyBwYXRoIGdlbmVyYXRpb25cbiAgcHJpdmF0ZSBhZGRTaW5nbGVXaWRnZXQ8VD4odHlwZTogc3RyaW5nLCBvcHRpb25zPzogT21pdDxULCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIGlmICh0aGlzLmhhc1dpZGdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3JtIGZpZWxkIGNhbiBvbmx5IGNvbnRhaW4gb25lIHdpZGdldCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1GaWVsZE5hbWUgPSB0aGlzLmNvbnRhaW5lclN0YXRlLm5hbWU7XG4gICAgY29uc3QgZm9ybUZpZWxkUGF0aCA9IHRoaXMuY29udGFpbmVyU3RhdGUucGF0aDsgLy8gR2V0IGV4cGxpY2l0IHBhdGggZnJvbSBmb3JtIGZpZWxkXG4gICAgY29uc3QgZm9ybUZpZWxkTGFiZWwgPSB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnM/LlsnbGFiZWwnXTtcbiAgICBjb25zdCB3aWRnZXROYW1lID0gKG9wdGlvbnMgYXMgYW55KT8ubmFtZTtcblxuICAgIC8vIEdlbmVyYXRlIHdpZGdldCBwYXRoOiBleHBsaWNpdCBwYXRoIC0+IHdpZGdldCBuYW1lIC0+IGZvcm0gZmllbGQgbmFtZSAtPiBsYWJlbCAtPiByYW5kb21cbiAgICBsZXQgd2lkZ2V0UGF0aDogc3RyaW5nO1xuICAgIGlmIChmb3JtRmllbGRQYXRoKSB7XG4gICAgICB3aWRnZXRQYXRoID0gZm9ybUZpZWxkUGF0aDsgLy8gVXNlIGV4cGxpY2l0IGZvcm0gZmllbGQgcGF0aCBmaXJzdFxuICAgIH0gZWxzZSBpZiAod2lkZ2V0TmFtZSkge1xuICAgICAgd2lkZ2V0UGF0aCA9IHdpZGdldE5hbWU7XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGROYW1lKSB7XG4gICAgICB3aWRnZXRQYXRoID0gZm9ybUZpZWxkTmFtZTsgLy8gVXNlIGZvcm0gZmllbGQgbmFtZSBhcyBkZWZhdWx0IHBhdGhcbiAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZExhYmVsKSB7XG4gICAgICB3aWRnZXRQYXRoID0gbGFiZWxUb1BhdGgoZm9ybUZpZWxkTGFiZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWRnZXRQYXRoID0gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsTmFtZSA9IHdpZGdldE5hbWUgfHwgZm9ybUZpZWxkTmFtZSB8fCB3aWRnZXRQYXRoO1xuXG4gICAgY29uc3QgY2hpbGQgPSBuZXcgV2lkZ2V0QnVpbGRlcigpO1xuICAgIGNoaWxkLnR5cGUodHlwZSk7XG4gICAgY2hpbGQubmFtZShmaW5hbE5hbWUpO1xuICAgIGNoaWxkLnBhdGgod2lkZ2V0UGF0aCk7XG5cbiAgICAvLyBSZW1vdmUgbmFtZSBmcm9tIG9wdGlvbnMgc2luY2UgaXQncyBub3cgaW4gc3RhdGVcbiAgICBjb25zdCB7IG5hbWU6IF8sIC4uLmNsZWFuT3B0aW9ucyB9ID0gKG9wdGlvbnMgfHwge30pIGFzIGFueTtcbiAgICBjaGlsZC53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBjaGlsZC5vcHRpb25zKGNsZWFuT3B0aW9ucyk7XG5cbiAgICAvLyBJTVBPUlRBTlQ6IFN0b3JlIHRoZSB3aWRnZXQgYnVpbGRlciwgZG9uJ3QgYnVpbGQgaXQgeWV0IVxuICAgIC8vIFRoaXMgYWxsb3dzIHByb3BlcnRpZXMgc2V0IGFmdGVyIHRoaXMgbWV0aG9kIChsaWtlIGRpc2FibGVkLCByZWFkb25seSkgdG8gYmUgYXBwbGllZFxuICAgIHRoaXMuY2hpbGRXaWRnZXQgPSBjaGlsZDtcbiAgICB0aGlzLmhhc1dpZGdldCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRleHRCb3gob3B0aW9ucz86IE9taXQ8VGV4dEJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PFRleHRCb3hPcHRpb25zPigndGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxhcmdlVGV4dEJveChvcHRpb25zPzogT21pdDxMYXJnZVRleHRCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxMYXJnZVRleHRCb3hPcHRpb25zPignbGFyZ2UtdGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJpY2hUZXh0KG9wdGlvbnM/OiBPbWl0PFJpY2hUZXh0T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTaW5nbGVXaWRnZXQ8UmljaFRleHRPcHRpb25zPigncmljaC10ZXh0LWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgcGFzc3dvcmRCb3gob3B0aW9ucz86IE9taXQ8UGFzc3dvcmRCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxQYXNzd29yZEJveE9wdGlvbnM+KCdwYXNzd29yZC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIG51bWJlckJveChvcHRpb25zPzogT21pdDxOdW1iZXJCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxOdW1iZXJCb3hPcHRpb25zPignbnVtYmVyLWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgc2VsZWN0Qm94KG9wdGlvbnM6IE9taXQ8U2VsZWN0Qm94T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTaW5nbGVXaWRnZXQ8U2VsZWN0Qm94T3B0aW9ucz4oJ3NlbGVjdC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxvb2t1cEJveChvcHRpb25zOiBPbWl0PExvb2t1cEJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PExvb2t1cEJveE9wdGlvbnM+KCdsb29rdXAtZWRpdG9yJywgb3B0aW9ucyk7XG4gIH1cblxuICBzZWxlY3Rpb25MaXN0KG9wdGlvbnM6IE9taXQ8U2VsZWN0aW9uTGlzdE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PFNlbGVjdGlvbkxpc3RPcHRpb25zPignc2VsZWN0aW9uLWxpc3QtZWRpdG9yJywgb3B0aW9ucyk7XG4gIH1cblxuICBkYXRlVGltZUJveChvcHRpb25zPzogT21pdDxEYXRlVGltZUJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PERhdGVUaW1lQm94T3B0aW9ucz4oJ2RhdGUtdGltZS1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIHRvZ2dsZVN3aXRjaChvcHRpb25zPzogT21pdDxUb2dnbGVTd2l0Y2hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxUb2dnbGVTd2l0Y2hPcHRpb25zPigndG9nZ2xlLWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgY29sb3JCb3gob3B0aW9ucz86IE9taXQ8Q29sb3JCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxDb2xvckJveE9wdGlvbnM+KCdjb2xvci1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGN1c3RvbVdpZGdldDxUPih0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFQsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PFQ+KHR5cGUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgcHJvcGVydHkgc2V0dGVycyB0byBwcm9wYWdhdGUgY2hhbmdlcyB0byBjaGlsZCB3aWRnZXRcbiAgb3ZlcnJpZGUgZGlzYWJsZWQoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHN1cGVyLmRpc2FibGVkKGNvbmRpdGlvbik7XG4gICAgaWYgKHRoaXMuY2hpbGRXaWRnZXQpIHtcbiAgICAgIHRoaXMuY2hpbGRXaWRnZXQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVhZG9ubHkoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHN1cGVyLnJlYWRvbmx5KGNvbmRpdGlvbik7XG4gICAgaWYgKHRoaXMuY2hpbGRXaWRnZXQpIHtcbiAgICAgIHRoaXMuY2hpbGRXaWRnZXQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlzaWJsZShjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgc3VwZXIudmlzaWJsZShjb25kaXRpb24pO1xuICAgIGlmICh0aGlzLmNoaWxkV2lkZ2V0KSB7XG4gICAgICB0aGlzLmNoaWxkV2lkZ2V0LndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG92ZXJyaWRlIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgc3VwZXIuZGlyZWN0aW9uKGRpcmVjdGlvbik7XG4gICAgaWYgKHRoaXMuY2hpbGRXaWRnZXQpIHtcbiAgICAgIHRoaXMuY2hpbGRXaWRnZXQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3ZlcnJpZGUgbW9kZShtb2RlOiBBWFBXaWRnZXRSZW5kZXJNb2RlKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHN1cGVyLm1vZGUobW9kZSk7XG4gICAgaWYgKHRoaXMuY2hpbGRXaWRnZXQpIHtcbiAgICAgIHRoaXMuY2hpbGRXaWRnZXQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgd2l0aEluaGVyaXRhbmNlQ29udGV4dCB0byBwYXNzIGl0IHRvIHRoZSBjaGlsZCB3aWRnZXQgaWYgaXQgZXhpc3RzXG4gIG92ZXJyaWRlIHdpdGhJbmhlcml0YW5jZUNvbnRleHQoY29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIC8vIENhbGwgcGFyZW50IGltcGxlbWVudGF0aW9uIGZpcnN0XG4gICAgc3VwZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dChjb250ZXh0KTtcblxuICAgIC8vIElmIHdlIGhhdmUgYSBjaGlsZCB3aWRnZXQsIHVwZGF0ZSBpdHMgaW5oZXJpdGFuY2UgY29udGV4dCB0b29cbiAgICBpZiAodGhpcy5jaGlsZFdpZGdldCkge1xuICAgICAgdGhpcy5jaGlsZFdpZGdldC53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIGJ1aWxkKCkgdG8gYnVpbGQgdGhlIGNoaWxkIHdpZGdldCBhdCB0aGUgbGFzdCBtb21lbnRcbiAgb3ZlcnJpZGUgYnVpbGQoKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgLy8gQnVpbGQgdGhlIGNoaWxkIHdpZGdldCBhbmQgYWRkIGl0IHRvIGNoaWxkcmVuIGJlZm9yZSBidWlsZGluZyB0aGUgZm9ybSBmaWVsZFxuICAgIGlmICh0aGlzLmNoaWxkV2lkZ2V0KSB7XG4gICAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKHRoaXMuY2hpbGRXaWRnZXQuYnVpbGQoKSk7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBwYXJlbnQgYnVpbGRcbiAgICByZXR1cm4gc3VwZXIuYnVpbGQoKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpZWxkc2V0IENvbnRhaW5lciBCdWlsZGVyIC0gTGlza292IFN1YnN0aXR1dGlvbiBQcmluY2lwbGVcbiAqIEV4dGVuZHMgTGF5b3V0Q29udGFpbmVyTWl4aW4gdG8gaW5oZXJpdCBsYXlvdXQgZnVuY3Rpb25hbGl0eVxuICogU3BlY2lhbGl6ZWQgZm9yIGZvcm0gZmllbGRzIG9ubHlcbiAqL1xuY2xhc3MgRmllbGRzZXRDb250YWluZXJCdWlsZGVyXG4gIGV4dGVuZHMgTGF5b3V0Q29udGFpbmVyTWl4aW48SUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcj5cbiAgaW1wbGVtZW50cyBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyXG57XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdmaWVsZHNldC1sYXlvdXQnKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQRmllbGRzZXRDb250YWluZXJPcHRpb25zKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zID0geyAuLi50aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEluZGl2aWR1YWwgZmx1ZW50IG1ldGhvZHMgZm9yIEZpZWxkc2V0XG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgdGl0bGUgfSk7XG4gIH1cblxuICBzZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGRlc2NyaXB0aW9uIH0pO1xuICB9XG5cbiAgc2V0SWNvbihpY29uOiBzdHJpbmcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgaWNvbiB9KTtcbiAgfVxuXG4gIHNldENvbGxhcHNpYmxlKGNvbGxhcHNpYmxlOiBib29sZWFuKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNvbGxhcHNpYmxlIH0pO1xuICB9XG5cbiAgc2V0SXNPcGVuKGlzT3BlbjogYm9vbGVhbik6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBpc09wZW4gfSk7XG4gIH1cblxuICBzZXRMb29rKGxvb2s6ICdmaWVsZHNldCcgfCAnY2FyZCcgfCAnZ3JvdXAnKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGxvb2sgfSk7XG4gIH1cblxuICBzZXRTaG93SGVhZGVyKHNob3dIZWFkZXI6IGJvb2xlYW4pOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgc2hvd0hlYWRlciB9KTtcbiAgfVxuXG4gIHNldENvbHMoY29sczogbnVtYmVyKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNvbHMgfSk7XG4gIH1cblxuICAvLyBPbmx5IGZvcm0gZmllbGRzIGFyZSBhbGxvd2VkIGluIGZpZWxkc2V0XG4gIGZvcm1GaWVsZChsYWJlbDogc3RyaW5nLCBkZWxlZ2F0ZT86IChmaWVsZDogSUZvcm1GaWVsZEJ1aWxkZXIpID0+IHZvaWQpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICBjb25zdCBmaWVsZCA9IG5ldyBGb3JtRmllbGRCdWlsZGVyKGxhYmVsKTtcbiAgICBmaWVsZC53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGZpZWxkKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGlsZHJlbigpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4hLnB1c2goZmllbGQuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0IFdpZGdldCBCdWlsZGVyIC0gTGlza292IFN1YnN0aXR1dGlvbiBQcmluY2lwbGVcbiAqIEV4dGVuZHMgV2lkZ2V0Q29udGFpbmVyTWl4aW4gdG8gaW5oZXJpdCBhbGwgY29tbW9uIGZ1bmN0aW9uYWxpdHlcbiAqL1xuY2xhc3MgTGlzdFdpZGdldEJ1aWxkZXIgZXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbjxJTGlzdFdpZGdldEJ1aWxkZXI+IGltcGxlbWVudHMgSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2xpc3QnKTtcbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQTGlzdFdpZGdldE9wdGlvbnMpOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBMaXN0IFdpZGdldFxuICBzZXREYXRhU291cmNlKGRhdGFTb3VyY2U6IGFueVtdKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZGF0YVNvdXJjZSB9KTtcbiAgfVxuXG4gIHNldENvbHVtbnMoY29sdW1uczogYW55W10pOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBjb2x1bW5zIH0pO1xuICB9XG5cbiAgLy8gRXZlbnQgaGFuZGxlcnNcbiAgc2V0T25Sb3dDbGljayhoYW5kbGVyOiAocm93OiBhbnkpID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBvblJvd0NsaWNrOiBoYW5kbGVyIH0pO1xuICB9XG5cbiAgc2V0T25Sb3dEb3VibGVDbGljayhoYW5kbGVyOiAocm93OiBhbnkpID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBvblJvd0RvdWJsZUNsaWNrOiBoYW5kbGVyIH0pO1xuICB9XG5cbiAgc2V0T25TZWxlY3Rpb25DaGFuZ2UoaGFuZGxlcjogKHNlbGVjdGVkUm93czogYW55W10pID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBvblNlbGVjdGlvbkNoYW5nZTogaGFuZGxlciB9KTtcbiAgfVxuXG4gIHNldE9uUm93Q29tbWFuZChoYW5kbGVyOiAoY29tbWFuZDogYW55LCBzZWxlY3RlZFJvd3M6IGFueVtdKSA9PiB2b2lkKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgb25Sb3dDb21tYW5kOiBoYW5kbGVyIH0pO1xuICB9XG5cbiAgLy8gVGFibGUgZmVhdHVyZXNcbiAgc2V0UGFnaW5nKHBhZ2luZzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHBhZ2luZyB9KTtcbiAgfVxuXG4gIHNldFNob3dIZWFkZXIoc2hvdzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dIZWFkZXI6IHNob3cgfSk7XG4gIH1cblxuICBzZXRTaG93Rm9vdGVyKHNob3c6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzaG93Rm9vdGVyOiBzaG93IH0pO1xuICB9XG5cbiAgc2V0Rml4SGVhZGVyKGZpeDogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGZpeEhlYWRlcjogZml4IH0pO1xuICB9XG5cbiAgc2V0Rml4Rm9vdGVyKGZpeDogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGZpeEZvb3RlcjogZml4IH0pO1xuICB9XG5cbiAgc2V0RmV0Y2hEYXRhTW9kZShtb2RlOiAnYXV0bycgfCAnbWFudWFsJyk6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGZldGNoRGF0YU1vZGU6IG1vZGUgfSk7XG4gIH1cblxuICBzZXRQYXJlbnRGaWVsZChmaWVsZDogc3RyaW5nKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgcGFyZW50RmllbGQ6IGZpZWxkIH0pO1xuICB9XG5cbiAgc2V0TWluSGVpZ2h0KGhlaWdodDogc3RyaW5nIHwgbnVtYmVyKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgbWluSGVpZ2h0OiBoZWlnaHQgfSk7XG4gIH1cblxuICAvLyBTZWxlY3Rpb24gJiBJbmRleFxuICBzZXRTaG93SW5kZXgoc2hvdzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dJbmRleDogc2hvdyB9KTtcbiAgfVxuXG4gIHNldEFsbG93U2VsZWN0aW9uKGFsbG93OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgYWxsb3dTZWxlY3Rpb246IGFsbG93IH0pO1xuICB9XG5cbiAgLy8gQ29tbWFuZHNcbiAgc2V0UHJpbWFyeUNvbW1hbmRzKGNvbW1hbmRzOiBhbnlbXSk6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHByaW1hcnlDb21tYW5kczogY29tbWFuZHMgfSk7XG4gIH1cblxuICBzZXRTZWNvbmRhcnlDb21tYW5kcyhjb21tYW5kczogYW55W10pOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzZWNvbmRhcnlDb21tYW5kczogY29tbWFuZHMgfSk7XG4gIH1cblxuICAvLyBMb2FkaW5nXG4gIHNldExvYWRpbmcobG9hZGluZzogeyBlbmFibGVkPzogYm9vbGVhbjsgYW5pbWF0aW9uPzogYm9vbGVhbiB9KTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgbG9hZGluZyB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERpYWxvZyBDb250YWluZXIgQnVpbGRlciAtIFNwZWNpYWxpemVkIGZvciBkaWFsb2cgZnVuY3Rpb25hbGl0eVxuICogVXNlcyBjb21wb3NpdGlvbiBpbnN0ZWFkIG9mIGluaGVyaXRhbmNlIGZvciBjbGVhbmVyIHNlcGFyYXRpb25cbiAqL1xuY2xhc3MgRGlhbG9nQ29udGFpbmVyQnVpbGRlciBpbXBsZW1lbnRzIElEaWFsb2dCdWlsZGVyIHtcbiAgcHJpdmF0ZSBkaWFsb2dTdGF0ZTogRGlhbG9nQnVpbGRlclN0YXRlID0ge1xuICAgIHR5cGU6ICdmbGV4LWxheW91dCcsIC8vIFRoaXMgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4gY29udGVudCBsYXlvdXQgZXhpc3RzXG4gICAgY2hpbGRyZW46IFtdLFxuICAgIG1vZGU6ICdlZGl0JyxcbiAgICBkaWFsb2dPcHRpb25zOiB7XG4gICAgICB0aXRsZTogJycsXG4gICAgICBzaXplOiAnbWQnLFxuICAgICAgY2xvc2VCdXR0b246IGZhbHNlLFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgZm9vdGVyOiB7XG4gICAgICAgIHByZWZpeDogW10sXG4gICAgICAgIHN1ZmZpeDogW10sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgcHJpdmF0ZSBwb3B1cFNlcnZpY2U6IEFYUG9wdXBTZXJ2aWNlO1xuICBwcml2YXRlIGNvbnRlbnRMYXlvdXQ/OiBBWFBXaWRnZXROb2RlO1xuXG4gIGNvbnN0cnVjdG9yKHBvcHVwU2VydmljZT86IEFYUG9wdXBTZXJ2aWNlKSB7XG4gICAgaWYgKHBvcHVwU2VydmljZSkge1xuICAgICAgdGhpcy5wb3B1cFNlcnZpY2UgPSBwb3B1cFNlcnZpY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9wdXBTZXJ2aWNlID0gaW5qZWN0KEFYUG9wdXBTZXJ2aWNlKTtcbiAgICB9XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUERpYWxvZ0NvbnRhaW5lck9wdGlvbnMpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgdGhpcy5kaWFsb2dTdGF0ZS5kaWFsb2dPcHRpb25zID0geyAuLi50aGlzLmRpYWxvZ1N0YXRlLmRpYWxvZ09wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEluZGl2aWR1YWwgZmx1ZW50IG1ldGhvZHMgZm9yIERpYWxvZ1xuICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKTogSURpYWxvZ0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyB0aXRsZSB9KTtcbiAgfVxuXG4gIHNldE1lc3NhZ2UobWVzc2FnZT86IHN0cmluZyk6IElEaWFsb2dCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHNldFNpemUoc2l6ZTogYW55KTogSURpYWxvZ0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzaXplIH0pO1xuICB9XG5cbiAgc2V0Q2xvc2VCdXR0b24oY2xvc2VCdXR0b246IGJvb2xlYW4pOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNsb3NlQnV0dG9uIH0pO1xuICB9XG5cbiAgc2V0Q29udGV4dChjb250ZXh0OiBhbnkpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNvbnRleHQgfSk7XG4gIH1cblxuICBjb250ZW50KGRlbGVnYXRlOiAobGF5b3V0QnVpbGRlcjogSUZsZXhDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSURpYWxvZ0J1aWxkZXIge1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgLy8gQ3JlYXRlIGEgZmxleCBjb250YWluZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiB0aHJvdWdoIExheW91dEJ1aWxkZXJcbiAgICAgIGNvbnN0IGZsZXhDb250YWluZXIgPSBuZXcgRmxleENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICAgIGZsZXhDb250YWluZXIuc2V0RGlyZWN0aW9uKCdjb2x1bW4nKTtcbiAgICAgIGZsZXhDb250YWluZXIuc2V0R2FwKCcxMHB4Jyk7XG5cbiAgICAgIGRlbGVnYXRlKGZsZXhDb250YWluZXIpO1xuICAgICAgdGhpcy5jb250ZW50TGF5b3V0ID0gZmxleENvbnRhaW5lci5idWlsZCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEFjdGlvbnMoZGVsZWdhdGU/OiAoYWN0aW9uczogSUFjdGlvbkJ1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBjb25zdCBhY3Rpb25CdWlsZGVyID0gbmV3IEFjdGlvbkJ1aWxkZXIodGhpcyk7XG4gICAgICBkZWxlZ2F0ZShhY3Rpb25CdWlsZGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRDdXN0b21BY3Rpb24oYWN0aW9uOiBBWFBBY3Rpb25NZW51SXRlbSk6IElEaWFsb2dCdWlsZGVyIHtcbiAgICAvLyBBZGQgdG8gYWN0aW9ucyBiYXNlZCBvbiBwb3NpdGlvblxuICAgIGNvbnN0IHBvc2l0aW9uID0gKGFjdGlvbiBhcyBhbnkpLnBvc2l0aW9uIHx8ICdzdWZmaXgnO1xuXG4gICAgaWYgKHBvc2l0aW9uID09PSAncHJlZml4Jykge1xuICAgICAgaWYgKCF0aGlzLmRpYWxvZ1N0YXRlLmFjdGlvbnMhLmZvb3RlciEucHJlZml4KSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU3RhdGUuYWN0aW9ucyEuZm9vdGVyIS5wcmVmaXggPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nU3RhdGUuYWN0aW9ucyEuZm9vdGVyIS5wcmVmaXghLnB1c2goYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmRpYWxvZ1N0YXRlLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4KSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU3RhdGUuYWN0aW9ucyEuZm9vdGVyIS5zdWZmaXggPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nU3RhdGUuYWN0aW9ucyEuZm9vdGVyIS5zdWZmaXghLnB1c2goYWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEJ1aWxkIG1ldGhvZCB0byBjcmVhdGUgZGlhbG9nIG5vZGVcbiAgYnVpbGQoKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBjb250ZW50IGxheW91dCwgdXNlIGl0IGRpcmVjdGx5IHRvIGF2b2lkIGV4dHJhIHdyYXBwZXJcbiAgICBpZiAodGhpcy5jb250ZW50TGF5b3V0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLmNvbnRlbnRMYXlvdXQsXG4gICAgICAgIC8vIEFkZCBkaWFsb2ctc3BlY2lmaWMgcHJvcGVydGllc1xuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgLi4udGhpcy5jb250ZW50TGF5b3V0Lm9wdGlvbnMsXG4gICAgICAgICAgLi4udGhpcy5kaWFsb2dTdGF0ZS5kaWFsb2dPcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBkaWFsb2cgc3RhdGUgc3RydWN0dXJlIGlmIG5vIGNvbnRlbnRcbiAgICBjb25zdCByZXN1bHQ6IEFYUFdpZGdldE5vZGUgPSB7XG4gICAgICAuLi50aGlzLmRpYWxvZ1N0YXRlLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG5cbiAgICAvLyBBZGQgZGlhbG9nLXNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBpZiAodGhpcy5kaWFsb2dTdGF0ZS5kaWFsb2dPcHRpb25zKSB7XG4gICAgICByZXN1bHQub3B0aW9ucyA9IHsgLi4ucmVzdWx0Lm9wdGlvbnMsIC4uLnRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucyB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBEaWFsb2ctc3BlY2lmaWMgbWV0aG9kc1xuICBhc3luYyBzaG93KCk6IFByb21pc2U8QVhQRGlhbG9nUmVmPiB7XG4gICAgY29uc3QgZGlhbG9nTm9kZSA9IHRoaXMuYnVpbGQoKTtcblxuICAgIC8vIEltcG9ydCB0aGUgZGlhbG9nIHJlbmRlcmVyIGNvbXBvbmVudCBkeW5hbWljYWxseVxuICAgIGNvbnN0IHsgQVhQRGlhbG9nUmVuZGVyZXJDb21wb25lbnQgfSA9IGF3YWl0IGltcG9ydCgnLi9kaWFsb2ctcmVuZGVyZXIuY29tcG9uZW50Jyk7XG5cbiAgICAvLyBDcmVhdGUgZGlhbG9nIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBkaWFsb2dDb25maWcgPSB7XG4gICAgICB0aXRsZTogdGhpcy5kaWFsb2dTdGF0ZS5kaWFsb2dPcHRpb25zPy50aXRsZSB8fCAnJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucz8ubWVzc2FnZSxcbiAgICAgIGNvbnRleHQ6IHRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucz8uY29udGV4dCB8fCB7fSxcbiAgICAgIGRlZmluaXRpb246IGRpYWxvZ05vZGUsXG4gICAgICBhY3Rpb25zOiB0aGlzLmRpYWxvZ1N0YXRlLmFjdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIFRoZSBQcm9taXNlIHJlc29sdmVzIHdoZW4gdXNlciBjbGlja3MgYW4gYWN0aW9uIGJ1dHRvblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5wb3B1cFNlcnZpY2Uub3BlbihBWFBEaWFsb2dSZW5kZXJlckNvbXBvbmVudCwge1xuICAgICAgICB0aXRsZTogZGlhbG9nQ29uZmlnLnRpdGxlLFxuICAgICAgICBzaXplOiB0aGlzLmRpYWxvZ1N0YXRlLmRpYWxvZ09wdGlvbnM/LnNpemUgfHwgJ21kJyxcbiAgICAgICAgY2xvc2VCdXR0b246IHRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucz8uY2xvc2VCdXR0b24gfHwgZmFsc2UsXG4gICAgICAgIGNsb3NlT25CYWNrZHJvcENsaWNrOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNvbmZpZzogZGlhbG9nQ29uZmlnLFxuICAgICAgICAgIGNhbGxCYWNrOiAocmVzdWx0OiBBWFBEaWFsb2dSZWYpID0+IHtcbiAgICAgICAgICAgIC8vIFJlc29sdmUgd2l0aCB0aGUgZGlhbG9nIHJlZmVyZW5jZSB3aGVuIHVzZXIgY2xpY2tzIGFuIGFjdGlvblxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBXaWRnZXQgQnVpbGRlciBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuLyoqXG4gKiBXaWRnZXQgQnVpbGRlciAtIFNpbmdsZSBSZXNwb25zaWJpbGl0eSBQcmluY2lwbGVcbiAqIEhhbmRsZXMgaW5kaXZpZHVhbCB3aWRnZXQgY29uZmlndXJhdGlvbiBhbmQgYnVpbGRpbmdcbiAqL1xuY2xhc3MgV2lkZ2V0QnVpbGRlciBpbXBsZW1lbnRzIElXaWRnZXRCdWlsZGVyIHtcbiAgcHJpdmF0ZSB3aWRnZXRTdGF0ZTogV2lkZ2V0QnVpbGRlclN0YXRlID0ge1xuICAgIHR5cGU6ICd3aWRnZXQnIGFzIGNvbnN0LFxuICAgIG9wdGlvbnM6IHt9IGFzIGFueSxcbiAgfTtcblxuICBwcml2YXRlIGluaGVyaXRhbmNlQ29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0ID0ge307XG5cbiAgY29uc3RydWN0b3IobmFtZT86IHN0cmluZykge1xuICAgIGlmIChuYW1lKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm5hbWUgPSBuYW1lO1xuICAgIH1cbiAgfVxuXG4gIHR5cGUodHlwZTogc3RyaW5nKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIHRoaXMud2lkZ2V0U3RhdGUudHlwZSA9IHR5cGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBuYW1lKG5hbWU6IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICB0aGlzLndpZGdldFN0YXRlLm5hbWUgPSBuYW1lO1xuICAgIGlmICghdGhpcy53aWRnZXRTdGF0ZS5wYXRoKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLnBhdGggPSBuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhdGgocGF0aDogc3RyaW5nKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIHRoaXMud2lkZ2V0U3RhdGUucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvcHRpb25zKG9wdGlvbnM6IGFueSk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICAvLyBNZXJnZSBvcHRpb25zIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRvIHByZXNlcnZlIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zID0geyAuLi50aGlzLndpZGdldFN0YXRlLm9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxheW91dCh2YWx1ZTogUGFydGlhbDxBWFBHcmlkTGF5b3V0T3B0aW9ucz4gfCBudW1iZXIpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUubGF5b3V0ID0ge1xuICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICBzbTogeyBjb2xTcGFuOiAxMiB9LFxuICAgICAgICAgIG1kOiB7IGNvbFNwYW46IDEyIH0sXG4gICAgICAgICAgbGc6IHsgY29sU3BhbjogdmFsdWUgfSxcbiAgICAgICAgICB4bDogeyBjb2xTcGFuOiB2YWx1ZSB9LFxuICAgICAgICAgIHh4bDogeyBjb2xTcGFuOiB2YWx1ZSB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5sYXlvdXQgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtb2RlKG1vZGU6IEFYUFdpZGdldFJlbmRlck1vZGUpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5tb2RlID0gbW9kZTtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5tb2RlID0gbW9kZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZpc2libGUoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIGlmICghdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zWyd2aXNpYmxlJ10gPSBjb25kaXRpb247XG4gICAgdGhpcy5pbmhlcml0YW5jZUNvbnRleHQudmlzaWJsZSA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpc2FibGVkKGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMud2lkZ2V0U3RhdGUub3B0aW9ucykge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9uc1snZGlzYWJsZWQnXSA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5kaXNhYmxlZCA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlYWRvbmx5KGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMud2lkZ2V0U3RhdGUub3B0aW9ucykge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9uc1sncmVhZG9ubHknXSA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5yZWFkb25seSA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLndpZGdldFN0YXRlLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnNbJ2RpcmVjdGlvbiddID0gZGlyZWN0aW9uO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEluaGVyaXRhbmNlIGNvbnRleHQgbWV0aG9kc1xuICB3aXRoSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dCA9IG1lcmdlSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgLy8gQXBwbHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gd2lkZ2V0IHN0YXRlXG4gICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlSW5oZXJpdGVkUHJvcGVydGllcyhjb250ZXh0LCB0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG5cbiAgICAvLyBBbHdheXMgYXBwbHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgKHJlbW92ZSB0aGUgY29uZGl0aW9ucyB0aGF0IGNoZWNrIGlmIGFscmVhZHkgc2V0KVxuICAgIC8vIFRoaXMgYWxsb3dzIHByb3BlcnRpZXMgdG8gYmUgdXBkYXRlZCB3aGVuIGluaGVyaXRhbmNlIGNvbnRleHQgY2hhbmdlc1xuICAgIGlmIChyZXNvbHZlZC5tb2RlKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm1vZGUgPSByZXNvbHZlZC5tb2RlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zKSB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnMgPSB7fTtcblxuICAgIGlmIChyZXNvbHZlZC5kaXNhYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnNbJ2Rpc2FibGVkJ10gPSByZXNvbHZlZC5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZWQucmVhZG9ubHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zWydyZWFkb25seSddID0gcmVzb2x2ZWQucmVhZG9ubHk7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVkLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnNbJ2RpcmVjdGlvbiddID0gcmVzb2x2ZWQuZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlZC52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9uc1sndmlzaWJsZSddID0gcmVzb2x2ZWQudmlzaWJsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldEluaGVyaXRhbmNlQ29udGV4dCgpOiBJbmhlcml0YW5jZUNvbnRleHQge1xuICAgIHJldHVybiB7IC4uLnRoaXMuaW5oZXJpdGFuY2VDb250ZXh0IH07XG4gIH1cblxuICBidWlsZCgpOiBBWFBXaWRnZXROb2RlIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy53aWRnZXRTdGF0ZS5uYW1lLFxuICAgICAgdHlwZTogdGhpcy53aWRnZXRTdGF0ZS50eXBlLFxuICAgICAgb3B0aW9uczogdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zLFxuICAgICAgbW9kZTogdGhpcy53aWRnZXRTdGF0ZS5tb2RlLFxuICAgICAgcGF0aDogdGhpcy53aWRnZXRTdGF0ZS5wYXRoLFxuICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLndpZGdldFN0YXRlLmRlZmF1bHRWYWx1ZSxcbiAgICB9O1xuICB9XG59XG5cbi8vI3JlZ2lvbiAtLS0tICAgQWN0aW9uIEJ1aWxkZXIgSW1wbGVtZW50YXRpb24gICAtLS0tXG5cbmNsYXNzIEFjdGlvbkJ1aWxkZXIgaW1wbGVtZW50cyBJQWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nQnVpbGRlcjogRGlhbG9nQ29udGFpbmVyQnVpbGRlcikge31cblxuICBjYW5jZWwodGV4dD86IHN0cmluZyk6IElBY3Rpb25CdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuZGlhbG9nQnVpbGRlclsnZGlhbG9nU3RhdGUnXS5hY3Rpb25zIS5mb290ZXIhLnN1ZmZpeCkge1xuICAgICAgdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4ID0gW107XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nQnVpbGRlclsnZGlhbG9nU3RhdGUnXS5hY3Rpb25zIS5mb290ZXIhLnN1ZmZpeCEucHVzaCh7XG4gICAgICB0aXRsZTogdGV4dCB8fCAnQGdlbmVyYWw6YWN0aW9ucy5jYW5jZWwudGl0bGUnLFxuICAgICAgaWNvbjogJ2ZhLXRpbWVzJyxcbiAgICAgIGNvbG9yOiAnZGVmYXVsdCcsXG4gICAgICBjb21tYW5kOiB7IG5hbWU6ICdjYW5jZWwnIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJtaXQodGV4dD86IHN0cmluZyk6IElBY3Rpb25CdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuZGlhbG9nQnVpbGRlclsnZGlhbG9nU3RhdGUnXS5hY3Rpb25zIS5mb290ZXIhLnN1ZmZpeCkge1xuICAgICAgdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4ID0gW107XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nQnVpbGRlclsnZGlhbG9nU3RhdGUnXS5hY3Rpb25zIS5mb290ZXIhLnN1ZmZpeCEucHVzaCh7XG4gICAgICB0aXRsZTogdGV4dCB8fCAnQGdlbmVyYWw6YWN0aW9ucy5zdWJtaXQudGl0bGUnLFxuICAgICAgaWNvbjogJ2ZhLWNoZWNrJyxcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICBjb21tYW5kOiB7IG5hbWU6ICdzdWJtaXQnLCBvcHRpb25zOiB7IHZhbGlkYXRlOiB0cnVlIH0gfSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGN1c3RvbShhY3Rpb246IEFYUEFjdGlvbk1lbnVJdGVtKTogSUFjdGlvbkJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4KSB7XG4gICAgICB0aGlzLmRpYWxvZ0J1aWxkZXJbJ2RpYWxvZ1N0YXRlJ10uYWN0aW9ucyEuZm9vdGVyIS5zdWZmaXggPSBbXTtcbiAgICB9XG4gICAgdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4IS5wdXNoKGFjdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgU3RlcCBXaXphcmQgQnVpbGRlciBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuLyoqXG4gKiBTdGVwIEJ1aWxkZXIgLSBCdWlsZHMgaW5kaXZpZHVhbCBzdGVwcyBmb3Igc3RlcCB3aXphcmRcbiAqL1xuY2xhc3MgU3RlcEJ1aWxkZXIge1xuICBwcml2YXRlIGljb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgc2tpcHBhYmxlID0gZmFsc2U7XG4gIHByaXZhdGUgY29udGVudE5vZGU/OiBBWFBXaWRnZXROb2RlO1xuICBwcml2YXRlIGluaGVyaXRhbmNlQ29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpZDogc3RyaW5nLFxuICAgIHByaXZhdGUgdGl0bGU6IHN0cmluZyxcbiAgKSB7fVxuXG4gIHNldEljb24oaWNvbjogc3RyaW5nKTogU3RlcEJ1aWxkZXIge1xuICAgIHRoaXMuaWNvbiA9IGljb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogU3RlcEJ1aWxkZXIge1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldFNraXBwYWJsZShza2lwcGFibGU6IGJvb2xlYW4pOiBTdGVwQnVpbGRlciB7XG4gICAgdGhpcy5za2lwcGFibGUgPSBza2lwcGFibGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb250ZW50KGRlbGVnYXRlOiAobGF5b3V0QnVpbGRlcjogSUxheW91dEJ1aWxkZXIpID0+IHZvaWQpOiBTdGVwQnVpbGRlciB7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAvLyBDcmVhdGUgTGF5b3V0QnVpbGRlciBpbiBpbmplY3Rpb24gY29udGV4dCAod2lsbCBiZSBjYWxsZWQgZnJvbSBjb21wb25lbnQpXG4gICAgICBjb25zdCBsYXlvdXRCdWlsZGVyID0gbmV3IExheW91dEJ1aWxkZXIoKTtcblxuICAgICAgLy8g4pyFIElNUE9SVEFOVDogUHJvcGFnYXRlIGluaGVyaXRhbmNlIGNvbnRleHQgdG8gY29udGVudFxuICAgICAgKGxheW91dEJ1aWxkZXIgYXMgYW55KS5pbmhlcml0YW5jZUNvbnRleHQgPSB7IC4uLnRoaXMuaW5oZXJpdGFuY2VDb250ZXh0IH07XG5cbiAgICAgIGRlbGVnYXRlKGxheW91dEJ1aWxkZXIpO1xuICAgICAgdGhpcy5jb250ZW50Tm9kZSA9IGxheW91dEJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCk6IFN0ZXBCdWlsZGVyIHtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dCA9IG1lcmdlSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYnVpbGQoKTogQVhQU3RlcERlZmluaXRpb24ge1xuICAgIGlmICghdGhpcy5jb250ZW50Tm9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGVwICcke3RoaXMuaWR9JyBtdXN0IGhhdmUgY29udGVudGApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAgaWNvbjogdGhpcy5pY29uLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBza2lwcGFibGU6IHRoaXMuc2tpcHBhYmxlLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50Tm9kZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogU3RlcCBXaXphcmQgQnVpbGRlciAtIEJ1aWxkcyBzdGVwIHdpemFyZCB3aWRnZXRcbiAqL1xuY2xhc3MgU3RlcFdpemFyZEJ1aWxkZXIgZXh0ZW5kcyBMYXlvdXRDb250YWluZXJNaXhpbjxJU3RlcFdpemFyZEJ1aWxkZXI+IGltcGxlbWVudHMgSVN0ZXBXaXphcmRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBzdGVwczogQVhQU3RlcERlZmluaXRpb25bXSA9IFtdO1xuICBwcml2YXRlIGxpbmVhciA9IHRydWU7XG4gIHByaXZhdGUgd2l6YXJkRGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ2hvcml6b250YWwnO1xuICBwcml2YXRlIGxvb2s/OiBzdHJpbmc7XG4gIHByaXZhdGUgc2hvd0FjdGlvbnM/OiBib29sZWFuOyAvLyB1bmRlZmluZWQgPSBhdXRvLWRldGVjdFxuICBwcml2YXRlIHdpemFyZEFjdGlvbnM/OiBBWFBXaXphcmRBY3Rpb25zO1xuICBwcml2YXRlIGd1YXJkcz86IHtcbiAgICBuZXh0PzogKHBheWxvYWQ6IEFYUFN0ZXBXaXphcmRHdWFyZFBheWxvYWQpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHByZXY/OiAocGF5bG9hZDogQVhQU3RlcFdpemFyZEd1YXJkUGF5bG9hZCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG4gIH07XG4gIHByaXZhdGUgZXZlbnRzPzoge1xuICAgIG9uU3RlcENoYW5nZWQ/OiAoc3RhdHVzOiBBWFBTdGVwV2l6YXJkU3RhdHVzKSA9PiB2b2lkO1xuICAgIG9uQ29tcGxldGU/OiAoc3RhdHVzOiBBWFBTdGVwV2l6YXJkU3RhdHVzKSA9PiB2b2lkO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdzdGVwLXdpemFyZCcpO1xuICB9XG5cbiAgc2V0TGluZWFyKGxpbmVhcjogYm9vbGVhbik6IElTdGVwV2l6YXJkQnVpbGRlciB7XG4gICAgdGhpcy5saW5lYXIgPSBsaW5lYXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnKTogSVN0ZXBXaXphcmRCdWlsZGVyIHtcbiAgICB0aGlzLndpemFyZERpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldExvb2sobG9vazogc3RyaW5nKTogSVN0ZXBXaXphcmRCdWlsZGVyIHtcbiAgICB0aGlzLmxvb2sgPSBsb29rO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0U2hvd0FjdGlvbnMoc2hvdzogYm9vbGVhbik6IElTdGVwV2l6YXJkQnVpbGRlciB7XG4gICAgdGhpcy5zaG93QWN0aW9ucyA9IHNob3c7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRBY3Rpb25zKGFjdGlvbnM6IEFYUFdpemFyZEFjdGlvbnMpOiBJU3RlcFdpemFyZEJ1aWxkZXIge1xuICAgIHRoaXMud2l6YXJkQWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRHdWFyZHMoZ3VhcmRzOiB7XG4gICAgbmV4dD86IChwYXlsb2FkOiBBWFBTdGVwV2l6YXJkR3VhcmRQYXlsb2FkKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcbiAgICBwcmV2PzogKHBheWxvYWQ6IEFYUFN0ZXBXaXphcmRHdWFyZFBheWxvYWQpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuICB9KTogSVN0ZXBXaXphcmRCdWlsZGVyIHtcbiAgICB0aGlzLmd1YXJkcyA9IGd1YXJkcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEV2ZW50cyhldmVudHM6IHtcbiAgICBvblN0ZXBDaGFuZ2VkPzogKHN0YXR1czogQVhQU3RlcFdpemFyZFN0YXR1cykgPT4gdm9pZDtcbiAgICBvbkNvbXBsZXRlPzogKHN0YXR1czogQVhQU3RlcFdpemFyZFN0YXR1cykgPT4gdm9pZDtcbiAgfSk6IElTdGVwV2l6YXJkQnVpbGRlciB7XG4gICAgdGhpcy5ldmVudHMgPSBldmVudHM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGVwKGlkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGRlbGVnYXRlOiAoc3RlcDogU3RlcEJ1aWxkZXIpID0+IHZvaWQpOiBJU3RlcFdpemFyZEJ1aWxkZXIge1xuICAgIGNvbnN0IHN0ZXBCdWlsZGVyID0gbmV3IFN0ZXBCdWlsZGVyKGlkLCB0aXRsZSk7XG5cbiAgICAvLyDinIUgSU1QT1JUQU5UOiBQcm9wYWdhdGUgaW5oZXJpdGFuY2UgY29udGV4dCB0byBzdGVwXG4gICAgc3RlcEJ1aWxkZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG5cbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKHN0ZXBCdWlsZGVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0ZXBzLnB1c2goc3RlcEJ1aWxkZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvdmVycmlkZSBidWlsZCgpOiBBWFBXaWRnZXROb2RlIHtcbiAgICAvLyDinIUgVmFsaWRhdGlvblxuICAgIGlmICh0aGlzLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGVwV2l6YXJkIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3RlcCcpO1xuICAgIH1cblxuICAgIC8vIOKchSBDaGVjayBkdXBsaWNhdGUgSURzXG4gICAgY29uc3QgaWRzID0gdGhpcy5zdGVwcy5tYXAoKHMpID0+IHMuaWQpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSBpZHMuZmlsdGVyKChpZCwgaW5kZXgpID0+IGlkcy5pbmRleE9mKGlkKSAhPT0gaW5kZXgpO1xuICAgIGlmIChkdXBsaWNhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHN0ZXAgSURzIGZvdW5kOiAke2R1cGxpY2F0ZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZpbml0aW9uOiBBWFBTdGVwV2l6YXJkRGVmaW5pdGlvbiA9IHtcbiAgICAgIHN0ZXBzOiB0aGlzLnN0ZXBzLFxuICAgICAgbGluZWFyOiB0aGlzLmxpbmVhcixcbiAgICAgIGRpcmVjdGlvbjogdGhpcy53aXphcmREaXJlY3Rpb24sXG4gICAgICBsb29rOiB0aGlzLmxvb2ssXG4gICAgICAvLyBEbyBub3QgYXV0by1kZXRlY3QgYmFzZWQgb24gZGlhbG9nIGNvbnRleHQ7IGtlZXAgZXhwbGljaXQgb3IgdW5kZWZpbmVkXG4gICAgICBzaG93QWN0aW9uczogdGhpcy5zaG93QWN0aW9ucyxcbiAgICAgIGFjdGlvbnM6IHRoaXMud2l6YXJkQWN0aW9ucyxcbiAgICAgIGd1YXJkczogdGhpcy5ndWFyZHMsXG4gICAgICBldmVudHM6IHRoaXMuZXZlbnRzLFxuICAgIH07XG5cbiAgICBjb25zdCBub2RlOiBBWFBXaWRnZXROb2RlID0ge1xuICAgICAgbmFtZTogdGhpcy5jb250YWluZXJTdGF0ZS5uYW1lLFxuICAgICAgdHlwZTogJ3N0ZXAtd2l6YXJkJyxcbiAgICAgIG9wdGlvbnM6IHsgZGVmaW5pdGlvbiB9LFxuICAgICAgbW9kZTogdGhpcy5jb250YWluZXJTdGF0ZS5tb2RlLFxuICAgIH07XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cbiJdfQ==","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' && formField.children && 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.4\", ngImport: i0, type: AXPLayoutConversionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPLayoutConversionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPLayoutConversionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWNvbnZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9sYXlvdXQtY29udmVyc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBVzNDLE1BQU0sT0FBTywwQkFBMEI7SUFIdkM7UUFJRSwrQkFBK0I7UUFFdkIsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUNuRCx3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztLQStTM0U7SUE3U0MsWUFBWTtJQUVaLHNDQUFzQztJQUV0Qzs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsY0FBd0M7UUFDNUQsb0RBQW9EO1FBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuRSxvQkFBb0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUM7UUFDN0MsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLFVBQVUsR0FBa0I7WUFDaEMsSUFBSSxFQUFFLGFBQWE7WUFDbkIsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixPQUFPLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUU7d0JBQ1AsT0FBTyxFQUFFLENBQUM7d0JBQ1YsR0FBRyxFQUFFLE1BQU07cUJBQ1o7aUJBQ0Y7YUFDRjtZQUNELFFBQVEsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFF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QUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUFdpZGdldE5vZGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBWFBEeW5hbWljRm9ybURlZmluaXRpb24sXG4gIEFYUER5bmFtaWNGb3JtRmllbGREZWZpbml0aW9uLFxuICBBWFBEeW5hbWljRm9ybUdyb3VwRGVmaW5pdGlvbixcbiAgQVhQRHluYW1pY0Zvcm1Nb2RlLFxufSBmcm9tICcuL2xheW91dC1idWlsZGVyLnR5cGVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUExheW91dENvbnZlcnNpb25TZXJ2aWNlIHtcbiAgLy8jcmVnaW9uIC0tLS0gICBDYWNoaW5nICAgLS0tLVxuXG4gIHByaXZhdGUgd2lkZ2V0VHJlZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdpZGdldE5vZGU+KCk7XG4gIHByaXZhdGUgZm9ybURlZmluaXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBBWFBEeW5hbWljRm9ybURlZmluaXRpb24+KCk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogQ29udmVydCBBWFBEeW5hbWljRm9ybURlZmluaXRpb24gdG8gQVhQV2lkZ2V0Tm9kZSB0cmVlIHN0cnVjdHVyZVxuICAgKiBHcm91cHMgYmVjb21lIEZpZWxkc2V0IExheW91dHMgd2l0aCBGb3JtIEZpZWxkIHdpZGdldHMgYXMgY2hpbGRyZW5cbiAgICogRmllbGRzIGJlY29tZSBGb3JtIEZpZWxkIHdpZGdldHMgd2l0aCBFZGl0b3Igd2lkZ2V0cyBhcyBjaGlsZHJlblxuICAgKi9cbiAgY29udmVydEZvcm1EZWZpbml0aW9uKGZvcm1EZWZpbml0aW9uOiBBWFBEeW5hbWljRm9ybURlZmluaXRpb24pOiBBWFBXaWRnZXROb2RlIHtcbiAgICAvLyBDcmVhdGUgY2FjaGUga2V5IGJhc2VkIG9uIGZvcm0gZGVmaW5pdGlvbiBjb250ZW50XG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmNyZWF0ZUZvcm1EZWZpbml0aW9uQ2FjaGVLZXkoZm9ybURlZmluaXRpb24pO1xuXG4gICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICBpZiAodGhpcy53aWRnZXRUcmVlQ2FjaGUuaGFzKGNhY2hlS2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0VHJlZUNhY2hlLmdldChjYWNoZUtleSkhO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIHdpZGdldCB0cmVlXG4gICAgY29uc3Qgd2lkZ2V0VHJlZTogQVhQV2lkZ2V0Tm9kZSA9IHtcbiAgICAgIHR5cGU6ICdncmlkLWxheW91dCcsXG4gICAgICBuYW1lOiAnZHluYW1pYy1mb3JtLWNvbnRhaW5lcicsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHRpdGxlOiAnRHluYW1pYyBGb3JtJyxcbiAgICAgICAgZ3JpZDoge1xuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IDEsXG4gICAgICAgICAgICBnYXA6ICcxcmVtJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBmb3JtRGVmaW5pdGlvbi5ncm91cHMubWFwKChncm91cCkgPT4gdGhpcy5jcmVhdGVHcm91cEFzRmllbGRzZXRXaWRnZXQoZ3JvdXApKSxcbiAgICB9O1xuXG4gICAgLy8gQ2FjaGUgdGhlIHJlc3VsdFxuICAgIHRoaXMud2lkZ2V0VHJlZUNhY2hlLnNldChjYWNoZUtleSwgd2lkZ2V0VHJlZSk7XG5cbiAgICByZXR1cm4gd2lkZ2V0VHJlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IEFYUFdpZGdldE5vZGUgdHJlZSBiYWNrIHRvIEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvblxuICAgKiBQYXJzZXMgRmllbGRzZXQgTGF5b3V0cyBiYWNrIHRvIEdyb3Vwc1xuICAgKiBQYXJzZXMgRm9ybSBGaWVsZCB3aWRnZXRzIGJhY2sgdG8gRmllbGRzXG4gICAqL1xuICBjb252ZXJ0V2lkZ2V0VHJlZVRvRm9ybURlZmluaXRpb24od2lkZ2V0VHJlZTogQVhQV2lkZ2V0Tm9kZSk6IEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvbiB7XG4gICAgLy8gQ3JlYXRlIGNhY2hlIGtleSBiYXNlZCBvbiB3aWRnZXQgdHJlZSBjb250ZW50XG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmNyZWF0ZVdpZGdldFRyZWVDYWNoZUtleSh3aWRnZXRUcmVlKTtcblxuICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgaWYgKHRoaXMuZm9ybURlZmluaXRpb25DYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtRGVmaW5pdGlvbkNhY2hlLmdldChjYWNoZUtleSkhO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHdpZGdldCB0cmVlXG4gICAgY29uc3QgZ3JvdXBzOiBBWFBEeW5hbWljRm9ybUdyb3VwRGVmaW5pdGlvbltdID0gW107XG5cbiAgICBpZiAod2lkZ2V0VHJlZS5jaGlsZHJlbikge1xuICAgICAgd2lkZ2V0VHJlZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2ZpZWxkc2V0LWxheW91dCcpIHtcbiAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZXh0cmFjdEdyb3VwRnJvbUZpZWxkc2V0KGNoaWxkKTtcbiAgICAgICAgICBncm91cHMucHVzaChncm91cCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1EZWZpbml0aW9uID0geyBncm91cHMgfTtcblxuICAgIC8vIENhY2hlIHRoZSByZXN1bHRcbiAgICB0aGlzLmZvcm1EZWZpbml0aW9uQ2FjaGUuc2V0KGNhY2hlS2V5LCBmb3JtRGVmaW5pdGlvbik7XG5cbiAgICByZXR1cm4gZm9ybURlZmluaXRpb247XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBhIHdpZGdldCB0cmVlIHJlcHJlc2VudHMgYSB2YWxpZCBkeW5hbWljIGZvcm0gc3RydWN0dXJlXG4gICAqL1xuICB2YWxpZGF0ZUZvcm1XaWRnZXRUcmVlKHdpZGdldFRyZWU6IEFYUFdpZGdldE5vZGUpOiBib29sZWFuIHtcbiAgICBpZiAoIXdpZGdldFRyZWUgfHwgd2lkZ2V0VHJlZS50eXBlICE9PSAnZ3JpZC1sYXlvdXQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF3aWRnZXRUcmVlLmNoaWxkcmVuIHx8IHdpZGdldFRyZWUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gRW1wdHkgZm9ybSBpcyB2YWxpZFxuICAgIH1cblxuICAgIC8vIENoZWNrIHRoYXQgYWxsIGNoaWxkcmVuIGFyZSBmaWVsZHNldC1sYXlvdXQgd2lkZ2V0c1xuICAgIHJldHVybiB3aWRnZXRUcmVlLmNoaWxkcmVuLmV2ZXJ5KFxuICAgICAgKGNoaWxkKSA9PlxuICAgICAgICBjaGlsZC50eXBlID09PSAnZmllbGRzZXQtbGF5b3V0JyAmJlxuICAgICAgICBjaGlsZC5jaGlsZHJlbiAmJlxuICAgICAgICBjaGlsZC5jaGlsZHJlbi5ldmVyeShcbiAgICAgICAgICAoZm9ybUZpZWxkKSA9PiBmb3JtRmllbGQudHlwZSA9PT0gJ2Zvcm0tZmllbGQnICYmIGZvcm1GaWVsZC5jaGlsZHJlbiAmJiBmb3JtRmllbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCxcbiAgICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjYWNoZXNcbiAgICovXG4gIGNsZWFyQ2FjaGVzKCk6IHZvaWQge1xuICAgIHRoaXMud2lkZ2V0VHJlZUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5mb3JtRGVmaW5pdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNhY2hlIHN0YXRpc3RpY3NcbiAgICovXG4gIGdldENhY2hlU3RhdHMoKTogeyB3aWRnZXRUcmVlQ2FjaGVTaXplOiBudW1iZXI7IGZvcm1EZWZpbml0aW9uQ2FjaGVTaXplOiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZGdldFRyZWVDYWNoZVNpemU6IHRoaXMud2lkZ2V0VHJlZUNhY2hlLnNpemUsXG4gICAgICBmb3JtRGVmaW5pdGlvbkNhY2hlU2l6ZTogdGhpcy5mb3JtRGVmaW5pdGlvbkNhY2hlLnNpemUsXG4gICAgfTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHJpdmF0ZSBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgc2luZ2xlIGdyb3VwIHRvIEZpZWxkc2V0IHdpZGdldCBzdHJ1Y3R1cmVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlR3JvdXBBc0ZpZWxkc2V0V2lkZ2V0KGdyb3VwOiBBWFBEeW5hbWljRm9ybUdyb3VwRGVmaW5pdGlvbik6IEFYUFdpZGdldE5vZGUge1xuICAgIC8vIERldGVybWluZSBjb2x1bW5zIGNvdW50IGZyb20gbGF5b3V0IG9yIGRlZmF1bHQgdG8gMVxuICAgIGNvbnN0IGNvbHVtbnNDb3VudCA9IDE7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2ZpZWxkc2V0LWxheW91dCcsXG4gICAgICBuYW1lOiBncm91cC5uYW1lLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICB0aXRsZTogZ3JvdXAudGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBncm91cC5kZXNjcmlwdGlvbixcbiAgICAgICAgY29sczogY29sdW1uc0NvdW50LFxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNyZWF0ZUZpZWxkV2lkZ2V0cyhncm91cC5wYXJhbWV0ZXJzLCBjb2x1bW5zQ291bnQpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBmaWVsZHMgdG8gRm9ybSBGaWVsZCB3aWRnZXRzXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUZpZWxkV2lkZ2V0cyhmaWVsZHM6IEFYUER5bmFtaWNGb3JtRmllbGREZWZpbml0aW9uW10sIGNvbHVtbnNDb3VudDogbnVtYmVyKTogQVhQV2lkZ2V0Tm9kZVtdIHtcbiAgICByZXR1cm4gZmllbGRzLm1hcCgoZmllbGQpID0+IHRoaXMuY3JlYXRlRm9ybUZpZWxkV2lkZ2V0KGZpZWxkKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIHNpbmdsZSBmaWVsZCB0byBGb3JtIEZpZWxkIHdpZGdldCB3aXRoIGVkaXRvciBhcyBjaGlsZFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtRmllbGRXaWRnZXQoZmllbGQ6IEFYUER5bmFtaWNGb3JtRmllbGREZWZpbml0aW9uKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtLWZpZWxkJyxcbiAgICAgIG5hbWU6IGZpZWxkLnBhdGgsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBmaWVsZC50aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGZpZWxkLmRlc2NyaXB0aW9uLFxuICAgICAgICBzaG93TGFiZWw6IHRydWUsXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtmaWVsZC53aWRnZXRdLCAvLyBUaGUgZWRpdG9yIHdpZGdldCBiZWNvbWVzIGEgY2hpbGQgb2YgZm9ybS1maWVsZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBncm91cCBpbmZvcm1hdGlvbiBmcm9tIEZpZWxkc2V0IExheW91dCB3aWRnZXRcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdEdyb3VwRnJvbUZpZWxkc2V0KGZpZWxkc2V0Tm9kZTogQVhQV2lkZ2V0Tm9kZSk6IEFYUER5bmFtaWNGb3JtR3JvdXBEZWZpbml0aW9uIHtcbiAgICBjb25zdCBjb2x1bW5zQ291bnQgPSBmaWVsZHNldE5vZGUub3B0aW9ucz8uWydjb2xzJ10gfHwgMTtcblxuICAgIC8vIEV4dHJhY3QgZmllbGRzIGRpcmVjdGx5IGZyb20gZmllbGRzZXQgY2hpbGRyZW5cbiAgICBjb25zdCBmaWVsZHM6IEFYUER5bmFtaWNGb3JtRmllbGREZWZpbml0aW9uW10gPSBbXTtcblxuICAgIGlmIChmaWVsZHNldE5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGZpZWxkc2V0Tm9kZS5jaGlsZHJlbi5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC50eXBlID09PSAnZm9ybS1maWVsZCcgJiYgZm9ybUZpZWxkLmNoaWxkcmVuICYmIGZvcm1GaWVsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmV4dHJhY3RGaWVsZEZyb21Gb3JtV2lkZ2V0KGZvcm1GaWVsZCk7XG4gICAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogZmllbGRzZXROb2RlLm5hbWUgfHwgYGdyb3VwLSR7RGF0ZS5ub3coKX1gLFxuICAgICAgdGl0bGU6IGZpZWxkc2V0Tm9kZS5vcHRpb25zPy5bJ3RpdGxlJ10sXG4gICAgICBkZXNjcmlwdGlvbjogZmllbGRzZXROb2RlLm9wdGlvbnM/LlsnZGVzY3JpcHRpb24nXSxcbiAgICAgIHBhcmFtZXRlcnM6IGZpZWxkcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZmllbGQgaW5mb3JtYXRpb24gZnJvbSBGb3JtIEZpZWxkIHdpZGdldFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0RmllbGRGcm9tRm9ybVdpZGdldChmb3JtRmllbGROb2RlOiBBWFBXaWRnZXROb2RlKTogQVhQRHluYW1pY0Zvcm1GaWVsZERlZmluaXRpb24gfCBudWxsIHtcbiAgICBpZiAoIWZvcm1GaWVsZE5vZGUuY2hpbGRyZW4gfHwgZm9ybUZpZWxkTm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGVkaXRvcldpZGdldCA9IGZvcm1GaWVsZE5vZGUuY2hpbGRyZW5bMF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogZm9ybUZpZWxkTm9kZS5uYW1lIHx8IGVkaXRvcldpZGdldC5uYW1lIHx8IGBmaWVsZC0ke0RhdGUubm93KCl9YCxcbiAgICAgIHRpdGxlOiBmb3JtRmllbGROb2RlLm9wdGlvbnM/LlsnbGFiZWwnXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBmb3JtRmllbGROb2RlLm9wdGlvbnM/LlsnZGVzY3JpcHRpb24nXSxcbiAgICAgIHdpZGdldDogZWRpdG9yV2lkZ2V0LFxuICAgICAgbW9kZTogZm9ybUZpZWxkTm9kZS5tb2RlIGFzIEFYUER5bmFtaWNGb3JtTW9kZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBjYWNoZSBrZXkgZm9yIGZvcm0gZGVmaW5pdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtRGVmaW5pdGlvbkNhY2hlS2V5KGZvcm1EZWZpbml0aW9uOiBBWFBEeW5hbWljRm9ybURlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIC8vIENyZWF0ZSBhIGhhc2gtbGlrZSBrZXkgaW5zdGVhZCBvZiBmdWxsIEpTT04gc3RyaW5nXG4gICAgY29uc3Qga2V5UGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBrZXlQYXJ0cy5wdXNoKGBncm91cHM6JHtmb3JtRGVmaW5pdGlvbi5ncm91cHMubGVuZ3RofWApO1xuXG4gICAgZm9ybURlZmluaXRpb24uZ3JvdXBzLmZvckVhY2goKGdyb3VwLCBncm91cEluZGV4KSA9PiB7XG4gICAgICBrZXlQYXJ0cy5wdXNoKGBnJHtncm91cEluZGV4fToke2dyb3VwLm5hbWV9OiR7Z3JvdXAucGFyYW1ldGVycy5sZW5ndGh9YCk7XG5cbiAgICAgIGdyb3VwLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0sIHBhcmFtSW5kZXgpID0+IHtcbiAgICAgICAga2V5UGFydHMucHVzaChgcCR7Z3JvdXBJbmRleH0uJHtwYXJhbUluZGV4fToke3BhcmFtLnBhdGh9OiR7cGFyYW0ud2lkZ2V0LnR5cGV9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChmb3JtRGVmaW5pdGlvbi5tb2RlKSB7XG4gICAgICBrZXlQYXJ0cy5wdXNoKGBtb2RlOiR7Zm9ybURlZmluaXRpb24ubW9kZX1gKTtcbiAgICB9XG5cbiAgICAvLyBKb2luIHdpdGggZGVsaW1pdGVyIGFuZCBjcmVhdGUgYSBzaG9ydGVyIGhhc2hcbiAgICBjb25zdCBrZXlTdHJpbmcgPSBrZXlQYXJ0cy5qb2luKCd8Jyk7XG5cbiAgICAvLyBJZiBzdGlsbCB0b28gbG9uZywgY3JlYXRlIGEgc2ltcGxlIGhhc2hcbiAgICBpZiAoa2V5U3RyaW5nLmxlbmd0aCA+IDEwMCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2ltcGxlSGFzaChrZXlTdHJpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBrZXlTdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGNhY2hlIGtleSBmb3Igd2lkZ2V0IHRyZWVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlV2lkZ2V0VHJlZUNhY2hlS2V5KHdpZGdldFRyZWU6IEFYUFdpZGdldE5vZGUpOiBzdHJpbmcge1xuICAgIC8vIENyZWF0ZSBhIGhhc2gtbGlrZSBrZXkgaW5zdGVhZCBvZiBmdWxsIEpTT04gc3RyaW5nXG4gICAgY29uc3Qga2V5UGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBrZXlQYXJ0cy5wdXNoKGB0eXBlOiR7d2lkZ2V0VHJlZS50eXBlfWApO1xuXG4gICAgaWYgKHdpZGdldFRyZWUubmFtZSkge1xuICAgICAga2V5UGFydHMucHVzaChgbmFtZToke3dpZGdldFRyZWUubmFtZX1gKTtcbiAgICB9XG5cbiAgICBpZiAod2lkZ2V0VHJlZS5jaGlsZHJlbikge1xuICAgICAga2V5UGFydHMucHVzaChgY2hpbGRyZW46JHt3aWRnZXRUcmVlLmNoaWxkcmVuLmxlbmd0aH1gKTtcblxuICAgICAgd2lkZ2V0VHJlZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAga2V5UGFydHMucHVzaChgYyR7aW5kZXh9OiR7Y2hpbGQudHlwZX1gKTtcblxuICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICBrZXlQYXJ0cy5wdXNoKGBjYyR7aW5kZXh9OiR7Y2hpbGQuY2hpbGRyZW4ubGVuZ3RofWApO1xuXG4gICAgICAgICAgY2hpbGQuY2hpbGRyZW4uZm9yRWFjaCgoZ3JhbmRDaGlsZCwgZ0luZGV4KSA9PiB7XG4gICAgICAgICAgICBrZXlQYXJ0cy5wdXNoKGBnYyR7aW5kZXh9LiR7Z0luZGV4fToke2dyYW5kQ2hpbGQudHlwZX1gKTtcblxuICAgICAgICAgICAgaWYgKGdyYW5kQ2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAga2V5UGFydHMucHVzaChgZ2NjJHtpbmRleH0uJHtnSW5kZXh9OiR7Z3JhbmRDaGlsZC5jaGlsZHJlbi5sZW5ndGh9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEpvaW4gd2l0aCBkZWxpbWl0ZXIgYW5kIGNyZWF0ZSBhIHNob3J0ZXIgaGFzaFxuICAgIGNvbnN0IGtleVN0cmluZyA9IGtleVBhcnRzLmpvaW4oJ3wnKTtcblxuICAgIC8vIElmIHN0aWxsIHRvbyBsb25nLCBjcmVhdGUgYSBzaW1wbGUgaGFzaFxuICAgIGlmIChrZXlTdHJpbmcubGVuZ3RoID4gMTAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVTaW1wbGVIYXNoKGtleVN0cmluZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzaW1wbGUgaGFzaCBmcm9tIGEgc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVNpbXBsZUhhc2goc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBoYXNoID0gMDtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgY2hhcjtcbiAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDsgLy8gQ29udmVydCB0byAzMi1iaXQgaW50ZWdlclxuICAgIH1cblxuICAgIHJldHVybiBNYXRoLmFicyhoYXNoKS50b1N0cmluZygzNik7IC8vIENvbnZlcnQgdG8gYmFzZTM2IGZvciBzaG9ydGVyIHN0cmluZ1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=","import { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPPageStatus, AXPWidgetContainerComponent, AXPWidgetCoreModule, } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, model, output, signal, viewChild, } from '@angular/core';\nimport { cloneDeep, get, isEqual } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, startWith, Subject } from 'rxjs';\nimport { AXPLayoutConversionService } from './layout-conversion.service';\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 /**\n * Initial context for reset functionality\n */\n this.initialContext = {};\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 const ctx = this.context() ?? {};\n this.internalContext.set(ctx);\n // Store initial context for reset functionality\n this.initialContext = cloneDeep(ctx);\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 /**\n * Clear the form context\n */\n clear() {\n // Clear internal context\n this.internalContext.set({});\n // Update the model signal\n this.context.set({});\n }\n /**\n * Reset the form to its initial state\n */\n reset() {\n // Reset to initial context\n const resetContext = cloneDeep(this.initialContext);\n this.internalContext.set(resetContext);\n // Update the model signal\n this.context.set(resetContext);\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 && typeof data === 'object' && 'groups' in data && 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.4\", ngImport: i0, type: AXPLayoutRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.4\", 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.4\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9sYXlvdXQtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEUsT0FBTyxFQUErQiw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25HLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEVBRTNCLG1CQUFtQixHQUVwQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7OztBQXlCekUsTUFBTSxPQUFPLDBCQUEwQjtJQXZCdkM7UUF3QlUscUJBQWdCLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDekQsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFL0Q7O1dBRUc7UUFDSyxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUU1Qjs7V0FFRztRQUNLLHlCQUFvQixHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDMUMseUJBQW9CLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUVsRDs7V0FFRztRQUNLLG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUVqRDs7V0FFRztRQUNLLG9CQUFlLEdBQUcsSUFBSSxHQUFHLEVBQXlCLENBQUM7UUFFM0Q7O1dBRUc7UUFDSyxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUU1Qiw4QkFBOEI7UUFFOUI7O1dBRUc7UUFDSCxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsaURBQTRDLENBQUM7UUFFcEU7O1dBRUc7UUFDSCxZQUFPLEdBQUcsS0FBSyxDQUFNLEVBQUUsbURBQUMsQ0FBQztRQUV6Qjs7V0FFRztRQUNILFNBQUksR0FBRyxLQUFLLENBQXFCLFVBQVUsZ0RBQUMsQ0FBQztRQUU3Qzs7V0FFRztRQUNILFNBQUksR0FBRyxLQUFLLENBQXFCLE1BQU0sZ0RBQUMsQ0FBQztRQUV6QyxZQUFZO1FBRVosOENBQThDO1FBRXBDLGVBQVUsR0FBRyxNQUFNLENBQXVCLElBQUksc0RBQUMsQ0FBQztRQUUxRDs7V0FFRztRQUNILHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsTUFBTSxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO1lBRXJDLDRDQUE0QztZQUM1QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTVELGdDQUFnQztZQUNoQyxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO2dCQUM1RCxPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO1lBRWpDLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQ1YsdUNBQXVDO2dCQUN2QyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBRWpFLHVCQUF1QjtnQkFDdkIsSUFBSSxLQUFLLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNuQyxPQUFPO2dCQUNULENBQUM7Z0JBRUQsZ0VBQWdFO2dCQUNoRSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUM7Z0JBRXZCLHFCQUFxQjtnQkFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVCLENBQUM7WUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsQ0FBQyw0REFBQyxDQUFDO1FBbUNILFlBQVk7UUFFWiwrQkFBK0I7UUFFL0I7O1dBRUc7UUFDSCxxQkFBZ0IsR0FBRyxNQUFNLEVBQU8sQ0FBQztRQUVqQzs7V0FFRztRQUNILG1CQUFjLEdBQUcsTUFBTSxFQUFXLENBQUM7UUFFbkMsWUFBWTtRQUVaLGtDQUFrQztRQUUxQixTQUFJLEdBQUcsU0FBUyxDQUFDLGVBQWUsZ0RBQUMsQ0FBQztRQUNsQyxjQUFTLEdBQUcsU0FBUyxDQUFDLDJCQUEyQixxREFBQyxDQUFDO1FBRTNEOztXQUVHO1FBQ08sb0JBQWUsR0FBRyxNQUFNLENBQU0sRUFBRSwyREFBQyxDQUFDO1FBRTVDOztXQUVHO1FBQ0ssbUJBQWMsR0FBUSxFQUFFLENBQUM7UUFrQmpDLFlBQVk7UUFFWiwrQkFBK0I7UUFFL0I7O1dBRUc7UUFDSCx1QkFBa0IsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQy9CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxDQUFDLDhEQUFDLENBQUM7UUFFSDs7V0FFRztRQUNILHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7UUFDSCxDQUFDLCtEQUFDLENBQUM7S0FzTUo7SUExU1csS0FBSyxDQUFDLG1CQUFtQixDQUFDLFVBQWUsRUFBRSxPQUFZO1FBQy9ELHdEQUF3RDtRQUN4RCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFFRCxtREFBbUQ7UUFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1RCxvQkFBb0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFnQztZQUN6QyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQzthQUMzQztTQUNGLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXZFLHNDQUFzQztRQUN0QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ25DLDhDQUE4QztZQUM5QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUzQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBaUNELFlBQVk7SUFFWix5Q0FBeUM7SUFFekMsUUFBUTtRQUNOLGlEQUFpRDtRQUNqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTlCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVyQyw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELFlBQVk7SUFFWiwrQkFBK0I7SUFFL0I7O09BRUc7SUFDSCxrQkFBa0IsQ0FHZjtJQUVIOztPQUVHO0lBQ0gsbUJBQW1CLENBS2hCO0lBRUgsWUFBWTtJQUVaLHNDQUFzQztJQUV0Qzs7T0FFRztJQUNPLG9CQUFvQixDQUFDLEtBQXNDO1FBQ25FLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQztJQUVELFlBQVk7SUFFWixzQ0FBc0M7SUFFdEM7O09BRUc7SUFDSSxPQUFPO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxDQUFDLE9BQVk7UUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsUUFBUTtRQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsT0FBTztZQUNMLE1BQU0sRUFBRSxLQUFLO1lBQ2IsUUFBUSxFQUFFLEVBQUU7WUFDWixLQUFLLEVBQUUsRUFBRTtTQUNhLENBQUM7SUFDM0IsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU3QiwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLDJCQUEyQjtRQUMzQixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXZDLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFBWTtJQUVaLHlDQUF5QztJQUV6Qzs7T0FFRztJQUNLLG1CQUFtQjtRQUN6QixpREFBaUQ7UUFDakQsSUFBSSxDQUFDLG9CQUFvQjthQUN0QixJQUFJLENBQ0gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVM7UUFDM0Isb0JBQW9CLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQ3pELFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQ2hDO2FBQ0EsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFTCx5Q0FBeUM7UUFDekMsSUFBSSxDQUFDLG9CQUFvQjthQUN0QixJQUFJLENBQ0gsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVM7UUFDM0Isb0JBQW9CLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQzFEO2FBQ0EsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsOEVBQThFO1lBQzlFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVk7SUFFWixtQ0FBbUM7SUFFbkM7O09BRUc7SUFDSyxnQkFBZ0IsQ0FBQyxJQUFTO1FBQ2hDLE9BQU8sSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxZQUFZO0lBRVosdUNBQXVDO0lBRXZDOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsTUFBVyxFQUFFLElBQVM7UUFDL0MsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV2QiwrQ0FBK0M7UUFDL0MsTUFBTSxTQUFTLEdBQUcsT0FBTyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0UsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QyxPQUFPLEdBQUcsVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUFDLFVBQWUsRUFBRSxPQUFZO1FBQ3BELHdDQUF3QztRQUN4QyxNQUFNLE9BQU8sR0FBRyxPQUFPLFVBQVUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxPQUFPLEdBQUcsUUFBUSxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQixDQUFDLE9BQVk7UUFDdEMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM1QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNLLFVBQVUsQ0FBQyxHQUFXO1FBQzVCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsNEJBQTRCO1FBQ2xELENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDOzhHQXpZVSwwQkFBMEI7a0dBQTFCLDBCQUEwQixrdEJBcUpaLGVBQWUsNEZBQ1YsMkJBQTJCLGdFQXhLL0M7Ozs7Ozs7O0dBUVQsMEdBVlMsWUFBWSw4QkFBRSxtQkFBbUIsOFpBQUUsWUFBWTs7MkZBb0I5QywwQkFBMEI7a0JBdkJ0QyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLG1CQUN6Qyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7OztHQVFUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhGb3JtQ29tcG9uZW50LCBBWEZvcm1Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgeyBBWFZhbGlkYXRpb25TdW1tYXJ5IH0gZnJvbSAnQGFjb3JleC9jb3JlL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHsgQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlLCBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQge1xuICBBWFBQYWdlU3RhdHVzLFxuICBBWFBXaWRnZXRDb250YWluZXJDb21wb25lbnQsXG4gIEFYUFdpZGdldENvcmVDb250ZXh0Q2hhbmdlRXZlbnQsXG4gIEFYUFdpZGdldENvcmVNb2R1bGUsXG4gIEFYUFdpZGdldE5vZGUsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3dpZGdldC1jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBPbkluaXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBnZXQsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBEeW5hbWljRm9ybURlZmluaXRpb24sIEFYUER5bmFtaWNGb3JtTG9vaywgQVhQRHluYW1pY0Zvcm1Nb2RlIH0gZnJvbSAnLi9sYXlvdXQtYnVpbGRlci50eXBlcyc7XG5pbXBvcnQgeyBBWFBMYXlvdXRDb252ZXJzaW9uU2VydmljZSB9IGZyb20gJy4vbGF5b3V0LWNvbnZlcnNpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1sYXlvdXQtcmVuZGVyZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBWFBXaWRnZXRDb3JlTW9kdWxlLCBBWEZvcm1Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8YXgtZm9ybT5cbiAgICAgIDxheHAtd2lkZ2V0cy1jb250YWluZXIgW2NvbnRleHRdPVwiaW50ZXJuYWxDb250ZXh0KClcIiAob25Db250ZXh0Q2hhbmdlZCk9XCJoYW5kbGVDb250ZXh0Q2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgIEBpZiAod2lkZ2V0VHJlZSgpKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBheHAtd2lkZ2V0LXJlbmRlcmVyIFtub2RlXT1cIndpZGdldFRyZWUoKSFcIiBbbW9kZV09XCJtb2RlKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9heHAtd2lkZ2V0cy1jb250YWluZXI+XG4gICAgPC9heC1mb3JtPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBMYXlvdXRSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgZXZhbHVhdG9yU2VydmljZSA9IGluamVjdChBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2VydmljZSk7XG4gIHByaXZhdGUgY29udmVyc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQTGF5b3V0Q29udmVyc2lvblNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBUcmFja3MgdGhlIGxhdGVzdCBzY2hlZHVsZWQgZXZhbHVhdGlvbiB0byBlbnN1cmUgbGFzdC13cml0ZS13aW5zIGZvciBhc3luYyBldmFsdWF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBldmFsdWF0aW9uUnVuSWQgPSAwO1xuXG4gIC8qKlxuICAgKiBSeEpTIHN1YmplY3RzIGZvciBjb250ZXh0IG1hbmFnZW1lbnRcbiAgICovXG4gIHByaXZhdGUgY29udGV4dFVwZGF0ZVN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHByaXZhdGUgY29udGV4dENoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhY2hlIGZvciBleHByZXNzaW9uIGV2YWx1YXRpb24gcmVzdWx0c1xuICAgKi9cbiAgcHJpdmF0ZSBleHByZXNzaW9uQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWNoZSBmb3Igd2lkZ2V0IHRyZWUgY29tcGFyaXNvbnNcbiAgICovXG4gIHByaXZhdGUgd2lkZ2V0VHJlZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdpZGdldE5vZGU+KCk7XG5cbiAgLyoqXG4gICAqIExhc3QgbGF5b3V0IGhhc2ggZm9yIGNoYW5nZSBkZXRlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgbGFzdExheW91dEhhc2ggPSAnJztcblxuICAvLyNyZWdpb24gLS0tLSAgIElucHV0cyAgIC0tLS1cblxuICAvKipcbiAgICogRm9ybSBkZWZpbml0aW9uIGNvbnRhaW5pbmcgZ3JvdXBzIGFuZCBmaWVsZHMgT1Igd2lkZ2V0IHRyZWVcbiAgICovXG4gIGxheW91dCA9IGlucHV0LnJlcXVpcmVkPEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvbiB8IEFYUFdpZGdldE5vZGU+KCk7XG5cbiAgLyoqXG4gICAqIEZvcm0gY29udGV4dC9tb2RlbCBkYXRhXG4gICAqL1xuICBjb250ZXh0ID0gbW9kZWw8YW55Pih7fSk7XG5cbiAgLyoqXG4gICAqIEZvcm0gYXBwZWFyYW5jZSBhbmQgZGVuc2l0eSBzdHlsaW5nIChub3JtYWwsIGNvbXBhY3QsIHNwYWNpb3VzKVxuICAgKi9cbiAgbG9vayA9IGlucHV0PEFYUER5bmFtaWNGb3JtTG9vaz4oJ2ZpZWxkc2V0Jyk7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgZm9ybSBtb2RlLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSBzZWN0aW9uL2dyb3VwIGFuZCBmaWVsZC5cbiAgICovXG4gIG1vZGUgPSBpbnB1dDxBWFBEeW5hbWljRm9ybU1vZGU+KCdlZGl0Jyk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBXaWRnZXQgVHJlZSBDb252ZXJzaW9uICAgLS0tLVxuXG4gIHByb3RlY3RlZCB3aWRnZXRUcmVlID0gc2lnbmFsPEFYUFdpZGdldE5vZGUgfCBudWxsPihudWxsKTtcblxuICAvKipcbiAgICogQ29udmVydCBhbmQgZXZhbHVhdGUgZGF0YSB3aGVuIGlucHV0cyBjaGFuZ2UgKG9wdGltaXplZCB3aXRoIFJ4SlMpXG4gICAqL1xuICBjb252ZXJzaW9uRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpbnB1dERhdGEgPSB0aGlzLmxheW91dCgpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuaW50ZXJuYWxDb250ZXh0KCk7XG4gICAgY29uc3QgbG9vayA9IHRoaXMubG9vaygpO1xuICAgIGNvbnN0IHJ1bklkID0gKyt0aGlzLmV2YWx1YXRpb25SdW5JZDtcblxuICAgIC8vIEdlbmVyYXRlIGxheW91dCBoYXNoIGZvciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgY29uc3QgbGF5b3V0SGFzaCA9IHRoaXMuZ2VuZXJhdGVMYXlvdXRIYXNoKGlucHV0RGF0YSwgbG9vayk7XG5cbiAgICAvLyBTa2lwIGlmIGxheW91dCBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChsYXlvdXRIYXNoID09PSB0aGlzLmxhc3RMYXlvdXRIYXNoICYmIHRoaXMud2lkZ2V0VHJlZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0TGF5b3V0SGFzaCA9IGxheW91dEhhc2g7XG5cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gRmlyc3QgZXZhbHVhdGUgZXhwcmVzc2lvbnMgaWYgbmVlZGVkXG4gICAgICBjb25zdCBldmFsdWF0ZWQgPSBhd2FpdCB0aGlzLmV4cHJlc3Npb25FdmFsdWF0b3IoaW5wdXREYXRhLCBjdHgpO1xuXG4gICAgICAvLyBJZ25vcmUgc3RhbGUgcmVzdWx0c1xuICAgICAgaWYgKHJ1bklkICE9PSB0aGlzLmV2YWx1YXRpb25SdW5JZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnZlcnQgdG8gd2lkZ2V0IHRyZWUgKHRoaXMgd2lsbCBhbHNvIGFwcGx5IHRoZSBsYXlvdXQgbG9vaylcbiAgICAgIGNvbnN0IHRyZWUgPSBldmFsdWF0ZWQ7XG5cbiAgICAgIC8vIFVwZGF0ZSB3aWRnZXQgdHJlZVxuICAgICAgY29uc3QgcHJldiA9IHRoaXMud2lkZ2V0VHJlZSgpO1xuICAgICAgaWYgKCFpc0VxdWFsKHByZXYsIHRyZWUpKSB7XG4gICAgICAgIHRyZWUubW9kZSA9IHRoaXMubW9kZSgpO1xuICAgICAgICB0aGlzLndpZGdldFRyZWUuc2V0KHRyZWUpO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBhc3luYyBleHByZXNzaW9uRXZhbHVhdG9yKGV4cHJlc3Npb246IGFueSwgY29udGV4dDogYW55KSB7XG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIGZvcm0gZGVmaW5pdGlvbiB0aGF0IG5lZWRzIGNvbnZlcnNpb25cbiAgICBpZiAodGhpcy5pc0Zvcm1EZWZpbml0aW9uKGV4cHJlc3Npb24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJzaW9uU2VydmljZS5jb252ZXJ0Rm9ybURlZmluaXRpb24oZXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgY2FjaGUga2V5IHVzaW5nIGEgbW9yZSBlZmZpY2llbnQgbWV0aG9kXG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoZXhwcmVzc2lvbiwgY29udGV4dCk7XG5cbiAgICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICAgIGlmICh0aGlzLmV4cHJlc3Npb25DYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uQ2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBzY29wZTogQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlID0ge1xuICAgICAgY29udGV4dDoge1xuICAgICAgICBldmFsOiAocGF0aDogc3RyaW5nKSA9PiBnZXQoY29udGV4dCwgcGF0aCksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV2YWx1YXRvclNlcnZpY2UuZXZhbHVhdGUoZXhwcmVzc2lvbiwgc2NvcGUpO1xuXG4gICAgLy8gQ2FjaGUgcmVzdWx0IHdpdGggTFJVLWxpa2UgYmVoYXZpb3JcbiAgICBpZiAodGhpcy5leHByZXNzaW9uQ2FjaGUuc2l6ZSA+IDUwKSB7XG4gICAgICAvLyBDbGVhciBoYWxmIHRoZSBjYWNoZSB3aGVuIGl0IGdldHMgdG9vIGxhcmdlXG4gICAgICBjb25zdCBrZXlzVG9EZWxldGUgPSBBcnJheS5mcm9tKHRoaXMuZXhwcmVzc2lvbkNhY2hlLmtleXMoKSkuc2xpY2UoMCwgMjUpO1xuICAgICAga2V5c1RvRGVsZXRlLmZvckVhY2goKGtleSkgPT4gdGhpcy5leHByZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSkpO1xuICAgIH1cbiAgICB0aGlzLmV4cHJlc3Npb25DYWNoZS5zZXQoY2FjaGVLZXksIHJlc3VsdCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBPdXRwdXRzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gY29udGV4dCBjaGFuZ2UgaXMgaW5pdGlhdGVkXG4gICAqL1xuICBjb250ZXh0SW5pdGlhdGVkID0gb3V0cHV0PGFueT4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGZvcm0gYmVjb21lcyB2YWxpZC9pbnZhbGlkXG4gICAqL1xuICB2YWxpZGl0eUNoYW5nZSA9IG91dHB1dDxib29sZWFuPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHJvcGVydGllcyAgIC0tLS1cblxuICBwcml2YXRlIGZvcm0gPSB2aWV3Q2hpbGQoQVhGb3JtQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjb250YWluZXIgPSB2aWV3Q2hpbGQoQVhQV2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50KTtcblxuICAvKipcbiAgICogSW50ZXJuYWwgY29udGV4dCBzaWduYWwgZm9yIHJlYWN0aXZpdHlcbiAgICovXG4gIHByb3RlY3RlZCBpbnRlcm5hbENvbnRleHQgPSBzaWduYWw8YW55Pih7fSk7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgY29udGV4dCBmb3IgcmVzZXQgZnVuY3Rpb25hbGl0eVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsQ29udGV4dDogYW55ID0ge307XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBMaWZlY3ljbGUgTWV0aG9kcyAgIC0tLS1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBJbml0aWFsaXplIGludGVybmFsIGNvbnRleHQgd2l0aCBpbnB1dCBjb250ZXh0XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jb250ZXh0KCkgPz8ge307XG4gICAgdGhpcy5pbnRlcm5hbENvbnRleHQuc2V0KGN0eCk7XG5cbiAgICAvLyBTdG9yZSBpbml0aWFsIGNvbnRleHQgZm9yIHJlc2V0IGZ1bmN0aW9uYWxpdHlcbiAgICB0aGlzLmluaXRpYWxDb250ZXh0ID0gY2xvbmVEZWVwKGN0eCk7XG5cbiAgICAvLyBTZXR1cCBSeEpTIHN0cmVhbXMgZm9yIGNvbnRleHQgbWFuYWdlbWVudFxuICAgIHRoaXMuc2V0dXBDb250ZXh0U3RyZWFtcygpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBFZmZlY3RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFZmZlY3QgdG8gc3luYyBjb250ZXh0IGNoYW5nZXMgZnJvbSBleHRlcm5hbCB0byBpbnRlcm5hbCAob3B0aW1pemVkIHdpdGggUnhKUylcbiAgICovXG4gICNjb250ZXh0U3luY0VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jb250ZXh0KCkgPz8ge307XG4gICAgdGhpcy5jb250ZXh0VXBkYXRlU3ViamVjdC5uZXh0KGN0eCk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBFZmZlY3QgdG8gaGFuZGxlIHdpZGdldCB0cmVlIHN0YXR1cyBjaGFuZ2VzXG4gICAqL1xuICAjd2lkZ2V0U3RhdHVzRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB3aWRnZXRUcmVlID0gdGhpcy53aWRnZXRUcmVlKCk7XG4gICAgaWYgKHdpZGdldFRyZWUpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyKCk/LmJ1aWxkZXJTZXJ2aWNlLnNldFN0YXR1cyhBWFBQYWdlU3RhdHVzLlJlbmRlcmVkKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgRXZlbnQgSGFuZGxlcnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjb250ZXh0IGNoYW5nZSBldmVudHMgZnJvbSB3aWRnZXQgY29udGFpbmVyIChvcHRpbWl6ZWQgd2l0aCBSeEpTKVxuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZUNvbnRleHRDaGFuZ2VkKGV2ZW50OiBBWFBXaWRnZXRDb3JlQ29udGV4dENoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnN0YXRlID09PSAnaW5pdGlhdGVkJykge1xuICAgICAgdGhpcy5jb250ZXh0SW5pdGlhdGVkLmVtaXQoZXZlbnQuZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGV4dENoYW5nZVN1YmplY3QubmV4dChldmVudC5kYXRhID8/IHt9KTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZvcm0gY29tcG9uZW50IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgZ2V0Rm9ybSgpOiBBWEZvcm1Db21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdpZGdldCBjb250YWluZXIgY29tcG9uZW50IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29udGFpbmVyKCk6IEFYUFdpZGdldENvbnRhaW5lckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZm9ybSBjb250ZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0Q29udGV4dCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmludGVybmFsQ29udGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBmb3JtIGNvbnRleHQgcHJvZ3JhbW1hdGljYWxseVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUNvbnRleHQoY29udGV4dDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcm5hbENvbnRleHQuc2V0KGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB3aWRnZXQgdHJlZVxuICAgKi9cbiAgcHVibGljIGdldFdpZGdldFRyZWUoKTogQVhQV2lkZ2V0Tm9kZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLndpZGdldFRyZWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgZm9ybVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlKCk6IFByb21pc2U8QVhWYWxpZGF0aW9uU3VtbWFyeT4ge1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm0oKTtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGZvcm0udmFsaWRhdGUoKTtcbiAgICAgIHRoaXMudmFsaWRpdHlDaGFuZ2UuZW1pdChpc1ZhbGlkLnJlc3VsdCk7XG4gICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICBtZXNzYWdlczogW10sXG4gICAgICBydWxlczogW10sXG4gICAgfSBhcyBBWFZhbGlkYXRpb25TdW1tYXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBmb3JtIGNvbnRleHRcbiAgICovXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBpbnRlcm5hbCBjb250ZXh0XG4gICAgdGhpcy5pbnRlcm5hbENvbnRleHQuc2V0KHt9KTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwgc2lnbmFsXG4gICAgdGhpcy5jb250ZXh0LnNldCh7fSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGZvcm0gdG8gaXRzIGluaXRpYWwgc3RhdGVcbiAgICovXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICAvLyBSZXNldCB0byBpbml0aWFsIGNvbnRleHRcbiAgICBjb25zdCByZXNldENvbnRleHQgPSBjbG9uZURlZXAodGhpcy5pbml0aWFsQ29udGV4dCk7XG4gICAgdGhpcy5pbnRlcm5hbENvbnRleHQuc2V0KHJlc2V0Q29udGV4dCk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIG1vZGVsIHNpZ25hbFxuICAgIHRoaXMuY29udGV4dC5zZXQocmVzZXRDb250ZXh0KTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUnhKUyBTdHJlYW0gU2V0dXAgICAtLS0tXG5cbiAgLyoqXG4gICAqIFNldHVwIFJ4SlMgc3RyZWFtcyBmb3IgY29udGV4dCBtYW5hZ2VtZW50XG4gICAqL1xuICBwcml2YXRlIHNldHVwQ29udGV4dFN0cmVhbXMoKTogdm9pZCB7XG4gICAgLy8gRGVib3VuY2VkIGNvbnRleHQgdXBkYXRlcyBmcm9tIGV4dGVybmFsIHNvdXJjZVxuICAgIHRoaXMuY29udGV4dFVwZGF0ZVN1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTYpLCAvLyB+NjBmcHNcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IGlzRXF1YWwocHJldiwgY3VycikpLFxuICAgICAgICBzdGFydFdpdGgodGhpcy5jb250ZXh0KCkgPz8ge30pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoY3R4KSA9PiB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDb250ZXh0LnNldChjdHgpO1xuICAgICAgfSk7XG5cbiAgICAvLyBEZWJvdW5jZWQgY29udGV4dCBjaGFuZ2VzIGZyb20gd2lkZ2V0c1xuICAgIHRoaXMuY29udGV4dENoYW5nZVN1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTYpLCAvLyB+NjBmcHNcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IGlzRXF1YWwocHJldiwgY3VycikpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoY3R4KSA9PiB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDb250ZXh0LnNldChjdHgpO1xuICAgICAgICAvLyBVcGRhdGUgdGhlIG1vZGVsIHNpZ25hbCBkaXJlY3RseSAtIGl0IHdpbGwgZW1pdCBjaGFuZ2UgZXZlbnRzIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldCh0aGlzLmludGVybmFsQ29udGV4dCgpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBUeXBlIEd1YXJkcyAgIC0tLS1cblxuICAvKipcbiAgICogVHlwZSBndWFyZCB0byBjaGVjayBpZiB0aGUgaW5wdXQgaXMgYSBmb3JtIGRlZmluaXRpb25cbiAgICovXG4gIHByaXZhdGUgaXNGb3JtRGVmaW5pdGlvbihkYXRhOiBhbnkpOiBkYXRhIGlzIEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvbiB7XG4gICAgcmV0dXJuIGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdncm91cHMnIGluIGRhdGEgJiYgQXJyYXkuaXNBcnJheShkYXRhLmdyb3Vwcyk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFV0aWxpdHkgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogR2VuZXJhdGUgbGF5b3V0IGhhc2ggZm9yIGNoYW5nZSBkZXRlY3Rpb24gKHNob3J0IGhhc2gpXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlTGF5b3V0SGFzaChsYXlvdXQ6IGFueSwgbG9vazogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWxheW91dCkgcmV0dXJuICcnO1xuXG4gICAgLy8gR2VuZXJhdGUgc2hvcnQgaGFzaCBmb3IgbGFyZ2UgbGF5b3V0IHN0cmluZ3NcbiAgICBjb25zdCBsYXlvdXRTdHIgPSB0eXBlb2YgbGF5b3V0ID09PSAnc3RyaW5nJyA/IGxheW91dCA6IEpTT04uc3RyaW5naWZ5KGxheW91dCk7XG4gICAgY29uc3QgbGF5b3V0SGFzaCA9IHRoaXMuc2ltcGxlSGFzaChsYXlvdXRTdHIpO1xuICAgIHJldHVybiBgJHtsYXlvdXRIYXNofXwke2xvb2t9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBjYWNoZSBrZXkgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbiAoc2hvcnQgaGFzaClcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVDYWNoZUtleShleHByZXNzaW9uOiBhbnksIGNvbnRleHQ6IGFueSk6IHN0cmluZyB7XG4gICAgLy8gVXNlIHNob3J0IGhhc2ggZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgIGNvbnN0IGV4cHJTdHIgPSB0eXBlb2YgZXhwcmVzc2lvbiA9PT0gJ3N0cmluZycgPyBleHByZXNzaW9uIDogSlNPTi5zdHJpbmdpZnkoZXhwcmVzc2lvbik7XG4gICAgY29uc3QgZXhwckhhc2ggPSB0aGlzLnNpbXBsZUhhc2goZXhwclN0cik7XG4gICAgY29uc3QgY3R4SGFzaCA9IHRoaXMuZ2VuZXJhdGVDb250ZXh0SGFzaChjb250ZXh0KTtcbiAgICByZXR1cm4gYCR7ZXhwckhhc2h9fCR7Y3R4SGFzaH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgc2ltcGxlIGhhc2ggZm9yIGNvbnRleHQgY2hhbmdlIGRldGVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbnRleHRIYXNoKGNvbnRleHQ6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFjb250ZXh0IHx8IHR5cGVvZiBjb250ZXh0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIFN0cmluZyhjb250ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBzaG9ydCBoYXNoIGZvciBjb250ZXh0XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNvbnRleHQpLnNvcnQoKTtcbiAgICBjb25zdCBjb250ZXh0U3RyID0ga2V5cy5tYXAoKGtleSkgPT4gYCR7a2V5fToke2NvbnRleHRba2V5XX1gKS5qb2luKCd8Jyk7XG4gICAgcmV0dXJuIHRoaXMuc2ltcGxlSGFzaChjb250ZXh0U3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW1wbGUgaGFzaCBmdW5jdGlvbiBmb3IgZ2VuZXJhdGluZyBzaG9ydCBrZXlzXG4gICAqL1xuICBwcml2YXRlIHNpbXBsZUhhc2goc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBoYXNoID0gMDtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgY2hhcjtcbiAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDsgLy8gQ29udmVydCB0byAzMi1iaXQgaW50ZWdlclxuICAgIH1cblxuICAgIC8vIENvbnZlcnQgdG8gcG9zaXRpdmUgaGV4IHN0cmluZ1xuICAgIHJldHVybiBNYXRoLmFicyhoYXNoKS50b1N0cmluZygxNik7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cbiJdfQ==","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.4\", ngImport: i0, type: LayoutBuilderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.4\", ngImport: i0, type: LayoutBuilderModule, imports: [CommonModule, AXPLayoutRendererComponent], exports: [AXPLayoutRendererComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: LayoutBuilderModule, providers: [AXPLayoutBuilderService], imports: [CommonModule, AXPLayoutRendererComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.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=","export {};\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9idWlsZGVyL3NyYy9saWIvbGF5b3V0LWJ1aWxkZXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQTZ5QkEsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYRGF0YVNvdXJjZSB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBvcHVwU2l6ZVR5cGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHsgQVhTdGVwV2l6YXJkTG9vayB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zdGVwLXdpemFyZCc7XG5pbXBvcnQge1xuICBBWFBBY3Rpb25NZW51SXRlbSxcbiAgQVhQRXhwcmVzc2lvbixcbiAgQVhQR3JpZExheW91dE9wdGlvbnMsXG4gIEFYUE9wdGlvbnNEYXRhLFxuICBBWFBWYWxpZGF0aW9uUnVsZXMsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBXaWRnZXROb2RlLCBBWFBXaWRnZXRSZW5kZXJNb2RlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuXG4vKipcbiAqIEZvcm0gYXBwZWFyYW5jZSBhbmQgZGVuc2l0eSBzdHlsaW5nICh1c2luZyBmaWVsZHNldCB3aWRnZXQgbG9vaylcbiAqL1xuZXhwb3J0IHR5cGUgQVhQRHluYW1pY0Zvcm1Mb29rID0gJ2ZpZWxkc2V0JyB8ICdjYXJkJyB8ICdncm91cCcgfCAnY29udGFpbmVyJztcblxuLyoqXG4gKiBGb3JtIHJlbmRlcmluZyBtb2RlXG4gKi9cbmV4cG9ydCB0eXBlIEFYUER5bmFtaWNGb3JtTW9kZSA9ICd2aWV3JyB8ICdlZGl0JztcblxuLyoqXG4gKiBGb3JtIGxheW91dCBkaXJlY3Rpb24gYW5kIGZsb3dcbiAqL1xuZXhwb3J0IHR5cGUgQVhQRHluYW1pY0Zvcm1EaXJlY3Rpb24gPSAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgJ2dyaWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUER5bmFtaWNGb3JtRmllbGREZWZpbml0aW9uIHtcbiAgcGF0aDogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHBlci1maWVsZCByZW5kZXJpbmcgbW9kZS4gVGFrZXMgcHJlY2VkZW5jZSBvdmVyIHNlY3Rpb24gYW5kIGZvcm0gbW9kZXMuXG4gICAqL1xuICBtb2RlPzogQVhQRHluYW1pY0Zvcm1Nb2RlO1xuICBsYXlvdXQ/OiBBWFBHcmlkTGF5b3V0T3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEeW5hbWljRm9ybUdyb3VwRGVmaW5pdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwYXJhbWV0ZXJzOiBBWFBEeW5hbWljRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICAvKipcbiAgICogT3B0aW9uYWwgcGVyLXNlY3Rpb24gcmVuZGVyaW5nIG1vZGUuIFRha2VzIHByZWNlZGVuY2Ugb3ZlciBmb3JtIG1vZGUgYW5kIGlzIG92ZXJyaWRkZW4gYnkgZmllbGQgbW9kZS5cbiAgICovXG4gIG1vZGU/OiBBWFBEeW5hbWljRm9ybU1vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRHluYW1pY0Zvcm1EZWZpbml0aW9uIHtcbiAgZ3JvdXBzOiBBWFBEeW5hbWljRm9ybUdyb3VwRGVmaW5pdGlvbltdO1xuICAvKipcbiAgICogT3B0aW9uYWwgZm9ybS1sZXZlbCByZW5kZXJpbmcgbW9kZVxuICAgKi9cbiAgbW9kZT86IEFYUER5bmFtaWNGb3JtTW9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEaWFsb2dSZWYge1xuICAvKipcbiAgICogTWFudWFsbHkgY2xvc2UgdGhlIGRpYWxvZyAob3B0aW9uYWwgLSBkaWFsb2cgY2xvc2VzIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdXNlciBpbnRlcmFjdGlvbilcbiAgICovXG4gIGNsb3NlKCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGZvcm0gZGF0YSBmcm9tIHRoZSBkaWFsb2dcbiAgICovXG4gIGNvbnRleHQoKTogYW55O1xuICAvKipcbiAgICogR2V0IHRoZSBhY3Rpb24gdGhhdCB3YXMgY2xpY2tlZCBieSB0aGUgdXNlclxuICAgKi9cbiAgYWN0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFNldCB0aGUgbG9hZGluZyBzdGF0ZSBvZiB0aGUgZGlhbG9nXG4gICAqL1xuICBzZXRMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vLyNyZWdpb24gLS0tLSAgIFdpZGdldCBPcHRpb25zIEludGVyZmFjZXMgICAtLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0V2lkZ2V0T3B0aW9ucyB7XG4gIG5hbWU/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/OiB7XG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgYW5pbWF0aW9uPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuLy8gU3RlcCBXaXphcmQgVHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgQVhQV2l6YXJkQWN0aW9uRGVmaW5pdGlvbiB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBXaXphcmRBY3Rpb25zIHtcbiAgcHJldmlvdXM/OiBBWFBXaXphcmRBY3Rpb25EZWZpbml0aW9uO1xuICBuZXh0PzogQVhQV2l6YXJkQWN0aW9uRGVmaW5pdGlvbjtcbiAgc3VibWl0PzogQVhQV2l6YXJkQWN0aW9uRGVmaW5pdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBTdGVwRGVmaW5pdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBza2lwcGFibGU/OiBib29sZWFuO1xuICBjb250ZW50OiBBWFBXaWRnZXROb2RlO1xuICBhY3Rpb25zPzogQVhQQWN0aW9uTWVudUl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBTdGVwV2l6YXJkR3VhcmRQYXlsb2FkIHtcbiAgc3RlcDogQVhQU3RlcERlZmluaXRpb247XG4gIGluZGV4OiBudW1iZXI7XG4gIHRvdGFsOiBudW1iZXI7XG4gIGlzRmlyc3Q6IGJvb2xlYW47XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgY29udGV4dDogYW55O1xuICBzdGVwQ29udGV4dD86IGFueTtcbiAgZGlhbG9nQ29udGV4dD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBTdGVwV2l6YXJkU3RhdHVzIHtcbiAgY3VycmVudFN0ZXA6IEFYUFN0ZXBEZWZpbml0aW9uO1xuICBpbmRleDogbnVtYmVyO1xuICB0b3RhbDogbnVtYmVyO1xuICBpc0ZpcnN0OiBib29sZWFuO1xuICBpc0xhc3Q6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQU3RlcFdpemFyZERlZmluaXRpb24ge1xuICBzdGVwczogQVhQU3RlcERlZmluaXRpb25bXTtcbiAgbGluZWFyPzogYm9vbGVhbjtcbiAgZGlyZWN0aW9uPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcbiAgbG9vaz86IHN0cmluZztcbiAgc2hvd0FjdGlvbnM/OiBib29sZWFuO1xuICBhY3Rpb25zPzogQVhQV2l6YXJkQWN0aW9ucztcbiAgZ3VhcmRzPzoge1xuICAgIG5leHQ/OiAocGF5bG9hZDogQVhQU3RlcFdpemFyZEd1YXJkUGF5bG9hZCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG4gICAgcHJldj86IChwYXlsb2FkOiBBWFBTdGVwV2l6YXJkR3VhcmRQYXlsb2FkKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcbiAgfTtcbiAgZXZlbnRzPzoge1xuICAgIG9uU3RlcENoYW5nZWQ/OiAoc3RhdHVzOiBBWFBTdGVwV2l6YXJkU3RhdHVzKSA9PiB2b2lkO1xuICAgIG9uQ29tcGxldGU/OiAoc3RhdHVzOiBBWFBTdGVwV2l6YXJkU3RhdHVzKSA9PiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFN0ZXBXaXphcmRDb250YWluZXJPcHRpb25zIGV4dGVuZHMgTGF5b3V0V2lkZ2V0T3B0aW9ucyB7XG4gIGRlZmluaXRpb24/OiBBWFBTdGVwV2l6YXJkRGVmaW5pdGlvbjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgSW5oZXJpdGFuY2UgQ29udGV4dCBUeXBlcyAgIC0tLS1cblxuLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlXG5leHBvcnQgaW50ZXJmYWNlIElEaWFsb2dCdWlsZGVyIHt9XG5cbi8vIENvbnRleHQgZm9yIGluaGVyaXRpbmcgcHJvcGVydGllcyBmcm9tIHBhcmVudCBub2Rlc1xuZXhwb3J0IGludGVyZmFjZSBJbmhlcml0YW5jZUNvbnRleHQge1xuICBtb2RlPzogQVhQV2lkZ2V0UmVuZGVyTW9kZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuIHwgc3RyaW5nO1xuICByZWFkb25seT86IGJvb2xlYW4gfCBzdHJpbmc7XG4gIGRpcmVjdGlvbj86ICdydGwnIHwgJ2x0cic7XG4gIHZpc2libGU/OiBib29sZWFuIHwgc3RyaW5nO1xufVxuXG4vLyBIZWxwZXIgdHlwZSBmb3IgcmVzb2x2aW5nIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG5leHBvcnQgaW50ZXJmYWNlIEluaGVyaXRlZFByb3BlcnRpZXMge1xuICBtb2RlOiBBWFBXaWRnZXRSZW5kZXJNb2RlO1xuICBkaXNhYmxlZDogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHk6IGJvb2xlYW4gfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRpcmVjdGlvbjogJ3J0bCcgfCAnbHRyJyB8IHVuZGVmaW5lZDtcbiAgdmlzaWJsZTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgQnVpbGRlciBTdGF0ZSBUeXBlcyAgIC0tLS1cblxuLy8gQmFzZSB3aWRnZXQgY29uZmlndXJhdGlvbiAtIG5vIHBhdGggbWFuYWdlbWVudCBoZXJlXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdpZGdldENvbmZpZ3VyYXRpb24ge1xuICB0eXBlOiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBBWFBPcHRpb25zRGF0YTtcbn1cblxuLy8gQnVpbGRlciBzdGF0ZSBpbnRlcmZhY2VzXG5leHBvcnQgdHlwZSBMYXlvdXRCdWlsZGVyU3RhdGUgPSBBWFBXaWRnZXROb2RlO1xuXG4vLyBXaWRnZXRCdWlsZGVyU3RhdGUgbWlycm9ycyBBWFBXaWRnZXROb2RlIGJ1dCBpbnRlbnRpb25hbGx5IGV4Y2x1ZGVzIGBjaGlsZHJlbmAgZm9yIG1vc3Qgd2lkZ2V0c1xuZXhwb3J0IHR5cGUgV2lkZ2V0QnVpbGRlclN0YXRlID0gT21pdDxBWFBXaWRnZXROb2RlLCAnY2hpbGRyZW4nPiAmIHsgbGF5b3V0PzogQVhQR3JpZExheW91dE9wdGlvbnMgfTtcblxuLy8gRm9ybUZpZWxkQnVpbGRlclN0YXRlIGluY2x1ZGVzIGNoaWxkcmVuIHNpbmNlIGZvcm0gZmllbGRzIGNhbiBjb250YWluIHdpZGdldHNcbmV4cG9ydCB0eXBlIEZvcm1GaWVsZEJ1aWxkZXJTdGF0ZSA9IEFYUFdpZGdldE5vZGUgJiB7IGxheW91dD86IEFYUEdyaWRMYXlvdXRPcHRpb25zIH07XG5cbi8vIERpYWxvZ0J1aWxkZXJTdGF0ZSBpbmNsdWRlcyBkaWFsb2ctc3BlY2lmaWMgcHJvcGVydGllc1xuZXhwb3J0IHR5cGUgRGlhbG9nQnVpbGRlclN0YXRlID0gQVhQV2lkZ2V0Tm9kZSAmIHtcbiAgbGF5b3V0PzogQVhQR3JpZExheW91dE9wdGlvbnM7XG4gIGRpYWxvZ09wdGlvbnM/OiBBWFBEaWFsb2dDb250YWluZXJPcHRpb25zO1xuICBhY3Rpb25zPzoge1xuICAgIGZvb3Rlcj86IHtcbiAgICAgIHByZWZpeD86IEFYUEFjdGlvbk1lbnVJdGVtW107XG4gICAgICBzdWZmaXg/OiBBWFBBY3Rpb25NZW51SXRlbVtdO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb25CdWlsZGVyIHtcbiAgY2FuY2VsKHRleHQ/OiBzdHJpbmcpOiBJQWN0aW9uQnVpbGRlcjtcbiAgc3VibWl0KHRleHQ/OiBzdHJpbmcpOiBJQWN0aW9uQnVpbGRlcjtcbiAgY3VzdG9tKGFjdGlvbjogQVhQQWN0aW9uTWVudUl0ZW0pOiBJQWN0aW9uQnVpbGRlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgQ29yZSBCdWlsZGVyIEludGVyZmFjZXMgICAtLS0tXG5cbi8vIE1haW4gbGF5b3V0IGJ1aWxkZXIgaW50ZXJmYWNlIC0gU2luZ2xlIFJlc3BvbnNpYmlsaXR5OiBMYXlvdXQgb3JjaGVzdHJhdGlvblxuZXhwb3J0IGludGVyZmFjZSBJTGF5b3V0QnVpbGRlciB7XG4gIC8vIFByZWRlZmluZWQgbGF5b3V0IGNvbnRhaW5lcnMgYXQgcm9vdCBsZXZlbCAtIG9ubHkgdGhlc2UgYXJlIGFsbG93ZWQgd2l0aCBzcGVjaWZpYyB0eXBlc1xuICBncmlkKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlcjtcbiAgZmxleChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSUZsZXhDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXI7XG4gIHBhbmVsKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJUGFuZWxDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXI7XG4gIHBhZ2UoZGVsZWdhdGU6IChjb250YWluZXI6IElQYWdlQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyO1xuICB0YWJzZXQoZGVsZWdhdGU6IChjb250YWluZXI6IElUYWJzZXRDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXI7XG4gIGZpZWxkc2V0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXI7XG4gIGRpYWxvZyhkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSURpYWxvZ0J1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlcjtcbiAgc3RlcFdpemFyZChkZWxlZ2F0ZTogKHdpemFyZDogSVN0ZXBXaXphcmRCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXI7XG5cbiAgLy8gQnVpbGQgYW5kIHJlbmRlclxuICBidWlsZCgpOiBBWFBXaWRnZXROb2RlO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBXaWRnZXQgQnVpbGRlciBJbnRlcmZhY2VzICAgLS0tLVxuXG4vLyBCYXNlIHdpZGdldCBidWlsZGVyIGludGVyZmFjZSAtIFNpbmdsZSBSZXNwb25zaWJpbGl0eTogV2lkZ2V0IGNvbmZpZ3VyYXRpb25cbmV4cG9ydCBpbnRlcmZhY2UgSVdpZGdldEJ1aWxkZXIge1xuICBuYW1lKG5hbWU6IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyO1xuICBwYXRoKHBhdGg6IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyO1xuICB0eXBlKHR5cGU6IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyO1xuICBvcHRpb25zKG9wdGlvbnM6IEFYUE9wdGlvbnNEYXRhKTogSVdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gTGF5b3V0XG4gIGxheW91dChjb25maWc6IFBhcnRpYWw8QVhQR3JpZExheW91dE9wdGlvbnM+KTogSVdpZGdldEJ1aWxkZXI7XG4gIGxheW91dChjb2xTcGFuOiBudW1iZXIpOiBJV2lkZ2V0QnVpbGRlcjtcbiAgbW9kZShtb2RlOiBBWFBXaWRnZXRSZW5kZXJNb2RlKTogSVdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gU3RhdGUgKG1hbmFnZWQgYnkgaGlnaGVyLWxldmVsIHN5c3RlbXMgbGlrZSBkeW5hbWljIGZvcm1zKVxuICB2aXNpYmxlKGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyO1xuICBkaXNhYmxlZChjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBJV2lkZ2V0QnVpbGRlcjtcbiAgcmVhZG9ubHkoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSVdpZGdldEJ1aWxkZXI7XG4gIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBJV2lkZ2V0QnVpbGRlcjtcblxuICAvLyBJbmhlcml0YW5jZSBjb250ZXh0IG1ldGhvZHNcbiAgd2l0aEluaGVyaXRhbmNlQ29udGV4dChjb250ZXh0OiBJbmhlcml0YW5jZUNvbnRleHQpOiBJV2lkZ2V0QnVpbGRlcjtcbiAgZ2V0SW5oZXJpdGFuY2VDb250ZXh0KCk6IEluaGVyaXRhbmNlQ29udGV4dDtcblxuICAvLyBCdWlsZFxuICBidWlsZCgpOiBBWFBXaWRnZXROb2RlO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBDb250YWluZXIgQnVpbGRlciBJbnRlcmZhY2VzICAgLS0tLVxuXG4vLyBCYXNlIGNvbnRhaW5lciBidWlsZGVyIGludGVyZmFjZSAtIEludGVyZmFjZSBTZWdyZWdhdGlvbjogQ29tbW9uIGNvbnRhaW5lciBvcGVyYXRpb25zXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlQ29udGFpbmVyQnVpbGRlcjxUQ29udGFpbmVyID0gYW55PiB7XG4gIG5hbWUobmFtZTogc3RyaW5nKTogVENvbnRhaW5lcjtcbiAgcGF0aChwYXRoOiBzdHJpbmcpOiBUQ29udGFpbmVyO1xuICBtb2RlKG1vZGU6IEFYUFdpZGdldFJlbmRlck1vZGUpOiBUQ29udGFpbmVyO1xuICB2aXNpYmxlKGNvbmRpdGlvbjogYm9vbGVhbiB8IEFYUEV4cHJlc3Npb24pOiBUQ29udGFpbmVyO1xuICBkaXNhYmxlZChjb25kaXRpb246IGJvb2xlYW4gfCBBWFBFeHByZXNzaW9uKTogVENvbnRhaW5lcjtcbiAgcmVhZG9ubHkoY29uZGl0aW9uOiBib29sZWFuIHwgQVhQRXhwcmVzc2lvbik6IFRDb250YWluZXI7XG4gIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBUQ29udGFpbmVyO1xuXG4gIC8vIEluaGVyaXRhbmNlIGNvbnRleHQgbWV0aG9kc1xuICB3aXRoSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCk6IFRDb250YWluZXI7XG4gIGdldEluaGVyaXRhbmNlQ29udGV4dCgpOiBJbmhlcml0YW5jZUNvbnRleHQ7XG5cbiAgYnVpbGQoKTogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuLy8gTGF5b3V0LXNwZWNpZmljIGNvbnRhaW5lciBvcGVyYXRpb25zXG5leHBvcnQgaW50ZXJmYWNlIElMYXlvdXRDb250YWluZXJCdWlsZGVyPFRDb250YWluZXIgPSBhbnk+IHtcbiAgbGF5b3V0KGNvbmZpZzogUGFydGlhbDxBWFBHcmlkTGF5b3V0T3B0aW9ucz4pOiBUQ29udGFpbmVyO1xuICBsYXlvdXQoY29sU3BhbjogbnVtYmVyKTogVENvbnRhaW5lcjtcbn1cblxuLy8gQ2hpbGQgY29udGFpbmVyIG1hbmFnZW1lbnRcbmV4cG9ydCBpbnRlcmZhY2UgSUNoaWxkQ29udGFpbmVyQnVpbGRlcjxUQ29udGFpbmVyID0gYW55PiB7XG4gIGdyaWQoZGVsZWdhdGU6IChjb250YWluZXI6IElHcmlkQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG4gIGZsZXgoZGVsZWdhdGU6IChjb250YWluZXI6IElGbGV4Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG4gIHBhbmVsKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJUGFuZWxDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lcjtcbiAgcGFnZShkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSVBhZ2VDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lcjtcbiAgdGFic2V0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG4gIGZpZWxkc2V0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lcjtcbiAgZm9ybUZpZWxkKGxhYmVsOiBzdHJpbmcsIGRlbGVnYXRlPzogKGZpZWxkOiBJRm9ybUZpZWxkQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG4gIHN0ZXBXaXphcmQoZGVsZWdhdGU6ICh3aXphcmQ6IElTdGVwV2l6YXJkQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG59XG5cbi8vIFdpZGdldCBjcmVhdGlvbiBvcGVyYXRpb25zXG5leHBvcnQgaW50ZXJmYWNlIElXaWRnZXRDb250YWluZXJCdWlsZGVyPFRDb250YWluZXIgPSBhbnk+IHtcbiAgdGV4dEJveChvcHRpb25zPzogVGV4dEJveE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICBsYXJnZVRleHRCb3gob3B0aW9ucz86IExhcmdlVGV4dEJveE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICByaWNoVGV4dChvcHRpb25zPzogUmljaFRleHRPcHRpb25zKTogVENvbnRhaW5lcjtcbiAgcGFzc3dvcmRCb3gob3B0aW9ucz86IFBhc3N3b3JkQm94T3B0aW9ucyk6IFRDb250YWluZXI7XG4gIG51bWJlckJveChvcHRpb25zPzogTnVtYmVyQm94T3B0aW9ucyk6IFRDb250YWluZXI7XG4gIHNlbGVjdEJveChvcHRpb25zOiBTZWxlY3RCb3hPcHRpb25zKTogVENvbnRhaW5lcjtcbiAgbG9va3VwQm94KG9wdGlvbnM6IExvb2t1cEJveE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICBzZWxlY3Rpb25MaXN0KG9wdGlvbnM6IFNlbGVjdGlvbkxpc3RPcHRpb25zKTogVENvbnRhaW5lcjtcbiAgZGF0ZVRpbWVCb3gob3B0aW9ucz86IERhdGVUaW1lQm94T3B0aW9ucyk6IFRDb250YWluZXI7XG4gIHRvZ2dsZVN3aXRjaChvcHRpb25zPzogVG9nZ2xlU3dpdGNoT3B0aW9ucyk6IFRDb250YWluZXI7XG4gIGNvbG9yQm94KG9wdGlvbnM/OiBDb2xvckJveE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICBsaXN0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJTGlzdFdpZGdldEJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyO1xuICBjdXN0b21XaWRnZXQ8VD4odHlwZTogc3RyaW5nLCBvcHRpb25zPzogVCk6IFRDb250YWluZXI7XG59XG5cbi8vIEZsZXggY29udGFpbmVyIGJ1aWxkZXIgLSBJbnRlcmZhY2UgU2VncmVnYXRpb246IENvbWJpbmVzIGFsbCBjb250YWluZXIgaW50ZXJmYWNlc1xuZXhwb3J0IGludGVyZmFjZSBJRmxleENvbnRhaW5lckJ1aWxkZXJcbiAgZXh0ZW5kcyBJQmFzZUNvbnRhaW5lckJ1aWxkZXI8SUZsZXhDb250YWluZXJCdWlsZGVyPixcbiAgICBJTGF5b3V0Q29udGFpbmVyQnVpbGRlcjxJRmxleENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElDaGlsZENvbnRhaW5lckJ1aWxkZXI8SUZsZXhDb250YWluZXJCdWlsZGVyPixcbiAgICBJV2lkZ2V0Q29udGFpbmVyQnVpbGRlcjxJRmxleENvbnRhaW5lckJ1aWxkZXI+IHtcbiAgLy8gRmxleC1zcGVjaWZpYyBvcHRpb25zIC0gYm90aCBvYmplY3QgYW5kIGluZGl2aWR1YWwgbWV0aG9kc1xuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUEZsZXhDb250YWluZXJPcHRpb25zKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiAncm93JyB8ICdjb2x1bW4nIHwgJ3Jvdy1yZXZlcnNlJyB8ICdjb2x1bW4tcmV2ZXJzZScpOiBJRmxleENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldFdyYXAod3JhcDogJ25vd3JhcCcgfCAnd3JhcCcgfCAnd3JhcC1yZXZlcnNlJyk6IElGbGV4Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0SnVzdGlmeUNvbnRlbnQoXG4gICAganVzdGlmeTogJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ3NwYWNlLWJldHdlZW4nIHwgJ3NwYWNlLWFyb3VuZCcgfCAnc3BhY2UtZXZlbmx5JyxcbiAgKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xuICBzZXRBbGlnbkl0ZW1zKGFsaWduOiAnZmxleC1zdGFydCcgfCAnZmxleC1lbmQnIHwgJ2NlbnRlcicgfCAnYmFzZWxpbmUnIHwgJ3N0cmV0Y2gnKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xuICBzZXRHYXAoZ2FwOiBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldEJhY2tncm91bmRDb2xvcihjb2xvcjogc3RyaW5nKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xuICBzZXRQYWRkaW5nKHBhZGRpbmc6IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0TWFyZ2luKG1hcmdpbjogc3RyaW5nKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xufVxuXG4vLyBHcmlkIGNvbnRhaW5lciBidWlsZGVyIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uOiBDb21iaW5lcyBhbGwgY29udGFpbmVyIGludGVyZmFjZXNcbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRDb250YWluZXJCdWlsZGVyXG4gIGV4dGVuZHMgSUJhc2VDb250YWluZXJCdWlsZGVyPElHcmlkQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSUxheW91dENvbnRhaW5lckJ1aWxkZXI8SUdyaWRDb250YWluZXJCdWlsZGVyPixcbiAgICBJQ2hpbGRDb250YWluZXJCdWlsZGVyPElHcmlkQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSVdpZGdldENvbnRhaW5lckJ1aWxkZXI8SUdyaWRDb250YWluZXJCdWlsZGVyPiB7XG4gIC8vIEdyaWQtc3BlY2lmaWMgb3B0aW9ucyAtIGJvdGggb2JqZWN0IGFuZCBpbmRpdmlkdWFsIG1ldGhvZHNcbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBHcmlkQ29udGFpbmVyT3B0aW9ucyk6IElHcmlkQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0Q29sdW1ucyhjb2x1bW5zOiBudW1iZXIpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldFJvd3Mocm93czogbnVtYmVyKTogSUdyaWRDb250YWluZXJCdWlsZGVyO1xuICBzZXRHYXAoZ2FwOiBzdHJpbmcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldEp1c3RpZnlJdGVtcyhqdXN0aWZ5OiAnc3RhcnQnIHwgJ2VuZCcgfCAnY2VudGVyJyB8ICdzdHJldGNoJyk6IElHcmlkQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0QWxpZ25JdGVtcyhhbGlnbjogJ3N0YXJ0JyB8ICdlbmQnIHwgJ2NlbnRlcicgfCAnc3RyZXRjaCcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldEF1dG9GbG93KGZsb3c6ICdyb3cnIHwgJ2NvbHVtbicgfCAncm93IGRlbnNlJyB8ICdjb2x1bW4gZGVuc2UnKTogSUdyaWRDb250YWluZXJCdWlsZGVyO1xuICBzZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZyk6IElHcmlkQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0UGFkZGluZyhwYWRkaW5nOiBzdHJpbmcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldE1hcmdpbihtYXJnaW46IHN0cmluZyk6IElHcmlkQ29udGFpbmVyQnVpbGRlcjtcbn1cblxuLy8gUGFuZWwgY29udGFpbmVyIGJ1aWxkZXIgLSBJbnRlcmZhY2UgU2VncmVnYXRpb246IENvbWJpbmVzIGFsbCBjb250YWluZXIgaW50ZXJmYWNlc1xuZXhwb3J0IGludGVyZmFjZSBJUGFuZWxDb250YWluZXJCdWlsZGVyXG4gIGV4dGVuZHMgSUJhc2VDb250YWluZXJCdWlsZGVyPElQYW5lbENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElMYXlvdXRDb250YWluZXJCdWlsZGVyPElQYW5lbENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElDaGlsZENvbnRhaW5lckJ1aWxkZXI8SVBhbmVsQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSVdpZGdldENvbnRhaW5lckJ1aWxkZXI8SVBhbmVsQ29udGFpbmVyQnVpbGRlcj4ge1xuICAvLyBQYW5lbC1zcGVjaWZpYyBvcHRpb25zXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQUGFuZWxDb250YWluZXJPcHRpb25zKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0Q2FwdGlvbihjYXB0aW9uOiBzdHJpbmcpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyO1xuICBzZXRJY29uKGljb246IHN0cmluZyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldExvb2sobG9vazogJ3NvbGlkJyB8ICdmaWxsJyB8ICdvdXRsaW5lJyB8ICdmbGF0JyB8ICdub25lJyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldFNob3dIZWFkZXIoc2hvdzogYm9vbGVhbik6IElQYW5lbENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldENvbGxhcHNlZChjb2xsYXBzZWQ6IGJvb2xlYW4pOiBJUGFuZWxDb250YWluZXJCdWlsZGVyO1xufVxuXG4vLyBQYWdlIGNvbnRhaW5lciBidWlsZGVyIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uOiBDb21iaW5lcyBhbGwgY29udGFpbmVyIGludGVyZmFjZXNcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2VDb250YWluZXJCdWlsZGVyXG4gIGV4dGVuZHMgSUJhc2VDb250YWluZXJCdWlsZGVyPElQYWdlQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSUxheW91dENvbnRhaW5lckJ1aWxkZXI8SVBhZ2VDb250YWluZXJCdWlsZGVyPixcbiAgICBJQ2hpbGRDb250YWluZXJCdWlsZGVyPElQYWdlQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSVdpZGdldENvbnRhaW5lckJ1aWxkZXI8SVBhZ2VDb250YWluZXJCdWlsZGVyPiB7XG4gIC8vIFBhZ2Utc3BlY2lmaWMgb3B0aW9uc1xuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUFBhZ2VDb250YWluZXJPcHRpb25zKTogSVBhZ2VDb250YWluZXJCdWlsZGVyO1xuICBzZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZyk6IElQYWdlQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0VGhlbWUodGhlbWU6IHsgaWQ6IHN0cmluZyB9KTogSVBhZ2VDb250YWluZXJCdWlsZGVyO1xuICBzZXRIYXNIZWFkZXIoaGFzSGVhZGVyOiBib29sZWFuKTogSVBhZ2VDb250YWluZXJCdWlsZGVyO1xuICBzZXRIYXNGb290ZXIoaGFzRm9vdGVyOiBib29sZWFuKTogSVBhZ2VDb250YWluZXJCdWlsZGVyO1xuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiAncnRsJyB8ICdsdHInKTogSVBhZ2VDb250YWluZXJCdWlsZGVyO1xufVxuXG4vLyBUYWJzZXQgY29udGFpbmVyIGJ1aWxkZXIgLSBJbnRlcmZhY2UgU2VncmVnYXRpb246IENvbWJpbmVzIGFsbCBjb250YWluZXIgaW50ZXJmYWNlc1xuZXhwb3J0IGludGVyZmFjZSBJVGFic2V0Q29udGFpbmVyQnVpbGRlclxuICBleHRlbmRzIElCYXNlQ29udGFpbmVyQnVpbGRlcjxJVGFic2V0Q29udGFpbmVyQnVpbGRlcj4sXG4gICAgSUxheW91dENvbnRhaW5lckJ1aWxkZXI8SVRhYnNldENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElDaGlsZENvbnRhaW5lckJ1aWxkZXI8SVRhYnNldENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElXaWRnZXRDb250YWluZXJCdWlsZGVyPElUYWJzZXRDb250YWluZXJCdWlsZGVyPiB7XG4gIC8vIFRhYnNldC1zcGVjaWZpYyBvcHRpb25zXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQVGFic2V0Q29udGFpbmVyT3B0aW9ucyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRMb29rKGxvb2s6ICd3aXRoLWxpbmUnIHwgJ3dpdGgtbGluZS1jb2xvcicgfCAncGlsbHMnIHwgJ3BpbGxzLWNvbG9yJyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRPcmllbnRhdGlvbihvcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRBY3RpdmVJbmRleChpbmRleDogbnVtYmVyKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXI7XG59XG5cbi8vIEZvcm0gZmllbGQgYnVpbGRlciAtIEludGVyZmFjZSBTZWdyZWdhdGlvbjogQ29tYmluZXMgYmFzZSBhbmQgd2lkZ2V0IGludGVyZmFjZXNcbi8vIEZvcm0gZmllbGRzIGNhbiBvbmx5IGNvbnRhaW4gT05FIHdpZGdldFxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUZpZWxkQnVpbGRlclxuICBleHRlbmRzIElCYXNlQ29udGFpbmVyQnVpbGRlcjxJRm9ybUZpZWxkQnVpbGRlcj4sXG4gICAgSUxheW91dENvbnRhaW5lckJ1aWxkZXI8SUZvcm1GaWVsZEJ1aWxkZXI+IHtcbiAgLy8gRm9ybSBmaWVsZCBzcGVjaWZpYyBvcHRpb25zXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQRm9ybUZpZWxkT3B0aW9ucyk6IElGb3JtRmllbGRCdWlsZGVyO1xuICBzZXRMYWJlbChsYWJlbDogc3RyaW5nKTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIHNldFNob3dMYWJlbChzaG93TGFiZWw6IGJvb2xlYW4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcblxuICAvLyBTaW5nbGUgd2lkZ2V0IG1ldGhvZHMgKHJlcGxhY2VzIElXaWRnZXRDb250YWluZXJCdWlsZGVyKVxuICB0ZXh0Qm94KG9wdGlvbnM/OiBPbWl0PFRleHRCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIGxhcmdlVGV4dEJveChvcHRpb25zPzogT21pdDxMYXJnZVRleHRCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIHJpY2hUZXh0KG9wdGlvbnM/OiBPbWl0PFJpY2hUZXh0T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyO1xuICBwYXNzd29yZEJveChvcHRpb25zPzogT21pdDxQYXNzd29yZEJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgbnVtYmVyQm94KG9wdGlvbnM/OiBPbWl0PE51bWJlckJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgc2VsZWN0Qm94KG9wdGlvbnM6IE9taXQ8U2VsZWN0Qm94T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyO1xuICBsb29rdXBCb3gob3B0aW9uczogT21pdDxMb29rdXBCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIHNlbGVjdGlvbkxpc3Qob3B0aW9uczogT21pdDxTZWxlY3Rpb25MaXN0T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyO1xuICBkYXRlVGltZUJveChvcHRpb25zPzogT21pdDxEYXRlVGltZUJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgdG9nZ2xlU3dpdGNoKG9wdGlvbnM/OiBPbWl0PFRvZ2dsZVN3aXRjaE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgY29sb3JCb3gob3B0aW9ucz86IE9taXQ8Q29sb3JCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIGN1c3RvbVdpZGdldDxUPih0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFQsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbn1cblxuLy8gRmllbGRzZXQgY29udGFpbmVyIGJ1aWxkZXIgLSBJbnRlcmZhY2UgU2VncmVnYXRpb246IFNwZWNpYWxpemVkIGZvciBmb3JtIGZpZWxkcyBvbmx5XG5leHBvcnQgaW50ZXJmYWNlIElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXJcbiAgZXh0ZW5kcyBJQmFzZUNvbnRhaW5lckJ1aWxkZXI8SUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcj4sXG4gICAgSUxheW91dENvbnRhaW5lckJ1aWxkZXI8SUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcj4ge1xuICAvLyBGaWVsZHNldC1zcGVjaWZpYyBvcHRpb25zXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQRmllbGRzZXRDb250YWluZXJPcHRpb25zKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0VGl0bGUodGl0bGU6IHN0cmluZyk6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRJY29uKGljb246IHN0cmluZyk6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldENvbGxhcHNpYmxlKGNvbGxhcHNpYmxlOiBib29sZWFuKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0SXNPcGVuKGlzT3BlbjogYm9vbGVhbik6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldExvb2sobG9vazogJ2ZpZWxkc2V0JyB8ICdjYXJkJyB8ICdncm91cCcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRTaG93SGVhZGVyKHNob3dIZWFkZXI6IGJvb2xlYW4pOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRDb2xzKGNvbHM6IG51bWJlcik6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI7XG5cbiAgLy8gT25seSBmb3JtIGZpZWxkcyBhcmUgYWxsb3dlZCBpbiBmaWVsZHNldFxuICBmb3JtRmllbGQobGFiZWw6IHN0cmluZywgZGVsZWdhdGU/OiAoZmllbGQ6IElGb3JtRmllbGRCdWlsZGVyKSA9PiB2b2lkKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcjtcbn1cblxuLy8gRGlhbG9nIGNvbnRhaW5lciBidWlsZGVyIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uOiBTcGVjaWFsaXplZCBmb3IgZGlhbG9nIGZ1bmN0aW9uYWxpdHlcbmV4cG9ydCBpbnRlcmZhY2UgSURpYWxvZ0J1aWxkZXIge1xuICAvLyBEaWFsb2ctc3BlY2lmaWMgb3B0aW9uc1xuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUERpYWxvZ0NvbnRhaW5lck9wdGlvbnMpOiBJRGlhbG9nQnVpbGRlcjtcbiAgc2V0VGl0bGUodGl0bGU6IHN0cmluZyk6IElEaWFsb2dCdWlsZGVyO1xuICBzZXRNZXNzYWdlKG1lc3NhZ2U/OiBzdHJpbmcpOiBJRGlhbG9nQnVpbGRlcjtcbiAgc2V0U2l6ZShzaXplOiBBWFBvcHVwU2l6ZVR5cGUpOiBJRGlhbG9nQnVpbGRlcjtcbiAgc2V0Q2xvc2VCdXR0b24oY2xvc2VCdXR0b246IGJvb2xlYW4pOiBJRGlhbG9nQnVpbGRlcjtcbiAgc2V0Q29udGV4dChjb250ZXh0OiBhbnkpOiBJRGlhbG9nQnVpbGRlcjtcblxuICAvLyBDb250ZW50IG1ldGhvZCAtIHdyYXBzIGxheW91dCBidWlsZGVyIG1ldGhvZHNcbiAgY29udGVudChkZWxlZ2F0ZTogKGxheW91dEJ1aWxkZXI6IElGbGV4Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElEaWFsb2dCdWlsZGVyO1xuXG4gIC8vIEFjdGlvbnMgbWV0aG9kXG4gIHNldEFjdGlvbnMoZGVsZWdhdGU/OiAoYWN0aW9uczogSUFjdGlvbkJ1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlcjtcblxuICAvLyBDdXN0b20gYWN0aW9uIG1hbmFnZW1lbnQgKGZvciBzdGVwIHdpemFyZCBpbnRlZ3JhdGlvbilcbiAgYWRkQ3VzdG9tQWN0aW9uKGFjdGlvbjogQVhQQWN0aW9uTWVudUl0ZW0pOiBJRGlhbG9nQnVpbGRlcjtcblxuICAvLyBEaWFsb2ctc3BlY2lmaWMgbWV0aG9kc1xuICBzaG93KCk6IFByb21pc2U8QVhQRGlhbG9nUmVmPjtcbn1cblxuLy8gTGlzdCBXaWRnZXQgQnVpbGRlciAtIEludGVyZmFjZSBTZWdyZWdhdGlvbjogQ29tYmluZXMgYWxsIGNvbnRhaW5lciBpbnRlcmZhY2VzXG5leHBvcnQgaW50ZXJmYWNlIElMaXN0V2lkZ2V0QnVpbGRlclxuICBleHRlbmRzIElCYXNlQ29udGFpbmVyQnVpbGRlcjxJTGlzdFdpZGdldEJ1aWxkZXI+LFxuICAgIElMYXlvdXRDb250YWluZXJCdWlsZGVyPElMaXN0V2lkZ2V0QnVpbGRlcj4sXG4gICAgSUNoaWxkQ29udGFpbmVyQnVpbGRlcjxJTGlzdFdpZGdldEJ1aWxkZXI+LFxuICAgIElXaWRnZXRDb250YWluZXJCdWlsZGVyPElMaXN0V2lkZ2V0QnVpbGRlcj4ge1xuICAvLyBMaXN0LXNwZWNpZmljIG9wdGlvbnNcbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBMaXN0V2lkZ2V0T3B0aW9ucyk6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0RGF0YVNvdXJjZShkYXRhU291cmNlOiBhbnlbXSB8IEFYRGF0YVNvdXJjZSk6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0Q29sdW1ucyhjb2x1bW5zOiBBWFBMaXN0V2lkZ2V0Q29sdW1uW10pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gRXZlbnQgaGFuZGxlcnNcbiAgc2V0T25Sb3dDbGljayhoYW5kbGVyOiAocm93OiBhbnkpID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldE9uUm93RG91YmxlQ2xpY2soaGFuZGxlcjogKHJvdzogYW55KSA9PiB2b2lkKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuICBzZXRPblNlbGVjdGlvbkNoYW5nZShoYW5kbGVyOiAoc2VsZWN0ZWRSb3dzOiBhbnlbXSkgPT4gdm9pZCk6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0T25Sb3dDb21tYW5kKGhhbmRsZXI6IChjb21tYW5kOiBhbnksIHNlbGVjdGVkUm93czogYW55W10pID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gVGFibGUgZmVhdHVyZXNcbiAgc2V0UGFnaW5nKHBhZ2luZzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0U2hvd0hlYWRlcihzaG93OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuICBzZXRTaG93Rm9vdGVyKHNob3c6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldEZpeEhlYWRlcihmaXg6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldEZpeEZvb3RlcihmaXg6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldEZldGNoRGF0YU1vZGUobW9kZTogJ2F1dG8nIHwgJ21hbnVhbCcpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldFBhcmVudEZpZWxkKGZpZWxkOiBzdHJpbmcpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldE1pbkhlaWdodChoZWlnaHQ6IHN0cmluZyB8IG51bWJlcik6IElMaXN0V2lkZ2V0QnVpbGRlcjtcblxuICAvLyBTZWxlY3Rpb24gJiBJbmRleFxuICBzZXRTaG93SW5kZXgoc2hvdzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0QWxsb3dTZWxlY3Rpb24oYWxsb3c6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gQ29tbWFuZHNcbiAgc2V0UHJpbWFyeUNvbW1hbmRzKGNvbW1hbmRzOiBhbnlbXSk6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0U2Vjb25kYXJ5Q29tbWFuZHMoY29tbWFuZHM6IEFYUExpc3RXaWRnZXRSb3dDb21tYW5kW10pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gTG9hZGluZ1xuICBzZXRMb2FkaW5nKGxvYWRpbmc6IHsgZW5hYmxlZD86IGJvb2xlYW47IGFuaW1hdGlvbj86IGJvb2xlYW4gfSk6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbn1cblxuLy8gU3RlcCBCdWlsZGVyIC0gSW50ZXJmYWNlIGZvciBidWlsZGluZyBpbmRpdmlkdWFsIHN0ZXBzXG5leHBvcnQgaW50ZXJmYWNlIElTdGVwQnVpbGRlciB7XG4gIHNldEljb24oaWNvbjogc3RyaW5nKTogSVN0ZXBCdWlsZGVyO1xuICBzZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogSVN0ZXBCdWlsZGVyO1xuICBzZXRTa2lwcGFibGUoc2tpcHBhYmxlOiBib29sZWFuKTogSVN0ZXBCdWlsZGVyO1xuXG4gIC8vIENvbnRlbnQgdXNpbmcgbGF5b3V0IGJ1aWxkZXJcbiAgY29udGVudChkZWxlZ2F0ZTogKGxheW91dEJ1aWxkZXI6IElMYXlvdXRCdWlsZGVyKSA9PiB2b2lkKTogSVN0ZXBCdWlsZGVyO1xuXG4gIC8vIFN0ZXAtc3BlY2lmaWMgYWN0aW9ucyAoZnV0dXJlIGZlYXR1cmUgLSBza2lwIGZvciBub3cpXG4gIC8vIGFkZEFjdGlvbihhY3Rpb246IEFYUEFjdGlvbk1lbnVJdGVtKTogSVN0ZXBCdWlsZGVyO1xuXG4gIGJ1aWxkKCk6IEFYUFN0ZXBEZWZpbml0aW9uO1xufVxuXG4vLyBTdGVwIFdpemFyZCBCdWlsZGVyIC0gSW50ZXJmYWNlIGZvciBidWlsZGluZyBzdGVwIHdpemFyZFxuZXhwb3J0IGludGVyZmFjZSBJU3RlcFdpemFyZEJ1aWxkZXJcbiAgZXh0ZW5kcyBJQmFzZUNvbnRhaW5lckJ1aWxkZXI8SVN0ZXBXaXphcmRCdWlsZGVyPixcbiAgICBJTGF5b3V0Q29udGFpbmVyQnVpbGRlcjxJU3RlcFdpemFyZEJ1aWxkZXI+IHtcbiAgLy8gQ29uZmlndXJhdGlvblxuICBzZXRMaW5lYXIobGluZWFyOiBib29sZWFuKTogSVN0ZXBXaXphcmRCdWlsZGVyO1xuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnKTogSVN0ZXBXaXphcmRCdWlsZGVyO1xuICBzZXRMb29rKGxvb2s6IEFYU3RlcFdpemFyZExvb2spOiBJU3RlcFdpemFyZEJ1aWxkZXI7XG4gIHNldFNob3dBY3Rpb25zKHNob3c6IGJvb2xlYW4pOiBJU3RlcFdpemFyZEJ1aWxkZXI7XG5cbiAgLy8gQWN0aW9uc1xuICBzZXRBY3Rpb25zKGFjdGlvbnM6IEFYUFdpemFyZEFjdGlvbnMpOiBJU3RlcFdpemFyZEJ1aWxkZXI7XG5cbiAgLy8gR3VhcmRzXG4gIHNldEd1YXJkcyhndWFyZHM6IHtcbiAgICBuZXh0PzogKHBheWxvYWQ6IEFYUFN0ZXBXaXphcmRHdWFyZFBheWxvYWQpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHByZXY/OiAocGF5bG9hZDogQVhQU3RlcFdpemFyZEd1YXJkUGF5bG9hZCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG4gIH0pOiBJU3RlcFdpemFyZEJ1aWxkZXI7XG5cbiAgLy8gRXZlbnRzXG4gIHNldEV2ZW50cyhldmVudHM6IHtcbiAgICBvblN0ZXBDaGFuZ2VkPzogKHN0YXR1czogQVhQU3RlcFdpemFyZFN0YXR1cykgPT4gdm9pZDtcbiAgICBvbkNvbXBsZXRlPzogKHN0YXR1czogQVhQU3RlcFdpemFyZFN0YXR1cykgPT4gdm9pZDtcbiAgfSk6IElTdGVwV2l6YXJkQnVpbGRlcjtcblxuICAvLyBBZGQgc3RlcHNcbiAgc3RlcChpZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCBkZWxlZ2F0ZTogKHN0ZXA6IElTdGVwQnVpbGRlcikgPT4gdm9pZCk6IElTdGVwV2l6YXJkQnVpbGRlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG4iXX0=","import { 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 { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { Component, effect, EventEmitter, inject, Input, Output, signal, viewChild } from '@angular/core';\nimport { AXPLayoutRendererComponent } from './layout-renderer.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/button\";\nimport * as i2 from \"@acorex/components/decorators\";\nimport * as i3 from \"@acorex/components/loading\";\nimport * as i4 from \"@angular/common\";\nimport * as i5 from \"@acorex/core/translation\";\nexport class AXPDialogRendererComponent extends AXBasePageComponent {\n constructor() {\n super(...arguments);\n this.result = new EventEmitter();\n this.expressionEvaluator = inject(AXPExpressionEvaluatorService);\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 // Aggregated actions for footer rendering\n this.footerPrefix = signal([], ...(ngDevMode ? [{ debugName: \"footerPrefix\" }] : []));\n this.footerSuffix = signal([], ...(ngDevMode ? [{ debugName: \"footerSuffix\" }] : []));\n //#endregion\n //#region ---- View Accessors ----\n // Access the internal layout renderer to reach the widgets container injector\n this.layoutRenderer = viewChild(AXPLayoutRendererComponent, ...(ngDevMode ? [{ debugName: \"layoutRenderer\" }] : []));\n this.#eff = effect(() => {\n let count = 0;\n if (!this.widgetCoreService) {\n const renderer = this.layoutRenderer();\n const container = renderer?.getContainer();\n this.widgetCoreService = container?.builderService ?? null;\n count = this.widgetCoreService.registeredWidgetsCount();\n }\n else {\n count = this.widgetCoreService.registeredWidgetsCount();\n // Clear existing timer\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n // Set new timer to call after 200ms of no count changes\n this.debounceTimer = setTimeout(() => {\n this.aggregateAndEvaluateActions();\n }, 200);\n }\n }, ...(ngDevMode ? [{ debugName: \"#eff\" }] : []));\n }\n //#endregion\n //#region ---- Lifecycle ----\n ngOnInit() {\n // Initialize context with provided context\n this.context.set(this.config?.context || {});\n }\n #eff;\n //#endregion\n handleContextChanged(event) {\n this.context.set(event);\n this.aggregateAndEvaluateActions();\n }\n handleContextInitiated(event) {\n this.context.set(event);\n this.aggregateAndEvaluateActions();\n }\n footerPrefixActions() {\n return this.footerPrefix();\n }\n footerSuffixActions() {\n return this.footerSuffix();\n }\n isFormLoading() {\n return this.isDialogLoading();\n }\n isSubmitting() {\n return this.isDialogLoading();\n }\n async executeAction(action) {\n const cmd = action.command;\n if (cmd !== 'cancel') {\n const isValid = await this.layoutRenderer()?.validate();\n if (!isValid?.result) {\n return;\n }\n }\n if (typeof cmd === 'string' && cmd.startsWith('widget:')) {\n const parsed = this.parseWidgetCommand(cmd);\n if (parsed.widgetName && parsed.action) {\n await this.executeWidgetApi(parsed.widgetName, parsed.action);\n await this.aggregateAndEvaluateActions();\n return;\n }\n }\n // Fallback: treat as regular dialog action (cancel/confirm/custom)\n const result = { context: this.context(), action: cmd };\n this.dialogResult = result;\n if (this.data) {\n this.data.context = result.context;\n this.data.action = result.action;\n }\n this.callBack({\n close: (result) => {\n this.close(result);\n },\n context: () => this.context(),\n action: () => result.action,\n setLoading: (loading) => {\n this.isDialogLoading.set(loading);\n },\n });\n }\n parseWidgetCommand(cmd) {\n // Expected 'widget:<widgetName>.<action>'\n if (!cmd?.startsWith('widget:'))\n return {};\n const rest = cmd.slice('widget:'.length);\n const dot = rest.lastIndexOf('.');\n if (dot <= 0)\n return {};\n return { widgetName: rest.slice(0, dot), action: rest.slice(dot + 1) };\n }\n async executeWidgetApi(widgetName, apiMethod) {\n if (!this.widgetCoreService)\n return;\n try {\n const widget = this.widgetCoreService.getWidget(widgetName);\n const api = widget?.api?.();\n const fn = api?.[apiMethod];\n if (typeof fn === 'function') {\n await Promise.resolve(fn({\n close: (result) => {\n this.close(result);\n },\n context: () => this.context(),\n setLoading: (loading) => {\n this.isDialogLoading.set(loading);\n },\n }));\n }\n }\n catch { }\n }\n async close(result) {\n if (result) {\n const isValid = await this.layoutRenderer()?.validate();\n if (isValid?.result) {\n this.result.emit(result);\n }\n }\n super.close(result);\n }\n // --- Actions aggregation & evaluation ---\n async aggregateAndEvaluateActions() {\n const widgetActions = await this.collectWidgetActions();\n const dialogActions = this.collectDialogActionsFromConfig();\n const all = [...widgetActions, ...dialogActions];\n const evaluated = await this.evaluatePredicates(all);\n const visible = evaluated.filter((a) => a.hidden !== true);\n const prefix = visible.filter((a) => (a.zone ?? 'footer') === 'footer' && (a.placement ?? 'suffix') === 'prefix');\n const suffix = visible.filter((a) => (a.zone ?? 'footer') === 'footer' && (a.placement ?? 'suffix') === 'suffix');\n this.footerPrefix.set(prefix);\n this.footerSuffix.set(suffix);\n }\n async collectWidgetActions() {\n if (!this.widgetCoreService)\n return [];\n const names = this.widgetCoreService.listRegisteredWidgetNames();\n const actions = [];\n for (const name of names) {\n try {\n const widget = this.widgetCoreService.getWidget(name);\n const widgetActs = widget?.actions?.() ?? [];\n actions.push(...widgetActs);\n }\n catch { }\n }\n return actions;\n }\n collectDialogActionsFromConfig() {\n const footer = this.config?.actions?.footer;\n const mapOne = (a, placement) => ({\n title: a.title,\n command: typeof a.command === 'string' ? a.command : a.command?.name,\n icon: a.icon,\n color: a.color,\n disabled: a.disabled,\n hidden: a.hidden,\n zone: 'footer',\n placement,\n scope: a.scope,\n });\n const prefix = (footer?.prefix || []).map((a) => mapOne(a, 'prefix'));\n const suffix = (footer?.suffix || []).map((a) => mapOne(a, 'suffix'));\n return [...prefix, ...suffix];\n }\n async evaluatePredicates(actions) {\n const out = [];\n for (const a of actions) {\n const parsed = typeof a.command === 'string' ? this.parseWidgetCommand(a.command) : {};\n const api = parsed.widgetName ? await this.resolveApi(parsed.widgetName) : undefined;\n const scope = {\n api,\n widget: { name: parsed.widgetName },\n dialog: { context: this.context() },\n context: this.context(),\n };\n const disabled = await this.evalBool(a.disabled, scope);\n const hidden = await this.evalBool(a.hidden, scope);\n out.push({ ...a, disabled, hidden });\n }\n return out;\n }\n async evalBool(value, scope) {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string') {\n try {\n const result = await this.expressionEvaluator.evaluate(value, scope);\n return !!result;\n }\n catch {\n return false;\n }\n }\n return value;\n }\n async resolveApi(widgetName) {\n try {\n await this.widgetCoreService?.waitForWidget(widgetName, 2000);\n const widget = this.widgetCoreService?.getWidget(widgetName);\n return widget?.api?.();\n }\n catch {\n return undefined;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPDialogRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.4\", type: AXPDialogRendererComponent, isStandalone: true, selector: \"axp-dialog-renderer\", inputs: { config: \"config\" }, outputs: { result: \"result\" }, viewQueries: [{ propertyName: \"layoutRenderer\", first: true, predicate: AXPLayoutRendererComponent, descendants: true, isSignal: true }], 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 @for (action of footerPrefixActions(); 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 <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-prefix>\n <ax-suffix>\n @for (action of footerSuffixActions(); 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 (isFormLoading()) {\n <ax-loading></ax-loading>\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 </ax-suffix>\n </ax-footer>\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"component\", type: AXPLayoutRendererComponent, selector: \"axp-layout-renderer\", inputs: [\"layout\", \"context\", \"look\", \"mode\"], outputs: [\"contextChange\", \"contextInitiated\", \"validityChange\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i1.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i2.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i2.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"component\", type: i3.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"pipe\", type: i4.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i5.AXTranslatorPipe, name: \"translate\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPDialogRendererComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'axp-dialog-renderer',\n standalone: true,\n imports: [\n CommonModule,\n AXPLayoutRendererComponent,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n ],\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 @for (action of footerPrefixActions(); 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 <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-prefix>\n <ax-suffix>\n @for (action of footerSuffixActions(); 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 (isFormLoading()) {\n <ax-loading></ax-loading>\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 </ax-suffix>\n </ax-footer>\n `,\n }]\n }], propDecorators: { config: [{\n type: Input\n }], result: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9kaWFsb2ctcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7O0FBaUZ6RSxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsbUJBQW1CO0lBN0RuRTs7UUErRFksV0FBTSxHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBTXBELHdCQUFtQixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBU3BFLFlBQU8sR0FBRyxNQUFNLENBQU0sRUFBRSxtREFBQyxDQUFDO1FBRTFCLCtFQUErRTtRQUMvRSxhQUFRLEdBQXNDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUcvQyxvQkFBZSxHQUFH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QkFFVSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhMb2FkaW5nTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xvYWRpbmcnO1xuaW1wb3J0IHsgQVhCYXNlUGFnZUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wYWdlJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQV2lkZ2V0Q29yZUVsZW1lbnRBY3Rpb24sIEFYUFdpZGdldENvcmVTZXJ2aWNlLCBBWFBXaWRnZXROb2RlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgZWZmZWN0LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRGlhbG9nUmVmIH0gZnJvbSAnLi9sYXlvdXQtYnVpbGRlci50eXBlcyc7XG5pbXBvcnQgeyBBWFBMYXlvdXRSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nUmVuZGVyZXJDb25maWcge1xuICB0aXRsZTogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBjb250ZXh0OiBhbnk7XG4gIGRlZmluaXRpb246IEFYUFdpZGdldE5vZGU7XG4gIGFjdGlvbnM/OiB7XG4gICAgZm9vdGVyPzoge1xuICAgICAgcHJlZml4PzogYW55W107XG4gICAgICBzdWZmaXg/OiBhbnlbXTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ1JlbmRlcmVyUmVzdWx0IHtcbiAgY29udGV4dDogYW55O1xuICBhY3Rpb24/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1kaWFsb2ctcmVuZGVyZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFYUExheW91dFJlbmRlcmVyQ29tcG9uZW50LFxuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYTG9hZGluZ01vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJheC1wLTRcIj5cbiAgICAgIDxheHAtbGF5b3V0LXJlbmRlcmVyXG4gICAgICAgIFtsYXlvdXRdPVwiY29uZmlnLmRlZmluaXRpb25cIlxuICAgICAgICBbY29udGV4dF09XCJjb250ZXh0KClcIlxuICAgICAgICAoY29udGV4dENoYW5nZSk9XCJoYW5kbGVDb250ZXh0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgKGNvbnRleHRJbml0aWF0ZWQpPVwiaGFuZGxlQ29udGV4dEluaXRpYXRlZCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgIDwvYXhwLWxheW91dC1yZW5kZXJlcj5cbiAgICA8L2Rpdj5cblxuICAgIDxheC1mb290ZXI+XG4gICAgICA8YXgtcHJlZml4PlxuICAgICAgICBAZm9yIChhY3Rpb24gb2YgZm9vdGVyUHJlZml4QWN0aW9ucygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkIHx8IGlzRm9ybUxvYWRpbmcoKVwiXG4gICAgICAgICAgICBbdGV4dF09XCIoYWN0aW9uLnRpdGxlIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgICAgICBbbG9va109XCInb3V0bGluZSdcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImFjdGlvbi5jb2xvclwiXG4gICAgICAgICAgICAob25DbGljayk9XCJleGVjdXRlQWN0aW9uKGFjdGlvbilcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwie3sgYWN0aW9uLmljb24gfX1cIj48L2k+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9heC1wcmVmaXg+XG4gICAgICA8YXgtc3VmZml4PlxuICAgICAgICBAZm9yIChhY3Rpb24gb2YgZm9vdGVyU3VmZml4QWN0aW9ucygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkIHx8IGlzU3VibWl0dGluZygpXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cIihhY3Rpb24udGl0bGUgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgICAgIFtsb29rXT1cIidzb2xpZCdcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImFjdGlvbi5jb2xvclwiXG4gICAgICAgICAgICAob25DbGljayk9XCJleGVjdXRlQWN0aW9uKGFjdGlvbilcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIDxheC1sb2FkaW5nPjwvYXgtbG9hZGluZz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYWN0aW9uLmljb24pIHtcbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwie3sgYWN0aW9uLmljb24gfX1cIj48L2F4LWljb24+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2F4LXN1ZmZpeD5cbiAgICA8L2F4LWZvb3Rlcj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRGlhbG9nUmVuZGVyZXJDb21wb25lbnQgZXh0ZW5kcyBBWEJhc2VQYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgY29uZmlnITogRGlhbG9nUmVuZGVyZXJDb25maWc7XG4gIEBPdXRwdXQoKSByZXN1bHQgPSBuZXcgRXZlbnRFbWl0dGVyPERpYWxvZ1JlbmRlcmVyUmVzdWx0PigpO1xuXG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgLy8g4pyFIEluamVjdCBzZXJ2aWNlc1xuICBwcml2YXRlIHdpZGdldENvcmVTZXJ2aWNlOiBBWFBXaWRnZXRDb3JlU2VydmljZTtcbiAgcHJpdmF0ZSBleHByZXNzaW9uRXZhbHVhdG9yID0gaW5qZWN0KEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTZXJ2aWNlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFN0YXRlICAgLS0tLVxuXG4gIC8vIFN0b3JlIGRpYWxvZyByZXN1bHQgZm9yIG1hbnVhbCBjbG9zaW5nXG4gIHByaXZhdGUgZGlhbG9nUmVzdWx0PzogRGlhbG9nUmVuZGVyZXJSZXN1bHQ7XG5cbiAgY29udGV4dCA9IHNpZ25hbDxhbnk+KHt9KTtcblxuICAvLyBUaGlzIHdpbGwgYmUgc2V0IGJ5IHRoZSBwb3B1cCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgLSBzYW1lIGFzIGR5bmFtaWMtZGlhbG9nXG4gIGNhbGxCYWNrOiAoZGlhbG9nUmVmOiBBWFBEaWFsb2dSZWYpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgZGF0YTogYW55O1xuXG4gIHByaXZhdGUgaXNEaWFsb2dMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBBZ2dyZWdhdGVkIGFjdGlvbnMgZm9yIGZvb3RlciByZW5kZXJpbmdcbiAgZm9vdGVyUHJlZml4ID0gc2lnbmFsPEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uW10+KFtdKTtcbiAgZm9vdGVyU3VmZml4ID0gc2lnbmFsPEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uW10+KFtdKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIExpZmVjeWNsZSAgIC0tLS1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICAvLyBJbml0aWFsaXplIGNvbnRleHQgd2l0aCBwcm92aWRlZCBjb250ZXh0XG4gICAgdGhpcy5jb250ZXh0LnNldCh0aGlzLmNvbmZpZz8uY29udGV4dCB8fCB7fSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFZpZXcgQWNjZXNzb3JzICAgLS0tLVxuXG4gIC8vIEFjY2VzcyB0aGUgaW50ZXJuYWwgbGF5b3V0IHJlbmRlcmVyIHRvIHJlYWNoIHRoZSB3aWRnZXRzIGNvbnRhaW5lciBpbmplY3RvclxuICBwcml2YXRlIGxheW91dFJlbmRlcmVyID0gdmlld0NoaWxkKEFYUExheW91dFJlbmRlcmVyQ29tcG9uZW50KTtcblxuICAvLyBEZWJvdW5jZSB0aW1lciBmb3IgYWdncmVnYXRpbmcgYWN0aW9ucyBhZnRlciB3aWRnZXQgY291bnQgc3RhYmlsaXplc1xuICBwcml2YXRlIGRlYm91bmNlVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuICAjZWZmID0gZWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGlmICghdGhpcy53aWRnZXRDb3JlU2VydmljZSkge1xuICAgICAgY29uc3QgcmVuZGVyZXIgPSB0aGlzLmxheW91dFJlbmRlcmVyKCk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSByZW5kZXJlcj8uZ2V0Q29udGFpbmVyKCk7XG4gICAgICB0aGlzLndpZGdldENvcmVTZXJ2aWNlID0gKGNvbnRhaW5lcj8uYnVpbGRlclNlcnZpY2UgYXMgQVhQV2lkZ2V0Q29yZVNlcnZpY2UpID8/IG51bGw7XG4gICAgICBjb3VudCA9IHRoaXMud2lkZ2V0Q29yZVNlcnZpY2UucmVnaXN0ZXJlZFdpZGdldHNDb3VudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IHRoaXMud2lkZ2V0Q29yZVNlcnZpY2UucmVnaXN0ZXJlZFdpZGdldHNDb3VudCgpO1xuXG4gICAgICAvLyBDbGVhciBleGlzdGluZyB0aW1lclxuICAgICAgaWYgKHRoaXMuZGVib3VuY2VUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IG5ldyB0aW1lciB0byBjYWxsIGFmdGVyIDIwMG1zIG9mIG5vIGNvdW50IGNoYW5nZXNcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0ZUFuZEV2YWx1YXRlQWN0aW9ucygpO1xuICAgICAgfSwgMjAwKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIGhhbmRsZUNvbnRleHRDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmNvbnRleHQuc2V0KGV2ZW50KTtcbiAgICB0aGlzLmFnZ3JlZ2F0ZUFuZEV2YWx1YXRlQWN0aW9ucygpO1xuICB9XG5cbiAgaGFuZGxlQ29udGV4dEluaXRpYXRlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5jb250ZXh0LnNldChldmVudCk7XG4gICAgdGhpcy5hZ2dyZWdhdGVBbmRFdmFsdWF0ZUFjdGlvbnMoKTtcbiAgfVxuXG4gIGZvb3RlclByZWZpeEFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9vdGVyUHJlZml4KCk7XG4gIH1cblxuICBmb290ZXJTdWZmaXhBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmZvb3RlclN1ZmZpeCgpO1xuICB9XG5cbiAgaXNGb3JtTG9hZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RpYWxvZ0xvYWRpbmcoKTtcbiAgfVxuXG4gIGlzU3VibWl0dGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5pc0RpYWxvZ0xvYWRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVBY3Rpb24oYWN0aW9uOiBBWFBXaWRnZXRDb3JlRWxlbWVudEFjdGlvbikge1xuICAgIGNvbnN0IGNtZCA9IGFjdGlvbi5jb21tYW5kO1xuXG4gICAgaWYgKGNtZCAhPT0gJ2NhbmNlbCcpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCB0aGlzLmxheW91dFJlbmRlcmVyKCk/LnZhbGlkYXRlKCk7XG4gICAgICBpZiAoIWlzVmFsaWQ/LnJlc3VsdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjbWQgPT09ICdzdHJpbmcnICYmIGNtZC5zdGFydHNXaXRoKCd3aWRnZXQ6JykpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VXaWRnZXRDb21tYW5kKGNtZCk7XG4gICAgICBpZiAocGFyc2VkLndpZGdldE5hbWUgJiYgcGFyc2VkLmFjdGlvbikge1xuICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVXaWRnZXRBcGkocGFyc2VkLndpZGdldE5hbWUsIHBhcnNlZC5hY3Rpb24pO1xuICAgICAgICBhd2FpdCB0aGlzLmFnZ3JlZ2F0ZUFuZEV2YWx1YXRlQWN0aW9ucygpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IHRyZWF0IGFzIHJlZ3VsYXIgZGlhbG9nIGFjdGlvbiAoY2FuY2VsL2NvbmZpcm0vY3VzdG9tKVxuICAgIGNvbnN0IHJlc3VsdDogRGlhbG9nUmVuZGVyZXJSZXN1bHQgPSB7IGNvbnRleHQ6IHRoaXMuY29udGV4dCgpLCBhY3Rpb246IGNtZCB9O1xuICAgIHRoaXMuZGlhbG9nUmVzdWx0ID0gcmVzdWx0O1xuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YS5jb250ZXh0ID0gcmVzdWx0LmNvbnRleHQ7XG4gICAgICB0aGlzLmRhdGEuYWN0aW9uID0gcmVzdWx0LmFjdGlvbjtcbiAgICB9XG4gICAgdGhpcy5jYWxsQmFjayh7XG4gICAgICBjbG9zZTogKHJlc3VsdD86IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKHJlc3VsdCk7XG4gICAgICB9LFxuICAgICAgY29udGV4dDogKCkgPT4gdGhpcy5jb250ZXh0KCksXG4gICAgICBhY3Rpb246ICgpID0+IHJlc3VsdC5hY3Rpb24sXG4gICAgICBzZXRMb2FkaW5nOiAobG9hZGluZzogYm9vbGVhbikgPT4ge1xuICAgICAgICB0aGlzLmlzRGlhbG9nTG9hZGluZy5zZXQobG9hZGluZyk7XG4gICAgICB9LFxuICAgIH0gYXMgQVhQRGlhbG9nUmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VXaWRnZXRDb21tYW5kKGNtZDogc3RyaW5nKTogeyB3aWRnZXROYW1lPzogc3RyaW5nOyBhY3Rpb24/OiBzdHJpbmcgfSB7XG4gICAgLy8gRXhwZWN0ZWQgJ3dpZGdldDo8d2lkZ2V0TmFtZT4uPGFjdGlvbj4nXG4gICAgaWYgKCFjbWQ/LnN0YXJ0c1dpdGgoJ3dpZGdldDonKSkgcmV0dXJuIHt9O1xuICAgIGNvbnN0IHJlc3QgPSBjbWQuc2xpY2UoJ3dpZGdldDonLmxlbmd0aCk7XG4gICAgY29uc3QgZG90ID0gcmVzdC5sYXN0SW5kZXhPZignLicpO1xuICAgIGlmIChkb3QgPD0gMCkgcmV0dXJuIHt9O1xuICAgIHJldHVybiB7IHdpZGdldE5hbWU6IHJlc3Quc2xpY2UoMCwgZG90KSwgYWN0aW9uOiByZXN0LnNsaWNlKGRvdCArIDEpIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWN1dGVXaWRnZXRBcGkod2lkZ2V0TmFtZTogc3RyaW5nLCBhcGlNZXRob2Q6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy53aWRnZXRDb3JlU2VydmljZSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB3aWRnZXQgPSB0aGlzLndpZGdldENvcmVTZXJ2aWNlLmdldFdpZGdldCh3aWRnZXROYW1lKSBhcyBhbnk7XG4gICAgICBjb25zdCBhcGkgPSB3aWRnZXQ/LmFwaT8uKCk7XG4gICAgICBjb25zdCBmbiA9IGFwaT8uW2FwaU1ldGhvZF07XG4gICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICBmbih7XG4gICAgICAgICAgICBjbG9zZTogKHJlc3VsdD86IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNsb3NlKHJlc3VsdCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udGV4dDogKCkgPT4gdGhpcy5jb250ZXh0KCksXG4gICAgICAgICAgICBzZXRMb2FkaW5nOiAobG9hZGluZzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmlzRGlhbG9nTG9hZGluZy5zZXQobG9hZGluZyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0gYXMgQVhQRGlhbG9nUmVmKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHt9XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBjbG9zZShyZXN1bHQ/OiBEaWFsb2dSZW5kZXJlclJlc3VsdCkge1xuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBhd2FpdCB0aGlzLmxheW91dFJlbmRlcmVyKCk/LnZhbGlkYXRlKCk7XG4gICAgICBpZiAoaXNWYWxpZD8ucmVzdWx0KSB7XG4gICAgICAgIHRoaXMucmVzdWx0LmVtaXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlci5jbG9zZShyZXN1bHQpO1xuICB9XG5cbiAgLy8gLS0tIEFjdGlvbnMgYWdncmVnYXRpb24gJiBldmFsdWF0aW9uIC0tLVxuICBwcml2YXRlIGFzeW5jIGFnZ3JlZ2F0ZUFuZEV2YWx1YXRlQWN0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB3aWRnZXRBY3Rpb25zID0gYXdhaXQgdGhpcy5jb2xsZWN0V2lkZ2V0QWN0aW9ucygpO1xuICAgIGNvbnN0IGRpYWxvZ0FjdGlvbnMgPSB0aGlzLmNvbGxlY3REaWFsb2dBY3Rpb25zRnJvbUNvbmZpZygpO1xuICAgIGNvbnN0IGFsbCA9IFsuLi53aWRnZXRBY3Rpb25zLCAuLi5kaWFsb2dBY3Rpb25zXTtcbiAgICBjb25zdCBldmFsdWF0ZWQgPSBhd2FpdCB0aGlzLmV2YWx1YXRlUHJlZGljYXRlcyhhbGwpO1xuICAgIGNvbnN0IHZpc2libGUgPSBldmFsdWF0ZWQuZmlsdGVyKChhKSA9PiBhLmhpZGRlbiAhPT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcmVmaXggPSB2aXNpYmxlLmZpbHRlcigoYSkgPT4gKGEuem9uZSA/PyAnZm9vdGVyJykgPT09ICdmb290ZXInICYmIChhLnBsYWNlbWVudCA/PyAnc3VmZml4JykgPT09ICdwcmVmaXgnKTtcbiAgICBjb25zdCBzdWZmaXggPSB2aXNpYmxlLmZpbHRlcigoYSkgPT4gKGEuem9uZSA/PyAnZm9vdGVyJykgPT09ICdmb290ZXInICYmIChhLnBsYWNlbWVudCA/PyAnc3VmZml4JykgPT09ICdzdWZmaXgnKTtcblxuICAgIHRoaXMuZm9vdGVyUHJlZml4LnNldChwcmVmaXgpO1xuICAgIHRoaXMuZm9vdGVyU3VmZml4LnNldChzdWZmaXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb2xsZWN0V2lkZ2V0QWN0aW9ucygpOiBQcm9taXNlPEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uW10+IHtcbiAgICBpZiAoIXRoaXMud2lkZ2V0Q29yZVNlcnZpY2UpIHJldHVybiBbXTtcbiAgICBjb25zdCBuYW1lcyA9IHRoaXMud2lkZ2V0Q29yZVNlcnZpY2UubGlzdFJlZ2lzdGVyZWRXaWRnZXROYW1lcygpO1xuICAgIGNvbnN0IGFjdGlvbnM6IEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHdpZGdldCA9IHRoaXMud2lkZ2V0Q29yZVNlcnZpY2UuZ2V0V2lkZ2V0KG5hbWUpIGFzIGFueTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0QWN0czogQVhQV2lkZ2V0Q29yZUVsZW1lbnRBY3Rpb25bXSA9IHdpZGdldD8uYWN0aW9ucz8uKCkgPz8gW107XG4gICAgICAgIGFjdGlvbnMucHVzaCguLi53aWRnZXRBY3RzKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3REaWFsb2dBY3Rpb25zRnJvbUNvbmZpZygpOiBBWFBXaWRnZXRDb3JlRWxlbWVudEFjdGlvbltdIHtcbiAgICBjb25zdCBmb290ZXIgPSB0aGlzLmNvbmZpZz8uYWN0aW9ucz8uZm9vdGVyO1xuICAgIGNvbnN0IG1hcE9uZSA9IChhOiBhbnksIHBsYWNlbWVudDogJ3ByZWZpeCcgfCAnc3VmZml4Jyk6IEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uID0+ICh7XG4gICAgICB0aXRsZTogYS50aXRsZSxcbiAgICAgIGNvbW1hbmQ6IHR5cGVvZiBhLmNvbW1hbmQgPT09ICdzdHJpbmcnID8gYS5jb21tYW5kIDogYS5jb21tYW5kPy5uYW1lLFxuICAgICAgaWNvbjogYS5pY29uLFxuICAgICAgY29sb3I6IGEuY29sb3IsXG4gICAgICBkaXNhYmxlZDogYS5kaXNhYmxlZCxcbiAgICAgIGhpZGRlbjogYS5oaWRkZW4sXG4gICAgICB6b25lOiAnZm9vdGVyJyxcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIHNjb3BlOiBhLnNjb3BlLFxuICAgIH0pO1xuICAgIGNvbnN0IHByZWZpeCA9IChmb290ZXI/LnByZWZpeCB8fCBbXSkubWFwKChhKSA9PiBtYXBPbmUoYSwgJ3ByZWZpeCcpKTtcbiAgICBjb25zdCBzdWZmaXggPSAoZm9vdGVyPy5zdWZmaXggfHwgW10pLm1hcCgoYSkgPT4gbWFwT25lKGEsICdzdWZmaXgnKSk7XG4gICAgcmV0dXJuIFsuLi5wcmVmaXgsIC4uLnN1ZmZpeF07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV2YWx1YXRlUHJlZGljYXRlcyhhY3Rpb25zOiBBWFBXaWRnZXRDb3JlRWxlbWVudEFjdGlvbltdKTogUHJvbWlzZTxBWFBXaWRnZXRDb3JlRWxlbWVudEFjdGlvbltdPiB7XG4gICAgY29uc3Qgb3V0OiBBWFBXaWRnZXRDb3JlRWxlbWVudEFjdGlvbltdID0gW107XG4gICAgZm9yIChjb25zdCBhIG9mIGFjdGlvbnMpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHR5cGVvZiBhLmNvbW1hbmQgPT09ICdzdHJpbmcnID8gdGhpcy5wYXJzZVdpZGdldENvbW1hbmQoYS5jb21tYW5kKSA6IHt9O1xuICAgICAgY29uc3QgYXBpID0gcGFyc2VkLndpZGdldE5hbWUgPyBhd2FpdCB0aGlzLnJlc29sdmVBcGkocGFyc2VkLndpZGdldE5hbWUpIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3Qgc2NvcGUgPSB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgd2lkZ2V0OiB7IG5hbWU6IHBhcnNlZC53aWRnZXROYW1lIH0sXG4gICAgICAgIGRpYWxvZzogeyBjb250ZXh0OiB0aGlzLmNvbnRleHQoKSB9LFxuICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQoKSxcbiAgICAgIH0gYXMgYW55O1xuICAgICAgY29uc3QgZGlzYWJsZWQgPSBhd2FpdCB0aGlzLmV2YWxCb29sKGEuZGlzYWJsZWQsIHNjb3BlKTtcbiAgICAgIGNvbnN0IGhpZGRlbiA9IGF3YWl0IHRoaXMuZXZhbEJvb2woYS5oaWRkZW4sIHNjb3BlKTtcbiAgICAgIG91dC5wdXNoKHsgLi4uYSwgZGlzYWJsZWQsIGhpZGRlbiB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXZhbEJvb2wodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCB1bmRlZmluZWQsIHNjb3BlOiBhbnkpOiBQcm9taXNlPGJvb2xlYW4gfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiB2YWx1ZTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leHByZXNzaW9uRXZhbHVhdG9yLmV2YWx1YXRlKHZhbHVlLCBzY29wZSk7XG4gICAgICAgIHJldHVybiAhIXJlc3VsdDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZUFwaSh3aWRnZXROYW1lOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLndpZGdldENvcmVTZXJ2aWNlPy53YWl0Rm9yV2lkZ2V0KHdpZGdldE5hbWUsIDIwMDApO1xuICAgICAgY29uc3Qgd2lkZ2V0ID0gdGhpcy53aWRnZXRDb3JlU2VydmljZT8uZ2V0V2lkZ2V0KHdpZGdldE5hbWUpIGFzIGFueTtcbiAgICAgIHJldHVybiB3aWRnZXQ/LmFwaT8uKCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIl19","/**\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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"}
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.4\", ngImport: i0, type: AXPLayoutBuilderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPLayoutBuilderService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", 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 if (!this.popupService) {\n throw new Error('LayoutBuilder requires AXPopupService to create dialogs. Please inject it in the service constructor.');\n }\n const container = new DialogContainerBuilder(this.popupService);\n if (delegate) {\n delegate(container);\n }\n return container;\n }\n stepWizard(delegate) {\n const wizard = new StepWizardBuilder();\n wizard.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(wizard);\n }\n this.root.children.push(wizard.build());\n return this;\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 // IMPORTANT: Apply inheritance context BEFORE setting options\n // This ensures that inherited properties (readonly, disabled, etc.) are applied first\n // Then user-provided options will override them if explicitly set\n child.withInheritanceContext(this.inheritanceContext);\n child.options(cleanOptions);\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 // Map layout intent to grid item sizing so containers like `form-field`\n // can span multiple columns inside grid/fieldset layouts.\n if (!this.containerState.options)\n this.containerState.options = {};\n if (typeof value === 'number') {\n // Direct numeric shorthand → colSpan\n this.containerState.options.colSpan = value;\n }\n else if (value) {\n // Try to extract a reasonable colSpan from breakpoint positions\n const positions = value.positions;\n if (positions) {\n const colSpan = positions?.lg?.colSpan ??\n positions?.xl?.colSpan ??\n positions?.xxl?.colSpan ??\n positions?.md?.colSpan ??\n positions?.sm?.colSpan;\n if (colSpan != null) {\n this.containerState.options.colSpan = colSpan;\n }\n }\n }\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 stepWizard(delegate) {\n const wizard = new StepWizardBuilder();\n wizard.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(wizard);\n }\n this.ensureChildren();\n this.containerState.children.push(wizard.build());\n return this;\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.withInheritanceContext(this.inheritanceContext);\n child.options(cleanOptions);\n // IMPORTANT: Store the widget builder, don't build it yet!\n // This allows properties set after this method (like disabled, readonly) to be applied\n this.childWidget = child;\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 // Override property setters to propagate changes to child widget\n disabled(condition) {\n super.disabled(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n readonly(condition) {\n super.readonly(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n visible(condition) {\n super.visible(condition);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n direction(direction) {\n super.direction(direction);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n mode(mode) {\n super.mode(mode);\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n // Override withInheritanceContext to pass it to the child widget if it exists\n withInheritanceContext(context) {\n // Call parent implementation first\n super.withInheritanceContext(context);\n // If we have a child widget, update its inheritance context too\n if (this.childWidget) {\n this.childWidget.withInheritanceContext(this.inheritanceContext);\n }\n return this;\n }\n // Override build() to build the child widget at the last moment\n build() {\n // Build the child widget and add it to children before building the form field\n if (this.childWidget) {\n this.ensureChildren();\n this.containerState.children.push(this.childWidget.build());\n }\n // Call parent build\n return super.build();\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 addCustomAction(action) {\n // Add to actions based on position\n const position = action.position || 'suffix';\n if (position === 'prefix') {\n if (!this.dialogState.actions.footer.prefix) {\n this.dialogState.actions.footer.prefix = [];\n }\n this.dialogState.actions.footer.prefix.push(action);\n }\n else {\n if (!this.dialogState.actions.footer.suffix) {\n this.dialogState.actions.footer.suffix = [];\n }\n this.dialogState.actions.footer.suffix.push(action);\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 // Merge options instead of replacing to preserve inherited properties\n this.widgetState.options = { ...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 // Always apply inherited properties (remove the conditions that check if already set)\n // This allows properties to be updated when inheritance context changes\n if (resolved.mode) {\n this.widgetState.mode = resolved.mode;\n }\n if (!this.widgetState.options)\n this.widgetState.options = {};\n if (resolved.disabled !== undefined) {\n this.widgetState.options['disabled'] = resolved.disabled;\n }\n if (resolved.readonly !== undefined) {\n this.widgetState.options['readonly'] = resolved.readonly;\n }\n if (resolved.direction !== undefined) {\n this.widgetState.options['direction'] = resolved.direction;\n }\n if (resolved.visible !== undefined) {\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//#endregion\n//#region ---- Step Wizard Builder Implementation ----\n/**\n * Step Builder - Builds individual steps for step wizard\n */\nclass StepBuilder {\n constructor(id, title) {\n this.id = id;\n this.title = title;\n this.skippable = false;\n this.inheritanceContext = {};\n }\n setIcon(icon) {\n this.icon = icon;\n return this;\n }\n setDescription(description) {\n this.description = description;\n return this;\n }\n setSkippable(skippable) {\n this.skippable = skippable;\n return this;\n }\n content(delegate) {\n if (delegate) {\n // Create LayoutBuilder in injection context (will be called from component)\n const layoutBuilder = new LayoutBuilder();\n // ✅ IMPORTANT: Propagate inheritance context to content\n layoutBuilder.inheritanceContext = { ...this.inheritanceContext };\n delegate(layoutBuilder);\n this.contentNode = layoutBuilder.build();\n }\n return this;\n }\n withInheritanceContext(context) {\n this.inheritanceContext = mergeInheritanceContext(context);\n return this;\n }\n build() {\n if (!this.contentNode) {\n throw new Error(`Step '${this.id}' must have content`);\n }\n return {\n id: this.id,\n title: this.title,\n icon: this.icon,\n description: this.description,\n skippable: this.skippable,\n content: this.contentNode,\n };\n }\n}\n/**\n * Step Wizard Builder - Builds step wizard widget\n */\nclass StepWizardBuilder extends LayoutContainerMixin {\n constructor() {\n super('step-wizard');\n this.steps = [];\n this.linear = true;\n this.wizardDirection = 'horizontal';\n }\n setLinear(linear) {\n this.linear = linear;\n return this;\n }\n setDirection(direction) {\n this.wizardDirection = direction;\n return this;\n }\n setLook(look) {\n this.look = look;\n return this;\n }\n setShowActions(show) {\n this.showActions = show;\n return this;\n }\n setActions(actions) {\n this.wizardActions = actions;\n return this;\n }\n setGuards(guards) {\n this.guards = guards;\n return this;\n }\n setEvents(events) {\n this.events = events;\n return this;\n }\n step(id, title, delegate) {\n const stepBuilder = new StepBuilder(id, title);\n // ✅ IMPORTANT: Propagate inheritance context to step\n stepBuilder.withInheritanceContext(this.inheritanceContext);\n if (delegate) {\n delegate(stepBuilder);\n }\n this.steps.push(stepBuilder.build());\n return this;\n }\n build() {\n // ✅ Validation\n if (this.steps.length === 0) {\n throw new Error('StepWizard must have at least one step');\n }\n // ✅ Check duplicate IDs\n const ids = this.steps.map((s) => s.id);\n const duplicates = ids.filter((id, index) => ids.indexOf(id) !== index);\n if (duplicates.length > 0) {\n throw new Error(`Duplicate step IDs found: ${duplicates.join(', ')}`);\n }\n const definition = {\n steps: this.steps,\n linear: this.linear,\n direction: this.wizardDirection,\n look: this.look,\n // Do not auto-detect based on dialog context; keep explicit or undefined\n showActions: this.showActions,\n actions: this.wizardActions,\n guards: this.guards,\n events: this.events,\n };\n const node = {\n name: this.containerState.name,\n type: 'step-wizard',\n options: { definition },\n mode: this.containerState.mode,\n };\n return node;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9sYXlvdXQtYnVpbGRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUkxRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFrRG5ELDZDQUE2QztBQUU3Qzs7R0FFRztBQUNILFNBQVMsMEJBQTBCLENBQ2pDLE9BQTJCLEVBQzNCLGNBQTJDLEVBQUU7SUFFN0MsT0FBTztRQUNMLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksTUFBTTtRQUNoRCxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUTtRQUNsRCxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUTtRQUNsRCxTQUFTLEVBQUUsV0FBVyxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUztRQUNyRCxPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTztLQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FDOUIsYUFBaUMsRUFDakMsaUJBQThDLEVBQUU7SUFFaEQsT0FBTztRQUNMLEdBQUcsYUFBYTtRQUNoQixHQUFHLGNBQWM7S0FDbEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsZ0JBQWdCO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FB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VSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1FBQ3hFLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQTRCO1lBQzFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQy9CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNmLHlFQUF5RTtZQUN6RSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQzNCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFrQjtZQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJO1lBQzlCLElBQUksRUFBRSxhQUFhO1lBQ25CLE9BQU8sRUFBRSxFQUFFLFVBQVUsRUFBRTtZQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJO1NBQy9CLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUG9wdXBTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcHVwJztcbmltcG9ydCB7IEFYUEFjdGlvbk1lbnVJdGVtLCBBWFBHcmlkTGF5b3V0T3B0aW9ucyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5cbmltcG9ydCB7IEFYUFdpZGdldE5vZGUsIEFYUFdpZGdldFJlbmRlck1vZGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFYUERpYWxvZ0NvbnRhaW5lck9wdGlvbnMsXG4gIEFYUERpYWxvZ1JlZixcbiAgQVhQRmllbGRzZXRDb250YWluZXJPcHRpb25zLFxuICBBWFBGbGV4Q29udGFpbmVyT3B0aW9ucyxcbiAgQVhQRm9ybUZpZWxkT3B0aW9ucyxcbiAgLy8gQ29udGFpbmVyIG9wdGlvbnNcbiAgQVhQR3JpZENvbnRhaW5lck9wdGlvbnMsXG4gIEFYUExpc3RXaWRnZXRPcHRpb25zLFxuICBBWFBQYWdlQ29udGFpbmVyT3B0aW9ucyxcbiAgQVhQUGFuZWxDb250YWluZXJPcHRpb25zLFxuICBBWFBTdGVwRGVmaW5pdGlvbixcbiAgQVhQU3RlcFdpemFyZERlZmluaXRpb24sXG4gIEFYUFN0ZXBXaXphcmRHdWFyZFBheWxvYWQsXG4gIEFYUFN0ZXBXaXphcmRTdGF0dXMsXG4gIEFYUFRhYnNldENvbnRhaW5lck9wdGlvbnMsXG4gIEFYUFdpemFyZEFjdGlvbnMsXG4gIENvbG9yQm94T3B0aW9ucyxcbiAgRGF0ZVRpbWVCb3hPcHRpb25zLFxuICBEaWFsb2dCdWlsZGVyU3RhdGUsXG4gIElBY3Rpb25CdWlsZGVyLFxuICBJRGlhbG9nQnVpbGRlcixcbiAgSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcixcbiAgSUZsZXhDb250YWluZXJCdWlsZGVyLFxuICBJRm9ybUZpZWxkQnVpbGRlcixcbiAgSUdyaWRDb250YWluZXJCdWlsZGVyLFxuICBJTGF5b3V0QnVpbGRlcixcbiAgSUxpc3RXaWRnZXRCdWlsZGVyLFxuICBJUGFnZUNvbnRhaW5lckJ1aWxkZXIsXG4gIElQYW5lbENvbnRhaW5lckJ1aWxkZXIsXG4gIElTdGVwV2l6YXJkQnVpbGRlcixcbiAgSVRhYnNldENvbnRhaW5lckJ1aWxkZXIsXG4gIElXaWRnZXRCdWlsZGVyLFxuICAvLyBJbmhlcml0YW5jZSBjb250ZXh0XG4gIEluaGVyaXRhbmNlQ29udGV4dCxcbiAgSW5oZXJpdGVkUHJvcGVydGllcyxcbiAgTGFyZ2VUZXh0Qm94T3B0aW9ucyxcbiAgTGF5b3V0QnVpbGRlclN0YXRlLFxuICBMb29rdXBCb3hPcHRpb25zLFxuICBOdW1iZXJCb3hPcHRpb25zLFxuICBQYXNzd29yZEJveE9wdGlvbnMsXG4gIFJpY2hUZXh0T3B0aW9ucyxcbiAgU2VsZWN0Qm94T3B0aW9ucyxcbiAgU2VsZWN0aW9uTGlzdE9wdGlvbnMsXG4gIFRleHRCb3hPcHRpb25zLFxuICBUb2dnbGVTd2l0Y2hPcHRpb25zLFxuICBXaWRnZXRCdWlsZGVyU3RhdGUsXG59IGZyb20gJy4vbGF5b3V0LWJ1aWxkZXIudHlwZXMnO1xuXG4vLyNyZWdpb24gLS0tLSAgIEluaGVyaXRhbmNlIFV0aWxpdGllcyAgIC0tLS1cblxuLyoqXG4gKiBSZXNvbHZlcyBpbmhlcml0ZWQgcHJvcGVydGllcyBmcm9tIGNvbnRleHQgYW5kIGxvY2FsIHZhbHVlc1xuICovXG5mdW5jdGlvbiByZXNvbHZlSW5oZXJpdGVkUHJvcGVydGllcyhcbiAgY29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0LFxuICBsb2NhbFZhbHVlczogUGFydGlhbDxJbmhlcml0YW5jZUNvbnRleHQ+ID0ge30sXG4pOiBJbmhlcml0ZWRQcm9wZXJ0aWVzIHtcbiAgcmV0dXJuIHtcbiAgICBtb2RlOiBsb2NhbFZhbHVlcy5tb2RlID8/IGNvbnRleHQubW9kZSA/PyAnZWRpdCcsXG4gICAgZGlzYWJsZWQ6IGxvY2FsVmFsdWVzLmRpc2FibGVkID8/IGNvbnRleHQuZGlzYWJsZWQsXG4gICAgcmVhZG9ubHk6IGxvY2FsVmFsdWVzLnJlYWRvbmx5ID8/IGNvbnRleHQucmVhZG9ubHksXG4gICAgZGlyZWN0aW9uOiBsb2NhbFZhbHVlcy5kaXJlY3Rpb24gPz8gY29udGV4dC5kaXJlY3Rpb24sXG4gICAgdmlzaWJsZTogbG9jYWxWYWx1ZXMudmlzaWJsZSA/PyBjb250ZXh0LnZpc2libGUsXG4gIH07XG59XG5cbi8qKlxuICogTWVyZ2VzIGluaGVyaXRhbmNlIGNvbnRleHQgd2l0aCBsb2NhbCBvdmVycmlkZXNcbiAqL1xuZnVuY3Rpb24gbWVyZ2VJbmhlcml0YW5jZUNvbnRleHQoXG4gIHBhcmVudENvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCxcbiAgbG9jYWxPdmVycmlkZXM6IFBhcnRpYWw8SW5oZXJpdGFuY2VDb250ZXh0PiA9IHt9LFxuKTogSW5oZXJpdGFuY2VDb250ZXh0IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5wYXJlbnRDb250ZXh0LFxuICAgIC4uLmxvY2FsT3ZlcnJpZGVzLFxuICB9O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJhbmRvbSBzdHJpbmcgZm9yIHBhdGgvbmFtZSBnZW5lcmF0aW9uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tSWQoKTogc3RyaW5nIHtcbiAgcmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSkgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGxhYmVsIHRvIGEgdmFsaWQgcGF0aC9uYW1lXG4gKi9cbmZ1bmN0aW9uIGxhYmVsVG9QYXRoKGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbGFiZWxcbiAgICAudG9Mb3dlckNhc2UoKVxuICAgIC5yZXBsYWNlKC9bXmEtejAtOVxcc10vZywgJycpIC8vIFJlbW92ZSBzcGVjaWFsIGNoYXJhY3RlcnNcbiAgICAucmVwbGFjZSgvXFxzKy9nLCAnXycpIC8vIFJlcGxhY2Ugc3BhY2VzIHdpdGggdW5kZXJzY29yZXNcbiAgICAuc3Vic3RyaW5nKDAsIDUwKTsgLy8gTGltaXQgbGVuZ3RoXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHBhdGggZm9yIHZhbHVlIHdpZGdldHMgYmFzZWQgb24gaGllcmFyY2h5XG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlVmFsdWVXaWRnZXRQYXRoKHdpZGdldE5hbWU/OiBzdHJpbmcsIGZvcm1GaWVsZE5hbWU/OiBzdHJpbmcsIGZvcm1GaWVsZExhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gUHJpb3JpdHk6IHdpZGdldCBuYW1lIC0+IGZvcm0gZmllbGQgbmFtZSAtPiBnZW5lcmF0ZWQgZnJvbSBsYWJlbCAtPiByYW5kb21cbiAgaWYgKHdpZGdldE5hbWUpIHtcbiAgICByZXR1cm4gd2lkZ2V0TmFtZTtcbiAgfVxuXG4gIGlmIChmb3JtRmllbGROYW1lKSB7XG4gICAgcmV0dXJuIGZvcm1GaWVsZE5hbWU7XG4gIH1cblxuICBpZiAoZm9ybUZpZWxkTGFiZWwpIHtcbiAgICByZXR1cm4gbGFiZWxUb1BhdGgoZm9ybUZpZWxkTGFiZWwpO1xuICB9XG5cbiAgcmV0dXJuIGdlbmVyYXRlUmFuZG9tSWQoKTtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgU2VydmljZSBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUExheW91dEJ1aWxkZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBwb3B1cFNlcnZpY2UgPSBpbmplY3QoQVhQb3B1cFNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbGF5b3V0IGJ1aWxkZXJcbiAgICovXG4gIGNyZWF0ZSgpOiBJTGF5b3V0QnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBMYXlvdXRCdWlsZGVyKHRoaXMucG9wdXBTZXJ2aWNlKTtcbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBMYXlvdXQgQnVpbGRlciBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuLyoqXG4gKiBNYWluIGxheW91dCBidWlsZGVyIC0gU2luZ2xlIFJlc3BvbnNpYmlsaXR5OiBMYXlvdXQgb3JjaGVzdHJhdGlvblxuICogT3Blbi9DbG9zZWQ6IEV4dGVuc2libGUgdGhyb3VnaCBjb250YWluZXIgZGVsZWdhdGVzXG4gKi9cbmNsYXNzIExheW91dEJ1aWxkZXIgaW1wbGVtZW50cyBJTGF5b3V0QnVpbGRlciB7XG4gIHByaXZhdGUgcm9vdDogQVhQV2lkZ2V0Tm9kZSA9IHtcbiAgICBjaGlsZHJlbjogW10sXG4gICAgbW9kZTogJ2VkaXQnLFxuICAgIHR5cGU6ICdmbGV4LWxheW91dCcsXG4gIH07XG5cbiAgcHJpdmF0ZSBpbmhlcml0YW5jZUNvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCA9IHtcbiAgICBtb2RlOiAnZWRpdCcsXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwb3B1cFNlcnZpY2U/OiBBWFBvcHVwU2VydmljZSkge31cblxuICAvLyBQcmVkZWZpbmVkIGxheW91dCBjb250YWluZXJzIGF0IHJvb3QgbGV2ZWwgLSBkZWxlZ2F0ZSBwYXR0ZXJuIHJlcXVpcmVkXG4gIGdyaWQoZGVsZWdhdGU6IChjb250YWluZXI6IElHcmlkQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgR3JpZENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICAvL3RoaXMuc3RhdGUuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHRoaXMucm9vdCA9IGNvbnRhaW5lci5idWlsZCgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZmxleChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSUZsZXhDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXIge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBGbGV4Q29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMucm9vdC5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwYW5lbChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSVBhbmVsQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgUGFuZWxDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5yb290LmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhZ2UoZGVsZWdhdGU6IChjb250YWluZXI6IElQYWdlQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgUGFnZUNvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLnJvb3QuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgdGFic2V0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgVGFic2V0Q29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMucm9vdC5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmaWVsZHNldChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRmllbGRzZXRDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5yb290LmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpYWxvZyhkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSURpYWxvZ0J1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLnBvcHVwU2VydmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTGF5b3V0QnVpbGRlciByZXF1aXJlcyBBWFBvcHVwU2VydmljZSB0byBjcmVhdGUgZGlhbG9ncy4gUGxlYXNlIGluamVjdCBpdCBpbiB0aGUgc2VydmljZSBjb25zdHJ1Y3Rvci4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IERpYWxvZ0NvbnRhaW5lckJ1aWxkZXIodGhpcy5wb3B1cFNlcnZpY2UpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgfVxuXG4gIHN0ZXBXaXphcmQoZGVsZWdhdGU6ICh3aXphcmQ6IElTdGVwV2l6YXJkQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCB3aXphcmQgPSBuZXcgU3RlcFdpemFyZEJ1aWxkZXIoKTtcbiAgICB3aXphcmQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZSh3aXphcmQpO1xuICAgIH1cbiAgICB0aGlzLnJvb3QuY2hpbGRyZW4hLnB1c2god2l6YXJkLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZm9ybUZpZWxkKGxhYmVsOiBzdHJpbmcsIGRlbGVnYXRlPzogKGZpZWxkOiBJRm9ybUZpZWxkQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyIHtcbiAgICBjb25zdCBmaWVsZCA9IG5ldyBGb3JtRmllbGRCdWlsZGVyKGxhYmVsKTtcbiAgICBmaWVsZC53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGZpZWxkKTtcbiAgICB9XG4gICAgdGhpcy5yb290LmNoaWxkcmVuIS5wdXNoKGZpZWxkLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYnVpbGQoKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHRoaXMucm9vdC50eXBlLFxuICAgICAgY2hpbGRyZW46IHRoaXMucm9vdC5jaGlsZHJlbixcbiAgICAgIG1vZGU6IHRoaXMucm9vdC5tb2RlLFxuICAgIH07XG4gIH1cbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgQ29udGFpbmVyIEJ1aWxkZXIgSW1wbGVtZW50YXRpb24gICAtLS0tXG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjb250YWluZXIgYnVpbGRlciAtIE9wZW4vQ2xvc2VkIFByaW5jaXBsZVxuICogUHJvdmlkZXMgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCBjb250YWluZXIgdHlwZXNcbiAqL1xuYWJzdHJhY3QgY2xhc3MgQmFzZUNvbnRhaW5lckJ1aWxkZXIge1xuICBwcm90ZWN0ZWQgY29udGFpbmVyU3RhdGU6IExheW91dEJ1aWxkZXJTdGF0ZSA9IHtcbiAgICBtb2RlOiAnZWRpdCcsXG4gICAgdHlwZTogJ2ZsZXgtbGF5b3V0JyxcbiAgICBjaGlsZHJlbjogW10sXG4gIH07XG5cbiAgcHJvdGVjdGVkIGluaGVyaXRhbmNlQ29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0ID0ge307XG5cbiAgY29uc3RydWN0b3IoY29udGFpbmVyVHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS50eXBlID0gY29udGFpbmVyVHlwZTtcbiAgfVxuXG4gIC8vIEJhc2UgbWV0aG9kcyBzaGFyZWQgYnkgYWxsIGNvbnRhaW5lcnNcbiAgcHJvdGVjdGVkIGVuc3VyZUNoaWxkcmVuKCk6IHZvaWQge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4gPSB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIHx8IFtdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZFdpZGdldDxUPih0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBUKTogdGhpcyB7XG4gICAgY29uc3QgY2hpbGQgPSBuZXcgV2lkZ2V0QnVpbGRlcigpO1xuICAgIGNoaWxkLnR5cGUodHlwZSk7XG5cbiAgICAvLyBGb3IgdmFsdWUgd2lkZ2V0cywgZW5zdXJlIHBhdGggaXMgcHJvdmlkZWRcbiAgICBjb25zdCB3aWRnZXRPcHRpb25zID0gb3B0aW9ucyA/PyB7fTtcbiAgICBjb25zdCBwYXRoID0gKHdpZGdldE9wdGlvbnMgYXMgYW55KS5wYXRoO1xuICAgIGNvbnN0IG5hbWUgPSAod2lkZ2V0T3B0aW9ucyBhcyBhbnkpLm5hbWU7XG5cbiAgICBpZiAodGhpcy5pc1ZhbHVlV2lkZ2V0KHR5cGUpICYmICFwYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFZhbHVlIHdpZGdldCAnJHt0eXBlfScgcmVxdWlyZXMgYSAncGF0aCcgcHJvcGVydHlgKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgbmFtZSBhbmQgcGF0aCBpbiB3aWRnZXQgc3RhdGUsIG5vdCBvcHRpb25zXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGNoaWxkLm5hbWUobmFtZSk7XG4gICAgfVxuICAgIGlmIChwYXRoKSB7XG4gICAgICBjaGlsZC5wYXRoKHBhdGgpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBuYW1lIGFuZCBwYXRoIGZyb20gb3B0aW9uc1xuICAgIGNvbnN0IHsgbmFtZTogXywgcGF0aDogX18sIC4uLmNsZWFuT3B0aW9ucyB9ID0gd2lkZ2V0T3B0aW9ucyBhcyBhbnk7XG5cbiAgICAvLyBJTVBPUlRBTlQ6IEFwcGx5IGluaGVyaXRhbmNlIGNvbnRleHQgQkVGT1JFIHNldHRpbmcgb3B0aW9uc1xuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IGluaGVyaXRlZCBwcm9wZXJ0aWVzIChyZWFkb25seSwgZGlzYWJsZWQsIGV0Yy4pIGFyZSBhcHBsaWVkIGZpcnN0XG4gICAgLy8gVGhlbiB1c2VyLXByb3ZpZGVkIG9wdGlvbnMgd2lsbCBvdmVycmlkZSB0aGVtIGlmIGV4cGxpY2l0bHkgc2V0XG4gICAgY2hpbGQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgY2hpbGQub3B0aW9ucyhjbGVhbk9wdGlvbnMpO1xuXG4gICAgdGhpcy5lbnN1cmVDaGlsZHJlbigpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4hLnB1c2goY2hpbGQuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsdWVXaWRnZXQodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWVXaWRnZXRUeXBlcyA9IFtcbiAgICAgICd0ZXh0LWVkaXRvcicsXG4gICAgICAnbGFyZ2UtdGV4dC1lZGl0b3InLFxuICAgICAgJ3JpY2gtdGV4dC1lZGl0b3InLFxuICAgICAgJ3Bhc3N3b3JkLWVkaXRvcicsXG4gICAgICAnbnVtYmVyLWVkaXRvcicsXG4gICAgICAnc2VsZWN0LWVkaXRvcicsXG4gICAgICAnbG9va3VwLWVkaXRvcicsXG4gICAgICAnc2VsZWN0aW9uLWxpc3QtZWRpdG9yJyxcbiAgICAgICdkYXRlLXRpbWUtZWRpdG9yJyxcbiAgICAgICd0b2dnbGUtZWRpdG9yJyxcbiAgICAgICdjb2xvci1lZGl0b3InLFxuICAgIF07XG4gICAgcmV0dXJuIHZhbHVlV2lkZ2V0VHlwZXMuaW5jbHVkZXModHlwZSk7XG4gIH1cblxuICBidWlsZCgpOiBBWFBXaWRnZXROb2RlIHtcbiAgICBjb25zdCByZXN1bHQ6IEFYUFdpZGdldE5vZGUgPSB7XG4gICAgICB0eXBlOiB0aGlzLmNvbnRhaW5lclN0YXRlLnR5cGUsXG4gICAgICBjaGlsZHJlbjogdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbixcbiAgICAgIG9wdGlvbnM6IHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyxcbiAgICAgIG1vZGU6IHRoaXMuY29udGFpbmVyU3RhdGUubW9kZSxcbiAgICAgIHZpc2libGU6IHRoaXMuY29udGFpbmVyU3RhdGUudmlzaWJsZSxcbiAgICB9O1xuXG4gICAgLy8gQWRkIG5hbWUgd2l0aCBfZm9ybV9maWVsZCBzdWZmaXggZm9yIGZvcm0gZmllbGRzXG4gICAgaWYgKHRoaXMuY29udGFpbmVyU3RhdGUudHlwZSA9PT0gJ2Zvcm0tZmllbGQnKSB7XG4gICAgICBpZiAodGhpcy5jb250YWluZXJTdGF0ZS5uYW1lKSB7XG4gICAgICAgIHJlc3VsdC5uYW1lID0gdGhpcy5jb250YWluZXJTdGF0ZS5uYW1lO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnM/LlsnbGFiZWwnXSkge1xuICAgICAgICByZXN1bHQubmFtZSA9IGxhYmVsVG9QYXRoKHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9uc1snbGFiZWwnXSkgKyAnX2Zvcm1fZmllbGQnO1xuICAgICAgfVxuICAgICAgLy8gRm9ybSBmaWVsZHMgZG9uJ3QgaGF2ZSBwYXRoXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyIGNvbnRhaW5lcnMgY2FuIGhhdmUgbmFtZSBhbmQgcGF0aFxuICAgICAgaWYgKHRoaXMuY29udGFpbmVyU3RhdGUubmFtZSkge1xuICAgICAgICByZXN1bHQubmFtZSA9IHRoaXMuY29udGFpbmVyU3RhdGUubmFtZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lclN0YXRlLnBhdGgpIHtcbiAgICAgICAgcmVzdWx0LnBhdGggPSB0aGlzLmNvbnRhaW5lclN0YXRlLnBhdGg7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb250YWluZXJTdGF0ZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQuZGVmYXVsdFZhbHVlID0gdGhpcy5jb250YWluZXJTdGF0ZS5kZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY29udGFpbmVyIGJ1aWxkZXIgbWl4aW4gLSBJbnRlcmZhY2UgU2VncmVnYXRpb24gUHJpbmNpcGxlXG4gKiBQcm92aWRlcyBjb21tb24gY29udGFpbmVyIG9wZXJhdGlvbnNcbiAqL1xuYWJzdHJhY3QgY2xhc3MgQmFzZUNvbnRhaW5lck1peGluPFRDb250YWluZXI+IGV4dGVuZHMgQmFzZUNvbnRhaW5lckJ1aWxkZXIge1xuICBuYW1lKG5hbWU6IHN0cmluZyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUubmFtZSA9IG5hbWU7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG4gIHBhdGgocGF0aDogc3RyaW5nKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5wYXRoID0gcGF0aDtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBtb2RlKG1vZGU6IEFYUFdpZGdldFJlbmRlck1vZGUpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0Lm1vZGUgPSBtb2RlO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIHZpc2libGUoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogVENvbnRhaW5lciB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMpIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9uc1sndmlzaWJsZSddID0gY29uZGl0aW9uO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0LnZpc2libGUgPSBjb25kaXRpb247XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgZGlzYWJsZWQoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogVENvbnRhaW5lciB7XG4gICAgaWYgKCF0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMpIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9uc1snZGlzYWJsZWQnXSA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5kaXNhYmxlZCA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICByZWFkb25seShjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBUQ29udGFpbmVyIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucykgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zID0ge307XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zWydyZWFkb25seSddID0gY29uZGl0aW9uO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0LnJlYWRvbmx5ID0gY29uZGl0aW9uO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBUQ29udGFpbmVyIHtcbiAgICBpZiAoIXRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucykgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zID0ge307XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zWydkaXJlY3Rpb24nXSA9IGRpcmVjdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgLy8gSW5oZXJpdGFuY2UgY29udGV4dCBtZXRob2RzXG4gIHdpdGhJbmhlcml0YW5jZUNvbnRleHQoY29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0KTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5pbmhlcml0YW5jZUNvbnRleHQgPSBtZXJnZUluaGVyaXRhbmNlQ29udGV4dChjb250ZXh0KTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBnZXRJbmhlcml0YW5jZUNvbnRleHQoKTogSW5oZXJpdGFuY2VDb250ZXh0IHtcbiAgICByZXR1cm4geyAuLi50aGlzLmluaGVyaXRhbmNlQ29udGV4dCB9O1xuICB9XG59XG5cbi8qKlxuICogTGF5b3V0IGNvbnRhaW5lciBtaXhpbiAtIEludGVyZmFjZSBTZWdyZWdhdGlvbiBQcmluY2lwbGVcbiAqIFByb3ZpZGVzIGxheW91dC1zcGVjaWZpYyBvcGVyYXRpb25zXG4gKi9cbmFic3RyYWN0IGNsYXNzIExheW91dENvbnRhaW5lck1peGluPFRDb250YWluZXI+IGV4dGVuZHMgQmFzZUNvbnRhaW5lck1peGluPFRDb250YWluZXI+IHtcbiAgbGF5b3V0KHZhbHVlOiBQYXJ0aWFsPEFYUEdyaWRMYXlvdXRPcHRpb25zPiB8IG51bWJlcik6IFRDb250YWluZXIge1xuICAgIC8vIE1hcCBsYXlvdXQgaW50ZW50IHRvIGdyaWQgaXRlbSBzaXppbmcgc28gY29udGFpbmVycyBsaWtlIGBmb3JtLWZpZWxkYFxuICAgIC8vIGNhbiBzcGFuIG11bHRpcGxlIGNvbHVtbnMgaW5zaWRlIGdyaWQvZmllbGRzZXQgbGF5b3V0cy5cbiAgICBpZiAoIXRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucykgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zID0ge307XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gRGlyZWN0IG51bWVyaWMgc2hvcnRoYW5kIOKGkiBjb2xTcGFuXG4gICAgICAodGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zIGFzIGFueSkuY29sU3BhbiA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIC8vIFRyeSB0byBleHRyYWN0IGEgcmVhc29uYWJsZSBjb2xTcGFuIGZyb20gYnJlYWtwb2ludCBwb3NpdGlvbnNcbiAgICAgIGNvbnN0IHBvc2l0aW9ucyA9ICh2YWx1ZSBhcyBhbnkpLnBvc2l0aW9ucyBhcyBhbnk7XG4gICAgICBpZiAocG9zaXRpb25zKSB7XG4gICAgICAgIGNvbnN0IGNvbFNwYW4gPVxuICAgICAgICAgIHBvc2l0aW9ucz8ubGc/LmNvbFNwYW4gPz9cbiAgICAgICAgICBwb3NpdGlvbnM/LnhsPy5jb2xTcGFuID8/XG4gICAgICAgICAgcG9zaXRpb25zPy54eGw/LmNvbFNwYW4gPz9cbiAgICAgICAgICBwb3NpdGlvbnM/Lm1kPy5jb2xTcGFuID8/XG4gICAgICAgICAgcG9zaXRpb25zPy5zbT8uY29sU3BhbjtcbiAgICAgICAgaWYgKGNvbFNwYW4gIT0gbnVsbCkge1xuICAgICAgICAgICh0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMgYXMgYW55KS5jb2xTcGFuID0gY29sU3BhbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxufVxuXG4vKipcbiAqIENoaWxkIGNvbnRhaW5lciBtaXhpbiAtIEludGVyZmFjZSBTZWdyZWdhdGlvbiBQcmluY2lwbGVcbiAqIFByb3ZpZGVzIGNoaWxkIGNvbnRhaW5lciBtYW5hZ2VtZW50XG4gKi9cbmFic3RyYWN0IGNsYXNzIENoaWxkQ29udGFpbmVyTWl4aW48VENvbnRhaW5lcj4gZXh0ZW5kcyBMYXlvdXRDb250YWluZXJNaXhpbjxUQ29udGFpbmVyPiB7XG4gIGdyaWQoZGVsZWdhdGU6IChjb250YWluZXI6IElHcmlkQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXIge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBHcmlkQ29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBmbGV4KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJRmxleENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRmxleENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgcGFuZWwoZGVsZWdhdGU6IChjb250YWluZXI6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgUGFuZWxDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGlsZHJlbigpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIHBhZ2UoZGVsZWdhdGU6IChjb250YWluZXI6IElQYWdlQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXIge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG5ldyBQYWdlQ29udGFpbmVyQnVpbGRlcigpO1xuICAgIGNvbnRhaW5lci53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ2hpbGRyZW4oKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKGNvbnRhaW5lci5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICB0YWJzZXQoZGVsZWdhdGU6IChjb250YWluZXI6IElUYWJzZXRDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IFRhYnNldENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgZmllbGRzZXQoZGVsZWdhdGU6IChjb250YWluZXI6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgRmllbGRzZXRDb250YWluZXJCdWlsZGVyKCk7XG4gICAgY29udGFpbmVyLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoY29udGFpbmVyKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGlsZHJlbigpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4hLnB1c2goY29udGFpbmVyLmJ1aWxkKCkpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGRpYWxvZyhkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSURpYWxvZ0J1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgY29uc3QgY29udGFpbmVyID0gbmV3IERpYWxvZ0NvbnRhaW5lckJ1aWxkZXIoKTsgLy8gV2lsbCB1c2UgaW5qZWN0KCkgZmFsbGJhY2tcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGNvbnRhaW5lcik7XG4gICAgfVxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICBzdGVwV2l6YXJkKGRlbGVnYXRlOiAod2l6YXJkOiBJU3RlcFdpemFyZEJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCB3aXphcmQgPSBuZXcgU3RlcFdpemFyZEJ1aWxkZXIoKTtcbiAgICB3aXphcmQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZSh3aXphcmQpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaCh3aXphcmQuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgZm9ybUZpZWxkKGxhYmVsOiBzdHJpbmcsIGRlbGVnYXRlPzogKGZpZWxkOiBJRm9ybUZpZWxkQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXIge1xuICAgIGNvbnN0IGZpZWxkID0gbmV3IEZvcm1GaWVsZEJ1aWxkZXIobGFiZWwpO1xuICAgIGZpZWxkLndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgZGVsZWdhdGUoZmllbGQpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChmaWVsZC5idWlsZCgpKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBXaWRnZXQgY29udGFpbmVyIG1peGluIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uIFByaW5jaXBsZVxuICogUHJvdmlkZXMgd2lkZ2V0IGNyZWF0aW9uIG9wZXJhdGlvbnNcbiAqL1xuYWJzdHJhY3QgY2xhc3MgV2lkZ2V0Q29udGFpbmVyTWl4aW48VENvbnRhaW5lcj4gZXh0ZW5kcyBDaGlsZENvbnRhaW5lck1peGluPFRDb250YWluZXI+IHtcbiAgdGV4dEJveChvcHRpb25zPzogVGV4dEJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgndGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBsYXJnZVRleHRCb3gob3B0aW9ucz86IExhcmdlVGV4dEJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgnbGFyZ2UtdGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICByaWNoVGV4dChvcHRpb25zPzogUmljaFRleHRPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ3JpY2gtdGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBwYXNzd29yZEJveChvcHRpb25zPzogUGFzc3dvcmRCb3hPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ3Bhc3N3b3JkLWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIG51bWJlckJveChvcHRpb25zPzogTnVtYmVyQm94T3B0aW9ucyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuYWRkV2lkZ2V0KCdudW1iZXItZWRpdG9yJywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgc2VsZWN0Qm94KG9wdGlvbnM6IFNlbGVjdEJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgnc2VsZWN0LWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGxvb2t1cEJveChvcHRpb25zOiBMb29rdXBCb3hPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ2xvb2t1cC1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBzZWxlY3Rpb25MaXN0KG9wdGlvbnM6IFNlbGVjdGlvbkxpc3RPcHRpb25zKTogVENvbnRhaW5lciB7XG4gICAgdGhpcy5hZGRXaWRnZXQoJ3NlbGVjdGlvbi1saXN0LWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIGRhdGVUaW1lQm94KG9wdGlvbnM/OiBEYXRlVGltZUJveE9wdGlvbnMpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldCgnZGF0ZS10aW1lLWVkaXRvcicsIG9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzIGFzIHVua25vd24gYXMgVENvbnRhaW5lcjtcbiAgfVxuXG4gIHRvZ2dsZVN3aXRjaChvcHRpb25zPzogVG9nZ2xlU3dpdGNoT3B0aW9ucyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuYWRkV2lkZ2V0KCd0b2dnbGUtZWRpdG9yJywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgY29sb3JCb3gob3B0aW9ucz86IENvbG9yQm94T3B0aW9ucyk6IFRDb250YWluZXIge1xuICAgIHRoaXMuYWRkV2lkZ2V0KCdjb2xvci1lZGl0b3InLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cblxuICBsaXN0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJTGlzdFdpZGdldEJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBuZXcgTGlzdFdpZGdldEJ1aWxkZXIoKTtcbiAgICBjb250YWluZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBkZWxlZ2F0ZShjb250YWluZXIpO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5jaGlsZHJlbiEucHVzaChjb250YWluZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXMgYXMgdW5rbm93biBhcyBUQ29udGFpbmVyO1xuICB9XG5cbiAgY3VzdG9tV2lkZ2V0PFQ+KHR5cGU6IHN0cmluZywgb3B0aW9ucz86IFQpOiBUQ29udGFpbmVyIHtcbiAgICB0aGlzLmFkZFdpZGdldDxUPih0eXBlLCBvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcyBhcyB1bmtub3duIGFzIFRDb250YWluZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBGbGV4IENvbnRhaW5lciBCdWlsZGVyIC0gTGlza292IFN1YnN0aXR1dGlvbiBQcmluY2lwbGVcbiAqIEV4dGVuZHMgV2lkZ2V0Q29udGFpbmVyTWl4aW4gdG8gaW5oZXJpdCBhbGwgY29tbW9uIGZ1bmN0aW9uYWxpdHlcbiAqL1xuY2xhc3MgRmxleENvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbjxJRmxleENvbnRhaW5lckJ1aWxkZXI+IGltcGxlbWVudHMgSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2ZsZXgtbGF5b3V0Jyk7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUEZsZXhDb250YWluZXJPcHRpb25zKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMgPSB7IC4uLnRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSW5kaXZpZHVhbCBmbHVlbnQgbWV0aG9kcyBmb3IgRmxleFxuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiAncm93JyB8ICdjb2x1bW4nIHwgJ3Jvdy1yZXZlcnNlJyB8ICdjb2x1bW4tcmV2ZXJzZScpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBmbGV4RGlyZWN0aW9uOiBkaXJlY3Rpb24gfSk7XG4gIH1cblxuICBzZXRXcmFwKHdyYXA6ICdub3dyYXAnIHwgJ3dyYXAnIHwgJ3dyYXAtcmV2ZXJzZScpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBmbGV4V3JhcDogd3JhcCB9KTtcbiAgfVxuXG4gIHNldEp1c3RpZnlDb250ZW50KFxuICAgIGp1c3RpZnk6ICdmbGV4LXN0YXJ0JyB8ICdmbGV4LWVuZCcgfCAnY2VudGVyJyB8ICdzcGFjZS1iZXR3ZWVuJyB8ICdzcGFjZS1hcm91bmQnIHwgJ3NwYWNlLWV2ZW5seScsXG4gICk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGp1c3RpZnlDb250ZW50OiBqdXN0aWZ5IH0pO1xuICB9XG5cbiAgc2V0QWxpZ25JdGVtcyhhbGlnbjogJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ2Jhc2VsaW5lJyB8ICdzdHJldGNoJyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGFsaWduSXRlbXM6IGFsaWduIH0pO1xuICB9XG5cbiAgc2V0R2FwKGdhcDogc3RyaW5nKTogSUZsZXhDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ2FwIH0pO1xuICB9XG5cbiAgc2V0QmFja2dyb3VuZENvbG9yKGNvbG9yOiBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yIH0pO1xuICB9XG5cbiAgc2V0UGFkZGluZyhwYWRkaW5nOiBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzcGFjaW5nOiB7IHBhZGRpbmcgfSB9KTtcbiAgfVxuXG4gIHNldE1hcmdpbihtYXJnaW46IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNwYWNpbmc6IHsgbWFyZ2luIH0gfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBHcmlkIENvbnRhaW5lciBCdWlsZGVyIC0gTGlza292IFN1YnN0aXR1dGlvbiBQcmluY2lwbGVcbiAqIEV4dGVuZHMgV2lkZ2V0Q29udGFpbmVyTWl4aW4gdG8gaW5oZXJpdCBhbGwgY29tbW9uIGZ1bmN0aW9uYWxpdHlcbiAqL1xuY2xhc3MgR3JpZENvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbjxJR3JpZENvbnRhaW5lckJ1aWxkZXI+IGltcGxlbWVudHMgSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2dyaWQtbGF5b3V0Jyk7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUEdyaWRDb250YWluZXJPcHRpb25zKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMgPSB7IC4uLnRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gSW5kaXZpZHVhbCBmbHVlbnQgbWV0aG9kcyBmb3IgR3JpZFxuICBzZXRDb2x1bW5zKGNvbHVtbnM6IG51bWJlcik6IElHcmlkQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGdyaWQ6IHsgZGVmYXVsdDogeyBjb2x1bW5zIH0gfSB9KTtcbiAgfVxuXG4gIHNldFJvd3Mocm93czogbnVtYmVyKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IHJvd3MgfSB9IH0pO1xuICB9XG5cbiAgc2V0R2FwKGdhcDogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IGdhcCB9IH0gfSk7XG4gIH1cblxuICBzZXRKdXN0aWZ5SXRlbXMoanVzdGlmeTogJ3N0YXJ0JyB8ICdlbmQnIHwgJ2NlbnRlcicgfCAnc3RyZXRjaCcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBncmlkOiB7IGRlZmF1bHQ6IHsganVzdGlmeUl0ZW1zOiBqdXN0aWZ5IH0gfSB9KTtcbiAgfVxuXG4gIHNldEFsaWduSXRlbXMoYWxpZ246ICdzdGFydCcgfCAnZW5kJyB8ICdjZW50ZXInIHwgJ3N0cmV0Y2gnKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IGFsaWduSXRlbXM6IGFsaWduIH0gfSB9KTtcbiAgfVxuXG4gIHNldEF1dG9GbG93KGZsb3c6ICdyb3cnIHwgJ2NvbHVtbicgfCAncm93IGRlbnNlJyB8ICdjb2x1bW4gZGVuc2UnKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZ3JpZDogeyBkZWZhdWx0OiB7IGF1dG9GbG93OiBmbG93IH0gfSB9KTtcbiAgfVxuXG4gIHNldEJhY2tncm91bmRDb2xvcihjb2xvcjogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgYmFja2dyb3VuZENvbG9yOiBjb2xvciB9KTtcbiAgfVxuXG4gIHNldFBhZGRpbmcocGFkZGluZzogc3RyaW5nKTogSUdyaWRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgc3BhY2luZzogeyBwYWRkaW5nIH0gfSk7XG4gIH1cblxuICBzZXRNYXJnaW4obWFyZ2luOiBzdHJpbmcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzcGFjaW5nOiB7IG1hcmdpbiB9IH0pO1xuICB9XG59XG5cbi8qKlxuICogUGFuZWwgQ29udGFpbmVyIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogRXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbiB0byBpbmhlcml0IGFsbCBjb21tb24gZnVuY3Rpb25hbGl0eVxuICovXG5jbGFzcyBQYW5lbENvbnRhaW5lckJ1aWxkZXIgZXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbjxJUGFuZWxDb250YWluZXJCdWlsZGVyPiBpbXBsZW1lbnRzIElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigncGFuZWwtbGF5b3V0Jyk7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUFBhbmVsQ29udGFpbmVyT3B0aW9ucyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBQYW5lbFxuICBzZXRDYXB0aW9uKGNhcHRpb246IHN0cmluZyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBjYXB0aW9uIH0pO1xuICB9XG5cbiAgc2V0SWNvbihpY29uOiBzdHJpbmcpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgaWNvbiB9KTtcbiAgfVxuXG4gIHNldExvb2sobG9vazogJ3NvbGlkJyB8ICdmaWxsJyB8ICdvdXRsaW5lJyB8ICdmbGF0JyB8ICdub25lJyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBsb29rIH0pO1xuICB9XG5cbiAgc2V0U2hvd0hlYWRlcihzaG93OiBib29sZWFuKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dIZWFkZXI6IHNob3cgfSk7XG4gIH1cblxuICBzZXRDb2xsYXBzZWQoY29sbGFwc2VkOiBib29sZWFuKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNvbGxhcHNlZCB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFBhZ2UgQ29udGFpbmVyIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogRXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbiB0byBpbmhlcml0IGFsbCBjb21tb24gZnVuY3Rpb25hbGl0eVxuICovXG5jbGFzcyBQYWdlQ29udGFpbmVyQnVpbGRlciBleHRlbmRzIFdpZGdldENvbnRhaW5lck1peGluPElQYWdlQ29udGFpbmVyQnVpbGRlcj4gaW1wbGVtZW50cyBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigncGFnZS1sYXlvdXQnKTtcbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQUGFnZUNvbnRhaW5lck9wdGlvbnMpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBQYWdlXG4gIHNldEJhY2tncm91bmRDb2xvcihjb2xvcjogc3RyaW5nKTogSVBhZ2VDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgYmFja2dyb3VuZENvbG9yOiBjb2xvciB9KTtcbiAgfVxuXG4gIHNldFRoZW1lKHRoZW1lOiB7IGlkOiBzdHJpbmcgfSk6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHRoZW1lIH0pO1xuICB9XG5cbiAgc2V0SGFzSGVhZGVyKGhhc0hlYWRlcjogYm9vbGVhbik6IElQYWdlQ29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGhhc0hlYWRlciB9KTtcbiAgfVxuXG4gIHNldEhhc0Zvb3RlcihoYXNGb290ZXI6IGJvb2xlYW4pOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBoYXNGb290ZXIgfSk7XG4gIH1cblxuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiBzdHJpbmcpOiBJUGFnZUNvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBkaXJlY3Rpb24gfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWJzZXQgQ29udGFpbmVyIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogRXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbiB0byBpbmhlcml0IGFsbCBjb21tb24gZnVuY3Rpb25hbGl0eVxuICovXG5jbGFzcyBUYWJzZXRDb250YWluZXJCdWlsZGVyIGV4dGVuZHMgV2lkZ2V0Q29udGFpbmVyTWl4aW48SVRhYnNldENvbnRhaW5lckJ1aWxkZXI+IGltcGxlbWVudHMgSVRhYnNldENvbnRhaW5lckJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigndGFic2V0LWxheW91dCcpO1xuICB9XG5cbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBUYWJzZXRDb250YWluZXJPcHRpb25zKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBUYWJzZXRcbiAgc2V0TG9vayhsb29rOiAnd2l0aC1saW5lJyB8ICd3aXRoLWxpbmUtY29sb3InIHwgJ3BpbGxzJyB8ICdwaWxscy1jb2xvcicpOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGxvb2sgfSk7XG4gIH1cblxuICBzZXRPcmllbnRhdGlvbihvcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgb3JpZW50YXRpb24gfSk7XG4gIH1cblxuICBzZXRBY3RpdmVJbmRleChpbmRleDogbnVtYmVyKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBhY3RpdmVJbmRleDogaW5kZXggfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3JtIEZpZWxkIEJ1aWxkZXIgLSBMaXNrb3YgU3Vic3RpdHV0aW9uIFByaW5jaXBsZVxuICogQ2FuIG9ubHkgY29udGFpbiBPTkUgd2lkZ2V0IHdpdGggYXV0b21hdGljIHBhdGggZ2VuZXJhdGlvblxuICovXG5jbGFzcyBGb3JtRmllbGRCdWlsZGVyIGV4dGVuZHMgTGF5b3V0Q29udGFpbmVyTWl4aW48SUZvcm1GaWVsZEJ1aWxkZXI+IGltcGxlbWVudHMgSUZvcm1GaWVsZEJ1aWxkZXIge1xuICBwcml2YXRlIGhhc1dpZGdldCA9IGZhbHNlO1xuICBwcml2YXRlIGNoaWxkV2lkZ2V0PzogV2lkZ2V0QnVpbGRlcjsgLy8gU3RvcmUgdGhlIHdpZGdldCBidWlsZGVyLCBub3QgdGhlIGJ1aWx0IHdpZGdldFxuXG4gIGNvbnN0cnVjdG9yKGxhYmVsOiBzdHJpbmcpIHtcbiAgICBzdXBlcignZm9ybS1maWVsZCcpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgbGFiZWwsIHNob3dMYWJlbDogdHJ1ZSB9O1xuICB9XG5cbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBGb3JtRmllbGRPcHRpb25zKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRMYWJlbChsYWJlbDogc3RyaW5nKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBsYWJlbCB9KTtcbiAgfVxuXG4gIHNldFNob3dMYWJlbChzaG93TGFiZWw6IGJvb2xlYW4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dMYWJlbCB9KTtcbiAgfVxuXG4gIC8vIFNpbmdsZSB3aWRnZXQgbWV0aG9kcyB3aXRoIGF1dG9tYXRpYyBwYXRoIGdlbmVyYXRpb25cbiAgcHJpdmF0ZSBhZGRTaW5nbGVXaWRnZXQ8VD4odHlwZTogc3RyaW5nLCBvcHRpb25zPzogT21pdDxULCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIGlmICh0aGlzLmhhc1dpZGdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3JtIGZpZWxkIGNhbiBvbmx5IGNvbnRhaW4gb25lIHdpZGdldCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1GaWVsZE5hbWUgPSB0aGlzLmNvbnRhaW5lclN0YXRlLm5hbWU7XG4gICAgY29uc3QgZm9ybUZpZWxkUGF0aCA9IHRoaXMuY29udGFpbmVyU3RhdGUucGF0aDsgLy8gR2V0IGV4cGxpY2l0IHBhdGggZnJvbSBmb3JtIGZpZWxkXG4gICAgY29uc3QgZm9ybUZpZWxkTGFiZWwgPSB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnM/LlsnbGFiZWwnXTtcbiAgICBjb25zdCB3aWRnZXROYW1lID0gKG9wdGlvbnMgYXMgYW55KT8ubmFtZTtcblxuICAgIC8vIEdlbmVyYXRlIHdpZGdldCBwYXRoOiBleHBsaWNpdCBwYXRoIC0+IHdpZGdldCBuYW1lIC0+IGZvcm0gZmllbGQgbmFtZSAtPiBsYWJlbCAtPiByYW5kb21cbiAgICBsZXQgd2lkZ2V0UGF0aDogc3RyaW5nO1xuICAgIGlmIChmb3JtRmllbGRQYXRoKSB7XG4gICAgICB3aWRnZXRQYXRoID0gZm9ybUZpZWxkUGF0aDsgLy8gVXNlIGV4cGxpY2l0IGZvcm0gZmllbGQgcGF0aCBmaXJzdFxuICAgIH0gZWxzZSBpZiAod2lkZ2V0TmFtZSkge1xuICAgICAgd2lkZ2V0UGF0aCA9IHdpZGdldE5hbWU7XG4gICAgfSBlbHNlIGlmIChmb3JtRmllbGROYW1lKSB7XG4gICAgICB3aWRnZXRQYXRoID0gZm9ybUZpZWxkTmFtZTsgLy8gVXNlIGZvcm0gZmllbGQgbmFtZSBhcyBkZWZhdWx0IHBhdGhcbiAgICB9IGVsc2UgaWYgKGZvcm1GaWVsZExhYmVsKSB7XG4gICAgICB3aWRnZXRQYXRoID0gbGFiZWxUb1BhdGgoZm9ybUZpZWxkTGFiZWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWRnZXRQYXRoID0gZ2VuZXJhdGVSYW5kb21JZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsTmFtZSA9IHdpZGdldE5hbWUgfHwgZm9ybUZpZWxkTmFtZSB8fCB3aWRnZXRQYXRoO1xuXG4gICAgY29uc3QgY2hpbGQgPSBuZXcgV2lkZ2V0QnVpbGRlcigpO1xuICAgIGNoaWxkLnR5cGUodHlwZSk7XG4gICAgY2hpbGQubmFtZShmaW5hbE5hbWUpO1xuICAgIGNoaWxkLnBhdGgod2lkZ2V0UGF0aCk7XG5cbiAgICAvLyBSZW1vdmUgbmFtZSBmcm9tIG9wdGlvbnMgc2luY2UgaXQncyBub3cgaW4gc3RhdGVcbiAgICBjb25zdCB7IG5hbWU6IF8sIC4uLmNsZWFuT3B0aW9ucyB9ID0gKG9wdGlvbnMgfHwge30pIGFzIGFueTtcbiAgICBjaGlsZC53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBjaGlsZC5vcHRpb25zKGNsZWFuT3B0aW9ucyk7XG5cbiAgICAvLyBJTVBPUlRBTlQ6IFN0b3JlIHRoZSB3aWRnZXQgYnVpbGRlciwgZG9uJ3QgYnVpbGQgaXQgeWV0IVxuICAgIC8vIFRoaXMgYWxsb3dzIHByb3BlcnRpZXMgc2V0IGFmdGVyIHRoaXMgbWV0aG9kIChsaWtlIGRpc2FibGVkLCByZWFkb25seSkgdG8gYmUgYXBwbGllZFxuICAgIHRoaXMuY2hpbGRXaWRnZXQgPSBjaGlsZDtcbiAgICB0aGlzLmhhc1dpZGdldCA9IHRydWU7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHRleHRCb3gob3B0aW9ucz86IE9taXQ8VGV4dEJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PFRleHRCb3hPcHRpb25zPigndGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxhcmdlVGV4dEJveChvcHRpb25zPzogT21pdDxMYXJnZVRleHRCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxMYXJnZVRleHRCb3hPcHRpb25zPignbGFyZ2UtdGV4dC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJpY2hUZXh0KG9wdGlvbnM/OiBPbWl0PFJpY2hUZXh0T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTaW5nbGVXaWRnZXQ8UmljaFRleHRPcHRpb25zPigncmljaC10ZXh0LWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgcGFzc3dvcmRCb3gob3B0aW9ucz86IE9taXQ8UGFzc3dvcmRCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxQYXNzd29yZEJveE9wdGlvbnM+KCdwYXNzd29yZC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIG51bWJlckJveChvcHRpb25zPzogT21pdDxOdW1iZXJCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxOdW1iZXJCb3hPcHRpb25zPignbnVtYmVyLWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgc2VsZWN0Qm94KG9wdGlvbnM6IE9taXQ8U2VsZWN0Qm94T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5hZGRTaW5nbGVXaWRnZXQ8U2VsZWN0Qm94T3B0aW9ucz4oJ3NlbGVjdC1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGxvb2t1cEJveChvcHRpb25zOiBPbWl0PExvb2t1cEJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PExvb2t1cEJveE9wdGlvbnM+KCdsb29rdXAtZWRpdG9yJywgb3B0aW9ucyk7XG4gIH1cblxuICBzZWxlY3Rpb25MaXN0KG9wdGlvbnM6IE9taXQ8U2VsZWN0aW9uTGlzdE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PFNlbGVjdGlvbkxpc3RPcHRpb25zPignc2VsZWN0aW9uLWxpc3QtZWRpdG9yJywgb3B0aW9ucyk7XG4gIH1cblxuICBkYXRlVGltZUJveChvcHRpb25zPzogT21pdDxEYXRlVGltZUJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PERhdGVUaW1lQm94T3B0aW9ucz4oJ2RhdGUtdGltZS1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIHRvZ2dsZVN3aXRjaChvcHRpb25zPzogT21pdDxUb2dnbGVTd2l0Y2hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxUb2dnbGVTd2l0Y2hPcHRpb25zPigndG9nZ2xlLWVkaXRvcicsIG9wdGlvbnMpO1xuICB9XG5cbiAgY29sb3JCb3gob3B0aW9ucz86IE9taXQ8Q29sb3JCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLmFkZFNpbmdsZVdpZGdldDxDb2xvckJveE9wdGlvbnM+KCdjb2xvci1lZGl0b3InLCBvcHRpb25zKTtcbiAgfVxuXG4gIGN1c3RvbVdpZGdldDxUPih0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFQsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuYWRkU2luZ2xlV2lkZ2V0PFQ+KHR5cGUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgcHJvcGVydHkgc2V0dGVycyB0byBwcm9wYWdhdGUgY2hhbmdlcyB0byBjaGlsZCB3aWRnZXRcbiAgb3ZlcnJpZGUgZGlzYWJsZWQoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHN1cGVyLmRpc2FibGVkKGNvbmRpdGlvbik7XG4gICAgaWYgKHRoaXMuY2hpbGRXaWRnZXQpIHtcbiAgICAgIHRoaXMuY2hpbGRXaWRnZXQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3ZlcnJpZGUgcmVhZG9ubHkoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHN1cGVyLnJlYWRvbmx5KGNvbmRpdGlvbik7XG4gICAgaWYgKHRoaXMuY2hpbGRXaWRnZXQpIHtcbiAgICAgIHRoaXMuY2hpbGRXaWRnZXQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3ZlcnJpZGUgdmlzaWJsZShjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgc3VwZXIudmlzaWJsZShjb25kaXRpb24pO1xuICAgIGlmICh0aGlzLmNoaWxkV2lkZ2V0KSB7XG4gICAgICB0aGlzLmNoaWxkV2lkZ2V0LndpdGhJbmhlcml0YW5jZUNvbnRleHQodGhpcy5pbmhlcml0YW5jZUNvbnRleHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG92ZXJyaWRlIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBJRm9ybUZpZWxkQnVpbGRlciB7XG4gICAgc3VwZXIuZGlyZWN0aW9uKGRpcmVjdGlvbik7XG4gICAgaWYgKHRoaXMuY2hpbGRXaWRnZXQpIHtcbiAgICAgIHRoaXMuY2hpbGRXaWRnZXQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3ZlcnJpZGUgbW9kZShtb2RlOiBBWFBXaWRnZXRSZW5kZXJNb2RlKTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIHN1cGVyLm1vZGUobW9kZSk7XG4gICAgaWYgKHRoaXMuY2hpbGRXaWRnZXQpIHtcbiAgICAgIHRoaXMuY2hpbGRXaWRnZXQud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgd2l0aEluaGVyaXRhbmNlQ29udGV4dCB0byBwYXNzIGl0IHRvIHRoZSBjaGlsZCB3aWRnZXQgaWYgaXQgZXhpc3RzXG4gIG92ZXJyaWRlIHdpdGhJbmhlcml0YW5jZUNvbnRleHQoY29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0KTogSUZvcm1GaWVsZEJ1aWxkZXIge1xuICAgIC8vIENhbGwgcGFyZW50IGltcGxlbWVudGF0aW9uIGZpcnN0XG4gICAgc3VwZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dChjb250ZXh0KTtcblxuICAgIC8vIElmIHdlIGhhdmUgYSBjaGlsZCB3aWRnZXQsIHVwZGF0ZSBpdHMgaW5oZXJpdGFuY2UgY29udGV4dCB0b29cbiAgICBpZiAodGhpcy5jaGlsZFdpZGdldCkge1xuICAgICAgdGhpcy5jaGlsZFdpZGdldC53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIE92ZXJyaWRlIGJ1aWxkKCkgdG8gYnVpbGQgdGhlIGNoaWxkIHdpZGdldCBhdCB0aGUgbGFzdCBtb21lbnRcbiAgb3ZlcnJpZGUgYnVpbGQoKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgLy8gQnVpbGQgdGhlIGNoaWxkIHdpZGdldCBhbmQgYWRkIGl0IHRvIGNoaWxkcmVuIGJlZm9yZSBidWlsZGluZyB0aGUgZm9ybSBmaWVsZFxuICAgIGlmICh0aGlzLmNoaWxkV2lkZ2V0KSB7XG4gICAgICB0aGlzLmVuc3VyZUNoaWxkcmVuKCk7XG4gICAgICB0aGlzLmNvbnRhaW5lclN0YXRlLmNoaWxkcmVuIS5wdXNoKHRoaXMuY2hpbGRXaWRnZXQuYnVpbGQoKSk7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBwYXJlbnQgYnVpbGRcbiAgICByZXR1cm4gc3VwZXIuYnVpbGQoKTtcbiAgfVxufVxuXG4vKipcbiAqIEZpZWxkc2V0IENvbnRhaW5lciBCdWlsZGVyIC0gTGlza292IFN1YnN0aXR1dGlvbiBQcmluY2lwbGVcbiAqIEV4dGVuZHMgTGF5b3V0Q29udGFpbmVyTWl4aW4gdG8gaW5oZXJpdCBsYXlvdXQgZnVuY3Rpb25hbGl0eVxuICogU3BlY2lhbGl6ZWQgZm9yIGZvcm0gZmllbGRzIG9ubHlcbiAqL1xuY2xhc3MgRmllbGRzZXRDb250YWluZXJCdWlsZGVyXG4gIGV4dGVuZHMgTGF5b3V0Q29udGFpbmVyTWl4aW48SUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcj5cbiAgaW1wbGVtZW50cyBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyXG57XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdmaWVsZHNldC1sYXlvdXQnKTtcbiAgICB0aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQRmllbGRzZXRDb250YWluZXJPcHRpb25zKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgdGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zID0geyAuLi50aGlzLmNvbnRhaW5lclN0YXRlLm9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEluZGl2aWR1YWwgZmx1ZW50IG1ldGhvZHMgZm9yIEZpZWxkc2V0XG4gIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgdGl0bGUgfSk7XG4gIH1cblxuICBzZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGRlc2NyaXB0aW9uIH0pO1xuICB9XG5cbiAgc2V0SWNvbihpY29uOiBzdHJpbmcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgaWNvbiB9KTtcbiAgfVxuXG4gIHNldENvbGxhcHNpYmxlKGNvbGxhcHNpYmxlOiBib29sZWFuKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNvbGxhcHNpYmxlIH0pO1xuICB9XG5cbiAgc2V0SXNPcGVuKGlzT3BlbjogYm9vbGVhbik6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBpc09wZW4gfSk7XG4gIH1cblxuICBzZXRMb29rKGxvb2s6ICdmaWVsZHNldCcgfCAnY2FyZCcgfCAnZ3JvdXAnKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGxvb2sgfSk7XG4gIH1cblxuICBzZXRTaG93SGVhZGVyKHNob3dIZWFkZXI6IGJvb2xlYW4pOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgc2hvd0hlYWRlciB9KTtcbiAgfVxuXG4gIHNldENvbHMoY29sczogbnVtYmVyKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNvbHMgfSk7XG4gIH1cblxuICAvLyBPbmx5IGZvcm0gZmllbGRzIGFyZSBhbGxvd2VkIGluIGZpZWxkc2V0XG4gIGZvcm1GaWVsZChsYWJlbDogc3RyaW5nLCBkZWxlZ2F0ZT86IChmaWVsZDogSUZvcm1GaWVsZEJ1aWxkZXIpID0+IHZvaWQpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyIHtcbiAgICBjb25zdCBmaWVsZCA9IG5ldyBGb3JtRmllbGRCdWlsZGVyKGxhYmVsKTtcbiAgICBmaWVsZC53aXRoSW5oZXJpdGFuY2VDb250ZXh0KHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0KTtcbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKGZpZWxkKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGlsZHJlbigpO1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUuY2hpbGRyZW4hLnB1c2goZmllbGQuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuLyoqXG4gKiBMaXN0IFdpZGdldCBCdWlsZGVyIC0gTGlza292IFN1YnN0aXR1dGlvbiBQcmluY2lwbGVcbiAqIEV4dGVuZHMgV2lkZ2V0Q29udGFpbmVyTWl4aW4gdG8gaW5oZXJpdCBhbGwgY29tbW9uIGZ1bmN0aW9uYWxpdHlcbiAqL1xuY2xhc3MgTGlzdFdpZGdldEJ1aWxkZXIgZXh0ZW5kcyBXaWRnZXRDb250YWluZXJNaXhpbjxJTGlzdFdpZGdldEJ1aWxkZXI+IGltcGxlbWVudHMgSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2xpc3QnKTtcbiAgfVxuXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQTGlzdFdpZGdldE9wdGlvbnMpOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHRoaXMuY29udGFpbmVyU3RhdGUub3B0aW9ucyA9IHsgLi4udGhpcy5jb250YWluZXJTdGF0ZS5vcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBJbmRpdmlkdWFsIGZsdWVudCBtZXRob2RzIGZvciBMaXN0IFdpZGdldFxuICBzZXREYXRhU291cmNlKGRhdGFTb3VyY2U6IGFueVtdKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgZGF0YVNvdXJjZSB9KTtcbiAgfVxuXG4gIHNldENvbHVtbnMoY29sdW1uczogYW55W10pOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBjb2x1bW5zIH0pO1xuICB9XG5cbiAgLy8gRXZlbnQgaGFuZGxlcnNcbiAgc2V0T25Sb3dDbGljayhoYW5kbGVyOiAocm93OiBhbnkpID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBvblJvd0NsaWNrOiBoYW5kbGVyIH0pO1xuICB9XG5cbiAgc2V0T25Sb3dEb3VibGVDbGljayhoYW5kbGVyOiAocm93OiBhbnkpID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBvblJvd0RvdWJsZUNsaWNrOiBoYW5kbGVyIH0pO1xuICB9XG5cbiAgc2V0T25TZWxlY3Rpb25DaGFuZ2UoaGFuZGxlcjogKHNlbGVjdGVkUm93czogYW55W10pID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBvblNlbGVjdGlvbkNoYW5nZTogaGFuZGxlciB9KTtcbiAgfVxuXG4gIHNldE9uUm93Q29tbWFuZChoYW5kbGVyOiAoY29tbWFuZDogYW55LCBzZWxlY3RlZFJvd3M6IGFueVtdKSA9PiB2b2lkKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgb25Sb3dDb21tYW5kOiBoYW5kbGVyIH0pO1xuICB9XG5cbiAgLy8gVGFibGUgZmVhdHVyZXNcbiAgc2V0UGFnaW5nKHBhZ2luZzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHBhZ2luZyB9KTtcbiAgfVxuXG4gIHNldFNob3dIZWFkZXIoc2hvdzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dIZWFkZXI6IHNob3cgfSk7XG4gIH1cblxuICBzZXRTaG93Rm9vdGVyKHNob3c6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzaG93Rm9vdGVyOiBzaG93IH0pO1xuICB9XG5cbiAgc2V0Rml4SGVhZGVyKGZpeDogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGZpeEhlYWRlcjogZml4IH0pO1xuICB9XG5cbiAgc2V0Rml4Rm9vdGVyKGZpeDogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGZpeEZvb3RlcjogZml4IH0pO1xuICB9XG5cbiAgc2V0RmV0Y2hEYXRhTW9kZShtb2RlOiAnYXV0bycgfCAnbWFudWFsJyk6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGZldGNoRGF0YU1vZGU6IG1vZGUgfSk7XG4gIH1cblxuICBzZXRQYXJlbnRGaWVsZChmaWVsZDogc3RyaW5nKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgcGFyZW50RmllbGQ6IGZpZWxkIH0pO1xuICB9XG5cbiAgc2V0TWluSGVpZ2h0KGhlaWdodDogc3RyaW5nIHwgbnVtYmVyKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgbWluSGVpZ2h0OiBoZWlnaHQgfSk7XG4gIH1cblxuICAvLyBTZWxlY3Rpb24gJiBJbmRleFxuICBzZXRTaG93SW5kZXgoc2hvdzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHNob3dJbmRleDogc2hvdyB9KTtcbiAgfVxuXG4gIHNldEFsbG93U2VsZWN0aW9uKGFsbG93OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgYWxsb3dTZWxlY3Rpb246IGFsbG93IH0pO1xuICB9XG5cbiAgLy8gQ29tbWFuZHNcbiAgc2V0UHJpbWFyeUNvbW1hbmRzKGNvbW1hbmRzOiBhbnlbXSk6IElMaXN0V2lkZ2V0QnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IHByaW1hcnlDb21tYW5kczogY29tbWFuZHMgfSk7XG4gIH1cblxuICBzZXRTZWNvbmRhcnlDb21tYW5kcyhjb21tYW5kczogYW55W10pOiBJTGlzdFdpZGdldEJ1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzZWNvbmRhcnlDb21tYW5kczogY29tbWFuZHMgfSk7XG4gIH1cblxuICAvLyBMb2FkaW5nXG4gIHNldExvYWRpbmcobG9hZGluZzogeyBlbmFibGVkPzogYm9vbGVhbjsgYW5pbWF0aW9uPzogYm9vbGVhbiB9KTogSUxpc3RXaWRnZXRCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgbG9hZGluZyB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERpYWxvZyBDb250YWluZXIgQnVpbGRlciAtIFNwZWNpYWxpemVkIGZvciBkaWFsb2cgZnVuY3Rpb25hbGl0eVxuICogVXNlcyBjb21wb3NpdGlvbiBpbnN0ZWFkIG9mIGluaGVyaXRhbmNlIGZvciBjbGVhbmVyIHNlcGFyYXRpb25cbiAqL1xuY2xhc3MgRGlhbG9nQ29udGFpbmVyQnVpbGRlciBpbXBsZW1lbnRzIElEaWFsb2dCdWlsZGVyIHtcbiAgcHJpdmF0ZSBkaWFsb2dTdGF0ZTogRGlhbG9nQnVpbGRlclN0YXRlID0ge1xuICAgIHR5cGU6ICdmbGV4LWxheW91dCcsIC8vIFRoaXMgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4gY29udGVudCBsYXlvdXQgZXhpc3RzXG4gICAgY2hpbGRyZW46IFtdLFxuICAgIG1vZGU6ICdlZGl0JyxcbiAgICBkaWFsb2dPcHRpb25zOiB7XG4gICAgICB0aXRsZTogJycsXG4gICAgICBzaXplOiAnbWQnLFxuICAgICAgY2xvc2VCdXR0b246IGZhbHNlLFxuICAgIH0sXG4gICAgYWN0aW9uczoge1xuICAgICAgZm9vdGVyOiB7XG4gICAgICAgIHByZWZpeDogW10sXG4gICAgICAgIHN1ZmZpeDogW10sXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgcHJpdmF0ZSBwb3B1cFNlcnZpY2U6IEFYUG9wdXBTZXJ2aWNlO1xuICBwcml2YXRlIGNvbnRlbnRMYXlvdXQ/OiBBWFBXaWRnZXROb2RlO1xuXG4gIGNvbnN0cnVjdG9yKHBvcHVwU2VydmljZT86IEFYUG9wdXBTZXJ2aWNlKSB7XG4gICAgaWYgKHBvcHVwU2VydmljZSkge1xuICAgICAgdGhpcy5wb3B1cFNlcnZpY2UgPSBwb3B1cFNlcnZpY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9wdXBTZXJ2aWNlID0gaW5qZWN0KEFYUG9wdXBTZXJ2aWNlKTtcbiAgICB9XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUERpYWxvZ0NvbnRhaW5lck9wdGlvbnMpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgdGhpcy5kaWFsb2dTdGF0ZS5kaWFsb2dPcHRpb25zID0geyAuLi50aGlzLmRpYWxvZ1N0YXRlLmRpYWxvZ09wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEluZGl2aWR1YWwgZmx1ZW50IG1ldGhvZHMgZm9yIERpYWxvZ1xuICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKTogSURpYWxvZ0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyB0aXRsZSB9KTtcbiAgfVxuXG4gIHNldE1lc3NhZ2UobWVzc2FnZT86IHN0cmluZyk6IElEaWFsb2dCdWlsZGVyIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25zKHsgbWVzc2FnZSB9KTtcbiAgfVxuXG4gIHNldFNpemUoc2l6ZTogYW55KTogSURpYWxvZ0J1aWxkZXIge1xuICAgIHJldHVybiB0aGlzLnNldE9wdGlvbnMoeyBzaXplIH0pO1xuICB9XG5cbiAgc2V0Q2xvc2VCdXR0b24oY2xvc2VCdXR0b246IGJvb2xlYW4pOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNsb3NlQnV0dG9uIH0pO1xuICB9XG5cbiAgc2V0Q29udGV4dChjb250ZXh0OiBhbnkpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9ucyh7IGNvbnRleHQgfSk7XG4gIH1cblxuICBjb250ZW50KGRlbGVnYXRlOiAobGF5b3V0QnVpbGRlcjogSUZsZXhDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSURpYWxvZ0J1aWxkZXIge1xuICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgLy8gQ3JlYXRlIGEgZmxleCBjb250YWluZXIgZGlyZWN0bHkgaW5zdGVhZCBvZiB0aHJvdWdoIExheW91dEJ1aWxkZXJcbiAgICAgIGNvbnN0IGZsZXhDb250YWluZXIgPSBuZXcgRmxleENvbnRhaW5lckJ1aWxkZXIoKTtcbiAgICAgIGZsZXhDb250YWluZXIuc2V0RGlyZWN0aW9uKCdjb2x1bW4nKTtcbiAgICAgIGZsZXhDb250YWluZXIuc2V0R2FwKCcxMHB4Jyk7XG5cbiAgICAgIGRlbGVnYXRlKGZsZXhDb250YWluZXIpO1xuICAgICAgdGhpcy5jb250ZW50TGF5b3V0ID0gZmxleENvbnRhaW5lci5idWlsZCgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEFjdGlvbnMoZGVsZWdhdGU/OiAoYWN0aW9uczogSUFjdGlvbkJ1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlciB7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICBjb25zdCBhY3Rpb25CdWlsZGVyID0gbmV3IEFjdGlvbkJ1aWxkZXIodGhpcyk7XG4gICAgICBkZWxlZ2F0ZShhY3Rpb25CdWlsZGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBhZGRDdXN0b21BY3Rpb24oYWN0aW9uOiBBWFBBY3Rpb25NZW51SXRlbSk6IElEaWFsb2dCdWlsZGVyIHtcbiAgICAvLyBBZGQgdG8gYWN0aW9ucyBiYXNlZCBvbiBwb3NpdGlvblxuICAgIGNvbnN0IHBvc2l0aW9uID0gKGFjdGlvbiBhcyBhbnkpLnBvc2l0aW9uIHx8ICdzdWZmaXgnO1xuXG4gICAgaWYgKHBvc2l0aW9uID09PSAncHJlZml4Jykge1xuICAgICAgaWYgKCF0aGlzLmRpYWxvZ1N0YXRlLmFjdGlvbnMhLmZvb3RlciEucHJlZml4KSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU3RhdGUuYWN0aW9ucyEuZm9vdGVyIS5wcmVmaXggPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nU3RhdGUuYWN0aW9ucyEuZm9vdGVyIS5wcmVmaXghLnB1c2goYWN0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0aGlzLmRpYWxvZ1N0YXRlLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4KSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU3RhdGUuYWN0aW9ucyEuZm9vdGVyIS5zdWZmaXggPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlhbG9nU3RhdGUuYWN0aW9ucyEuZm9vdGVyIS5zdWZmaXghLnB1c2goYWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEJ1aWxkIG1ldGhvZCB0byBjcmVhdGUgZGlhbG9nIG5vZGVcbiAgYnVpbGQoKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBjb250ZW50IGxheW91dCwgdXNlIGl0IGRpcmVjdGx5IHRvIGF2b2lkIGV4dHJhIHdyYXBwZXJcbiAgICBpZiAodGhpcy5jb250ZW50TGF5b3V0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLmNvbnRlbnRMYXlvdXQsXG4gICAgICAgIC8vIEFkZCBkaWFsb2ctc3BlY2lmaWMgcHJvcGVydGllc1xuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgLi4udGhpcy5jb250ZW50TGF5b3V0Lm9wdGlvbnMsXG4gICAgICAgICAgLi4udGhpcy5kaWFsb2dTdGF0ZS5kaWFsb2dPcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBkaWFsb2cgc3RhdGUgc3RydWN0dXJlIGlmIG5vIGNvbnRlbnRcbiAgICBjb25zdCByZXN1bHQ6IEFYUFdpZGdldE5vZGUgPSB7XG4gICAgICAuLi50aGlzLmRpYWxvZ1N0YXRlLFxuICAgICAgY2hpbGRyZW46IFtdLFxuICAgIH07XG5cbiAgICAvLyBBZGQgZGlhbG9nLXNwZWNpZmljIHByb3BlcnRpZXNcbiAgICBpZiAodGhpcy5kaWFsb2dTdGF0ZS5kaWFsb2dPcHRpb25zKSB7XG4gICAgICByZXN1bHQub3B0aW9ucyA9IHsgLi4ucmVzdWx0Lm9wdGlvbnMsIC4uLnRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucyB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBEaWFsb2ctc3BlY2lmaWMgbWV0aG9kc1xuICBhc3luYyBzaG93KCk6IFByb21pc2U8QVhQRGlhbG9nUmVmPiB7XG4gICAgY29uc3QgZGlhbG9nTm9kZSA9IHRoaXMuYnVpbGQoKTtcblxuICAgIC8vIEltcG9ydCB0aGUgZGlhbG9nIHJlbmRlcmVyIGNvbXBvbmVudCBkeW5hbWljYWxseVxuICAgIGNvbnN0IHsgQVhQRGlhbG9nUmVuZGVyZXJDb21wb25lbnQgfSA9IGF3YWl0IGltcG9ydCgnLi9kaWFsb2ctcmVuZGVyZXIuY29tcG9uZW50Jyk7XG5cbiAgICAvLyBDcmVhdGUgZGlhbG9nIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBkaWFsb2dDb25maWcgPSB7XG4gICAgICB0aXRsZTogdGhpcy5kaWFsb2dTdGF0ZS5kaWFsb2dPcHRpb25zPy50aXRsZSB8fCAnJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucz8ubWVzc2FnZSxcbiAgICAgIGNvbnRleHQ6IHRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucz8uY29udGV4dCB8fCB7fSxcbiAgICAgIGRlZmluaXRpb246IGRpYWxvZ05vZGUsXG4gICAgICBhY3Rpb25zOiB0aGlzLmRpYWxvZ1N0YXRlLmFjdGlvbnMsXG4gICAgfTtcblxuICAgIC8vIFRoZSBQcm9taXNlIHJlc29sdmVzIHdoZW4gdXNlciBjbGlja3MgYW4gYWN0aW9uIGJ1dHRvblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5wb3B1cFNlcnZpY2Uub3BlbihBWFBEaWFsb2dSZW5kZXJlckNvbXBvbmVudCwge1xuICAgICAgICB0aXRsZTogZGlhbG9nQ29uZmlnLnRpdGxlLFxuICAgICAgICBzaXplOiB0aGlzLmRpYWxvZ1N0YXRlLmRpYWxvZ09wdGlvbnM/LnNpemUgfHwgJ21kJyxcbiAgICAgICAgY2xvc2VCdXR0b246IHRoaXMuZGlhbG9nU3RhdGUuZGlhbG9nT3B0aW9ucz8uY2xvc2VCdXR0b24gfHwgZmFsc2UsXG4gICAgICAgIGNsb3NlT25CYWNrZHJvcENsaWNrOiBmYWxzZSxcbiAgICAgICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGNvbmZpZzogZGlhbG9nQ29uZmlnLFxuICAgICAgICAgIGNhbGxCYWNrOiAocmVzdWx0OiBBWFBEaWFsb2dSZWYpID0+IHtcbiAgICAgICAgICAgIC8vIFJlc29sdmUgd2l0aCB0aGUgZGlhbG9nIHJlZmVyZW5jZSB3aGVuIHVzZXIgY2xpY2tzIGFuIGFjdGlvblxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBXaWRnZXQgQnVpbGRlciBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuLyoqXG4gKiBXaWRnZXQgQnVpbGRlciAtIFNpbmdsZSBSZXNwb25zaWJpbGl0eSBQcmluY2lwbGVcbiAqIEhhbmRsZXMgaW5kaXZpZHVhbCB3aWRnZXQgY29uZmlndXJhdGlvbiBhbmQgYnVpbGRpbmdcbiAqL1xuY2xhc3MgV2lkZ2V0QnVpbGRlciBpbXBsZW1lbnRzIElXaWRnZXRCdWlsZGVyIHtcbiAgcHJpdmF0ZSB3aWRnZXRTdGF0ZTogV2lkZ2V0QnVpbGRlclN0YXRlID0ge1xuICAgIHR5cGU6ICd3aWRnZXQnIGFzIGNvbnN0LFxuICAgIG9wdGlvbnM6IHt9IGFzIGFueSxcbiAgfTtcblxuICBwcml2YXRlIGluaGVyaXRhbmNlQ29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0ID0ge307XG5cbiAgY29uc3RydWN0b3IobmFtZT86IHN0cmluZykge1xuICAgIGlmIChuYW1lKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm5hbWUgPSBuYW1lO1xuICAgIH1cbiAgfVxuXG4gIHR5cGUodHlwZTogc3RyaW5nKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIHRoaXMud2lkZ2V0U3RhdGUudHlwZSA9IHR5cGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBuYW1lKG5hbWU6IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICB0aGlzLndpZGdldFN0YXRlLm5hbWUgPSBuYW1lO1xuICAgIGlmICghdGhpcy53aWRnZXRTdGF0ZS5wYXRoKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLnBhdGggPSBuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHBhdGgocGF0aDogc3RyaW5nKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIHRoaXMud2lkZ2V0U3RhdGUucGF0aCA9IHBhdGg7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvcHRpb25zKG9wdGlvbnM6IGFueSk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICAvLyBNZXJnZSBvcHRpb25zIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRvIHByZXNlcnZlIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zID0geyAuLi50aGlzLndpZGdldFN0YXRlLm9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxheW91dCh2YWx1ZTogUGFydGlhbDxBWFBHcmlkTGF5b3V0T3B0aW9ucz4gfCBudW1iZXIpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUubGF5b3V0ID0ge1xuICAgICAgICBwb3NpdGlvbnM6IHtcbiAgICAgICAgICBzbTogeyBjb2xTcGFuOiAxMiB9LFxuICAgICAgICAgIG1kOiB7IGNvbFNwYW46IDEyIH0sXG4gICAgICAgICAgbGc6IHsgY29sU3BhbjogdmFsdWUgfSxcbiAgICAgICAgICB4bDogeyBjb2xTcGFuOiB2YWx1ZSB9LFxuICAgICAgICAgIHh4bDogeyBjb2xTcGFuOiB2YWx1ZSB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5sYXlvdXQgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBtb2RlKG1vZGU6IEFYUFdpZGdldFJlbmRlck1vZGUpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5tb2RlID0gbW9kZTtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5tb2RlID0gbW9kZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHZpc2libGUoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSVdpZGdldEJ1aWxkZXIge1xuICAgIGlmICghdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnMgPSB7fTtcbiAgICB9XG4gICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zWyd2aXNpYmxlJ10gPSBjb25kaXRpb247XG4gICAgdGhpcy5pbmhlcml0YW5jZUNvbnRleHQudmlzaWJsZSA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpc2FibGVkKGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMud2lkZ2V0U3RhdGUub3B0aW9ucykge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9uc1snZGlzYWJsZWQnXSA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5kaXNhYmxlZCA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlYWRvbmx5KGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMud2lkZ2V0U3RhdGUub3B0aW9ucykge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zID0ge307XG4gICAgfVxuICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9uc1sncmVhZG9ubHknXSA9IGNvbmRpdGlvbjtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dC5yZWFkb25seSA9IGNvbmRpdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBJV2lkZ2V0QnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLndpZGdldFN0YXRlLm9wdGlvbnMpIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnNbJ2RpcmVjdGlvbiddID0gZGlyZWN0aW9uO1xuICAgIHRoaXMuaW5oZXJpdGFuY2VDb250ZXh0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEluaGVyaXRhbmNlIGNvbnRleHQgbWV0aG9kc1xuICB3aXRoSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCk6IElXaWRnZXRCdWlsZGVyIHtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dCA9IG1lcmdlSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgLy8gQXBwbHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgdG8gd2lkZ2V0IHN0YXRlXG4gICAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlSW5oZXJpdGVkUHJvcGVydGllcyhjb250ZXh0LCB0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG5cbiAgICAvLyBBbHdheXMgYXBwbHkgaW5oZXJpdGVkIHByb3BlcnRpZXMgKHJlbW92ZSB0aGUgY29uZGl0aW9ucyB0aGF0IGNoZWNrIGlmIGFscmVhZHkgc2V0KVxuICAgIC8vIFRoaXMgYWxsb3dzIHByb3BlcnRpZXMgdG8gYmUgdXBkYXRlZCB3aGVuIGluaGVyaXRhbmNlIGNvbnRleHQgY2hhbmdlc1xuICAgIGlmIChyZXNvbHZlZC5tb2RlKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm1vZGUgPSByZXNvbHZlZC5tb2RlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zKSB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnMgPSB7fTtcblxuICAgIGlmIChyZXNvbHZlZC5kaXNhYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnNbJ2Rpc2FibGVkJ10gPSByZXNvbHZlZC5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZWQucmVhZG9ubHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zWydyZWFkb25seSddID0gcmVzb2x2ZWQucmVhZG9ubHk7XG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVkLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLndpZGdldFN0YXRlLm9wdGlvbnNbJ2RpcmVjdGlvbiddID0gcmVzb2x2ZWQuZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlZC52aXNpYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMud2lkZ2V0U3RhdGUub3B0aW9uc1sndmlzaWJsZSddID0gcmVzb2x2ZWQudmlzaWJsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldEluaGVyaXRhbmNlQ29udGV4dCgpOiBJbmhlcml0YW5jZUNvbnRleHQge1xuICAgIHJldHVybiB7IC4uLnRoaXMuaW5oZXJpdGFuY2VDb250ZXh0IH07XG4gIH1cblxuICBidWlsZCgpOiBBWFBXaWRnZXROb2RlIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy53aWRnZXRTdGF0ZS5uYW1lLFxuICAgICAgdHlwZTogdGhpcy53aWRnZXRTdGF0ZS50eXBlLFxuICAgICAgb3B0aW9uczogdGhpcy53aWRnZXRTdGF0ZS5vcHRpb25zLFxuICAgICAgbW9kZTogdGhpcy53aWRnZXRTdGF0ZS5tb2RlLFxuICAgICAgcGF0aDogdGhpcy53aWRnZXRTdGF0ZS5wYXRoLFxuICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzLndpZGdldFN0YXRlLmRlZmF1bHRWYWx1ZSxcbiAgICB9O1xuICB9XG59XG5cbi8vI3JlZ2lvbiAtLS0tICAgQWN0aW9uIEJ1aWxkZXIgSW1wbGVtZW50YXRpb24gICAtLS0tXG5cbmNsYXNzIEFjdGlvbkJ1aWxkZXIgaW1wbGVtZW50cyBJQWN0aW9uQnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nQnVpbGRlcjogRGlhbG9nQ29udGFpbmVyQnVpbGRlcikge31cblxuICBjYW5jZWwodGV4dD86IHN0cmluZyk6IElBY3Rpb25CdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuZGlhbG9nQnVpbGRlclsnZGlhbG9nU3RhdGUnXS5hY3Rpb25zIS5mb290ZXIhLnN1ZmZpeCkge1xuICAgICAgdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4ID0gW107XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nQnVpbGRlclsnZGlhbG9nU3RhdGUnXS5hY3Rpb25zIS5mb290ZXIhLnN1ZmZpeCEucHVzaCh7XG4gICAgICB0aXRsZTogdGV4dCB8fCAnQGdlbmVyYWw6YWN0aW9ucy5jYW5jZWwudGl0bGUnLFxuICAgICAgaWNvbjogJ2ZhLXRpbWVzJyxcbiAgICAgIGNvbG9yOiAnZGVmYXVsdCcsXG4gICAgICBjb21tYW5kOiB7IG5hbWU6ICdjYW5jZWwnIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdWJtaXQodGV4dD86IHN0cmluZyk6IElBY3Rpb25CdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuZGlhbG9nQnVpbGRlclsnZGlhbG9nU3RhdGUnXS5hY3Rpb25zIS5mb290ZXIhLnN1ZmZpeCkge1xuICAgICAgdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4ID0gW107XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nQnVpbGRlclsnZGlhbG9nU3RhdGUnXS5hY3Rpb25zIS5mb290ZXIhLnN1ZmZpeCEucHVzaCh7XG4gICAgICB0aXRsZTogdGV4dCB8fCAnQGdlbmVyYWw6YWN0aW9ucy5zdWJtaXQudGl0bGUnLFxuICAgICAgaWNvbjogJ2ZhLWNoZWNrJyxcbiAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICBjb21tYW5kOiB7IG5hbWU6ICdzdWJtaXQnLCBvcHRpb25zOiB7IHZhbGlkYXRlOiB0cnVlIH0gfSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGN1c3RvbShhY3Rpb246IEFYUEFjdGlvbk1lbnVJdGVtKTogSUFjdGlvbkJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4KSB7XG4gICAgICB0aGlzLmRpYWxvZ0J1aWxkZXJbJ2RpYWxvZ1N0YXRlJ10uYWN0aW9ucyEuZm9vdGVyIS5zdWZmaXggPSBbXTtcbiAgICB9XG4gICAgdGhpcy5kaWFsb2dCdWlsZGVyWydkaWFsb2dTdGF0ZSddLmFjdGlvbnMhLmZvb3RlciEuc3VmZml4IS5wdXNoKGFjdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgU3RlcCBXaXphcmQgQnVpbGRlciBJbXBsZW1lbnRhdGlvbiAgIC0tLS1cblxuLyoqXG4gKiBTdGVwIEJ1aWxkZXIgLSBCdWlsZHMgaW5kaXZpZHVhbCBzdGVwcyBmb3Igc3RlcCB3aXphcmRcbiAqL1xuY2xhc3MgU3RlcEJ1aWxkZXIge1xuICBwcml2YXRlIGljb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgc2tpcHBhYmxlID0gZmFsc2U7XG4gIHByaXZhdGUgY29udGVudE5vZGU/OiBBWFBXaWRnZXROb2RlO1xuICBwcml2YXRlIGluaGVyaXRhbmNlQ29udGV4dDogSW5oZXJpdGFuY2VDb250ZXh0ID0ge307XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpZDogc3RyaW5nLFxuICAgIHByaXZhdGUgdGl0bGU6IHN0cmluZyxcbiAgKSB7fVxuXG4gIHNldEljb24oaWNvbjogc3RyaW5nKTogU3RlcEJ1aWxkZXIge1xuICAgIHRoaXMuaWNvbiA9IGljb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogU3RlcEJ1aWxkZXIge1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldFNraXBwYWJsZShza2lwcGFibGU6IGJvb2xlYW4pOiBTdGVwQnVpbGRlciB7XG4gICAgdGhpcy5za2lwcGFibGUgPSBza2lwcGFibGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb250ZW50KGRlbGVnYXRlOiAobGF5b3V0QnVpbGRlcjogSUxheW91dEJ1aWxkZXIpID0+IHZvaWQpOiBTdGVwQnVpbGRlciB7XG4gICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAvLyBDcmVhdGUgTGF5b3V0QnVpbGRlciBpbiBpbmplY3Rpb24gY29udGV4dCAod2lsbCBiZSBjYWxsZWQgZnJvbSBjb21wb25lbnQpXG4gICAgICBjb25zdCBsYXlvdXRCdWlsZGVyID0gbmV3IExheW91dEJ1aWxkZXIoKTtcblxuICAgICAgLy8g4pyFIElNUE9SVEFOVDogUHJvcGFnYXRlIGluaGVyaXRhbmNlIGNvbnRleHQgdG8gY29udGVudFxuICAgICAgKGxheW91dEJ1aWxkZXIgYXMgYW55KS5pbmhlcml0YW5jZUNvbnRleHQgPSB7IC4uLnRoaXMuaW5oZXJpdGFuY2VDb250ZXh0IH07XG5cbiAgICAgIGRlbGVnYXRlKGxheW91dEJ1aWxkZXIpO1xuICAgICAgdGhpcy5jb250ZW50Tm9kZSA9IGxheW91dEJ1aWxkZXIuYnVpbGQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCk6IFN0ZXBCdWlsZGVyIHtcbiAgICB0aGlzLmluaGVyaXRhbmNlQ29udGV4dCA9IG1lcmdlSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYnVpbGQoKTogQVhQU3RlcERlZmluaXRpb24ge1xuICAgIGlmICghdGhpcy5jb250ZW50Tm9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGVwICcke3RoaXMuaWR9JyBtdXN0IGhhdmUgY29udGVudGApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogdGhpcy5pZCxcbiAgICAgIHRpdGxlOiB0aGlzLnRpdGxlLFxuICAgICAgaWNvbjogdGhpcy5pY29uLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBza2lwcGFibGU6IHRoaXMuc2tpcHBhYmxlLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50Tm9kZSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogU3RlcCBXaXphcmQgQnVpbGRlciAtIEJ1aWxkcyBzdGVwIHdpemFyZCB3aWRnZXRcbiAqL1xuY2xhc3MgU3RlcFdpemFyZEJ1aWxkZXIgZXh0ZW5kcyBMYXlvdXRDb250YWluZXJNaXhpbjxJU3RlcFdpemFyZEJ1aWxkZXI+IGltcGxlbWVudHMgSVN0ZXBXaXphcmRCdWlsZGVyIHtcbiAgcHJpdmF0ZSBzdGVwczogQVhQU3RlcERlZmluaXRpb25bXSA9IFtdO1xuICBwcml2YXRlIGxpbmVhciA9IHRydWU7XG4gIHByaXZhdGUgd2l6YXJkRGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ2hvcml6b250YWwnO1xuICBwcml2YXRlIGxvb2s/OiBzdHJpbmc7XG4gIHByaXZhdGUgc2hvd0FjdGlvbnM/OiBib29sZWFuOyAvLyB1bmRlZmluZWQgPSBhdXRvLWRldGVjdFxuICBwcml2YXRlIHdpemFyZEFjdGlvbnM/OiBBWFBXaXphcmRBY3Rpb25zO1xuICBwcml2YXRlIGd1YXJkcz86IHtcbiAgICBuZXh0PzogKHBheWxvYWQ6IEFYUFN0ZXBXaXphcmRHdWFyZFBheWxvYWQpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHByZXY/OiAocGF5bG9hZDogQVhQU3RlcFdpemFyZEd1YXJkUGF5bG9hZCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG4gIH07XG4gIHByaXZhdGUgZXZlbnRzPzoge1xuICAgIG9uU3RlcENoYW5nZWQ/OiAoc3RhdHVzOiBBWFBTdGVwV2l6YXJkU3RhdHVzKSA9PiB2b2lkO1xuICAgIG9uQ29tcGxldGU/OiAoc3RhdHVzOiBBWFBTdGVwV2l6YXJkU3RhdHVzKSA9PiB2b2lkO1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdzdGVwLXdpemFyZCcpO1xuICB9XG5cbiAgc2V0TGluZWFyKGxpbmVhcjogYm9vbGVhbik6IElTdGVwV2l6YXJkQnVpbGRlciB7XG4gICAgdGhpcy5saW5lYXIgPSBsaW5lYXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnKTogSVN0ZXBXaXphcmRCdWlsZGVyIHtcbiAgICB0aGlzLndpemFyZERpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldExvb2sobG9vazogc3RyaW5nKTogSVN0ZXBXaXphcmRCdWlsZGVyIHtcbiAgICB0aGlzLmxvb2sgPSBsb29rO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0U2hvd0FjdGlvbnMoc2hvdzogYm9vbGVhbik6IElTdGVwV2l6YXJkQnVpbGRlciB7XG4gICAgdGhpcy5zaG93QWN0aW9ucyA9IHNob3c7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRBY3Rpb25zKGFjdGlvbnM6IEFYUFdpemFyZEFjdGlvbnMpOiBJU3RlcFdpemFyZEJ1aWxkZXIge1xuICAgIHRoaXMud2l6YXJkQWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRHdWFyZHMoZ3VhcmRzOiB7XG4gICAgbmV4dD86IChwYXlsb2FkOiBBWFBTdGVwV2l6YXJkR3VhcmRQYXlsb2FkKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcbiAgICBwcmV2PzogKHBheWxvYWQ6IEFYUFN0ZXBXaXphcmRHdWFyZFBheWxvYWQpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuICB9KTogSVN0ZXBXaXphcmRCdWlsZGVyIHtcbiAgICB0aGlzLmd1YXJkcyA9IGd1YXJkcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEV2ZW50cyhldmVudHM6IHtcbiAgICBvblN0ZXBDaGFuZ2VkPzogKHN0YXR1czogQVhQU3RlcFdpemFyZFN0YXR1cykgPT4gdm9pZDtcbiAgICBvbkNvbXBsZXRlPzogKHN0YXR1czogQVhQU3RlcFdpemFyZFN0YXR1cykgPT4gdm9pZDtcbiAgfSk6IElTdGVwV2l6YXJkQnVpbGRlciB7XG4gICAgdGhpcy5ldmVudHMgPSBldmVudHM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGVwKGlkOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIGRlbGVnYXRlOiAoc3RlcDogU3RlcEJ1aWxkZXIpID0+IHZvaWQpOiBJU3RlcFdpemFyZEJ1aWxkZXIge1xuICAgIGNvbnN0IHN0ZXBCdWlsZGVyID0gbmV3IFN0ZXBCdWlsZGVyKGlkLCB0aXRsZSk7XG5cbiAgICAvLyDinIUgSU1QT1JUQU5UOiBQcm9wYWdhdGUgaW5oZXJpdGFuY2UgY29udGV4dCB0byBzdGVwXG4gICAgc3RlcEJ1aWxkZXIud2l0aEluaGVyaXRhbmNlQ29udGV4dCh0aGlzLmluaGVyaXRhbmNlQ29udGV4dCk7XG5cbiAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgIGRlbGVnYXRlKHN0ZXBCdWlsZGVyKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0ZXBzLnB1c2goc3RlcEJ1aWxkZXIuYnVpbGQoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBvdmVycmlkZSBidWlsZCgpOiBBWFBXaWRnZXROb2RlIHtcbiAgICAvLyDinIUgVmFsaWRhdGlvblxuICAgIGlmICh0aGlzLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGVwV2l6YXJkIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc3RlcCcpO1xuICAgIH1cblxuICAgIC8vIOKchSBDaGVjayBkdXBsaWNhdGUgSURzXG4gICAgY29uc3QgaWRzID0gdGhpcy5zdGVwcy5tYXAoKHMpID0+IHMuaWQpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSBpZHMuZmlsdGVyKChpZCwgaW5kZXgpID0+IGlkcy5pbmRleE9mKGlkKSAhPT0gaW5kZXgpO1xuICAgIGlmIChkdXBsaWNhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHN0ZXAgSURzIGZvdW5kOiAke2R1cGxpY2F0ZXMuam9pbignLCAnKX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZpbml0aW9uOiBBWFBTdGVwV2l6YXJkRGVmaW5pdGlvbiA9IHtcbiAgICAgIHN0ZXBzOiB0aGlzLnN0ZXBzLFxuICAgICAgbGluZWFyOiB0aGlzLmxpbmVhcixcbiAgICAgIGRpcmVjdGlvbjogdGhpcy53aXphcmREaXJlY3Rpb24sXG4gICAgICBsb29rOiB0aGlzLmxvb2ssXG4gICAgICAvLyBEbyBub3QgYXV0by1kZXRlY3QgYmFzZWQgb24gZGlhbG9nIGNvbnRleHQ7IGtlZXAgZXhwbGljaXQgb3IgdW5kZWZpbmVkXG4gICAgICBzaG93QWN0aW9uczogdGhpcy5zaG93QWN0aW9ucyxcbiAgICAgIGFjdGlvbnM6IHRoaXMud2l6YXJkQWN0aW9ucyxcbiAgICAgIGd1YXJkczogdGhpcy5ndWFyZHMsXG4gICAgICBldmVudHM6IHRoaXMuZXZlbnRzLFxuICAgIH07XG5cbiAgICBjb25zdCBub2RlOiBBWFBXaWRnZXROb2RlID0ge1xuICAgICAgbmFtZTogdGhpcy5jb250YWluZXJTdGF0ZS5uYW1lLFxuICAgICAgdHlwZTogJ3N0ZXAtd2l6YXJkJyxcbiAgICAgIG9wdGlvbnM6IHsgZGVmaW5pdGlvbiB9LFxuICAgICAgbW9kZTogdGhpcy5jb250YWluZXJTdGF0ZS5tb2RlLFxuICAgIH07XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxufVxuXG4vLyNlbmRyZWdpb25cbiJdfQ==","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' && formField.children && 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.4\", ngImport: i0, type: AXPLayoutConversionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPLayoutConversionService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPLayoutConversionService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWNvbnZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9sYXlvdXQtY29udmVyc2lvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBVzNDLE1BQU0sT0FBTywwQkFBMEI7SUFIdkM7UUFJRSwrQkFBK0I7UUFFdkIsb0JBQWUsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztRQUNuRCx3QkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQztLQStTM0U7SUE3U0MsWUFBWTtJQUVaLHNDQUFzQztJQUV0Qzs7OztPQUlHO0lBQ0gscUJBQXFCLENBQUMsY0FBd0M7UUFDNUQsb0RBQW9EO1FBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuRSxvQkFBb0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFFLENBQUM7UUFDN0MsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLFVBQVUsR0FBa0I7WUFDaEMsSUFBSSxFQUFFLGFBQWE7WUFDbkIsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixPQUFPLEVBQUU7Z0JBQ1AsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUU7d0JBQ1AsT0FBTyxFQUFFLENBQUM7d0JBQ1YsR0FBRyxFQUFFLE1BQU07cUJBQ1o7aUJBQ0Y7YUFDRjtZQUNELFFBQVEsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFF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QUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYUFdpZGdldE5vZGUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC93aWRnZXQtY29yZSc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBWFBEeW5hbWljRm9ybURlZmluaXRpb24sXG4gIEFYUER5bmFtaWNGb3JtRmllbGREZWZpbml0aW9uLFxuICBBWFBEeW5hbWljRm9ybUdyb3VwRGVmaW5pdGlvbixcbiAgQVhQRHluYW1pY0Zvcm1Nb2RlLFxufSBmcm9tICcuL2xheW91dC1idWlsZGVyLnR5cGVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEFYUExheW91dENvbnZlcnNpb25TZXJ2aWNlIHtcbiAgLy8jcmVnaW9uIC0tLS0gICBDYWNoaW5nICAgLS0tLVxuXG4gIHByaXZhdGUgd2lkZ2V0VHJlZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdpZGdldE5vZGU+KCk7XG4gIHByaXZhdGUgZm9ybURlZmluaXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBBWFBEeW5hbWljRm9ybURlZmluaXRpb24+KCk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBQdWJsaWMgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogQ29udmVydCBBWFBEeW5hbWljRm9ybURlZmluaXRpb24gdG8gQVhQV2lkZ2V0Tm9kZSB0cmVlIHN0cnVjdHVyZVxuICAgKiBHcm91cHMgYmVjb21lIEZpZWxkc2V0IExheW91dHMgd2l0aCBGb3JtIEZpZWxkIHdpZGdldHMgYXMgY2hpbGRyZW5cbiAgICogRmllbGRzIGJlY29tZSBGb3JtIEZpZWxkIHdpZGdldHMgd2l0aCBFZGl0b3Igd2lkZ2V0cyBhcyBjaGlsZHJlblxuICAgKi9cbiAgY29udmVydEZvcm1EZWZpbml0aW9uKGZvcm1EZWZpbml0aW9uOiBBWFBEeW5hbWljRm9ybURlZmluaXRpb24pOiBBWFBXaWRnZXROb2RlIHtcbiAgICAvLyBDcmVhdGUgY2FjaGUga2V5IGJhc2VkIG9uIGZvcm0gZGVmaW5pdGlvbiBjb250ZW50XG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmNyZWF0ZUZvcm1EZWZpbml0aW9uQ2FjaGVLZXkoZm9ybURlZmluaXRpb24pO1xuXG4gICAgLy8gQ2hlY2sgY2FjaGUgZmlyc3RcbiAgICBpZiAodGhpcy53aWRnZXRUcmVlQ2FjaGUuaGFzKGNhY2hlS2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0VHJlZUNhY2hlLmdldChjYWNoZUtleSkhO1xuICAgIH1cblxuICAgIC8vIEdlbmVyYXRlIHdpZGdldCB0cmVlXG4gICAgY29uc3Qgd2lkZ2V0VHJlZTogQVhQV2lkZ2V0Tm9kZSA9IHtcbiAgICAgIHR5cGU6ICdncmlkLWxheW91dCcsXG4gICAgICBuYW1lOiAnZHluYW1pYy1mb3JtLWNvbnRhaW5lcicsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHRpdGxlOiAnRHluYW1pYyBGb3JtJyxcbiAgICAgICAgZ3JpZDoge1xuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGNvbHVtbnM6IDEsXG4gICAgICAgICAgICBnYXA6ICcxcmVtJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBmb3JtRGVmaW5pdGlvbi5ncm91cHMubWFwKChncm91cCkgPT4gdGhpcy5jcmVhdGVHcm91cEFzRmllbGRzZXRXaWRnZXQoZ3JvdXApKSxcbiAgICB9O1xuXG4gICAgLy8gQ2FjaGUgdGhlIHJlc3VsdFxuICAgIHRoaXMud2lkZ2V0VHJlZUNhY2hlLnNldChjYWNoZUtleSwgd2lkZ2V0VHJlZSk7XG5cbiAgICByZXR1cm4gd2lkZ2V0VHJlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IEFYUFdpZGdldE5vZGUgdHJlZSBiYWNrIHRvIEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvblxuICAgKiBQYXJzZXMgRmllbGRzZXQgTGF5b3V0cyBiYWNrIHRvIEdyb3Vwc1xuICAgKiBQYXJzZXMgRm9ybSBGaWVsZCB3aWRnZXRzIGJhY2sgdG8gRmllbGRzXG4gICAqL1xuICBjb252ZXJ0V2lkZ2V0VHJlZVRvRm9ybURlZmluaXRpb24od2lkZ2V0VHJlZTogQVhQV2lkZ2V0Tm9kZSk6IEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvbiB7XG4gICAgLy8gQ3JlYXRlIGNhY2hlIGtleSBiYXNlZCBvbiB3aWRnZXQgdHJlZSBjb250ZW50XG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmNyZWF0ZVdpZGdldFRyZWVDYWNoZUtleSh3aWRnZXRUcmVlKTtcblxuICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgaWYgKHRoaXMuZm9ybURlZmluaXRpb25DYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtRGVmaW5pdGlvbkNhY2hlLmdldChjYWNoZUtleSkhO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHdpZGdldCB0cmVlXG4gICAgY29uc3QgZ3JvdXBzOiBBWFBEeW5hbWljRm9ybUdyb3VwRGVmaW5pdGlvbltdID0gW107XG5cbiAgICBpZiAod2lkZ2V0VHJlZS5jaGlsZHJlbikge1xuICAgICAgd2lkZ2V0VHJlZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gJ2ZpZWxkc2V0LWxheW91dCcpIHtcbiAgICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZXh0cmFjdEdyb3VwRnJvbUZpZWxkc2V0KGNoaWxkKTtcbiAgICAgICAgICBncm91cHMucHVzaChncm91cCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1EZWZpbml0aW9uID0geyBncm91cHMgfTtcblxuICAgIC8vIENhY2hlIHRoZSByZXN1bHRcbiAgICB0aGlzLmZvcm1EZWZpbml0aW9uQ2FjaGUuc2V0KGNhY2hlS2V5LCBmb3JtRGVmaW5pdGlvbik7XG5cbiAgICByZXR1cm4gZm9ybURlZmluaXRpb247XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhhdCBhIHdpZGdldCB0cmVlIHJlcHJlc2VudHMgYSB2YWxpZCBkeW5hbWljIGZvcm0gc3RydWN0dXJlXG4gICAqL1xuICB2YWxpZGF0ZUZvcm1XaWRnZXRUcmVlKHdpZGdldFRyZWU6IEFYUFdpZGdldE5vZGUpOiBib29sZWFuIHtcbiAgICBpZiAoIXdpZGdldFRyZWUgfHwgd2lkZ2V0VHJlZS50eXBlICE9PSAnZ3JpZC1sYXlvdXQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF3aWRnZXRUcmVlLmNoaWxkcmVuIHx8IHdpZGdldFRyZWUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTsgLy8gRW1wdHkgZm9ybSBpcyB2YWxpZFxuICAgIH1cblxuICAgIC8vIENoZWNrIHRoYXQgYWxsIGNoaWxkcmVuIGFyZSBmaWVsZHNldC1sYXlvdXQgd2lkZ2V0c1xuICAgIHJldHVybiB3aWRnZXRUcmVlLmNoaWxkcmVuLmV2ZXJ5KFxuICAgICAgKGNoaWxkKSA9PlxuICAgICAgICBjaGlsZC50eXBlID09PSAnZmllbGRzZXQtbGF5b3V0JyAmJlxuICAgICAgICBjaGlsZC5jaGlsZHJlbiAmJlxuICAgICAgICBjaGlsZC5jaGlsZHJlbi5ldmVyeShcbiAgICAgICAgICAoZm9ybUZpZWxkKSA9PiBmb3JtRmllbGQudHlwZSA9PT0gJ2Zvcm0tZmllbGQnICYmIGZvcm1GaWVsZC5jaGlsZHJlbiAmJiBmb3JtRmllbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCxcbiAgICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjYWNoZXNcbiAgICovXG4gIGNsZWFyQ2FjaGVzKCk6IHZvaWQge1xuICAgIHRoaXMud2lkZ2V0VHJlZUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5mb3JtRGVmaW5pdGlvbkNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNhY2hlIHN0YXRpc3RpY3NcbiAgICovXG4gIGdldENhY2hlU3RhdHMoKTogeyB3aWRnZXRUcmVlQ2FjaGVTaXplOiBudW1iZXI7IGZvcm1EZWZpbml0aW9uQ2FjaGVTaXplOiBudW1iZXIgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZGdldFRyZWVDYWNoZVNpemU6IHRoaXMud2lkZ2V0VHJlZUNhY2hlLnNpemUsXG4gICAgICBmb3JtRGVmaW5pdGlvbkNhY2hlU2l6ZTogdGhpcy5mb3JtRGVmaW5pdGlvbkNhY2hlLnNpemUsXG4gICAgfTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHJpdmF0ZSBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgc2luZ2xlIGdyb3VwIHRvIEZpZWxkc2V0IHdpZGdldCBzdHJ1Y3R1cmVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlR3JvdXBBc0ZpZWxkc2V0V2lkZ2V0KGdyb3VwOiBBWFBEeW5hbWljRm9ybUdyb3VwRGVmaW5pdGlvbik6IEFYUFdpZGdldE5vZGUge1xuICAgIC8vIERldGVybWluZSBjb2x1bW5zIGNvdW50IGZyb20gbGF5b3V0IG9yIGRlZmF1bHQgdG8gMVxuICAgIGNvbnN0IGNvbHVtbnNDb3VudCA9IDE7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogJ2ZpZWxkc2V0LWxheW91dCcsXG4gICAgICBuYW1lOiBncm91cC5uYW1lLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICB0aXRsZTogZ3JvdXAudGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBncm91cC5kZXNjcmlwdGlvbixcbiAgICAgICAgY29sczogY29sdW1uc0NvdW50LFxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiB0aGlzLmNyZWF0ZUZpZWxkV2lkZ2V0cyhncm91cC5wYXJhbWV0ZXJzLCBjb2x1bW5zQ291bnQpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBmaWVsZHMgdG8gRm9ybSBGaWVsZCB3aWRnZXRzXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZUZpZWxkV2lkZ2V0cyhmaWVsZHM6IEFYUER5bmFtaWNGb3JtRmllbGREZWZpbml0aW9uW10sIGNvbHVtbnNDb3VudDogbnVtYmVyKTogQVhQV2lkZ2V0Tm9kZVtdIHtcbiAgICByZXR1cm4gZmllbGRzLm1hcCgoZmllbGQpID0+IHRoaXMuY3JlYXRlRm9ybUZpZWxkV2lkZ2V0KGZpZWxkKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIHNpbmdsZSBmaWVsZCB0byBGb3JtIEZpZWxkIHdpZGdldCB3aXRoIGVkaXRvciBhcyBjaGlsZFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtRmllbGRXaWRnZXQoZmllbGQ6IEFYUER5bmFtaWNGb3JtRmllbGREZWZpbml0aW9uKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6ICdmb3JtLWZpZWxkJyxcbiAgICAgIG5hbWU6IGZpZWxkLnBhdGgsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGxhYmVsOiBmaWVsZC50aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGZpZWxkLmRlc2NyaXB0aW9uLFxuICAgICAgICBzaG93TGFiZWw6IHRydWUsXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtmaWVsZC53aWRnZXRdLCAvLyBUaGUgZWRpdG9yIHdpZGdldCBiZWNvbWVzIGEgY2hpbGQgb2YgZm9ybS1maWVsZFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBncm91cCBpbmZvcm1hdGlvbiBmcm9tIEZpZWxkc2V0IExheW91dCB3aWRnZXRcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdEdyb3VwRnJvbUZpZWxkc2V0KGZpZWxkc2V0Tm9kZTogQVhQV2lkZ2V0Tm9kZSk6IEFYUER5bmFtaWNGb3JtR3JvdXBEZWZpbml0aW9uIHtcbiAgICBjb25zdCBjb2x1bW5zQ291bnQgPSBmaWVsZHNldE5vZGUub3B0aW9ucz8uWydjb2xzJ10gfHwgMTtcblxuICAgIC8vIEV4dHJhY3QgZmllbGRzIGRpcmVjdGx5IGZyb20gZmllbGRzZXQgY2hpbGRyZW5cbiAgICBjb25zdCBmaWVsZHM6IEFYUER5bmFtaWNGb3JtRmllbGREZWZpbml0aW9uW10gPSBbXTtcblxuICAgIGlmIChmaWVsZHNldE5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGZpZWxkc2V0Tm9kZS5jaGlsZHJlbi5mb3JFYWNoKChmb3JtRmllbGQpID0+IHtcbiAgICAgICAgaWYgKGZvcm1GaWVsZC50eXBlID09PSAnZm9ybS1maWVsZCcgJiYgZm9ybUZpZWxkLmNoaWxkcmVuICYmIGZvcm1GaWVsZC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmV4dHJhY3RGaWVsZEZyb21Gb3JtV2lkZ2V0KGZvcm1GaWVsZCk7XG4gICAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICBmaWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogZmllbGRzZXROb2RlLm5hbWUgfHwgYGdyb3VwLSR7RGF0ZS5ub3coKX1gLFxuICAgICAgdGl0bGU6IGZpZWxkc2V0Tm9kZS5vcHRpb25zPy5bJ3RpdGxlJ10sXG4gICAgICBkZXNjcmlwdGlvbjogZmllbGRzZXROb2RlLm9wdGlvbnM/LlsnZGVzY3JpcHRpb24nXSxcbiAgICAgIHBhcmFtZXRlcnM6IGZpZWxkcyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZmllbGQgaW5mb3JtYXRpb24gZnJvbSBGb3JtIEZpZWxkIHdpZGdldFxuICAgKi9cbiAgcHJpdmF0ZSBleHRyYWN0RmllbGRGcm9tRm9ybVdpZGdldChmb3JtRmllbGROb2RlOiBBWFBXaWRnZXROb2RlKTogQVhQRHluYW1pY0Zvcm1GaWVsZERlZmluaXRpb24gfCBudWxsIHtcbiAgICBpZiAoIWZvcm1GaWVsZE5vZGUuY2hpbGRyZW4gfHwgZm9ybUZpZWxkTm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGVkaXRvcldpZGdldCA9IGZvcm1GaWVsZE5vZGUuY2hpbGRyZW5bMF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogZm9ybUZpZWxkTm9kZS5uYW1lIHx8IGVkaXRvcldpZGdldC5uYW1lIHx8IGBmaWVsZC0ke0RhdGUubm93KCl9YCxcbiAgICAgIHRpdGxlOiBmb3JtRmllbGROb2RlLm9wdGlvbnM/LlsnbGFiZWwnXSxcbiAgICAgIGRlc2NyaXB0aW9uOiBmb3JtRmllbGROb2RlLm9wdGlvbnM/LlsnZGVzY3JpcHRpb24nXSxcbiAgICAgIHdpZGdldDogZWRpdG9yV2lkZ2V0LFxuICAgICAgbW9kZTogZm9ybUZpZWxkTm9kZS5tb2RlIGFzIEFYUER5bmFtaWNGb3JtTW9kZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBjYWNoZSBrZXkgZm9yIGZvcm0gZGVmaW5pdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtRGVmaW5pdGlvbkNhY2hlS2V5KGZvcm1EZWZpbml0aW9uOiBBWFBEeW5hbWljRm9ybURlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIC8vIENyZWF0ZSBhIGhhc2gtbGlrZSBrZXkgaW5zdGVhZCBvZiBmdWxsIEpTT04gc3RyaW5nXG4gICAgY29uc3Qga2V5UGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBrZXlQYXJ0cy5wdXNoKGBncm91cHM6JHtmb3JtRGVmaW5pdGlvbi5ncm91cHMubGVuZ3RofWApO1xuXG4gICAgZm9ybURlZmluaXRpb24uZ3JvdXBzLmZvckVhY2goKGdyb3VwLCBncm91cEluZGV4KSA9PiB7XG4gICAgICBrZXlQYXJ0cy5wdXNoKGBnJHtncm91cEluZGV4fToke2dyb3VwLm5hbWV9OiR7Z3JvdXAucGFyYW1ldGVycy5sZW5ndGh9YCk7XG5cbiAgICAgIGdyb3VwLnBhcmFtZXRlcnMuZm9yRWFjaCgocGFyYW0sIHBhcmFtSW5kZXgpID0+IHtcbiAgICAgICAga2V5UGFydHMucHVzaChgcCR7Z3JvdXBJbmRleH0uJHtwYXJhbUluZGV4fToke3BhcmFtLnBhdGh9OiR7cGFyYW0ud2lkZ2V0LnR5cGV9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmIChmb3JtRGVmaW5pdGlvbi5tb2RlKSB7XG4gICAgICBrZXlQYXJ0cy5wdXNoKGBtb2RlOiR7Zm9ybURlZmluaXRpb24ubW9kZX1gKTtcbiAgICB9XG5cbiAgICAvLyBKb2luIHdpdGggZGVsaW1pdGVyIGFuZCBjcmVhdGUgYSBzaG9ydGVyIGhhc2hcbiAgICBjb25zdCBrZXlTdHJpbmcgPSBrZXlQYXJ0cy5qb2luKCd8Jyk7XG5cbiAgICAvLyBJZiBzdGlsbCB0b28gbG9uZywgY3JlYXRlIGEgc2ltcGxlIGhhc2hcbiAgICBpZiAoa2V5U3RyaW5nLmxlbmd0aCA+IDEwMCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2ltcGxlSGFzaChrZXlTdHJpbmcpO1xuICAgIH1cblxuICAgIHJldHVybiBrZXlTdHJpbmc7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGNhY2hlIGtleSBmb3Igd2lkZ2V0IHRyZWVcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlV2lkZ2V0VHJlZUNhY2hlS2V5KHdpZGdldFRyZWU6IEFYUFdpZGdldE5vZGUpOiBzdHJpbmcge1xuICAgIC8vIENyZWF0ZSBhIGhhc2gtbGlrZSBrZXkgaW5zdGVhZCBvZiBmdWxsIEpTT04gc3RyaW5nXG4gICAgY29uc3Qga2V5UGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBrZXlQYXJ0cy5wdXNoKGB0eXBlOiR7d2lkZ2V0VHJlZS50eXBlfWApO1xuXG4gICAgaWYgKHdpZGdldFRyZWUubmFtZSkge1xuICAgICAga2V5UGFydHMucHVzaChgbmFtZToke3dpZGdldFRyZWUubmFtZX1gKTtcbiAgICB9XG5cbiAgICBpZiAod2lkZ2V0VHJlZS5jaGlsZHJlbikge1xuICAgICAga2V5UGFydHMucHVzaChgY2hpbGRyZW46JHt3aWRnZXRUcmVlLmNoaWxkcmVuLmxlbmd0aH1gKTtcblxuICAgICAgd2lkZ2V0VHJlZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAga2V5UGFydHMucHVzaChgYyR7aW5kZXh9OiR7Y2hpbGQudHlwZX1gKTtcblxuICAgICAgICBpZiAoY2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICBrZXlQYXJ0cy5wdXNoKGBjYyR7aW5kZXh9OiR7Y2hpbGQuY2hpbGRyZW4ubGVuZ3RofWApO1xuXG4gICAgICAgICAgY2hpbGQuY2hpbGRyZW4uZm9yRWFjaCgoZ3JhbmRDaGlsZCwgZ0luZGV4KSA9PiB7XG4gICAgICAgICAgICBrZXlQYXJ0cy5wdXNoKGBnYyR7aW5kZXh9LiR7Z0luZGV4fToke2dyYW5kQ2hpbGQudHlwZX1gKTtcblxuICAgICAgICAgICAgaWYgKGdyYW5kQ2hpbGQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAga2V5UGFydHMucHVzaChgZ2NjJHtpbmRleH0uJHtnSW5kZXh9OiR7Z3JhbmRDaGlsZC5jaGlsZHJlbi5sZW5ndGh9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEpvaW4gd2l0aCBkZWxpbWl0ZXIgYW5kIGNyZWF0ZSBhIHNob3J0ZXIgaGFzaFxuICAgIGNvbnN0IGtleVN0cmluZyA9IGtleVBhcnRzLmpvaW4oJ3wnKTtcblxuICAgIC8vIElmIHN0aWxsIHRvbyBsb25nLCBjcmVhdGUgYSBzaW1wbGUgaGFzaFxuICAgIGlmIChrZXlTdHJpbmcubGVuZ3RoID4gMTAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVTaW1wbGVIYXNoKGtleVN0cmluZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGtleVN0cmluZztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzaW1wbGUgaGFzaCBmcm9tIGEgc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIGNyZWF0ZVNpbXBsZUhhc2goc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBoYXNoID0gMDtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgY2hhcjtcbiAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDsgLy8gQ29udmVydCB0byAzMi1iaXQgaW50ZWdlclxuICAgIH1cblxuICAgIHJldHVybiBNYXRoLmFicyhoYXNoKS50b1N0cmluZygzNik7IC8vIENvbnZlcnQgdG8gYmFzZTM2IGZvciBzaG9ydGVyIHN0cmluZ1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=","import { AXFormComponent, AXFormModule } from '@acorex/components/form';\nimport { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { AXPPageStatus, AXPWidgetContainerComponent, AXPWidgetCoreModule, } from '@acorex/platform/layout/widget-core';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, effect, inject, input, model, output, signal, viewChild, } from '@angular/core';\nimport { cloneDeep, get, isEqual } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, startWith, Subject } from 'rxjs';\nimport { AXPLayoutConversionService } from './layout-conversion.service';\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 /**\n * Initial context for reset functionality\n */\n this.initialContext = {};\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 const ctx = this.context() ?? {};\n this.internalContext.set(ctx);\n // Store initial context for reset functionality\n this.initialContext = cloneDeep(ctx);\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 /**\n * Clear the form context\n */\n clear() {\n // Clear internal context\n this.internalContext.set({});\n // Update the model signal\n this.context.set({});\n }\n /**\n * Reset the form to its initial state\n */\n reset() {\n // Reset to initial context\n const resetContext = cloneDeep(this.initialContext);\n this.internalContext.set(resetContext);\n // Update the model signal\n this.context.set(resetContext);\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 && typeof data === 'object' && 'groups' in data && 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.4\", ngImport: i0, type: AXPLayoutRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.4\", 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.4\", 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9sYXlvdXQtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEUsT0FBTyxFQUErQiw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25HLE9BQU8sRUFDTCxhQUFhLEVBQ2IsMkJBQTJCLEVBRTNCLG1CQUFtQixHQUVwQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBRUwsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU5RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7OztBQXlCekUsTUFBTSxPQUFPLDBCQUEwQjtJQXZCdkM7UUF3QlUscUJBQWdCLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFDekQsc0JBQWlCLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFL0Q7O1dBRUc7UUFDSyxvQkFBZSxHQUFHLENBQUMsQ0FBQztRQUU1Qjs7V0FFRztRQUNLLHlCQUFvQixHQUFHLElBQUks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R0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLElBQUksR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsNEJBQTRCO1FBQ2xELENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDOzhHQXpZVSwwQkFBMEI7a0dBQTFCLDBCQUEwQixrdEJBcUpaLGVBQWUsNEZBQ1YsMkJBQTJCLGdFQXhLL0M7Ozs7Ozs7O0dBUVQsMEdBVlMsWUFBWSw4QkFBRSxtQkFBbUIsOFpBQUUsWUFBWTs7MkZBb0I5QywwQkFBMEI7a0JBdkJ0QyxTQUFTOytCQUNFLHFCQUFxQixjQUNuQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLG1CQUN6Qyx1QkFBdUIsQ0FBQyxNQUFNLFlBQ3JDOzs7Ozs7OztHQVFUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhGb3JtQ29tcG9uZW50LCBBWEZvcm1Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZm9ybSc7XG5pbXBvcnQgeyBBWFZhbGlkYXRpb25TdW1tYXJ5IH0gZnJvbSAnQGFjb3JleC9jb3JlL3ZhbGlkYXRpb24nO1xuaW1wb3J0IHsgQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlLCBBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2VydmljZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQge1xuICBBWFBQYWdlU3RhdHVzLFxuICBBWFBXaWRnZXRDb250YWluZXJDb21wb25lbnQsXG4gIEFYUFdpZGdldENvcmVDb250ZXh0Q2hhbmdlRXZlbnQsXG4gIEFYUFdpZGdldENvcmVNb2R1bGUsXG4gIEFYUFdpZGdldE5vZGUsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L3dpZGdldC1jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG1vZGVsLFxuICBPbkluaXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBnZXQsIGlzRXF1YWwgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBEeW5hbWljRm9ybURlZmluaXRpb24sIEFYUER5bmFtaWNGb3JtTG9vaywgQVhQRHluYW1pY0Zvcm1Nb2RlIH0gZnJvbSAnLi9sYXlvdXQtYnVpbGRlci50eXBlcyc7XG5pbXBvcnQgeyBBWFBMYXlvdXRDb252ZXJzaW9uU2VydmljZSB9IGZyb20gJy4vbGF5b3V0LWNvbnZlcnNpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1sYXlvdXQtcmVuZGVyZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBBWFBXaWRnZXRDb3JlTW9kdWxlLCBBWEZvcm1Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8YXgtZm9ybT5cbiAgICAgIDxheHAtd2lkZ2V0cy1jb250YWluZXIgW2NvbnRleHRdPVwiaW50ZXJuYWxDb250ZXh0KClcIiAob25Db250ZXh0Q2hhbmdlZCk9XCJoYW5kbGVDb250ZXh0Q2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgIEBpZiAod2lkZ2V0VHJlZSgpKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBheHAtd2lkZ2V0LXJlbmRlcmVyIFtub2RlXT1cIndpZGdldFRyZWUoKSFcIiBbbW9kZV09XCJtb2RlKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC9heHAtd2lkZ2V0cy1jb250YWluZXI+XG4gICAgPC9heC1mb3JtPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBMYXlvdXRSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgZXZhbHVhdG9yU2VydmljZSA9IGluamVjdChBWFBFeHByZXNzaW9uRXZhbHVhdG9yU2VydmljZSk7XG4gIHByaXZhdGUgY29udmVyc2lvblNlcnZpY2UgPSBpbmplY3QoQVhQTGF5b3V0Q29udmVyc2lvblNlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBUcmFja3MgdGhlIGxhdGVzdCBzY2hlZHVsZWQgZXZhbHVhdGlvbiB0byBlbnN1cmUgbGFzdC13cml0ZS13aW5zIGZvciBhc3luYyBldmFsdWF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBldmFsdWF0aW9uUnVuSWQgPSAwO1xuXG4gIC8qKlxuICAgKiBSeEpTIHN1YmplY3RzIGZvciBjb250ZXh0IG1hbmFnZW1lbnRcbiAgICovXG4gIHByaXZhdGUgY29udGV4dFVwZGF0ZVN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHByaXZhdGUgY29udGV4dENoYW5nZVN1YmplY3QgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIENhY2hlIGZvciBleHByZXNzaW9uIGV2YWx1YXRpb24gcmVzdWx0c1xuICAgKi9cbiAgcHJpdmF0ZSBleHByZXNzaW9uQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuXG4gIC8qKlxuICAgKiBDYWNoZSBmb3Igd2lkZ2V0IHRyZWUgY29tcGFyaXNvbnNcbiAgICovXG4gIHByaXZhdGUgd2lkZ2V0VHJlZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIEFYUFdpZGdldE5vZGU+KCk7XG5cbiAgLyoqXG4gICAqIExhc3QgbGF5b3V0IGhhc2ggZm9yIGNoYW5nZSBkZXRlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgbGFzdExheW91dEhhc2ggPSAnJztcblxuICAvLyNyZWdpb24gLS0tLSAgIElucHV0cyAgIC0tLS1cblxuICAvKipcbiAgICogRm9ybSBkZWZpbml0aW9uIGNvbnRhaW5pbmcgZ3JvdXBzIGFuZCBmaWVsZHMgT1Igd2lkZ2V0IHRyZWVcbiAgICovXG4gIGxheW91dCA9IGlucHV0LnJlcXVpcmVkPEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvbiB8IEFYUFdpZGdldE5vZGU+KCk7XG5cbiAgLyoqXG4gICAqIEZvcm0gY29udGV4dC9tb2RlbCBkYXRhXG4gICAqL1xuICBjb250ZXh0ID0gbW9kZWw8YW55Pih7fSk7XG5cbiAgLyoqXG4gICAqIEZvcm0gYXBwZWFyYW5jZSBhbmQgZGVuc2l0eSBzdHlsaW5nIChub3JtYWwsIGNvbXBhY3QsIHNwYWNpb3VzKVxuICAgKi9cbiAgbG9vayA9IGlucHV0PEFYUER5bmFtaWNGb3JtTG9vaz4oJ2ZpZWxkc2V0Jyk7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgZm9ybSBtb2RlLiBDYW4gYmUgb3ZlcnJpZGRlbiBieSBzZWN0aW9uL2dyb3VwIGFuZCBmaWVsZC5cbiAgICovXG4gIG1vZGUgPSBpbnB1dDxBWFBEeW5hbWljRm9ybU1vZGU+KCdlZGl0Jyk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBXaWRnZXQgVHJlZSBDb252ZXJzaW9uICAgLS0tLVxuXG4gIHByb3RlY3RlZCB3aWRnZXRUcmVlID0gc2lnbmFsPEFYUFdpZGdldE5vZGUgfCBudWxsPihudWxsKTtcblxuICAvKipcbiAgICogQ29udmVydCBhbmQgZXZhbHVhdGUgZGF0YSB3aGVuIGlucHV0cyBjaGFuZ2UgKG9wdGltaXplZCB3aXRoIFJ4SlMpXG4gICAqL1xuICBjb252ZXJzaW9uRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpbnB1dERhdGEgPSB0aGlzLmxheW91dCgpO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuaW50ZXJuYWxDb250ZXh0KCk7XG4gICAgY29uc3QgbG9vayA9IHRoaXMubG9vaygpO1xuICAgIGNvbnN0IHJ1bklkID0gKyt0aGlzLmV2YWx1YXRpb25SdW5JZDtcblxuICAgIC8vIEdlbmVyYXRlIGxheW91dCBoYXNoIGZvciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgY29uc3QgbGF5b3V0SGFzaCA9IHRoaXMuZ2VuZXJhdGVMYXlvdXRIYXNoKGlucHV0RGF0YSwgbG9vayk7XG5cbiAgICAvLyBTa2lwIGlmIGxheW91dCBoYXNuJ3QgY2hhbmdlZFxuICAgIGlmIChsYXlvdXRIYXNoID09PSB0aGlzLmxhc3RMYXlvdXRIYXNoICYmIHRoaXMud2lkZ2V0VHJlZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0TGF5b3V0SGFzaCA9IGxheW91dEhhc2g7XG5cbiAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gRmlyc3QgZXZhbHVhdGUgZXhwcmVzc2lvbnMgaWYgbmVlZGVkXG4gICAgICBjb25zdCBldmFsdWF0ZWQgPSBhd2FpdCB0aGlzLmV4cHJlc3Npb25FdmFsdWF0b3IoaW5wdXREYXRhLCBjdHgpO1xuXG4gICAgICAvLyBJZ25vcmUgc3RhbGUgcmVzdWx0c1xuICAgICAgaWYgKHJ1bklkICE9PSB0aGlzLmV2YWx1YXRpb25SdW5JZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENvbnZlcnQgdG8gd2lkZ2V0IHRyZWUgKHRoaXMgd2lsbCBhbHNvIGFwcGx5IHRoZSBsYXlvdXQgbG9vaylcbiAgICAgIGNvbnN0IHRyZWUgPSBldmFsdWF0ZWQ7XG5cbiAgICAgIC8vIFVwZGF0ZSB3aWRnZXQgdHJlZVxuICAgICAgY29uc3QgcHJldiA9IHRoaXMud2lkZ2V0VHJlZSgpO1xuICAgICAgaWYgKCFpc0VxdWFsKHByZXYsIHRyZWUpKSB7XG4gICAgICAgIHRyZWUubW9kZSA9IHRoaXMubW9kZSgpO1xuICAgICAgICB0aGlzLndpZGdldFRyZWUuc2V0KHRyZWUpO1xuICAgICAgfVxuICAgIH0pKCk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBhc3luYyBleHByZXNzaW9uRXZhbHVhdG9yKGV4cHJlc3Npb246IGFueSwgY29udGV4dDogYW55KSB7XG4gICAgLy8gQ2hlY2sgaWYgaXQncyBhIGZvcm0gZGVmaW5pdGlvbiB0aGF0IG5lZWRzIGNvbnZlcnNpb25cbiAgICBpZiAodGhpcy5pc0Zvcm1EZWZpbml0aW9uKGV4cHJlc3Npb24pKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJzaW9uU2VydmljZS5jb252ZXJ0Rm9ybURlZmluaXRpb24oZXhwcmVzc2lvbik7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgY2FjaGUga2V5IHVzaW5nIGEgbW9yZSBlZmZpY2llbnQgbWV0aG9kXG4gICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmdlbmVyYXRlQ2FjaGVLZXkoZXhwcmVzc2lvbiwgY29udGV4dCk7XG5cbiAgICAvLyBDaGVjayBjYWNoZSBmaXJzdFxuICAgIGlmICh0aGlzLmV4cHJlc3Npb25DYWNoZS5oYXMoY2FjaGVLZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5leHByZXNzaW9uQ2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBzY29wZTogQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNjb3BlID0ge1xuICAgICAgY29udGV4dDoge1xuICAgICAgICBldmFsOiAocGF0aDogc3RyaW5nKSA9PiBnZXQoY29udGV4dCwgcGF0aCksXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV2YWx1YXRvclNlcnZpY2UuZXZhbHVhdGUoZXhwcmVzc2lvbiwgc2NvcGUpO1xuXG4gICAgLy8gQ2FjaGUgcmVzdWx0IHdpdGggTFJVLWxpa2UgYmVoYXZpb3JcbiAgICBpZiAodGhpcy5leHByZXNzaW9uQ2FjaGUuc2l6ZSA+IDUwKSB7XG4gICAgICAvLyBDbGVhciBoYWxmIHRoZSBjYWNoZSB3aGVuIGl0IGdldHMgdG9vIGxhcmdlXG4gICAgICBjb25zdCBrZXlzVG9EZWxldGUgPSBBcnJheS5mcm9tKHRoaXMuZXhwcmVzc2lvbkNhY2hlLmtleXMoKSkuc2xpY2UoMCwgMjUpO1xuICAgICAga2V5c1RvRGVsZXRlLmZvckVhY2goKGtleSkgPT4gdGhpcy5leHByZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSkpO1xuICAgIH1cbiAgICB0aGlzLmV4cHJlc3Npb25DYWNoZS5zZXQoY2FjaGVLZXksIHJlc3VsdCk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBPdXRwdXRzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gY29udGV4dCBjaGFuZ2UgaXMgaW5pdGlhdGVkXG4gICAqL1xuICBjb250ZXh0SW5pdGlhdGVkID0gb3V0cHV0PGFueT4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGZvcm0gYmVjb21lcyB2YWxpZC9pbnZhbGlkXG4gICAqL1xuICB2YWxpZGl0eUNoYW5nZSA9IG91dHB1dDxib29sZWFuPigpO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUHJvcGVydGllcyAgIC0tLS1cblxuICBwcml2YXRlIGZvcm0gPSB2aWV3Q2hpbGQoQVhGb3JtQ29tcG9uZW50KTtcbiAgcHJpdmF0ZSBjb250YWluZXIgPSB2aWV3Q2hpbGQoQVhQV2lkZ2V0Q29udGFpbmVyQ29tcG9uZW50KTtcblxuICAvKipcbiAgICogSW50ZXJuYWwgY29udGV4dCBzaWduYWwgZm9yIHJlYWN0aXZpdHlcbiAgICovXG4gIHByb3RlY3RlZCBpbnRlcm5hbENvbnRleHQgPSBzaWduYWw8YW55Pih7fSk7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgY29udGV4dCBmb3IgcmVzZXQgZnVuY3Rpb25hbGl0eVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsQ29udGV4dDogYW55ID0ge307XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBMaWZlY3ljbGUgTWV0aG9kcyAgIC0tLS1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBJbml0aWFsaXplIGludGVybmFsIGNvbnRleHQgd2l0aCBpbnB1dCBjb250ZXh0XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jb250ZXh0KCkgPz8ge307XG4gICAgdGhpcy5pbnRlcm5hbENvbnRleHQuc2V0KGN0eCk7XG5cbiAgICAvLyBTdG9yZSBpbml0aWFsIGNvbnRleHQgZm9yIHJlc2V0IGZ1bmN0aW9uYWxpdHlcbiAgICB0aGlzLmluaXRpYWxDb250ZXh0ID0gY2xvbmVEZWVwKGN0eCk7XG5cbiAgICAvLyBTZXR1cCBSeEpTIHN0cmVhbXMgZm9yIGNvbnRleHQgbWFuYWdlbWVudFxuICAgIHRoaXMuc2V0dXBDb250ZXh0U3RyZWFtcygpO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBFZmZlY3RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBFZmZlY3QgdG8gc3luYyBjb250ZXh0IGNoYW5nZXMgZnJvbSBleHRlcm5hbCB0byBpbnRlcm5hbCAob3B0aW1pemVkIHdpdGggUnhKUylcbiAgICovXG4gICNjb250ZXh0U3luY0VmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jb250ZXh0KCkgPz8ge307XG4gICAgdGhpcy5jb250ZXh0VXBkYXRlU3ViamVjdC5uZXh0KGN0eCk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBFZmZlY3QgdG8gaGFuZGxlIHdpZGdldCB0cmVlIHN0YXR1cyBjaGFuZ2VzXG4gICAqL1xuICAjd2lkZ2V0U3RhdHVzRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCB3aWRnZXRUcmVlID0gdGhpcy53aWRnZXRUcmVlKCk7XG4gICAgaWYgKHdpZGdldFRyZWUpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyKCk/LmJ1aWxkZXJTZXJ2aWNlLnNldFN0YXR1cyhBWFBQYWdlU3RhdHVzLlJlbmRlcmVkKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgRXZlbnQgSGFuZGxlcnMgICAtLS0tXG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjb250ZXh0IGNoYW5nZSBldmVudHMgZnJvbSB3aWRnZXQgY29udGFpbmVyIChvcHRpbWl6ZWQgd2l0aCBSeEpTKVxuICAgKi9cbiAgcHJvdGVjdGVkIGhhbmRsZUNvbnRleHRDaGFuZ2VkKGV2ZW50OiBBWFBXaWRnZXRDb3JlQ29udGV4dENoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LnN0YXRlID09PSAnaW5pdGlhdGVkJykge1xuICAgICAgdGhpcy5jb250ZXh0SW5pdGlhdGVkLmVtaXQoZXZlbnQuZGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGV4dENoYW5nZVN1YmplY3QubmV4dChldmVudC5kYXRhID8/IHt9KTtcbiAgICB9XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFB1YmxpYyBNZXRob2RzICAgLS0tLVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZvcm0gY29tcG9uZW50IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgZ2V0Rm9ybSgpOiBBWEZvcm1Db21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZvcm0oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHdpZGdldCBjb250YWluZXIgY29tcG9uZW50IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29udGFpbmVyKCk6IEFYUFdpZGdldENvbnRhaW5lckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgZm9ybSBjb250ZXh0XG4gICAqL1xuICBwdWJsaWMgZ2V0Q29udGV4dCgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmludGVybmFsQ29udGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBmb3JtIGNvbnRleHQgcHJvZ3JhbW1hdGljYWxseVxuICAgKi9cbiAgcHVibGljIHVwZGF0ZUNvbnRleHQoY29udGV4dDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pbnRlcm5hbENvbnRleHQuc2V0KGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCB3aWRnZXQgdHJlZVxuICAgKi9cbiAgcHVibGljIGdldFdpZGdldFRyZWUoKTogQVhQV2lkZ2V0Tm9kZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLndpZGdldFRyZWUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgZm9ybVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlKCk6IFByb21pc2U8QVhWYWxpZGF0aW9uU3VtbWFyeT4ge1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm0oKTtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IGZvcm0udmFsaWRhdGUoKTtcbiAgICAgIHRoaXMudmFsaWRpdHlDaGFuZ2UuZW1pdChpc1ZhbGlkLnJlc3VsdCk7XG4gICAgICByZXR1cm4gaXNWYWxpZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICBtZXNzYWdlczogW10sXG4gICAgICBydWxlczogW10sXG4gICAgfSBhcyBBWFZhbGlkYXRpb25TdW1tYXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBmb3JtIGNvbnRleHRcbiAgICovXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBpbnRlcm5hbCBjb250ZXh0XG4gICAgdGhpcy5pbnRlcm5hbENvbnRleHQuc2V0KHt9KTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgbW9kZWwgc2lnbmFsXG4gICAgdGhpcy5jb250ZXh0LnNldCh7fSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGZvcm0gdG8gaXRzIGluaXRpYWwgc3RhdGVcbiAgICovXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICAvLyBSZXNldCB0byBpbml0aWFsIGNvbnRleHRcbiAgICBjb25zdCByZXNldENvbnRleHQgPSBjbG9uZURlZXAodGhpcy5pbml0aWFsQ29udGV4dCk7XG4gICAgdGhpcy5pbnRlcm5hbENvbnRleHQuc2V0KHJlc2V0Q29udGV4dCk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIG1vZGVsIHNpZ25hbFxuICAgIHRoaXMuY29udGV4dC5zZXQocmVzZXRDb250ZXh0KTtcbiAgfVxuXG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiAtLS0tICAgUnhKUyBTdHJlYW0gU2V0dXAgICAtLS0tXG5cbiAgLyoqXG4gICAqIFNldHVwIFJ4SlMgc3RyZWFtcyBmb3IgY29udGV4dCBtYW5hZ2VtZW50XG4gICAqL1xuICBwcml2YXRlIHNldHVwQ29udGV4dFN0cmVhbXMoKTogdm9pZCB7XG4gICAgLy8gRGVib3VuY2VkIGNvbnRleHQgdXBkYXRlcyBmcm9tIGV4dGVybmFsIHNvdXJjZVxuICAgIHRoaXMuY29udGV4dFVwZGF0ZVN1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTYpLCAvLyB+NjBmcHNcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IGlzRXF1YWwocHJldiwgY3VycikpLFxuICAgICAgICBzdGFydFdpdGgodGhpcy5jb250ZXh0KCkgPz8ge30pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoY3R4KSA9PiB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDb250ZXh0LnNldChjdHgpO1xuICAgICAgfSk7XG5cbiAgICAvLyBEZWJvdW5jZWQgY29udGV4dCBjaGFuZ2VzIGZyb20gd2lkZ2V0c1xuICAgIHRoaXMuY29udGV4dENoYW5nZVN1YmplY3RcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTYpLCAvLyB+NjBmcHNcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXYsIGN1cnIpID0+IGlzRXF1YWwocHJldiwgY3VycikpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoY3R4KSA9PiB7XG4gICAgICAgIHRoaXMuaW50ZXJuYWxDb250ZXh0LnNldChjdHgpO1xuICAgICAgICAvLyBVcGRhdGUgdGhlIG1vZGVsIHNpZ25hbCBkaXJlY3RseSAtIGl0IHdpbGwgZW1pdCBjaGFuZ2UgZXZlbnRzIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldCh0aGlzLmludGVybmFsQ29udGV4dCgpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIC0tLS0gICBUeXBlIEd1YXJkcyAgIC0tLS1cblxuICAvKipcbiAgICogVHlwZSBndWFyZCB0byBjaGVjayBpZiB0aGUgaW5wdXQgaXMgYSBmb3JtIGRlZmluaXRpb25cbiAgICovXG4gIHByaXZhdGUgaXNGb3JtRGVmaW5pdGlvbihkYXRhOiBhbnkpOiBkYXRhIGlzIEFYUER5bmFtaWNGb3JtRGVmaW5pdGlvbiB7XG4gICAgcmV0dXJuIGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICdncm91cHMnIGluIGRhdGEgJiYgQXJyYXkuaXNBcnJheShkYXRhLmdyb3Vwcyk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFV0aWxpdHkgTWV0aG9kcyAgIC0tLS1cblxuICAvKipcbiAgICogR2VuZXJhdGUgbGF5b3V0IGhhc2ggZm9yIGNoYW5nZSBkZXRlY3Rpb24gKHNob3J0IGhhc2gpXG4gICAqL1xuICBwcml2YXRlIGdlbmVyYXRlTGF5b3V0SGFzaChsYXlvdXQ6IGFueSwgbG9vazogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWxheW91dCkgcmV0dXJuICcnO1xuXG4gICAgLy8gR2VuZXJhdGUgc2hvcnQgaGFzaCBmb3IgbGFyZ2UgbGF5b3V0IHN0cmluZ3NcbiAgICBjb25zdCBsYXlvdXRTdHIgPSB0eXBlb2YgbGF5b3V0ID09PSAnc3RyaW5nJyA/IGxheW91dCA6IEpTT04uc3RyaW5naWZ5KGxheW91dCk7XG4gICAgY29uc3QgbGF5b3V0SGFzaCA9IHRoaXMuc2ltcGxlSGFzaChsYXlvdXRTdHIpO1xuICAgIHJldHVybiBgJHtsYXlvdXRIYXNofXwke2xvb2t9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBjYWNoZSBrZXkgZm9yIGV4cHJlc3Npb24gZXZhbHVhdGlvbiAoc2hvcnQgaGFzaClcbiAgICovXG4gIHByaXZhdGUgZ2VuZXJhdGVDYWNoZUtleShleHByZXNzaW9uOiBhbnksIGNvbnRleHQ6IGFueSk6IHN0cmluZyB7XG4gICAgLy8gVXNlIHNob3J0IGhhc2ggZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgIGNvbnN0IGV4cHJTdHIgPSB0eXBlb2YgZXhwcmVzc2lvbiA9PT0gJ3N0cmluZycgPyBleHByZXNzaW9uIDogSlNPTi5zdHJpbmdpZnkoZXhwcmVzc2lvbik7XG4gICAgY29uc3QgZXhwckhhc2ggPSB0aGlzLnNpbXBsZUhhc2goZXhwclN0cik7XG4gICAgY29uc3QgY3R4SGFzaCA9IHRoaXMuZ2VuZXJhdGVDb250ZXh0SGFzaChjb250ZXh0KTtcbiAgICByZXR1cm4gYCR7ZXhwckhhc2h9fCR7Y3R4SGFzaH1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgc2ltcGxlIGhhc2ggZm9yIGNvbnRleHQgY2hhbmdlIGRldGVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbnRleHRIYXNoKGNvbnRleHQ6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFjb250ZXh0IHx8IHR5cGVvZiBjb250ZXh0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIFN0cmluZyhjb250ZXh0KTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBzaG9ydCBoYXNoIGZvciBjb250ZXh0XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNvbnRleHQpLnNvcnQoKTtcbiAgICBjb25zdCBjb250ZXh0U3RyID0ga2V5cy5tYXAoKGtleSkgPT4gYCR7a2V5fToke2NvbnRleHRba2V5XX1gKS5qb2luKCd8Jyk7XG4gICAgcmV0dXJuIHRoaXMuc2ltcGxlSGFzaChjb250ZXh0U3RyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaW1wbGUgaGFzaCBmdW5jdGlvbiBmb3IgZ2VuZXJhdGluZyBzaG9ydCBrZXlzXG4gICAqL1xuICBwcml2YXRlIHNpbXBsZUhhc2goc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBoYXNoID0gMDtcbiAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGFyID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICBoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgY2hhcjtcbiAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDsgLy8gQ29udmVydCB0byAzMi1iaXQgaW50ZWdlclxuICAgIH1cblxuICAgIC8vIENvbnZlcnQgdG8gcG9zaXRpdmUgaGV4IHN0cmluZ1xuICAgIHJldHVybiBNYXRoLmFicyhoYXNoKS50b1N0cmluZygxNik7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cbn1cbiJdfQ==","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.4\", ngImport: i0, type: LayoutBuilderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.4\", ngImport: i0, type: LayoutBuilderModule, imports: [CommonModule, AXPLayoutRendererComponent], exports: [AXPLayoutRendererComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: LayoutBuilderModule, providers: [AXPLayoutBuilderService], imports: [CommonModule, AXPLayoutRendererComponent] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.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=","export {};\n//#endregion\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWJ1aWxkZXIudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9idWlsZGVyL3NyYy9saWIvbGF5b3V0LWJ1aWxkZXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQTZ5QkEsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYRGF0YVNvdXJjZSB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBvcHVwU2l6ZVR5cGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcG9wdXAnO1xuaW1wb3J0IHsgQVhTdGVwV2l6YXJkTG9vayB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zdGVwLXdpemFyZCc7XG5pbXBvcnQge1xuICBBWFBBY3Rpb25NZW51SXRlbSxcbiAgQVhQRXhwcmVzc2lvbixcbiAgQVhQR3JpZExheW91dE9wdGlvbnMsXG4gIEFYUE9wdGlvbnNEYXRhLFxuICBBWFBWYWxpZGF0aW9uUnVsZXMsXG59IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29yZSc7XG5pbXBvcnQgeyBBWFBXaWRnZXROb2RlLCBBWFBXaWRnZXRSZW5kZXJNb2RlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuXG4vKipcbiAqIEZvcm0gYXBwZWFyYW5jZSBhbmQgZGVuc2l0eSBzdHlsaW5nICh1c2luZyBmaWVsZHNldCB3aWRnZXQgbG9vaylcbiAqL1xuZXhwb3J0IHR5cGUgQVhQRHluYW1pY0Zvcm1Mb29rID0gJ2ZpZWxkc2V0JyB8ICdjYXJkJyB8ICdncm91cCcgfCAnY29udGFpbmVyJztcblxuLyoqXG4gKiBGb3JtIHJlbmRlcmluZyBtb2RlXG4gKi9cbmV4cG9ydCB0eXBlIEFYUER5bmFtaWNGb3JtTW9kZSA9ICd2aWV3JyB8ICdlZGl0JztcblxuLyoqXG4gKiBGb3JtIGxheW91dCBkaXJlY3Rpb24gYW5kIGZsb3dcbiAqL1xuZXhwb3J0IHR5cGUgQVhQRHluYW1pY0Zvcm1EaXJlY3Rpb24gPSAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgJ2dyaWQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYUER5bmFtaWNGb3JtRmllbGREZWZpbml0aW9uIHtcbiAgcGF0aDogc3RyaW5nO1xuICB0aXRsZT86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHdpZGdldDogQVhQV2lkZ2V0Tm9kZTtcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHBlci1maWVsZCByZW5kZXJpbmcgbW9kZS4gVGFrZXMgcHJlY2VkZW5jZSBvdmVyIHNlY3Rpb24gYW5kIGZvcm0gbW9kZXMuXG4gICAqL1xuICBtb2RlPzogQVhQRHluYW1pY0Zvcm1Nb2RlO1xuICBsYXlvdXQ/OiBBWFBHcmlkTGF5b3V0T3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEeW5hbWljRm9ybUdyb3VwRGVmaW5pdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwYXJhbWV0ZXJzOiBBWFBEeW5hbWljRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICAvKipcbiAgICogT3B0aW9uYWwgcGVyLXNlY3Rpb24gcmVuZGVyaW5nIG1vZGUuIFRha2VzIHByZWNlZGVuY2Ugb3ZlciBmb3JtIG1vZGUgYW5kIGlzIG92ZXJyaWRkZW4gYnkgZmllbGQgbW9kZS5cbiAgICovXG4gIG1vZGU/OiBBWFBEeW5hbWljRm9ybU1vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRHluYW1pY0Zvcm1EZWZpbml0aW9uIHtcbiAgZ3JvdXBzOiBBWFBEeW5hbWljRm9ybUdyb3VwRGVmaW5pdGlvbltdO1xuICAvKipcbiAgICogT3B0aW9uYWwgZm9ybS1sZXZlbCByZW5kZXJpbmcgbW9kZVxuICAgKi9cbiAgbW9kZT86IEFYUER5bmFtaWNGb3JtTW9kZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBEaWFsb2dSZWYge1xuICAvKipcbiAgICogTWFudWFsbHkgY2xvc2UgdGhlIGRpYWxvZyAob3B0aW9uYWwgLSBkaWFsb2cgY2xvc2VzIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgdXNlciBpbnRlcmFjdGlvbilcbiAgICovXG4gIGNsb3NlKCk6IHZvaWQ7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGZvcm0gZGF0YSBmcm9tIHRoZSBkaWFsb2dcbiAgICovXG4gIGNvbnRleHQoKTogYW55O1xuICAvKipcbiAgICogR2V0IHRoZSBhY3Rpb24gdGhhdCB3YXMgY2xpY2tlZCBieSB0aGUgdXNlclxuICAgKi9cbiAgYWN0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFNldCB0aGUgbG9hZGluZyBzdGF0ZSBvZiB0aGUgZGlhbG9nXG4gICAqL1xuICBzZXRMb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vLyNyZWdpb24gLS0tLSAgIFdpZGdldCBPcHRpb25zIEludGVyZmFjZXMgICAtLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0V2lkZ2V0T3B0aW9ucyB7XG4gIG5hbWU/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/OiB7XG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgYW5pbWF0aW9uPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuLy8gU3RlcCBXaXphcmQgVHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgQVhQV2l6YXJkQWN0aW9uRGVmaW5pdGlvbiB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBXaXphcmRBY3Rpb25zIHtcbiAgcHJldmlvdXM/OiBBWFBXaXphcmRBY3Rpb25EZWZpbml0aW9uO1xuICBuZXh0PzogQVhQV2l6YXJkQWN0aW9uRGVmaW5pdGlvbjtcbiAgc3VibWl0PzogQVhQV2l6YXJkQWN0aW9uRGVmaW5pdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBTdGVwRGVmaW5pdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBza2lwcGFibGU/OiBib29sZWFuO1xuICBjb250ZW50OiBBWFBXaWRnZXROb2RlO1xuICBhY3Rpb25zPzogQVhQQWN0aW9uTWVudUl0ZW1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBTdGVwV2l6YXJkR3VhcmRQYXlsb2FkIHtcbiAgc3RlcDogQVhQU3RlcERlZmluaXRpb247XG4gIGluZGV4OiBudW1iZXI7XG4gIHRvdGFsOiBudW1iZXI7XG4gIGlzRmlyc3Q6IGJvb2xlYW47XG4gIGlzTGFzdDogYm9vbGVhbjtcbiAgY29udGV4dDogYW55O1xuICBzdGVwQ29udGV4dD86IGFueTtcbiAgZGlhbG9nQ29udGV4dD86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFBTdGVwV2l6YXJkU3RhdHVzIHtcbiAgY3VycmVudFN0ZXA6IEFYUFN0ZXBEZWZpbml0aW9uO1xuICBpbmRleDogbnVtYmVyO1xuICB0b3RhbDogbnVtYmVyO1xuICBpc0ZpcnN0OiBib29sZWFuO1xuICBpc0xhc3Q6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQU3RlcFdpemFyZERlZmluaXRpb24ge1xuICBzdGVwczogQVhQU3RlcERlZmluaXRpb25bXTtcbiAgbGluZWFyPzogYm9vbGVhbjtcbiAgZGlyZWN0aW9uPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJztcbiAgbG9vaz86IHN0cmluZztcbiAgc2hvd0FjdGlvbnM/OiBib29sZWFuO1xuICBhY3Rpb25zPzogQVhQV2l6YXJkQWN0aW9ucztcbiAgZ3VhcmRzPzoge1xuICAgIG5leHQ/OiAocGF5bG9hZDogQVhQU3RlcFdpemFyZEd1YXJkUGF5bG9hZCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG4gICAgcHJldj86IChwYXlsb2FkOiBBWFBTdGVwV2l6YXJkR3VhcmRQYXlsb2FkKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcbiAgfTtcbiAgZXZlbnRzPzoge1xuICAgIG9uU3RlcENoYW5nZWQ/OiAoc3RhdHVzOiBBWFBTdGVwV2l6YXJkU3RhdHVzKSA9PiB2b2lkO1xuICAgIG9uQ29tcGxldGU/OiAoc3RhdHVzOiBBWFBTdGVwV2l6YXJkU3RhdHVzKSA9PiB2b2lkO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYUFN0ZXBXaXphcmRDb250YWluZXJPcHRpb25zIGV4dGVuZHMgTGF5b3V0V2lkZ2V0T3B0aW9ucyB7XG4gIGRlZmluaXRpb24/OiBBWFBTdGVwV2l6YXJkRGVmaW5pdGlvbjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgSW5oZXJpdGFuY2UgQ29udGV4dCBUeXBlcyAgIC0tLS1cblxuLy8gRm9yd2FyZCBkZWNsYXJhdGlvbiBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlXG5leHBvcnQgaW50ZXJmYWNlIElEaWFsb2dCdWlsZGVyIHt9XG5cbi8vIENvbnRleHQgZm9yIGluaGVyaXRpbmcgcHJvcGVydGllcyBmcm9tIHBhcmVudCBub2Rlc1xuZXhwb3J0IGludGVyZmFjZSBJbmhlcml0YW5jZUNvbnRleHQge1xuICBtb2RlPzogQVhQV2lkZ2V0UmVuZGVyTW9kZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuIHwgc3RyaW5nO1xuICByZWFkb25seT86IGJvb2xlYW4gfCBzdHJpbmc7XG4gIGRpcmVjdGlvbj86ICdydGwnIHwgJ2x0cic7XG4gIHZpc2libGU/OiBib29sZWFuIHwgc3RyaW5nO1xufVxuXG4vLyBIZWxwZXIgdHlwZSBmb3IgcmVzb2x2aW5nIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG5leHBvcnQgaW50ZXJmYWNlIEluaGVyaXRlZFByb3BlcnRpZXMge1xuICBtb2RlOiBBWFBXaWRnZXRSZW5kZXJNb2RlO1xuICBkaXNhYmxlZDogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHk6IGJvb2xlYW4gfCBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGRpcmVjdGlvbjogJ3J0bCcgfCAnbHRyJyB8IHVuZGVmaW5lZDtcbiAgdmlzaWJsZTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgQnVpbGRlciBTdGF0ZSBUeXBlcyAgIC0tLS1cblxuLy8gQmFzZSB3aWRnZXQgY29uZmlndXJhdGlvbiAtIG5vIHBhdGggbWFuYWdlbWVudCBoZXJlXG5leHBvcnQgaW50ZXJmYWNlIEFYUFdpZGdldENvbmZpZ3VyYXRpb24ge1xuICB0eXBlOiBzdHJpbmc7XG4gIG9wdGlvbnM/OiBBWFBPcHRpb25zRGF0YTtcbn1cblxuLy8gQnVpbGRlciBzdGF0ZSBpbnRlcmZhY2VzXG5leHBvcnQgdHlwZSBMYXlvdXRCdWlsZGVyU3RhdGUgPSBBWFBXaWRnZXROb2RlO1xuXG4vLyBXaWRnZXRCdWlsZGVyU3RhdGUgbWlycm9ycyBBWFBXaWRnZXROb2RlIGJ1dCBpbnRlbnRpb25hbGx5IGV4Y2x1ZGVzIGBjaGlsZHJlbmAgZm9yIG1vc3Qgd2lkZ2V0c1xuZXhwb3J0IHR5cGUgV2lkZ2V0QnVpbGRlclN0YXRlID0gT21pdDxBWFBXaWRnZXROb2RlLCAnY2hpbGRyZW4nPiAmIHsgbGF5b3V0PzogQVhQR3JpZExheW91dE9wdGlvbnMgfTtcblxuLy8gRm9ybUZpZWxkQnVpbGRlclN0YXRlIGluY2x1ZGVzIGNoaWxkcmVuIHNpbmNlIGZvcm0gZmllbGRzIGNhbiBjb250YWluIHdpZGdldHNcbmV4cG9ydCB0eXBlIEZvcm1GaWVsZEJ1aWxkZXJTdGF0ZSA9IEFYUFdpZGdldE5vZGUgJiB7IGxheW91dD86IEFYUEdyaWRMYXlvdXRPcHRpb25zIH07XG5cbi8vIERpYWxvZ0J1aWxkZXJTdGF0ZSBpbmNsdWRlcyBkaWFsb2ctc3BlY2lmaWMgcHJvcGVydGllc1xuZXhwb3J0IHR5cGUgRGlhbG9nQnVpbGRlclN0YXRlID0gQVhQV2lkZ2V0Tm9kZSAmIHtcbiAgbGF5b3V0PzogQVhQR3JpZExheW91dE9wdGlvbnM7XG4gIGRpYWxvZ09wdGlvbnM/OiBBWFBEaWFsb2dDb250YWluZXJPcHRpb25zO1xuICBhY3Rpb25zPzoge1xuICAgIGZvb3Rlcj86IHtcbiAgICAgIHByZWZpeD86IEFYUEFjdGlvbk1lbnVJdGVtW107XG4gICAgICBzdWZmaXg/OiBBWFBBY3Rpb25NZW51SXRlbVtdO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb25CdWlsZGVyIHtcbiAgY2FuY2VsKHRleHQ/OiBzdHJpbmcpOiBJQWN0aW9uQnVpbGRlcjtcbiAgc3VibWl0KHRleHQ/OiBzdHJpbmcpOiBJQWN0aW9uQnVpbGRlcjtcbiAgY3VzdG9tKGFjdGlvbjogQVhQQWN0aW9uTWVudUl0ZW0pOiBJQWN0aW9uQnVpbGRlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG5cbi8vI3JlZ2lvbiAtLS0tICAgQ29yZSBCdWlsZGVyIEludGVyZmFjZXMgICAtLS0tXG5cbi8vIE1haW4gbGF5b3V0IGJ1aWxkZXIgaW50ZXJmYWNlIC0gU2luZ2xlIFJlc3BvbnNpYmlsaXR5OiBMYXlvdXQgb3JjaGVzdHJhdGlvblxuZXhwb3J0IGludGVyZmFjZSBJTGF5b3V0QnVpbGRlciB7XG4gIC8vIFByZWRlZmluZWQgbGF5b3V0IGNvbnRhaW5lcnMgYXQgcm9vdCBsZXZlbCAtIG9ubHkgdGhlc2UgYXJlIGFsbG93ZWQgd2l0aCBzcGVjaWZpYyB0eXBlc1xuICBncmlkKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJR3JpZENvbnRhaW5lckJ1aWxkZXIpID0+IHZvaWQpOiBJTGF5b3V0QnVpbGRlcjtcbiAgZmxleChkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSUZsZXhDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXI7XG4gIHBhbmVsKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJUGFuZWxDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXI7XG4gIHBhZ2UoZGVsZWdhdGU6IChjb250YWluZXI6IElQYWdlQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElMYXlvdXRCdWlsZGVyO1xuICB0YWJzZXQoZGVsZWdhdGU6IChjb250YWluZXI6IElUYWJzZXRDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXI7XG4gIGZpZWxkc2V0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXI7XG4gIGRpYWxvZyhkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSURpYWxvZ0J1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlcjtcbiAgc3RlcFdpemFyZChkZWxlZ2F0ZTogKHdpemFyZDogSVN0ZXBXaXphcmRCdWlsZGVyKSA9PiB2b2lkKTogSUxheW91dEJ1aWxkZXI7XG5cbiAgLy8gQnVpbGQgYW5kIHJlbmRlclxuICBidWlsZCgpOiBBWFBXaWRnZXROb2RlO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBXaWRnZXQgQnVpbGRlciBJbnRlcmZhY2VzICAgLS0tLVxuXG4vLyBCYXNlIHdpZGdldCBidWlsZGVyIGludGVyZmFjZSAtIFNpbmdsZSBSZXNwb25zaWJpbGl0eTogV2lkZ2V0IGNvbmZpZ3VyYXRpb25cbmV4cG9ydCBpbnRlcmZhY2UgSVdpZGdldEJ1aWxkZXIge1xuICBuYW1lKG5hbWU6IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyO1xuICBwYXRoKHBhdGg6IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyO1xuICB0eXBlKHR5cGU6IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyO1xuICBvcHRpb25zKG9wdGlvbnM6IEFYUE9wdGlvbnNEYXRhKTogSVdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gTGF5b3V0XG4gIGxheW91dChjb25maWc6IFBhcnRpYWw8QVhQR3JpZExheW91dE9wdGlvbnM+KTogSVdpZGdldEJ1aWxkZXI7XG4gIGxheW91dChjb2xTcGFuOiBudW1iZXIpOiBJV2lkZ2V0QnVpbGRlcjtcbiAgbW9kZShtb2RlOiBBWFBXaWRnZXRSZW5kZXJNb2RlKTogSVdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gU3RhdGUgKG1hbmFnZWQgYnkgaGlnaGVyLWxldmVsIHN5c3RlbXMgbGlrZSBkeW5hbWljIGZvcm1zKVxuICB2aXNpYmxlKGNvbmRpdGlvbjogYm9vbGVhbiB8IHN0cmluZyk6IElXaWRnZXRCdWlsZGVyO1xuICBkaXNhYmxlZChjb25kaXRpb246IGJvb2xlYW4gfCBzdHJpbmcpOiBJV2lkZ2V0QnVpbGRlcjtcbiAgcmVhZG9ubHkoY29uZGl0aW9uOiBib29sZWFuIHwgc3RyaW5nKTogSVdpZGdldEJ1aWxkZXI7XG4gIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBJV2lkZ2V0QnVpbGRlcjtcblxuICAvLyBJbmhlcml0YW5jZSBjb250ZXh0IG1ldGhvZHNcbiAgd2l0aEluaGVyaXRhbmNlQ29udGV4dChjb250ZXh0OiBJbmhlcml0YW5jZUNvbnRleHQpOiBJV2lkZ2V0QnVpbGRlcjtcbiAgZ2V0SW5oZXJpdGFuY2VDb250ZXh0KCk6IEluaGVyaXRhbmNlQ29udGV4dDtcblxuICAvLyBCdWlsZFxuICBidWlsZCgpOiBBWFBXaWRnZXROb2RlO1xufVxuXG4vLyNlbmRyZWdpb25cblxuLy8jcmVnaW9uIC0tLS0gICBDb250YWluZXIgQnVpbGRlciBJbnRlcmZhY2VzICAgLS0tLVxuXG4vLyBCYXNlIGNvbnRhaW5lciBidWlsZGVyIGludGVyZmFjZSAtIEludGVyZmFjZSBTZWdyZWdhdGlvbjogQ29tbW9uIGNvbnRhaW5lciBvcGVyYXRpb25zXG5leHBvcnQgaW50ZXJmYWNlIElCYXNlQ29udGFpbmVyQnVpbGRlcjxUQ29udGFpbmVyID0gYW55PiB7XG4gIG5hbWUobmFtZTogc3RyaW5nKTogVENvbnRhaW5lcjtcbiAgcGF0aChwYXRoOiBzdHJpbmcpOiBUQ29udGFpbmVyO1xuICBtb2RlKG1vZGU6IEFYUFdpZGdldFJlbmRlck1vZGUpOiBUQ29udGFpbmVyO1xuICB2aXNpYmxlKGNvbmRpdGlvbjogYm9vbGVhbiB8IEFYUEV4cHJlc3Npb24pOiBUQ29udGFpbmVyO1xuICBkaXNhYmxlZChjb25kaXRpb246IGJvb2xlYW4gfCBBWFBFeHByZXNzaW9uKTogVENvbnRhaW5lcjtcbiAgcmVhZG9ubHkoY29uZGl0aW9uOiBib29sZWFuIHwgQVhQRXhwcmVzc2lvbik6IFRDb250YWluZXI7XG4gIGRpcmVjdGlvbihkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicpOiBUQ29udGFpbmVyO1xuXG4gIC8vIEluaGVyaXRhbmNlIGNvbnRleHQgbWV0aG9kc1xuICB3aXRoSW5oZXJpdGFuY2VDb250ZXh0KGNvbnRleHQ6IEluaGVyaXRhbmNlQ29udGV4dCk6IFRDb250YWluZXI7XG4gIGdldEluaGVyaXRhbmNlQ29udGV4dCgpOiBJbmhlcml0YW5jZUNvbnRleHQ7XG5cbiAgYnVpbGQoKTogQVhQV2lkZ2V0Tm9kZTtcbn1cblxuLy8gTGF5b3V0LXNwZWNpZmljIGNvbnRhaW5lciBvcGVyYXRpb25zXG5leHBvcnQgaW50ZXJmYWNlIElMYXlvdXRDb250YWluZXJCdWlsZGVyPFRDb250YWluZXIgPSBhbnk+IHtcbiAgbGF5b3V0KGNvbmZpZzogUGFydGlhbDxBWFBHcmlkTGF5b3V0T3B0aW9ucz4pOiBUQ29udGFpbmVyO1xuICBsYXlvdXQoY29sU3BhbjogbnVtYmVyKTogVENvbnRhaW5lcjtcbn1cblxuLy8gQ2hpbGQgY29udGFpbmVyIG1hbmFnZW1lbnRcbmV4cG9ydCBpbnRlcmZhY2UgSUNoaWxkQ29udGFpbmVyQnVpbGRlcjxUQ29udGFpbmVyID0gYW55PiB7XG4gIGdyaWQoZGVsZWdhdGU6IChjb250YWluZXI6IElHcmlkQ29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG4gIGZsZXgoZGVsZWdhdGU6IChjb250YWluZXI6IElGbGV4Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG4gIHBhbmVsKGRlbGVnYXRlOiAoY29udGFpbmVyOiBJUGFuZWxDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lcjtcbiAgcGFnZShkZWxlZ2F0ZTogKGNvbnRhaW5lcjogSVBhZ2VDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lcjtcbiAgdGFic2V0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJVGFic2V0Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG4gIGZpZWxkc2V0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyKSA9PiB2b2lkKTogVENvbnRhaW5lcjtcbiAgZm9ybUZpZWxkKGxhYmVsOiBzdHJpbmcsIGRlbGVnYXRlPzogKGZpZWxkOiBJRm9ybUZpZWxkQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG4gIHN0ZXBXaXphcmQoZGVsZWdhdGU6ICh3aXphcmQ6IElTdGVwV2l6YXJkQnVpbGRlcikgPT4gdm9pZCk6IFRDb250YWluZXI7XG59XG5cbi8vIFdpZGdldCBjcmVhdGlvbiBvcGVyYXRpb25zXG5leHBvcnQgaW50ZXJmYWNlIElXaWRnZXRDb250YWluZXJCdWlsZGVyPFRDb250YWluZXIgPSBhbnk+IHtcbiAgdGV4dEJveChvcHRpb25zPzogVGV4dEJveE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICBsYXJnZVRleHRCb3gob3B0aW9ucz86IExhcmdlVGV4dEJveE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICByaWNoVGV4dChvcHRpb25zPzogUmljaFRleHRPcHRpb25zKTogVENvbnRhaW5lcjtcbiAgcGFzc3dvcmRCb3gob3B0aW9ucz86IFBhc3N3b3JkQm94T3B0aW9ucyk6IFRDb250YWluZXI7XG4gIG51bWJlckJveChvcHRpb25zPzogTnVtYmVyQm94T3B0aW9ucyk6IFRDb250YWluZXI7XG4gIHNlbGVjdEJveChvcHRpb25zOiBTZWxlY3RCb3hPcHRpb25zKTogVENvbnRhaW5lcjtcbiAgbG9va3VwQm94KG9wdGlvbnM6IExvb2t1cEJveE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICBzZWxlY3Rpb25MaXN0KG9wdGlvbnM6IFNlbGVjdGlvbkxpc3RPcHRpb25zKTogVENvbnRhaW5lcjtcbiAgZGF0ZVRpbWVCb3gob3B0aW9ucz86IERhdGVUaW1lQm94T3B0aW9ucyk6IFRDb250YWluZXI7XG4gIHRvZ2dsZVN3aXRjaChvcHRpb25zPzogVG9nZ2xlU3dpdGNoT3B0aW9ucyk6IFRDb250YWluZXI7XG4gIGNvbG9yQm94KG9wdGlvbnM/OiBDb2xvckJveE9wdGlvbnMpOiBUQ29udGFpbmVyO1xuICBsaXN0KGRlbGVnYXRlOiAoY29udGFpbmVyOiBJTGlzdFdpZGdldEJ1aWxkZXIpID0+IHZvaWQpOiBUQ29udGFpbmVyO1xuICBjdXN0b21XaWRnZXQ8VD4odHlwZTogc3RyaW5nLCBvcHRpb25zPzogVCk6IFRDb250YWluZXI7XG59XG5cbi8vIEZsZXggY29udGFpbmVyIGJ1aWxkZXIgLSBJbnRlcmZhY2UgU2VncmVnYXRpb246IENvbWJpbmVzIGFsbCBjb250YWluZXIgaW50ZXJmYWNlc1xuZXhwb3J0IGludGVyZmFjZSBJRmxleENvbnRhaW5lckJ1aWxkZXJcbiAgZXh0ZW5kcyBJQmFzZUNvbnRhaW5lckJ1aWxkZXI8SUZsZXhDb250YWluZXJCdWlsZGVyPixcbiAgICBJTGF5b3V0Q29udGFpbmVyQnVpbGRlcjxJRmxleENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElDaGlsZENvbnRhaW5lckJ1aWxkZXI8SUZsZXhDb250YWluZXJCdWlsZGVyPixcbiAgICBJV2lkZ2V0Q29udGFpbmVyQnVpbGRlcjxJRmxleENvbnRhaW5lckJ1aWxkZXI+IHtcbiAgLy8gRmxleC1zcGVjaWZpYyBvcHRpb25zIC0gYm90aCBvYmplY3QgYW5kIGluZGl2aWR1YWwgbWV0aG9kc1xuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUEZsZXhDb250YWluZXJPcHRpb25zKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiAncm93JyB8ICdjb2x1bW4nIHwgJ3Jvdy1yZXZlcnNlJyB8ICdjb2x1bW4tcmV2ZXJzZScpOiBJRmxleENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldFdyYXAod3JhcDogJ25vd3JhcCcgfCAnd3JhcCcgfCAnd3JhcC1yZXZlcnNlJyk6IElGbGV4Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0SnVzdGlmeUNvbnRlbnQoXG4gICAganVzdGlmeTogJ2ZsZXgtc3RhcnQnIHwgJ2ZsZXgtZW5kJyB8ICdjZW50ZXInIHwgJ3NwYWNlLWJldHdlZW4nIHwgJ3NwYWNlLWFyb3VuZCcgfCAnc3BhY2UtZXZlbmx5JyxcbiAgKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xuICBzZXRBbGlnbkl0ZW1zKGFsaWduOiAnZmxleC1zdGFydCcgfCAnZmxleC1lbmQnIHwgJ2NlbnRlcicgfCAnYmFzZWxpbmUnIHwgJ3N0cmV0Y2gnKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xuICBzZXRHYXAoZ2FwOiBzdHJpbmcpOiBJRmxleENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldEJhY2tncm91bmRDb2xvcihjb2xvcjogc3RyaW5nKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xuICBzZXRQYWRkaW5nKHBhZGRpbmc6IHN0cmluZyk6IElGbGV4Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0TWFyZ2luKG1hcmdpbjogc3RyaW5nKTogSUZsZXhDb250YWluZXJCdWlsZGVyO1xufVxuXG4vLyBHcmlkIGNvbnRhaW5lciBidWlsZGVyIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uOiBDb21iaW5lcyBhbGwgY29udGFpbmVyIGludGVyZmFjZXNcbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRDb250YWluZXJCdWlsZGVyXG4gIGV4dGVuZHMgSUJhc2VDb250YWluZXJCdWlsZGVyPElHcmlkQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSUxheW91dENvbnRhaW5lckJ1aWxkZXI8SUdyaWRDb250YWluZXJCdWlsZGVyPixcbiAgICBJQ2hpbGRDb250YWluZXJCdWlsZGVyPElHcmlkQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSVdpZGdldENvbnRhaW5lckJ1aWxkZXI8SUdyaWRDb250YWluZXJCdWlsZGVyPiB7XG4gIC8vIEdyaWQtc3BlY2lmaWMgb3B0aW9ucyAtIGJvdGggb2JqZWN0IGFuZCBpbmRpdmlkdWFsIG1ldGhvZHNcbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBHcmlkQ29udGFpbmVyT3B0aW9ucyk6IElHcmlkQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0Q29sdW1ucyhjb2x1bW5zOiBudW1iZXIpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldFJvd3Mocm93czogbnVtYmVyKTogSUdyaWRDb250YWluZXJCdWlsZGVyO1xuICBzZXRHYXAoZ2FwOiBzdHJpbmcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldEp1c3RpZnlJdGVtcyhqdXN0aWZ5OiAnc3RhcnQnIHwgJ2VuZCcgfCAnY2VudGVyJyB8ICdzdHJldGNoJyk6IElHcmlkQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0QWxpZ25JdGVtcyhhbGlnbjogJ3N0YXJ0JyB8ICdlbmQnIHwgJ2NlbnRlcicgfCAnc3RyZXRjaCcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldEF1dG9GbG93KGZsb3c6ICdyb3cnIHwgJ2NvbHVtbicgfCAncm93IGRlbnNlJyB8ICdjb2x1bW4gZGVuc2UnKTogSUdyaWRDb250YWluZXJCdWlsZGVyO1xuICBzZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZyk6IElHcmlkQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0UGFkZGluZyhwYWRkaW5nOiBzdHJpbmcpOiBJR3JpZENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldE1hcmdpbihtYXJnaW46IHN0cmluZyk6IElHcmlkQ29udGFpbmVyQnVpbGRlcjtcbn1cblxuLy8gUGFuZWwgY29udGFpbmVyIGJ1aWxkZXIgLSBJbnRlcmZhY2UgU2VncmVnYXRpb246IENvbWJpbmVzIGFsbCBjb250YWluZXIgaW50ZXJmYWNlc1xuZXhwb3J0IGludGVyZmFjZSBJUGFuZWxDb250YWluZXJCdWlsZGVyXG4gIGV4dGVuZHMgSUJhc2VDb250YWluZXJCdWlsZGVyPElQYW5lbENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElMYXlvdXRDb250YWluZXJCdWlsZGVyPElQYW5lbENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElDaGlsZENvbnRhaW5lckJ1aWxkZXI8SVBhbmVsQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSVdpZGdldENvbnRhaW5lckJ1aWxkZXI8SVBhbmVsQ29udGFpbmVyQnVpbGRlcj4ge1xuICAvLyBQYW5lbC1zcGVjaWZpYyBvcHRpb25zXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQUGFuZWxDb250YWluZXJPcHRpb25zKTogSVBhbmVsQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0Q2FwdGlvbihjYXB0aW9uOiBzdHJpbmcpOiBJUGFuZWxDb250YWluZXJCdWlsZGVyO1xuICBzZXRJY29uKGljb246IHN0cmluZyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldExvb2sobG9vazogJ3NvbGlkJyB8ICdmaWxsJyB8ICdvdXRsaW5lJyB8ICdmbGF0JyB8ICdub25lJyk6IElQYW5lbENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldFNob3dIZWFkZXIoc2hvdzogYm9vbGVhbik6IElQYW5lbENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldENvbGxhcHNlZChjb2xsYXBzZWQ6IGJvb2xlYW4pOiBJUGFuZWxDb250YWluZXJCdWlsZGVyO1xufVxuXG4vLyBQYWdlIGNvbnRhaW5lciBidWlsZGVyIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uOiBDb21iaW5lcyBhbGwgY29udGFpbmVyIGludGVyZmFjZXNcbmV4cG9ydCBpbnRlcmZhY2UgSVBhZ2VDb250YWluZXJCdWlsZGVyXG4gIGV4dGVuZHMgSUJhc2VDb250YWluZXJCdWlsZGVyPElQYWdlQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSUxheW91dENvbnRhaW5lckJ1aWxkZXI8SVBhZ2VDb250YWluZXJCdWlsZGVyPixcbiAgICBJQ2hpbGRDb250YWluZXJCdWlsZGVyPElQYWdlQ29udGFpbmVyQnVpbGRlcj4sXG4gICAgSVdpZGdldENvbnRhaW5lckJ1aWxkZXI8SVBhZ2VDb250YWluZXJCdWlsZGVyPiB7XG4gIC8vIFBhZ2Utc3BlY2lmaWMgb3B0aW9uc1xuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUFBhZ2VDb250YWluZXJPcHRpb25zKTogSVBhZ2VDb250YWluZXJCdWlsZGVyO1xuICBzZXRCYWNrZ3JvdW5kQ29sb3IoY29sb3I6IHN0cmluZyk6IElQYWdlQ29udGFpbmVyQnVpbGRlcjtcbiAgc2V0VGhlbWUodGhlbWU6IHsgaWQ6IHN0cmluZyB9KTogSVBhZ2VDb250YWluZXJCdWlsZGVyO1xuICBzZXRIYXNIZWFkZXIoaGFzSGVhZGVyOiBib29sZWFuKTogSVBhZ2VDb250YWluZXJCdWlsZGVyO1xuICBzZXRIYXNGb290ZXIoaGFzRm9vdGVyOiBib29sZWFuKTogSVBhZ2VDb250YWluZXJCdWlsZGVyO1xuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiAncnRsJyB8ICdsdHInKTogSVBhZ2VDb250YWluZXJCdWlsZGVyO1xufVxuXG4vLyBUYWJzZXQgY29udGFpbmVyIGJ1aWxkZXIgLSBJbnRlcmZhY2UgU2VncmVnYXRpb246IENvbWJpbmVzIGFsbCBjb250YWluZXIgaW50ZXJmYWNlc1xuZXhwb3J0IGludGVyZmFjZSBJVGFic2V0Q29udGFpbmVyQnVpbGRlclxuICBleHRlbmRzIElCYXNlQ29udGFpbmVyQnVpbGRlcjxJVGFic2V0Q29udGFpbmVyQnVpbGRlcj4sXG4gICAgSUxheW91dENvbnRhaW5lckJ1aWxkZXI8SVRhYnNldENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElDaGlsZENvbnRhaW5lckJ1aWxkZXI8SVRhYnNldENvbnRhaW5lckJ1aWxkZXI+LFxuICAgIElXaWRnZXRDb250YWluZXJCdWlsZGVyPElUYWJzZXRDb250YWluZXJCdWlsZGVyPiB7XG4gIC8vIFRhYnNldC1zcGVjaWZpYyBvcHRpb25zXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQVGFic2V0Q29udGFpbmVyT3B0aW9ucyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRMb29rKGxvb2s6ICd3aXRoLWxpbmUnIHwgJ3dpdGgtbGluZS1jb2xvcicgfCAncGlsbHMnIHwgJ3BpbGxzLWNvbG9yJyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRPcmllbnRhdGlvbihvcmllbnRhdGlvbjogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyk6IElUYWJzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRBY3RpdmVJbmRleChpbmRleDogbnVtYmVyKTogSVRhYnNldENvbnRhaW5lckJ1aWxkZXI7XG59XG5cbi8vIEZvcm0gZmllbGQgYnVpbGRlciAtIEludGVyZmFjZSBTZWdyZWdhdGlvbjogQ29tYmluZXMgYmFzZSBhbmQgd2lkZ2V0IGludGVyZmFjZXNcbi8vIEZvcm0gZmllbGRzIGNhbiBvbmx5IGNvbnRhaW4gT05FIHdpZGdldFxuZXhwb3J0IGludGVyZmFjZSBJRm9ybUZpZWxkQnVpbGRlclxuICBleHRlbmRzIElCYXNlQ29udGFpbmVyQnVpbGRlcjxJRm9ybUZpZWxkQnVpbGRlcj4sXG4gICAgSUxheW91dENvbnRhaW5lckJ1aWxkZXI8SUZvcm1GaWVsZEJ1aWxkZXI+IHtcbiAgLy8gRm9ybSBmaWVsZCBzcGVjaWZpYyBvcHRpb25zXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQRm9ybUZpZWxkT3B0aW9ucyk6IElGb3JtRmllbGRCdWlsZGVyO1xuICBzZXRMYWJlbChsYWJlbDogc3RyaW5nKTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIHNldFNob3dMYWJlbChzaG93TGFiZWw6IGJvb2xlYW4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcblxuICAvLyBTaW5nbGUgd2lkZ2V0IG1ldGhvZHMgKHJlcGxhY2VzIElXaWRnZXRDb250YWluZXJCdWlsZGVyKVxuICB0ZXh0Qm94KG9wdGlvbnM/OiBPbWl0PFRleHRCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIGxhcmdlVGV4dEJveChvcHRpb25zPzogT21pdDxMYXJnZVRleHRCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIHJpY2hUZXh0KG9wdGlvbnM/OiBPbWl0PFJpY2hUZXh0T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyO1xuICBwYXNzd29yZEJveChvcHRpb25zPzogT21pdDxQYXNzd29yZEJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgbnVtYmVyQm94KG9wdGlvbnM/OiBPbWl0PE51bWJlckJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgc2VsZWN0Qm94KG9wdGlvbnM6IE9taXQ8U2VsZWN0Qm94T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyO1xuICBsb29rdXBCb3gob3B0aW9uczogT21pdDxMb29rdXBCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIHNlbGVjdGlvbkxpc3Qob3B0aW9uczogT21pdDxTZWxlY3Rpb25MaXN0T3B0aW9ucywgJ3BhdGgnPik6IElGb3JtRmllbGRCdWlsZGVyO1xuICBkYXRlVGltZUJveChvcHRpb25zPzogT21pdDxEYXRlVGltZUJveE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgdG9nZ2xlU3dpdGNoKG9wdGlvbnM/OiBPbWl0PFRvZ2dsZVN3aXRjaE9wdGlvbnMsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbiAgY29sb3JCb3gob3B0aW9ucz86IE9taXQ8Q29sb3JCb3hPcHRpb25zLCAncGF0aCc+KTogSUZvcm1GaWVsZEJ1aWxkZXI7XG4gIGN1c3RvbVdpZGdldDxUPih0eXBlOiBzdHJpbmcsIG9wdGlvbnM/OiBPbWl0PFQsICdwYXRoJz4pOiBJRm9ybUZpZWxkQnVpbGRlcjtcbn1cblxuLy8gRmllbGRzZXQgY29udGFpbmVyIGJ1aWxkZXIgLSBJbnRlcmZhY2UgU2VncmVnYXRpb246IFNwZWNpYWxpemVkIGZvciBmb3JtIGZpZWxkcyBvbmx5XG5leHBvcnQgaW50ZXJmYWNlIElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXJcbiAgZXh0ZW5kcyBJQmFzZUNvbnRhaW5lckJ1aWxkZXI8SUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcj4sXG4gICAgSUxheW91dENvbnRhaW5lckJ1aWxkZXI8SUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcj4ge1xuICAvLyBGaWVsZHNldC1zcGVjaWZpYyBvcHRpb25zXG4gIHNldE9wdGlvbnMob3B0aW9uczogQVhQRmllbGRzZXRDb250YWluZXJPcHRpb25zKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0VGl0bGUodGl0bGU6IHN0cmluZyk6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRJY29uKGljb246IHN0cmluZyk6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldENvbGxhcHNpYmxlKGNvbGxhcHNpYmxlOiBib29sZWFuKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcjtcbiAgc2V0SXNPcGVuKGlzT3BlbjogYm9vbGVhbik6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI7XG4gIHNldExvb2sobG9vazogJ2ZpZWxkc2V0JyB8ICdjYXJkJyB8ICdncm91cCcpOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRTaG93SGVhZGVyKHNob3dIZWFkZXI6IGJvb2xlYW4pOiBJRmllbGRzZXRDb250YWluZXJCdWlsZGVyO1xuICBzZXRDb2xzKGNvbHM6IG51bWJlcik6IElGaWVsZHNldENvbnRhaW5lckJ1aWxkZXI7XG5cbiAgLy8gT25seSBmb3JtIGZpZWxkcyBhcmUgYWxsb3dlZCBpbiBmaWVsZHNldFxuICBmb3JtRmllbGQobGFiZWw6IHN0cmluZywgZGVsZWdhdGU/OiAoZmllbGQ6IElGb3JtRmllbGRCdWlsZGVyKSA9PiB2b2lkKTogSUZpZWxkc2V0Q29udGFpbmVyQnVpbGRlcjtcbn1cblxuLy8gRGlhbG9nIGNvbnRhaW5lciBidWlsZGVyIC0gSW50ZXJmYWNlIFNlZ3JlZ2F0aW9uOiBTcGVjaWFsaXplZCBmb3IgZGlhbG9nIGZ1bmN0aW9uYWxpdHlcbmV4cG9ydCBpbnRlcmZhY2UgSURpYWxvZ0J1aWxkZXIge1xuICAvLyBEaWFsb2ctc3BlY2lmaWMgb3B0aW9uc1xuICBzZXRPcHRpb25zKG9wdGlvbnM6IEFYUERpYWxvZ0NvbnRhaW5lck9wdGlvbnMpOiBJRGlhbG9nQnVpbGRlcjtcbiAgc2V0VGl0bGUodGl0bGU6IHN0cmluZyk6IElEaWFsb2dCdWlsZGVyO1xuICBzZXRNZXNzYWdlKG1lc3NhZ2U/OiBzdHJpbmcpOiBJRGlhbG9nQnVpbGRlcjtcbiAgc2V0U2l6ZShzaXplOiBBWFBvcHVwU2l6ZVR5cGUpOiBJRGlhbG9nQnVpbGRlcjtcbiAgc2V0Q2xvc2VCdXR0b24oY2xvc2VCdXR0b246IGJvb2xlYW4pOiBJRGlhbG9nQnVpbGRlcjtcbiAgc2V0Q29udGV4dChjb250ZXh0OiBhbnkpOiBJRGlhbG9nQnVpbGRlcjtcblxuICAvLyBDb250ZW50IG1ldGhvZCAtIHdyYXBzIGxheW91dCBidWlsZGVyIG1ldGhvZHNcbiAgY29udGVudChkZWxlZ2F0ZTogKGxheW91dEJ1aWxkZXI6IElGbGV4Q29udGFpbmVyQnVpbGRlcikgPT4gdm9pZCk6IElEaWFsb2dCdWlsZGVyO1xuXG4gIC8vIEFjdGlvbnMgbWV0aG9kXG4gIHNldEFjdGlvbnMoZGVsZWdhdGU/OiAoYWN0aW9uczogSUFjdGlvbkJ1aWxkZXIpID0+IHZvaWQpOiBJRGlhbG9nQnVpbGRlcjtcblxuICAvLyBDdXN0b20gYWN0aW9uIG1hbmFnZW1lbnQgKGZvciBzdGVwIHdpemFyZCBpbnRlZ3JhdGlvbilcbiAgYWRkQ3VzdG9tQWN0aW9uKGFjdGlvbjogQVhQQWN0aW9uTWVudUl0ZW0pOiBJRGlhbG9nQnVpbGRlcjtcblxuICAvLyBEaWFsb2ctc3BlY2lmaWMgbWV0aG9kc1xuICBzaG93KCk6IFByb21pc2U8QVhQRGlhbG9nUmVmPjtcbn1cblxuLy8gTGlzdCBXaWRnZXQgQnVpbGRlciAtIEludGVyZmFjZSBTZWdyZWdhdGlvbjogQ29tYmluZXMgYWxsIGNvbnRhaW5lciBpbnRlcmZhY2VzXG5leHBvcnQgaW50ZXJmYWNlIElMaXN0V2lkZ2V0QnVpbGRlclxuICBleHRlbmRzIElCYXNlQ29udGFpbmVyQnVpbGRlcjxJTGlzdFdpZGdldEJ1aWxkZXI+LFxuICAgIElMYXlvdXRDb250YWluZXJCdWlsZGVyPElMaXN0V2lkZ2V0QnVpbGRlcj4sXG4gICAgSUNoaWxkQ29udGFpbmVyQnVpbGRlcjxJTGlzdFdpZGdldEJ1aWxkZXI+LFxuICAgIElXaWRnZXRDb250YWluZXJCdWlsZGVyPElMaXN0V2lkZ2V0QnVpbGRlcj4ge1xuICAvLyBMaXN0LXNwZWNpZmljIG9wdGlvbnNcbiAgc2V0T3B0aW9ucyhvcHRpb25zOiBBWFBMaXN0V2lkZ2V0T3B0aW9ucyk6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0RGF0YVNvdXJjZShkYXRhU291cmNlOiBhbnlbXSB8IEFYRGF0YVNvdXJjZSk6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0Q29sdW1ucyhjb2x1bW5zOiBBWFBMaXN0V2lkZ2V0Q29sdW1uW10pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gRXZlbnQgaGFuZGxlcnNcbiAgc2V0T25Sb3dDbGljayhoYW5kbGVyOiAocm93OiBhbnkpID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldE9uUm93RG91YmxlQ2xpY2soaGFuZGxlcjogKHJvdzogYW55KSA9PiB2b2lkKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuICBzZXRPblNlbGVjdGlvbkNoYW5nZShoYW5kbGVyOiAoc2VsZWN0ZWRSb3dzOiBhbnlbXSkgPT4gdm9pZCk6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0T25Sb3dDb21tYW5kKGhhbmRsZXI6IChjb21tYW5kOiBhbnksIHNlbGVjdGVkUm93czogYW55W10pID0+IHZvaWQpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gVGFibGUgZmVhdHVyZXNcbiAgc2V0UGFnaW5nKHBhZ2luZzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0U2hvd0hlYWRlcihzaG93OiBib29sZWFuKTogSUxpc3RXaWRnZXRCdWlsZGVyO1xuICBzZXRTaG93Rm9vdGVyKHNob3c6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldEZpeEhlYWRlcihmaXg6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldEZpeEZvb3RlcihmaXg6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldEZldGNoRGF0YU1vZGUobW9kZTogJ2F1dG8nIHwgJ21hbnVhbCcpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldFBhcmVudEZpZWxkKGZpZWxkOiBzdHJpbmcpOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG4gIHNldE1pbkhlaWdodChoZWlnaHQ6IHN0cmluZyB8IG51bWJlcik6IElMaXN0V2lkZ2V0QnVpbGRlcjtcblxuICAvLyBTZWxlY3Rpb24gJiBJbmRleFxuICBzZXRTaG93SW5kZXgoc2hvdzogYm9vbGVhbik6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0QWxsb3dTZWxlY3Rpb24oYWxsb3c6IGJvb2xlYW4pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gQ29tbWFuZHNcbiAgc2V0UHJpbWFyeUNvbW1hbmRzKGNvbW1hbmRzOiBhbnlbXSk6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbiAgc2V0U2Vjb25kYXJ5Q29tbWFuZHMoY29tbWFuZHM6IEFYUExpc3RXaWRnZXRSb3dDb21tYW5kW10pOiBJTGlzdFdpZGdldEJ1aWxkZXI7XG5cbiAgLy8gTG9hZGluZ1xuICBzZXRMb2FkaW5nKGxvYWRpbmc6IHsgZW5hYmxlZD86IGJvb2xlYW47IGFuaW1hdGlvbj86IGJvb2xlYW4gfSk6IElMaXN0V2lkZ2V0QnVpbGRlcjtcbn1cblxuLy8gU3RlcCBCdWlsZGVyIC0gSW50ZXJmYWNlIGZvciBidWlsZGluZyBpbmRpdmlkdWFsIHN0ZXBzXG5leHBvcnQgaW50ZXJmYWNlIElTdGVwQnVpbGRlciB7XG4gIHNldEljb24oaWNvbjogc3RyaW5nKTogSVN0ZXBCdWlsZGVyO1xuICBzZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbjogc3RyaW5nKTogSVN0ZXBCdWlsZGVyO1xuICBzZXRTa2lwcGFibGUoc2tpcHBhYmxlOiBib29sZWFuKTogSVN0ZXBCdWlsZGVyO1xuXG4gIC8vIENvbnRlbnQgdXNpbmcgbGF5b3V0IGJ1aWxkZXJcbiAgY29udGVudChkZWxlZ2F0ZTogKGxheW91dEJ1aWxkZXI6IElMYXlvdXRCdWlsZGVyKSA9PiB2b2lkKTogSVN0ZXBCdWlsZGVyO1xuXG4gIC8vIFN0ZXAtc3BlY2lmaWMgYWN0aW9ucyAoZnV0dXJlIGZlYXR1cmUgLSBza2lwIGZvciBub3cpXG4gIC8vIGFkZEFjdGlvbihhY3Rpb246IEFYUEFjdGlvbk1lbnVJdGVtKTogSVN0ZXBCdWlsZGVyO1xuXG4gIGJ1aWxkKCk6IEFYUFN0ZXBEZWZpbml0aW9uO1xufVxuXG4vLyBTdGVwIFdpemFyZCBCdWlsZGVyIC0gSW50ZXJmYWNlIGZvciBidWlsZGluZyBzdGVwIHdpemFyZFxuZXhwb3J0IGludGVyZmFjZSBJU3RlcFdpemFyZEJ1aWxkZXJcbiAgZXh0ZW5kcyBJQmFzZUNvbnRhaW5lckJ1aWxkZXI8SVN0ZXBXaXphcmRCdWlsZGVyPixcbiAgICBJTGF5b3V0Q29udGFpbmVyQnVpbGRlcjxJU3RlcFdpemFyZEJ1aWxkZXI+IHtcbiAgLy8gQ29uZmlndXJhdGlvblxuICBzZXRMaW5lYXIobGluZWFyOiBib29sZWFuKTogSVN0ZXBXaXphcmRCdWlsZGVyO1xuICBzZXREaXJlY3Rpb24oZGlyZWN0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnKTogSVN0ZXBXaXphcmRCdWlsZGVyO1xuICBzZXRMb29rKGxvb2s6IEFYU3RlcFdpemFyZExvb2spOiBJU3RlcFdpemFyZEJ1aWxkZXI7XG4gIHNldFNob3dBY3Rpb25zKHNob3c6IGJvb2xlYW4pOiBJU3RlcFdpemFyZEJ1aWxkZXI7XG5cbiAgLy8gQWN0aW9uc1xuICBzZXRBY3Rpb25zKGFjdGlvbnM6IEFYUFdpemFyZEFjdGlvbnMpOiBJU3RlcFdpemFyZEJ1aWxkZXI7XG5cbiAgLy8gR3VhcmRzXG4gIHNldEd1YXJkcyhndWFyZHM6IHtcbiAgICBuZXh0PzogKHBheWxvYWQ6IEFYUFN0ZXBXaXphcmRHdWFyZFBheWxvYWQpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuICAgIHByZXY/OiAocGF5bG9hZDogQVhQU3RlcFdpemFyZEd1YXJkUGF5bG9hZCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG4gIH0pOiBJU3RlcFdpemFyZEJ1aWxkZXI7XG5cbiAgLy8gRXZlbnRzXG4gIHNldEV2ZW50cyhldmVudHM6IHtcbiAgICBvblN0ZXBDaGFuZ2VkPzogKHN0YXR1czogQVhQU3RlcFdpemFyZFN0YXR1cykgPT4gdm9pZDtcbiAgICBvbkNvbXBsZXRlPzogKHN0YXR1czogQVhQU3RlcFdpemFyZFN0YXR1cykgPT4gdm9pZDtcbiAgfSk6IElTdGVwV2l6YXJkQnVpbGRlcjtcblxuICAvLyBBZGQgc3RlcHNcbiAgc3RlcChpZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCBkZWxlZ2F0ZTogKHN0ZXA6IElTdGVwQnVpbGRlcikgPT4gdm9pZCk6IElTdGVwV2l6YXJkQnVpbGRlcjtcbn1cblxuLy8jZW5kcmVnaW9uXG4iXX0=","import { 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 { AXPExpressionEvaluatorService } from '@acorex/platform/core';\nimport { CommonModule } from '@angular/common';\nimport { Component, effect, EventEmitter, inject, Input, Output, signal, viewChild } from '@angular/core';\nimport { AXPLayoutRendererComponent } from './layout-renderer.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@acorex/components/button\";\nimport * as i2 from \"@acorex/components/decorators\";\nimport * as i3 from \"@acorex/components/loading\";\nimport * as i4 from \"@angular/common\";\nimport * as i5 from \"@acorex/core/translation\";\nexport class AXPDialogRendererComponent extends AXBasePageComponent {\n constructor() {\n super(...arguments);\n this.result = new EventEmitter();\n this.expressionEvaluator = inject(AXPExpressionEvaluatorService);\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 // Aggregated actions for footer rendering\n this.footerPrefix = signal([], ...(ngDevMode ? [{ debugName: \"footerPrefix\" }] : []));\n this.footerSuffix = signal([], ...(ngDevMode ? [{ debugName: \"footerSuffix\" }] : []));\n //#endregion\n //#region ---- View Accessors ----\n // Access the internal layout renderer to reach the widgets container injector\n this.layoutRenderer = viewChild(AXPLayoutRendererComponent, ...(ngDevMode ? [{ debugName: \"layoutRenderer\" }] : []));\n this.#eff = effect(() => {\n let count = 0;\n this.aggregateAndEvaluateActions();\n if (!this.widgetCoreService) {\n const renderer = this.layoutRenderer();\n const container = renderer?.getContainer();\n this.widgetCoreService = container?.builderService ?? null;\n count = this.widgetCoreService.registeredWidgetsCount();\n }\n else {\n count = this.widgetCoreService.registeredWidgetsCount();\n // Clear existing timer\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n // Set new timer to call after 200ms of no count changes\n this.debounceTimer = setTimeout(() => {\n this.aggregateAndEvaluateActions();\n }, 200);\n }\n }, ...(ngDevMode ? [{ debugName: \"#eff\" }] : []));\n }\n //#endregion\n //#region ---- Lifecycle ----\n ngOnInit() {\n // Initialize context with provided context\n this.context.set(this.config?.context || {});\n }\n #eff;\n //#endregion\n handleContextChanged(event) {\n this.context.set(event);\n this.aggregateAndEvaluateActions();\n }\n handleContextInitiated(event) {\n this.context.set(event);\n this.aggregateAndEvaluateActions();\n }\n footerPrefixActions() {\n return this.footerPrefix();\n }\n footerSuffixActions() {\n return this.footerSuffix();\n }\n isFormLoading() {\n return this.isDialogLoading();\n }\n isSubmitting() {\n return this.isDialogLoading();\n }\n async executeAction(action) {\n const cmd = action.command;\n if (cmd !== 'cancel') {\n const isValid = await this.layoutRenderer()?.validate();\n if (!isValid?.result) {\n return;\n }\n }\n if (typeof cmd === 'string' && cmd.startsWith('widget:')) {\n const parsed = this.parseWidgetCommand(cmd);\n if (parsed.widgetName && parsed.action) {\n await this.executeWidgetApi(parsed.widgetName, parsed.action);\n await this.aggregateAndEvaluateActions();\n return;\n }\n }\n // Fallback: treat as regular dialog action (cancel/confirm/custom)\n const result = { context: this.context(), action: cmd };\n this.dialogResult = result;\n if (this.data) {\n this.data.context = result.context;\n this.data.action = result.action;\n }\n this.callBack({\n close: (result) => {\n this.close(result);\n },\n context: () => this.context(),\n action: () => result.action,\n setLoading: (loading) => {\n this.isDialogLoading.set(loading);\n },\n });\n }\n parseWidgetCommand(cmd) {\n // Expected 'widget:<widgetName>.<action>'\n if (!cmd?.startsWith('widget:'))\n return {};\n const rest = cmd.slice('widget:'.length);\n const dot = rest.lastIndexOf('.');\n if (dot <= 0)\n return {};\n return { widgetName: rest.slice(0, dot), action: rest.slice(dot + 1) };\n }\n async executeWidgetApi(widgetName, apiMethod) {\n if (!this.widgetCoreService)\n return;\n try {\n const widget = this.widgetCoreService.getWidget(widgetName);\n const api = widget?.api?.();\n const fn = api?.[apiMethod];\n if (typeof fn === 'function') {\n await Promise.resolve(fn({\n close: (result) => {\n this.close(result);\n },\n context: () => this.context(),\n setLoading: (loading) => {\n this.isDialogLoading.set(loading);\n },\n }));\n }\n }\n catch { }\n }\n async close(result) {\n if (result) {\n const isValid = await this.layoutRenderer()?.validate();\n if (isValid?.result) {\n this.result.emit(result);\n }\n }\n super.close(result);\n }\n // --- Actions aggregation & evaluation ---\n async aggregateAndEvaluateActions() {\n const widgetActions = await this.collectWidgetActions();\n const dialogActions = this.collectDialogActionsFromConfig();\n const all = [...widgetActions, ...dialogActions];\n const evaluated = await this.evaluatePredicates(all);\n const visible = evaluated.filter((a) => a.hidden !== true);\n const prefix = visible.filter((a) => (a.zone ?? 'footer') === 'footer' && (a.placement ?? 'suffix') === 'prefix');\n const suffix = visible.filter((a) => (a.zone ?? 'footer') === 'footer' && (a.placement ?? 'suffix') === 'suffix');\n this.footerPrefix.set(prefix);\n this.footerSuffix.set(suffix);\n }\n async collectWidgetActions() {\n if (!this.widgetCoreService)\n return [];\n const names = this.widgetCoreService.listRegisteredWidgetNames();\n const actions = [];\n for (const name of names) {\n try {\n const widget = this.widgetCoreService.getWidget(name);\n const widgetActs = widget?.actions?.() ?? [];\n actions.push(...widgetActs);\n }\n catch { }\n }\n return actions;\n }\n collectDialogActionsFromConfig() {\n const footer = this.config?.actions?.footer;\n const mapOne = (a, placement) => ({\n title: a.title,\n command: typeof a.command === 'string' ? a.command : a.command?.name,\n icon: a.icon,\n color: a.color,\n disabled: a.disabled,\n hidden: a.hidden,\n zone: 'footer',\n placement,\n scope: a.scope,\n });\n const prefix = (footer?.prefix || []).map((a) => mapOne(a, 'prefix'));\n const suffix = (footer?.suffix || []).map((a) => mapOne(a, 'suffix'));\n return [...prefix, ...suffix];\n }\n async evaluatePredicates(actions) {\n const out = [];\n for (const a of actions) {\n const parsed = typeof a.command === 'string' ? this.parseWidgetCommand(a.command) : {};\n const api = parsed.widgetName ? await this.resolveApi(parsed.widgetName) : undefined;\n const scope = {\n api,\n widget: { name: parsed.widgetName },\n dialog: { context: this.context() },\n context: this.context(),\n };\n const disabled = await this.evalBool(a.disabled, scope);\n const hidden = await this.evalBool(a.hidden, scope);\n out.push({ ...a, disabled, hidden });\n }\n return out;\n }\n async evalBool(value, scope) {\n if (typeof value === 'boolean')\n return value;\n if (typeof value === 'string') {\n try {\n const result = await this.expressionEvaluator.evaluate(value, scope);\n return !!result;\n }\n catch {\n return false;\n }\n }\n return value;\n }\n async resolveApi(widgetName) {\n try {\n await this.widgetCoreService?.waitForWidget(widgetName, 2000);\n const widget = this.widgetCoreService?.getWidget(widgetName);\n return widget?.api?.();\n }\n catch {\n return undefined;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPDialogRendererComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.4\", type: AXPDialogRendererComponent, isStandalone: true, selector: \"axp-dialog-renderer\", inputs: { config: \"config\" }, outputs: { result: \"result\" }, viewQueries: [{ propertyName: \"layoutRenderer\", first: true, predicate: AXPLayoutRendererComponent, descendants: true, isSignal: true }], 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 @for (action of footerPrefixActions(); 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 <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-prefix>\n <ax-suffix>\n @for (action of footerSuffixActions(); 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 (isFormLoading()) {\n <ax-loading></ax-loading>\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 </ax-suffix>\n </ax-footer>\n `, isInline: true, dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"component\", type: AXPLayoutRendererComponent, selector: \"axp-layout-renderer\", inputs: [\"layout\", \"context\", \"look\", \"mode\"], outputs: [\"contextChange\", \"contextInitiated\", \"validityChange\"] }, { kind: \"ngmodule\", type: AXButtonModule }, { kind: \"component\", type: i1.AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"ngmodule\", type: AXDecoratorModule }, { kind: \"component\", type: i2.AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }, { kind: \"component\", type: i2.AXDecoratorGenericComponent, selector: \"ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay\" }, { kind: \"ngmodule\", type: AXLoadingModule }, { kind: \"component\", type: i3.AXLoadingComponent, selector: \"ax-loading\", inputs: [\"visible\", \"type\", \"context\"], outputs: [\"visibleChange\"] }, { kind: \"ngmodule\", type: AXTranslationModule }, { kind: \"pipe\", type: i4.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i5.AXTranslatorPipe, name: \"translate\" }] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.4\", ngImport: i0, type: AXPDialogRendererComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'axp-dialog-renderer',\n standalone: true,\n imports: [\n CommonModule,\n AXPLayoutRendererComponent,\n AXButtonModule,\n AXDecoratorModule,\n AXLoadingModule,\n AXTranslationModule,\n ],\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 @for (action of footerPrefixActions(); 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 <ax-prefix>\n <i class=\"{{ action.icon }}\"></i>\n </ax-prefix>\n </ax-button>\n }\n </ax-prefix>\n <ax-suffix>\n @for (action of footerSuffixActions(); 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 (isFormLoading()) {\n <ax-loading></ax-loading>\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 </ax-suffix>\n </ax-footer>\n `,\n }]\n }], propDecorators: { config: [{\n type: Input\n }], result: [{\n type: Output\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXIvc3JjL2xpYi9kaWFsb2ctcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxILE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7O0FBaUZ6RSxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsbUJBQW1CO0lBN0RuRTs7UUErRFksV0FBTSxHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBTXBELHdCQUFtQixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBU3BFLFlBQU8sR0FBRyxNQUFNLENBQU0sRUFBRSxtREFBQyxDQUFDO1FBRTFCLCtFQUErRTtRQUMvRSxhQUFRLEdBQXNDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUcvQyxvQkFBZSxHQUFH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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdEVDtpQkFDRjs4QkFFVSxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksTUFBTTtzQkFBZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhMb2FkaW5nTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xvYWRpbmcnO1xuaW1wb3J0IHsgQVhCYXNlUGFnZUNvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9wYWdlJztcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvcmUvdHJhbnNsYXRpb24nO1xuaW1wb3J0IHsgQVhQRXhwcmVzc2lvbkV2YWx1YXRvclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvcmUnO1xuaW1wb3J0IHsgQVhQV2lkZ2V0Q29yZUVsZW1lbnRBY3Rpb24sIEFYUFdpZGdldENvcmVTZXJ2aWNlLCBBWFBXaWRnZXROb2RlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvd2lkZ2V0LWNvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgZWZmZWN0LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBzaWduYWwsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhQRGlhbG9nUmVmIH0gZnJvbSAnLi9sYXlvdXQtYnVpbGRlci50eXBlcyc7XG5pbXBvcnQgeyBBWFBMYXlvdXRSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nUmVuZGVyZXJDb25maWcge1xuICB0aXRsZTogc3RyaW5nO1xuICBtZXNzYWdlPzogc3RyaW5nO1xuICBjb250ZXh0OiBhbnk7XG4gIGRlZmluaXRpb246IEFYUFdpZGdldE5vZGU7XG4gIGFjdGlvbnM/OiB7XG4gICAgZm9vdGVyPzoge1xuICAgICAgcHJlZml4PzogYW55W107XG4gICAgICBzdWZmaXg/OiBhbnlbXTtcbiAgICB9O1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpYWxvZ1JlbmRlcmVyUmVzdWx0IHtcbiAgY29udGV4dDogYW55O1xuICBhY3Rpb24/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4cC1kaWFsb2ctcmVuZGVyZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFYUExheW91dFJlbmRlcmVyQ29tcG9uZW50LFxuICAgIEFYQnV0dG9uTW9kdWxlLFxuICAgIEFYRGVjb3JhdG9yTW9kdWxlLFxuICAgIEFYTG9hZGluZ01vZHVsZSxcbiAgICBBWFRyYW5zbGF0aW9uTW9kdWxlLFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJheC1wLTRcIj5cbiAgICAgIDxheHAtbGF5b3V0LXJlbmRlcmVyXG4gICAgICAgIFtsYXlvdXRdPVwiY29uZmlnLmRlZmluaXRpb25cIlxuICAgICAgICBbY29udGV4dF09XCJjb250ZXh0KClcIlxuICAgICAgICAoY29udGV4dENoYW5nZSk9XCJoYW5kbGVDb250ZXh0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgKGNvbnRleHRJbml0aWF0ZWQpPVwiaGFuZGxlQ29udGV4dEluaXRpYXRlZCgkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgIDwvYXhwLWxheW91dC1yZW5kZXJlcj5cbiAgICA8L2Rpdj5cblxuICAgIDxheC1mb290ZXI+XG4gICAgICA8YXgtcHJlZml4PlxuICAgICAgICBAZm9yIChhY3Rpb24gb2YgZm9vdGVyUHJlZml4QWN0aW9ucygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkIHx8IGlzRm9ybUxvYWRpbmcoKVwiXG4gICAgICAgICAgICBbdGV4dF09XCIoYWN0aW9uLnRpdGxlIHwgdHJhbnNsYXRlIHwgYXN5bmMpIVwiXG4gICAgICAgICAgICBbbG9va109XCInb3V0bGluZSdcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImFjdGlvbi5jb2xvclwiXG4gICAgICAgICAgICAob25DbGljayk9XCJleGVjdXRlQWN0aW9uKGFjdGlvbilcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwie3sgYWN0aW9uLmljb24gfX1cIj48L2k+XG4gICAgICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9heC1wcmVmaXg+XG4gICAgICA8YXgtc3VmZml4PlxuICAgICAgICBAZm9yIChhY3Rpb24gb2YgZm9vdGVyU3VmZml4QWN0aW9ucygpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkIHx8IGlzU3VibWl0dGluZygpXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cIihhY3Rpb24udGl0bGUgfCB0cmFuc2xhdGUgfCBhc3luYykhXCJcbiAgICAgICAgICAgIFtsb29rXT1cIidzb2xpZCdcIlxuICAgICAgICAgICAgW2NvbG9yXT1cImFjdGlvbi5jb2xvclwiXG4gICAgICAgICAgICAob25DbGljayk9XCJleGVjdXRlQWN0aW9uKGFjdGlvbilcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoaXNGb3JtTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIDxheC1sb2FkaW5nPjwvYXgtbG9hZGluZz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoYWN0aW9uLmljb24pIHtcbiAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICA8YXgtaWNvbiBpY29uPVwie3sgYWN0aW9uLmljb24gfX1cIj48L2F4LWljb24+XG4gICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L2F4LXN1ZmZpeD5cbiAgICA8L2F4LWZvb3Rlcj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgQVhQRGlhbG9nUmVuZGVyZXJDb21wb25lbnQgZXh0ZW5kcyBBWEJhc2VQYWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgY29uZmlnITogRGlhbG9nUmVuZGVyZXJDb25maWc7XG4gIEBPdXRwdXQoKSByZXN1bHQgPSBuZXcgRXZlbnRFbWl0dGVyPERpYWxvZ1JlbmRlcmVyUmVzdWx0PigpO1xuXG4gIC8vI3JlZ2lvbiAtLS0tICAgU2VydmljZXMgJiBEZXBlbmRlbmNpZXMgICAtLS0tXG5cbiAgLy8g4pyFIEluamVjdCBzZXJ2aWNlc1xuICBwcml2YXRlIHdpZGdldENvcmVTZXJ2aWNlOiBBWFBXaWRnZXRDb3JlU2VydmljZTtcbiAgcHJpdmF0ZSBleHByZXNzaW9uRXZhbHVhdG9yID0gaW5qZWN0KEFYUEV4cHJlc3Npb25FdmFsdWF0b3JTZXJ2aWNlKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFN0YXRlICAgLS0tLVxuXG4gIC8vIFN0b3JlIGRpYWxvZyByZXN1bHQgZm9yIG1hbnVhbCBjbG9zaW5nXG4gIHByaXZhdGUgZGlhbG9nUmVzdWx0PzogRGlhbG9nUmVuZGVyZXJSZXN1bHQ7XG5cbiAgY29udGV4dCA9IHNpZ25hbDxhbnk+KHt9KTtcblxuICAvLyBUaGlzIHdpbGwgYmUgc2V0IGJ5IHRoZSBwb3B1cCBzZXJ2aWNlIGF1dG9tYXRpY2FsbHkgLSBzYW1lIGFzIGR5bmFtaWMtZGlhbG9nXG4gIGNhbGxCYWNrOiAoZGlhbG9nUmVmOiBBWFBEaWFsb2dSZWYpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgZGF0YTogYW55O1xuXG4gIHByaXZhdGUgaXNEaWFsb2dMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcblxuICAvLyBBZ2dyZWdhdGVkIGFjdGlvbnMgZm9yIGZvb3RlciByZW5kZXJpbmdcbiAgZm9vdGVyUHJlZml4ID0gc2lnbmFsPEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uW10+KFtdKTtcbiAgZm9vdGVyU3VmZml4ID0gc2lnbmFsPEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uW10+KFtdKTtcblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIExpZmVjeWNsZSAgIC0tLS1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpIHtcbiAgICAvLyBJbml0aWFsaXplIGNvbnRleHQgd2l0aCBwcm92aWRlZCBjb250ZXh0XG4gICAgdGhpcy5jb250ZXh0LnNldCh0aGlzLmNvbmZpZz8uY29udGV4dCB8fCB7fSk7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gLS0tLSAgIFZpZXcgQWNjZXNzb3JzICAgLS0tLVxuXG4gIC8vIEFjY2VzcyB0aGUgaW50ZXJuYWwgbGF5b3V0IHJlbmRlcmVyIHRvIHJlYWNoIHRoZSB3aWRnZXRzIGNvbnRhaW5lciBpbmplY3RvclxuICBwcml2YXRlIGxheW91dFJlbmRlcmVyID0gdmlld0NoaWxkKEFYUExheW91dFJlbmRlcmVyQ29tcG9uZW50KTtcblxuICAvLyBEZWJvdW5jZSB0aW1lciBmb3IgYWdncmVnYXRpbmcgYWN0aW9ucyBhZnRlciB3aWRnZXQgY291bnQgc3RhYmlsaXplc1xuICBwcml2YXRlIGRlYm91bmNlVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuICAjZWZmID0gZWZmZWN0KCgpID0+IHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIHRoaXMuYWdncmVnYXRlQW5kRXZhbHVhdGVBY3Rpb25zKCk7XG4gICAgaWYgKCF0aGlzLndpZGdldENvcmVTZXJ2aWNlKSB7XG4gICAgICBjb25zdCByZW5kZXJlciA9IHRoaXMubGF5b3V0UmVuZGVyZXIoKTtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHJlbmRlcmVyPy5nZXRDb250YWluZXIoKTtcbiAgICAgIHRoaXMud2lkZ2V0Q29yZVNlcnZpY2UgPSAoY29udGFpbmVyPy5idWlsZGVyU2VydmljZSBhcyBBWFBXaWRnZXRDb3JlU2VydmljZSkgPz8gbnVsbDtcbiAgICAgIGNvdW50ID0gdGhpcy53aWRnZXRDb3JlU2VydmljZS5yZWdpc3RlcmVkV2lkZ2V0c0NvdW50KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gdGhpcy53aWRnZXRDb3JlU2VydmljZS5yZWdpc3RlcmVkV2lkZ2V0c0NvdW50KCk7XG5cbiAgICAgIC8vIENsZWFyIGV4aXN0aW5nIHRpbWVyXG4gICAgICBpZiAodGhpcy5kZWJvdW5jZVRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZXIpO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgbmV3IHRpbWVyIHRvIGNhbGwgYWZ0ZXIgMjAwbXMgb2Ygbm8gY291bnQgY2hhbmdlc1xuICAgICAgdGhpcy5kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuYWdncmVnYXRlQW5kRXZhbHVhdGVBY3Rpb25zKCk7XG4gICAgICB9LCAyMDApO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgaGFuZGxlQ29udGV4dENoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuY29udGV4dC5zZXQoZXZlbnQpO1xuICAgIHRoaXMuYWdncmVnYXRlQW5kRXZhbHVhdGVBY3Rpb25zKCk7XG4gIH1cblxuICBoYW5kbGVDb250ZXh0SW5pdGlhdGVkKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmNvbnRleHQuc2V0KGV2ZW50KTtcbiAgICB0aGlzLmFnZ3JlZ2F0ZUFuZEV2YWx1YXRlQWN0aW9ucygpO1xuICB9XG5cbiAgZm9vdGVyUHJlZml4QWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5mb290ZXJQcmVmaXgoKTtcbiAgfVxuXG4gIGZvb3RlclN1ZmZpeEFjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9vdGVyU3VmZml4KCk7XG4gIH1cblxuICBpc0Zvcm1Mb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGlhbG9nTG9hZGluZygpO1xuICB9XG5cbiAgaXNTdWJtaXR0aW5nKCkge1xuICAgIHJldHVybiB0aGlzLmlzRGlhbG9nTG9hZGluZygpO1xuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUFjdGlvbihhY3Rpb246IEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uKSB7XG4gICAgY29uc3QgY21kID0gYWN0aW9uLmNvbW1hbmQ7XG5cbiAgICBpZiAoY21kICE9PSAnY2FuY2VsJykge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IHRoaXMubGF5b3V0UmVuZGVyZXIoKT8udmFsaWRhdGUoKTtcbiAgICAgIGlmICghaXNWYWxpZD8ucmVzdWx0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNtZCA9PT0gJ3N0cmluZycgJiYgY21kLnN0YXJ0c1dpdGgoJ3dpZGdldDonKSkge1xuICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZVdpZGdldENvbW1hbmQoY21kKTtcbiAgICAgIGlmIChwYXJzZWQud2lkZ2V0TmFtZSAmJiBwYXJzZWQuYWN0aW9uKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0ZVdpZGdldEFwaShwYXJzZWQud2lkZ2V0TmFtZSwgcGFyc2VkLmFjdGlvbik7XG4gICAgICAgIGF3YWl0IHRoaXMuYWdncmVnYXRlQW5kRXZhbHVhdGVBY3Rpb25zKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjazogdHJlYXQgYXMgcmVndWxhciBkaWFsb2cgYWN0aW9uIChjYW5jZWwvY29uZmlybS9jdXN0b20pXG4gICAgY29uc3QgcmVzdWx0OiBEaWFsb2dSZW5kZXJlclJlc3VsdCA9IHsgY29udGV4dDogdGhpcy5jb250ZXh0KCksIGFjdGlvbjogY21kIH07XG4gICAgdGhpcy5kaWFsb2dSZXN1bHQgPSByZXN1bHQ7XG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhLmNvbnRleHQgPSByZXN1bHQuY29udGV4dDtcbiAgICAgIHRoaXMuZGF0YS5hY3Rpb24gPSByZXN1bHQuYWN0aW9uO1xuICAgIH1cbiAgICB0aGlzLmNhbGxCYWNrKHtcbiAgICAgIGNsb3NlOiAocmVzdWx0PzogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UocmVzdWx0KTtcbiAgICAgIH0sXG4gICAgICBjb250ZXh0OiAoKSA9PiB0aGlzLmNvbnRleHQoKSxcbiAgICAgIGFjdGlvbjogKCkgPT4gcmVzdWx0LmFjdGlvbixcbiAgICAgIHNldExvYWRpbmc6IChsb2FkaW5nOiBib29sZWFuKSA9PiB7XG4gICAgICAgIHRoaXMuaXNEaWFsb2dMb2FkaW5nLnNldChsb2FkaW5nKTtcbiAgICAgIH0sXG4gICAgfSBhcyBBWFBEaWFsb2dSZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVdpZGdldENvbW1hbmQoY21kOiBzdHJpbmcpOiB7IHdpZGdldE5hbWU/OiBzdHJpbmc7IGFjdGlvbj86IHN0cmluZyB9IHtcbiAgICAvLyBFeHBlY3RlZCAnd2lkZ2V0Ojx3aWRnZXROYW1lPi48YWN0aW9uPidcbiAgICBpZiAoIWNtZD8uc3RhcnRzV2l0aCgnd2lkZ2V0OicpKSByZXR1cm4ge307XG4gICAgY29uc3QgcmVzdCA9IGNtZC5zbGljZSgnd2lkZ2V0OicubGVuZ3RoKTtcbiAgICBjb25zdCBkb3QgPSByZXN0Lmxhc3RJbmRleE9mKCcuJyk7XG4gICAgaWYgKGRvdCA8PSAwKSByZXR1cm4ge307XG4gICAgcmV0dXJuIHsgd2lkZ2V0TmFtZTogcmVzdC5zbGljZSgwLCBkb3QpLCBhY3Rpb246IHJlc3Quc2xpY2UoZG90ICsgMSkgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZVdpZGdldEFwaSh3aWRnZXROYW1lOiBzdHJpbmcsIGFwaU1ldGhvZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLndpZGdldENvcmVTZXJ2aWNlKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdpZGdldCA9IHRoaXMud2lkZ2V0Q29yZVNlcnZpY2UuZ2V0V2lkZ2V0KHdpZGdldE5hbWUpIGFzIGFueTtcbiAgICAgIGNvbnN0IGFwaSA9IHdpZGdldD8uYXBpPy4oKTtcbiAgICAgIGNvbnN0IGZuID0gYXBpPy5bYXBpTWV0aG9kXTtcbiAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgIGZuKHtcbiAgICAgICAgICAgIGNsb3NlOiAocmVzdWx0PzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2xvc2UocmVzdWx0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZXh0OiAoKSA9PiB0aGlzLmNvbnRleHQoKSxcbiAgICAgICAgICAgIHNldExvYWRpbmc6IChsb2FkaW5nOiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaXNEaWFsb2dMb2FkaW5nLnNldChsb2FkaW5nKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSBhcyBBWFBEaWFsb2dSZWYpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge31cbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGNsb3NlKHJlc3VsdD86IERpYWxvZ1JlbmRlcmVyUmVzdWx0KSB7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IGF3YWl0IHRoaXMubGF5b3V0UmVuZGVyZXIoKT8udmFsaWRhdGUoKTtcbiAgICAgIGlmIChpc1ZhbGlkPy5yZXN1bHQpIHtcbiAgICAgICAgdGhpcy5yZXN1bHQuZW1pdChyZXN1bHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyLmNsb3NlKHJlc3VsdCk7XG4gIH1cblxuICAvLyAtLS0gQWN0aW9ucyBhZ2dyZWdhdGlvbiAmIGV2YWx1YXRpb24gLS0tXG4gIHByaXZhdGUgYXN5bmMgYWdncmVnYXRlQW5kRXZhbHVhdGVBY3Rpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHdpZGdldEFjdGlvbnMgPSBhd2FpdCB0aGlzLmNvbGxlY3RXaWRnZXRBY3Rpb25zKCk7XG4gICAgY29uc3QgZGlhbG9nQWN0aW9ucyA9IHRoaXMuY29sbGVjdERpYWxvZ0FjdGlvbnNGcm9tQ29uZmlnKCk7XG4gICAgY29uc3QgYWxsID0gWy4uLndpZGdldEFjdGlvbnMsIC4uLmRpYWxvZ0FjdGlvbnNdO1xuICAgIGNvbnN0IGV2YWx1YXRlZCA9IGF3YWl0IHRoaXMuZXZhbHVhdGVQcmVkaWNhdGVzKGFsbCk7XG4gICAgY29uc3QgdmlzaWJsZSA9IGV2YWx1YXRlZC5maWx0ZXIoKGEpID0+IGEuaGlkZGVuICE9PSB0cnVlKTtcblxuICAgIGNvbnN0IHByZWZpeCA9IHZpc2libGUuZmlsdGVyKChhKSA9PiAoYS56b25lID8/ICdmb290ZXInKSA9PT0gJ2Zvb3RlcicgJiYgKGEucGxhY2VtZW50ID8/ICdzdWZmaXgnKSA9PT0gJ3ByZWZpeCcpO1xuICAgIGNvbnN0IHN1ZmZpeCA9IHZpc2libGUuZmlsdGVyKChhKSA9PiAoYS56b25lID8/ICdmb290ZXInKSA9PT0gJ2Zvb3RlcicgJiYgKGEucGxhY2VtZW50ID8/ICdzdWZmaXgnKSA9PT0gJ3N1ZmZpeCcpO1xuXG4gICAgdGhpcy5mb290ZXJQcmVmaXguc2V0KHByZWZpeCk7XG4gICAgdGhpcy5mb290ZXJTdWZmaXguc2V0KHN1ZmZpeCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbGxlY3RXaWRnZXRBY3Rpb25zKCk6IFByb21pc2U8QVhQV2lkZ2V0Q29yZUVsZW1lbnRBY3Rpb25bXT4ge1xuICAgIGlmICghdGhpcy53aWRnZXRDb3JlU2VydmljZSkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IG5hbWVzID0gdGhpcy53aWRnZXRDb3JlU2VydmljZS5saXN0UmVnaXN0ZXJlZFdpZGdldE5hbWVzKCk7XG4gICAgY29uc3QgYWN0aW9uczogQVhQV2lkZ2V0Q29yZUVsZW1lbnRBY3Rpb25bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0ID0gdGhpcy53aWRnZXRDb3JlU2VydmljZS5nZXRXaWRnZXQobmFtZSkgYXMgYW55O1xuICAgICAgICBjb25zdCB3aWRnZXRBY3RzOiBBWFBXaWRnZXRDb3JlRWxlbWVudEFjdGlvbltdID0gd2lkZ2V0Py5hY3Rpb25zPy4oKSA/PyBbXTtcbiAgICAgICAgYWN0aW9ucy5wdXNoKC4uLndpZGdldEFjdHMpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgIH1cbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgY29sbGVjdERpYWxvZ0FjdGlvbnNGcm9tQ29uZmlnKCk6IEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uW10ge1xuICAgIGNvbnN0IGZvb3RlciA9IHRoaXMuY29uZmlnPy5hY3Rpb25zPy5mb290ZXI7XG4gICAgY29uc3QgbWFwT25lID0gKGE6IGFueSwgcGxhY2VtZW50OiAncHJlZml4JyB8ICdzdWZmaXgnKTogQVhQV2lkZ2V0Q29yZUVsZW1lbnRBY3Rpb24gPT4gKHtcbiAgICAgIHRpdGxlOiBhLnRpdGxlLFxuICAgICAgY29tbWFuZDogdHlwZW9mIGEuY29tbWFuZCA9PT0gJ3N0cmluZycgPyBhLmNvbW1hbmQgOiBhLmNvbW1hbmQ/Lm5hbWUsXG4gICAgICBpY29uOiBhLmljb24sXG4gICAgICBjb2xvcjogYS5jb2xvcixcbiAgICAgIGRpc2FibGVkOiBhLmRpc2FibGVkLFxuICAgICAgaGlkZGVuOiBhLmhpZGRlbixcbiAgICAgIHpvbmU6ICdmb290ZXInLFxuICAgICAgcGxhY2VtZW50LFxuICAgICAgc2NvcGU6IGEuc2NvcGUsXG4gICAgfSk7XG4gICAgY29uc3QgcHJlZml4ID0gKGZvb3Rlcj8ucHJlZml4IHx8IFtdKS5tYXAoKGEpID0+IG1hcE9uZShhLCAncHJlZml4JykpO1xuICAgIGNvbnN0IHN1ZmZpeCA9IChmb290ZXI/LnN1ZmZpeCB8fCBbXSkubWFwKChhKSA9PiBtYXBPbmUoYSwgJ3N1ZmZpeCcpKTtcbiAgICByZXR1cm4gWy4uLnByZWZpeCwgLi4uc3VmZml4XTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXZhbHVhdGVQcmVkaWNhdGVzKGFjdGlvbnM6IEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uW10pOiBQcm9taXNlPEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uW10+IHtcbiAgICBjb25zdCBvdXQ6IEFYUFdpZGdldENvcmVFbGVtZW50QWN0aW9uW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGEgb2YgYWN0aW9ucykge1xuICAgICAgY29uc3QgcGFyc2VkID0gdHlwZW9mIGEuY29tbWFuZCA9PT0gJ3N0cmluZycgPyB0aGlzLnBhcnNlV2lkZ2V0Q29tbWFuZChhLmNvbW1hbmQpIDoge307XG4gICAgICBjb25zdCBhcGkgPSBwYXJzZWQud2lkZ2V0TmFtZSA/IGF3YWl0IHRoaXMucmVzb2x2ZUFwaShwYXJzZWQud2lkZ2V0TmFtZSkgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBzY29wZSA9IHtcbiAgICAgICAgYXBpLFxuICAgICAgICB3aWRnZXQ6IHsgbmFtZTogcGFyc2VkLndpZGdldE5hbWUgfSxcbiAgICAgICAgZGlhbG9nOiB7IGNvbnRleHQ6IHRoaXMuY29udGV4dCgpIH0sXG4gICAgICAgIGNvbnRleHQ6IHRoaXMuY29udGV4dCgpLFxuICAgICAgfSBhcyBhbnk7XG4gICAgICBjb25zdCBkaXNhYmxlZCA9IGF3YWl0IHRoaXMuZXZhbEJvb2woYS5kaXNhYmxlZCwgc2NvcGUpO1xuICAgICAgY29uc3QgaGlkZGVuID0gYXdhaXQgdGhpcy5ldmFsQm9vbChhLmhpZGRlbiwgc2NvcGUpO1xuICAgICAgb3V0LnB1c2goeyAuLi5hLCBkaXNhYmxlZCwgaGlkZGVuIH0pO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBldmFsQm9vbCh2YWx1ZTogYm9vbGVhbiB8IHN0cmluZyB8IHVuZGVmaW5lZCwgc2NvcGU6IGFueSk6IFByb21pc2U8Ym9vbGVhbiB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIHZhbHVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbHVhdGUodmFsdWUsIHNjb3BlKTtcbiAgICAgICAgcmV0dXJuICEhcmVzdWx0O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlQXBpKHdpZGdldE5hbWU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMud2lkZ2V0Q29yZVNlcnZpY2U/LndhaXRGb3JXaWRnZXQod2lkZ2V0TmFtZSwgMjAwMCk7XG4gICAgICBjb25zdCB3aWRnZXQgPSB0aGlzLndpZGdldENvcmVTZXJ2aWNlPy5nZXRXaWRnZXQod2lkZ2V0TmFtZSkgYXMgYW55O1xuICAgICAgcmV0dXJuIHdpZGdldD8uYXBpPy4oKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LXBsYXRmb3JtLWxheW91dC1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlci9zcmMvYWNvcmV4LXBsYXRmb3JtLWxheW91dC1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i1","i2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAGA;AACA;AACA;AACA;AACA,SAAS,0BAA0B,CAAC,OAAO,EAAE,WAAW,GAAG,EAAE,EAAE;AAC/D,IAAI,OAAO;AACX,QAAQ,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,MAAM;AACxD,QAAQ,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ;AAC1D,QAAQ,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ;AAC1D,QAAQ,SAAS,EAAE,WAAW,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;AAC7D,QAAQ,OAAO,EAAE,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;AACvD,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS,uBAAuB,CAAC,aAAa,EAAE,cAAc,GAAG,EAAE,EAAE;AACrE,IAAI,OAAO;AACX,QAAQ,GAAG,aAAa;AACxB,QAAQ,GAAG,cAAc;AACzB,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS,gBAAgB,GAAG;AAC5B,IAAI,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;AACpG;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;AAC5B,IAAI,OAAO;AACX,SAAS,WAAW;AACpB,SAAS,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC;AACpC,SAAS,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AAC7B,SAAS,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1B;AACA;AACA;AACA;AACA,SAAS,uBAAuB,CAAC,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE;AAC5E;AACA,IAAI,IAAI,UAAU,EAAE;AACpB,QAAQ,OAAO,UAAU;AACzB,IAAI;AACJ,IAAI,IAAI,aAAa,EAAE;AACvB,QAAQ,OAAO,aAAa;AAC5B,IAAI;AACJ,IAAI,IAAI,cAAc,EAAE;AACxB,QAAQ,OAAO,WAAW,CAAC,cAAc,CAAC;AAC1C,IAAI;AACJ,IAAI,OAAO,gBAAgB,EAAE;AAC7B;AACA;AACA;AACO,MAAM,uBAAuB,CAAC;AACrC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AAClD,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,GAAG;AACb,QAAQ,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;AACnD,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC1L,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AACjK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,CAAC;AACjI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;AACb;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,aAAa,CAAC;AACpB,IAAI,WAAW,CAAC,YAAY,EAAE;AAC9B,QAAQ,IAAI,CAAC,YAAY,GAAG,YAAY;AACxC,QAAQ,IAAI,CAAC,IAAI,GAAG;AACpB,YAAY,QAAQ,EAAE,EAAE;AACxB,YAAY,IAAI,EAAE,MAAM;AACxB,YAAY,IAAI,EAAE,aAAa;AAC/B,SAAS;AACT,QAAQ,IAAI,CAAC,kBAAkB,GAAG;AAClC,YAAY,IAAI,EAAE,MAAM;AACxB,SAAS;AACT,IAAI;AACJ;AACA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE;AACpD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE;AACrC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE;AACpD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAClD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,KAAK,CAAC,QAAQ,EAAE;AACpB,QAAQ,MAAM,SAAS,GAAG,IAAI,qBAAqB,EAAE;AACrD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAClD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE;AACpD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAClD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,MAAM,CAAC,QAAQ,EAAE;AACrB,QAAQ,MAAM,SAAS,GAAG,IAAI,sBAAsB,EAAE;AACtD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAClD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,QAAQ,CAAC,QAAQ,EAAE;AACvB,QAAQ,MAAM,SAAS,GAAG,IAAI,wBAAwB,EAAE;AACxD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAClD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,MAAM,CAAC,QAAQ,EAAE;AACrB,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AAChC,YAAY,MAAM,IAAI,KAAK,CAAC,uGAAuG,CAAC;AACpI,QAAQ;AACR,QAAQ,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC;AACvE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ,IAAI,UAAU,CAAC,QAAQ,EAAE;AACzB,QAAQ,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE;AAC9C,QAAQ,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC9D,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,MAAM,CAAC;AAC5B,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAC/C,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE;AAC/B,QAAQ,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC;AACjD,QAAQ,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC7D,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,KAAK,CAAC;AAC3B,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AAC9C,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,KAAK,GAAG;AACZ,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AAChC,YAAY,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;AACxC,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI;AAChC,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,oBAAoB,CAAC;AAC3B,IAAI,WAAW,CAAC,aAAa,EAAE;AAC/B,QAAQ,IAAI,CAAC,cAAc,GAAG;AAC9B,YAAY,IAAI,EAAE,MAAM;AACxB,YAAY,IAAI,EAAE,aAAa;AAC/B,YAAY,QAAQ,EAAE,EAAE;AACxB,SAAS;AACT,QAAQ,IAAI,CAAC,kBAAkB,GAAG,EAAE;AACpC,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,aAAa;AAChD,IAAI;AACJ;AACA,IAAI,cAAc,GAAG;AACrB,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,IAAI,EAAE;AACzE,IAAI;AACJ,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE;AAC7B,QAAQ,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE;AACzC,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB;AACA,QAAQ,MAAM,aAAa,GAAG,OAAO,IAAI,EAAE;AAC3C,QAAQ,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI;AACvC,QAAQ,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI;AACvC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAC/C,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;AAChF,QAAQ;AACR;AACA,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAQ;AACR,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAC5B,QAAQ;AACR;AACA,QAAQ,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,YAAY,EAAE,GAAG,aAAa;AACpE;AACA;AACA;AACA,QAAQ,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC7D,QAAQ,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;AACnC,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACxD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,MAAM,gBAAgB,GAAG;AACjC,YAAY,aAAa;AACzB,YAAY,mBAAmB;AAC/B,YAAY,kBAAkB;AAC9B,YAAY,iBAAiB;AAC7B,YAAY,eAAe;AAC3B,YAAY,eAAe;AAC3B,YAAY,eAAe;AAC3B,YAAY,uBAAuB;AACnC,YAAY,kBAAkB;AAC9B,YAAY,eAAe;AAC3B,YAAY,cAAc;AAC1B,SAAS;AACT,QAAQ,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC9C,IAAI;AACJ,IAAI,KAAK,GAAG;AACZ,QAAQ,MAAM,MAAM,GAAG;AACvB,YAAY,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAC1C,YAAY,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ;AAClD,YAAY,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO;AAChD,YAAY,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAC1C,YAAY,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO;AAChD,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,KAAK,YAAY,EAAE;AACvD,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1C,gBAAgB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI;AACtD,YAAY;AACZ,iBAAiB,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE;AAC7D,gBAAgB,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,aAAa;AAC/F,YAAY;AACZ;AACA,QAAQ;AACR,aAAa;AACb;AACA,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1C,gBAAgB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI;AACtD,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE;AAC1C,gBAAgB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI;AACtD,YAAY;AACZ,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,KAAK,SAAS,EAAE;AAChE,gBAAgB,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY;AACtE,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,MAAM;AACrB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,kBAAkB,SAAS,oBAAoB,CAAC;AACtD,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI;AACvC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI;AACvC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI;AACvC,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,IAAI;AAC3C,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,CAAC,SAAS,EAAE;AACvB,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO;AACxC,YAAY,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE;AAC5C,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS;AAC1D,QAAQ,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,SAAS;AACnD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,QAAQ,CAAC,SAAS,EAAE;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO;AACxC,YAAY,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE;AAC5C,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS;AAC3D,QAAQ,IAAI,CAAC,kBAAkB,CAAC,QAAQ,GAAG,SAAS;AACpD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,QAAQ,CAAC,SAAS,EAAE;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO;AACxC,YAAY,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE;AAC5C,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS;AAC3D,QAAQ,IAAI,CAAC,kBAAkB,CAAC,QAAQ,GAAG,SAAS;AACpD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,CAAC,SAAS,EAAE;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO;AACxC,YAAY,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE;AAC5C,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS;AAC5D,QAAQ,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,SAAS;AACrD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,sBAAsB,CAAC,OAAO,EAAE;AACpC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,uBAAuB,CAAC,OAAO,CAAC;AAClE,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,OAAO,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC7C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,oBAAoB,SAAS,kBAAkB,CAAC;AACtD,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB;AACA;AACA,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO;AACxC,YAAY,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE;AAC5C,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC;AACA,YAAY,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,GAAG,KAAK;AACvD,QAAQ;AACR,aAAa,IAAI,KAAK,EAAE;AACxB;AACA,YAAY,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS;AAC7C,YAAY,IAAI,SAAS,EAAE;AAC3B,gBAAgB,MAAM,OAAO,GAAG,SAAS,EAAE,EAAE,EAAE,OAAO;AACtD,oBAAoB,SAAS,EAAE,EAAE,EAAE,OAAO;AAC1C,oBAAoB,SAAS,EAAE,GAAG,EAAE,OAAO;AAC3C,oBAAoB,SAAS,EAAE,EAAE,EAAE,OAAO;AAC1C,oBAAoB,SAAS,EAAE,EAAE,EAAE,OAAO;AAC1C,gBAAgB,IAAI,OAAO,IAAI,IAAI,EAAE;AACrC,oBAAoB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO;AACjE,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAmB,SAAS,oBAAoB,CAAC;AACvD,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE;AACpD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC5D,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE;AACpD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC5D,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,KAAK,CAAC,QAAQ,EAAE;AACpB,QAAQ,MAAM,SAAS,GAAG,IAAI,qBAAqB,EAAE;AACrD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC5D,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE;AACpD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC5D,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,MAAM,CAAC,QAAQ,EAAE;AACrB,QAAQ,MAAM,SAAS,GAAG,IAAI,sBAAsB,EAAE;AACtD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC5D,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,QAAQ,CAAC,QAAQ,EAAE;AACvB,QAAQ,MAAM,SAAS,GAAG,IAAI,wBAAwB,EAAE;AACxD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC5D,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,MAAM,CAAC,QAAQ,EAAE;AACrB,QAAQ,MAAM,SAAS,GAAG,IAAI,sBAAsB,EAAE,CAAC;AACvD,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ,IAAI,UAAU,CAAC,QAAQ,EAAE;AACzB,QAAQ,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAE;AAC9C,QAAQ,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC9D,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,MAAM,CAAC;AAC5B,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AACzD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE;AAC/B,QAAQ,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC;AACjD,QAAQ,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC7D,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,KAAK,CAAC;AAC3B,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACxD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,oBAAoB,SAAS,mBAAmB,CAAC;AACvD,IAAI,OAAO,CAAC,OAAO,EAAE;AACrB,QAAQ,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAC;AAC9C,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,YAAY,CAAC,OAAO,EAAE;AAC1B,QAAQ,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,OAAO,CAAC;AACpD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,QAAQ,CAAC,OAAO,EAAE;AACtB,QAAQ,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC;AACnD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC;AAClD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,CAAC,OAAO,EAAE;AACvB,QAAQ,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC;AAChD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,CAAC,OAAO,EAAE;AACvB,QAAQ,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC;AAChD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,CAAC,OAAO,EAAE;AACvB,QAAQ,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC;AAChD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,aAAa,CAAC,OAAO,EAAE;AAC3B,QAAQ,IAAI,CAAC,SAAS,CAAC,uBAAuB,EAAE,OAAO,CAAC;AACxD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,OAAO,CAAC;AACnD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,YAAY,CAAC,OAAO,EAAE;AAC1B,QAAQ,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,OAAO,CAAC;AAChD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,QAAQ,CAAC,OAAO,EAAE;AACtB,QAAQ,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,OAAO,CAAC;AAC/C,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,QAAQ,MAAM,SAAS,GAAG,IAAI,iBAAiB,EAAE;AACjD,QAAQ,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACjE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,SAAS,CAAC;AAC/B,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AAC5D,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE;AAChC,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;AACrC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,oBAAoB,SAAS,oBAAoB,CAAC;AACxD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,aAAa,CAAC;AAC5B,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;AACpF,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,YAAY,CAAC,SAAS,EAAE;AAC5B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;AAC5D,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClD,IAAI;AACJ,IAAI,iBAAiB,CAAC,OAAO,EAAE;AAC/B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC;AAC3D,IAAI;AACJ,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACrD,IAAI;AACJ,IAAI,MAAM,CAAC,GAAG,EAAE;AAChB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;AACvC,IAAI;AACJ,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;AAC1D,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;AACxD,IAAI;AACJ,IAAI,SAAS,CAAC,MAAM,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;AACvD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,oBAAoB,SAAS,oBAAoB,CAAC;AACxD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,aAAa,CAAC;AAC5B,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;AACpF,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAClE,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC/D,IAAI;AACJ,IAAI,MAAM,CAAC,GAAG,EAAE;AAChB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AAC9D,IAAI;AACJ,IAAI,eAAe,CAAC,OAAO,EAAE;AAC7B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AAChF,IAAI;AACJ,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC5E,IAAI;AACJ,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACzE,IAAI;AACJ,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;AAC1D,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;AACxD,IAAI;AACJ,IAAI,SAAS,CAAC,MAAM,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;AACvD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAqB,SAAS,oBAAoB,CAAC;AACzD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,cAAc,CAAC;AAC7B,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;AACpF,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;AAC3C,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;AACxC,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;AACxC,IAAI;AACJ,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACpD,IAAI;AACJ,IAAI,YAAY,CAAC,SAAS,EAAE;AAC5B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;AAC7C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,oBAAoB,SAAS,oBAAoB,CAAC;AACxD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,aAAa,CAAC;AAC5B,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;AACpF,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,kBAAkB,CAAC,KAAK,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC;AAC1D,IAAI;AACJ,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;AACzC,IAAI;AACJ,IAAI,YAAY,CAAC,SAAS,EAAE;AAC5B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;AAC7C,IAAI;AACJ,IAAI,YAAY,CAAC,SAAS,EAAE;AAC5B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;AAC7C,IAAI;AACJ,IAAI,YAAY,CAAC,SAAS,EAAE;AAC5B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;AAC7C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB,SAAS,oBAAoB,CAAC;AAC1D,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,eAAe,CAAC;AAC9B,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;AACpF,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;AACxC,IAAI;AACJ,IAAI,cAAc,CAAC,WAAW,EAAE;AAChC,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;AAC/C,IAAI;AACJ,IAAI,cAAc,CAAC,KAAK,EAAE;AAC1B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACtD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,gBAAgB,SAAS,oBAAoB,CAAC;AACpD,IAAI,WAAW,CAAC,KAAK,EAAE;AACvB,QAAQ,KAAK,CAAC,YAAY,CAAC;AAC3B,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK;AAC9B,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE;AAChE,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;AACpF,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;AACzC,IAAI;AACJ,IAAI,YAAY,CAAC,SAAS,EAAE;AAC5B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;AAC7C,IAAI;AACJ;AACA,IAAI,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE;AACnC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;AAC5B,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;AACrE,QAAQ;AACR,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI;AACtD,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACvD,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC;AACrE,QAAQ,MAAM,UAAU,GAAG,OAAO,EAAE,IAAI;AACxC;AACA,QAAQ,IAAI,UAAU;AACtB,QAAQ,IAAI,aAAa,EAAE;AAC3B,YAAY,UAAU,GAAG,aAAa,CAAC;AACvC,QAAQ;AACR,aAAa,IAAI,UAAU,EAAE;AAC7B,YAAY,UAAU,GAAG,UAAU;AACnC,QAAQ;AACR,aAAa,IAAI,aAAa,EAAE;AAChC,YAAY,UAAU,GAAG,aAAa,CAAC;AACvC,QAAQ;AACR,aAAa,IAAI,cAAc,EAAE;AACjC,YAAY,UAAU,GAAG,WAAW,CAAC,cAAc,CAAC;AACpD,QAAQ;AACR,aAAa;AACb,YAAY,UAAU,GAAG,gBAAgB,EAAE;AAC3C,QAAQ;AACR,QAAQ,MAAM,SAAS,GAAG,UAAU,IAAI,aAAa,IAAI,UAAU;AACnE,QAAQ,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE;AACzC,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAQ,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;AAC7B,QAAQ,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B;AACA,QAAQ,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,YAAY,EAAE,IAAI,OAAO,IAAI,EAAE,CAAC;AAC5D,QAAQ,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC7D,QAAQ,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC;AACnC;AACA;AACA,QAAQ,IAAI,CAAC,WAAW,GAAG,KAAK;AAChC,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI;AAC7B,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,CAAC,OAAO,EAAE;AACrB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC;AAC3D,IAAI;AACJ,IAAI,YAAY,CAAC,OAAO,EAAE;AAC1B,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,OAAO,CAAC;AACjE,IAAI;AACJ,IAAI,QAAQ,CAAC,OAAO,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,OAAO,CAAC;AAChE,IAAI;AACJ,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,OAAO,CAAC;AAC/D,IAAI;AACJ,IAAI,SAAS,CAAC,OAAO,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,OAAO,CAAC;AAC7D,IAAI;AACJ,IAAI,SAAS,CAAC,OAAO,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,OAAO,CAAC;AAC7D,IAAI;AACJ,IAAI,SAAS,CAAC,OAAO,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,OAAO,CAAC;AAC7D,IAAI;AACJ,IAAI,aAAa,CAAC,OAAO,EAAE;AAC3B,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,uBAAuB,EAAE,OAAO,CAAC;AACrE,IAAI;AACJ,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB,EAAE,OAAO,CAAC;AAChE,IAAI;AACJ,IAAI,YAAY,CAAC,OAAO,EAAE;AAC1B,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,OAAO,CAAC;AAC7D,IAAI;AACJ,IAAI,QAAQ,CAAC,OAAO,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,cAAc,EAAE,OAAO,CAAC;AAC5D,IAAI;AACJ,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE;AAChC,QAAQ,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC;AAClD,IAAI;AACJ;AACA,IAAI,QAAQ,CAAC,SAAS,EAAE;AACxB,QAAQ,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;AACjC,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC5E,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,QAAQ,CAAC,SAAS,EAAE;AACxB,QAAQ,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;AACjC,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC5E,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,CAAC,SAAS,EAAE;AACvB,QAAQ,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;AAChC,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC5E,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,CAAC,SAAS,EAAE;AACzB,QAAQ,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC;AAClC,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC5E,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC5E,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,sBAAsB,CAAC,OAAO,EAAE;AACpC;AACA,QAAQ,KAAK,CAAC,sBAAsB,CAAC,OAAO,CAAC;AAC7C;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC5E,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,KAAK,GAAG;AACZ;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAY,IAAI,CAAC,cAAc,EAAE;AACjC,YAAY,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AACvE,QAAQ;AACR;AACA,QAAQ,OAAO,KAAK,CAAC,KAAK,EAAE;AAC5B,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,wBAAwB,SAAS,oBAAoB,CAAC;AAC5D,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,iBAAiB,CAAC;AAChC,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE;AACxC,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;AACpF,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;AACzC,IAAI;AACJ,IAAI,cAAc,CAAC,WAAW,EAAE;AAChC,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;AAC/C,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;AACxC,IAAI;AACJ,IAAI,cAAc,CAAC,WAAW,EAAE;AAChC,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;AAC/C,IAAI;AACJ,IAAI,SAAS,CAAC,MAAM,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;AAC1C,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;AACxC,IAAI;AACJ,IAAI,aAAa,CAAC,UAAU,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;AAC9C,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;AACxC,IAAI;AACJ;AACA,IAAI,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE;AAC/B,QAAQ,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC;AACjD,QAAQ,KAAK,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AAC7D,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,KAAK,CAAC;AAC3B,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,QAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;AACxD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,iBAAiB,SAAS,oBAAoB,CAAC;AACrD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,MAAM,CAAC;AACrB,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;AACpF,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,aAAa,CAAC,UAAU,EAAE;AAC9B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;AAC9C,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;AAC3C,IAAI;AACJ;AACA,IAAI,aAAa,CAAC,OAAO,EAAE;AAC3B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AACvD,IAAI;AACJ,IAAI,mBAAmB,CAAC,OAAO,EAAE;AACjC,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;AAC7D,IAAI;AACJ,IAAI,oBAAoB,CAAC,OAAO,EAAE;AAClC,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;AAC9D,IAAI;AACJ,IAAI,eAAe,CAAC,OAAO,EAAE;AAC7B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AACzD,IAAI;AACJ;AACA,IAAI,SAAS,CAAC,MAAM,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;AAC1C,IAAI;AACJ,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACpD,IAAI;AACJ,IAAI,aAAa,CAAC,IAAI,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACpD,IAAI;AACJ,IAAI,YAAY,CAAC,GAAG,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AAClD,IAAI;AACJ,IAAI,YAAY,CAAC,GAAG,EAAE;AACtB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AAClD,IAAI;AACJ,IAAI,gBAAgB,CAAC,IAAI,EAAE;AAC3B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AACvD,IAAI;AACJ,IAAI,cAAc,CAAC,KAAK,EAAE;AAC1B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACtD,IAAI;AACJ,IAAI,YAAY,CAAC,MAAM,EAAE;AACzB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AACrD,IAAI;AACJ;AACA,IAAI,YAAY,CAAC,IAAI,EAAE;AACvB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACnD,IAAI;AACJ,IAAI,iBAAiB,CAAC,KAAK,EAAE;AAC7B,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC;AACzD,IAAI;AACJ;AACA,IAAI,kBAAkB,CAAC,QAAQ,EAAE;AACjC,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;AAC7D,IAAI;AACJ,IAAI,oBAAoB,CAAC,QAAQ,EAAE;AACnC,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC;AAC/D,IAAI;AACJ;AACA,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;AAC3C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB,CAAC;AAC7B,IAAI,WAAW,CAAC,YAAY,EAAE;AAC9B,QAAQ,IAAI,CAAC,WAAW,GAAG;AAC3B,YAAY,IAAI,EAAE,aAAa;AAC/B,YAAY,QAAQ,EAAE,EAAE;AACxB,YAAY,IAAI,EAAE,MAAM;AACxB,YAAY,aAAa,EAAE;AAC3B,gBAAgB,KAAK,EAAE,EAAE;AACzB,gBAAgB,IAAI,EAAE,IAAI;AAC1B,gBAAgB,WAAW,EAAE,KAAK;AAClC,aAAa;AACb,YAAY,OAAO,EAAE;AACrB,gBAAgB,MAAM,EAAE;AACxB,oBAAoB,MAAM,EAAE,EAAE;AAC9B,oBAAoB,MAAM,EAAE,EAAE;AAC9B,iBAAiB;AACjB,aAAa;AACb,SAAS;AACT,QAAQ,IAAI,YAAY,EAAE;AAC1B,YAAY,IAAI,CAAC,YAAY,GAAG,YAAY;AAC5C,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC;AACtD,QAAQ;AACR,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,GAAG,OAAO,EAAE;AAC1F,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;AACzC,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;AAC3C,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC;AACxC,IAAI;AACJ,IAAI,cAAc,CAAC,WAAW,EAAE;AAChC,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;AAC/C,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC;AAC3C,IAAI;AACJ,IAAI,OAAO,CAAC,QAAQ,EAAE;AACtB,QAAQ,IAAI,QAAQ,EAAE;AACtB;AACA,YAAY,MAAM,aAAa,GAAG,IAAI,oBAAoB,EAAE;AAC5D,YAAY,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC;AAChD,YAAY,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC;AACxC,YAAY,QAAQ,CAAC,aAAa,CAAC;AACnC,YAAY,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC,KAAK,EAAE;AACtD,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,UAAU,CAAC,QAAQ,EAAE;AACzB,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC;AACzD,YAAY,QAAQ,CAAC,aAAa,CAAC;AACnC,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,eAAe,CAAC,MAAM,EAAE;AAC5B;AACA,QAAQ,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,QAAQ;AACpD,QAAQ,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACnC,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;AACzD,gBAAgB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;AAC3D,YAAY;AACZ,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/D,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;AACzD,gBAAgB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;AAC3D,YAAY;AACZ,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAC/D,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,KAAK,GAAG;AACZ;AACA,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;AAChC,YAAY,OAAO;AACnB,gBAAgB,GAAG,IAAI,CAAC,aAAa;AACrC;AACA,gBAAgB,OAAO,EAAE;AACzB,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO;AACjD,oBAAoB,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa;AACrD,iBAAiB;AACjB,aAAa;AACb,QAAQ;AACR;AACA,QAAQ,MAAM,MAAM,GAAG;AACvB,YAAY,GAAG,IAAI,CAAC,WAAW;AAC/B,YAAY,QAAQ,EAAE,EAAE;AACxB,SAAS;AACT;AACA,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AAC5C,YAAY,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;AACrF,QAAQ;AACR,QAAQ,OAAO,MAAM;AACrB,IAAI;AACJ;AACA,IAAI,MAAM,IAAI,GAAG;AACjB,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE;AACvC;AACA,QAAQ,MAAM,EAAE,0BAA0B,EAAE,GAAG,MAAM,wEAAqC;AAC1F;AACA,QAAQ,MAAM,YAAY,GAAG;AAC7B,YAAY,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,KAAK,IAAI,EAAE;AAC9D,YAAY,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO;AAC5D,YAAY,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,OAAO,IAAI,EAAE;AAClE,YAAY,UAAU,EAAE,UAAU;AAClC,YAAY,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO;AAC7C,SAAS;AACT;AACA,QAAQ,OAAO,IAAI,OAAO,CAAC,OAAO,OAAO,KAAK;AAC9C,YAAY,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,0BAA0B,EAAE;AAC/D,gBAAgB,KAAK,EAAE,YAAY,CAAC,KAAK;AACzC,gBAAgB,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,IAAI,IAAI,IAAI;AAClE,gBAAgB,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,IAAI,KAAK;AACjF,gBAAgB,oBAAoB,EAAE,KAAK;AAC3C,gBAAgB,SAAS,EAAE,KAAK;AAChC,gBAAgB,IAAI,EAAE;AACtB,oBAAoB,MAAM,EAAE,YAAY;AACxC,oBAAoB,QAAQ,EAAE,CAAC,MAAM,KAAK;AAC1C;AACA,wBAAwB,OAAO,CAAC,MAAM,CAAC;AACvC,oBAAoB,CAAC;AACrB,iBAAiB;AACjB,aAAa,CAAC;AACd,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,aAAa,CAAC;AACpB,IAAI,WAAW,CAAC,IAAI,EAAE;AACtB,QAAQ,IAAI,CAAC,WAAW,GAAG;AAC3B,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,OAAO,EAAE,EAAE;AACvB,SAAS;AACT,QAAQ,IAAI,CAAC,kBAAkB,GAAG,EAAE;AACpC,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI;AACxC,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI;AACpC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI;AACpC,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;AACpC,YAAY,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI;AACxC,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI;AACpC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,CAAC,OAAO,EAAE;AACrB;AACA,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE;AAC9E,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG;AACtC,gBAAgB,SAAS,EAAE;AAC3B,oBAAoB,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;AACvC,oBAAoB,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;AACvC,oBAAoB,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;AAC1C,oBAAoB,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;AAC1C,oBAAoB,GAAG,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;AAC3C,iBAAiB;AACjB,aAAa;AACb,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK;AAC3C,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,QAAQ,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI;AACpC,QAAQ,IAAI,CAAC,kBAAkB,CAAC,IAAI,GAAG,IAAI;AAC3C,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,CAAC,SAAS,EAAE;AACvB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACvC,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE;AACzC,QAAQ;AACR,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,SAAS;AACvD,QAAQ,IAAI,CAAC,kBAAkB,CAAC,OAAO,GAAG,SAAS;AACnD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,QAAQ,CAAC,SAAS,EAAE;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACvC,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE;AACzC,QAAQ;AACR,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS;AACxD,QAAQ,IAAI,CAAC,kBAAkB,CAAC,QAAQ,GAAG,SAAS;AACpD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,QAAQ,CAAC,SAAS,EAAE;AACxB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACvC,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE;AACzC,QAAQ;AACR,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,SAAS;AACxD,QAAQ,IAAI,CAAC,kBAAkB,CAAC,QAAQ,GAAG,SAAS;AACpD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,CAAC,SAAS,EAAE;AACzB,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACvC,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE;AACzC,QAAQ;AACR,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS;AACzD,QAAQ,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,SAAS;AACrD,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,sBAAsB,CAAC,OAAO,EAAE;AACpC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,uBAAuB,CAAC,OAAO,CAAC;AAClE;AACA,QAAQ,MAAM,QAAQ,GAAG,0BAA0B,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,CAAC;AACrF;AACA;AACA,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;AAC3B,YAAY,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI;AACjD,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO;AACrC,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG,EAAE;AACzC,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC7C,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,QAAQ;AACpE,QAAQ;AACR,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC7C,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,QAAQ;AACpE,QAAQ;AACR,QAAQ,IAAI,QAAQ,CAAC,SAAS,KAAK,SAAS,EAAE;AAC9C,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,SAAS;AACtE,QAAQ;AACR,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE;AAC5C,YAAY,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,OAAO;AAClE,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,qBAAqB,GAAG;AAC5B,QAAQ,OAAO,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC7C,IAAI;AACJ,IAAI,KAAK,GAAG;AACZ,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AACvC,YAAY,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AACvC,YAAY,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO;AAC7C,YAAY,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AACvC,YAAY,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;AACvC,YAAY,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,YAAY;AACvD,SAAS;AACT,IAAI;AACJ;AACA;AACA,MAAM,aAAa,CAAC;AACpB,IAAI,WAAW,CAAC,aAAa,EAAE;AAC/B,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa;AAC1C,IAAI;AACJ,IAAI,MAAM,CAAC,IAAI,EAAE;AACjB,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;AACtE,YAAY,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;AACxE,QAAQ;AACR,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AACrE,YAAY,KAAK,EAAE,IAAI,IAAI,+BAA+B;AAC1D,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,KAAK,EAAE,SAAS;AAC5B,YAAY,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;AACvC,SAAS,CAAC;AACV,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,MAAM,CAAC,IAAI,EAAE;AACjB,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;AACtE,YAAY,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;AACxE,QAAQ;AACR,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AACrE,YAAY,KAAK,EAAE,IAAI,IAAI,+BAA+B;AAC1D,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,KAAK,EAAE,SAAS;AAC5B,YAAY,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;AACpE,SAAS,CAAC;AACV,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,MAAM,CAAC,MAAM,EAAE;AACnB,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;AACtE,YAAY,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE;AACxE,QAAQ;AACR,QAAQ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAC5E,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,WAAW,CAAC;AAClB,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE;AAC3B,QAAQ,IAAI,CAAC,EAAE,GAAG,EAAE;AACpB,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,QAAQ,IAAI,CAAC,SAAS,GAAG,KAAK;AAC9B,QAAQ,IAAI,CAAC,kBAAkB,GAAG,EAAE;AACpC,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,cAAc,CAAC,WAAW,EAAE;AAChC,QAAQ,IAAI,CAAC,WAAW,GAAG,WAAW;AACtC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,YAAY,CAAC,SAAS,EAAE;AAC5B,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS;AAClC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,CAAC,QAAQ,EAAE;AACtB,QAAQ,IAAI,QAAQ,EAAE;AACtB;AACA,YAAY,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE;AACrD;AACA,YAAY,aAAa,CAAC,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC,kBAAkB,EAAE;AAC7E,YAAY,QAAQ,CAAC,aAAa,CAAC;AACnC,YAAY,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC,KAAK,EAAE;AACpD,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,sBAAsB,CAAC,OAAO,EAAE;AACpC,QAAQ,IAAI,CAAC,kBAAkB,GAAG,uBAAuB,CAAC,OAAO,CAAC;AAClE,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,KAAK,GAAG;AACZ,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AAC/B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC;AAClE,QAAQ;AACR,QAAQ,OAAO;AACf,YAAY,EAAE,EAAE,IAAI,CAAC,EAAE;AACvB,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;AAC7B,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B,YAAY,WAAW,EAAE,IAAI,CAAC,WAAW;AACzC,YAAY,SAAS,EAAE,IAAI,CAAC,SAAS;AACrC,YAAY,OAAO,EAAE,IAAI,CAAC,WAAW;AACrC,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM,iBAAiB,SAAS,oBAAoB,CAAC;AACrD,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,aAAa,CAAC;AAC5B,QAAQ,IAAI,CAAC,KAAK,GAAG,EAAE;AACvB,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI;AAC1B,QAAQ,IAAI,CAAC,eAAe,GAAG,YAAY;AAC3C,IAAI;AACJ,IAAI,SAAS,CAAC,MAAM,EAAE;AACtB,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,YAAY,CAAC,SAAS,EAAE;AAC5B,QAAQ,IAAI,CAAC,eAAe,GAAG,SAAS;AACxC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,CAAC,IAAI,EAAE;AAClB,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,cAAc,CAAC,IAAI,EAAE;AACzB,QAAQ,IAAI,CAAC,WAAW,GAAG,IAAI;AAC/B,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,aAAa,GAAG,OAAO;AACpC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,CAAC,MAAM,EAAE;AACtB,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,CAAC,MAAM,EAAE;AACtB,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC9B,QAAQ,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC;AACtD;AACA,QAAQ,WAAW,CAAC,sBAAsB,CAAC,IAAI,CAAC,kBAAkB,CAAC;AACnE,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,QAAQ,CAAC,WAAW,CAAC;AACjC,QAAQ;AACR,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;AAC5C,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,KAAK,GAAG;AACZ;AACA,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACrC,YAAY,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;AACrE,QAAQ;AACR;AACA,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;AAC/C,QAAQ,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC;AAC/E,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,0BAA0B,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjF,QAAQ;AACR,QAAQ,MAAM,UAAU,GAAG;AAC3B,YAAY,KAAK,EAAE,IAAI,CAAC,KAAK;AAC7B,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;AAC/B,YAAY,SAAS,EAAE,IAAI,CAAC,eAAe;AAC3C,YAAY,IAAI,EAAE,IAAI,CAAC,IAAI;AAC3B;AACA,YAAY,WAAW,EAAE,IAAI,CAAC,WAAW;AACzC,YAAY,OAAO,EAAE,IAAI,CAAC,aAAa;AACvC,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;AAC/B,YAAY,MAAM,EAAE,IAAI,CAAC,MAAM;AAC/B,SAAS;AACT,QAAQ,MAAM,IAAI,GAAG;AACrB,YAAY,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAC1C,YAAY,IAAI,EAAE,aAAa;AAC/B,YAAY,OAAO,EAAE,EAAE,UAAU,EAAE;AACnC,YAAY,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI;AAC1C,SAAS;AACT,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;;AC93CO,MAAM,0BAA0B,CAAC;AACxC,IAAI,WAAW,GAAG;AAClB;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE;AACxC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,EAAE;AAC5C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,cAAc,EAAE;AAC1C;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,4BAA4B,CAAC,cAAc,CAAC;AAC1E;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAChD,YAAY,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrD,QAAQ;AACR;AACA,QAAQ,MAAM,UAAU,GAAG;AAC3B,YAAY,IAAI,EAAE,aAAa;AAC/B,YAAY,IAAI,EAAE,wBAAwB;AAC1C,YAAY,OAAO,EAAE;AACrB,gBAAgB,KAAK,EAAE,cAAc;AACrC,gBAAgB,IAAI,EAAE;AACtB,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,OAAO,EAAE,CAAC;AAClC,wBAAwB,GAAG,EAAE,MAAM;AACnC,qBAAqB;AACrB,iBAAiB;AACjB,aAAa;AACb,YAAY,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;AACnG,SAAS;AACT;AACA,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC;AACtD,QAAQ,OAAO,UAAU;AACzB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,iCAAiC,CAAC,UAAU,EAAE;AAClD;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;AAClE;AACA,QAAQ,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AACpD,YAAY,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzD,QAAQ;AACR;AACA,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB,QAAQ,IAAI,UAAU,CAAC,QAAQ,EAAE;AACjC,YAAY,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK;AACnD,gBAAgB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE;AACtD,oBAAoB,MAAM,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;AACtE,oBAAoB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,QAAQ,MAAM,cAAc,GAAG,EAAE,MAAM,EAAE;AACzC;AACA,QAAQ,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC;AAC9D,QAAQ,OAAO,cAAc;AAC7B,IAAI;AACJ;AACA;AACA;AACA,IAAI,sBAAsB,CAAC,UAAU,EAAE;AACvC,QAAQ,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE;AAC9D,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACtE,YAAY,OAAO,IAAI,CAAC;AACxB,QAAQ;AACR;AACA,QAAQ,OAAO,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,iBAAiB;AACpF,YAAY,KAAK,CAAC,QAAQ;AAC1B,YAAY,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI,KAAK,YAAY,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxI,IAAI;AACJ;AACA;AACA;AACA,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;AACpC,QAAQ,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE;AACxC,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO;AACf,YAAY,mBAAmB,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI;AAC1D,YAAY,uBAAuB,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI;AAClE,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,2BAA2B,CAAC,KAAK,EAAE;AACvC;AACA,QAAQ,MAAM,YAAY,GAAG,CAAC;AAC9B,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,iBAAiB;AACnC,YAAY,IAAI,EAAE,KAAK,CAAC,IAAI;AAC5B,YAAY,OAAO,EAAE;AACrB,gBAAgB,KAAK,EAAE,KAAK,CAAC,KAAK;AAClC,gBAAgB,WAAW,EAAE,KAAK,CAAC,WAAW;AAC9C,gBAAgB,IAAI,EAAE,YAAY;AAClC,aAAa;AACb,YAAY,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC;AAC7E,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE;AAC7C,QAAQ,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACvE,IAAI;AACJ;AACA;AACA;AACA,IAAI,qBAAqB,CAAC,KAAK,EAAE;AACjC,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,YAAY;AAC9B,YAAY,IAAI,EAAE,KAAK,CAAC,IAAI;AAC5B,YAAY,OAAO,EAAE;AACrB,gBAAgB,KAAK,EAAE,KAAK,CAAC,KAAK;AAClC,gBAAgB,WAAW,EAAE,KAAK,CAAC,WAAW;AAC9C,gBAAgB,SAAS,EAAE,IAAI;AAC/B,aAAa;AACb,YAAY,QAAQ,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;AACpC,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,YAAY,EAAE;AAC3C,QAAQ,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC;AAChE;AACA,QAAQ,MAAM,MAAM,GAAG,EAAE;AACzB,QAAQ,IAAI,YAAY,CAAC,QAAQ,EAAE;AACnC,YAAY,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK;AACzD,gBAAgB,IAAI,SAAS,CAAC,IAAI,KAAK,YAAY,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5G,oBAAoB,MAAM,KAAK,GAAG,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC;AAC5E,oBAAoB,IAAI,KAAK,EAAE;AAC/B,wBAAwB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1C,oBAAoB;AACpB,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5D,YAAY,KAAK,EAAE,YAAY,CAAC,OAAO,GAAG,OAAO,CAAC;AAClD,YAAY,WAAW,EAAE,YAAY,CAAC,OAAO,GAAG,aAAa,CAAC;AAC9D,YAAY,UAAU,EAAE,MAAM;AAC9B,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,0BAA0B,CAAC,aAAa,EAAE;AAC9C,QAAQ,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5E,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,MAAM,YAAY,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtD,QAAQ,OAAO;AACf,YAAY,IAAI,EAAE,aAAa,CAAC,IAAI,IAAI,YAAY,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAClF,YAAY,KAAK,EAAE,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC;AACnD,YAAY,WAAW,EAAE,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC;AAC/D,YAAY,MAAM,EAAE,YAAY;AAChC,YAAY,IAAI,EAAE,aAAa,CAAC,IAAI;AACpC,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,4BAA4B,CAAC,cAAc,EAAE;AACjD;AACA,QAAQ,MAAM,QAAQ,GAAG,EAAE;AAC3B,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/D,QAAQ,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK;AAC7D,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACpF,YAAY,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK;AAC5D,gBAAgB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAChG,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,cAAc,CAAC,IAAI,EAAE;AACjC,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,QAAQ;AACR;AACA,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5C;AACA,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE;AACpC,YAAY,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AACnD,QAAQ;AACR,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACA;AACA;AACA,IAAI,wBAAwB,CAAC,UAAU,EAAE;AACzC;AACA,QAAQ,MAAM,QAAQ,GAAG,EAAE;AAC3B,QAAQ,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAChD,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE;AAC7B,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,QAAQ;AACR,QAAQ,IAAI,UAAU,CAAC,QAAQ,EAAE;AACjC,YAAY,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACnE,YAAY,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK;AAC1D,gBAAgB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,gBAAgB,IAAI,KAAK,CAAC,QAAQ,EAAE;AACpC,oBAAoB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE,oBAAoB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,MAAM,KAAK;AACnE,wBAAwB,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,wBAAwB,IAAI,UAAU,CAAC,QAAQ,EAAE;AACjD,4BAA4B,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAChG,wBAAwB;AACxB,oBAAoB,CAAC,CAAC;AACtB,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,QAAQ;AACR;AACA,QAAQ,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5C;AACA,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE;AACpC,YAAY,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AACnD,QAAQ;AACR,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,GAAG,EAAE;AAC1B,QAAQ,IAAI,IAAI,GAAG,CAAC;AACpB,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAC5B,YAAY,OAAO,IAAI,CAAC,QAAQ,EAAE;AAClC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAY,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1C,YAAY,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI;AAC5C,YAAY,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/B,QAAQ;AACR,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC3C,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC;AAC7L,IAAI,SAAS,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;AACpK;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAE,CAAC;AACpI,YAAY,IAAI,EAAE,UAAU;AAC5B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,UAAU,EAAE,MAAM;AACtC,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;ACvPN,MAAM,0BAA0B,CAAC;AACxC,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,6BAA6B,CAAC;AACrE,QAAQ,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACnE;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,CAAC;AAChC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,OAAO,EAAE;AACjD,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,OAAO,EAAE;AACjD;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE;AACxC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAE;AACxC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,EAAE;AAChC;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrF;AACA;AACA;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAClF;AACA;AACA;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACpF;AACA;AACA;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAChF;AACA;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC3F;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,MAAM;AAC7C,YAAY,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3C,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE;AAC9C,YAAY,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AACpC,YAAY,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,eAAe;AAChD;AACA,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,IAAI,CAAC;AACvE;AACA,YAAY,IAAI,UAAU,KAAK,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACzE,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,CAAC,cAAc,GAAG,UAAU;AAC5C,YAAY,CAAC,YAAY;AACzB;AACA,gBAAgB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,GAAG,CAAC;AAChF;AACA,gBAAgB,IAAI,KAAK,KAAK,IAAI,CAAC,eAAe,EAAE;AACpD,oBAAoB;AACpB,gBAAgB;AAChB;AACA,gBAAgB,MAAM,IAAI,GAAG,SAAS;AACtC;AACA,gBAAgB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE;AAC9C,gBAAgB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;AAC1C,oBAAoB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAC3C,oBAAoB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7C,gBAAgB;AAChB,YAAY,CAAC,GAAG;AAChB,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACrE;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,gBAAgB,GAAG,MAAM,EAAE;AACxC;AACA;AACA;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,MAAM,EAAE;AACtC;AACA;AACA,QAAQ,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,eAAe,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F,QAAQ,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,2BAA2B,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnH;AACA;AACA;AACA,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnG;AACA;AACA;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,EAAE;AAChC;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,MAAM;AAC/C,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AAC5C,YAAY,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC;AAC/C,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACvE;AACA;AACA;AACA,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,MAAM;AAChD,YAAY,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AAChD,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,IAAI,CAAC,SAAS,EAAE,EAAE,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC;AAClF,YAAY;AACZ,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACxE,IAAI;AACJ,IAAI,MAAM,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE;AACnD;AACA,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;AAC/C,YAAY,OAAO,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,UAAU,CAAC;AAC3E,QAAQ;AACR;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC;AACnE;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;AAChD,YAAY,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrD,QAAQ;AACR,QAAQ,MAAM,KAAK,GAAG;AACtB,YAAY,OAAO,EAAE;AACrB,gBAAgB,IAAI,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC;AAClD,aAAa;AACb,SAAS;AACT,QAAQ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;AAC9E;AACA,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,EAAE,EAAE;AAC5C;AACA,YAAY,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACrF,YAAY,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC3E,QAAQ;AACR,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;AAClD,QAAQ,OAAO,MAAM;AACrB,IAAI;AACJ;AACA;AACA,IAAI,QAAQ,GAAG;AACf;AACA,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AACxC,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AACrC;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC;AAC5C;AACA,QAAQ,IAAI,CAAC,mBAAmB,EAAE;AAClC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB;AACtB;AACA;AACA;AACA,IAAI,mBAAmB;AACvB;AACA;AACA;AACA;AACA;AACA,IAAI,oBAAoB,CAAC,KAAK,EAAE;AAChC,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE;AACzC,YAAY,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAClD,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;AAC5D,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,GAAG;AACd,QAAQ,OAAO,IAAI,CAAC,IAAI,EAAE;AAC1B,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,SAAS,EAAE;AAC/B,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,OAAO,IAAI,CAAC,eAAe,EAAE;AACrC,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,CAAC,OAAO,EAAE;AAC3B,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACzC,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,UAAU,EAAE;AAChC,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG;AACrB,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;AAChC,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAY,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;AACjD,YAAY,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACpD,YAAY,OAAO,OAAO;AAC1B,QAAQ;AACR,QAAQ,OAAO;AACf,YAAY,MAAM,EAAE,KAAK;AACzB,YAAY,QAAQ,EAAE,EAAE;AACxB,YAAY,KAAK,EAAE,EAAE;AACrB,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ;AACA,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;AACpC;AACA,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5B,IAAI;AACJ;AACA;AACA;AACA,IAAI,KAAK,GAAG;AACZ;AACA,QAAQ,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC;AAC3D,QAAQ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC;AAC9C;AACA,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,GAAG;AAC1B;AACA,QAAQ,IAAI,CAAC;AACb,aAAa,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AAClC,QAAQ,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;AAClG,aAAa,SAAS,CAAC,CAAC,GAAG,KAAK;AAChC,YAAY,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AACzC,QAAQ,CAAC,CAAC;AACV;AACA,QAAQ,IAAI,CAAC;AACb,aAAa,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AAClC,QAAQ,oBAAoB,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACjE,aAAa,SAAS,CAAC,CAAC,GAAG,KAAK;AAChC,YAAY,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AACzC;AACA,YAAY,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AACpD,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,IAAI,EAAE;AAC3B,QAAQ,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACjG,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE;AACrC,QAAQ,IAAI,CAAC,MAAM;AACnB,YAAY,OAAO,EAAE;AACrB;AACA,QAAQ,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACtF,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;AACrD,QAAQ,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACtC,IAAI;AACJ;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE;AAC1C;AACA,QAAQ,MAAM,OAAO,GAAG,OAAO,UAAU,KAAK,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;AAChG,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;AACjD,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;AACzD,QAAQ,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACvC,IAAI;AACJ;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,OAAO,EAAE;AACjC,QAAQ,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACrD,YAAY,OAAO,MAAM,CAAC,OAAO,CAAC;AAClC,QAAQ;AACR;AACA,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE;AAChD,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAChF,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;AAC1C,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,CAAC,GAAG,EAAE;AACpB,QAAQ,IAAI,IAAI,GAAG,CAAC;AACpB,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAC5B,YAAY,OAAO,IAAI,CAAC,QAAQ,EAAE;AAClC,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7C,YAAY,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1C,YAAY,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI;AAC5C,YAAY,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC/B,QAAQ;AACR;AACA,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC1C,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC5L,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,2BAA2B,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;AACphC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,mCAAmC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,2BAA2B,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,0BAA0B,EAAE,QAAQ,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,EAAE,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3zB;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAE,CAAC;AACpI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,qBAAqB,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,mBAAmB,EAAE,YAAY,CAAC,EAAE,eAAe,EAAE,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE;AAC/L;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,mCAAmC,CAAC,EAAE;AACpD,SAAS,CAAC,EAAE,CAAC;;AClWN,MAAM,mBAAmB,CAAC;AACjC,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;AACpL,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,0BAA0B,CAAC,EAAE,OAAO,EAAE,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC;AAClO,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,uBAAuB,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,0BAA0B,CAAC,EAAE,CAAC,CAAC;AACjO;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC;AAC7H,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,OAAO,EAAE,CAAC,YAAY,EAAE,0BAA0B,CAAC;AACvE,oBAAoB,SAAS,EAAE,CAAC,uBAAuB,CAAC;AACxD,oBAAoB,OAAO,EAAE,CAAC,0BAA0B,CAAC;AACzD,iBAAiB;AACjB,SAAS,CAAC,EAAE,CAAC;;AChBb;;ACcO,MAAM,0BAA0B,SAAS,mBAAmB,CAAC;AACpE,IAAI,WAAW,GAAG;AAClB,QAAQ,KAAK,CAAC,GAAG,SAAS,CAAC;AAC3B,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,EAAE;AACxC,QAAQ,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,6BAA6B,CAAC;AACxE,QAAQ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACnF;AACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,MAAM,EAAE,CAAC;AACjC,QAAQ,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,KAAK,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACtG;AACA,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC7F;AACA;AACA;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,0BAA0B,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5H,QAAQ,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM;AACjC,YAAY,IAAI,KAAK,GAAG,CAAC;AACzB,YAAY,IAAI,CAAC,2BAA2B,EAAE;AAC9C,YAAY,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AACzC,gBAAgB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE;AACtD,gBAAgB,MAAM,SAAS,GAAG,QAAQ,EAAE,YAAY,EAAE;AAC1D,gBAAgB,IAAI,CAAC,iBAAiB,GAAG,SAAS,EAAE,cAAc,IAAI,IAAI;AAC1E,gBAAgB,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE;AACvE,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE;AACvE;AACA,gBAAgB,IAAI,IAAI,CAAC,aAAa,EAAE;AACxC,oBAAoB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AACpD,gBAAgB;AAChB;AACA,gBAAgB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM;AACtD,oBAAoB,IAAI,CAAC,2BAA2B,EAAE;AACtD,gBAAgB,CAAC,EAAE,GAAG,CAAC;AACvB,YAAY;AACZ,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AACzD,IAAI;AACJ;AACA;AACA,IAAI,QAAQ,GAAG;AACf;AACA,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;AACpD,IAAI;AACJ,IAAI,IAAI;AACR;AACA,IAAI,oBAAoB,CAAC,KAAK,EAAE;AAChC,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,QAAQ,IAAI,CAAC,2BAA2B,EAAE;AAC1C,IAAI;AACJ,IAAI,sBAAsB,CAAC,KAAK,EAAE;AAClC,QAAQ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAC/B,QAAQ,IAAI,CAAC,2BAA2B,EAAE;AAC1C,IAAI;AACJ,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,OAAO,IAAI,CAAC,YAAY,EAAE;AAClC,IAAI;AACJ,IAAI,mBAAmB,GAAG;AAC1B,QAAQ,OAAO,IAAI,CAAC,YAAY,EAAE;AAClC,IAAI;AACJ,IAAI,aAAa,GAAG;AACpB,QAAQ,OAAO,IAAI,CAAC,eAAe,EAAE;AACrC,IAAI;AACJ,IAAI,YAAY,GAAG;AACnB,QAAQ,OAAO,IAAI,CAAC,eAAe,EAAE;AACrC,IAAI;AACJ,IAAI,MAAM,aAAa,CAAC,MAAM,EAAE;AAChC,QAAQ,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO;AAClC,QAAQ,IAAI,GAAG,KAAK,QAAQ,EAAE;AAC9B,YAAY,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE;AACnE,YAAY,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;AAClC,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AAClE,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;AACvD,YAAY,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE;AACpD,gBAAgB,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;AAC7E,gBAAgB,MAAM,IAAI,CAAC,2BAA2B,EAAE;AACxD,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR;AACA,QAAQ,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;AAC/D,QAAQ,IAAI,CAAC,YAAY,GAAG,MAAM;AAClC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE;AACvB,YAAY,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO;AAC9C,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;AAC5C,QAAQ;AACR,QAAQ,IAAI,CAAC,QAAQ,CAAC;AACtB,YAAY,KAAK,EAAE,CAAC,MAAM,KAAK;AAC/B,gBAAgB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAClC,YAAY,CAAC;AACb,YAAY,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE;AACzC,YAAY,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM;AACvC,YAAY,UAAU,EAAE,CAAC,OAAO,KAAK;AACrC,gBAAgB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACjD,YAAY,CAAC;AACb,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,kBAAkB,CAAC,GAAG,EAAE;AAC5B;AACA,QAAQ,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC;AACvC,YAAY,OAAO,EAAE;AACrB,QAAQ,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;AAChD,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACzC,QAAQ,IAAI,GAAG,IAAI,CAAC;AACpB,YAAY,OAAO,EAAE;AACrB,QAAQ,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE;AAC9E,IAAI;AACJ,IAAI,MAAM,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE;AAClD,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB;AACnC,YAAY;AACZ,QAAQ,IAAI;AACZ,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,UAAU,CAAC;AACvE,YAAY,MAAM,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI;AACvC,YAAY,MAAM,EAAE,GAAG,GAAG,GAAG,SAAS,CAAC;AACvC,YAAY,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE;AAC1C,gBAAgB,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;AACzC,oBAAoB,KAAK,EAAE,CAAC,MAAM,KAAK;AACvC,wBAAwB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC1C,oBAAoB,CAAC;AACrB,oBAAoB,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE;AACjD,oBAAoB,UAAU,EAAE,CAAC,OAAO,KAAK;AAC7C,wBAAwB,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC;AACzD,oBAAoB,CAAC;AACrB,iBAAiB,CAAC,CAAC;AACnB,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,EAAE;AAChB,IAAI;AACJ,IAAI,MAAM,KAAK,CAAC,MAAM,EAAE;AACxB,QAAQ,IAAI,MAAM,EAAE;AACpB,YAAY,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE;AACnE,YAAY,IAAI,OAAO,EAAE,MAAM,EAAE;AACjC,gBAAgB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AACxC,YAAY;AACZ,QAAQ;AACR,QAAQ,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AAC3B,IAAI;AACJ;AACA,IAAI,MAAM,2BAA2B,GAAG;AACxC,QAAQ,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE;AAC/D,QAAQ,MAAM,aAAa,GAAG,IAAI,CAAC,8BAA8B,EAAE;AACnE,QAAQ,MAAM,GAAG,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,CAAC;AACxD,QAAQ,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC;AAC5D,QAAQ,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC;AAClE,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,MAAM,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,MAAM,QAAQ,CAAC;AACzH,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,MAAM,QAAQ,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,MAAM,QAAQ,CAAC;AACzH,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACrC,QAAQ,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;AACrC,IAAI;AACJ,IAAI,MAAM,oBAAoB,GAAG;AACjC,QAAQ,IAAI,CAAC,IAAI,CAAC,iBAAiB;AACnC,YAAY,OAAO,EAAE;AACrB,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,EAAE;AACxE,QAAQ,MAAM,OAAO,GAAG,EAAE;AAC1B,QAAQ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAClC,YAAY,IAAI;AAChB,gBAAgB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,IAAI,CAAC;AACrE,gBAAgB,MAAM,UAAU,GAAG,MAAM,EAAE,OAAO,IAAI,IAAI,EAAE;AAC5D,gBAAgB,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;AAC3C,YAAY;AACZ,YAAY,MAAM,EAAE;AACpB,QAAQ;AACR,QAAQ,OAAO,OAAO;AACtB,IAAI;AACJ,IAAI,8BAA8B,GAAG;AACrC,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM;AACnD,QAAQ,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,SAAS,MAAM;AAC1C,YAAY,KAAK,EAAE,CAAC,CAAC,KAAK;AAC1B,YAAY,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,IAAI;AAChF,YAAY,IAAI,EAAE,CAAC,CAAC,IAAI;AACxB,YAAY,KAAK,EAAE,CAAC,CAAC,KAAK;AAC1B,YAAY,QAAQ,EAAE,CAAC,CAAC,QAAQ;AAChC,YAAY,MAAM,EAAE,CAAC,CAAC,MAAM;AAC5B,YAAY,IAAI,EAAE,QAAQ;AAC1B,YAAY,SAAS;AACrB,YAAY,KAAK,EAAE,CAAC,CAAC,KAAK;AAC1B,SAAS,CAAC;AACV,QAAQ,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7E,QAAQ,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC7E,QAAQ,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;AACrC,IAAI;AACJ,IAAI,MAAM,kBAAkB,CAAC,OAAO,EAAE;AACtC,QAAQ,MAAM,GAAG,GAAG,EAAE;AACtB,QAAQ,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;AACjC,YAAY,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;AAClG,YAAY,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS;AAChG,YAAY,MAAM,KAAK,GAAG;AAC1B,gBAAgB,GAAG;AACnB,gBAAgB,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE;AACnD,gBAAgB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE;AACnD,gBAAgB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE;AACvC,aAAa;AACb,YAAY,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC;AACnE,YAAY,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC;AAC/D,YAAY,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAChD,QAAQ;AACR,QAAQ,OAAO,GAAG;AAClB,IAAI;AACJ,IAAI,MAAM,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE;AACjC,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;AACtC,YAAY,OAAO,KAAK;AACxB,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,YAAY,IAAI;AAChB,gBAAgB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;AACpF,gBAAgB,OAAO,CAAC,CAAC,MAAM;AAC/B,YAAY;AACZ,YAAY,MAAM;AAClB,gBAAgB,OAAO,KAAK;AAC5B,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,MAAM,UAAU,CAAC,UAAU,EAAE;AACjC,QAAQ,IAAI;AACZ,YAAY,MAAM,IAAI,CAAC,iBAAiB,EAAE,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC;AACzE,YAAY,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,UAAU,CAAC;AACxE,YAAY,OAAO,MAAM,EAAE,GAAG,IAAI;AAClC,QAAQ;AACR,QAAQ,MAAM;AACd,YAAY,OAAO,SAAS;AAC5B,QAAQ;AACR,IAAI;AACJ,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAC;AAC9L,IAAI,SAAS,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,0BAA0B,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,0BAA0B,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE;AACza;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,0BAA0B,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEA,IAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEC,IAAE,CAAC,wBAAwB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAEA,IAAE,CAAC,2BAA2B,EAAE,QAAQ,EAAE,8IAA8I,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,mBAAmB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;AACj3C;AACA,EAAE,CAAC,wBAAwB,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,UAAU,EAAE,CAAC;AACpI,YAAY,IAAI,EAAE,SAAS;AAC3B,YAAY,IAAI,EAAE,CAAC;AACnB,oBAAoB,QAAQ,EAAE,qBAAqB;AACnD,oBAAoB,UAAU,EAAE,IAAI;AACpC,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,YAAY;AACpC,wBAAwB,0BAA0B;AAClD,wBAAwB,cAAc;AACtC,wBAAwB,iBAAiB;AACzC,wBAAwB,eAAe;AACvC,wBAAwB,mBAAmB;AAC3C,qBAAqB;AACrB,oBAAoB,QAAQ,EAAE;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,CAAC;AACH,iBAAiB;AACjB,SAAS,CAAC,EAAE,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC;AACvC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;AACzB,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC,EAAE,EAAE,CAAC;;;;;;;ACtWnB;AACA;AACA;;;;"}