@acorex/charts 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -0
- package/bar-chart/README.md +3 -0
- package/bar-chart/index.d.ts +211 -0
- package/chart-legend/index.d.ts +104 -0
- package/chart-tooltip/README.md +3 -0
- package/chart-tooltip/index.d.ts +54 -0
- package/donut-chart/README.md +3 -0
- package/donut-chart/index.d.ts +251 -0
- package/fesm2022/acorex-charts-bar-chart.mjs +772 -0
- package/fesm2022/acorex-charts-bar-chart.mjs.map +1 -0
- package/fesm2022/acorex-charts-chart-legend.mjs +109 -0
- package/fesm2022/acorex-charts-chart-legend.mjs.map +1 -0
- package/fesm2022/acorex-charts-chart-tooltip.mjs +74 -0
- package/fesm2022/acorex-charts-chart-tooltip.mjs.map +1 -0
- package/fesm2022/acorex-charts-donut-chart.mjs +758 -0
- package/fesm2022/acorex-charts-donut-chart.mjs.map +1 -0
- package/fesm2022/acorex-charts-gauge-chart.mjs +686 -0
- package/fesm2022/acorex-charts-gauge-chart.mjs.map +1 -0
- package/fesm2022/acorex-charts-hierarchy-chart.mjs +700 -0
- package/fesm2022/acorex-charts-hierarchy-chart.mjs.map +1 -0
- package/fesm2022/acorex-charts-line-chart.mjs +995 -0
- package/fesm2022/acorex-charts-line-chart.mjs.map +1 -0
- package/fesm2022/acorex-charts.mjs +41 -0
- package/fesm2022/acorex-charts.mjs.map +1 -0
- package/gauge-chart/README.md +3 -0
- package/gauge-chart/index.d.ts +218 -0
- package/hierarchy-chart/README.md +61 -0
- package/hierarchy-chart/index.d.ts +368 -0
- package/index.d.ts +14 -0
- package/line-chart/README.md +3 -0
- package/line-chart/index.d.ts +184 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-charts-hierarchy-chart.mjs","sources":["../tmp-esm2022/hierarchy-chart/lib/hierarchy-chart.config.js","../tmp-esm2022/hierarchy-chart/lib/hierarchy-chart.component.js","../tmp-esm2022/hierarchy-chart/acorex-charts-hierarchy-chart.js"],"sourcesContent":["import { AX_GLOBAL_CONFIG } from '@acorex/core/config';\nimport { InjectionToken, inject } from '@angular/core';\nimport { set } from 'lodash-es';\nexport const AXHierarchyChartDefaultConfig = {\n direction: 'vertical',\n margin: { top: 40, right: 120, bottom: 40, left: 120 },\n nodeRadius: 30,\n nodeStrokeWidth: 1.5,\n linkWidth: 1.5,\n linkStyle: 'curved',\n nodeWidth: 120,\n nodeHeight: 60,\n nodeSpacingX: 80,\n nodeSpacingY: 120,\n showTooltip: true,\n collapsible: true,\n expandAll: false,\n animationDuration: 100,\n animationEasing: 'cubic-out',\n};\nexport const AX_HIERARCHY_CHART_CONFIG = new InjectionToken('AX_HIERARCHY_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => {\n const global = inject(AX_GLOBAL_CONFIG);\n set(global, 'chart.hierarchyChart', AXHierarchyChartDefaultConfig);\n return AXHierarchyChartDefaultConfig;\n },\n});\nexport function hierarchyChartConfig(config = {}) {\n const result = {\n ...AXHierarchyChartDefaultConfig,\n ...config,\n };\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWNoYXJ0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9oaWVyYXJjaHktY2hhcnQvc3JjL2xpYi9oaWVyYXJjaHktY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHaEMsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQTJCO0lBQ25FLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDdEQsVUFBVSxFQUFFLEVBQUU7SUFDZCxlQUFlLEVBQUUsR0FBRztJQUNwQixTQUFTLEVBQUUsR0FBRztJQUNkLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFNBQVMsRUFBRSxHQUFHO0lBQ2QsVUFBVSxFQUFFLEVBQUU7SUFDZCxZQUFZLEVBQUUsRUFBRTtJQUNoQixZQUFZLEVBQUUsR0FBRztJQUNqQixXQUFXLEVBQUUsSUFBSTtJQUNqQixXQUFXLEVBQUUsSUFBSTtJQUNqQixTQUFTLEVBQUUsS0FBSztJQUNoQixpQkFBaUIsRUFBRSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxXQUFXO0NBQzdCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLGNBQWMsQ0FBeUIsMkJBQTJCLEVBQUU7SUFDL0csVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNaLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3hDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztRQUNuRSxPQUFPLDZCQUE2QixDQUFDO0lBQ3ZDLENBQUM7Q0FDRixDQUFDLENBQUM7QUFJSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsU0FBc0MsRUFBRTtJQUMzRSxNQUFNLE1BQU0sR0FBRztRQUNiLEdBQUcsNkJBQTZCO1FBQ2hDLEdBQUcsTUFBTTtLQUNWLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhfR0xPQkFMX0NPTkZJRyB9IGZyb20gJ0BhY29yZXgvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFYSGllcmFyY2h5Q2hhcnRPcHRpb24gfSBmcm9tICcuL2hpZXJhcmNoeS1jaGFydC50eXBlJztcblxuZXhwb3J0IGNvbnN0IEFYSGllcmFyY2h5Q2hhcnREZWZhdWx0Q29uZmlnOiBBWEhpZXJhcmNoeUNoYXJ0T3B0aW9uID0ge1xuICBkaXJlY3Rpb246ICd2ZXJ0aWNhbCcsXG4gIG1hcmdpbjogeyB0b3A6IDQwLCByaWdodDogMTIwLCBib3R0b206IDQwLCBsZWZ0OiAxMjAgfSxcbiAgbm9kZVJhZGl1czogMzAsXG4gIG5vZGVTdHJva2VXaWR0aDogMS41LFxuICBsaW5rV2lkdGg6IDEuNSxcbiAgbGlua1N0eWxlOiAnY3VydmVkJyxcbiAgbm9kZVdpZHRoOiAxMjAsXG4gIG5vZGVIZWlnaHQ6IDYwLFxuICBub2RlU3BhY2luZ1g6IDgwLFxuICBub2RlU3BhY2luZ1k6IDEyMCxcbiAgc2hvd1Rvb2x0aXA6IHRydWUsXG4gIGNvbGxhcHNpYmxlOiB0cnVlLFxuICBleHBhbmRBbGw6IGZhbHNlLFxuICBhbmltYXRpb25EdXJhdGlvbjogMTAwLFxuICBhbmltYXRpb25FYXNpbmc6ICdjdWJpYy1vdXQnLFxufTtcblxuZXhwb3J0IGNvbnN0IEFYX0hJRVJBUkNIWV9DSEFSVF9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhIaWVyYXJjaHlDaGFydE9wdGlvbj4oJ0FYX0hJRVJBUkNIWV9DSEFSVF9DT05GSUcnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbCA9IGluamVjdChBWF9HTE9CQUxfQ09ORklHKTtcbiAgICBzZXQoZ2xvYmFsLCAnY2hhcnQuaGllcmFyY2h5Q2hhcnQnLCBBWEhpZXJhcmNoeUNoYXJ0RGVmYXVsdENvbmZpZyk7XG4gICAgcmV0dXJuIEFYSGllcmFyY2h5Q2hhcnREZWZhdWx0Q29uZmlnO1xuICB9LFxufSk7XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxIaWVyYXJjaHlDaGFydENvbmZpZyA9IFBhcnRpYWw8QVhIaWVyYXJjaHlDaGFydE9wdGlvbj47XG5cbmV4cG9ydCBmdW5jdGlvbiBoaWVyYXJjaHlDaGFydENvbmZpZyhjb25maWc6IFBhcnRpYWxIaWVyYXJjaHlDaGFydENvbmZpZyA9IHt9KTogQVhIaWVyYXJjaHlDaGFydE9wdGlvbiB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAuLi5BWEhpZXJhcmNoeUNoYXJ0RGVmYXVsdENvbmZpZyxcbiAgICAuLi5jb25maWcsXG4gIH07XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=","import { NXComponent } from '@acorex/cdk/common';\nimport { AXPanViewDirective } from '@acorex/cdk/pan-view';\nimport { ChangeDetectionStrategy, Component, NgZone, ViewContainerRef, ViewEncapsulation, afterNextRender, computed, contentChild, effect, inject, input, output, signal, viewChild, } from '@angular/core';\nimport { AX_HIERARCHY_CHART_CONFIG } from './hierarchy-chart.config';\nimport * as i0 from \"@angular/core\";\n/**\n * A highly customizable hierarchical visualization component that can be used for:\n * - Organization charts\n * - Tree diagrams\n * - Dependency visualizations\n * - Process flows\n *\n * Supports both default node styling and custom node templates.\n */\nexport class AXHierarchyChartComponent extends NXComponent {\n // Chart container reference\n chartContainer = viewChild.required('chartContainer');\n // Custom node template provided by the user\n customNodeTemplate = contentChild('nodeTemplate');\n // Services\n ngZone = inject(NgZone);\n viewContainerRef = inject(ViewContainerRef);\n configToken = inject(AX_HIERARCHY_CHART_CONFIG);\n // D3 instance\n d3;\n // Internal state signals\n _expandedNodes = signal(new Map());\n _initialized = signal(false);\n _rendered = signal(false);\n _dimensions = signal({ width: 0, height: 0 });\n _nodeElements = signal(new Map()); // Store references to node elements\n _chartData = signal(null); // Store the current chart data and layout\n // Inputs\n data = input([]);\n options = input({});\n nodeTemplate = input(null);\n // Outputs\n itemClick = output();\n nodeToggle = output();\n // Computed values\n processedData = computed(() => {\n const data = this.data();\n // Handle both single node and array formats\n return Array.isArray(data) ? { id: 'root', children: data } : data;\n });\n // Check if custom template is available\n hasCustomTemplate = computed(() => {\n return Boolean(this.customNodeTemplate() || this.nodeTemplate());\n });\n effectiveOptions = computed(() => {\n return {\n ...this.configToken,\n ...this.options(),\n };\n });\n constructor() {\n super();\n // Dynamically load D3 and initialize the chart when the component is ready\n afterNextRender(() => {\n this._initialized.set(true);\n this.loadD3();\n this.initializeExpandedState();\n });\n // Watch for changes to redraw the chart\n effect(() => {\n // Access these to track them\n this.processedData();\n this.nodeTemplate();\n this.customNodeTemplate();\n this.effectiveOptions();\n this._expandedNodes();\n if (this._initialized() && this.d3 && this._rendered()) {\n this.createChart();\n }\n });\n }\n /**\n * Initialize the expanded state for all nodes\n */\n initializeExpandedState() {\n const newExpandedNodes = new Map();\n const data = this.processedData();\n const expandAll = this.effectiveOptions().expandAll;\n // Helper function to recursively process nodes\n const processNode = (node) => {\n if (node.children && node.children.length > 0) {\n // Set initial expansion state based on node property or global option\n newExpandedNodes.set(node.id, node.isExpanded !== undefined ? node.isExpanded : expandAll);\n // Process children\n node.children.forEach((child) => processNode(child));\n }\n };\n // Start processing\n if (data.children) {\n data.children.forEach((node) => processNode(node));\n }\n else if (data.id) {\n processNode(data);\n }\n this._expandedNodes.set(newExpandedNodes);\n }\n /**\n * Dynamically load D3.js to reduce initial bundle size\n */\n async loadD3() {\n try {\n this.d3 = await import('d3');\n if (this._initialized() && this.chartContainer()) {\n this.updateDimensions();\n this.createChart();\n this._rendered.set(true);\n }\n }\n catch (error) {\n console.error('Failed to load D3.js:', error);\n }\n }\n /**\n * Update dimensions based on container size\n */\n updateDimensions() {\n const container = this.chartContainer().nativeElement;\n const options = this.effectiveOptions();\n const containerRect = container.getBoundingClientRect();\n const width = options.width || Math.max(containerRect.width, 300);\n const height = options.height || Math.max(containerRect.height, 400);\n this._dimensions.set({ width, height });\n }\n /**\n * Create and render the hierarchy chart\n */\n createChart() {\n if (!this.d3) {\n return;\n }\n // Clear any existing chart\n this.clearChart();\n const container = this.chartContainer().nativeElement;\n const data = this.processedData();\n // Check for null/undefined data or empty children\n if (!data || !data.children || data.children.length === 0) {\n this.showNoDataMessage(container);\n return;\n }\n const options = this.effectiveOptions();\n const dimensions = this._dimensions();\n const expandedNodes = this._expandedNodes();\n this.ngZone.runOutsideAngular(() => {\n // Get dimensions and options\n const { width, height } = dimensions;\n const margin = options.margin || { top: 40, right: 120, bottom: 40, left: 120 };\n const nodeWidth = options.nodeWidth || 120;\n const nodeHeight = options.nodeHeight || 60;\n const nodeSpacingX = options.nodeSpacingX || 80;\n const nodeSpacingY = options.nodeSpacingY || 120;\n const isHorizontal = options.direction === 'horizontal';\n // Create SVG container with viewBox for responsiveness\n const svg = this.d3\n .select(container)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .style('overflow', 'visible')\n .classed(options.className || '', !!options.className);\n // Create hierarchy layout from data\n const rootData = this.processedData();\n const root = this.d3.hierarchy(rootData);\n // Apply expansion state to nodes\n root.descendants().forEach((node) => {\n if (node.data.id !== 'root' && node.children) {\n if (expandedNodes.has(node.data.id) && !expandedNodes.get(node.data.id)) {\n node._children = node.children; // Store children\n node.children = null; // Collapse node\n }\n }\n });\n // Set up the tree layout based on direction option\n const treeLayout = this.d3\n .tree()\n .nodeSize([\n isHorizontal ? nodeHeight + nodeSpacingY : nodeWidth + nodeSpacingX,\n isHorizontal ? nodeWidth + nodeSpacingX : nodeHeight + nodeSpacingY,\n ])\n .separation((a, b) => {\n return a.parent === b.parent ? 1.2 : 1.5;\n });\n treeLayout(root);\n // Store the current tree layout data for future updates\n this._chartData.set({\n root,\n treeLayout,\n isHorizontal,\n nodeWidth,\n nodeHeight,\n });\n // Adjust root position based on direction\n const rootX = isHorizontal ? margin.top : width / 2;\n const rootY = isHorizontal ? margin.left : margin.top;\n // Calculate bounds of the tree after layout\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n root.descendants().forEach((d) => {\n if (d.data.id === 'root')\n return;\n const x = isHorizontal ? d.x : d.x;\n const y = isHorizontal ? d.y : d.y;\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n });\n // Calculate the center of the tree\n const centerX = (minX + maxX) / 2;\n const centerY = (minY + maxY) / 2;\n // Create a group for the chart content with proper centering\n const g = svg\n .append('g')\n .attr('transform', isHorizontal\n ? `translate(${margin.left}, ${height / 2 - centerX})`\n : `translate(${width / 2}, ${margin.top})`);\n // Draw links between nodes\n const links = g\n .selectAll('.link')\n .data(root.links().filter((d) => d.source.data.id !== 'root'))\n .enter()\n .append('path')\n .attr('class', 'ax-hierarchy-chart-link')\n .attr('d', (d) => {\n // Get the link style from options\n const linkStyle = options.linkStyle || 'curved';\n // Source and target coordinates based on direction\n const sourceX = isHorizontal ? d.source.y : d.source.x;\n const sourceY = isHorizontal ? d.source.x : d.source.y;\n const targetX = isHorizontal ? d.target.y : d.target.x;\n const targetY = isHorizontal ? d.target.x : d.target.y;\n // Variables for rounded corners\n let xDistance, yDistance, cornerRadius, midX, midY;\n switch (linkStyle) {\n case 'straight':\n // Direct straight line\n return `M${sourceX},${sourceY}L${targetX},${targetY}`;\n case 'rounded':\n // Curved line with rounded corners\n xDistance = Math.abs(targetX - sourceX);\n yDistance = Math.abs(targetY - sourceY);\n cornerRadius = Math.min(xDistance, yDistance) * 0.2; // Reduced radius for better appearance\n if (isHorizontal) {\n // For horizontal layout\n const halfDistance = (targetX - sourceX) / 2;\n const xMid = sourceX + halfDistance;\n return `\n M${sourceX},${sourceY}\n H${xMid - cornerRadius}\n Q${xMid},${sourceY} ${xMid},${sourceY + Math.sign(targetY - sourceY) * cornerRadius}\n V${targetY - Math.sign(targetY - sourceY) * cornerRadius}\n Q${xMid},${targetY} ${xMid + cornerRadius},${targetY}\n H${targetX}\n `;\n }\n else {\n // For vertical layout\n const halfDistance = (targetY - sourceY) / 2;\n const yMid = sourceY + halfDistance;\n return `\n M${sourceX},${sourceY}\n V${yMid - cornerRadius}\n Q${sourceX},${yMid} ${sourceX + Math.sign(targetX - sourceX) * cornerRadius},${yMid}\n H${targetX - Math.sign(targetX - sourceX) * cornerRadius}\n Q${targetX},${yMid} ${targetX},${yMid + cornerRadius}\n V${targetY}\n `;\n }\n case 'step':\n // L-shaped stepped line\n if (isHorizontal) {\n return `M${sourceX},${sourceY}H${(sourceX + targetX) / 2}V${targetY}H${targetX}`;\n }\n else {\n return `M${sourceX},${sourceY}V${(sourceY + targetY) / 2}H${targetX}V${targetY}`;\n }\n case 'curved':\n default:\n // Default curved line using D3's built-in link generator\n if (isHorizontal) {\n return this.d3\n .linkHorizontal()\n .x((d) => d.y)\n .y((d) => d.x)(d);\n }\n else {\n return this.d3\n .linkVertical()\n .x((d) => d.x)\n .y((d) => d.y)(d);\n }\n }\n })\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-link-color))`)\n .attr('stroke-width', options.linkWidth)\n .attr('fill', 'none')\n .attr('opacity', 1);\n // Determine which template to use for rendering nodes\n const useCustomTemplate = this.hasCustomTemplate();\n const templateToUse = this.nodeTemplate() || this.customNodeTemplate();\n // Create a map to store node elements for future updates\n const nodeElementsMap = new Map();\n // Create node groups\n const nodeGroups = g\n .selectAll('.node-group')\n .data(root.descendants().filter((d) => d.data.id !== 'root'))\n .enter()\n .append('g')\n .attr('class', 'ax-hierarchy-chart-node-group')\n .attr('data-node-id', (d) => d.data.id) // Add a data attribute for easier selection\n .attr('transform', (d) => {\n const x = isHorizontal ? d.y : d.x;\n const y = isHorizontal ? d.x : d.y;\n return `translate(${x},${y})`;\n })\n .attr('opacity', 1); // Display nodes immediately with full opacity\n // Store node elements in the map\n nodeGroups.each(function (d) {\n nodeElementsMap.set(d.data.id, this);\n });\n // Update the node elements signal\n this._nodeElements.set(nodeElementsMap);\n if (useCustomTemplate && templateToUse) {\n // Render custom node templates\n nodeGroups.each((d, i, nodes) => {\n const node = d.data;\n const element = nodes[i];\n const hasChildren = !!(node.children && node.children.length > 0);\n const isExpanded = hasChildren && this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n // Enhance the node with expanded state and toggle function\n node.expanded = isExpanded || false;\n node.toggleExpanded = () => this.toggleNode(node.id);\n // Create a foreignObject for the template\n const foreignObject = this.d3\n .select(element)\n .append('foreignObject')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('class', 'ax-hierarchy-chart-node-container')\n .on('click', (event) => {\n // Don't propagate the event if it's coming from an interactive element\n // like a button inside the template\n const target = event.target;\n const isInteractive = target.tagName === 'BUTTON' || target.tagName === 'A' || target.closest('button, a, [role=\"button\"]');\n if (!isInteractive) {\n this.handleNodeClick(event, d);\n }\n });\n // Create a div to hold the template\n const div = foreignObject\n .append('xhtml:div')\n .attr('class', 'ax-hierarchy-chart-node-content')\n .style('width', '100%')\n .style('height', '100%');\n // Render the template into the div\n this.ngZone.run(() => {\n // Create context with enhanced node as the implicit value\n const context = {\n $implicit: node,\n };\n const viewRef = this.viewContainerRef.createEmbeddedView(templateToUse, context);\n viewRef.detectChanges();\n // Append template contents to the div\n const nodes = viewRef.rootNodes;\n for (const node of nodes) {\n div.node().appendChild(node);\n }\n });\n });\n }\n else {\n // Render enhanced default nodes (rectangles with text and icons)\n nodeGroups.each((d, i, nodes) => {\n const group = this.d3.select(nodes[i]);\n const node = d.data;\n const hasChildren = !!(node.children && node.children.length > 0);\n // Node background rect with rounded corners\n group\n .append('rect')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('rx', 6)\n .attr('ry', 6)\n .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n .attr('stroke-width', options.nodeStrokeWidth)\n .attr('class', 'ax-hierarchy-chart-node');\n // Main title/name\n group\n .append('text')\n .attr('y', -10)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-title')\n .attr('fill', 'white')\n .attr('font-weight', 'bold')\n .text(node.name || node.label || '');\n // Subtitle if provided\n if (node.subtitle) {\n group\n .append('text')\n .attr('y', 10)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-subtitle')\n .attr('fill', 'rgba(255, 255, 255, 0.8)')\n .attr('font-size', '0.8em')\n .text(node.subtitle);\n }\n // Type label if provided\n if (node.type) {\n group\n .append('text')\n .attr('y', 25)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-type')\n .attr('fill', 'rgba(255, 255, 255, 0.7)')\n .attr('font-size', '0.7em')\n .text(node.type);\n }\n // Add expand/collapse indicator if node has children\n if (hasChildren && options.collapsible) {\n const isExpanded = this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n // Toggle button with better styling\n group\n .append('circle')\n .attr('r', 10)\n .attr('cx', nodeWidth / 2 - 12)\n .attr('cy', -nodeHeight / 2 + 12)\n .attr('fill', 'white')\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n .attr('stroke-width', 1)\n .attr('class', 'ax-hierarchy-chart-toggle-indicator')\n .style('cursor', 'pointer')\n .on('click', (event) => {\n event.stopPropagation();\n this.toggleNode(node.id);\n });\n // Toggle icon\n group\n .append('text')\n .attr('x', nodeWidth / 2 - 12)\n .attr('y', -nodeHeight / 2 + 12)\n .attr('dy', '0.32em')\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-toggle-icon')\n .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n .attr('font-weight', 'bold')\n .style('cursor', 'pointer')\n .text(isExpanded ? '−' : '+')\n .on('click', (event) => {\n event.stopPropagation();\n this.toggleNode(node.id);\n });\n }\n // Icon if provided\n if (node.icon) {\n group\n .append('text')\n .attr('x', -nodeWidth / 2 + 15)\n .attr('y', 0)\n .attr('dy', '0.32em')\n .attr('class', 'ax-hierarchy-chart-node-icon')\n .attr('fill', 'white')\n .attr('class', node.icon);\n }\n // Add click handler to the whole node\n group.on('click', (event) => {\n this.handleNodeClick(event, d);\n });\n // Add tooltip if enabled\n if (options.showTooltip && (node.tooltip || node.description)) {\n group.append('title').text(node.tooltip || node.description || '');\n }\n });\n }\n });\n }\n /**\n * Toggle node expansion state\n */\n toggleNode(nodeId) {\n const expandedNodes = new Map(this._expandedNodes());\n const currentState = expandedNodes.get(nodeId);\n const newState = currentState === undefined ? false : !currentState;\n expandedNodes.set(nodeId, newState);\n this._expandedNodes.set(expandedNodes);\n // Emit toggle event\n this.findNodeById(this.processedData(), nodeId).then((node) => {\n if (node) {\n this.nodeToggle.emit({\n node: node,\n expanded: newState,\n });\n }\n });\n // Update toggle indicator immediately for better UX\n this.updateToggleIndicator(nodeId, newState);\n }\n /**\n * Update just the toggle indicator without redrawing the chart\n */\n updateToggleIndicator(nodeId, expanded) {\n if (!this.d3 || !this.chartContainer())\n return;\n this.ngZone.runOutsideAngular(() => {\n const container = this.chartContainer().nativeElement;\n const svg = container.querySelector('svg');\n if (!svg)\n return;\n // Find and update the toggle indicator for the specific node\n const nodeGroup = this.d3.select(svg).select(`[data-node-id=\"${nodeId}\"]`);\n if (nodeGroup.empty())\n return;\n // Update the toggle icon (if it exists)\n const toggleIcon = nodeGroup.select('.ax-hierarchy-chart-toggle-icon');\n if (!toggleIcon.empty()) {\n toggleIcon.text(expanded ? '−' : '+');\n }\n });\n // Force effect to run that will update the chart\n // This leverages Angular's reactivity rather than a direct method call\n // which is more consistent with Angular's reactive approach\n const expandedNodes = new Map(this._expandedNodes());\n this._expandedNodes.set(expandedNodes);\n }\n /**\n * Find a node by ID\n */\n async findNodeById(data, id) {\n if (data.id === id) {\n return data;\n }\n if (data.children) {\n for (const child of data.children) {\n const found = await this.findNodeById(child, id);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n /**\n * Handle node click events\n */\n handleNodeClick(event, d) {\n const node = d.data;\n // Emit click event\n this.itemClick.emit({\n event: { nativeEvent: event, sender: this },\n item: node,\n element: event.currentTarget,\n });\n }\n /**\n * Clear existing chart\n */\n clearChart() {\n const container = this.chartContainer()?.nativeElement;\n if (!container)\n return;\n // Remove existing SVG\n const svg = container.querySelector('svg');\n if (svg) {\n svg.remove();\n }\n }\n /**\n * Get D3 easing function from string name\n */\n getEasingFunction(easing) {\n if (!easing)\n return this.d3.easeCubicInOut;\n switch (easing) {\n case 'linear':\n return this.d3.easeLinear;\n case 'ease':\n return this.d3.easePolyInOut;\n case 'ease-in':\n return this.d3.easePolyIn;\n case 'ease-out':\n return this.d3.easePolyOut;\n case 'ease-in-out':\n return this.d3.easePolyInOut;\n case 'cubic':\n return this.d3.easeCubic;\n case 'cubic-in':\n return this.d3.easeCubicIn;\n case 'cubic-out':\n return this.d3.easeCubicOut;\n case 'cubic-in-out':\n return this.d3.easeCubicInOut;\n default:\n return this.d3.easeCubicInOut;\n }\n }\n /**\n * Shows a message when no data is available\n */\n showNoDataMessage(containerElement) {\n // Clear existing contents first\n this.d3.select(containerElement).selectAll('*').remove();\n const messageContainer = this.d3\n .select(containerElement)\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-message')\n .style('position', 'absolute')\n .style('left', '50%')\n .style('top', '50%')\n .style('transform', 'translate(-50%, -50%)')\n .style('text-align', 'center')\n .style('background-color', 'rgb(var(--ax-comp-hierarchy-chart-bg-color))')\n .style('padding', '1.5rem')\n .style('border-radius', '0.5rem')\n .style('box-shadow', '0 2px 12px rgba(0, 0, 0, 0.08)')\n .style('width', '80%')\n .style('max-width', '300px');\n // Add an icon\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-icon')\n .style('opacity', '0.6')\n .style('margin-bottom', '0.75rem')\n .html('<i class=\"fa-light fa-sitemap fa-2x\"></i>');\n // Add text message\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-text')\n .style('font-size', '1rem')\n .style('font-weight', '600')\n .style('margin-bottom', '0.5rem')\n .text('No data available');\n // Add help text\n messageContainer\n .append('div')\n .attr('class', 'ax-hierarchy-chart-no-data-help')\n .style('font-size', '0.8rem')\n .style('opacity', '0.6')\n .text('Please provide data to display the chart');\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXHierarchyChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.0.4\", type: AXHierarchyChartComponent, isStandalone: true, selector: \"ax-hierarchy-chart\", inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null }, nodeTemplate: { classPropertyName: \"nodeTemplate\", publicName: \"nodeTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: \"itemClick\", nodeToggle: \"nodeToggle\" }, queries: [{ propertyName: \"customNodeTemplate\", first: true, predicate: [\"nodeTemplate\"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: \"chartContainer\", first: true, predicate: [\"chartContainer\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div axPanView class=\\\"ax-hierarchy-chart\\\" #chartContainer></div>\\n\", styles: [\"ax-hierarchy-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-hierarchy-chart-node-color: var(--ax-sys-color-primary-500);--ax-comp-hierarchy-chart-node-stroke-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-link-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-hierarchy-chart-bg-color: var(--ax-sys-color-lightest-surface);color:rgb(var(--ax-comp-hierarchy-chart-text-color));background-color:rgb(var(--ax-comp-hierarchy-chart-bg-color))}ax-hierarchy-chart .ax-hierarchy-chart{width:100%;height:100%;min-height:300px;position:relative;overflow:visible}ax-hierarchy-chart .ax-hierarchy-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-hierarchy-chart-bg-color));padding:1.5rem;border-radius:.5rem;box-shadow:0 2px 12px #00000014;width:80%;max-width:300px}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-help{font-size:.8rem;opacity:.6}\\n\"], dependencies: [{ kind: \"directive\", type: AXPanViewDirective, selector: \"[axPanView]\", inputs: [\"zoomStep\", \"minZoom\", \"maxZoom\", \"freeMode\", \"fitContent\", \"disablePan\", \"disableZoom\", \"wrapperClasses\", \"panX\", \"panY\", \"zoom\"], outputs: [\"panXChange\", \"panYChange\", \"zoomChange\", \"positionChange\"], exportAs: [\"axPanView\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.4\", ngImport: i0, type: AXHierarchyChartComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-hierarchy-chart', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXPanViewDirective], template: \"<div axPanView class=\\\"ax-hierarchy-chart\\\" #chartContainer></div>\\n\", styles: [\"ax-hierarchy-chart{display:block;width:100%;height:100%;min-height:300px;--ax-comp-hierarchy-chart-node-color: var(--ax-sys-color-primary-500);--ax-comp-hierarchy-chart-node-stroke-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-link-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-hierarchy-chart-bg-color: var(--ax-sys-color-lightest-surface);color:rgb(var(--ax-comp-hierarchy-chart-text-color));background-color:rgb(var(--ax-comp-hierarchy-chart-bg-color))}ax-hierarchy-chart .ax-hierarchy-chart{width:100%;height:100%;min-height:300px;position:relative;overflow:visible}ax-hierarchy-chart .ax-hierarchy-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message{position:absolute;text-align:center;transform:translate(-50%,-50%);background-color:rgb(var(--ax-comp-hierarchy-chart-bg-color));padding:1.5rem;border-radius:.5rem;box-shadow:0 2px 12px #00000014;width:80%;max-width:300px}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-icon{opacity:.6;margin-bottom:.75rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-text{font-size:1rem;font-weight:600;margin-bottom:.5rem}ax-hierarchy-chart .ax-hierarchy-chart-no-data-message .ax-hierarchy-chart-no-data-help{font-size:.8rem;opacity:.6}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9oaWVyYXJjaHktY2hhcnQvc3JjL2xpYi9oaWVyYXJjaHktY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2hpZXJhcmNoeS1jaGFydC9zcmMvbGliL2hpZXJhcmNoeS1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFMUQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsTUFBTSxFQUVOLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBU3JFOzs7Ozs7OztHQVFHO0FBVUgsTUFBTSxPQUFPLHlCQUEwQixTQUFRLFdBQVc7SUFDeEQsNEJBQTRCO0lBQ3BCLGNBQWMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUE2QixnQkFBZ0IsQ0FBQyxDQUFDO0lBRTFGLDRDQUE0QztJQUM1QyxrQkFBa0IsR0FBRyxZQUFZLENBQTJDLGNBQWMsQ0FBQyxDQUFDO0lBQzVGLFdBQVc7SUFDSCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVDLFdBQVcsR0FBRyxNQUFNLENBQUMseUJBQXlCLENB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QUFDLG1CQUFtQixDQUFDLENBQUM7UUFFN0IsZ0JBQWdCO1FBQ2hCLGdCQUFnQjthQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUM7YUFDYixJQUFJLENBQUMsT0FBTyxFQUFFLGlDQUFpQyxDQUFDO2FBQ2hELEtBQUssQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDO2FBQzVCLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO2FBQ3ZCLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7dUdBbnRCVSx5QkFBeUI7MkZBQXpCLHlCQUF5QixrekJDaER0QyxzRUFDQSx1OUNENkNZLGtCQUFrQjs7MkZBRWpCLHlCQUF5QjtrQkFUckMsU0FBUzsrQkFDRSxvQkFBb0IsY0FHbEIsSUFBSSxpQkFDRCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY2RrL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBhblZpZXdEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L2Nkay9wYW4tdmlldyc7XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE5nWm9uZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBhZnRlck5leHRSZW5kZXIsXG4gIGNvbXB1dGVkLFxuICBjb250ZW50Q2hpbGQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWF9ISUVSQVJDSFlfQ0hBUlRfQ09ORklHIH0gZnJvbSAnLi9oaWVyYXJjaHktY2hhcnQuY29uZmlnJztcbmltcG9ydCB7XG4gIEFYSGllcmFyY2h5Q2hhcnRDbGlja0V2ZW50LFxuICBBWEhpZXJhcmNoeUNoYXJ0RGF0YSxcbiAgQVhIaWVyYXJjaHlDaGFydE5vZGUsXG4gIEFYSGllcmFyY2h5Q2hhcnROb2RlQ29udGV4dCxcbiAgQVhIaWVyYXJjaHlDaGFydE9wdGlvbixcbiAgQVhIaWVyYXJjaHlDaGFydFRvZ2dsZUV2ZW50LFxufSBmcm9tICcuL2hpZXJhcmNoeS1jaGFydC50eXBlJztcbi8qKlxuICogQSBoaWdobHkgY3VzdG9taXphYmxlIGhpZXJhcmNoaWNhbCB2aXN1YWxpemF0aW9uIGNvbXBvbmVudCB0aGF0IGNhbiBiZSB1c2VkIGZvcjpcbiAqIC0gT3JnYW5pemF0aW9uIGNoYXJ0c1xuICogLSBUcmVlIGRpYWdyYW1zXG4gKiAtIERlcGVuZGVuY3kgdmlzdWFsaXphdGlvbnNcbiAqIC0gUHJvY2VzcyBmbG93c1xuICpcbiAqIFN1cHBvcnRzIGJvdGggZGVmYXVsdCBub2RlIHN0eWxpbmcgYW5kIGN1c3RvbSBub2RlIHRlbXBsYXRlcy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtaGllcmFyY2h5LWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hpZXJhcmNoeS1jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2hpZXJhcmNoeS1jaGFydC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0FYUGFuVmlld0RpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYSGllcmFyY2h5Q2hhcnRDb21wb25lbnQgZXh0ZW5kcyBOWENvbXBvbmVudCB7XG4gIC8vIENoYXJ0IGNvbnRhaW5lciByZWZlcmVuY2VcbiAgcHJpdmF0ZSBjaGFydENvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NoYXJ0Q29udGFpbmVyJyk7XG5cbiAgLy8gQ3VzdG9tIG5vZGUgdGVtcGxhdGUgcHJvdmlkZWQgYnkgdGhlIHVzZXJcbiAgY3VzdG9tTm9kZVRlbXBsYXRlID0gY29udGVudENoaWxkPFRlbXBsYXRlUmVmPEFYSGllcmFyY2h5Q2hhcnROb2RlQ29udGV4dD4+KCdub2RlVGVtcGxhdGUnKTtcbiAgLy8gU2VydmljZXNcbiAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIGNvbmZpZ1Rva2VuID0gaW5qZWN0KEFYX0hJRVJBUkNIWV9DSEFSVF9DT05GSUcpO1xuXG4gIC8vIEQzIGluc3RhbmNlXG4gIHByaXZhdGUgZDM6IGFueTtcblxuICAvLyBJbnRlcm5hbCBzdGF0ZSBzaWduYWxzXG4gIHByaXZhdGUgX2V4cGFuZGVkTm9kZXMgPSBzaWduYWw8TWFwPHN0cmluZywgYm9vbGVhbj4+KG5ldyBNYXAoKSk7XG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBfcmVuZGVyZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIF9kaW1lbnNpb25zID0gc2lnbmFsKHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSBfbm9kZUVsZW1lbnRzID0gc2lnbmFsPE1hcDxzdHJpbmcsIGFueT4+KG5ldyBNYXAoKSk7IC8vIFN0b3JlIHJlZmVyZW5jZXMgdG8gbm9kZSBlbGVtZW50c1xuICBwcml2YXRlIF9jaGFydERhdGEgPSBzaWduYWw8YW55PihudWxsKTsgLy8gU3RvcmUgdGhlIGN1cnJlbnQgY2hhcnQgZGF0YSBhbmQgbGF5b3V0XG5cbiAgLy8gSW5wdXRzXG4gIGRhdGEgPSBpbnB1dDxBWEhpZXJhcmNoeUNoYXJ0RGF0YSB8IEFYSGllcmFyY2h5Q2hhcnREYXRhW10+KFtdKTtcbiAgb3B0aW9ucyA9IGlucHV0PEFYSGllcmFyY2h5Q2hhcnRPcHRpb24+KHt9KTtcbiAgbm9kZVRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8QVhIaWVyYXJjaHlDaGFydE5vZGVDb250ZXh0PiB8IG51bGw+KG51bGwpO1xuXG4gIC8vIE91dHB1dHNcbiAgaXRlbUNsaWNrID0gb3V0cHV0PEFYSGllcmFyY2h5Q2hhcnRDbGlja0V2ZW50PigpO1xuICBub2RlVG9nZ2xlID0gb3V0cHV0PEFYSGllcmFyY2h5Q2hhcnRUb2dnbGVFdmVudD4oKTtcblxuICAvLyBDb21wdXRlZCB2YWx1ZXNcbiAgcHJvdGVjdGVkIHByb2Nlc3NlZERhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YSgpO1xuICAgIC8vIEhhbmRsZSBib3RoIHNpbmdsZSBub2RlIGFuZCBhcnJheSBmb3JtYXRzXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGF0YSkgPyB7IGlkOiAncm9vdCcsIGNoaWxkcmVuOiBkYXRhIH0gOiBkYXRhO1xuICB9KTtcblxuICAvLyBDaGVjayBpZiBjdXN0b20gdGVtcGxhdGUgaXMgYXZhaWxhYmxlXG4gIHByb3RlY3RlZCBoYXNDdXN0b21UZW1wbGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLmN1c3RvbU5vZGVUZW1wbGF0ZSgpIHx8IHRoaXMubm9kZVRlbXBsYXRlKCkpO1xuICB9KTtcblxuICBwcm90ZWN0ZWQgZWZmZWN0aXZlT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25maWdUb2tlbixcbiAgICAgIC4uLnRoaXMub3B0aW9ucygpLFxuICAgIH07XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gRHluYW1pY2FsbHkgbG9hZCBEMyBhbmQgaW5pdGlhbGl6ZSB0aGUgY2hhcnQgd2hlbiB0aGUgY29tcG9uZW50IGlzIHJlYWR5XG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgIHRoaXMuX2luaXRpYWxpemVkLnNldCh0cnVlKTtcbiAgICAgIHRoaXMubG9hZEQzKCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVFeHBhbmRlZFN0YXRlKCk7XG4gICAgfSk7XG5cbiAgICAvLyBXYXRjaCBmb3IgY2hhbmdlcyB0byByZWRyYXcgdGhlIGNoYXJ0XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIEFjY2VzcyB0aGVzZSB0byB0cmFjayB0aGVtXG4gICAgICB0aGlzLnByb2Nlc3NlZERhdGEoKTtcbiAgICAgIHRoaXMubm9kZVRlbXBsYXRlKCk7XG4gICAgICB0aGlzLmN1c3RvbU5vZGVUZW1wbGF0ZSgpO1xuICAgICAgdGhpcy5lZmZlY3RpdmVPcHRpb25zKCk7XG4gICAgICB0aGlzLl9leHBhbmRlZE5vZGVzKCk7XG5cbiAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCgpICYmIHRoaXMuZDMgJiYgdGhpcy5fcmVuZGVyZWQoKSkge1xuICAgICAgICB0aGlzLmNyZWF0ZUNoYXJ0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgZXhwYW5kZWQgc3RhdGUgZm9yIGFsbCBub2Rlc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplRXhwYW5kZWRTdGF0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdFeHBhbmRlZE5vZGVzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucHJvY2Vzc2VkRGF0YSgpO1xuICAgIGNvbnN0IGV4cGFuZEFsbCA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpLmV4cGFuZEFsbDtcblxuICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byByZWN1cnNpdmVseSBwcm9jZXNzIG5vZGVzXG4gICAgY29uc3QgcHJvY2Vzc05vZGUgPSAobm9kZTogQVhIaWVyYXJjaHlDaGFydERhdGEpID0+IHtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBTZXQgaW5pdGlhbCBleHBhbnNpb24gc3RhdGUgYmFzZWQgb24gbm9kZSBwcm9wZXJ0eSBvciBnbG9iYWwgb3B0aW9uXG4gICAgICAgIG5ld0V4cGFuZGVkTm9kZXMuc2V0KG5vZGUuaWQsIG5vZGUuaXNFeHBhbmRlZCAhPT0gdW5kZWZpbmVkID8gbm9kZS5pc0V4cGFuZGVkIDogZXhwYW5kQWxsKTtcblxuICAgICAgICAvLyBQcm9jZXNzIGNoaWxkcmVuXG4gICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHByb2Nlc3NOb2RlKGNoaWxkKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIFN0YXJ0IHByb2Nlc3NpbmdcbiAgICBpZiAoZGF0YS5jaGlsZHJlbikge1xuICAgICAgZGF0YS5jaGlsZHJlbi5mb3JFYWNoKChub2RlKSA9PiBwcm9jZXNzTm9kZShub2RlKSk7XG4gICAgfSBlbHNlIGlmICgoZGF0YSBhcyBhbnkpLmlkKSB7XG4gICAgICBwcm9jZXNzTm9kZShkYXRhIGFzIEFYSGllcmFyY2h5Q2hhcnREYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLl9leHBhbmRlZE5vZGVzLnNldChuZXdFeHBhbmRlZE5vZGVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEeW5hbWljYWxseSBsb2FkIEQzLmpzIHRvIHJlZHVjZSBpbml0aWFsIGJ1bmRsZSBzaXplXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgbG9hZEQzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmQzID0gYXdhaXQgaW1wb3J0KCdkMycpO1xuICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKCkgJiYgdGhpcy5jaGFydENvbnRhaW5lcigpKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGltZW5zaW9ucygpO1xuICAgICAgICB0aGlzLmNyZWF0ZUNoYXJ0KCk7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVkLnNldCh0cnVlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgRDMuanM6JywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgZGltZW5zaW9ucyBiYXNlZCBvbiBjb250YWluZXIgc2l6ZVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVEaW1lbnNpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY2hhcnRDb250YWluZXIoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgd2lkdGggPSBvcHRpb25zLndpZHRoIHx8IE1hdGgubWF4KGNvbnRhaW5lclJlY3Qud2lkdGgsIDMwMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQgfHwgTWF0aC5tYXgoY29udGFpbmVyUmVjdC5oZWlnaHQsIDQwMCk7XG5cbiAgICB0aGlzLl9kaW1lbnNpb25zLnNldCh7IHdpZHRoLCBoZWlnaHQgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGFuZCByZW5kZXIgdGhlIGhpZXJhcmNoeSBjaGFydFxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVDaGFydCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZDMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDbGVhciBhbnkgZXhpc3RpbmcgY2hhcnRcbiAgICB0aGlzLmNsZWFyQ2hhcnQoKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY2hhcnRDb250YWluZXIoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnByb2Nlc3NlZERhdGEoKTtcblxuICAgIC8vIENoZWNrIGZvciBudWxsL3VuZGVmaW5lZCBkYXRhIG9yIGVtcHR5IGNoaWxkcmVuXG4gICAgaWYgKCFkYXRhIHx8ICFkYXRhLmNoaWxkcmVuIHx8IGRhdGEuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnNob3dOb0RhdGFNZXNzYWdlKGNvbnRhaW5lcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpO1xuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLl9kaW1lbnNpb25zKCk7XG4gICAgY29uc3QgZXhwYW5kZWROb2RlcyA9IHRoaXMuX2V4cGFuZGVkTm9kZXMoKTtcblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIC8vIEdldCBkaW1lbnNpb25zIGFuZCBvcHRpb25zXG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGRpbWVuc2lvbnM7XG4gICAgICBjb25zdCBtYXJnaW4gPSBvcHRpb25zLm1hcmdpbiB8fCB7IHRvcDogNDAsIHJpZ2h0OiAxMjAsIGJvdHRvbTogNDAsIGxlZnQ6IDEyMCB9O1xuICAgICAgY29uc3Qgbm9kZVdpZHRoID0gb3B0aW9ucy5ub2RlV2lkdGggfHwgMTIwO1xuICAgICAgY29uc3Qgbm9kZUhlaWdodCA9IG9wdGlvbnMubm9kZUhlaWdodCB8fCA2MDtcbiAgICAgIGNvbnN0IG5vZGVTcGFjaW5nWCA9IG9wdGlvbnMubm9kZVNwYWNpbmdYIHx8IDgwO1xuICAgICAgY29uc3Qgbm9kZVNwYWNpbmdZID0gb3B0aW9ucy5ub2RlU3BhY2luZ1kgfHwgMTIwO1xuICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJztcblxuICAgICAgLy8gQ3JlYXRlIFNWRyBjb250YWluZXIgd2l0aCB2aWV3Qm94IGZvciByZXNwb25zaXZlbmVzc1xuICAgICAgY29uc3Qgc3ZnID0gdGhpcy5kM1xuICAgICAgICAuc2VsZWN0KGNvbnRhaW5lcilcbiAgICAgICAgLmFwcGVuZCgnc3ZnJylcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCUnKVxuICAgICAgICAuYXR0cignaGVpZ2h0JywgJzEwMCUnKVxuICAgICAgICAuYXR0cigndmlld0JveCcsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YClcbiAgICAgICAgLmF0dHIoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAneE1pZFlNaWQgbWVldCcpXG4gICAgICAgIC5zdHlsZSgnb3ZlcmZsb3cnLCAndmlzaWJsZScpXG4gICAgICAgIC5jbGFzc2VkKG9wdGlvbnMuY2xhc3NOYW1lIHx8ICcnLCAhIW9wdGlvbnMuY2xhc3NOYW1lKTtcblxuICAgICAgLy8gQ3JlYXRlIGhpZXJhcmNoeSBsYXlvdXQgZnJvbSBkYXRhXG4gICAgICBjb25zdCByb290RGF0YSA9IHRoaXMucHJvY2Vzc2VkRGF0YSgpO1xuICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZDMuaGllcmFyY2h5KHJvb3REYXRhKTtcblxuICAgICAgLy8gQXBwbHkgZXhwYW5zaW9uIHN0YXRlIHRvIG5vZGVzXG4gICAgICByb290LmRlc2NlbmRhbnRzKCkuZm9yRWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChub2RlLmRhdGEuaWQgIT09ICdyb290JyAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGV4cGFuZGVkTm9kZXMuaGFzKG5vZGUuZGF0YS5pZCkgJiYgIWV4cGFuZGVkTm9kZXMuZ2V0KG5vZGUuZGF0YS5pZCkpIHtcbiAgICAgICAgICAgIG5vZGUuX2NoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsgLy8gU3RvcmUgY2hpbGRyZW5cbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBudWxsOyAvLyBDb2xsYXBzZSBub2RlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IHVwIHRoZSB0cmVlIGxheW91dCBiYXNlZCBvbiBkaXJlY3Rpb24gb3B0aW9uXG4gICAgICBjb25zdCB0cmVlTGF5b3V0ID0gdGhpcy5kM1xuICAgICAgICAudHJlZSgpXG4gICAgICAgIC5ub2RlU2l6ZShbXG4gICAgICAgICAgaXNIb3Jpem9udGFsID8gbm9kZUhlaWdodCArIG5vZGVTcGFjaW5nWSA6IG5vZGVXaWR0aCArIG5vZGVTcGFjaW5nWCxcbiAgICAgICAgICBpc0hvcml6b250YWwgPyBub2RlV2lkdGggKyBub2RlU3BhY2luZ1ggOiBub2RlSGVpZ2h0ICsgbm9kZVNwYWNpbmdZLFxuICAgICAgICBdKVxuICAgICAgICAuc2VwYXJhdGlvbigoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gYS5wYXJlbnQgPT09IGIucGFyZW50ID8gMS4yIDogMS41O1xuICAgICAgICB9KTtcblxuICAgICAgdHJlZUxheW91dChyb290KTtcblxuICAgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgdHJlZSBsYXlvdXQgZGF0YSBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgIHRoaXMuX2NoYXJ0RGF0YS5zZXQoe1xuICAgICAgICByb290LFxuICAgICAgICB0cmVlTGF5b3V0LFxuICAgICAgICBpc0hvcml6b250YWwsXG4gICAgICAgIG5vZGVXaWR0aCxcbiAgICAgICAgbm9kZUhlaWdodCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGp1c3Qgcm9vdCBwb3NpdGlvbiBiYXNlZCBvbiBkaXJlY3Rpb25cbiAgICAgIGNvbnN0IHJvb3RYID0gaXNIb3Jpem9udGFsID8gbWFyZ2luLnRvcCA6IHdpZHRoIC8gMjtcbiAgICAgIGNvbnN0IHJvb3RZID0gaXNIb3Jpem9udGFsID8gbWFyZ2luLmxlZnQgOiBtYXJnaW4udG9wO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgYm91bmRzIG9mIHRoZSB0cmVlIGFmdGVyIGxheW91dFxuICAgICAgbGV0IG1pblggPSBJbmZpbml0eTtcbiAgICAgIGxldCBtYXhYID0gLUluZmluaXR5O1xuICAgICAgbGV0IG1pblkgPSBJbmZpbml0eTtcbiAgICAgIGxldCBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICByb290LmRlc2NlbmRhbnRzKCkuZm9yRWFjaCgoZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChkLmRhdGEuaWQgPT09ICdyb290JykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHggPSBpc0hvcml6b250YWwgPyBkLnggOiBkLng7XG4gICAgICAgIGNvbnN0IHkgPSBpc0hvcml6b250YWwgPyBkLnkgOiBkLnk7XG5cbiAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHgpO1xuICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgeCk7XG4gICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCB5KTtcbiAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY2VudGVyIG9mIHRoZSB0cmVlXG4gICAgICBjb25zdCBjZW50ZXJYID0gKG1pblggKyBtYXhYKSAvIDI7XG4gICAgICBjb25zdCBjZW50ZXJZID0gKG1pblkgKyBtYXhZKSAvIDI7XG5cbiAgICAgIC8vIENyZWF0ZSBhIGdyb3VwIGZvciB0aGUgY2hhcnQgY29udGVudCB3aXRoIHByb3BlciBjZW50ZXJpbmdcbiAgICAgIGNvbnN0IGcgPSBzdmdcbiAgICAgICAgLmFwcGVuZCgnZycpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICd0cmFuc2Zvcm0nLFxuICAgICAgICAgIGlzSG9yaXpvbnRhbFxuICAgICAgICAgICAgPyBgdHJhbnNsYXRlKCR7bWFyZ2luLmxlZnR9LCAke2hlaWdodCAvIDIgLSBjZW50ZXJYfSlgXG4gICAgICAgICAgICA6IGB0cmFuc2xhdGUoJHt3aWR0aCAvIDJ9LCAke21hcmdpbi50b3B9KWAsXG4gICAgICAgICk7XG5cbiAgICAgIC8vIERyYXcgbGlua3MgYmV0d2VlbiBub2Rlc1xuICAgICAgY29uc3QgbGlua3MgPSBnXG4gICAgICAgIC5zZWxlY3RBbGwoJy5saW5rJylcbiAgICAgICAgLmRhdGEocm9vdC5saW5rcygpLmZpbHRlcigoZDogYW55KSA9PiBkLnNvdXJjZS5kYXRhLmlkICE9PSAncm9vdCcpKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKCdwYXRoJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC1saW5rJylcbiAgICAgICAgLmF0dHIoJ2QnLCAoZDogYW55KSA9PiB7XG4gICAgICAgICAgLy8gR2V0IHRoZSBsaW5rIHN0eWxlIGZyb20gb3B0aW9uc1xuICAgICAgICAgIGNvbnN0IGxpbmtTdHlsZSA9IG9wdGlvbnMubGlua1N0eWxlIHx8ICdjdXJ2ZWQnO1xuXG4gICAgICAgICAgLy8gU291cmNlIGFuZCB0YXJnZXQgY29vcmRpbmF0ZXMgYmFzZWQgb24gZGlyZWN0aW9uXG4gICAgICAgICAgY29uc3Qgc291cmNlWCA9IGlzSG9yaXpvbnRhbCA/IGQuc291cmNlLnkgOiBkLnNvdXJjZS54O1xuICAgICAgICAgIGNvbnN0IHNvdXJjZVkgPSBpc0hvcml6b250YWwgPyBkLnNvdXJjZS54IDogZC5zb3VyY2UueTtcbiAgICAgICAgICBjb25zdCB0YXJnZXRYID0gaXNIb3Jpem9udGFsID8gZC50YXJnZXQueSA6IGQudGFyZ2V0Lng7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0WSA9IGlzSG9yaXpvbnRhbCA/IGQudGFyZ2V0LnggOiBkLnRhcmdldC55O1xuXG4gICAgICAgICAgLy8gVmFyaWFibGVzIGZvciByb3VuZGVkIGNvcm5lcnNcbiAgICAgICAgICBsZXQgeERpc3RhbmNlLCB5RGlzdGFuY2UsIGNvcm5lclJhZGl1cywgbWlkWCwgbWlkWTtcblxuICAgICAgICAgIHN3aXRjaCAobGlua1N0eWxlKSB7XG4gICAgICAgICAgICBjYXNlICdzdHJhaWdodCc6XG4gICAgICAgICAgICAgIC8vIERpcmVjdCBzdHJhaWdodCBsaW5lXG4gICAgICAgICAgICAgIHJldHVybiBgTSR7c291cmNlWH0sJHtzb3VyY2VZfUwke3RhcmdldFh9LCR7dGFyZ2V0WX1gO1xuXG4gICAgICAgICAgICBjYXNlICdyb3VuZGVkJzpcbiAgICAgICAgICAgICAgLy8gQ3VydmVkIGxpbmUgd2l0aCByb3VuZGVkIGNvcm5lcnNcbiAgICAgICAgICAgICAgeERpc3RhbmNlID0gTWF0aC5hYnModGFyZ2V0WCAtIHNvdXJjZVgpO1xuICAgICAgICAgICAgICB5RGlzdGFuY2UgPSBNYXRoLmFicyh0YXJnZXRZIC0gc291cmNlWSk7XG4gICAgICAgICAgICAgIGNvcm5lclJhZGl1cyA9IE1hdGgubWluKHhEaXN0YW5jZSwgeURpc3RhbmNlKSAqIDAuMjsgLy8gUmVkdWNlZCByYWRpdXMgZm9yIGJldHRlciBhcHBlYXJhbmNlXG5cbiAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIC8vIEZvciBob3Jpem9udGFsIGxheW91dFxuICAgICAgICAgICAgICAgIGNvbnN0IGhhbGZEaXN0YW5jZSA9ICh0YXJnZXRYIC0gc291cmNlWCkgLyAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHhNaWQgPSBzb3VyY2VYICsgaGFsZkRpc3RhbmNlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICAgIE0ke3NvdXJjZVh9LCR7c291cmNlWX1cbiAgICAgICAgICAgICAgICAgIEgke3hNaWQgLSBjb3JuZXJSYWRpdXN9XG4gICAgICAgICAgICAgICAgICBRJHt4TWlkfSwke3NvdXJjZVl9ICR7eE1pZH0sJHtzb3VyY2VZICsgTWF0aC5zaWduKHRhcmdldFkgLSBzb3VyY2VZKSAqIGNvcm5lclJhZGl1c31cbiAgICAgICAgICAgICAgICAgIFYke3RhcmdldFkgLSBNYXRoLnNpZ24odGFyZ2V0WSAtIHNvdXJjZVkpICogY29ybmVyUmFkaXVzfVxuICAgICAgICAgICAgICAgICAgUSR7eE1pZH0sJHt0YXJnZXRZfSAke3hNaWQgKyBjb3JuZXJSYWRpdXN9LCR7dGFyZ2V0WX1cbiAgICAgICAgICAgICAgICAgIEgke3RhcmdldFh9XG4gICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgdmVydGljYWwgbGF5b3V0XG4gICAgICAgICAgICAgICAgY29uc3QgaGFsZkRpc3RhbmNlID0gKHRhcmdldFkgLSBzb3VyY2VZKSAvIDI7XG4gICAgICAgICAgICAgICAgY29uc3QgeU1pZCA9IHNvdXJjZVkgKyBoYWxmRGlzdGFuY2U7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICAgICAgTSR7c291cmNlWH0sJHtzb3VyY2VZfVxuICAgICAgICAgICAgICAgICAgViR7eU1pZCAtIGNvcm5lclJhZGl1c31cbiAgICAgICAgICAgICAgICAgIFEke3NvdXJjZVh9LCR7eU1pZH0gJHtzb3VyY2VYICsgTWF0aC5zaWduKHRhcmdldFggLSBzb3VyY2VYKSAqIGNvcm5lclJhZGl1c30sJHt5TWlkfVxuICAgICAgICAgICAgICAgICAgSCR7dGFyZ2V0WCAtIE1hdGguc2lnbih0YXJnZXRYIC0gc291cmNlWCkgKiBjb3JuZXJSYWRpdXN9XG4gICAgICAgICAgICAgICAgICBRJHt0YXJnZXRYfSwke3lNaWR9ICR7dGFyZ2V0WH0sJHt5TWlkICsgY29ybmVyUmFkaXVzfVxuICAgICAgICAgICAgICAgICAgViR7dGFyZ2V0WX1cbiAgICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ3N0ZXAnOlxuICAgICAgICAgICAgICAvLyBMLXNoYXBlZCBzdGVwcGVkIGxpbmVcbiAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBgTSR7c291cmNlWH0sJHtzb3VyY2VZfUgkeyhzb3VyY2VYICsgdGFyZ2V0WCkgLyAyfVYke3RhcmdldFl9SCR7dGFyZ2V0WH1gO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBgTSR7c291cmNlWH0sJHtzb3VyY2VZfVYkeyhzb3VyY2VZICsgdGFyZ2V0WSkgLyAyfUgke3RhcmdldFh9ViR7dGFyZ2V0WX1gO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ2N1cnZlZCc6XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAvLyBEZWZhdWx0IGN1cnZlZCBsaW5lIHVzaW5nIEQzJ3MgYnVpbHQtaW4gbGluayBnZW5lcmF0b3JcbiAgICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmQzXG4gICAgICAgICAgICAgICAgICAubGlua0hvcml6b250YWwoKVxuICAgICAgICAgICAgICAgICAgLngoKGQ6IGFueSkgPT4gZC55KVxuICAgICAgICAgICAgICAgICAgLnkoKGQ6IGFueSkgPT4gZC54KShkKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kM1xuICAgICAgICAgICAgICAgICAgLmxpbmtWZXJ0aWNhbCgpXG4gICAgICAgICAgICAgICAgICAueCgoZDogYW55KSA9PiBkLngpXG4gICAgICAgICAgICAgICAgICAueSgoZDogYW55KSA9PiBkLnkpKGQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuYXR0cignc3Ryb2tlJywgYHJnYih2YXIoLS1heC1jb21wLWhpZXJhcmNoeS1jaGFydC1saW5rLWNvbG9yKSlgKVxuICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgb3B0aW9ucy5saW5rV2lkdGgpXG4gICAgICAgIC5hdHRyKCdmaWxsJywgJ25vbmUnKVxuICAgICAgICAuYXR0cignb3BhY2l0eScsIDEpO1xuXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggdGVtcGxhdGUgdG8gdXNlIGZvciByZW5kZXJpbmcgbm9kZXNcbiAgICAgIGNvbnN0IHVzZUN1c3RvbVRlbXBsYXRlID0gdGhpcy5oYXNDdXN0b21UZW1wbGF0ZSgpO1xuICAgICAgY29uc3QgdGVtcGxhdGVUb1VzZSA9IHRoaXMubm9kZVRlbXBsYXRlKCkgfHwgdGhpcy5jdXN0b21Ob2RlVGVtcGxhdGUoKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgbWFwIHRvIHN0b3JlIG5vZGUgZWxlbWVudHMgZm9yIGZ1dHVyZSB1cGRhdGVzXG4gICAgICBjb25zdCBub2RlRWxlbWVudHNNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuXG4gICAgICAvLyBDcmVhdGUgbm9kZSBncm91cHNcbiAgICAgIGNvbnN0IG5vZGVHcm91cHMgPSBnXG4gICAgICAgIC5zZWxlY3RBbGwoJy5ub2RlLWdyb3VwJylcbiAgICAgICAgLmRhdGEocm9vdC5kZXNjZW5kYW50cygpLmZpbHRlcigoZDogYW55KSA9PiBkLmRhdGEuaWQgIT09ICdyb290JykpXG4gICAgICAgIC5lbnRlcigpXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vZGUtZ3JvdXAnKVxuICAgICAgICAuYXR0cignZGF0YS1ub2RlLWlkJywgKGQ6IGFueSkgPT4gZC5kYXRhLmlkKSAvLyBBZGQgYSBkYXRhIGF0dHJpYnV0ZSBmb3IgZWFzaWVyIHNlbGVjdGlvblxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgKGQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHggPSBpc0hvcml6b250YWwgPyBkLnkgOiBkLng7XG4gICAgICAgICAgY29uc3QgeSA9IGlzSG9yaXpvbnRhbCA/IGQueCA6IGQueTtcbiAgICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3h9LCR7eX0pYDtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoJ29wYWNpdHknLCAxKTsgLy8gRGlzcGxheSBub2RlcyBpbW1lZGlhdGVseSB3aXRoIGZ1bGwgb3BhY2l0eVxuXG4gICAgICAvLyBTdG9yZSBub2RlIGVsZW1lbnRzIGluIHRoZSBtYXBcbiAgICAgIG5vZGVHcm91cHMuZWFjaChmdW5jdGlvbiAodGhpczogU1ZHR0VsZW1lbnQsIGQ6IGFueSkge1xuICAgICAgICBub2RlRWxlbWVudHNNYXAuc2V0KGQuZGF0YS5pZCwgdGhpcyk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVXBkYXRlIHRoZSBub2RlIGVsZW1lbnRzIHNpZ25hbFxuICAgICAgdGhpcy5fbm9kZUVsZW1lbnRzLnNldChub2RlRWxlbWVudHNNYXApO1xuXG4gICAgICBpZiAodXNlQ3VzdG9tVGVtcGxhdGUgJiYgdGVtcGxhdGVUb1VzZSkge1xuICAgICAgICAvLyBSZW5kZXIgY3VzdG9tIG5vZGUgdGVtcGxhdGVzXG4gICAgICAgIG5vZGVHcm91cHMuZWFjaCgoZDogYW55LCBpOiBudW1iZXIsIG5vZGVzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBkLmRhdGE7XG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IG5vZGVzW2ldO1xuICAgICAgICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gISEobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApO1xuICAgICAgICAgIGNvbnN0IGlzRXhwYW5kZWQgPSBoYXNDaGlsZHJlbiAmJiB0aGlzLl9leHBhbmRlZE5vZGVzKCkuaGFzKG5vZGUuaWQpICYmIHRoaXMuX2V4cGFuZGVkTm9kZXMoKS5nZXQobm9kZS5pZCk7XG5cbiAgICAgICAgICAvLyBFbmhhbmNlIHRoZSBub2RlIHdpdGggZXhwYW5kZWQgc3RhdGUgYW5kIHRvZ2dsZSBmdW5jdGlvblxuICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSBpc0V4cGFuZGVkIHx8IGZhbHNlO1xuICAgICAgICAgIG5vZGUudG9nZ2xlRXhwYW5kZWQgPSAoKSA9PiB0aGlzLnRvZ2dsZU5vZGUobm9kZS5pZCk7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgYSBmb3JlaWduT2JqZWN0IGZvciB0aGUgdGVtcGxhdGVcbiAgICAgICAgICBjb25zdCBmb3JlaWduT2JqZWN0ID0gdGhpcy5kM1xuICAgICAgICAgICAgLnNlbGVjdChlbGVtZW50KVxuICAgICAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXG4gICAgICAgICAgICAuYXR0cigneCcsIC1ub2RlV2lkdGggLyAyKVxuICAgICAgICAgICAgLmF0dHIoJ3knLCAtbm9kZUhlaWdodCAvIDIpXG4gICAgICAgICAgICAuYXR0cignd2lkdGgnLCBub2RlV2lkdGgpXG4gICAgICAgICAgICAuYXR0cignaGVpZ2h0Jywgbm9kZUhlaWdodClcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtbm9kZS1jb250YWluZXInKVxuICAgICAgICAgICAgLm9uKCdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAvLyBEb24ndCBwcm9wYWdhdGUgdGhlIGV2ZW50IGlmIGl0J3MgY29taW5nIGZyb20gYW4gaW50ZXJhY3RpdmUgZWxlbWVudFxuICAgICAgICAgICAgICAvLyBsaWtlIGEgYnV0dG9uIGluc2lkZSB0aGUgdGVtcGxhdGVcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICBjb25zdCBpc0ludGVyYWN0aXZlID1cbiAgICAgICAgICAgICAgICB0YXJnZXQudGFnTmFtZSA9PT0gJ0JVVFRPTicgfHwgdGFyZ2V0LnRhZ05hbWUgPT09ICdBJyB8fCB0YXJnZXQuY2xvc2VzdCgnYnV0dG9uLCBhLCBbcm9sZT1cImJ1dHRvblwiXScpO1xuXG4gICAgICAgICAgICAgIGlmICghaXNJbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlTm9kZUNsaWNrKGV2ZW50LCBkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgYSBkaXYgdG8gaG9sZCB0aGUgdGVtcGxhdGVcbiAgICAgICAgICBjb25zdCBkaXYgPSBmb3JlaWduT2JqZWN0XG4gICAgICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC1ub2RlLWNvbnRlbnQnKVxuICAgICAgICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcbiAgICAgICAgICAgIC5zdHlsZSgnaGVpZ2h0JywgJzEwMCUnKTtcblxuICAgICAgICAgIC8vIFJlbmRlciB0aGUgdGVtcGxhdGUgaW50byB0aGUgZGl2XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIC8vIENyZWF0ZSBjb250ZXh0IHdpdGggZW5oYW5jZWQgbm9kZSBhcyB0aGUgaW1wbGljaXQgdmFsdWVcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQ6IEFYSGllcmFyY2h5Q2hhcnROb2RlQ29udGV4dCA9IHtcbiAgICAgICAgICAgICAgJGltcGxpY2l0OiBub2RlIGFzIEFYSGllcmFyY2h5Q2hhcnROb2RlICYgeyBleHBhbmRlZDogYm9vbGVhbjsgdG9nZ2xlRXhwYW5kZWQ6ICgpID0+IHZvaWQgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRlbXBsYXRlVG9Vc2UhLCBjb250ZXh0KTtcbiAgICAgICAgICAgIHZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICAvLyBBcHBlbmQgdGVtcGxhdGUgY29udGVudHMgdG8gdGhlIGRpdlxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSB2aWV3UmVmLnJvb3ROb2RlcztcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgICBkaXYubm9kZSgpLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbmRlciBlbmhhbmNlZCBkZWZhdWx0IG5vZGVzIChyZWN0YW5nbGVzIHdpdGggdGV4dCBhbmQgaWNvbnMpXG4gICAgICAgIG5vZGVHcm91cHMuZWFjaCgoZDogYW55LCBpOiBudW1iZXIsIG5vZGVzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5kMy5zZWxlY3Qobm9kZXNbaV0pO1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBkLmRhdGE7XG4gICAgICAgICAgY29uc3QgaGFzQ2hpbGRyZW4gPSAhIShub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgICAvLyBOb2RlIGJhY2tncm91bmQgcmVjdCB3aXRoIHJvdW5kZWQgY29ybmVyc1xuICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAgICAgICAgIC5hdHRyKCd4JywgLW5vZGVXaWR0aCAvIDIpXG4gICAgICAgICAgICAuYXR0cigneScsIC1ub2RlSGVpZ2h0IC8gMilcbiAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIG5vZGVXaWR0aClcbiAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBub2RlSGVpZ2h0KVxuICAgICAgICAgICAgLmF0dHIoJ3J4JywgNilcbiAgICAgICAgICAgIC5hdHRyKCdyeScsIDYpXG4gICAgICAgICAgICAuYXR0cignZmlsbCcsIG5vZGUuY29sb3IgfHwgYHJnYih2YXIoLS1heC1jb21wLWhpZXJhcmNoeS1jaGFydC1ub2RlLWNvbG9yKSlgKVxuICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZScsIGByZ2IodmFyKC0tYXgtY29tcC1oaWVyYXJjaHktY2hhcnQtbm9kZS1zdHJva2UtY29sb3IpKWApXG4gICAgICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgb3B0aW9ucy5ub2RlU3Ryb2tlV2lkdGgpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vZGUnKTtcblxuICAgICAgICAgIC8vIE1haW4gdGl0bGUvbmFtZVxuICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAgIC5hdHRyKCd5JywgLTEwKVxuICAgICAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vZGUtdGl0bGUnKVxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnd2hpdGUnKVxuICAgICAgICAgICAgLmF0dHIoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnKVxuICAgICAgICAgICAgLnRleHQobm9kZS5uYW1lIHx8IG5vZGUubGFiZWwgfHwgJycpO1xuXG4gICAgICAgICAgLy8gU3VidGl0bGUgaWYgcHJvdmlkZWRcbiAgICAgICAgICBpZiAobm9kZS5zdWJ0aXRsZSkge1xuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgICAgIC5hdHRyKCd5JywgMTApXG4gICAgICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vZGUtc3VidGl0bGUnKVxuICAgICAgICAgICAgICAuYXR0cignZmlsbCcsICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCknKVxuICAgICAgICAgICAgICAuYXR0cignZm9udC1zaXplJywgJzAuOGVtJylcbiAgICAgICAgICAgICAgLnRleHQobm9kZS5zdWJ0aXRsZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVHlwZSBsYWJlbCBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmIChub2RlLnR5cGUpIHtcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgICAuYXR0cigneScsIDI1KVxuICAgICAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC1ub2RlLXR5cGUnKVxuICAgICAgICAgICAgICAuYXR0cignZmlsbCcsICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknKVxuICAgICAgICAgICAgICAuYXR0cignZm9udC1zaXplJywgJzAuN2VtJylcbiAgICAgICAgICAgICAgLnRleHQobm9kZS50eXBlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBBZGQgZXhwYW5kL2NvbGxhcHNlIGluZGljYXRvciBpZiBub2RlIGhhcyBjaGlsZHJlblxuICAgICAgICAgIGlmIChoYXNDaGlsZHJlbiAmJiBvcHRpb25zLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICBjb25zdCBpc0V4cGFuZGVkID0gdGhpcy5fZXhwYW5kZWROb2RlcygpLmhhcyhub2RlLmlkKSAmJiB0aGlzLl9leHBhbmRlZE5vZGVzKCkuZ2V0KG5vZGUuaWQpO1xuXG4gICAgICAgICAgICAvLyBUb2dnbGUgYnV0dG9uIHdpdGggYmV0dGVyIHN0eWxpbmdcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXG4gICAgICAgICAgICAgIC5hdHRyKCdyJywgMTApXG4gICAgICAgICAgICAgIC5hdHRyKCdjeCcsIG5vZGVXaWR0aCAvIDIgLSAxMilcbiAgICAgICAgICAgICAgLmF0dHIoJ2N5JywgLW5vZGVIZWlnaHQgLyAyICsgMTIpXG4gICAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ3doaXRlJylcbiAgICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZScsIGByZ2IodmFyKC0tYXgtY29tcC1oaWVyYXJjaHktY2hhcnQtbm9kZS1zdHJva2UtY29sb3IpKWApXG4gICAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LXRvZ2dsZS1pbmRpY2F0b3InKVxuICAgICAgICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICdwb2ludGVyJylcbiAgICAgICAgICAgICAgLm9uKCdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTm9kZShub2RlLmlkKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFRvZ2dsZSBpY29uXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAgICAgLmF0dHIoJ3gnLCBub2RlV2lkdGggLyAyIC0gMTIpXG4gICAgICAgICAgICAgIC5hdHRyKCd5JywgLW5vZGVIZWlnaHQgLyAyICsgMTIpXG4gICAgICAgICAgICAgIC5hdHRyKCdkeScsICcwLjMyZW0nKVxuICAgICAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC10b2dnbGUtaWNvbicpXG4gICAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgbm9kZS5jb2xvciB8fCBgcmdiKHZhcigtLWF4LWNvbXAtaGllcmFyY2h5LWNoYXJ0LW5vZGUtY29sb3IpKWApXG4gICAgICAgICAgICAgIC5hdHRyKCdmb250LXdlaWdodCcsICdib2xkJylcbiAgICAgICAgICAgICAgLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpXG4gICAgICAgICAgICAgIC50ZXh0KGlzRXhwYW5kZWQgPyAn4oiSJyA6ICcrJylcbiAgICAgICAgICAgICAgLm9uKCdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTm9kZShub2RlLmlkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSWNvbiBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmIChub2RlLmljb24pIHtcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgICAuYXR0cigneCcsIC1ub2RlV2lkdGggLyAyICsgMTUpXG4gICAgICAgICAgICAgIC5hdHRyKCd5JywgMClcbiAgICAgICAgICAgICAgLmF0dHIoJ2R5JywgJzAuMzJlbScpXG4gICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtbm9kZS1pY29uJylcbiAgICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnd2hpdGUnKVxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCBub2RlLmljb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFkZCBjbGljayBoYW5kbGVyIHRvIHRoZSB3aG9sZSBub2RlXG4gICAgICAgICAgZ3JvdXAub24oJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU5vZGVDbGljayhldmVudCwgZCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdG9vbHRpcCBpZiBlbmFibGVkXG4gICAgICAgICAgaWYgKG9wdGlvbnMuc2hvd1Rvb2x0aXAgJiYgKG5vZGUudG9vbHRpcCB8fCBub2RlLmRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKCd0aXRsZScpLnRleHQobm9kZS50b29sdGlwIHx8IG5vZGUuZGVzY3JpcHRpb24gfHwgJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIG5vZGUgZXhwYW5zaW9uIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlTm9kZShub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGV4cGFuZGVkTm9kZXMgPSBuZXcgTWFwKHRoaXMuX2V4cGFuZGVkTm9kZXMoKSk7XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gZXhwYW5kZWROb2Rlcy5nZXQobm9kZUlkKTtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IGN1cnJlbnRTdGF0ZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAhY3VycmVudFN0YXRlO1xuXG4gICAgZXhwYW5kZWROb2Rlcy5zZXQobm9kZUlkLCBuZXdTdGF0ZSk7XG4gICAgdGhpcy5fZXhwYW5kZWROb2Rlcy5zZXQoZXhwYW5kZWROb2Rlcyk7XG5cbiAgICAvLyBFbWl0IHRvZ2dsZSBldmVudFxuICAgIHRoaXMuZmluZE5vZGVCeUlkKHRoaXMucHJvY2Vzc2VkRGF0YSgpLCBub2RlSWQpLnRoZW4oKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIGV4cGFuZGVkOiBuZXdTdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgdG9nZ2xlIGluZGljYXRvciBpbW1lZGlhdGVseSBmb3IgYmV0dGVyIFVYXG4gICAgdGhpcy51cGRhdGVUb2dnbGVJbmRpY2F0b3Iobm9kZUlkLCBuZXdTdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGp1c3QgdGhlIHRvZ2dsZSBpbmRpY2F0b3Igd2l0aG91dCByZWRyYXdpbmcgdGhlIGNoYXJ0XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVRvZ2dsZUluZGljYXRvcihub2RlSWQ6IHN0cmluZywgZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZDMgfHwgIXRoaXMuY2hhcnRDb250YWluZXIoKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jaGFydENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBzdmcgPSBjb250YWluZXIucXVlcnlTZWxlY3Rvcignc3ZnJyk7XG4gICAgICBpZiAoIXN2ZykgcmV0dXJuO1xuXG4gICAgICAvLyBGaW5kIGFuZCB1cGRhdGUgdGhlIHRvZ2dsZSBpbmRpY2F0b3IgZm9yIHRoZSBzcGVjaWZpYyBub2RlXG4gICAgICBjb25zdCBub2RlR3JvdXAgPSB0aGlzLmQzLnNlbGVjdChzdmcpLnNlbGVjdChgW2RhdGEtbm9kZS1pZD1cIiR7bm9kZUlkfVwiXWApO1xuICAgICAgaWYgKG5vZGVHcm91cC5lbXB0eSgpKSByZXR1cm47XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgdG9nZ2xlIGljb24gKGlmIGl0IGV4aXN0cylcbiAgICAgIGNvbnN0IHRvZ2dsZUljb24gPSBub2RlR3JvdXAuc2VsZWN0KCcuYXgtaGllcmFyY2h5LWNoYXJ0LXRvZ2dsZS1pY29uJyk7XG4gICAgICBpZiAoIXRvZ2dsZUljb24uZW1wdHkoKSkge1xuICAgICAgICB0b2dnbGVJY29uLnRleHQoZXhwYW5kZWQgPyAn4oiSJyA6ICcrJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBGb3JjZSBlZmZlY3QgdG8gcnVuIHRoYXQgd2lsbCB1cGRhdGUgdGhlIGNoYXJ0XG4gICAgLy8gVGhpcyBsZXZlcmFnZXMgQW5ndWxhcidzIHJlYWN0aXZpdHkgcmF0aGVyIHRoYW4gYSBkaXJlY3QgbWV0aG9kIGNhbGxcbiAgICAvLyB3aGljaCBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCBBbmd1bGFyJ3MgcmVhY3RpdmUgYXBwcm9hY2hcbiAgICBjb25zdCBleHBhbmRlZE5vZGVzID0gbmV3IE1hcCh0aGlzLl9leHBhbmRlZE5vZGVzKCkpO1xuICAgIHRoaXMuX2V4cGFuZGVkTm9kZXMuc2V0KGV4cGFuZGVkTm9kZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBub2RlIGJ5IElEXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZpbmROb2RlQnlJZChkYXRhOiBBWEhpZXJhcmNoeUNoYXJ0RGF0YSwgaWQ6IHN0cmluZyk6IFByb21pc2U8QVhIaWVyYXJjaHlDaGFydERhdGEgfCBudWxsPiB7XG4gICAgaWYgKGRhdGEuaWQgPT09IGlkKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBkYXRhLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gYXdhaXQgdGhpcy5maW5kTm9kZUJ5SWQoY2hpbGQsIGlkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG5vZGUgY2xpY2sgZXZlbnRzXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZU5vZGVDbGljayhldmVudDogTW91c2VFdmVudCwgZDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZSA9IGQuZGF0YTtcblxuICAgIC8vIEVtaXQgY2xpY2sgZXZlbnRcbiAgICB0aGlzLml0ZW1DbGljay5lbWl0KHtcbiAgICAgIGV2ZW50OiB7IG5hdGl2ZUV2ZW50OiBldmVudCwgc2VuZGVyOiB0aGlzIH0sXG4gICAgICBpdGVtOiBub2RlLFxuICAgICAgZWxlbWVudDogZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBleGlzdGluZyBjaGFydFxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhckNoYXJ0KCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY2hhcnRDb250YWluZXIoKT8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIFNWR1xuICAgIGNvbnN0IHN2ZyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdzdmcnKTtcbiAgICBpZiAoc3ZnKSB7XG4gICAgICBzdmcucmVtb3ZlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBEMyBlYXNpbmcgZnVuY3Rpb24gZnJvbSBzdHJpbmcgbmFtZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFYXNpbmdGdW5jdGlvbihlYXNpbmc/OiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICghZWFzaW5nKSByZXR1cm4gdGhpcy5kMy5lYXNlQ3ViaWNJbk91dDtcblxuICAgIHN3aXRjaCAoZWFzaW5nKSB7XG4gICAgICBjYXNlICdsaW5lYXInOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlTGluZWFyO1xuICAgICAgY2FzZSAnZWFzZSc6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VQb2x5SW5PdXQ7XG4gICAgICBjYXNlICdlYXNlLWluJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZVBvbHlJbjtcbiAgICAgIGNhc2UgJ2Vhc2Utb3V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZVBvbHlPdXQ7XG4gICAgICBjYXNlICdlYXNlLWluLW91dCc6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VQb2x5SW5PdXQ7XG4gICAgICBjYXNlICdjdWJpYyc6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VDdWJpYztcbiAgICAgIGNhc2UgJ2N1YmljLWluJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUN1YmljSW47XG4gICAgICBjYXNlICdjdWJpYy1vdXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlQ3ViaWNPdXQ7XG4gICAgICBjYXNlICdjdWJpYy1pbi1vdXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlQ3ViaWNJbk91dDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VDdWJpY0luT3V0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBhIG1lc3NhZ2Ugd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBzaG93Tm9EYXRhTWVzc2FnZShjb250YWluZXJFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIC8vIENsZWFyIGV4aXN0aW5nIGNvbnRlbnRzIGZpcnN0XG4gICAgdGhpcy5kMy5zZWxlY3QoY29udGFpbmVyRWxlbWVudCkuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7XG5cbiAgICBjb25zdCBtZXNzYWdlQ29udGFpbmVyID0gdGhpcy5kM1xuICAgICAgLnNlbGVjdChjb250YWluZXJFbGVtZW50KVxuICAgICAgLmFwcGVuZCgnZGl2JylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtbm8tZGF0YS1tZXNzYWdlJylcbiAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxuICAgICAgLnN0eWxlKCdsZWZ0JywgJzUwJScpXG4gICAgICAuc3R5bGUoJ3RvcCcsICc1MCUnKVxuICAgICAgLnN0eWxlKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKC01MCUsIC01MCUpJylcbiAgICAgIC5zdHlsZSgndGV4dC1hbGlnbicsICdjZW50ZXInKVxuICAgICAgLnN0eWxlKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ3JnYih2YXIoLS1heC1jb21wLWhpZXJhcmNoeS1jaGFydC1iZy1jb2xvcikpJylcbiAgICAgIC5zdHlsZSgncGFkZGluZycsICcxLjVyZW0nKVxuICAgICAgLnN0eWxlKCdib3JkZXItcmFkaXVzJywgJzAuNXJlbScpXG4gICAgICAuc3R5bGUoJ2JveC1zaGFkb3cnLCAnMCAycHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMDgpJylcbiAgICAgIC5zdHlsZSgnd2lkdGgnLCAnODAlJylcbiAgICAgIC5zdHlsZSgnbWF4LXdpZHRoJywgJzMwMHB4Jyk7XG5cbiAgICAvLyBBZGQgYW4gaWNvblxuICAgIG1lc3NhZ2VDb250YWluZXJcbiAgICAgIC5hcHBlbmQoJ2RpdicpXG4gICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vLWRhdGEtaWNvbicpXG4gICAgICAuc3R5bGUoJ29wYWNpdHknLCAnMC42JylcbiAgICAgIC5zdHlsZSgnbWFyZ2luLWJvdHRvbScsICcwLjc1cmVtJylcbiAgICAgIC5odG1sKCc8aSBjbGFzcz1cImZhLWxpZ2h0IGZhLXNpdGVtYXAgZmEtMnhcIj48L2k+Jyk7XG5cbiAgICAvLyBBZGQgdGV4dCBtZXNzYWdlXG4gICAgbWVzc2FnZUNvbnRhaW5lclxuICAgICAgLmFwcGVuZCgnZGl2JylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtbm8tZGF0YS10ZXh0JylcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzFyZW0nKVxuICAgICAgLnN0eWxlKCdmb250LXdlaWdodCcsICc2MDAnKVxuICAgICAgLnN0eWxlKCdtYXJnaW4tYm90dG9tJywgJzAuNXJlbScpXG4gICAgICAudGV4dCgnTm8gZGF0YSBhdmFpbGFibGUnKTtcblxuICAgIC8vIEFkZCBoZWxwIHRleHRcbiAgICBtZXNzYWdlQ29udGFpbmVyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC1uby1kYXRhLWhlbHAnKVxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMC44cmVtJylcbiAgICAgIC5zdHlsZSgnb3BhY2l0eScsICcwLjYnKVxuICAgICAgLnRleHQoJ1BsZWFzZSBwcm92aWRlIGRhdGEgdG8gZGlzcGxheSB0aGUgY2hhcnQnKTtcbiAgfVxufVxuIiwiPGRpdiBheFBhblZpZXcgY2xhc3M9XCJheC1oaWVyYXJjaHktY2hhcnRcIiAjY2hhcnRDb250YWluZXI+PC9kaXY+XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNoYXJ0cy1oaWVyYXJjaHktY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvaGllcmFyY2h5LWNoYXJ0L3NyYy9hY29yZXgtY2hhcnRzLWhpZXJhcmNoeS1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|