@rfprodz/client-d3-charts 1.3.0 → 1.3.2

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":"rfprodz-client-d3-charts.mjs","sources":["../../../../libs/client-d3-charts/src/lib/util/configuration.util.ts","../../../../libs/client-d3-charts/src/lib/util/bar-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/force-directed-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/line-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/pie-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/radar-chart.util.ts","../../../../libs/client-d3-charts/src/lib/providers/d3-chart-factory.provider.ts","../../../../libs/client-d3-charts/src/lib/components/bar-chart/bar-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/bar-chart/bar-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/pie-chart/pie-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/pie-chart/pie-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/radar-chart/radar-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/radar-chart/radar-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/force-directed-chart/force-directed-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/force-directed-chart/force-directed-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/line-chart/line-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/line-chart/line-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/chart-examples/chart-examples.component.ts","../../../../libs/client-d3-charts/src/lib/components/chart-examples/chart-examples.component.html","../../../../libs/client-d3-charts/src/lib/d3-charts.module.ts","../../../../libs/client-d3-charts/src/rfprodz-client-d3-charts.ts"],"sourcesContent":["/**\n * Generates a configuration object based on a defaut configuration and an options object.\n * @param config the default object with all properties\n * @param options the input object\n * @param result the output object\n */\nexport const generateConfiguration = <T>(\n config: T,\n options: Partial<T & Record<string, unknown>> | undefined,\n result: Record<string, unknown>,\n) => {\n const defaultConfiguration = <Record<string, unknown>>config;\n\n if (typeof options === 'undefined') {\n return config;\n }\n const keys = Object.keys(defaultConfiguration);\n for (const key of keys) {\n const defaultValue = defaultConfiguration[key];\n const value = options[key];\n const typedKey: keyof typeof defaultConfiguration = key;\n if (typeof defaultValue === 'string' || typeof defaultValue === 'number' || typeof defaultValue === 'boolean') {\n result[typedKey] = typeof value !== 'undefined' ? value : defaultValue;\n } else if (defaultValue instanceof Function) {\n result[typedKey] = defaultValue;\n } else if (typeof defaultValue === 'object' && defaultValue !== null) {\n const nestedDefaultObject = <Record<string, unknown>>defaultValue;\n const nestedObject = <Record<string, unknown>>value;\n result[typedKey] = generateConfiguration(nestedDefaultObject, nestedObject, {});\n }\n }\n return <T>result;\n};\n","import { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { IBarChartDataNode, IBarChartOptions, TBarChartData } from '../interfaces/bar-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The bar chart default configuration.\n */\nexport const defaultBarChartConfig: IBarChartOptions = Object.freeze(<IBarChartOptions>{\n chartTitle: '',\n width: 350,\n height: 350,\n margin: {\n top: 70,\n right: 50,\n bottom: 50,\n left: 50,\n },\n transitionDuration: 400,\n xAxisPadding: 0.4,\n xAxisTitle: '',\n yAxisTitle: '',\n yAxisTicks: 10,\n displayAxisLabels: true,\n labelTextWrapWidth: 60, // the number of pixels after which a label needs to be given a new line\n color: d3.scaleOrdinal(d3.schemeCategory10),\n});\n\n/**\n * Creates a container for the bar chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IBarChartOptions) => {\n const id = container.nativeElement.id ?? 'bar-0';\n\n d3.select(`#${id}`).select('svg').remove();\n const svg = d3\n .select(`#${id}`)\n .append('svg')\n .attr('width', config.width + config.margin.left + config.margin.right)\n .attr('height', config.height + config.margin.top + config.margin.bottom)\n .attr('class', id);\n const g = svg.append('g').attr('transform', `translate(${config.margin.left},${config.margin.top / 2})`);\n\n return { svg, g };\n};\n\n/**\n * Wraps the bar chart axis labels text.\n * @param svgText the svg text elements\n * @param width the chart axis label width\n */\nconst wrapSvgText = (svgText: d3.Selection<d3.BaseType, unknown, SVGGElement, unknown>, width: number) => {\n svgText.each(function (this: d3.BaseType) {\n const text = d3.select<d3.BaseType, string>(this);\n const words = text.text().split(/\\s+/).reverse();\n if (words.length > 1) {\n let line: string[] = [];\n let lineNumber = 0;\n const lineHeight = 1.4;\n const y = text.attr('y');\n const x = text.attr('x');\n const dy = parseFloat(text.attr('dy') ?? 0);\n let tspan = text.text(null).append('tspan').attr('x', x).attr('y', y).attr('dy', `${dy}em`); // axis label\n\n let word = words.pop();\n\n while (typeof word !== 'undefined') {\n line.push(word ?? '');\n tspan.text(line.join(' '));\n if ((tspan.node()?.getComputedTextLength() ?? 0) > width) {\n line.pop();\n tspan.text(line.join(' '));\n line = [word ?? ''];\n lineNumber += 1;\n tspan = text\n .append('tspan')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', `${lineNumber * lineHeight + dy}em`)\n .text(word ?? '');\n }\n word = words.pop();\n }\n }\n });\n};\n\n/**\n * Creates the legend.\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst createLegend = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, config: IBarChartOptions) => {\n if (config.displayAxisLabels && config.xAxisTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '1em')\n .text(`x - ${config.xAxisTitle}`);\n }\n\n if (config.displayAxisLabels && config.yAxisTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '2.5em')\n .text(`y - ${config.yAxisTitle}`);\n }\n\n if (config.chartTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, 0)`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '-2em')\n .text(config.chartTitle);\n }\n};\n\n/**\n * Creates the x axis.\n * @param g the svg g element\n * @param x the x axis scale\n * @param config the chart configuration\n */\nconst createAxisX = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, x: d3.ScaleBand<string>, config: IBarChartOptions) => {\n const xLabels = g.append('g').attr('transform', `translate(0, ${config.height})`).call(d3.axisBottom(x)).append('text');\n\n g.selectAll('text').call(wrapSvgText, config.labelTextWrapWidth);\n\n if (config.displayAxisLabels) {\n xLabels.attr('transform', `translate(${config.width}, 0)`).attr('class', 'legend').attr('dx', '1.5em').attr('dy', '0.7em').text('x');\n }\n};\n\n/**\n * Creates the y axis.\n * @param g the svg g element\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst createAxisY = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n y: d3.ScaleLinear<number, number>,\n config: IBarChartOptions,\n) => {\n const yLabels = g\n .append('g')\n .call(\n d3\n .axisLeft(y)\n .tickFormat(function (d) {\n return `${d}`;\n })\n .ticks(config.yAxisTicks),\n )\n .append('text');\n\n if (config.displayAxisLabels) {\n yLabels.attr('dy', '-1.5em').attr('class', 'legend').text('y');\n }\n};\n\n/**\n * The mouse over event handler.\n * @param self an svg rect element\n * @param d the chart data node\n * @param g the svg g element\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst onMouseOver = (\n self: SVGRectElement,\n d: IBarChartDataNode,\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n x: d3.ScaleBand<string>,\n y: d3.ScaleLinear<number, number>,\n config: IBarChartOptions,\n) => {\n const widthModifier = 5;\n d3.select(self)\n .transition()\n .duration(config.transitionDuration)\n .attr('width', x.bandwidth() + widthModifier)\n .attr('y', function () {\n const modifier = 10;\n return y(d.value) - modifier;\n })\n .attr('height', function () {\n const modifier = 10;\n return config.height - y(d.value) + modifier;\n });\n\n g.append('text')\n .attr('class', 'chart-tooltip')\n .style('font-size', '11px')\n .attr('x', () => x(d.title) ?? '')\n .attr('y', function () {\n const modifier = 15;\n return y(d.value) - modifier;\n })\n .text(() => d.value);\n};\n\n/**\n * The mouse out event handler.\n * @param self an svg rect element\n * @param d the chart data node\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst onMouseOut = (\n self: SVGRectElement,\n d: IBarChartDataNode,\n x: d3.ScaleBand<string>,\n y: d3.ScaleLinear<number, number>,\n config: IBarChartOptions,\n) => {\n d3.select(self).attr('class', 'bar');\n d3.select(self)\n .transition()\n .duration(config.transitionDuration)\n .attr('width', x.bandwidth())\n .attr('y', () => y(d.value) ?? 0)\n .attr('height', () => config.height - (y(d.value) ?? 0));\n\n d3.selectAll('.chart-tooltip').remove();\n};\n\n/**\n * Draws the chart bars, and sets the mouse pointer events.\n * @param g the svg g element\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n * @param data the chart data\n */\nconst drawBarsAndSetPointerEvents = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n x: d3.ScaleBand<string>,\n y: d3.ScaleLinear<number, number>,\n config: IBarChartOptions,\n data: TBarChartData,\n) => {\n const duration = 400;\n g.selectAll('.bar')\n .data(data)\n .enter()\n .append('rect')\n .attr('class', 'bar')\n .style('fill', (d, i) => config.color(i.toString()))\n .on('mouseover', function (this, event, d) {\n return onMouseOver(this, d, g, x, y, config);\n })\n .on('mouseout', function (this, event, d) {\n return onMouseOut(this, d, x, y, config);\n })\n .attr('x', d => x(d.title) ?? '')\n .attr('y', d => y(d.value))\n .attr('width', x.bandwidth())\n .transition()\n .ease(d3.easeLinear)\n .duration(duration)\n .delay(function (d, i) {\n const multiplier = 50;\n return i * multiplier;\n })\n .attr('height', d => config.height - y(d.value));\n};\n\n/**\n * Draws the bar chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawBarChart = (container: ElementRef<HTMLDivElement>, data: TBarChartData, options?: Partial<IBarChartOptions>) => {\n const config: IBarChartOptions = generateConfiguration<IBarChartOptions>(defaultBarChartConfig, options, {});\n\n const { g } = createContainer(container, config);\n\n const x = d3\n .scaleBand([0, config.width])\n .padding(config.xAxisPadding)\n .domain(data.map(d => d.title));\n const y = d3.scaleLinear([config.height, 0]).domain([0, d3.max(data, d => d.value) ?? 1]);\n\n createAxisX(g, x, config);\n\n createAxisY(g, y, config);\n\n createLegend(g, config);\n\n drawBarsAndSetPointerEvents(g, x, y, config, data);\n\n return config;\n};\n","import { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport {\n IForceDirectedChartData,\n IForceDirectedChartDataNode,\n IForceDirectedChartOptions,\n} from '../interfaces/force-directed-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The force directed chart default configuration.\n */\nexport const defaultForceDirectedChartConfig: IForceDirectedChartOptions = Object.freeze({\n chartTitle: '',\n width: 600,\n height: 600,\n centerCalcMod: 1.6,\n charge: {\n strength: -10,\n theta: 0.6,\n distanceMax: 2000,\n },\n distance: 75,\n fontSize: 10,\n collisionRadius: 30,\n margin: {\n top: 20,\n right: 20,\n bottom: 20,\n left: 20,\n },\n strokeWidth: 1.5,\n labelTextWrapWidth: 60,\n color: d3.scaleOrdinal(d3.schemeCategory10),\n});\n\n/**\n * The force durected chart tick handler.\n * @param link chart links\n * @param node chart nodes\n * @param text chart text\n * @returns rotation angle\n */\nconst ticked = (\n link?: d3.Selection<SVGLineElement, d3.SimulationLinkDatum<IForceDirectedChartDataNode>, SVGSVGElement, unknown>,\n node?: d3.Selection<SVGCircleElement, IForceDirectedChartDataNode, SVGSVGElement, unknown>,\n text?: d3.Selection<SVGTextElement, IForceDirectedChartDataNode, SVGGElement, unknown>,\n) => {\n if (typeof link !== 'undefined') {\n link\n .attr('x1', d => (d.source as { x: number; y: number }).x ?? 0)\n .attr('y1', d => (d.source as { x: number; y: number }).y ?? 0)\n .attr('x2', d => (d.target as { x: number; y: number }).x ?? 0)\n .attr('y2', d => (d.target as { x: number; y: number }).y ?? 0);\n }\n\n if (typeof node !== 'undefined') {\n node.attr('cx', d => d.x ?? 0).attr('cy', d => d.y ?? 0);\n }\n\n if (typeof text !== 'undefined') {\n const dx = 10;\n const dy = 5;\n text.attr('x', d => (d.x ?? 0) + dx).attr('y', d => (d.y ?? 0) - dy);\n }\n\n return 'rotate(0)';\n};\n\n/**\n * Creates a container for the force directed chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IForceDirectedChartOptions) => {\n const id = container.nativeElement.id ?? 'force-directed-0';\n\n d3.select(`#${id}`).select('svg').remove();\n const svg = d3\n .select(`#${id}`)\n .append('svg')\n .attr('width', config.width + config.margin.left + config.margin.right)\n .attr('height', config.height + config.margin.top + config.margin.bottom)\n .attr('class', id);\n const g = svg\n .append('g')\n .attr('transform', `translate(${config.width / 2 + config.margin.left},${config.height / 2 + config.margin.top})`);\n\n return { svg, g };\n};\n\n/**\n * Applies the force directed chart data.\n * @param g the svg g element\n * @param data the chart data\n */\nconst applyChartData = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, data: IForceDirectedChartData) => {\n const imageXY = 10;\n g.append('defs')\n .selectAll('pattern')\n .data(data.entities)\n .enter()\n .append('pattern')\n .attr('id', (val, i) => `img-${val.index}`)\n .attr('x', 0)\n .attr('y', 0)\n .attr('height', val => {\n const baseValue = 30;\n return baseValue + val.linksCount * 2;\n })\n .attr('width', val => {\n const baseValue = 30;\n return baseValue + val.linksCount * 2;\n })\n .append('image')\n .attr('x', imageXY)\n .attr('y', imageXY)\n .attr('height', val => {\n const baseValue = 30;\n return baseValue + val.linksCount * 2;\n })\n .attr('width', val => {\n const baseValue = 30;\n return baseValue + val.linksCount * 2;\n })\n .attr('xlink:href', val => val.img);\n};\n\n/**\n * Creates the force directed chart links.\n * @param svg the svg element\n * @param config the chart configuration\n * @param data the chart data\n * @returns the chart links\n */\nconst createLinks = (\n svg: d3.Selection<SVGSVGElement, unknown, HTMLElement, unknown>,\n config: IForceDirectedChartOptions,\n data: IForceDirectedChartData,\n) => {\n return svg\n .selectAll('.link')\n .data(data.links)\n .enter()\n .append('line')\n .attr('class', 'link')\n .style('stroke', '#000000')\n .style('stroke-width', config.strokeWidth);\n};\n\n/**\n * Creates the force directed chart forces.\n * @param config the chart configuration\n * @param data the chart data\n * @returns the chart forces\n */\nconst createForces = (config: IForceDirectedChartOptions, data: IForceDirectedChartData) => {\n return d3\n .forceSimulation(data.nodes)\n .force(\n 'link',\n d3.forceLink().id(d => d.index ?? 0),\n )\n .force('charge', d3.forceManyBody().strength(config.charge.strength).theta(config.charge.theta).distanceMax(config.charge.distanceMax))\n .force('center', d3.forceCenter(config.width / config.centerCalcMod, config.height / config.centerCalcMod))\n .force(\n 'collision',\n d3.forceCollide().radius(d => config.collisionRadius),\n )\n .force(\n 'link',\n d3\n .forceLink(data.links)\n .id(d => d.index ?? 0)\n .distance(config.distance)\n .links(data.links),\n );\n};\n\n/**\n * The force directed chart node drag start handler.\n * @param event a drag event\n * @param datum the chart data\n * @param force the chart forces\n */\nconst nodeDragStartHandler = (\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n force: d3.Simulation<IForceDirectedChartDataNode, undefined>,\n) => {\n if (!event.active && typeof force !== 'undefined') {\n const alphaTarget = 0.3;\n force.alphaTarget(alphaTarget).restart();\n }\n datum.fx = event.x;\n datum.fy = event.y;\n};\n\n/**\n * The force directed chart node drag handler.\n * @param event a drag event\n * @param datum the chart data\n * @param config the chart configuration\n */\nconst nodeDragHandler = (\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n config: IForceDirectedChartOptions,\n) => {\n datum.fx = event.x > config.margin.left && event.x < config.width + config.margin.right ? event.x : datum.fx;\n datum.fy = event.y > config.margin.top && event.y < config.width + config.margin.bottom ? event.y : datum.fy;\n};\n\n/**\n * The force directed chart node drag end handler.\n * @param event a drag event\n * @param datum the chart data\n * @param force the chart forces\n */\nconst nodeDragEndHandler = (\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n force: d3.Simulation<IForceDirectedChartDataNode, undefined>,\n) => {\n if (!event.active && typeof force !== 'undefined') {\n force.alphaTarget(0);\n }\n datum.fx = null;\n datum.fy = null;\n};\n\n/**\n * Creates the force directed chart nodes.\n * @param svg the svg element\n * @param data the chart data\n * @param force the chart forces\n * @param config the chart configuration\n * @returns the chart nodes\n */\nconst createNodes = (\n svg: d3.Selection<SVGSVGElement, unknown, HTMLElement, unknown>,\n data: IForceDirectedChartData,\n force: d3.Simulation<IForceDirectedChartDataNode, undefined>,\n config: IForceDirectedChartOptions,\n) => {\n return svg\n .selectAll('.node')\n .data(data.nodes)\n .enter()\n .append('circle')\n .attr('class', 'node')\n .attr('r', val => {\n const base = 5;\n return base + (val.value ?? 0) + (val.linksCount ?? 0) * 2;\n })\n .style('stroke-width', val => {\n const base = 5;\n return base + (val.value ?? 0) + (val.linksCount ?? 0) * 2;\n })\n .style('fill', val => (typeof val.img === 'undefined' || val.img === '' ? '#f00000' : `url(${val.img})`))\n .call(\n d3\n .drag<SVGCircleElement, IForceDirectedChartDataNode>()\n .on(\n 'start',\n function (\n this: SVGCircleElement,\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n ) {\n nodeDragStartHandler(event, datum, force);\n },\n )\n .on(\n 'drag',\n function (\n this: SVGCircleElement,\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n ) {\n nodeDragHandler(event, datum, config);\n },\n )\n .on(\n 'end',\n function (\n this: SVGCircleElement,\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n ) {\n nodeDragEndHandler(event, datum, force);\n },\n ),\n );\n};\n\n/**\n * Creates the force directed chart text labels.\n * @param svg the svg element\n * @param data the chart data\n * @returns the chart text labels\n */\nconst createText = (svg: d3.Selection<SVGSVGElement, unknown, HTMLElement, unknown>, data: IForceDirectedChartData) => {\n return svg\n .append('g')\n .selectAll('text')\n .data(data.nodes)\n .enter()\n .append('text')\n .attr('class', 'legend')\n .text(val => val.name ?? `N/A (id. ${val.index})`);\n};\n\n/**\n * Draws the force directed chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawForceDirectedChart = (\n container: ElementRef<HTMLDivElement>,\n data: IForceDirectedChartData,\n options?: Partial<IForceDirectedChartOptions>,\n) => {\n const config: IForceDirectedChartOptions = generateConfiguration<IForceDirectedChartOptions>(\n defaultForceDirectedChartConfig,\n options,\n {},\n );\n\n const { svg, g } = createContainer(container, config);\n\n applyChartData(g, data);\n\n const link = createLinks(svg, config, data);\n\n const force = createForces(config, data);\n\n const node = createNodes(svg, data, force, config);\n\n const text = createText(svg, data);\n\n force.on('tick', () => {\n ticked(link, node, text);\n });\n\n return config;\n};\n","import { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { ILineChartDataNode, ILineChartOptions, TLineChartData } from '../interfaces/line-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The line chart default configuration.\n */\nexport const defaultLineChartConfig: ILineChartOptions = Object.freeze(<ILineChartOptions>{\n chartTitle: '',\n width: 350,\n height: 350,\n margin: {\n top: 70,\n right: 50,\n bottom: 50,\n left: 50,\n },\n transitionDuration: 400,\n dotRadius: 3.5,\n xAxisTitle: '',\n yAxisTitle: '',\n ticks: {\n x: 5,\n y: 10,\n },\n displayAxisLabels: true,\n dateFormat: 'default',\n labelTextWrapWidth: 20, // the number of pixels after which a label needs to be given a new line\n color: d3.scaleOrdinal(d3.schemeCategory10),\n});\n\n/**\n * Creates a container for the line chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: ILineChartOptions) => {\n const id = container.nativeElement.id ?? 'line-0';\n\n d3.select(`#${id}`).select('svg').remove();\n const svg = d3\n .select(`#${id}`)\n .append('svg')\n .attr('width', config.width + config.margin.left + config.margin.right)\n .attr('height', config.height + config.margin.top + config.margin.bottom)\n .attr('class', id);\n const g = svg.append('g').attr('transform', `translate(${config.margin.left},${config.margin.top / 2})`);\n\n return { svg, g };\n};\n\n/**\n * Wraps the line chart axis labels text.\n * @param svgText the svg text elements\n * @param width the chart axis label width\n */\nconst wrapSvgText = (svgText: d3.Selection<d3.BaseType, unknown, SVGGElement, unknown>, width: number) => {\n svgText.each(function (this: d3.BaseType) {\n const text = d3.select<d3.BaseType, string>(this);\n const words = text.text().split(/\\s+/).reverse();\n if (words.length > 1) {\n let line: string[] = [];\n let lineNumber = 0;\n const lineHeight = 1.4;\n const y = text.attr('y');\n const x = text.attr('x');\n const dy = parseFloat(text.attr('dy') ?? 0);\n let tspan = text.text(null).append('tspan').attr('x', x).attr('y', y).attr('dy', `${dy}em`); // axis label\n\n let word = words.pop();\n\n while (typeof word !== 'undefined') {\n line.push(word ?? '');\n tspan.text(line.join(' '));\n if ((tspan.node()?.getComputedTextLength() ?? 0) > width) {\n line.pop();\n tspan.text(line.join(' '));\n line = [word ?? ''];\n lineNumber += 1;\n tspan = text\n .append('tspan')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', `${lineNumber * lineHeight + dy}em`)\n .text(word ?? '');\n }\n word = words.pop();\n }\n }\n });\n};\n\n/**\n * Creates the legend.\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst createLegend = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, config: ILineChartOptions) => {\n if (config.displayAxisLabels && config.xAxisTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '1em')\n .text(`x - ${config.xAxisTitle}`);\n }\n\n if (config.displayAxisLabels && config.yAxisTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '2.5em')\n .text(`y - ${config.yAxisTitle}`);\n }\n\n if (config.chartTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, 0)`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '-2em')\n .text(config.chartTitle);\n }\n};\n\n/**\n * Creates the x axis.\n * @param g the svg g element\n * @param x the x axis scale\n * @param config the chart configuration\n */\nconst createAxisX = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n x: d3.ScaleTime<number, number>,\n config: ILineChartOptions,\n) => {\n const xLabels = g\n .append('g')\n .attr('transform', `translate(0, ${config.height})`)\n .call(\n d3\n .axisBottom(x)\n .ticks(config.ticks.x)\n .tickFormat(d => {\n const date = new Date(d.valueOf());\n const formattingOffset = 10;\n const day = date.getDate();\n const dd = day < formattingOffset ? `0${day}` : day;\n const month = date.getMonth() + 1;\n const mm = month < formattingOffset ? `0${month}` : month;\n const year = date.getFullYear().toString();\n const yy = year.slice(2);\n const hours = date.getHours();\n const hour = hours < formattingOffset ? `0${hours}` : hours;\n const minutes = date.getMinutes();\n const minute = minutes < formattingOffset ? `0${minutes}` : minutes;\n let formattedDate = `${dd}/${mm}/${yy} ${hour}:${minute}`;\n switch (config.dateFormat) {\n case 'dd/mm/yyyy':\n formattedDate = `${dd}/${mm}/${year}`;\n break;\n case 'dd/mm/yy':\n formattedDate = `${dd}/${mm}/${yy}`;\n break;\n case 'mm/yyyy':\n formattedDate = `${mm}/${year}`;\n break;\n case 'yyyy':\n formattedDate = `${year}`;\n break;\n default:\n break;\n }\n return formattedDate;\n }),\n )\n .append('text');\n\n g.selectAll('text').call(wrapSvgText, config.labelTextWrapWidth);\n\n if (config.displayAxisLabels) {\n xLabels.attr('transform', `translate(${config.width}, 0)`).attr('class', 'legend').attr('dx', '1.5em').attr('dy', '0.7em').text('x');\n }\n};\n\n/**\n * Creates the y axis.\n * @param g the svg g element\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst createAxisY = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n y: d3.ScaleLinear<number, number>,\n config: ILineChartOptions,\n) => {\n const yLabels = g\n .append('g')\n .call(\n d3\n .axisLeft(y)\n .ticks(config.ticks.y)\n .tickFormat(d => `${d}`),\n )\n .append('text');\n\n if (config.displayAxisLabels) {\n yLabels.attr('class', 'legend').attr('dy', '-1.5em').attr('class', 'legend').text('y');\n }\n};\n\n/**\n * The mouse over event handler.\n * @param self an svg circle element\n * @param d the chart data node\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst onMouseOver = (\n self: SVGCircleElement,\n d: ILineChartDataNode,\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n config: ILineChartOptions,\n) => {\n const duration = 400;\n d3.select(self)\n .transition()\n .duration(duration)\n .attr('r', config.dotRadius * 2);\n\n const tooltipShift = 4;\n const tooltipDy = -10;\n g.append('text')\n .attr('class', 'chart-tooltip')\n .style('font-size', '11px')\n .attr('dx', () => (config.width - config.margin.left - config.margin.right) / tooltipShift)\n .attr('dy', () => tooltipDy)\n .text(() => `${d.value} (${new Date(d.timestamp).toUTCString()})`);\n};\n\n/**\n * The mouse out event handler.\n * @param self an svg circle element\n * @param config the chart configuration\n */\nconst onMouseOut = (self: SVGCircleElement, config: ILineChartOptions) => {\n const duration = 400;\n d3.select(self).attr('class', 'dot');\n d3.select(self).transition().duration(duration).attr('r', config.dotRadius);\n\n d3.selectAll('.chart-tooltip').remove();\n};\n\n/**\n * Draws the chart lines, dots, and sets the mouse pointer events.\n * @param g the svg g element\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n * @param data the chart data\n */\nconst drawLinesDotsAndSetPointerEvents = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n x: d3.ScaleTime<number, number>,\n y: d3.ScaleLinear<number, number>,\n config: ILineChartOptions,\n data: TLineChartData[],\n) => {\n const line = d3\n .line<ILineChartDataNode>()\n .x(d => x(d.timestamp))\n .y(d => y(d.value))\n .curve(d3.curveMonotoneX);\n\n const flatData = data.flat();\n\n for (let c = 0, maxC = data.length; c < maxC; c += 1) {\n const chunk = data[c];\n\n g.append('path')\n .attr('id', `line-${c}`)\n .style('fill', 'none')\n .style('stroke', config.color(c.toString()))\n .style('stroke-width', '2px')\n .attr('d', line(chunk));\n }\n\n g.selectAll('.dot')\n .data(flatData)\n .enter()\n .append('circle')\n .attr('class', 'dot')\n .style('pointer-events', 'all')\n .style('fill', (d, i) => config.color(i.toString()))\n .on('mouseover', function (this, event, d) {\n return onMouseOver(this, d, g, config);\n })\n .on('mouseout', function (this) {\n return onMouseOut(this, config);\n })\n .attr('cx', function (this, d) {\n return x(d.timestamp);\n })\n .attr('cy', function (this, d) {\n return y(d.value);\n })\n .attr('r', 0)\n .transition()\n .ease(d3.easeLinear)\n .duration(config.transitionDuration)\n .delay((d, i) => {\n const multiplier = 50;\n return i * multiplier;\n })\n .attr('r', config.dotRadius);\n};\n\n/**\n * Draws the line chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawLineChart = (container: ElementRef<HTMLDivElement>, data: TLineChartData[], options?: Partial<ILineChartOptions>) => {\n const config: ILineChartOptions = generateConfiguration<ILineChartOptions>(defaultLineChartConfig, options, {});\n\n const { g } = createContainer(container, config);\n\n const range = data.reduce(\n (accumulator: { minTime: number; maxTime: number; maxValue: number }, arr) => {\n const timestamps = arr.map(item => item.timestamp);\n const minItem = Math.min(...timestamps);\n const maxItem = Math.max(...timestamps);\n const minTime = Math.min(minItem, accumulator.minTime);\n const maxTime = Math.max(maxItem, accumulator.maxTime);\n\n const values = arr.map(item => item.value);\n const maxItemValue = Math.max(...values);\n const maxValue = Math.max(maxItemValue, accumulator.maxValue);\n return { minTime, maxTime, maxValue };\n },\n { minTime: Number(Infinity), maxTime: -Infinity, maxValue: -Infinity },\n );\n\n const x = d3.scaleTime([0, config.width]).domain([range.minTime, range.maxTime]);\n const y = d3.scaleLinear([config.height, 0]).domain([0, range.maxValue ?? 1]);\n\n createAxisX(g, x, config);\n\n createAxisY(g, y, config);\n\n createLegend(g, config);\n\n drawLinesDotsAndSetPointerEvents(g, x, y, config, data);\n\n return config;\n};\n","import { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { IPieChartDataNode, IPieChartOptions } from '../interfaces/pie-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The pie chart default configuration.\n */\nexport const defaultPieChartConfig: IPieChartOptions = Object.freeze(<IPieChartOptions>{\n chartTitle: '',\n width: 600,\n height: 600,\n margin: {\n top: 20,\n right: 20,\n bottom: 20,\n left: 20,\n },\n innerRadius: 0, // increase inner radius to render a donut chart\n showLabels: true,\n labelRadiusModifier: 50,\n labelTextWrapWidth: 60,\n transitionDuration: 1000,\n color: d3.scaleOrdinal(d3.schemeCategory10),\n});\n\n/**\n * Creates a container for the pie chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IPieChartOptions) => {\n const id = container.nativeElement.id ?? 'pie-0';\n\n d3.select(`#${id}`).select('svg').remove();\n const svg = d3\n .select(`#${id}`)\n .append('svg')\n .attr('width', config.width + config.margin.left + config.margin.right)\n .attr('height', config.height + config.margin.top + config.margin.bottom)\n .attr('class', id);\n const g = svg\n .append('g')\n .attr('transform', `translate(${config.width / 2 + config.margin.left},${config.height / 2 + config.margin.top})`);\n\n return { svg, g };\n};\n\n/**\n * Draws the pie chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawPieChart = (container: ElementRef<HTMLDivElement>, data: IPieChartDataNode[], options?: Partial<IPieChartOptions>) => {\n const config: IPieChartOptions = generateConfiguration<IPieChartOptions>(defaultPieChartConfig, options, {});\n\n const { g } = createContainer(container, config);\n\n const pie = d3.pie<IPieChartDataNode>().value(datum => datum.y);\n\n const radius = Math.min(config.width, config.height) / 2;\n\n const arc = d3.arc<d3.PieArcDatum<IPieChartDataNode>>().innerRadius(config.innerRadius).outerRadius(radius);\n\n const tooltip = g.append('text').attr('class', 'chart-tooltip').style('opacity', 0);\n\n const arcs = g\n .selectAll('arc')\n .data(pie(data))\n .enter()\n .append('g')\n .attr('class', 'arc')\n .on('mouseover', function (this, event: MouseEvent, d) {\n this.style.opacity = '0.8';\n\n const modifier = 10;\n const x = parseFloat(d3.select(this).attr('cx')) - modifier;\n const y = parseFloat(d3.select(this).attr('cy')) - modifier;\n\n const tooltipText = `${d.data.key}: ${d.data.y}`;\n\n tooltip\n .attr('class', 'chart-tooltip')\n .attr('x', x)\n .attr('y', y)\n .attr('dx', -config.width / (2 * 2 * 2))\n .attr('dy', -config.margin.top / 2 - config.height / 2)\n .text(tooltipText)\n .transition()\n .duration(config.transitionDuration)\n .style('opacity', 1);\n })\n .on('mouseout', function (this, event, d) {\n this.style.opacity = 'unset';\n tooltip.transition().duration(config.transitionDuration).style('opacity', 0);\n });\n\n arcs\n .append('path')\n .attr('fill', (d, i) => config.color(i.toString()))\n .attr('d', arc);\n\n if (config.showLabels) {\n const label = d3\n .arc<d3.PieArcDatum<IPieChartDataNode>>()\n .innerRadius(radius)\n .outerRadius(radius + config.labelRadiusModifier);\n\n const textDy = 5;\n arcs\n .append('text')\n .attr('class', 'legend')\n .attr('text-anchor', 'middle')\n .attr('dy', textDy)\n .attr('transform', d => `translate(${label.centroid(d)})`)\n .text(d => d.data.y);\n }\n\n return config;\n};\n","import { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { IRadarChartDataNode, IRadarChartOptions, TRadarChartData } from '../interfaces/radar-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The radar chart default configuration.\n */\nexport const defaultRadarChartConfig: IRadarChartOptions = Object.freeze(<IRadarChartOptions>{\n chartTitle: '',\n width: 350,\n height: 350,\n margin: {\n top: 50,\n right: 50,\n bottom: 50,\n left: 50,\n },\n levels: 3, // how many levels or inner circles should there be drawn\n maxValue: 0, // what is the value that the biggest circle will represent\n lineFactor: 1.1, // how much farther than the radius of the outer circle should the lines be stretched\n labelFactor: 1.15, // how much farther than the radius of the outer circle should the labels be placed\n labelTextWrapWidth: 60, // the number of pixels after which a label needs to be given a new line\n opacityArea: 0.35, // the opacity of the area of the blob\n dotRadius: 4, // the size of the colored circles of each blog\n opacityCircles: 0.1, // the opacity of the circles of each blob\n strokeWidth: 2, // the width of the stroke around each blob\n roundStrokes: false, // if true the area and stroke will follow a round path (cardinal-closed)\n transitionDuration: 200,\n color: d3.scaleOrdinal(d3.schemeCategory10),\n});\n\n/**\n * Creates a container for the radar chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IRadarChartOptions) => {\n const id = container.nativeElement.id ?? 'radar-0';\n\n d3.select(`#${id}`).select('svg').remove();\n const svg = d3\n .select(`#${id}`)\n .append('svg')\n .attr('width', config.width + config.margin.left + config.margin.right)\n .attr('height', config.height + config.margin.top + config.margin.bottom)\n .attr('class', id);\n const g = svg\n .append('g')\n .attr('transform', `translate(${config.width / 2 + config.margin.left},${config.height / 2 + config.margin.top})`);\n\n return { svg, g };\n};\n\n/**\n * Draws the radar chart circular grid.\n * @param axisGrid the chart axis grid\n * @param radius the chart radius value\n * @param maxValue the maximum value of the chart axis\n * @param config the chart configuration\n */\nconst drawCircularGrid = (\n axisGrid: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n radius: number,\n maxValue: number,\n config: IRadarChartOptions,\n) => {\n // background circles\n axisGrid\n .selectAll('.levels')\n .data(d3.range(1, config.levels + 1).reverse())\n .enter()\n .append('circle')\n .attr('class', 'grid-circle')\n .attr('r', (d, i) => (radius / config.levels) * d)\n .style('fill', '#CDCDCD')\n .style('stroke', '#CDCDCD')\n .style('fill-opacity', config.opacityCircles)\n .style('filter', 'url(#glow)');\n // text indicating at what % each level is\n const axisGridX = 4;\n axisGrid\n .selectAll('.axis-label')\n .data(d3.range(1, config.levels + 1).reverse())\n .enter()\n .append('text')\n .attr('class', 'axis-label')\n .attr('x', axisGridX)\n .attr('y', d => (-d * radius) / config.levels)\n .attr('dy', '0.4em')\n .style('font-size', '10px')\n .attr('fill', '#737373')\n .text((d, i) => (maxValue * d) / config.levels);\n};\n\n/**\n * Wraps the chart axis labels text.\n * @param svgText the svg text elements\n * @param width the chart axis label width\n */\nconst wrapSvgText = (svgText: d3.Selection<SVGTextElement, string, SVGGElement, unknown>, width: number) => {\n svgText.each(function (this: SVGTextElement) {\n const text = d3.select<SVGElement, string>(this);\n const words = text.text().split(/\\s+/).reverse();\n if (words.length > 1) {\n let line: string[] = [];\n let lineNumber = 0;\n const lineHeight = 1.4;\n const y = text.attr('y');\n const x = text.attr('x');\n const dy = parseFloat(text.attr('dy') ?? 0);\n let tspan = text.text(null).append('tspan').attr('x', x).attr('y', y).attr('dy', `${dy}em`);\n\n let word = words.pop();\n\n while (typeof word !== 'undefined') {\n line.push(word ?? '');\n tspan.text(line.join(' '));\n if ((tspan.node()?.getComputedTextLength() ?? 0) > width) {\n line.pop();\n tspan.text(line.join(' '));\n line = [word ?? ''];\n lineNumber += 1;\n tspan = text\n .append('tspan')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', `${lineNumber * lineHeight + dy}em`)\n .text(word ?? '');\n }\n word = words.pop();\n }\n }\n });\n};\n\n/**\n * Creates the legend.\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst createLegend = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, config: IRadarChartOptions) => {\n if (config.chartTitle !== '') {\n g.append('g')\n .attr('transform', `translate(-${config.width / 2 + config.margin.left / 2}, -${config.height / 2 + config.margin.top / 2})`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .text(config.chartTitle);\n }\n};\n\n/**\n * Draws the radar chart axis.\n * @param axisGrid the chart axis grid\n * @param axisNames the chart axis names\n * @param radiusScale the chart radius scale\n * @param maxValue the maximum value of the chart axis\n * @param angleSlice the chart angle slice value\n * @param config the chart configuration\n */\nconst drawAxis = (\n axisGrid: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n axisNames: string[],\n radiusScale: d3.ScaleLinear<number, number>,\n maxValue: number,\n angleSlice: number,\n config: IRadarChartOptions,\n) => {\n // create the straight lines radiating outward from the center\n const axis = axisGrid.selectAll('.axis').data(axisNames).enter().append('g').attr('class', 'axis');\n // append the lines\n axis\n .append('line')\n .attr('x1', 0)\n .attr('y1', 0)\n .attr('x2', (d, i) => radiusScale(maxValue * config.lineFactor) * Math.cos(angleSlice * i - Math.PI / 2))\n .attr('y2', (d, i) => radiusScale(maxValue * config.lineFactor) * Math.sin(angleSlice * i - Math.PI / 2))\n .attr('class', 'line')\n .style('stroke', 'white')\n .style('stroke-width', '2px');\n // append the labels at each axis\n axis\n .append('text')\n .attr('class', 'legend')\n .style('font-size', '11px')\n .attr('text-anchor', 'middle')\n .attr('dy', '0.35em')\n .attr('x', (d, i) => radiusScale(maxValue * config.labelFactor) * Math.cos(angleSlice * i - Math.PI / 2))\n .attr('y', (d, i) => radiusScale(maxValue * config.labelFactor) * Math.sin(angleSlice * i - Math.PI / 2))\n .text(d => d)\n .call(wrapSvgText, config.labelTextWrapWidth);\n};\n\n/**\n * Draws the radar chart blobs.\n * @param radiusScale the chart radius scale\n * @param angleSlice the chart angle slice value\n * @param g the svg g element\n * @param data the chart data\n * @param config the chart configuration\n */\nconst drawRadarChartBlobs = (\n radiusScale: d3.ScaleLinear<number, number>,\n angleSlice: number,\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n data: TRadarChartData,\n config: IRadarChartOptions,\n) => {\n // the radial line function\n const radarLine = d3\n .lineRadial<IRadarChartDataNode>()\n .radius(d => radiusScale(d.value))\n .angle((d, i) => i * angleSlice);\n // create a wrapper for the blobs\n const blobWrapper = g.selectAll('.radar-wrapper').data(data).enter().append('g').attr('class', 'radar-wrapper');\n // append the backgrounds\n blobWrapper\n .append('path')\n .attr('class', 'radar-area')\n .attr('d', (d, i) => radarLine(d))\n .style('fill', (d, i) => config.color(i.toString()))\n .style('fill-opacity', config.opacityArea)\n .on('mouseover', function (d, i) {\n // dim all blobs\n const radarAreaFillOpacity = 0.1;\n d3.selectAll('.radar-area').transition().duration(config.transitionDuration).style('fill-opacity', radarAreaFillOpacity);\n // bring back the hovered over blob\n const fillOpacity = 0.7;\n d3.select(this).transition().duration(config.transitionDuration).style('fill-opacity', fillOpacity);\n })\n .on('mouseout', () => {\n // bring back all blobs\n d3.selectAll('.radar-area').transition().duration(config.transitionDuration).style('fill-opacity', config.opacityArea);\n });\n // create the outlines\n blobWrapper\n .append('path')\n .attr('class', 'radar-stroke')\n .attr('d', (d, i) => radarLine(d))\n .style('stroke-width', `${config.strokeWidth}px`)\n .style('stroke', (d, i) => config.color(i.toString()))\n .style('fill', 'none')\n .style('filter', 'url(#glow)');\n // append the circles\n const blobWrapperFillOpacity = 0.8;\n blobWrapper\n .selectAll('.radar-circle')\n .data((d, i) => d)\n .enter()\n .append('circle')\n .attr('class', 'radar-circle')\n .attr('r', config.dotRadius)\n .attr('cx', (d, i) => radiusScale(d.value) * Math.cos(angleSlice * i - Math.PI / 2))\n .attr('cy', (d, i) => radiusScale(d.value) * Math.sin(angleSlice * i - Math.PI / 2))\n .style('fill', (d, i, j) => config.color(j.toString()))\n .style('fill-opacity', blobWrapperFillOpacity);\n};\n\n/**\n * Appends the invisible tooltip circles.\n * @param g the svg g element\n * @param data the chart data\n * @param radiusScale the chart radius scale\n * @param angleSlice the chart angle slice value\n * @param config the chart configuration\n */\nconst appendInvisibleTooltipCircles = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n data: TRadarChartData,\n radiusScale: d3.ScaleLinear<number, number>,\n angleSlice: number,\n config: IRadarChartOptions,\n) => {\n // wrapper for the invisible circles on top\n const blobCircleWrapper = g.selectAll('.radar-circle-wrapper').data(data).enter().append('g').attr('class', 'radar-circle-wrapper');\n // set up the small tooltip for when you hover over a circle\n const tooltip = g.append('text').attr('class', 'chart-tooltip').style('opacity', 0);\n // append a set of invisible circles on top for the mouseover pop-up\n const blobCircleWrapperRadiusMultiplier = 1.5;\n blobCircleWrapper\n .selectAll<SVGElement, IRadarChartDataNode>('.radar-invisible-circle')\n .data((d, i) => d)\n .enter()\n .append('circle')\n .attr('class', 'radar-invisible-circle')\n .attr('r', config.dotRadius * blobCircleWrapperRadiusMultiplier)\n .attr('cx', (d, i) => radiusScale(d.value) * Math.cos(angleSlice * i - Math.PI / 2))\n .attr('cy', (d, i) => radiusScale(d.value) * Math.sin(angleSlice * i - Math.PI / 2))\n .style('fill', 'none')\n .style('pointer-events', 'all')\n .on('mouseover', function (event: MouseEvent, i) {\n const modifier = 10;\n const newX = parseFloat(d3.select(this).attr('cx')) - modifier;\n const newY = parseFloat(d3.select(this).attr('cy')) - modifier;\n\n const nodeData = (event.target as unknown as Record<string, IRadarChartDataNode>)['__data__'];\n const tooltipText = `${nodeData.value} ${nodeData.unit}`;\n tooltip.attr('x', newX).attr('y', newY).text(tooltipText).transition().duration(config.transitionDuration).style('opacity', 1);\n })\n .on('mouseout', () => {\n tooltip.transition().duration(config.transitionDuration).style('opacity', 0);\n });\n};\n\n/**\n * Draws the radar chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the hart configuration\n */\nexport const drawRadarChart = (container: ElementRef<HTMLDivElement>, data: TRadarChartData, options?: Partial<IRadarChartOptions>) => {\n const config: IRadarChartOptions = generateConfiguration<IRadarChartOptions>(defaultRadarChartConfig, options, {});\n\n const maxValue = Math.max(config.maxValue, d3.max(data, i => d3.max(i.map(o => o.value))) ?? 0);\n const axisNames = data[0].map((i, j) => i.axis);\n const totalAxis = axisNames.length;\n const radius = Math.min(config.width / 2 - config.margin.left / 2, config.height / 2 - config.margin.top / 2);\n const angleSlice = (Math.PI * 2) / totalAxis;\n const radiusScale = d3.scaleLinear([0, radius]).domain([0, maxValue]);\n\n const { g } = createContainer(container, config);\n\n // filter for the outside glow\n const filter = g.append('defs').append('filter').attr('id', 'glow');\n filter.append('feGaussianBlur').attr('stdDeviation', '2.5').attr('result', 'coloredBlur');\n const feMerge = filter.append('feMerge');\n feMerge.append('feMergeNode').attr('in', 'coloredBlur');\n feMerge.append('feMergeNode').attr('in', 'SourceGraphic');\n\n const axisGrid = g.append('g').attr('class', 'axis-wrapper');\n\n drawCircularGrid(axisGrid, radius, maxValue, config);\n\n drawAxis(axisGrid, axisNames, radiusScale, maxValue, angleSlice, config);\n\n createLegend(g, config);\n\n drawRadarChartBlobs(radiusScale, angleSlice, g, data, config);\n\n appendInvisibleTooltipCircles(g, data, radiusScale, angleSlice, config);\n\n return config;\n};\n","import { InjectionToken } from '@angular/core';\n\nimport { drawBarChart } from '../util/bar-chart.util';\nimport { drawForceDirectedChart } from '../util/force-directed-chart.util';\nimport { drawLineChart } from '../util/line-chart.util';\nimport { drawPieChart } from '../util/pie-chart.util';\nimport { drawRadarChart } from '../util/radar-chart.util';\n\nexport interface ID3ChartFactory {\n drawPieChart: typeof drawPieChart;\n drawRadarChart: typeof drawRadarChart;\n drawBarChart: typeof drawBarChart;\n drawLineChart: typeof drawLineChart;\n drawForceDirectedChart: typeof drawForceDirectedChart;\n}\n\nexport const d3ChartFactory = (): ID3ChartFactory => ({\n drawPieChart,\n drawRadarChart,\n drawBarChart,\n drawLineChart,\n drawForceDirectedChart,\n});\n\nexport const D3_CHART_FACTORY = new InjectionToken('D3_CHART_FACTORY', {\n providedIn: 'root',\n factory: d3ChartFactory,\n});\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n SimpleChange,\n ViewChild,\n} from '@angular/core';\n\nimport { IBarChartDataNode, IBarChartOptions, TBarChartData } from '../../interfaces/bar-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { defaultBarChartConfig } from '../../util';\n\ninterface IInputChanges {\n data?: SimpleChange | null;\n options?: SimpleChange | null;\n}\n\n@Component({\n selector: 'app-bar-chart',\n templateUrl: './bar-chart.component.html',\n styleUrls: ['./bar-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppBarChartComponent implements AfterViewInit, OnChanges {\n /**\n * The chart id.\n */\n @Input() public chartId = 'bar-0';\n\n /**\n * The chart data.\n */\n @Input() public data: TBarChartData = [];\n\n /**\n * The chart options.\n */\n @Input() public options: Partial<IBarChartOptions> = {};\n\n /**\n * D3 chart view child reference.\n */\n @ViewChild('container') private readonly container?: ElementRef<HTMLDivElement>;\n\n constructor(@Inject(DOCUMENT) private readonly doc: Document, @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory) {}\n\n /**\n * The chart options constructor.\n * @returns chart options\n */\n private chartOptions() {\n const bodyWidthAdjustment = 10;\n const width = Math.min(\n this.options.width ?? defaultBarChartConfig.width,\n this.doc.body.clientWidth - defaultBarChartConfig.margin.left - defaultBarChartConfig.margin.right - bodyWidthAdjustment,\n );\n const height = Math.min(\n this.options.height ?? width,\n this.doc.body.clientWidth - defaultBarChartConfig.margin.top - defaultBarChartConfig.margin.bottom - bodyWidthAdjustment,\n );\n const yAxisTicks = Math.max(...this.data.map(item => item.value));\n const options: Partial<IBarChartOptions> = {\n width,\n height,\n yAxisTicks,\n ...this.options,\n };\n return options;\n }\n\n /**\n * Draws the chart.\n */\n private drawChart() {\n if (typeof this.container !== 'undefined') {\n const options = this.chartOptions();\n this.d3Factory.drawBarChart(this.container, this.data, options);\n }\n }\n\n /**\n * Actually draws the chart after the component view is initialized.\n */\n public ngAfterViewInit(): void {\n this.drawChart();\n }\n\n /**\n * Redraws the chart on changes.\n */\n public ngOnChanges(changes: IInputChanges): void {\n const data: IBarChartDataNode[][] = changes.data?.currentValue;\n const options: Partial<IBarChartOptions> = changes.options?.currentValue;\n if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {\n this.drawChart();\n }\n }\n}\n","<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n SimpleChange,\n ViewChild,\n} from '@angular/core';\n\nimport { IPieChartDataNode, IPieChartOptions } from '../../interfaces/pie-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\n\ninterface IInputChanges {\n data?: SimpleChange | null;\n options?: SimpleChange | null;\n}\n\n@Component({\n selector: 'app-pie-chart',\n templateUrl: './pie-chart.component.html',\n styleUrls: ['./pie-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppPieChartComponent implements AfterViewInit, OnChanges {\n /**\n * The chart id.\n */\n @Input() public chartId = 'pie-0';\n\n /**\n * The chart data.\n */\n @Input() public data: IPieChartDataNode[] = [];\n\n /**\n * The chart options.\n */\n @Input() public options: Partial<IPieChartOptions> = {};\n\n /**\n * D3 chart view child reference.\n */\n @ViewChild('container') private readonly container?: ElementRef<HTMLDivElement>;\n\n constructor(@Inject(DOCUMENT) private readonly doc: Document, @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory) {}\n\n /**\n * The chart options constructor.\n * @returns chart options\n */\n private chartOptions() {\n const margin: IPieChartOptions['margin'] = { top: 50, right: 50, bottom: 50, left: 50 };\n const minWidth = 350;\n const modifiers = {\n width: 10,\n height: 20,\n };\n const width = Math.min(minWidth, this.doc.body.clientWidth - modifiers.width) - margin.left - margin.right;\n const height = Math.min(width, this.doc.body.clientHeight - margin.top - margin.bottom - modifiers.height);\n const options: Partial<IPieChartOptions> = {\n width,\n height,\n margin,\n ...this.options,\n };\n return options;\n }\n\n /**\n * Draws the chart.\n */\n private drawChart() {\n if (typeof this.container !== 'undefined') {\n const options = this.chartOptions();\n this.d3Factory.drawPieChart(this.container, this.data, options);\n }\n }\n\n /**\n * Actually draws the chart after the component view is initialized.\n */\n public ngAfterViewInit(): void {\n this.drawChart();\n }\n\n /**\n * Redraws the chart on changes.\n */\n public ngOnChanges(changes: IInputChanges): void {\n const data: IPieChartDataNode[] | undefined = changes.data?.currentValue;\n const options: Partial<IPieChartOptions> = changes.options?.currentValue;\n if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {\n this.drawChart();\n }\n }\n}\n","<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n SimpleChange,\n ViewChild,\n} from '@angular/core';\n\nimport { IRadarChartDataNode, IRadarChartOptions } from '../../interfaces/radar-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { defaultRadarChartConfig } from '../../util';\n\ninterface IInputChanges {\n data?: SimpleChange | null;\n options?: SimpleChange | null;\n}\n\n@Component({\n selector: 'app-radar-chart',\n templateUrl: './radar-chart.component.html',\n styleUrls: ['./radar-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppRadarChartComponent implements AfterViewInit, OnChanges {\n /**\n * The chart id.\n */\n @Input() public chartId = 'radar-0';\n\n /**\n * The chart data.\n */\n @Input() public data: IRadarChartDataNode[][] = [[]];\n\n /**\n * The chart options.\n */\n @Input() public options: Partial<IRadarChartOptions> = {};\n\n /**\n * D3 chart view child reference.\n */\n @ViewChild('container') private readonly container?: ElementRef<HTMLDivElement>;\n\n constructor(@Inject(DOCUMENT) private readonly doc: Document, @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory) {}\n\n /**\n * The chart options constructor.\n * @returns chart options\n */\n private chartOptions() {\n const xsOffset = 500;\n const smOffset = 800;\n const mdOffset = 1024;\n const labelFactorDefault = 1.15;\n const labelFactorMd = 1.15;\n const labelFactorSm = 1.15;\n const labelFactorXs = 1.4;\n const wrapWidthDefault = 85;\n const wrapWidthMd = 80;\n const wrapWidthXs = 70;\n const bodyWidthAdjustment = 10;\n const width = Math.min(\n this.options.width ?? defaultRadarChartConfig.width,\n this.doc.body.clientWidth - defaultRadarChartConfig.margin.left - defaultRadarChartConfig.margin.right - bodyWidthAdjustment,\n );\n const height = Math.min(\n width,\n this.doc.body.clientHeight - defaultRadarChartConfig.margin.top - defaultRadarChartConfig.margin.bottom - bodyWidthAdjustment,\n );\n const labelFactor =\n width <= xsOffset ? labelFactorXs : width <= smOffset ? labelFactorSm : width <= mdOffset ? labelFactorMd : labelFactorDefault;\n const labelTextWrapWidth = width <= xsOffset ? wrapWidthXs : width <= mdOffset ? wrapWidthMd : wrapWidthDefault;\n const options: Partial<IRadarChartOptions> = {\n width,\n height,\n maxValue: this.data[0].reduce((accumulator, item) => (item.value > accumulator ? item.value : accumulator), 0) + 1,\n levels: 5,\n roundStrokes: true,\n labelFactor,\n labelTextWrapWidth,\n ...this.options,\n };\n return options;\n }\n\n /**\n * Draws the chart.\n */\n private drawChart() {\n if (typeof this.container !== 'undefined') {\n const options = this.chartOptions();\n this.d3Factory.drawRadarChart(this.container, this.data, options);\n }\n }\n\n /**\n * Actually draws the chart after the component view is initialized.\n */\n public ngAfterViewInit(): void {\n this.drawChart();\n }\n\n /**\n * Redraws the chart on changes.\n */\n public ngOnChanges(changes: IInputChanges): void {\n const currentValue: IRadarChartDataNode[][] = changes.data?.currentValue;\n const options: Partial<IRadarChartOptions> = changes.options?.currentValue;\n if ((typeof currentValue !== 'undefined' && currentValue !== null) || (typeof options !== 'undefined' && options !== null)) {\n this.drawChart();\n }\n }\n}\n","<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n SimpleChange,\n ViewChild,\n} from '@angular/core';\n\nimport { IForceDirectedChartData, IForceDirectedChartOptions } from '../../interfaces/force-directed-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\n\ninterface IInputChanges {\n data?: SimpleChange | null;\n options?: SimpleChange | null;\n}\n\n@Component({\n selector: 'app-force-directed-chart',\n templateUrl: './force-directed-chart.component.html',\n styleUrls: ['./force-directed-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppForceDirectedChartComponent implements AfterViewInit, OnChanges {\n /**\n * The chart identifier.\n */\n @Input() public chartId = 'force-0';\n\n /**\n * The chart data.\n */\n @Input() public data: IForceDirectedChartData = {\n domains: [],\n entities: [],\n links: [],\n nodes: [],\n };\n\n /**\n * The chart options.\n */\n @Input() public options: Partial<IForceDirectedChartOptions> = {};\n\n /**\n * The chart container view child reference.\n */\n @ViewChild('container') private readonly container?: ElementRef<HTMLDivElement>;\n\n constructor(@Inject(DOCUMENT) private readonly doc: Document, @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory) {}\n\n /**\n * The chart options constructor.\n * @returns chart options\n */\n private chartOptions() {\n const margin = { top: 50, right: 50, bottom: 50, left: 50 };\n const minWidth = 350;\n const modifiers = {\n width: 10,\n height: 20,\n };\n const width = Math.min(minWidth, this.doc.body.clientWidth - modifiers.width) - margin.left - margin.right;\n const height = Math.min(width, this.doc.body.clientHeight - margin.top - margin.bottom - modifiers.height);\n const options: Partial<IForceDirectedChartOptions> = { width, height, margin, ...this.options };\n return options;\n }\n\n /**\n * Draws the chart.\n */\n private drawChart() {\n if (typeof this.container !== 'undefined') {\n const options = this.chartOptions();\n this.d3Factory.drawForceDirectedChart(this.container, this.data, options);\n }\n }\n\n /**\n * Actually draws the chart after the component view is initialized.\n */\n public ngAfterViewInit(): void {\n this.drawChart();\n }\n\n /**\n * Redraws the chart on changes.\n */\n public ngOnChanges(changes: IInputChanges): void {\n const prevData: IForceDirectedChartData | undefined = changes.data?.previousValue;\n const nextData: IForceDirectedChartData | undefined = changes.data?.currentValue;\n const options: Partial<IForceDirectedChartOptions> = changes.options?.currentValue;\n if (\n (Boolean(changes.data?.currentValue) && (prevData?.nodes ?? []).length !== (nextData?.nodes ?? []).length) ||\n (typeof options !== 'undefined' && options !== null)\n ) {\n this.drawChart();\n }\n }\n}\n","<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n SimpleChange,\n ViewChild,\n} from '@angular/core';\n\nimport { ILineChartDataNode, ILineChartOptions, TLineChartData } from '../../interfaces/line-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { defaultLineChartConfig } from '../../util';\n\ninterface IInputChanges {\n data?: SimpleChange | null;\n options?: SimpleChange | null;\n}\n\n@Component({\n selector: 'app-line-chart',\n templateUrl: './line-chart.component.html',\n styleUrls: ['./line-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppLineChartComponent implements AfterViewInit, OnChanges {\n /**\n * The chart id.\n */\n @Input() public chartId = 'line-0';\n\n /**\n * The chart data.\n */\n @Input() public data: TLineChartData[] = [];\n\n /**\n * The chart options.\n */\n @Input() public options: Partial<ILineChartOptions> = {};\n\n /**\n * D3 chart view child reference.\n */\n @ViewChild('container') private readonly container?: ElementRef<HTMLDivElement>;\n\n constructor(@Inject(DOCUMENT) private readonly doc: Document, @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory) {}\n\n /**\n * The chart options constructor.\n * @returns chart options\n */\n private chartOptions() {\n const bodyWidthAdjustment = 10;\n const width = Math.min(\n this.options.width ?? defaultLineChartConfig.width,\n this.doc.body.clientWidth - defaultLineChartConfig.margin.left - defaultLineChartConfig.margin.right - bodyWidthAdjustment,\n );\n const height = Math.min(\n this.options.height ?? width,\n this.doc.body.clientWidth - defaultLineChartConfig.margin.top - defaultLineChartConfig.margin.bottom - bodyWidthAdjustment,\n );\n const xTicksScale = 75;\n const yTicksScale = 25;\n const ticks: ILineChartOptions['ticks'] = {\n x: this.options.ticks?.x ?? width / xTicksScale,\n y: this.options.ticks?.y ?? height / yTicksScale,\n };\n const options: Partial<ILineChartOptions> = {\n ...this.options,\n width,\n height,\n ticks,\n };\n return options;\n }\n\n /**\n * Draws the chart.\n */\n private drawChart() {\n if (typeof this.container !== 'undefined') {\n const options = this.chartOptions();\n this.d3Factory.drawLineChart(this.container, [...this.data], options);\n }\n }\n\n /**\n * Actually draws the chart after the component view is initialized.\n */\n public ngAfterViewInit(): void {\n this.drawChart();\n }\n\n /**\n * Redraws the chart on changes.\n */\n public ngOnChanges(changes: IInputChanges): void {\n const data: ILineChartDataNode[][] = changes.data?.currentValue;\n const options: Partial<ILineChartOptions> = changes.options?.currentValue;\n if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {\n this.drawChart();\n }\n }\n}\n","<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { first, map, switchMap, timer } from 'rxjs';\n\nimport { IBarChartOptions, TBarChartData } from '../../interfaces/bar-chart.interface';\nimport {\n IForceDirectedChartData,\n IForceDirectedChartOptions,\n IForceDirectedGraphEntity,\n} from '../../interfaces/force-directed-chart.interface';\nimport { ILineChartOptions, TDateFormat, TLineChartData } from '../../interfaces/line-chart.interface';\nimport { IPieChartDataNode, IPieChartOptions } from '../../interfaces/pie-chart.interface';\nimport { IRadarChartDataNode, IRadarChartOptions } from '../../interfaces/radar-chart.interface';\n\n@Component({\n selector: 'app-chart-examples',\n templateUrl: './chart-examples.component.html',\n styleUrls: ['./chart-examples.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppChartExamplesComponent {\n /**\n * Sample bar chart data.\n */\n public get barChartData() {\n return <TBarChartData>[\n { title: 'one', value: 1 },\n { title: 'two', value: 2 },\n { title: 'three', value: 3 },\n { title: 'four', value: 4 },\n { title: 'five', value: 5 },\n ];\n }\n\n /**\n * Sample line chart data.\n */\n public get lineChartData() {\n return <TLineChartData[]>[\n [\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n ].sort((a, b) => a.timestamp - b.timestamp),\n [\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n ].sort((a, b) => a.timestamp - b.timestamp),\n [\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n ].sort((a, b) => a.timestamp - b.timestamp),\n ];\n }\n\n /**\n * Sample radar chart data.\n */\n public get radarChartData() {\n return <IRadarChartDataNode[][]>[\n [\n { axis: 'one', value: 1, unit: 'x' },\n { axis: 'two', value: 2, unit: 'x' },\n { axis: 'three', value: 3, unit: 'x' },\n { axis: 'four', value: 4, unit: 'x' },\n { axis: 'five', value: 5, unit: 'x' },\n { axis: 'six', value: 6, unit: 'x' },\n { axis: 'seven', value: 7, unit: 'x' },\n { axis: 'eight', value: 8, unit: 'x' },\n { axis: 'nine (long labels are wrapped)', value: 9, unit: 'x' },\n ],\n [\n { axis: 'one', value: 9, unit: 'y' },\n { axis: 'two', value: 8, unit: 'y' },\n { axis: 'three', value: 7, unit: 'y' },\n { axis: 'four', value: 6, unit: 'y' },\n { axis: 'five', value: 5, unit: 'y' },\n { axis: 'six', value: 4, unit: 'y' },\n { axis: 'seven', value: 3, unit: 'y' },\n { axis: 'eight', value: 2, unit: 'y' },\n { axis: 'nine (long labels are wrapped)', value: 1, unit: 'y' },\n ],\n ];\n }\n\n /**\n * Sample pie chart data.\n */\n public get pieChartData() {\n return <IPieChartDataNode[]>[\n { key: 'one', y: 1 },\n { key: 'two', y: 2 },\n { key: 'three', y: 3 },\n { key: 'four', y: 4 },\n { key: 'five', y: 5 },\n { key: 'six', y: 6 },\n ];\n }\n\n /**\n * Sample force directed chart data.\n */\n public get forceDirectedChartData() {\n const input = {\n domains: ['first', 'second', 'third'],\n entities: [\n { name: 'one', domains: ['first'], img: '' },\n { name: 'two', domains: ['second'], img: '' },\n { name: 'three', domains: ['third'], img: '' },\n { name: 'four', domains: ['first', 'second'], img: '' },\n { name: 'five', domains: ['second'], img: '' },\n { name: 'six', domains: ['third', 'second'], img: '' },\n { name: 'seven', domains: ['second'], img: '' },\n { name: 'eight', domains: ['third'], img: '' },\n ],\n };\n const domains: IForceDirectedChartData['domains'] = input.domains.map((name, index) => ({ index, name, value: 1 }));\n const entities: IForceDirectedChartData['entities'] = input.entities.map((app, index) => ({\n index: index,\n name: app.name,\n domains: [...app.domains],\n img: app.img,\n linksCount: 0,\n }));\n const nodes: IForceDirectedGraphEntity[] = [...entities];\n const links: IForceDirectedChartData['links'] = entities\n .map(entity => {\n return entity.domains.map(domain => {\n const source = domains.find(value => domain === value.name)?.index ?? -1;\n const target = entity.index;\n return { source, target };\n });\n })\n .reduce((accumulator, item) => (Array.isArray(item) ? [...accumulator, ...item] : [...accumulator, item]), [])\n .filter(link => link.source !== -1 && link.target !== -1 && typeof link.target !== 'undefined');\n const chartData: IForceDirectedChartData = {\n domains,\n entities: entities.map(item => ({\n ...item,\n linksCount: links.reduce((acc, link) => (link.target === item.index ? acc + 1 : acc), 0),\n })),\n links,\n nodes,\n };\n return chartData;\n }\n\n private readonly breakpoint$ = this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n .pipe(map(result => Object.keys(result.breakpoints).find(item => result.breakpoints[item]) ?? 'unknown'));\n\n public readonly barChartConfig$ = this.breakpoint$.pipe(\n switchMap(() =>\n timer(this.timeout).pipe(\n first(),\n map(() => ({ data: this.barChartData, options: this.barChartOptions() })),\n ),\n ),\n );\n\n public readonly lineChartConfig$ = this.breakpoint$.pipe(\n switchMap(() =>\n timer(this.timeout).pipe(\n first(),\n map(() => ({\n data: this.lineChartData,\n options: this.lineChartOptions(),\n optionsDateDdMmYy: this.lineChartOptions('dd/mm/yy'),\n optionsDateDdMmYyyy: this.lineChartOptions('dd/mm/yyyy'),\n optionsDateMmYyyy: this.lineChartOptions('mm/yyyy'),\n })),\n ),\n ),\n );\n\n public readonly radarChartConfig$ = this.breakpoint$.pipe(\n switchMap(() =>\n timer(this.timeout).pipe(\n first(),\n map(() => ({ data: this.radarChartData, options: this.radarChartOptions() })),\n ),\n ),\n );\n\n public readonly pieChartConfig$ = this.breakpoint$.pipe(\n switchMap(() =>\n timer(this.timeout).pipe(\n first(),\n map(() => ({ data: this.pieChartData, options: this.pieChartOptions() })),\n ),\n ),\n );\n\n public readonly forceDirectedChartConfig$ = this.breakpoint$.pipe(\n switchMap(() =>\n timer(this.timeout).pipe(\n first(),\n map(() => ({ data: this.forceDirectedChartData, options: this.forceDirectedChartOptions() })),\n ),\n ),\n );\n\n constructor(private readonly breakpointObserver: BreakpointObserver) {}\n\n private readonly timeout = 100;\n\n public randomValue(range?: number) {\n const defaultRange = 100;\n return Math.floor(Math.random() * (range ?? defaultRange) + 1);\n }\n\n public randomTimestamp(range?: number) {\n const defaultRange = 100000000;\n return Math.floor(Math.random() * (range ?? defaultRange) + new Date().getTime());\n }\n\n /**\n * Example bar chart options.\n */\n public barChartOptions() {\n return <Partial<IBarChartOptions>>{\n chartTitle: 'Example bar chart',\n xAxisTitle: 'long x axis title',\n yAxisTitle: 'long y axis title',\n };\n }\n\n /**\n * Example line chart options.\n * @param dateFormat date format\n */\n public lineChartOptions(dateFormat: TDateFormat = 'default') {\n return <Partial<ILineChartOptions>>{\n chartTitle: `Example line chart, date format ${dateFormat}`,\n xAxisTitle: 'Date range',\n yAxisTitle: 'Value range',\n dateFormat,\n };\n }\n\n /**\n * Example radar chart options.\n */\n public radarChartOptions() {\n return <Partial<IRadarChartOptions>>{\n chartTitle: 'Example radar chart',\n };\n }\n\n /**\n * Example pie chart options.\n */\n public pieChartOptions() {\n return <Partial<IPieChartOptions>>{\n chartTitle: 'Example pie chart',\n };\n }\n\n /**\n * Example force directed chart options.\n */\n public forceDirectedChartOptions() {\n return <Partial<IForceDirectedChartOptions>>{\n chartTitle: 'Example force directed chart',\n };\n }\n}\n","<div class=\"container\" *ngIf=\"barChartConfig$ | async as config\">\n <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"lineChartConfig$ | async as config\">\n <app-line-chart [chartId]=\"'line-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.optionsDateDdMmYy\"></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-3'\"\n [data]=\"[config.data[1], config.data[2]]\"\n [options]=\"config.optionsDateDdMmYyyy\"\n ></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-4'\" [data]=\"config.data\" [options]=\"config.optionsDateMmYyyy\"></app-line-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"radarChartConfig$ | async as config\">\n <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"pieChartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-pie-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"forceDirectedChartConfig$ | async as config\">\n <app-force-directed-chart\n [chartId]=\"'force-directed-example-1'\"\n [data]=\"config.data\"\n [options]=\"config.options\"\n ></app-force-directed-chart>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AppBarChartComponent } from './components/bar-chart/bar-chart.component';\nimport { AppChartExamplesComponent } from './components/chart-examples/chart-examples.component';\nimport { AppForceDirectedChartComponent } from './components/force-directed-chart/force-directed-chart.component';\nimport { AppLineChartComponent } from './components/line-chart/line-chart.component';\nimport { AppPieChartComponent } from './components/pie-chart/pie-chart.component';\nimport { AppRadarChartComponent } from './components/radar-chart/radar-chart.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n AppPieChartComponent,\n AppRadarChartComponent,\n AppForceDirectedChartComponent,\n AppBarChartComponent,\n AppLineChartComponent,\n AppChartExamplesComponent,\n ],\n exports: [\n AppPieChartComponent,\n AppRadarChartComponent,\n AppForceDirectedChartComponent,\n AppBarChartComponent,\n AppLineChartComponent,\n AppChartExamplesComponent,\n ],\n})\nexport class AppD3ChartsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["createContainer","wrapSvgText","createLegend","createAxisX","createAxisY","onMouseOver","onMouseOut","i3.AppPieChartComponent","i4.AppRadarChartComponent","i5.AppForceDirectedChartComponent","i6.AppBarChartComponent","i7.AppLineChartComponent"],"mappings":"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"}
1
+ {"version":3,"file":"rfprodz-client-d3-charts.mjs","sources":["../../../../libs/client-d3-charts/src/lib/util/configuration.util.ts","../../../../libs/client-d3-charts/src/lib/util/bar-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/force-directed-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/line-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/pie-chart.util.ts","../../../../libs/client-d3-charts/src/lib/util/radar-chart.util.ts","../../../../libs/client-d3-charts/src/lib/providers/d3-chart-factory.provider.ts","../../../../libs/client-d3-charts/src/lib/components/bar-chart/bar-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/bar-chart/bar-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/pie-chart/pie-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/pie-chart/pie-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/radar-chart/radar-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/radar-chart/radar-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/force-directed-chart/force-directed-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/force-directed-chart/force-directed-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/line-chart/line-chart.component.ts","../../../../libs/client-d3-charts/src/lib/components/line-chart/line-chart.component.html","../../../../libs/client-d3-charts/src/lib/components/chart-examples/chart-examples.component.ts","../../../../libs/client-d3-charts/src/lib/components/chart-examples/chart-examples.component.html","../../../../libs/client-d3-charts/src/lib/d3-charts.module.ts","../../../../libs/client-d3-charts/src/rfprodz-client-d3-charts.ts"],"sourcesContent":["/**\n * Generates a configuration object based on a defaut configuration and an options object.\n * @param config the default object with all properties\n * @param options the input object\n * @param result the output object\n */\nexport const generateConfiguration = <T>(\n config: T,\n options: Partial<T & Record<string, unknown>> | undefined,\n result: Record<string, unknown>,\n) => {\n const defaultConfiguration = <Record<string, unknown>>config;\n\n if (typeof options === 'undefined') {\n return config;\n }\n const keys = Object.keys(defaultConfiguration);\n for (const key of keys) {\n const defaultValue = defaultConfiguration[key];\n const value = options[key];\n const typedKey: keyof typeof defaultConfiguration = key;\n if (typeof defaultValue === 'string' || typeof defaultValue === 'number' || typeof defaultValue === 'boolean') {\n result[typedKey] = typeof value !== 'undefined' ? value : defaultValue;\n } else if (defaultValue instanceof Function) {\n result[typedKey] = defaultValue;\n } else if (typeof defaultValue === 'object' && defaultValue !== null) {\n const nestedDefaultObject = <Record<string, unknown>>defaultValue;\n const nestedObject = <Record<string, unknown>>value;\n result[typedKey] = generateConfiguration(nestedDefaultObject, nestedObject, {});\n }\n }\n return <T>result;\n};\n","import { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { IBarChartDataNode, IBarChartOptions, TBarChartData } from '../interfaces/bar-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The bar chart default configuration.\n */\nexport const defaultBarChartConfig: IBarChartOptions = Object.freeze(<IBarChartOptions>{\n chartTitle: '',\n width: 350,\n height: 350,\n margin: {\n top: 70,\n right: 50,\n bottom: 50,\n left: 50,\n },\n transitionDuration: 400,\n xAxisPadding: 0.4,\n xAxisTitle: '',\n yAxisTitle: '',\n yAxisTicks: 10,\n displayAxisLabels: true,\n labelTextWrapWidth: 60, // the number of pixels after which a label needs to be given a new line\n color: d3.scaleOrdinal(d3.schemeCategory10),\n});\n\n/**\n * Creates a container for the bar chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IBarChartOptions) => {\n const id = container.nativeElement.id ?? 'bar-0';\n\n d3.select(`#${id}`).select('svg').remove();\n const svg = d3\n .select(`#${id}`)\n .append('svg')\n .attr('width', config.width + config.margin.left + config.margin.right)\n .attr('height', config.height + config.margin.top + config.margin.bottom)\n .attr('class', id);\n const g = svg.append('g').attr('transform', `translate(${config.margin.left},${config.margin.top / 2})`);\n\n return { svg, g };\n};\n\n/**\n * Wraps the bar chart axis labels text.\n * @param svgText the svg text elements\n * @param width the chart axis label width\n */\nconst wrapSvgText = (svgText: d3.Selection<d3.BaseType, unknown, SVGGElement, unknown>, width: number) => {\n svgText.each(function (this: d3.BaseType) {\n const text = d3.select<d3.BaseType, string>(this);\n const words = text.text().split(/\\s+/).reverse();\n if (words.length > 1) {\n let line: string[] = [];\n let lineNumber = 0;\n const lineHeight = 1.4;\n const y = text.attr('y');\n const x = text.attr('x');\n const dy = parseFloat(text.attr('dy') ?? 0);\n let tspan = text.text(null).append('tspan').attr('x', x).attr('y', y).attr('dy', `${dy}em`); // axis label\n\n let word = words.pop();\n\n while (typeof word !== 'undefined') {\n line.push(word ?? '');\n tspan.text(line.join(' '));\n if ((tspan.node()?.getComputedTextLength() ?? 0) > width) {\n line.pop();\n tspan.text(line.join(' '));\n line = [word ?? ''];\n lineNumber += 1;\n tspan = text\n .append('tspan')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', `${lineNumber * lineHeight + dy}em`)\n .text(word ?? '');\n }\n word = words.pop();\n }\n }\n });\n};\n\n/**\n * Creates the legend.\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst createLegend = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, config: IBarChartOptions) => {\n if (config.displayAxisLabels && config.xAxisTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '1em')\n .text(`x - ${config.xAxisTitle}`);\n }\n\n if (config.displayAxisLabels && config.yAxisTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '2.5em')\n .text(`y - ${config.yAxisTitle}`);\n }\n\n if (config.chartTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, 0)`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '-2em')\n .text(config.chartTitle);\n }\n};\n\n/**\n * Creates the x axis.\n * @param g the svg g element\n * @param x the x axis scale\n * @param config the chart configuration\n */\nconst createAxisX = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, x: d3.ScaleBand<string>, config: IBarChartOptions) => {\n const xLabels = g.append('g').attr('transform', `translate(0, ${config.height})`).call(d3.axisBottom(x)).append('text');\n\n g.selectAll('text').call(wrapSvgText, config.labelTextWrapWidth);\n\n if (config.displayAxisLabels) {\n xLabels.attr('transform', `translate(${config.width}, 0)`).attr('class', 'legend').attr('dx', '1.5em').attr('dy', '0.7em').text('x');\n }\n};\n\n/**\n * Creates the y axis.\n * @param g the svg g element\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst createAxisY = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n y: d3.ScaleLinear<number, number>,\n config: IBarChartOptions,\n) => {\n const yLabels = g\n .append('g')\n .call(\n d3\n .axisLeft(y)\n .tickFormat(function (d) {\n return `${d}`;\n })\n .ticks(config.yAxisTicks),\n )\n .append('text');\n\n if (config.displayAxisLabels) {\n yLabels.attr('dy', '-1.5em').attr('class', 'legend').text('y');\n }\n};\n\n/**\n * The mouse over event handler.\n * @param self an svg rect element\n * @param d the chart data node\n * @param g the svg g element\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst onMouseOver = (\n self: SVGRectElement,\n d: IBarChartDataNode,\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n x: d3.ScaleBand<string>,\n y: d3.ScaleLinear<number, number>,\n config: IBarChartOptions,\n) => {\n const widthModifier = 5;\n d3.select(self)\n .transition()\n .duration(config.transitionDuration)\n .attr('width', x.bandwidth() + widthModifier)\n .attr('y', function () {\n const modifier = 10;\n return y(d.value) - modifier;\n })\n .attr('height', function () {\n const modifier = 10;\n return config.height - y(d.value) + modifier;\n });\n\n g.append('text')\n .attr('class', 'chart-tooltip')\n .style('font-size', '11px')\n .attr('x', () => x(d.title) ?? '')\n .attr('y', function () {\n const modifier = 15;\n return y(d.value) - modifier;\n })\n .text(() => d.value);\n};\n\n/**\n * The mouse out event handler.\n * @param self an svg rect element\n * @param d the chart data node\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst onMouseOut = (\n self: SVGRectElement,\n d: IBarChartDataNode,\n x: d3.ScaleBand<string>,\n y: d3.ScaleLinear<number, number>,\n config: IBarChartOptions,\n) => {\n d3.select(self).attr('class', 'bar');\n d3.select(self)\n .transition()\n .duration(config.transitionDuration)\n .attr('width', x.bandwidth())\n .attr('y', () => y(d.value) ?? 0)\n .attr('height', () => config.height - (y(d.value) ?? 0));\n\n d3.selectAll('.chart-tooltip').remove();\n};\n\n/**\n * Draws the chart bars, and sets the mouse pointer events.\n * @param g the svg g element\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n * @param data the chart data\n */\nconst drawBarsAndSetPointerEvents = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n x: d3.ScaleBand<string>,\n y: d3.ScaleLinear<number, number>,\n config: IBarChartOptions,\n data: TBarChartData,\n) => {\n const duration = 400;\n g.selectAll('.bar')\n .data(data)\n .enter()\n .append('rect')\n .attr('class', 'bar')\n .style('fill', (d, i) => config.color(i.toString()))\n .on('mouseover', function (this, event, d) {\n return onMouseOver(this, d, g, x, y, config);\n })\n .on('mouseout', function (this, event, d) {\n return onMouseOut(this, d, x, y, config);\n })\n .attr('x', d => x(d.title) ?? '')\n .attr('y', d => y(d.value))\n .attr('width', x.bandwidth())\n .transition()\n .ease(d3.easeLinear)\n .duration(duration)\n .delay(function (d, i) {\n const multiplier = 50;\n return i * multiplier;\n })\n .attr('height', d => config.height - y(d.value));\n};\n\n/**\n * Draws the bar chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawBarChart = (container: ElementRef<HTMLDivElement>, data: TBarChartData, options?: Partial<IBarChartOptions>) => {\n const config: IBarChartOptions = generateConfiguration<IBarChartOptions>(defaultBarChartConfig, options, {});\n\n const { g } = createContainer(container, config);\n\n const x = d3\n .scaleBand([0, config.width])\n .padding(config.xAxisPadding)\n .domain(data.map(d => d.title));\n const y = d3.scaleLinear([config.height, 0]).domain([0, d3.max(data, d => d.value) ?? 1]);\n\n createAxisX(g, x, config);\n\n createAxisY(g, y, config);\n\n createLegend(g, config);\n\n drawBarsAndSetPointerEvents(g, x, y, config, data);\n\n return config;\n};\n","import { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport {\n IForceDirectedChartData,\n IForceDirectedChartDataNode,\n IForceDirectedChartOptions,\n} from '../interfaces/force-directed-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The force directed chart default configuration.\n */\nexport const defaultForceDirectedChartConfig: IForceDirectedChartOptions = Object.freeze({\n chartTitle: '',\n width: 600,\n height: 600,\n centerCalcMod: 1.6,\n charge: {\n strength: -10,\n theta: 0.6,\n distanceMax: 2000,\n },\n distance: 75,\n fontSize: 10,\n collisionRadius: 30,\n margin: {\n top: 20,\n right: 20,\n bottom: 20,\n left: 20,\n },\n strokeWidth: 1.5,\n labelTextWrapWidth: 60,\n color: d3.scaleOrdinal(d3.schemeCategory10),\n});\n\n/**\n * The force durected chart tick handler.\n * @param link chart links\n * @param node chart nodes\n * @param text chart text\n * @returns rotation angle\n */\nconst ticked = (\n link?: d3.Selection<SVGLineElement, d3.SimulationLinkDatum<IForceDirectedChartDataNode>, SVGSVGElement, unknown>,\n node?: d3.Selection<SVGCircleElement, IForceDirectedChartDataNode, SVGSVGElement, unknown>,\n text?: d3.Selection<SVGTextElement, IForceDirectedChartDataNode, SVGGElement, unknown>,\n) => {\n if (typeof link !== 'undefined') {\n link\n .attr('x1', d => (d.source as { x: number; y: number }).x ?? 0)\n .attr('y1', d => (d.source as { x: number; y: number }).y ?? 0)\n .attr('x2', d => (d.target as { x: number; y: number }).x ?? 0)\n .attr('y2', d => (d.target as { x: number; y: number }).y ?? 0);\n }\n\n if (typeof node !== 'undefined') {\n node.attr('cx', d => d.x ?? 0).attr('cy', d => d.y ?? 0);\n }\n\n if (typeof text !== 'undefined') {\n const dx = 10;\n const dy = 5;\n text.attr('x', d => (d.x ?? 0) + dx).attr('y', d => (d.y ?? 0) - dy);\n }\n\n return 'rotate(0)';\n};\n\n/**\n * Creates a container for the force directed chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IForceDirectedChartOptions) => {\n const id = container.nativeElement.id ?? 'force-directed-0';\n\n d3.select(`#${id}`).select('svg').remove();\n const svg = d3\n .select(`#${id}`)\n .append('svg')\n .attr('width', config.width + config.margin.left + config.margin.right)\n .attr('height', config.height + config.margin.top + config.margin.bottom)\n .attr('class', id);\n const g = svg\n .append('g')\n .attr('transform', `translate(${config.width / 2 + config.margin.left},${config.height / 2 + config.margin.top})`);\n\n return { svg, g };\n};\n\n/**\n * Applies the force directed chart data.\n * @param g the svg g element\n * @param data the chart data\n */\nconst applyChartData = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, data: IForceDirectedChartData) => {\n const imageXY = 10;\n g.append('defs')\n .selectAll('pattern')\n .data(data.entities)\n .enter()\n .append('pattern')\n .attr('id', (val, i) => `img-${val.index}`)\n .attr('x', 0)\n .attr('y', 0)\n .attr('height', val => {\n const baseValue = 30;\n return baseValue + val.linksCount * 2;\n })\n .attr('width', val => {\n const baseValue = 30;\n return baseValue + val.linksCount * 2;\n })\n .append('image')\n .attr('x', imageXY)\n .attr('y', imageXY)\n .attr('height', val => {\n const baseValue = 30;\n return baseValue + val.linksCount * 2;\n })\n .attr('width', val => {\n const baseValue = 30;\n return baseValue + val.linksCount * 2;\n })\n .attr('xlink:href', val => val.img);\n};\n\n/**\n * Creates the force directed chart links.\n * @param svg the svg element\n * @param config the chart configuration\n * @param data the chart data\n * @returns the chart links\n */\nconst createLinks = (\n svg: d3.Selection<SVGSVGElement, unknown, HTMLElement, unknown>,\n config: IForceDirectedChartOptions,\n data: IForceDirectedChartData,\n) => {\n return svg\n .selectAll('.link')\n .data(data.links)\n .enter()\n .append('line')\n .attr('class', 'link')\n .style('stroke', '#000000')\n .style('stroke-width', config.strokeWidth);\n};\n\n/**\n * Creates the force directed chart forces.\n * @param config the chart configuration\n * @param data the chart data\n * @returns the chart forces\n */\nconst createForces = (config: IForceDirectedChartOptions, data: IForceDirectedChartData) => {\n return d3\n .forceSimulation(data.nodes)\n .force(\n 'link',\n d3.forceLink().id(d => d.index ?? 0),\n )\n .force('charge', d3.forceManyBody().strength(config.charge.strength).theta(config.charge.theta).distanceMax(config.charge.distanceMax))\n .force('center', d3.forceCenter(config.width / config.centerCalcMod, config.height / config.centerCalcMod))\n .force(\n 'collision',\n d3.forceCollide().radius(d => config.collisionRadius),\n )\n .force(\n 'link',\n d3\n .forceLink(data.links)\n .id(d => d.index ?? 0)\n .distance(config.distance)\n .links(data.links),\n );\n};\n\n/**\n * The force directed chart node drag start handler.\n * @param event a drag event\n * @param datum the chart data\n * @param force the chart forces\n */\nconst nodeDragStartHandler = (\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n force: d3.Simulation<IForceDirectedChartDataNode, undefined>,\n) => {\n if (!event.active && typeof force !== 'undefined') {\n const alphaTarget = 0.3;\n force.alphaTarget(alphaTarget).restart();\n }\n datum.fx = event.x;\n datum.fy = event.y;\n};\n\n/**\n * The force directed chart node drag handler.\n * @param event a drag event\n * @param datum the chart data\n * @param config the chart configuration\n */\nconst nodeDragHandler = (\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n config: IForceDirectedChartOptions,\n) => {\n datum.fx = event.x > config.margin.left && event.x < config.width + config.margin.right ? event.x : datum.fx;\n datum.fy = event.y > config.margin.top && event.y < config.width + config.margin.bottom ? event.y : datum.fy;\n};\n\n/**\n * The force directed chart node drag end handler.\n * @param event a drag event\n * @param datum the chart data\n * @param force the chart forces\n */\nconst nodeDragEndHandler = (\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n force: d3.Simulation<IForceDirectedChartDataNode, undefined>,\n) => {\n if (!event.active && typeof force !== 'undefined') {\n force.alphaTarget(0);\n }\n datum.fx = null;\n datum.fy = null;\n};\n\n/**\n * Creates the force directed chart nodes.\n * @param svg the svg element\n * @param data the chart data\n * @param force the chart forces\n * @param config the chart configuration\n * @returns the chart nodes\n */\nconst createNodes = (\n svg: d3.Selection<SVGSVGElement, unknown, HTMLElement, unknown>,\n data: IForceDirectedChartData,\n force: d3.Simulation<IForceDirectedChartDataNode, undefined>,\n config: IForceDirectedChartOptions,\n) => {\n return svg\n .selectAll('.node')\n .data(data.nodes)\n .enter()\n .append('circle')\n .attr('class', 'node')\n .attr('r', val => {\n const base = 5;\n return base + (val.value ?? 0) + (val.linksCount ?? 0) * 2;\n })\n .style('stroke-width', val => {\n const base = 5;\n return base + (val.value ?? 0) + (val.linksCount ?? 0) * 2;\n })\n .style('fill', val => (typeof val.img === 'undefined' || val.img === '' ? '#f00000' : `url(${val.img})`))\n .call(\n d3\n .drag<SVGCircleElement, IForceDirectedChartDataNode>()\n .on(\n 'start',\n function (\n this: SVGCircleElement,\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n ) {\n nodeDragStartHandler(event, datum, force);\n },\n )\n .on(\n 'drag',\n function (\n this: SVGCircleElement,\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n ) {\n nodeDragHandler(event, datum, config);\n },\n )\n .on(\n 'end',\n function (\n this: SVGCircleElement,\n event: d3.D3DragEvent<SVGCircleElement, IForceDirectedChartDataNode, unknown>,\n datum: IForceDirectedChartDataNode,\n ) {\n nodeDragEndHandler(event, datum, force);\n },\n ),\n );\n};\n\n/**\n * Creates the force directed chart text labels.\n * @param svg the svg element\n * @param data the chart data\n * @returns the chart text labels\n */\nconst createText = (svg: d3.Selection<SVGSVGElement, unknown, HTMLElement, unknown>, data: IForceDirectedChartData) => {\n return svg\n .append('g')\n .selectAll('text')\n .data(data.nodes)\n .enter()\n .append('text')\n .attr('class', 'legend')\n .text(val => val.name ?? `N/A (id. ${val.index})`);\n};\n\n/**\n * Draws the force directed chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawForceDirectedChart = (\n container: ElementRef<HTMLDivElement>,\n data: IForceDirectedChartData,\n options?: Partial<IForceDirectedChartOptions>,\n) => {\n const config: IForceDirectedChartOptions = generateConfiguration<IForceDirectedChartOptions>(\n defaultForceDirectedChartConfig,\n options,\n {},\n );\n\n const { svg, g } = createContainer(container, config);\n\n applyChartData(g, data);\n\n const link = createLinks(svg, config, data);\n\n const force = createForces(config, data);\n\n const node = createNodes(svg, data, force, config);\n\n const text = createText(svg, data);\n\n force.on('tick', () => {\n ticked(link, node, text);\n });\n\n return config;\n};\n","import { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { ILineChartDataNode, ILineChartOptions, TLineChartData } from '../interfaces/line-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The line chart default configuration.\n */\nexport const defaultLineChartConfig: ILineChartOptions = Object.freeze(<ILineChartOptions>{\n chartTitle: '',\n width: 350,\n height: 350,\n margin: {\n top: 70,\n right: 50,\n bottom: 50,\n left: 50,\n },\n transitionDuration: 400,\n dotRadius: 3.5,\n xAxisTitle: '',\n yAxisTitle: '',\n ticks: {\n x: 5,\n y: 10,\n },\n displayAxisLabels: true,\n dateFormat: 'default',\n labelTextWrapWidth: 20, // the number of pixels after which a label needs to be given a new line\n color: d3.scaleOrdinal(d3.schemeCategory10),\n});\n\n/**\n * Creates a container for the line chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: ILineChartOptions) => {\n const id = container.nativeElement.id ?? 'line-0';\n\n d3.select(`#${id}`).select('svg').remove();\n const svg = d3\n .select(`#${id}`)\n .append('svg')\n .attr('width', config.width + config.margin.left + config.margin.right)\n .attr('height', config.height + config.margin.top + config.margin.bottom)\n .attr('class', id);\n const g = svg.append('g').attr('transform', `translate(${config.margin.left},${config.margin.top / 2})`);\n\n return { svg, g };\n};\n\n/**\n * Wraps the line chart axis labels text.\n * @param svgText the svg text elements\n * @param width the chart axis label width\n */\nconst wrapSvgText = (svgText: d3.Selection<d3.BaseType, unknown, SVGGElement, unknown>, width: number) => {\n svgText.each(function (this: d3.BaseType) {\n const text = d3.select<d3.BaseType, string>(this);\n const words = text.text().split(/\\s+/).reverse();\n if (words.length > 1) {\n let line: string[] = [];\n let lineNumber = 0;\n const lineHeight = 1.4;\n const y = text.attr('y');\n const x = text.attr('x');\n const dy = parseFloat(text.attr('dy') ?? 0);\n let tspan = text.text(null).append('tspan').attr('x', x).attr('y', y).attr('dy', `${dy}em`); // axis label\n\n let word = words.pop();\n\n while (typeof word !== 'undefined') {\n line.push(word ?? '');\n tspan.text(line.join(' '));\n if ((tspan.node()?.getComputedTextLength() ?? 0) > width) {\n line.pop();\n tspan.text(line.join(' '));\n line = [word ?? ''];\n lineNumber += 1;\n tspan = text\n .append('tspan')\n .attr('x', 0)\n .attr('y', y)\n .attr('dy', `${lineNumber * lineHeight + dy}em`)\n .text(word ?? '');\n }\n word = words.pop();\n }\n }\n });\n};\n\n/**\n * Creates the legend.\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst createLegend = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, config: ILineChartOptions) => {\n if (config.displayAxisLabels && config.xAxisTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '1em')\n .text(`x - ${config.xAxisTitle}`);\n }\n\n if (config.displayAxisLabels && config.yAxisTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, ${config.height + config.margin.bottom})`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '2.5em')\n .text(`y - ${config.yAxisTitle}`);\n }\n\n if (config.chartTitle !== '') {\n g.append('g')\n .attr('transform', `translate(0, 0)`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .attr('dx', '1.5em')\n .attr('dy', '-2em')\n .text(config.chartTitle);\n }\n};\n\n/**\n * Creates the x axis.\n * @param g the svg g element\n * @param x the x axis scale\n * @param config the chart configuration\n */\nconst createAxisX = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n x: d3.ScaleTime<number, number>,\n config: ILineChartOptions,\n) => {\n const xLabels = g\n .append('g')\n .attr('transform', `translate(0, ${config.height})`)\n .call(\n d3\n .axisBottom(x)\n .ticks(config.ticks.x)\n .tickFormat(d => {\n const date = new Date(d.valueOf());\n const formattingOffset = 10;\n const day = date.getDate();\n const dd = day < formattingOffset ? `0${day}` : day;\n const month = date.getMonth() + 1;\n const mm = month < formattingOffset ? `0${month}` : month;\n const year = date.getFullYear().toString();\n const yy = year.slice(2);\n const hours = date.getHours();\n const hour = hours < formattingOffset ? `0${hours}` : hours;\n const minutes = date.getMinutes();\n const minute = minutes < formattingOffset ? `0${minutes}` : minutes;\n let formattedDate = `${dd}/${mm}/${yy} ${hour}:${minute}`;\n switch (config.dateFormat) {\n case 'dd/mm/yyyy':\n formattedDate = `${dd}/${mm}/${year}`;\n break;\n case 'dd/mm/yy':\n formattedDate = `${dd}/${mm}/${yy}`;\n break;\n case 'mm/yyyy':\n formattedDate = `${mm}/${year}`;\n break;\n case 'yyyy':\n formattedDate = `${year}`;\n break;\n default:\n break;\n }\n return formattedDate;\n }),\n )\n .append('text');\n\n g.selectAll('text').call(wrapSvgText, config.labelTextWrapWidth);\n\n if (config.displayAxisLabels) {\n xLabels.attr('transform', `translate(${config.width}, 0)`).attr('class', 'legend').attr('dx', '1.5em').attr('dy', '0.7em').text('x');\n }\n};\n\n/**\n * Creates the y axis.\n * @param g the svg g element\n * @param y the y axis scale\n * @param config the chart configuration\n */\nconst createAxisY = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n y: d3.ScaleLinear<number, number>,\n config: ILineChartOptions,\n) => {\n const yLabels = g\n .append('g')\n .call(\n d3\n .axisLeft(y)\n .ticks(config.ticks.y)\n .tickFormat(d => `${d}`),\n )\n .append('text');\n\n if (config.displayAxisLabels) {\n yLabels.attr('class', 'legend').attr('dy', '-1.5em').attr('class', 'legend').text('y');\n }\n};\n\n/**\n * The mouse over event handler.\n * @param self an svg circle element\n * @param d the chart data node\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst onMouseOver = (\n self: SVGCircleElement,\n d: ILineChartDataNode,\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n config: ILineChartOptions,\n) => {\n const duration = 400;\n d3.select(self)\n .transition()\n .duration(duration)\n .attr('r', config.dotRadius * 2);\n\n const tooltipShift = 4;\n const tooltipDy = -10;\n g.append('text')\n .attr('class', 'chart-tooltip')\n .style('font-size', '11px')\n .attr('dx', () => (config.width - config.margin.left - config.margin.right) / tooltipShift)\n .attr('dy', () => tooltipDy)\n .text(() => `${d.value} (${new Date(d.timestamp).toUTCString()})`)\n .transition()\n .duration(config.transitionDuration)\n .style('opacity', 1);\n};\n\n/**\n * The mouse out event handler.\n * @param self an svg circle element\n * @param config the chart configuration\n */\nconst onMouseOut = (self: SVGCircleElement, config: ILineChartOptions) => {\n const duration = 400;\n d3.select(self).attr('class', 'dot');\n d3.select(self).transition().duration(duration).attr('r', config.dotRadius);\n d3.selectAll('.chart-tooltip')\n .transition()\n .duration(config.transitionDuration / 2)\n .style('opacity', 0)\n .remove();\n};\n\n/**\n * Draws the chart lines, dots, and sets the mouse pointer events.\n * @param g the svg g element\n * @param x the x axis scale\n * @param y the y axis scale\n * @param config the chart configuration\n * @param data the chart data\n */\nconst drawLinesDotsAndSetPointerEvents = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n x: d3.ScaleTime<number, number>,\n y: d3.ScaleLinear<number, number>,\n config: ILineChartOptions,\n data: TLineChartData[],\n) => {\n const line = d3\n .line<ILineChartDataNode>()\n .x(d => x(d.timestamp))\n .y(d => y(d.value))\n .curve(d3.curveMonotoneX);\n\n const flatData = data.flat();\n\n for (let c = 0, maxC = data.length; c < maxC; c += 1) {\n const chunk = data[c];\n\n g.append('path')\n .attr('id', `line-${c}`)\n .style('fill', 'none')\n .style('stroke', config.color(c.toString()))\n .style('stroke-width', '2px')\n .attr('d', line(chunk));\n }\n\n g.selectAll('.dot')\n .data(flatData)\n .enter()\n .append('circle')\n .attr('class', 'dot')\n .style('pointer-events', 'all')\n .style('fill', (d, i) => config.color(i.toString()))\n .on('mouseover', function (this, event, d) {\n return onMouseOver(this, d, g, config);\n })\n .on('mouseout', function (this) {\n return onMouseOut(this, config);\n })\n .attr('cx', function (this, d) {\n return x(d.timestamp);\n })\n .attr('cy', function (this, d) {\n return y(d.value);\n })\n .attr('r', 0)\n .transition()\n .ease(d3.easeLinear)\n .duration(config.transitionDuration)\n .delay((d, i) => {\n const multiplier = 50;\n return i * multiplier;\n })\n .attr('r', config.dotRadius);\n};\n\n/**\n * Draws the line chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawLineChart = (container: ElementRef<HTMLDivElement>, data: TLineChartData[], options?: Partial<ILineChartOptions>) => {\n const config: ILineChartOptions = generateConfiguration<ILineChartOptions>(defaultLineChartConfig, options, {});\n\n const { g } = createContainer(container, config);\n\n const range = data.reduce(\n (accumulator: { minTime: number; maxTime: number; maxValue: number }, arr) => {\n const timestamps = arr.map(item => item.timestamp);\n const minItem = Math.min(...timestamps);\n const maxItem = Math.max(...timestamps);\n const minTime = Math.min(minItem, accumulator.minTime);\n const maxTime = Math.max(maxItem, accumulator.maxTime);\n\n const values = arr.map(item => item.value);\n const maxItemValue = Math.max(...values);\n const maxValue = Math.max(maxItemValue, accumulator.maxValue);\n return { minTime, maxTime, maxValue };\n },\n { minTime: Number(Infinity), maxTime: -Infinity, maxValue: -Infinity },\n );\n\n const x = d3.scaleTime([0, config.width]).domain([range.minTime, range.maxTime]);\n const y = d3.scaleLinear([config.height, 0]).domain([0, range.maxValue ?? 1]);\n\n createAxisX(g, x, config);\n\n createAxisY(g, y, config);\n\n createLegend(g, config);\n\n drawLinesDotsAndSetPointerEvents(g, x, y, config, data);\n\n return config;\n};\n","import { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { IPieChartDataNode, IPieChartOptions } from '../interfaces/pie-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The pie chart default configuration.\n */\nexport const defaultPieChartConfig: IPieChartOptions = Object.freeze(<IPieChartOptions>{\n chartTitle: '',\n width: 600,\n height: 600,\n margin: {\n top: 20,\n right: 20,\n bottom: 20,\n left: 20,\n },\n innerRadius: 0, // increase inner radius to render a donut chart\n showLabels: true,\n labelRadiusModifier: 50,\n labelTextWrapWidth: 60,\n transitionDuration: 1000,\n color: d3.scaleOrdinal(d3.schemeCategory10),\n});\n\n/**\n * Creates a container for the pie chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IPieChartOptions) => {\n const id = container.nativeElement.id ?? 'pie-0';\n\n d3.select(`#${id}`).select('svg').remove();\n const svg = d3\n .select(`#${id}`)\n .append('svg')\n .attr('width', config.width + config.margin.left + config.margin.right)\n .attr('height', config.height + config.margin.top + config.margin.bottom)\n .attr('class', id);\n const g = svg\n .append('g')\n .attr('transform', `translate(${config.width / 2 + config.margin.left},${config.height / 2 + config.margin.top})`);\n\n return { svg, g };\n};\n\n/**\n * Draws the pie chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the chart configuration\n */\nexport const drawPieChart = (container: ElementRef<HTMLDivElement>, data: IPieChartDataNode[], options?: Partial<IPieChartOptions>) => {\n const config: IPieChartOptions = generateConfiguration<IPieChartOptions>(defaultPieChartConfig, options, {});\n\n const { g } = createContainer(container, config);\n\n const pie = d3.pie<IPieChartDataNode>().value(datum => datum.y);\n\n const radius = Math.min(config.width, config.height) / 2;\n\n const arc = d3.arc<d3.PieArcDatum<IPieChartDataNode>>().innerRadius(config.innerRadius).outerRadius(radius);\n\n const arcs = g\n .selectAll('arc')\n .data(pie(data))\n .enter()\n .append('g')\n .attr('class', 'arc')\n .on('mouseover', function (this, event: MouseEvent, d) {\n this.style.opacity = '0.8';\n\n const tooltipText = `${d.data.key}: ${d.data.y}`;\n\n g.append('text')\n .attr('class', 'chart-tooltip')\n .style('opacity', 0)\n .attr('dx', -config.width / (2 * 2 * 2))\n .attr('dy', config.height / 2 + config.margin.top)\n .text(tooltipText)\n .transition()\n .duration(config.transitionDuration)\n .style('opacity', 1);\n })\n .on('mouseout', function (this, event, d) {\n this.style.opacity = 'unset';\n d3.selectAll('.chart-tooltip')\n .transition()\n .duration(config.transitionDuration / 2)\n .style('opacity', 0)\n .remove();\n });\n\n arcs\n .append('path')\n .attr('fill', (d, i) => config.color(i.toString()))\n .attr('d', arc);\n\n if (config.showLabels) {\n const label = d3\n .arc<d3.PieArcDatum<IPieChartDataNode>>()\n .innerRadius(radius)\n .outerRadius(radius + config.labelRadiusModifier);\n\n const textDy = 5;\n arcs\n .append('text')\n .attr('class', 'legend')\n .attr('text-anchor', 'middle')\n .attr('dy', textDy)\n .attr('transform', d => `translate(${label.centroid(d)})`)\n .style('font-size', '12px')\n .text(d => d.data.y);\n }\n\n return config;\n};\n","import { ElementRef } from '@angular/core';\nimport * as d3 from 'd3';\n\nimport { IRadarChartDataNode, IRadarChartOptions, TRadarChartData } from '../interfaces/radar-chart.interface';\nimport { generateConfiguration } from './configuration.util';\n\n/**\n * The radar chart default configuration.\n */\nexport const defaultRadarChartConfig: IRadarChartOptions = Object.freeze(<IRadarChartOptions>{\n chartTitle: '',\n width: 350,\n height: 350,\n margin: {\n top: 50,\n right: 50,\n bottom: 50,\n left: 50,\n },\n levels: 3, // how many levels or inner circles should there be drawn\n maxValue: 0, // what is the value that the biggest circle will represent\n lineFactor: 1.1, // how much farther than the radius of the outer circle should the lines be stretched\n labelFactor: 1.15, // how much farther than the radius of the outer circle should the labels be placed\n labelTextWrapWidth: 60, // the number of pixels after which a label needs to be given a new line\n opacityArea: 0.35, // the opacity of the area of the blob\n dotRadius: 4, // the size of the colored circles of each blog\n opacityCircles: 0.1, // the opacity of the circles of each blob\n strokeWidth: 2, // the width of the stroke around each blob\n roundStrokes: false, // if true the area and stroke will follow a round path (cardinal-closed)\n transitionDuration: 200,\n color: d3.scaleOrdinal(d3.schemeCategory10),\n});\n\n/**\n * Creates a container for the radar chart.\n * @param container the chart container\n * @param config the chart configuration\n * @returns the object with the svg element and the g element\n */\nconst createContainer = (container: ElementRef<HTMLDivElement>, config: IRadarChartOptions) => {\n const id = container.nativeElement.id ?? 'radar-0';\n\n d3.select(`#${id}`).select('svg').remove();\n const svg = d3\n .select(`#${id}`)\n .append('svg')\n .attr('width', config.width + config.margin.left + config.margin.right)\n .attr('height', config.height + config.margin.top + config.margin.bottom)\n .attr('class', id);\n const g = svg\n .append('g')\n .attr('transform', `translate(${config.width / 2 + config.margin.left},${config.height / 2 + config.margin.top})`);\n\n return { svg, g };\n};\n\n/**\n * Draws the radar chart circular grid.\n * @param axisGrid the chart axis grid\n * @param radius the chart radius value\n * @param maxValue the maximum value of the chart axis\n * @param config the chart configuration\n */\nconst drawCircularGrid = (\n axisGrid: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n radius: number,\n maxValue: number,\n config: IRadarChartOptions,\n) => {\n // background circles\n axisGrid\n .selectAll('.levels')\n .data(d3.range(1, config.levels + 1).reverse())\n .enter()\n .append('circle')\n .attr('class', 'grid-circle')\n .attr('r', (d, i) => (radius / config.levels) * d)\n .style('fill', '#CDCDCD')\n .style('stroke', '#CDCDCD')\n .style('fill-opacity', config.opacityCircles)\n .style('filter', 'url(#glow)');\n // text indicating at what % each level is\n const axisGridX = 4;\n axisGrid\n .selectAll('.axis-label')\n .data(d3.range(1, config.levels + 1).reverse())\n .enter()\n .append('text')\n .attr('class', 'axis-label')\n .attr('x', axisGridX)\n .attr('y', d => (-d * radius) / config.levels)\n .attr('dy', '0.4em')\n .style('font-size', '10px')\n .attr('fill', '#737373')\n .text((d, i) => (maxValue * d) / config.levels);\n};\n\n/**\n * Wraps the chart axis labels text.\n * @param svgText the svg text elements\n * @param width the chart axis label width\n */\nconst wrapSvgText = (svgText: d3.Selection<SVGTextElement, string, SVGGElement, unknown>, width: number) => {\n svgText.each(function (this: SVGTextElement) {\n const text = d3.select<SVGElement, string>(this);\n const words = text.text().split(/\\s+/).reverse();\n if (words.length > 1) {\n let line: string[] = [];\n let lineNumber = 0;\n const lineHeight = 1.4;\n const y = text.attr('y');\n const x = text.attr('x');\n const dy = parseFloat(text.attr('dy') ?? 0);\n let tspan = text.text(null).append('tspan').attr('x', x).attr('y', y).attr('dy', `${dy}em`);\n\n let word = words.pop();\n\n while (typeof word !== 'undefined') {\n line.push(word ?? '');\n tspan.text(line.join(' '));\n if ((tspan.node()?.getComputedTextLength() ?? 0) > width) {\n line.pop();\n tspan.text(line.join(' '));\n line = [word ?? ''];\n lineNumber += 1;\n tspan = text\n .append('tspan')\n .attr('x', x)\n .attr('y', y)\n .attr('dy', `${lineNumber * lineHeight + dy}em`)\n .text(word ?? '');\n }\n word = words.pop();\n }\n }\n });\n};\n\n/**\n * Creates the legend.\n * @param g the svg g element\n * @param config the chart configuration\n */\nconst createLegend = (g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>, config: IRadarChartOptions) => {\n if (config.chartTitle !== '') {\n g.append('g')\n .attr('transform', `translate(-${config.width / 2 + config.margin.left / 2}, -${config.height / 2 + config.margin.top / 2})`)\n .append('text')\n .style('font-size', '12px')\n .attr('class', 'legend')\n .text(config.chartTitle);\n }\n};\n\n/**\n * Draws the radar chart axis.\n * @param axisGrid the chart axis grid\n * @param axisNames the chart axis names\n * @param radiusScale the chart radius scale\n * @param maxValue the maximum value of the chart axis\n * @param angleSlice the chart angle slice value\n * @param config the chart configuration\n */\nconst drawAxis = (\n axisGrid: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n axisNames: string[],\n radiusScale: d3.ScaleLinear<number, number>,\n maxValue: number,\n angleSlice: number,\n config: IRadarChartOptions,\n) => {\n // create the straight lines radiating outward from the center\n const axis = axisGrid.selectAll('.axis').data(axisNames).enter().append('g').attr('class', 'axis');\n // append the lines\n axis\n .append('line')\n .attr('x1', 0)\n .attr('y1', 0)\n .attr('x2', (d, i) => radiusScale(maxValue * config.lineFactor) * Math.cos(angleSlice * i - Math.PI / 2))\n .attr('y2', (d, i) => radiusScale(maxValue * config.lineFactor) * Math.sin(angleSlice * i - Math.PI / 2))\n .attr('class', 'line')\n .style('stroke', 'white')\n .style('stroke-width', '2px');\n // append the labels at each axis\n axis\n .append('text')\n .attr('class', 'legend')\n .style('font-size', '11px')\n .attr('text-anchor', 'middle')\n .attr('dy', '0.35em')\n .attr('x', (d, i) => radiusScale(maxValue * config.labelFactor) * Math.cos(angleSlice * i - Math.PI / 2))\n .attr('y', (d, i) => radiusScale(maxValue * config.labelFactor) * Math.sin(angleSlice * i - Math.PI / 2))\n .text(d => d)\n .call(wrapSvgText, config.labelTextWrapWidth);\n};\n\n/**\n * Draws the radar chart blobs.\n * @param radiusScale the chart radius scale\n * @param angleSlice the chart angle slice value\n * @param g the svg g element\n * @param data the chart data\n * @param config the chart configuration\n */\nconst drawRadarChartBlobs = (\n radiusScale: d3.ScaleLinear<number, number>,\n angleSlice: number,\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n data: TRadarChartData,\n config: IRadarChartOptions,\n) => {\n // the radial line function\n const radarLine = d3\n .lineRadial<IRadarChartDataNode>()\n .radius(d => radiusScale(d.value))\n .angle((d, i) => i * angleSlice);\n // create a wrapper for the blobs\n const blobWrapper = g.selectAll('.radar-wrapper').data(data).enter().append('g').attr('class', 'radar-wrapper');\n // append the backgrounds\n blobWrapper\n .append('path')\n .attr('class', 'radar-area')\n .attr('d', (d, i) => radarLine(d))\n .style('fill', (d, i) => config.color(i.toString()))\n .style('fill-opacity', config.opacityArea)\n .on('mouseover', function (d, i) {\n // dim all blobs\n const radarAreaFillOpacity = 0.1;\n d3.selectAll('.radar-area').transition().duration(config.transitionDuration).style('fill-opacity', radarAreaFillOpacity);\n // bring back the hovered over blob\n const fillOpacity = 0.7;\n d3.select(this).transition().duration(config.transitionDuration).style('fill-opacity', fillOpacity);\n })\n .on('mouseout', () => {\n // bring back all blobs\n d3.selectAll('.radar-area').transition().duration(config.transitionDuration).style('fill-opacity', config.opacityArea);\n });\n // create the outlines\n blobWrapper\n .append('path')\n .attr('class', 'radar-stroke')\n .attr('d', (d, i) => radarLine(d))\n .style('stroke-width', `${config.strokeWidth}px`)\n .style('stroke', (d, i) => config.color(i.toString()))\n .style('fill', 'none')\n .style('filter', 'url(#glow)');\n // append the circles\n const blobWrapperFillOpacity = 0.8;\n blobWrapper\n .selectAll('.radar-circle')\n .data((d, i) => d)\n .enter()\n .append('circle')\n .attr('class', 'radar-circle')\n .attr('r', config.dotRadius)\n .attr('cx', (d, i) => radiusScale(d.value) * Math.cos(angleSlice * i - Math.PI / 2))\n .attr('cy', (d, i) => radiusScale(d.value) * Math.sin(angleSlice * i - Math.PI / 2))\n .style('fill', (d, i, j) => config.color(j.toString()))\n .style('fill-opacity', blobWrapperFillOpacity);\n};\n\n/**\n * Appends the invisible tooltip circles.\n * @param g the svg g element\n * @param data the chart data\n * @param radiusScale the chart radius scale\n * @param angleSlice the chart angle slice value\n * @param config the chart configuration\n */\nconst appendInvisibleTooltipCircles = (\n g: d3.Selection<SVGGElement, unknown, HTMLElement, unknown>,\n data: TRadarChartData,\n radiusScale: d3.ScaleLinear<number, number>,\n angleSlice: number,\n config: IRadarChartOptions,\n) => {\n // wrapper for the invisible circles on top\n const blobCircleWrapper = g.selectAll('.radar-circle-wrapper').data(data).enter().append('g').attr('class', 'radar-circle-wrapper');\n // append a set of invisible circles on top for the mouseover pop-up\n const blobCircleWrapperRadiusMultiplier = 1.5;\n blobCircleWrapper\n .selectAll<SVGElement, IRadarChartDataNode>('.radar-invisible-circle')\n .data((d, i) => d)\n .enter()\n .append('circle')\n .attr('class', 'radar-invisible-circle')\n .attr('r', config.dotRadius * blobCircleWrapperRadiusMultiplier)\n .attr('cx', (d, i) => radiusScale(d.value) * Math.cos(angleSlice * i - Math.PI / 2))\n .attr('cy', (d, i) => radiusScale(d.value) * Math.sin(angleSlice * i - Math.PI / 2))\n .style('fill', 'none')\n .style('pointer-events', 'all')\n .on('mouseover', function (event: MouseEvent, i) {\n const modifier = 10;\n const newX = parseFloat(d3.select(this).attr('cx')) - modifier;\n const newY = parseFloat(d3.select(this).attr('cy')) - modifier;\n\n const nodeData = (event.target as unknown as Record<string, IRadarChartDataNode>)['__data__'];\n const tooltipText = `${nodeData.value} ${nodeData.unit}`;\n g.append('text')\n .attr('class', 'chart-tooltip')\n .style('opacity', 0)\n .attr('x', newX)\n .attr('y', newY)\n .text(tooltipText)\n .transition()\n .duration(config.transitionDuration)\n .style('opacity', 1);\n })\n .on('mouseout', () => {\n d3.selectAll('.chart-tooltip')\n .transition()\n .duration(config.transitionDuration / 2)\n .style('opacity', 0)\n .remove();\n });\n};\n\n/**\n * Draws the radar chart.\n * @param container the chart container\n * @param data the chart data\n * @param options the chart options\n * @returns the hart configuration\n */\nexport const drawRadarChart = (container: ElementRef<HTMLDivElement>, data: TRadarChartData, options?: Partial<IRadarChartOptions>) => {\n const config: IRadarChartOptions = generateConfiguration<IRadarChartOptions>(defaultRadarChartConfig, options, {});\n\n const maxValue = Math.max(config.maxValue, d3.max(data, i => d3.max(i.map(o => o.value))) ?? 0);\n const axisNames = data[0].map((i, j) => i.axis);\n const totalAxis = axisNames.length;\n const radius = Math.min(config.width / 2 - config.margin.left / 2, config.height / 2 - config.margin.top / 2);\n const angleSlice = (Math.PI * 2) / totalAxis;\n const radiusScale = d3.scaleLinear([0, radius]).domain([0, maxValue]);\n\n const { g } = createContainer(container, config);\n\n // filter for the outside glow\n const filter = g.append('defs').append('filter').attr('id', 'glow');\n filter.append('feGaussianBlur').attr('stdDeviation', '2.5').attr('result', 'coloredBlur');\n const feMerge = filter.append('feMerge');\n feMerge.append('feMergeNode').attr('in', 'coloredBlur');\n feMerge.append('feMergeNode').attr('in', 'SourceGraphic');\n\n const axisGrid = g.append('g').attr('class', 'axis-wrapper');\n\n drawCircularGrid(axisGrid, radius, maxValue, config);\n\n drawAxis(axisGrid, axisNames, radiusScale, maxValue, angleSlice, config);\n\n createLegend(g, config);\n\n drawRadarChartBlobs(radiusScale, angleSlice, g, data, config);\n\n appendInvisibleTooltipCircles(g, data, radiusScale, angleSlice, config);\n\n return config;\n};\n","import { InjectionToken } from '@angular/core';\n\nimport { drawBarChart } from '../util/bar-chart.util';\nimport { drawForceDirectedChart } from '../util/force-directed-chart.util';\nimport { drawLineChart } from '../util/line-chart.util';\nimport { drawPieChart } from '../util/pie-chart.util';\nimport { drawRadarChart } from '../util/radar-chart.util';\n\nexport interface ID3ChartFactory {\n drawPieChart: typeof drawPieChart;\n drawRadarChart: typeof drawRadarChart;\n drawBarChart: typeof drawBarChart;\n drawLineChart: typeof drawLineChart;\n drawForceDirectedChart: typeof drawForceDirectedChart;\n}\n\nexport const d3ChartFactory = (): ID3ChartFactory => ({\n drawPieChart,\n drawRadarChart,\n drawBarChart,\n drawLineChart,\n drawForceDirectedChart,\n});\n\nexport const D3_CHART_FACTORY = new InjectionToken('D3_CHART_FACTORY', {\n providedIn: 'root',\n factory: d3ChartFactory,\n});\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n SimpleChange,\n ViewChild,\n} from '@angular/core';\n\nimport { IBarChartDataNode, IBarChartOptions, TBarChartData } from '../../interfaces/bar-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { defaultBarChartConfig } from '../../util';\n\ninterface IInputChanges {\n data?: SimpleChange | null;\n options?: SimpleChange | null;\n}\n\n@Component({\n selector: 'app-bar-chart',\n templateUrl: './bar-chart.component.html',\n styleUrls: ['./bar-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppBarChartComponent implements AfterViewInit, OnChanges {\n /**\n * The chart id.\n */\n @Input() public chartId = 'bar-0';\n\n /**\n * The chart data.\n */\n @Input() public data: TBarChartData = [];\n\n /**\n * The chart options.\n */\n @Input() public options: Partial<IBarChartOptions> = {};\n\n /**\n * D3 chart view child reference.\n */\n @ViewChild('container') private readonly container?: ElementRef<HTMLDivElement>;\n\n constructor(@Inject(DOCUMENT) private readonly doc: Document, @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory) {}\n\n /**\n * The chart options constructor.\n * @returns chart options\n */\n private chartOptions() {\n const bodyWidthAdjustment = 10;\n const width = Math.min(\n this.options.width ?? defaultBarChartConfig.width,\n this.doc.body.clientWidth - defaultBarChartConfig.margin.left - defaultBarChartConfig.margin.right - bodyWidthAdjustment,\n );\n const height = Math.min(\n this.options.height ?? width,\n this.doc.body.clientWidth - defaultBarChartConfig.margin.top - defaultBarChartConfig.margin.bottom - bodyWidthAdjustment,\n );\n const yAxisTicks = Math.max(...this.data.map(item => item.value));\n const options: Partial<IBarChartOptions> = {\n width,\n height,\n yAxisTicks,\n ...this.options,\n };\n return options;\n }\n\n /**\n * Draws the chart.\n */\n private drawChart() {\n if (typeof this.container !== 'undefined') {\n const options = this.chartOptions();\n this.d3Factory.drawBarChart(this.container, this.data, options);\n }\n }\n\n /**\n * Actually draws the chart after the component view is initialized.\n */\n public ngAfterViewInit(): void {\n this.drawChart();\n }\n\n /**\n * Redraws the chart on changes.\n */\n public ngOnChanges(changes: IInputChanges): void {\n const data: IBarChartDataNode[][] = changes.data?.currentValue;\n const options: Partial<IBarChartOptions> = changes.options?.currentValue;\n if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {\n this.drawChart();\n }\n }\n}\n","<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n SimpleChange,\n ViewChild,\n} from '@angular/core';\n\nimport { IPieChartDataNode, IPieChartOptions } from '../../interfaces/pie-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\n\ninterface IInputChanges {\n data?: SimpleChange | null;\n options?: SimpleChange | null;\n}\n\n@Component({\n selector: 'app-pie-chart',\n templateUrl: './pie-chart.component.html',\n styleUrls: ['./pie-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppPieChartComponent implements AfterViewInit, OnChanges {\n /**\n * The chart id.\n */\n @Input() public chartId = 'pie-0';\n\n /**\n * The chart data.\n */\n @Input() public data: IPieChartDataNode[] = [];\n\n /**\n * The chart options.\n */\n @Input() public options: Partial<IPieChartOptions> = {};\n\n /**\n * D3 chart view child reference.\n */\n @ViewChild('container') private readonly container?: ElementRef<HTMLDivElement>;\n\n constructor(@Inject(DOCUMENT) private readonly doc: Document, @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory) {}\n\n /**\n * The chart options constructor.\n * @returns chart options\n */\n private chartOptions() {\n const margin: IPieChartOptions['margin'] = { top: 50, right: 50, bottom: 50, left: 50 };\n const minWidth = 350;\n const modifiers = {\n width: 10,\n height: 20,\n };\n const width = Math.min(minWidth, this.doc.body.clientWidth - modifiers.width) - margin.left - margin.right;\n const height = Math.min(width, this.doc.body.clientHeight - margin.top - margin.bottom - modifiers.height);\n const options: Partial<IPieChartOptions> = {\n width,\n height,\n margin,\n ...this.options,\n };\n return options;\n }\n\n /**\n * Draws the chart.\n */\n private drawChart() {\n if (typeof this.container !== 'undefined') {\n const options = this.chartOptions();\n this.d3Factory.drawPieChart(this.container, this.data, options);\n }\n }\n\n /**\n * Actually draws the chart after the component view is initialized.\n */\n public ngAfterViewInit(): void {\n this.drawChart();\n }\n\n /**\n * Redraws the chart on changes.\n */\n public ngOnChanges(changes: IInputChanges): void {\n const data: IPieChartDataNode[] | undefined = changes.data?.currentValue;\n const options: Partial<IPieChartOptions> = changes.options?.currentValue;\n if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {\n this.drawChart();\n }\n }\n}\n","<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n SimpleChange,\n ViewChild,\n} from '@angular/core';\n\nimport { IRadarChartDataNode, IRadarChartOptions } from '../../interfaces/radar-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { defaultRadarChartConfig } from '../../util';\n\ninterface IInputChanges {\n data?: SimpleChange | null;\n options?: SimpleChange | null;\n}\n\n@Component({\n selector: 'app-radar-chart',\n templateUrl: './radar-chart.component.html',\n styleUrls: ['./radar-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppRadarChartComponent implements AfterViewInit, OnChanges {\n /**\n * The chart id.\n */\n @Input() public chartId = 'radar-0';\n\n /**\n * The chart data.\n */\n @Input() public data: IRadarChartDataNode[][] = [[]];\n\n /**\n * The chart options.\n */\n @Input() public options: Partial<IRadarChartOptions> = {};\n\n /**\n * D3 chart view child reference.\n */\n @ViewChild('container') private readonly container?: ElementRef<HTMLDivElement>;\n\n constructor(@Inject(DOCUMENT) private readonly doc: Document, @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory) {}\n\n /**\n * The chart options constructor.\n * @returns chart options\n */\n private chartOptions() {\n const xsOffset = 500;\n const smOffset = 800;\n const mdOffset = 1024;\n const labelFactorDefault = 1.15;\n const labelFactorMd = 1.15;\n const labelFactorSm = 1.15;\n const labelFactorXs = 1.4;\n const wrapWidthDefault = 85;\n const wrapWidthMd = 80;\n const wrapWidthXs = 70;\n const bodyWidthAdjustment = 10;\n const width = Math.min(\n this.options.width ?? defaultRadarChartConfig.width,\n this.doc.body.clientWidth - defaultRadarChartConfig.margin.left - defaultRadarChartConfig.margin.right - bodyWidthAdjustment,\n );\n const height = Math.min(\n width,\n this.doc.body.clientHeight - defaultRadarChartConfig.margin.top - defaultRadarChartConfig.margin.bottom - bodyWidthAdjustment,\n );\n const labelFactor =\n width <= xsOffset ? labelFactorXs : width <= smOffset ? labelFactorSm : width <= mdOffset ? labelFactorMd : labelFactorDefault;\n const labelTextWrapWidth = width <= xsOffset ? wrapWidthXs : width <= mdOffset ? wrapWidthMd : wrapWidthDefault;\n const options: Partial<IRadarChartOptions> = {\n width,\n height,\n maxValue: this.data[0].reduce((accumulator, item) => (item.value > accumulator ? item.value : accumulator), 0) + 1,\n levels: 5,\n roundStrokes: true,\n labelFactor,\n labelTextWrapWidth,\n ...this.options,\n };\n return options;\n }\n\n /**\n * Draws the chart.\n */\n private drawChart() {\n if (typeof this.container !== 'undefined') {\n const options = this.chartOptions();\n this.d3Factory.drawRadarChart(this.container, this.data, options);\n }\n }\n\n /**\n * Actually draws the chart after the component view is initialized.\n */\n public ngAfterViewInit(): void {\n this.drawChart();\n }\n\n /**\n * Redraws the chart on changes.\n */\n public ngOnChanges(changes: IInputChanges): void {\n const currentValue: IRadarChartDataNode[][] = changes.data?.currentValue;\n const options: Partial<IRadarChartOptions> = changes.options?.currentValue;\n if ((typeof currentValue !== 'undefined' && currentValue !== null) || (typeof options !== 'undefined' && options !== null)) {\n this.drawChart();\n }\n }\n}\n","<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n SimpleChange,\n ViewChild,\n} from '@angular/core';\n\nimport { IForceDirectedChartData, IForceDirectedChartOptions } from '../../interfaces/force-directed-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\n\ninterface IInputChanges {\n data?: SimpleChange | null;\n options?: SimpleChange | null;\n}\n\n@Component({\n selector: 'app-force-directed-chart',\n templateUrl: './force-directed-chart.component.html',\n styleUrls: ['./force-directed-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppForceDirectedChartComponent implements AfterViewInit, OnChanges {\n /**\n * The chart identifier.\n */\n @Input() public chartId = 'force-0';\n\n /**\n * The chart data.\n */\n @Input() public data: IForceDirectedChartData = {\n domains: [],\n entities: [],\n links: [],\n nodes: [],\n };\n\n /**\n * The chart options.\n */\n @Input() public options: Partial<IForceDirectedChartOptions> = {};\n\n /**\n * The chart container view child reference.\n */\n @ViewChild('container') private readonly container?: ElementRef<HTMLDivElement>;\n\n constructor(@Inject(DOCUMENT) private readonly doc: Document, @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory) {}\n\n /**\n * The chart options constructor.\n * @returns chart options\n */\n private chartOptions() {\n const margin = { top: 50, right: 50, bottom: 50, left: 50 };\n const minWidth = 350;\n const modifiers = {\n width: 10,\n height: 20,\n };\n const width = Math.min(minWidth, this.doc.body.clientWidth - modifiers.width) - margin.left - margin.right;\n const height = Math.min(width, this.doc.body.clientHeight - margin.top - margin.bottom - modifiers.height);\n const options: Partial<IForceDirectedChartOptions> = { width, height, margin, ...this.options };\n return options;\n }\n\n /**\n * Draws the chart.\n */\n private drawChart() {\n if (typeof this.container !== 'undefined') {\n const options = this.chartOptions();\n this.d3Factory.drawForceDirectedChart(this.container, this.data, options);\n }\n }\n\n /**\n * Actually draws the chart after the component view is initialized.\n */\n public ngAfterViewInit(): void {\n this.drawChart();\n }\n\n /**\n * Redraws the chart on changes.\n */\n public ngOnChanges(changes: IInputChanges): void {\n const prevData: IForceDirectedChartData | undefined = changes.data?.previousValue;\n const nextData: IForceDirectedChartData | undefined = changes.data?.currentValue;\n const options: Partial<IForceDirectedChartOptions> = changes.options?.currentValue;\n if (\n (Boolean(changes.data?.currentValue) && (prevData?.nodes ?? []).length !== (nextData?.nodes ?? []).length) ||\n (typeof options !== 'undefined' && options !== null)\n ) {\n this.drawChart();\n }\n }\n}\n","<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Inject,\n Input,\n OnChanges,\n SimpleChange,\n ViewChild,\n} from '@angular/core';\n\nimport { ILineChartDataNode, ILineChartOptions, TLineChartData } from '../../interfaces/line-chart.interface';\nimport { D3_CHART_FACTORY, ID3ChartFactory } from '../../providers/d3-chart-factory.provider';\nimport { defaultLineChartConfig } from '../../util';\n\ninterface IInputChanges {\n data?: SimpleChange | null;\n options?: SimpleChange | null;\n}\n\n@Component({\n selector: 'app-line-chart',\n templateUrl: './line-chart.component.html',\n styleUrls: ['./line-chart.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppLineChartComponent implements AfterViewInit, OnChanges {\n /**\n * The chart id.\n */\n @Input() public chartId = 'line-0';\n\n /**\n * The chart data.\n */\n @Input() public data: TLineChartData[] = [];\n\n /**\n * The chart options.\n */\n @Input() public options: Partial<ILineChartOptions> = {};\n\n /**\n * D3 chart view child reference.\n */\n @ViewChild('container') private readonly container?: ElementRef<HTMLDivElement>;\n\n constructor(@Inject(DOCUMENT) private readonly doc: Document, @Inject(D3_CHART_FACTORY) private readonly d3Factory: ID3ChartFactory) {}\n\n /**\n * The chart options constructor.\n * @returns chart options\n */\n private chartOptions() {\n const bodyWidthAdjustment = 10;\n const width = Math.min(\n this.options.width ?? defaultLineChartConfig.width,\n this.doc.body.clientWidth - defaultLineChartConfig.margin.left - defaultLineChartConfig.margin.right - bodyWidthAdjustment,\n );\n const height = Math.min(\n this.options.height ?? width,\n this.doc.body.clientWidth - defaultLineChartConfig.margin.top - defaultLineChartConfig.margin.bottom - bodyWidthAdjustment,\n );\n const xTicksScale = 75;\n const yTicksScale = 25;\n const ticks: ILineChartOptions['ticks'] = {\n x: this.options.ticks?.x ?? width / xTicksScale,\n y: this.options.ticks?.y ?? height / yTicksScale,\n };\n const options: Partial<ILineChartOptions> = {\n ...this.options,\n width,\n height,\n ticks,\n };\n return options;\n }\n\n /**\n * Draws the chart.\n */\n private drawChart() {\n if (typeof this.container !== 'undefined') {\n const options = this.chartOptions();\n this.d3Factory.drawLineChart(this.container, [...this.data], options);\n }\n }\n\n /**\n * Actually draws the chart after the component view is initialized.\n */\n public ngAfterViewInit(): void {\n this.drawChart();\n }\n\n /**\n * Redraws the chart on changes.\n */\n public ngOnChanges(changes: IInputChanges): void {\n const data: ILineChartDataNode[][] = changes.data?.currentValue;\n const options: Partial<ILineChartOptions> = changes.options?.currentValue;\n if ((typeof data !== 'undefined' && data !== null) || (typeof options !== 'undefined' && options !== null)) {\n this.drawChart();\n }\n }\n}\n","<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { first, map, switchMap, timer } from 'rxjs';\n\nimport { IBarChartOptions, TBarChartData } from '../../interfaces/bar-chart.interface';\nimport {\n IForceDirectedChartData,\n IForceDirectedChartOptions,\n IForceDirectedGraphEntity,\n} from '../../interfaces/force-directed-chart.interface';\nimport { ILineChartOptions, TDateFormat, TLineChartData } from '../../interfaces/line-chart.interface';\nimport { IPieChartDataNode, IPieChartOptions } from '../../interfaces/pie-chart.interface';\nimport { IRadarChartDataNode, IRadarChartOptions } from '../../interfaces/radar-chart.interface';\n\n@Component({\n selector: 'app-chart-examples',\n templateUrl: './chart-examples.component.html',\n styleUrls: ['./chart-examples.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AppChartExamplesComponent {\n /**\n * Sample bar chart data.\n */\n public get barChartData() {\n return <TBarChartData>[\n { title: 'one', value: 1 },\n { title: 'two', value: 2 },\n { title: 'three', value: 3 },\n { title: 'four', value: 4 },\n { title: 'five', value: 5 },\n ];\n }\n\n /**\n * Sample line chart data.\n */\n public get lineChartData() {\n return <TLineChartData[]>[\n [\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n ].sort((a, b) => a.timestamp - b.timestamp),\n [\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n ].sort((a, b) => a.timestamp - b.timestamp),\n [\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n { timestamp: this.randomTimestamp(), value: this.randomValue() },\n ].sort((a, b) => a.timestamp - b.timestamp),\n ];\n }\n\n /**\n * Sample radar chart data.\n */\n public get radarChartData() {\n return <IRadarChartDataNode[][]>[\n [\n { axis: 'one', value: 1, unit: 'x' },\n { axis: 'two', value: 2, unit: 'x' },\n { axis: 'three', value: 3, unit: 'x' },\n { axis: 'four', value: 4, unit: 'x' },\n { axis: 'five', value: 5, unit: 'x' },\n { axis: 'six', value: 6, unit: 'x' },\n { axis: 'seven', value: 7, unit: 'x' },\n { axis: 'eight', value: 8, unit: 'x' },\n { axis: 'nine (long labels are wrapped)', value: 9, unit: 'x' },\n ],\n [\n { axis: 'one', value: 9, unit: 'y' },\n { axis: 'two', value: 8, unit: 'y' },\n { axis: 'three', value: 7, unit: 'y' },\n { axis: 'four', value: 6, unit: 'y' },\n { axis: 'five', value: 5, unit: 'y' },\n { axis: 'six', value: 4, unit: 'y' },\n { axis: 'seven', value: 3, unit: 'y' },\n { axis: 'eight', value: 2, unit: 'y' },\n { axis: 'nine (long labels are wrapped)', value: 1, unit: 'y' },\n ],\n ];\n }\n\n /**\n * Sample pie chart data.\n */\n public get pieChartData() {\n return <IPieChartDataNode[]>[\n { key: 'one', y: 1 },\n { key: 'two', y: 2 },\n { key: 'three', y: 3 },\n { key: 'four', y: 4 },\n { key: 'five', y: 5 },\n { key: 'six', y: 6 },\n ];\n }\n\n /**\n * Sample force directed chart data.\n */\n public get forceDirectedChartData() {\n const input = {\n domains: ['first', 'second', 'third'],\n entities: [\n { name: 'one', domains: ['first'], img: '' },\n { name: 'two', domains: ['second'], img: '' },\n { name: 'three', domains: ['third'], img: '' },\n { name: 'four', domains: ['first', 'second'], img: '' },\n { name: 'five', domains: ['second'], img: '' },\n { name: 'six', domains: ['third', 'second'], img: '' },\n { name: 'seven', domains: ['second'], img: '' },\n { name: 'eight', domains: ['third'], img: '' },\n ],\n };\n const domains: IForceDirectedChartData['domains'] = input.domains.map((name, index) => ({ index, name, value: 1 }));\n const entities: IForceDirectedChartData['entities'] = input.entities.map((app, index) => ({\n index: index,\n name: app.name,\n domains: [...app.domains],\n img: app.img,\n linksCount: 0,\n }));\n const nodes: IForceDirectedGraphEntity[] = [...entities];\n const links: IForceDirectedChartData['links'] = entities\n .map(entity => {\n return entity.domains.map(domain => {\n const source = domains.find(value => domain === value.name)?.index ?? -1;\n const target = entity.index;\n return { source, target };\n });\n })\n .reduce((accumulator, item) => (Array.isArray(item) ? [...accumulator, ...item] : [...accumulator, item]), [])\n .filter(link => link.source !== -1 && link.target !== -1 && typeof link.target !== 'undefined');\n const chartData: IForceDirectedChartData = {\n domains,\n entities: entities.map(item => ({\n ...item,\n linksCount: links.reduce((acc, link) => (link.target === item.index ? acc + 1 : acc), 0),\n })),\n links,\n nodes,\n };\n return chartData;\n }\n\n private readonly breakpoint$ = this.breakpointObserver\n .observe([Breakpoints.XSmall, Breakpoints.Small, Breakpoints.Medium, Breakpoints.Large, Breakpoints.XLarge])\n .pipe(map(result => Object.keys(result.breakpoints).find(item => result.breakpoints[item]) ?? 'unknown'));\n\n public readonly barChartConfig$ = this.breakpoint$.pipe(\n switchMap(() =>\n timer(this.timeout).pipe(\n first(),\n map(() => ({ data: this.barChartData, options: this.barChartOptions() })),\n ),\n ),\n );\n\n public readonly lineChartConfig$ = this.breakpoint$.pipe(\n switchMap(() =>\n timer(this.timeout).pipe(\n first(),\n map(() => ({\n data: this.lineChartData,\n options: this.lineChartOptions(),\n optionsDateDdMmYy: this.lineChartOptions('dd/mm/yy'),\n optionsDateDdMmYyyy: this.lineChartOptions('dd/mm/yyyy'),\n optionsDateMmYyyy: this.lineChartOptions('mm/yyyy'),\n })),\n ),\n ),\n );\n\n public readonly radarChartConfig$ = this.breakpoint$.pipe(\n switchMap(() =>\n timer(this.timeout).pipe(\n first(),\n map(() => ({ data: this.radarChartData, options: this.radarChartOptions() })),\n ),\n ),\n );\n\n public readonly pieChartConfig$ = this.breakpoint$.pipe(\n switchMap(() =>\n timer(this.timeout).pipe(\n first(),\n map(() => ({ data: this.pieChartData, options: this.pieChartOptions() })),\n ),\n ),\n );\n\n public readonly forceDirectedChartConfig$ = this.breakpoint$.pipe(\n switchMap(() =>\n timer(this.timeout).pipe(\n first(),\n map(() => ({ data: this.forceDirectedChartData, options: this.forceDirectedChartOptions() })),\n ),\n ),\n );\n\n constructor(private readonly breakpointObserver: BreakpointObserver) {}\n\n private readonly timeout = 100;\n\n public randomValue(range?: number) {\n const defaultRange = 100;\n return Math.floor(Math.random() * (range ?? defaultRange) + 1);\n }\n\n public randomTimestamp(range?: number) {\n const defaultRange = 100000000;\n return Math.floor(Math.random() * (range ?? defaultRange) + new Date().getTime());\n }\n\n /**\n * Example bar chart options.\n */\n public barChartOptions() {\n return <Partial<IBarChartOptions>>{\n chartTitle: 'Example bar chart',\n xAxisTitle: 'long x axis title',\n yAxisTitle: 'long y axis title',\n };\n }\n\n /**\n * Example line chart options.\n * @param dateFormat date format\n */\n public lineChartOptions(dateFormat: TDateFormat = 'default') {\n return <Partial<ILineChartOptions>>{\n chartTitle: `Example line chart, date format ${dateFormat}`,\n xAxisTitle: 'Date range',\n yAxisTitle: 'Value range',\n dateFormat,\n };\n }\n\n /**\n * Example radar chart options.\n */\n public radarChartOptions() {\n return <Partial<IRadarChartOptions>>{\n chartTitle: 'Example radar chart',\n };\n }\n\n /**\n * Example pie chart options.\n */\n public pieChartOptions() {\n return <Partial<IPieChartOptions>>{\n chartTitle: 'Example pie chart',\n };\n }\n\n /**\n * Example force directed chart options.\n */\n public forceDirectedChartOptions() {\n return <Partial<IForceDirectedChartOptions>>{\n chartTitle: 'Example force directed chart',\n };\n }\n}\n","<div class=\"container\" *ngIf=\"barChartConfig$ | async as config\">\n <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"lineChartConfig$ | async as config\">\n <app-line-chart [chartId]=\"'line-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.optionsDateDdMmYy\"></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-3'\"\n [data]=\"[config.data[1], config.data[2]]\"\n [options]=\"config.optionsDateDdMmYyyy\"\n ></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-4'\" [data]=\"config.data\" [options]=\"config.optionsDateMmYyyy\"></app-line-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"radarChartConfig$ | async as config\">\n <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"pieChartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-pie-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"forceDirectedChartConfig$ | async as config\">\n <app-force-directed-chart\n [chartId]=\"'force-directed-example-1'\"\n [data]=\"config.data\"\n [options]=\"config.options\"\n ></app-force-directed-chart>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AppBarChartComponent } from './components/bar-chart/bar-chart.component';\nimport { AppChartExamplesComponent } from './components/chart-examples/chart-examples.component';\nimport { AppForceDirectedChartComponent } from './components/force-directed-chart/force-directed-chart.component';\nimport { AppLineChartComponent } from './components/line-chart/line-chart.component';\nimport { AppPieChartComponent } from './components/pie-chart/pie-chart.component';\nimport { AppRadarChartComponent } from './components/radar-chart/radar-chart.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [\n AppPieChartComponent,\n AppRadarChartComponent,\n AppForceDirectedChartComponent,\n AppBarChartComponent,\n AppLineChartComponent,\n AppChartExamplesComponent,\n ],\n exports: [\n AppPieChartComponent,\n AppRadarChartComponent,\n AppForceDirectedChartComponent,\n AppBarChartComponent,\n AppLineChartComponent,\n AppChartExamplesComponent,\n ],\n})\nexport class AppD3ChartsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["createContainer","wrapSvgText","createLegend","createAxisX","createAxisY","onMouseOver","onMouseOut","i3.AppPieChartComponent","i4.AppRadarChartComponent","i5.AppForceDirectedChartComponent","i6.AppBarChartComponent","i7.AppLineChartComponent"],"mappings":";;;;;;;;;AAAA;;;;;AAKG;AACI,MAAM,qBAAqB,GAAG,CACnC,MAAS,EACT,OAAyD,EACzD,MAA+B,KAC7B;IACF,MAAM,oBAAoB,GAA4B,MAAM,CAAC;AAE7D,IAAA,IAAI,OAAO,OAAO,KAAK,WAAW,EAAE;AAClC,QAAA,OAAO,MAAM,CAAC;AACf,KAAA;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAC/C,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;AACtB,QAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;AAC/C,QAAA,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAsC,GAAG,CAAC;AACxD,QAAA,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,OAAO,YAAY,KAAK,SAAS,EAAE;AAC7G,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,KAAK,KAAK,WAAW,GAAG,KAAK,GAAG,YAAY,CAAC;AACxE,SAAA;aAAM,IAAI,YAAY,YAAY,QAAQ,EAAE;AAC3C,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;AACjC,SAAA;aAAM,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,IAAI,EAAE;YACpE,MAAM,mBAAmB,GAA4B,YAAY,CAAC;YAClE,MAAM,YAAY,GAA4B,KAAK,CAAC;AACpD,YAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,qBAAqB,CAAC,mBAAmB,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;AACjF,SAAA;AACF,KAAA;AACD,IAAA,OAAU,MAAM,CAAC;AACnB,CAAC;;AC1BD;;AAEG;AACU,MAAA,qBAAqB,GAAqB,MAAM,CAAC,MAAM,CAAmB;AACrF,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACT,KAAA;AACD,IAAA,kBAAkB,EAAE,GAAG;AACvB,IAAA,YAAY,EAAE,GAAG;AACjB,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,kBAAkB,EAAE,EAAE;IACtB,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,CAAC;AAC5C,CAAA,EAAE;AAEH;;;;;AAKG;AACH,MAAMA,iBAAe,GAAG,CAAC,SAAqC,EAAE,MAAwB,KAAI;IAC1F,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,EAAE,IAAI,OAAO,CAAC;AAEjD,IAAA,EAAE,CAAC,MAAM,CAAC,CAAA,CAAA,EAAI,EAAE,CAAE,CAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,EAAE;AACX,SAAA,MAAM,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAC;SAChB,MAAM,CAAC,KAAK,CAAC;AACb,SAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACtE,SAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACxE,SAAA,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACrB,IAAA,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,UAAA,EAAa,MAAM,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AAEzG,IAAA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF;;;;AAIG;AACH,MAAMC,aAAW,GAAG,CAAC,OAAiE,EAAE,KAAa,KAAI;IACvG,OAAO,CAAC,IAAI,CAAC,YAAA;QACX,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAsB,IAAI,CAAC,CAAC;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AACjD,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,IAAI,IAAI,GAAa,EAAE,CAAC;YACxB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,MAAM,UAAU,GAAG,GAAG,CAAC;YACvB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,YAAA,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAG,EAAA,EAAE,IAAI,CAAC,CAAC;AAE5F,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AAEvB,YAAA,OAAO,OAAO,IAAI,KAAK,WAAW,EAAE;AAClC,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE;oBACxD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACX,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,oBAAA,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;oBACpB,UAAU,IAAI,CAAC,CAAC;AAChB,oBAAA,KAAK,GAAG,IAAI;yBACT,MAAM,CAAC,OAAO,CAAC;AACf,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;yBACZ,IAAI,CAAC,IAAI,EAAE,CAAG,EAAA,UAAU,GAAG,UAAU,GAAG,EAAE,CAAA,EAAA,CAAI,CAAC;AAC/C,yBAAA,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACrB,iBAAA;AACD,gBAAA,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AACpB,aAAA;AACF,SAAA;AACH,KAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;AAIG;AACH,MAAMC,cAAY,GAAG,CAAC,CAA2D,EAAE,MAAwB,KAAI;IAC7G,IAAI,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE;AACxD,QAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACV,aAAA,IAAI,CAAC,WAAW,EAAE,CAAA,aAAA,EAAgB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;aAC1E,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;AAC1B,aAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACvB,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,aAAA,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;AACjB,aAAA,IAAI,CAAC,CAAO,IAAA,EAAA,MAAM,CAAC,UAAU,CAAA,CAAE,CAAC,CAAC;AACrC,KAAA;IAED,IAAI,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE;AACxD,QAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACV,aAAA,IAAI,CAAC,WAAW,EAAE,CAAA,aAAA,EAAgB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;aAC1E,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;AAC1B,aAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACvB,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,aAAA,IAAI,CAAC,CAAO,IAAA,EAAA,MAAM,CAAC,UAAU,CAAA,CAAE,CAAC,CAAC;AACrC,KAAA;AAED,IAAA,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE;AAC5B,QAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACV,aAAA,IAAI,CAAC,WAAW,EAAE,CAAA,eAAA,CAAiB,CAAC;aACpC,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;AAC1B,aAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACvB,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,aAAA,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;AAClB,aAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5B,KAAA;AACH,CAAC,CAAC;AAEF;;;;;AAKG;AACH,MAAMC,aAAW,GAAG,CAAC,CAA2D,EAAE,CAAuB,EAAE,MAAwB,KAAI;AACrI,IAAA,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,aAAA,EAAgB,MAAM,CAAC,MAAM,CAAG,CAAA,CAAA,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAExH,IAAA,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAACF,aAAW,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEjE,IAAI,MAAM,CAAC,iBAAiB,EAAE;AAC5B,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,MAAM,CAAC,KAAK,CAAA,IAAA,CAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtI,KAAA;AACH,CAAC,CAAC;AAEF;;;;;AAKG;AACH,MAAMG,aAAW,GAAG,CAClB,CAA2D,EAC3D,CAAiC,EACjC,MAAwB,KACtB;IACF,MAAM,OAAO,GAAG,CAAC;SACd,MAAM,CAAC,GAAG,CAAC;AACX,SAAA,IAAI,CACH,EAAE;SACC,QAAQ,CAAC,CAAC,CAAC;SACX,UAAU,CAAC,UAAU,CAAC,EAAA;QACrB,OAAO,CAAA,EAAG,CAAC,CAAA,CAAE,CAAC;AAChB,KAAC,CAAC;AACD,SAAA,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAC5B;SACA,MAAM,CAAC,MAAM,CAAC,CAAC;IAElB,IAAI,MAAM,CAAC,iBAAiB,EAAE;AAC5B,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChE,KAAA;AACH,CAAC,CAAC;AAEF;;;;;;;;AAQG;AACH,MAAMC,aAAW,GAAG,CAClB,IAAoB,EACpB,CAAoB,EACpB,CAA2D,EAC3D,CAAuB,EACvB,CAAiC,EACjC,MAAwB,KACtB;IACF,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,IAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACZ,SAAA,UAAU,EAAE;AACZ,SAAA,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC;SACnC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,aAAa,CAAC;SAC5C,IAAI,CAAC,GAAG,EAAE,YAAA;QACT,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;AAC/B,KAAC,CAAC;SACD,IAAI,CAAC,QAAQ,EAAE,YAAA;QACd,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,QAAA,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;AAC/C,KAAC,CAAC,CAAC;AAEL,IAAA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACb,SAAA,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;AAC9B,SAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;AAC1B,SAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SACjC,IAAI,CAAC,GAAG,EAAE,YAAA;QACT,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;AAC/B,KAAC,CAAC;SACD,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF;;;;;;;AAOG;AACH,MAAMC,YAAU,GAAG,CACjB,IAAoB,EACpB,CAAoB,EACpB,CAAuB,EACvB,CAAiC,EACjC,MAAwB,KACtB;AACF,IAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACrC,IAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACZ,SAAA,UAAU,EAAE;AACZ,SAAA,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC;AACnC,SAAA,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5B,SAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAChC,IAAI,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE3D,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,MAAM,EAAE,CAAC;AAC1C,CAAC,CAAC;AAEF;;;;;;;AAOG;AACH,MAAM,2BAA2B,GAAG,CAClC,CAA2D,EAC3D,CAAuB,EACvB,CAAiC,EACjC,MAAwB,EACxB,IAAmB,KACjB;IACF,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,IAAA,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;SAChB,IAAI,CAAC,IAAI,CAAC;AACV,SAAA,KAAK,EAAE;SACP,MAAM,CAAC,MAAM,CAAC;AACd,SAAA,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;AACpB,SAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnD,SAAA,EAAE,CAAC,WAAW,EAAE,UAAgB,KAAK,EAAE,CAAC,EAAA;AACvC,QAAA,OAAOD,aAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/C,KAAC,CAAC;AACD,SAAA,EAAE,CAAC,UAAU,EAAE,UAAgB,KAAK,EAAE,CAAC,EAAA;AACtC,QAAA,OAAOC,YAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAC3C,KAAC,CAAC;AACD,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAChC,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAA,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5B,SAAA,UAAU,EAAE;AACZ,SAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;SACnB,QAAQ,CAAC,QAAQ,CAAC;AAClB,SAAA,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAA;QACnB,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,UAAU,CAAC;AACxB,KAAC,CAAC;AACD,SAAA,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF;;;;;;AAMG;AACU,MAAA,YAAY,GAAG,CAAC,SAAqC,EAAE,IAAmB,EAAE,OAAmC,KAAI;IAC9H,MAAM,MAAM,GAAqB,qBAAqB,CAAmB,qBAAqB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAE7G,MAAM,EAAE,CAAC,EAAE,GAAGN,iBAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEjD,MAAM,CAAC,GAAG,EAAE;SACT,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,SAAA,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC;AAC5B,SAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAClC,IAAA,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE1F,IAAAG,aAAW,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAE1B,IAAAC,aAAW,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAE1B,IAAAF,cAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAExB,2BAA2B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAEnD,IAAA,OAAO,MAAM,CAAC;AAChB;;AC7SA;;AAEG;AACU,MAAA,+BAA+B,GAA+B,MAAM,CAAC,MAAM,CAAC;AACvF,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,aAAa,EAAE,GAAG;AAClB,IAAA,MAAM,EAAE;QACN,QAAQ,EAAE,CAAC,EAAE;AACb,QAAA,KAAK,EAAE,GAAG;AACV,QAAA,WAAW,EAAE,IAAI;AAClB,KAAA;AACD,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,eAAe,EAAE,EAAE;AACnB,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACT,KAAA;AACD,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,kBAAkB,EAAE,EAAE;IACtB,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,CAAC;AAC5C,CAAA,EAAE;AAEH;;;;;;AAMG;AACH,MAAM,MAAM,GAAG,CACb,IAAgH,EAChH,IAA0F,EAC1F,IAAsF,KACpF;AACF,IAAA,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;QAC/B,IAAI;AACD,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,IAAK,CAAC,CAAC,MAAmC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9D,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,IAAK,CAAC,CAAC,MAAmC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9D,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,IAAK,CAAC,CAAC,MAAmC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9D,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,IAAK,CAAC,CAAC,MAAmC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,KAAA;AAED,IAAA,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1D,KAAA;AAED,IAAA,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;QAC/B,MAAM,EAAE,GAAG,EAAE,CAAC;QACd,MAAM,EAAE,GAAG,CAAC,CAAC;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACtE,KAAA;AAED,IAAA,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF;;;;;AAKG;AACH,MAAMF,iBAAe,GAAG,CAAC,SAAqC,EAAE,MAAkC,KAAI;IACpG,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,EAAE,IAAI,kBAAkB,CAAC;AAE5D,IAAA,EAAE,CAAC,MAAM,CAAC,CAAA,CAAA,EAAI,EAAE,CAAE,CAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,EAAE;AACX,SAAA,MAAM,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAC;SAChB,MAAM,CAAC,KAAK,CAAC;AACb,SAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACtE,SAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACxE,SAAA,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrB,MAAM,CAAC,GAAG,GAAG;SACV,MAAM,CAAC,GAAG,CAAC;AACX,SAAA,IAAI,CAAC,WAAW,EAAE,CAAA,UAAA,EAAa,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,CAAA,CAAG,CAAC,CAAC;AAErH,IAAA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF;;;;AAIG;AACH,MAAM,cAAc,GAAG,CAAC,CAA2D,EAAE,IAA6B,KAAI;IACpH,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,IAAA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;SACb,SAAS,CAAC,SAAS,CAAC;AACpB,SAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AACnB,SAAA,KAAK,EAAE;SACP,MAAM,CAAC,SAAS,CAAC;AACjB,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAO,IAAA,EAAA,GAAG,CAAC,KAAK,EAAE,CAAC;AAC1C,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,SAAA,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAG;QACpB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,QAAA,OAAO,SAAS,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;AACxC,KAAC,CAAC;AACD,SAAA,IAAI,CAAC,OAAO,EAAE,GAAG,IAAG;QACnB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,QAAA,OAAO,SAAS,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;AACxC,KAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC;AACf,SAAA,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;AAClB,SAAA,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC;AAClB,SAAA,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAG;QACpB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,QAAA,OAAO,SAAS,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;AACxC,KAAC,CAAC;AACD,SAAA,IAAI,CAAC,OAAO,EAAE,GAAG,IAAG;QACnB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,QAAA,OAAO,SAAS,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;AACxC,KAAC,CAAC;SACD,IAAI,CAAC,YAAY,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;;;;;AAMG;AACH,MAAM,WAAW,GAAG,CAClB,GAA+D,EAC/D,MAAkC,EAClC,IAA6B,KAC3B;AACF,IAAA,OAAO,GAAG;SACP,SAAS,CAAC,OAAO,CAAC;AAClB,SAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAChB,SAAA,KAAK,EAAE;SACP,MAAM,CAAC,MAAM,CAAC;AACd,SAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;AACrB,SAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC1B,SAAA,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF;;;;;AAKG;AACH,MAAM,YAAY,GAAG,CAAC,MAAkC,EAAE,IAA6B,KAAI;AACzF,IAAA,OAAO,EAAE;AACN,SAAA,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;SAC3B,KAAK,CACJ,MAAM,EACN,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CACrC;AACA,SAAA,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;SACtI,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAC1G,SAAA,KAAK,CACJ,WAAW,EACX,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,CACtD;SACA,KAAK,CACJ,MAAM,EACN,EAAE;AACC,SAAA,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AACrB,SAAA,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;AACzB,SAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CACrB,CAAC;AACN,CAAC,CAAC;AAEF;;;;;AAKG;AACH,MAAM,oBAAoB,GAAG,CAC3B,KAA6E,EAC7E,KAAkC,EAClC,KAA4D,KAC1D;IACF,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;QACjD,MAAM,WAAW,GAAG,GAAG,CAAC;QACxB,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC;AAC1C,KAAA;AACD,IAAA,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AACnB,IAAA,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AACrB,CAAC,CAAC;AAEF;;;;;AAKG;AACH,MAAM,eAAe,GAAG,CACtB,KAA6E,EAC7E,KAAkC,EAClC,MAAkC,KAChC;AACF,IAAA,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;AAC7G,IAAA,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;AAC/G,CAAC,CAAC;AAEF;;;;;AAKG;AACH,MAAM,kBAAkB,GAAG,CACzB,KAA6E,EAC7E,KAAkC,EAClC,KAA4D,KAC1D;IACF,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE;AACjD,QAAA,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACtB,KAAA;AACD,IAAA,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;AAChB,IAAA,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;AAClB,CAAC,CAAC;AAEF;;;;;;;AAOG;AACH,MAAM,WAAW,GAAG,CAClB,GAA+D,EAC/D,IAA6B,EAC7B,KAA4D,EAC5D,MAAkC,KAChC;AACF,IAAA,OAAO,GAAG;SACP,SAAS,CAAC,OAAO,CAAC;AAClB,SAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAChB,SAAA,KAAK,EAAE;SACP,MAAM,CAAC,QAAQ,CAAC;AAChB,SAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;AACrB,SAAA,IAAI,CAAC,GAAG,EAAE,GAAG,IAAG;QACf,MAAM,IAAI,GAAG,CAAC,CAAC;AACf,QAAA,OAAO,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,KAAC,CAAC;AACD,SAAA,KAAK,CAAC,cAAc,EAAE,GAAG,IAAG;QAC3B,MAAM,IAAI,GAAG,CAAC,CAAC;AACf,QAAA,OAAO,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7D,KAAC,CAAC;AACD,SAAA,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,GAAG,CAAC,GAAG,KAAK,WAAW,IAAI,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,SAAS,GAAG,OAAO,GAAG,CAAC,GAAG,CAAA,CAAA,CAAG,CAAC,CAAC;AACxG,SAAA,IAAI,CACH,EAAE;AACC,SAAA,IAAI,EAAiD;AACrD,SAAA,EAAE,CACD,OAAO,EACP,UAEE,KAA6E,EAC7E,KAAkC,EAAA;AAElC,QAAA,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAC5C,KAAC,CACF;AACA,SAAA,EAAE,CACD,MAAM,EACN,UAEE,KAA6E,EAC7E,KAAkC,EAAA;AAElC,QAAA,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACxC,KAAC,CACF;AACA,SAAA,EAAE,CACD,KAAK,EACL,UAEE,KAA6E,EAC7E,KAAkC,EAAA;AAElC,QAAA,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KACzC,CACF,CACJ,CAAC;AACN,CAAC,CAAC;AAEF;;;;;AAKG;AACH,MAAM,UAAU,GAAG,CAAC,GAA+D,EAAE,IAA6B,KAAI;AACpH,IAAA,OAAO,GAAG;SACP,MAAM,CAAC,GAAG,CAAC;SACX,SAAS,CAAC,MAAM,CAAC;AACjB,SAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAChB,SAAA,KAAK,EAAE;SACP,MAAM,CAAC,MAAM,CAAC;AACd,SAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACvB,SAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,YAAY,GAAG,CAAC,KAAK,CAAA,CAAA,CAAG,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF;;;;;;AAMG;AACU,MAAA,sBAAsB,GAAG,CACpC,SAAqC,EACrC,IAA6B,EAC7B,OAA6C,KAC3C;IACF,MAAM,MAAM,GAA+B,qBAAqB,CAC9D,+BAA+B,EAC/B,OAAO,EACP,EAAE,CACH,CAAC;AAEF,IAAA,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAGA,iBAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAEtD,IAAA,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAExB,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAE5C,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAEzC,IAAA,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAEnD,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAEnC,IAAA,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAK;AACpB,QAAA,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3B,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,MAAM,CAAC;AAChB;;ACxVA;;AAEG;AACU,MAAA,sBAAsB,GAAsB,MAAM,CAAC,MAAM,CAAoB;AACxF,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACT,KAAA;AACD,IAAA,kBAAkB,EAAE,GAAG;AACvB,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,KAAK,EAAE;AACL,QAAA,CAAC,EAAE,CAAC;AACJ,QAAA,CAAC,EAAE,EAAE;AACN,KAAA;AACD,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,kBAAkB,EAAE,EAAE;IACtB,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,CAAC;AAC5C,CAAA,EAAE;AAEH;;;;;AAKG;AACH,MAAMA,iBAAe,GAAG,CAAC,SAAqC,EAAE,MAAyB,KAAI;IAC3F,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,EAAE,IAAI,QAAQ,CAAC;AAElD,IAAA,EAAE,CAAC,MAAM,CAAC,CAAA,CAAA,EAAI,EAAE,CAAE,CAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,EAAE;AACX,SAAA,MAAM,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAC;SAChB,MAAM,CAAC,KAAK,CAAC;AACb,SAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACtE,SAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACxE,SAAA,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACrB,IAAA,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,UAAA,EAAa,MAAM,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAA,CAAA,CAAG,CAAC,CAAC;AAEzG,IAAA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF;;;;AAIG;AACH,MAAMC,aAAW,GAAG,CAAC,OAAiE,EAAE,KAAa,KAAI;IACvG,OAAO,CAAC,IAAI,CAAC,YAAA;QACX,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAsB,IAAI,CAAC,CAAC;AAClD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AACjD,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,IAAI,IAAI,GAAa,EAAE,CAAC;YACxB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,MAAM,UAAU,GAAG,GAAG,CAAC;YACvB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,YAAA,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAG,EAAA,EAAE,IAAI,CAAC,CAAC;AAE5F,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AAEvB,YAAA,OAAO,OAAO,IAAI,KAAK,WAAW,EAAE;AAClC,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE;oBACxD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACX,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,oBAAA,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;oBACpB,UAAU,IAAI,CAAC,CAAC;AAChB,oBAAA,KAAK,GAAG,IAAI;yBACT,MAAM,CAAC,OAAO,CAAC;AACf,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;yBACZ,IAAI,CAAC,IAAI,EAAE,CAAG,EAAA,UAAU,GAAG,UAAU,GAAG,EAAE,CAAA,EAAA,CAAI,CAAC;AAC/C,yBAAA,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACrB,iBAAA;AACD,gBAAA,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AACpB,aAAA;AACF,SAAA;AACH,KAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;AAIG;AACH,MAAMC,cAAY,GAAG,CAAC,CAA2D,EAAE,MAAyB,KAAI;IAC9G,IAAI,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE;AACxD,QAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACV,aAAA,IAAI,CAAC,WAAW,EAAE,CAAA,aAAA,EAAgB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;aAC1E,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;AAC1B,aAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACvB,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,aAAA,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;AACjB,aAAA,IAAI,CAAC,CAAO,IAAA,EAAA,MAAM,CAAC,UAAU,CAAA,CAAE,CAAC,CAAC;AACrC,KAAA;IAED,IAAI,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE;AACxD,QAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACV,aAAA,IAAI,CAAC,WAAW,EAAE,CAAA,aAAA,EAAgB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;aAC1E,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;AAC1B,aAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACvB,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,aAAA,IAAI,CAAC,CAAO,IAAA,EAAA,MAAM,CAAC,UAAU,CAAA,CAAE,CAAC,CAAC;AACrC,KAAA;AAED,IAAA,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE;AAC5B,QAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACV,aAAA,IAAI,CAAC,WAAW,EAAE,CAAA,eAAA,CAAiB,CAAC;aACpC,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;AAC1B,aAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACvB,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,aAAA,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;AAClB,aAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5B,KAAA;AACH,CAAC,CAAC;AAEF;;;;;AAKG;AACH,MAAM,WAAW,GAAG,CAClB,CAA2D,EAC3D,CAA+B,EAC/B,MAAyB,KACvB;IACF,MAAM,OAAO,GAAG,CAAC;SACd,MAAM,CAAC,GAAG,CAAC;SACX,IAAI,CAAC,WAAW,EAAE,CAAA,aAAA,EAAgB,MAAM,CAAC,MAAM,GAAG,CAAC;AACnD,SAAA,IAAI,CACH,EAAE;SACC,UAAU,CAAC,CAAC,CAAC;AACb,SAAA,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SACrB,UAAU,CAAC,CAAC,IAAG;QACd,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACnC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAC3B,QAAA,MAAM,EAAE,GAAG,GAAG,GAAG,gBAAgB,GAAG,CAAA,CAAA,EAAI,GAAG,CAAE,CAAA,GAAG,GAAG,CAAC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAClC,QAAA,MAAM,EAAE,GAAG,KAAK,GAAG,gBAAgB,GAAG,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,GAAG,KAAK,CAAC;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC9B,QAAA,MAAM,IAAI,GAAG,KAAK,GAAG,gBAAgB,GAAG,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,GAAG,KAAK,CAAC;AAC5D,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAClC,QAAA,MAAM,MAAM,GAAG,OAAO,GAAG,gBAAgB,GAAG,CAAA,CAAA,EAAI,OAAO,CAAE,CAAA,GAAG,OAAO,CAAC;AACpE,QAAA,IAAI,aAAa,GAAG,CAAG,EAAA,EAAE,CAAI,CAAA,EAAA,EAAE,CAAI,CAAA,EAAA,EAAE,CAAI,CAAA,EAAA,IAAI,CAAI,CAAA,EAAA,MAAM,EAAE,CAAC;QAC1D,QAAQ,MAAM,CAAC,UAAU;AACvB,YAAA,KAAK,YAAY;gBACf,aAAa,GAAG,GAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAI,CAAA,EAAA,IAAI,EAAE,CAAC;gBACtC,MAAM;AACR,YAAA,KAAK,UAAU;gBACb,aAAa,GAAG,GAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAI,CAAA,EAAA,EAAE,EAAE,CAAC;gBACpC,MAAM;AACR,YAAA,KAAK,SAAS;AACZ,gBAAA,aAAa,GAAG,CAAG,EAAA,EAAE,CAAI,CAAA,EAAA,IAAI,EAAE,CAAC;gBAChC,MAAM;AACR,YAAA,KAAK,MAAM;AACT,gBAAA,aAAa,GAAG,CAAA,EAAG,IAAI,CAAA,CAAE,CAAC;gBAC1B,MAAM;AACR,YAAA;gBACE,MAAM;AACT,SAAA;AACD,QAAA,OAAO,aAAa,CAAC;AACvB,KAAC,CAAC,CACL;SACA,MAAM,CAAC,MAAM,CAAC,CAAC;AAElB,IAAA,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAACD,aAAW,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEjE,IAAI,MAAM,CAAC,iBAAiB,EAAE;AAC5B,QAAA,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,aAAa,MAAM,CAAC,KAAK,CAAA,IAAA,CAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtI,KAAA;AACH,CAAC,CAAC;AAEF;;;;;AAKG;AACH,MAAM,WAAW,GAAG,CAClB,CAA2D,EAC3D,CAAiC,EACjC,MAAyB,KACvB;IACF,MAAM,OAAO,GAAG,CAAC;SACd,MAAM,CAAC,GAAG,CAAC;AACX,SAAA,IAAI,CACH,EAAE;SACC,QAAQ,CAAC,CAAC,CAAC;AACX,SAAA,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SACrB,UAAU,CAAC,CAAC,IAAI,CAAG,EAAA,CAAC,CAAE,CAAA,CAAC,CAC3B;SACA,MAAM,CAAC,MAAM,CAAC,CAAC;IAElB,IAAI,MAAM,CAAC,iBAAiB,EAAE;QAC5B,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxF,KAAA;AACH,CAAC,CAAC;AAEF;;;;;;AAMG;AACH,MAAM,WAAW,GAAG,CAClB,IAAsB,EACtB,CAAqB,EACrB,CAA2D,EAC3D,MAAyB,KACvB;IACF,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,IAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;AACZ,SAAA,UAAU,EAAE;SACZ,QAAQ,CAAC,QAAQ,CAAC;SAClB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAEnC,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,IAAA,MAAM,SAAS,GAAG,CAAC,EAAE,CAAC;AACtB,IAAA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACb,SAAA,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;AAC9B,SAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;SAC1B,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,YAAY,CAAC;AAC1F,SAAA,IAAI,CAAC,IAAI,EAAE,MAAM,SAAS,CAAC;SAC3B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAK,EAAA,EAAA,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC;AACjE,SAAA,UAAU,EAAE;AACZ,SAAA,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC;AACnC,SAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACzB,CAAC,CAAC;AAEF;;;;AAIG;AACH,MAAM,UAAU,GAAG,CAAC,IAAsB,EAAE,MAAyB,KAAI;IACvE,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,IAAA,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACrC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AAC5E,IAAA,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAC3B,SAAA,UAAU,EAAE;AACZ,SAAA,QAAQ,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC;AACvC,SAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,SAAA,MAAM,EAAE,CAAC;AACd,CAAC,CAAC;AAEF;;;;;;;AAOG;AACH,MAAM,gCAAgC,GAAG,CACvC,CAA2D,EAC3D,CAA+B,EAC/B,CAAiC,EACjC,MAAyB,EACzB,IAAsB,KACpB;IACF,MAAM,IAAI,GAAG,EAAE;AACZ,SAAA,IAAI,EAAsB;SAC1B,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;SACtB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAClB,SAAA,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;AAE5B,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAE7B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;AACpD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAEtB,QAAA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACb,aAAA,IAAI,CAAC,IAAI,EAAE,CAAQ,KAAA,EAAA,CAAC,EAAE,CAAC;AACvB,aAAA,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;AACrB,aAAA,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC3C,aAAA,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC;aAC5B,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3B,KAAA;AAED,IAAA,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;SAChB,IAAI,CAAC,QAAQ,CAAC;AACd,SAAA,KAAK,EAAE;SACP,MAAM,CAAC,QAAQ,CAAC;AAChB,SAAA,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;AACpB,SAAA,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC;AAC9B,SAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnD,SAAA,EAAE,CAAC,WAAW,EAAE,UAAgB,KAAK,EAAE,CAAC,EAAA;QACvC,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AACzC,KAAC,CAAC;SACD,EAAE,CAAC,UAAU,EAAE,YAAA;AACd,QAAA,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClC,KAAC,CAAC;AACD,SAAA,IAAI,CAAC,IAAI,EAAE,UAAgB,CAAC,EAAA;AAC3B,QAAA,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACxB,KAAC,CAAC;AACD,SAAA,IAAI,CAAC,IAAI,EAAE,UAAgB,CAAC,EAAA;AAC3B,QAAA,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACpB,KAAC,CAAC;AACD,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,SAAA,UAAU,EAAE;AACZ,SAAA,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC;AACnB,SAAA,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC;AACnC,SAAA,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;QACd,MAAM,UAAU,GAAG,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,UAAU,CAAC;AACxB,KAAC,CAAC;AACD,SAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC,CAAC;AAEF;;;;;;AAMG;AACU,MAAA,aAAa,GAAG,CAAC,SAAqC,EAAE,IAAsB,EAAE,OAAoC,KAAI;IACnI,MAAM,MAAM,GAAsB,qBAAqB,CAAoB,sBAAsB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAEhH,MAAM,EAAE,CAAC,EAAE,GAAGD,iBAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CACvB,CAAC,WAAmE,EAAE,GAAG,KAAI;AAC3E,QAAA,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;AACvD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;AAEvD,QAAA,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AACzC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC9D,QAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;KACvC,EACD,EAAE,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,CACvE,CAAC;IAEF,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACjF,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;AAE9E,IAAA,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAE1B,IAAA,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAE1B,IAAAE,cAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAExB,gCAAgC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAExD,IAAA,OAAO,MAAM,CAAC;AAChB;;AC/WA;;AAEG;AACU,MAAA,qBAAqB,GAAqB,MAAM,CAAC,MAAM,CAAmB;AACrF,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACT,KAAA;AACD,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,mBAAmB,EAAE,EAAE;AACvB,IAAA,kBAAkB,EAAE,EAAE;AACtB,IAAA,kBAAkB,EAAE,IAAI;IACxB,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,CAAC;AAC5C,CAAA,EAAE;AAEH;;;;;AAKG;AACH,MAAMF,iBAAe,GAAG,CAAC,SAAqC,EAAE,MAAwB,KAAI;IAC1F,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,EAAE,IAAI,OAAO,CAAC;AAEjD,IAAA,EAAE,CAAC,MAAM,CAAC,CAAA,CAAA,EAAI,EAAE,CAAE,CAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,EAAE;AACX,SAAA,MAAM,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAC;SAChB,MAAM,CAAC,KAAK,CAAC;AACb,SAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACtE,SAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACxE,SAAA,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrB,MAAM,CAAC,GAAG,GAAG;SACV,MAAM,CAAC,GAAG,CAAC;AACX,SAAA,IAAI,CAAC,WAAW,EAAE,CAAA,UAAA,EAAa,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,CAAA,CAAG,CAAC,CAAC;AAErH,IAAA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF;;;;;;AAMG;AACU,MAAA,YAAY,GAAG,CAAC,SAAqC,EAAE,IAAyB,EAAE,OAAmC,KAAI;IACpI,MAAM,MAAM,GAAqB,qBAAqB,CAAmB,qBAAqB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IAE7G,MAAM,EAAE,CAAC,EAAE,GAAGA,iBAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAEjD,IAAA,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,EAAqB,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhE,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAEzD,IAAA,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,EAAqC,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAE5G,MAAM,IAAI,GAAG,CAAC;SACX,SAAS,CAAC,KAAK,CAAC;AAChB,SAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACf,SAAA,KAAK,EAAE;SACP,MAAM,CAAC,GAAG,CAAC;AACX,SAAA,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;AACpB,SAAA,EAAE,CAAC,WAAW,EAAE,UAAgB,KAAiB,EAAE,CAAC,EAAA;AACnD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AAE3B,QAAA,MAAM,WAAW,GAAG,CAAG,EAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAA,EAAA,EAAK,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;AAEjD,QAAA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACb,aAAA,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;AAC9B,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,aAAA,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;aACjD,IAAI,CAAC,WAAW,CAAC;AACjB,aAAA,UAAU,EAAE;AACZ,aAAA,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC;AACnC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACzB,KAAC,CAAC;AACD,SAAA,EAAE,CAAC,UAAU,EAAE,UAAgB,KAAK,EAAE,CAAC,EAAA;AACtC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AAC7B,QAAA,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAC3B,aAAA,UAAU,EAAE;AACZ,aAAA,QAAQ,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC;AACvC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,MAAM,EAAE,CAAC;AACd,KAAC,CAAC,CAAC;IAEL,IAAI;SACD,MAAM,CAAC,MAAM,CAAC;AACd,SAAA,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAClD,SAAA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAElB,IAAI,MAAM,CAAC,UAAU,EAAE;QACrB,MAAM,KAAK,GAAG,EAAE;AACb,aAAA,GAAG,EAAqC;aACxC,WAAW,CAAC,MAAM,CAAC;AACnB,aAAA,WAAW,CAAC,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,CAAC,CAAC;QACjB,IAAI;aACD,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACvB,aAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC7B,aAAA,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;AAClB,aAAA,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAa,UAAA,EAAA,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;AACzD,aAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;aAC1B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,KAAA;AAED,IAAA,OAAO,MAAM,CAAC;AAChB;;ACnHA;;AAEG;AACU,MAAA,uBAAuB,GAAuB,MAAM,CAAC,MAAM,CAAqB;AAC3F,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,MAAM,EAAE;AACN,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,IAAI,EAAE,EAAE;AACT,KAAA;AACD,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,kBAAkB,EAAE,EAAE;AACtB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,kBAAkB,EAAE,GAAG;IACvB,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,gBAAgB,CAAC;AAC5C,CAAA,EAAE;AAEH;;;;;AAKG;AACH,MAAM,eAAe,GAAG,CAAC,SAAqC,EAAE,MAA0B,KAAI;IAC5F,MAAM,EAAE,GAAG,SAAS,CAAC,aAAa,CAAC,EAAE,IAAI,SAAS,CAAC;AAEnD,IAAA,EAAE,CAAC,MAAM,CAAC,CAAA,CAAA,EAAI,EAAE,CAAE,CAAA,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,EAAE;AACX,SAAA,MAAM,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAC;SAChB,MAAM,CAAC,KAAK,CAAC;AACb,SAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACtE,SAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACxE,SAAA,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrB,MAAM,CAAC,GAAG,GAAG;SACV,MAAM,CAAC,GAAG,CAAC;AACX,SAAA,IAAI,CAAC,WAAW,EAAE,CAAA,UAAA,EAAa,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,CAAA,CAAG,CAAC,CAAC;AAErH,IAAA,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACpB,CAAC,CAAC;AAEF;;;;;;AAMG;AACH,MAAM,gBAAgB,GAAG,CACvB,QAAkE,EAClE,MAAc,EACd,QAAgB,EAChB,MAA0B,KACxB;;IAEF,QAAQ;SACL,SAAS,CAAC,SAAS,CAAC;AACpB,SAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC9C,SAAA,KAAK,EAAE;SACP,MAAM,CAAC,QAAQ,CAAC;AAChB,SAAA,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;AAC5B,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;AACjD,SAAA,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;AACxB,SAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC1B,SAAA,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC;AAC5C,SAAA,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;;IAEjC,MAAM,SAAS,GAAG,CAAC,CAAC;IACpB,QAAQ;SACL,SAAS,CAAC,aAAa,CAAC;AACxB,SAAA,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC9C,SAAA,KAAK,EAAE;SACP,MAAM,CAAC,MAAM,CAAC;AACd,SAAA,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AAC3B,SAAA,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC;AACpB,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC;AAC7C,SAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,SAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;AAC1B,SAAA,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AACvB,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;AACpD,CAAC,CAAC;AAEF;;;;AAIG;AACH,MAAM,WAAW,GAAG,CAAC,OAAmE,EAAE,KAAa,KAAI;IACzG,OAAO,CAAC,IAAI,CAAC,YAAA;QACX,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAqB,IAAI,CAAC,CAAC;AACjD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AACjD,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACpB,IAAI,IAAI,GAAa,EAAE,CAAC;YACxB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,MAAM,UAAU,GAAG,GAAG,CAAC;YACvB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,YAAA,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5C,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA,EAAG,EAAE,CAAA,EAAA,CAAI,CAAC,CAAC;AAE5F,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AAEvB,YAAA,OAAO,OAAO,IAAI,KAAK,WAAW,EAAE;AAClC,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE;oBACxD,IAAI,CAAC,GAAG,EAAE,CAAC;oBACX,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,oBAAA,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;oBACpB,UAAU,IAAI,CAAC,CAAC;AAChB,oBAAA,KAAK,GAAG,IAAI;yBACT,MAAM,CAAC,OAAO,CAAC;AACf,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AACZ,yBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;yBACZ,IAAI,CAAC,IAAI,EAAE,CAAG,EAAA,UAAU,GAAG,UAAU,GAAG,EAAE,CAAA,EAAA,CAAI,CAAC;AAC/C,yBAAA,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACrB,iBAAA;AACD,gBAAA,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;AACpB,aAAA;AACF,SAAA;AACH,KAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;AAIG;AACH,MAAM,YAAY,GAAG,CAAC,CAA2D,EAAE,MAA0B,KAAI;AAC/G,IAAA,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE;AAC5B,QAAA,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;AACV,aAAA,IAAI,CAAC,WAAW,EAAE,CAAA,WAAA,EAAc,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAA,GAAA,EAAM,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;aAC5H,MAAM,CAAC,MAAM,CAAC;AACd,aAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;AAC1B,aAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACvB,aAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5B,KAAA;AACH,CAAC,CAAC;AAEF;;;;;;;;AAQG;AACH,MAAM,QAAQ,GAAG,CACf,QAAkE,EAClE,SAAmB,EACnB,WAA2C,EAC3C,QAAgB,EAChB,UAAkB,EAClB,MAA0B,KACxB;;AAEF,IAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;;IAEnG,IAAI;SACD,MAAM,CAAC,MAAM,CAAC;AACd,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACb,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACb,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACxG,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACxG,SAAA,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;AACrB,SAAA,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;AACxB,SAAA,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;;IAEhC,IAAI;SACD,MAAM,CAAC,MAAM,CAAC;AACd,SAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;AACvB,SAAA,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC;AAC1B,SAAA,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC;AAC7B,SAAA,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;AACpB,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACxG,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACxG,SAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACZ,SAAA,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF;;;;;;;AAOG;AACH,MAAM,mBAAmB,GAAG,CAC1B,WAA2C,EAC3C,UAAkB,EAClB,CAA2D,EAC3D,IAAqB,EACrB,MAA0B,KACxB;;IAEF,MAAM,SAAS,GAAG,EAAE;AACjB,SAAA,UAAU,EAAuB;SACjC,MAAM,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACjC,SAAA,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC;;AAEnC,IAAA,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;;IAEhH,WAAW;SACR,MAAM,CAAC,MAAM,CAAC;AACd,SAAA,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;AAC3B,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;AACjC,SAAA,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnD,SAAA,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC;AACzC,SAAA,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,EAAA;;QAE7B,MAAM,oBAAoB,GAAG,GAAG,CAAC;QACjC,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;;QAEzH,MAAM,WAAW,GAAG,GAAG,CAAC;QACxB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AACtG,KAAC,CAAC;AACD,SAAA,EAAE,CAAC,UAAU,EAAE,MAAK;;QAEnB,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;AACzH,KAAC,CAAC,CAAC;;IAEL,WAAW;SACR,MAAM,CAAC,MAAM,CAAC;AACd,SAAA,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;AAC7B,SAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;SACjC,KAAK,CAAC,cAAc,EAAE,CAAA,EAAG,MAAM,CAAC,WAAW,IAAI,CAAC;AAChD,SAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACrD,SAAA,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;AACrB,SAAA,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;;IAEjC,MAAM,sBAAsB,GAAG,GAAG,CAAC;IACnC,WAAW;SACR,SAAS,CAAC,eAAe,CAAC;SAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACjB,SAAA,KAAK,EAAE;SACP,MAAM,CAAC,QAAQ,CAAC;AAChB,SAAA,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC;AAC7B,SAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;AAC3B,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnF,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;SACnF,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AACtD,SAAA,KAAK,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF;;;;;;;AAOG;AACH,MAAM,6BAA6B,GAAG,CACpC,CAA2D,EAC3D,IAAqB,EACrB,WAA2C,EAC3C,UAAkB,EAClB,MAA0B,KACxB;;AAEF,IAAA,MAAM,iBAAiB,GAAG,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC;;IAEpI,MAAM,iCAAiC,GAAG,GAAG,CAAC;IAC9C,iBAAiB;SACd,SAAS,CAAkC,yBAAyB,CAAC;SACrE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACjB,SAAA,KAAK,EAAE;SACP,MAAM,CAAC,QAAQ,CAAC;AAChB,SAAA,IAAI,CAAC,OAAO,EAAE,wBAAwB,CAAC;SACvC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,GAAG,iCAAiC,CAAC;AAC/D,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnF,SAAA,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnF,SAAA,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;AACrB,SAAA,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC;AAC9B,SAAA,EAAE,CAAC,WAAW,EAAE,UAAU,KAAiB,EAAE,CAAC,EAAA;QAC7C,MAAM,QAAQ,GAAG,EAAE,CAAC;AACpB,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC;AAC/D,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC;QAE/D,MAAM,QAAQ,GAAI,KAAK,CAAC,MAAyD,CAAC,UAAU,CAAC,CAAC;QAC9F,MAAM,WAAW,GAAG,CAAA,EAAG,QAAQ,CAAC,KAAK,CAAA,CAAA,EAAI,QAAQ,CAAC,IAAI,CAAA,CAAE,CAAC;AACzD,QAAA,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;AACb,aAAA,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC;AAC9B,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;AACf,aAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC;aACf,IAAI,CAAC,WAAW,CAAC;AACjB,aAAA,UAAU,EAAE;AACZ,aAAA,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC;AACnC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACzB,KAAC,CAAC;AACD,SAAA,EAAE,CAAC,UAAU,EAAE,MAAK;AACnB,QAAA,EAAE,CAAC,SAAS,CAAC,gBAAgB,CAAC;AAC3B,aAAA,UAAU,EAAE;AACZ,aAAA,QAAQ,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,CAAC;AACvC,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;AACnB,aAAA,MAAM,EAAE,CAAC;AACd,KAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF;;;;;;AAMG;AACU,MAAA,cAAc,GAAG,CAAC,SAAqC,EAAE,IAAqB,EAAE,OAAqC,KAAI;IACpI,MAAM,MAAM,GAAuB,qBAAqB,CAAqB,uBAAuB,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AAEnH,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChG,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AAChD,IAAA,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;AACnC,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC9G,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC;IAC7C,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEtE,MAAM,EAAE,CAAC,EAAE,GAAG,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;;IAGjD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACpE,IAAA,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAC1F,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACzC,IAAA,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;AACxD,IAAA,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAE1D,IAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAE7D,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AAErD,IAAA,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAEzE,IAAA,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAExB,mBAAmB,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAE9D,6BAA6B,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAExE,IAAA,OAAO,MAAM,CAAC;AAChB;;ACpVO,MAAM,cAAc,GAAG,OAAwB;IACpD,YAAY;IACZ,cAAc;IACd,YAAY;IACZ,aAAa;IACb,sBAAsB;AACvB,CAAA,CAAC,CAAC;AAEI,MAAM,gBAAgB,GAAG,IAAI,cAAc,CAAC,kBAAkB,EAAE;AACrE,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,OAAO,EAAE,cAAc;AACxB,CAAA,CAAC;;ACLF,MAMa,oBAAoB,CAAA;IAqB/B,WAA+C,CAAA,GAAa,EAA6C,SAA0B,EAAA;QAApF,IAAG,CAAA,GAAA,GAAH,GAAG,CAAU;QAA6C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;AApBnI;;AAEG;QACa,IAAO,CAAA,OAAA,GAAG,OAAO,CAAC;AAElC;;AAEG;QACa,IAAI,CAAA,IAAA,GAAkB,EAAE,CAAC;AAEzC;;AAEG;QACa,IAAO,CAAA,OAAA,GAA8B,EAAE,CAAC;KAO+E;AAEvI;;;AAGG;IACK,YAAY,GAAA;QAClB,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,qBAAqB,CAAC,KAAK,EACjD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,IAAI,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CACzH,CAAC;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,EAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC,MAAM,CAAC,GAAG,GAAG,qBAAqB,CAAC,MAAM,CAAC,MAAM,GAAG,mBAAmB,CACzH,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AAClE,QAAA,MAAM,OAAO,GAA8B;YACzC,KAAK;YACL,MAAM;YACN,UAAU;YACV,GAAG,IAAI,CAAC,OAAO;SAChB,CAAC;AACF,QAAA,OAAO,OAAO,CAAC;KAChB;AAED;;AAEG;IACK,SAAS,GAAA;AACf,QAAA,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;AACzC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjE,SAAA;KACF;AAED;;AAEG;IACI,eAAe,GAAA;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED;;AAEG;AACI,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,MAAM,IAAI,GAA0B,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC;AAC/D,QAAA,MAAM,OAAO,GAA8B,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC;QACzE,IAAI,CAAC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,IAAI,MAAM,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE;YAC1G,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;KACF;iIAzEU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAqBX,QAAQ,EAAA,EAAA,EAAA,KAAA,EAA0C,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AArB3E,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,oPC5BjC,mEACA,EAAA,MAAA,EAAA,CAAA,iHAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FD2Ba,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;+BACE,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mEAAA,EAAA,MAAA,EAAA,CAAA,iHAAA,CAAA,EAAA,CAAA;;0BAuBlC,MAAM;2BAAC,QAAQ,CAAA;;0BAAmC,MAAM;2BAAC,gBAAgB,CAAA;4CAjBtE,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAKU,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKmC,SAAS,EAAA,CAAA;sBAAjD,SAAS;uBAAC,WAAW,CAAA;;;AE1BxB,MAMa,oBAAoB,CAAA;IAqB/B,WAA+C,CAAA,GAAa,EAA6C,SAA0B,EAAA;QAApF,IAAG,CAAA,GAAA,GAAH,GAAG,CAAU;QAA6C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;AApBnI;;AAEG;QACa,IAAO,CAAA,OAAA,GAAG,OAAO,CAAC;AAElC;;AAEG;QACa,IAAI,CAAA,IAAA,GAAwB,EAAE,CAAC;AAE/C;;AAEG;QACa,IAAO,CAAA,OAAA,GAA8B,EAAE,CAAC;KAO+E;AAEvI;;;AAGG;IACK,YAAY,GAAA;AAClB,QAAA,MAAM,MAAM,GAA+B,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACxF,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,MAAM,EAAE,EAAE;SACX,CAAC;AACF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3G,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3G,QAAA,MAAM,OAAO,GAA8B;YACzC,KAAK;YACL,MAAM;YACN,MAAM;YACN,GAAG,IAAI,CAAC,OAAO;SAChB,CAAC;AACF,QAAA,OAAO,OAAO,CAAC;KAChB;AAED;;AAEG;IACK,SAAS,GAAA;AACf,QAAA,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;AACzC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjE,SAAA;KACF;AAED;;AAEG;IACI,eAAe,GAAA;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED;;AAEG;AACI,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,MAAM,IAAI,GAAoC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC;AACzE,QAAA,MAAM,OAAO,GAA8B,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC;QACzE,IAAI,CAAC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,IAAI,MAAM,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE;YAC1G,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;KACF;iIAvEU,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAqBX,QAAQ,EAAA,EAAA,EAAA,KAAA,EAA0C,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AArB3E,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,oPC3BjC,kKAKA,EAAA,MAAA,EAAA,CAAA,8NAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FDsBa,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBANhC,SAAS;+BACE,eAAe,EAAA,eAAA,EAGR,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,kKAAA,EAAA,MAAA,EAAA,CAAA,8NAAA,CAAA,EAAA,CAAA;;0BAuBlC,MAAM;2BAAC,QAAQ,CAAA;;0BAAmC,MAAM;2BAAC,gBAAgB,CAAA;4CAjBtE,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAKU,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKmC,SAAS,EAAA,CAAA;sBAAjD,SAAS;uBAAC,WAAW,CAAA;;;AExBxB,MAMa,sBAAsB,CAAA;IAqBjC,WAA+C,CAAA,GAAa,EAA6C,SAA0B,EAAA;QAApF,IAAG,CAAA,GAAA,GAAH,GAAG,CAAU;QAA6C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;AApBnI;;AAEG;QACa,IAAO,CAAA,OAAA,GAAG,SAAS,CAAC;AAEpC;;AAEG;AACa,QAAA,IAAA,CAAA,IAAI,GAA4B,CAAC,EAAE,CAAC,CAAC;AAErD;;AAEG;QACa,IAAO,CAAA,OAAA,GAAgC,EAAE,CAAC;KAO6E;AAEvI;;;AAGG;IACK,YAAY,GAAA;QAClB,MAAM,QAAQ,GAAG,GAAG,CAAC;QACrB,MAAM,QAAQ,GAAG,GAAG,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC;QACtB,MAAM,kBAAkB,GAAG,IAAI,CAAC;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC;QAC3B,MAAM,aAAa,GAAG,GAAG,CAAC;QAC1B,MAAM,gBAAgB,GAAG,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,uBAAuB,CAAC,KAAK,EACnD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC,IAAI,GAAG,uBAAuB,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAC7H,CAAC;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,KAAK,EACL,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC,GAAG,GAAG,uBAAuB,CAAC,MAAM,CAAC,MAAM,GAAG,mBAAmB,CAC9H,CAAC;AACF,QAAA,MAAM,WAAW,GACf,KAAK,IAAI,QAAQ,GAAG,aAAa,GAAG,KAAK,IAAI,QAAQ,GAAG,aAAa,GAAG,KAAK,IAAI,QAAQ,GAAG,aAAa,GAAG,kBAAkB,CAAC;QACjI,MAAM,kBAAkB,GAAG,KAAK,IAAI,QAAQ,GAAG,WAAW,GAAG,KAAK,IAAI,QAAQ,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAChH,QAAA,MAAM,OAAO,GAAgC;YAC3C,KAAK;YACL,MAAM;AACN,YAAA,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,IAAI,CAAC,KAAK,GAAG,WAAW,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC;AAClH,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,YAAY,EAAE,IAAI;YAClB,WAAW;YACX,kBAAkB;YAClB,GAAG,IAAI,CAAC,OAAO;SAChB,CAAC;AACF,QAAA,OAAO,OAAO,CAAC;KAChB;AAED;;AAEG;IACK,SAAS,GAAA;AACf,QAAA,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;AACzC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnE,SAAA;KACF;AAED;;AAEG;IACI,eAAe,GAAA;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED;;AAEG;AACI,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,MAAM,YAAY,GAA4B,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC;AACzE,QAAA,MAAM,OAAO,GAAgC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC;QAC3E,IAAI,CAAC,OAAO,YAAY,KAAK,WAAW,IAAI,YAAY,KAAK,IAAI,MAAM,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE;YAC1H,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;KACF;iIAzFU,sBAAsB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAqBb,QAAQ,EAAA,EAAA,EAAA,KAAA,EAA0C,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AArB3E,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,sPC5BnC,mEACA,EAAA,MAAA,EAAA,CAAA,iHAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FD2Ba,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBANlC,SAAS;+BACE,iBAAiB,EAAA,eAAA,EAGV,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mEAAA,EAAA,MAAA,EAAA,CAAA,iHAAA,CAAA,EAAA,CAAA;;0BAuBlC,MAAM;2BAAC,QAAQ,CAAA;;0BAAmC,MAAM;2BAAC,gBAAgB,CAAA;4CAjBtE,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAKU,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKmC,SAAS,EAAA,CAAA;sBAAjD,SAAS;uBAAC,WAAW,CAAA;;;AE1BxB,MAMa,8BAA8B,CAAA;IA0BzC,WAA+C,CAAA,GAAa,EAA6C,SAA0B,EAAA;QAApF,IAAG,CAAA,GAAA,GAAH,GAAG,CAAU;QAA6C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;AAzBnI;;AAEG;QACa,IAAO,CAAA,OAAA,GAAG,SAAS,CAAC;AAEpC;;AAEG;AACa,QAAA,IAAA,CAAA,IAAI,GAA4B;AAC9C,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,KAAK,EAAE,EAAE;SACV,CAAC;AAEF;;AAEG;QACa,IAAO,CAAA,OAAA,GAAwC,EAAE,CAAC;KAOqE;AAEvI;;;AAGG;IACK,YAAY,GAAA;AAClB,QAAA,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,QAAA,MAAM,SAAS,GAAG;AAChB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,MAAM,EAAE,EAAE;SACX,CAAC;AACF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;AAC3G,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3G,QAAA,MAAM,OAAO,GAAwC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAChG,QAAA,OAAO,OAAO,CAAC;KAChB;AAED;;AAEG;IACK,SAAS,GAAA;AACf,QAAA,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;AACzC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3E,SAAA;KACF;AAED;;AAEG;IACI,eAAe,GAAA;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED;;AAEG;AACI,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,MAAM,QAAQ,GAAwC,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC;AAClF,QAAA,MAAM,QAAQ,GAAwC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC;AACjF,QAAA,MAAM,OAAO,GAAwC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC;AACnF,QAAA,IACE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM,KAAK,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM;aACxG,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,CAAC,EACpD;YACA,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;KACF;iIA3EU,8BAA8B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EA0BrB,QAAQ,EAAA,EAAA,EAAA,KAAA,EAA0C,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AA1B3E,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,+PC3B3C,kKAKA,EAAA,MAAA,EAAA,CAAA,+KAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FDsBa,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAN1C,SAAS;+BACE,0BAA0B,EAAA,eAAA,EAGnB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,kKAAA,EAAA,MAAA,EAAA,CAAA,+KAAA,CAAA,EAAA,CAAA;;0BA4BlC,MAAM;2BAAC,QAAQ,CAAA;;0BAAmC,MAAM;2BAAC,gBAAgB,CAAA;4CAtBtE,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAUU,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKmC,SAAS,EAAA,CAAA;sBAAjD,SAAS;uBAAC,WAAW,CAAA;;;AE7BxB,MAMa,qBAAqB,CAAA;IAqBhC,WAA+C,CAAA,GAAa,EAA6C,SAA0B,EAAA;QAApF,IAAG,CAAA,GAAA,GAAH,GAAG,CAAU;QAA6C,IAAS,CAAA,SAAA,GAAT,SAAS,CAAiB;AApBnI;;AAEG;QACa,IAAO,CAAA,OAAA,GAAG,QAAQ,CAAC;AAEnC;;AAEG;QACa,IAAI,CAAA,IAAA,GAAqB,EAAE,CAAC;AAE5C;;AAEG;QACa,IAAO,CAAA,OAAA,GAA+B,EAAE,CAAC;KAO8E;AAEvI;;;AAGG;IACK,YAAY,GAAA;QAClB,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAC/B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,sBAAsB,CAAC,KAAK,EAClD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,GAAG,sBAAsB,CAAC,MAAM,CAAC,KAAK,GAAG,mBAAmB,CAC3H,CAAC;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CACrB,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,EAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC,MAAM,CAAC,GAAG,GAAG,sBAAsB,CAAC,MAAM,CAAC,MAAM,GAAG,mBAAmB,CAC3H,CAAC;QACF,MAAM,WAAW,GAAG,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,QAAA,MAAM,KAAK,GAA+B;YACxC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,KAAK,GAAG,WAAW;YAC/C,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,IAAI,MAAM,GAAG,WAAW;SACjD,CAAC;AACF,QAAA,MAAM,OAAO,GAA+B;YAC1C,GAAG,IAAI,CAAC,OAAO;YACf,KAAK;YACL,MAAM;YACN,KAAK;SACN,CAAC;AACF,QAAA,OAAO,OAAO,CAAC;KAChB;AAED;;AAEG;IACK,SAAS,GAAA;AACf,QAAA,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,EAAE;AACzC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACpC,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AACvE,SAAA;KACF;AAED;;AAEG;IACI,eAAe,GAAA;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED;;AAEG;AACI,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,MAAM,IAAI,GAA2B,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC;AAChE,QAAA,MAAM,OAAO,GAA+B,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC;QAC1E,IAAI,CAAC,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,IAAI,MAAM,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,KAAK,IAAI,CAAC,EAAE;YAC1G,IAAI,CAAC,SAAS,EAAE,CAAC;AAClB,SAAA;KACF;iIA9EU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAqBZ,QAAQ,EAAA,EAAA,EAAA,KAAA,EAA0C,gBAAgB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AArB3E,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,qPC5BlC,mEACA,EAAA,MAAA,EAAA,CAAA,iHAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FD2Ba,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;+BACE,gBAAgB,EAAA,eAAA,EAGT,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mEAAA,EAAA,MAAA,EAAA,CAAA,iHAAA,CAAA,EAAA,CAAA;;0BAuBlC,MAAM;2BAAC,QAAQ,CAAA;;0BAAmC,MAAM;2BAAC,gBAAgB,CAAA;4CAjBtE,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKU,IAAI,EAAA,CAAA;sBAAnB,KAAK;gBAKU,OAAO,EAAA,CAAA;sBAAtB,KAAK;gBAKmC,SAAS,EAAA,CAAA;sBAAjD,SAAS;uBAAC,WAAW,CAAA;;;AEjCxB,MAMa,yBAAyB,CAAA;AACpC;;AAEG;AACH,IAAA,IAAW,YAAY,GAAA;QACrB,OAAsB;AACpB,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;AAC1B,YAAA,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;AAC1B,YAAA,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE;AAC5B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;AAC3B,YAAA,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE;SAC5B,CAAC;KACH;AAED;;AAEG;AACH,IAAA,IAAW,aAAa,GAAA;QACtB,OAAyB;AACvB,YAAA;AACE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AACjE,aAAA,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;AAC3C,YAAA;AACE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AACjE,aAAA,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;AAC3C,YAAA;AACE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AAChE,gBAAA,EAAE,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;AACjE,aAAA,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC;SAC5C,CAAC;KACH;AAED;;AAEG;AACH,IAAA,IAAW,cAAc,GAAA;QACvB,OAAgC;AAC9B,YAAA;gBACE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACpC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACpC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACtC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACrC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACrC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACpC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACtC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACtC,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;AAChE,aAAA;AACD,YAAA;gBACE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACpC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACpC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACtC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACrC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACrC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACpC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACtC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;gBACtC,EAAE,IAAI,EAAE,gCAAgC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE;AAChE,aAAA;SACF,CAAC;KACH;AAED;;AAEG;AACH,IAAA,IAAW,YAAY,GAAA;QACrB,OAA4B;AAC1B,YAAA,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE;AACpB,YAAA,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE;AACpB,YAAA,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;AACtB,YAAA,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE;AACrB,YAAA,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE;AACrB,YAAA,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE;SACrB,CAAC;KACH;AAED;;AAEG;AACH,IAAA,IAAW,sBAAsB,GAAA;AAC/B,QAAA,MAAM,KAAK,GAAG;AACZ,YAAA,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;AACrC,YAAA,QAAQ,EAAE;AACR,gBAAA,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;AAC5C,gBAAA,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;AAC7C,gBAAA,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;AAC9C,gBAAA,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;AACvD,gBAAA,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;AAC9C,gBAAA,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;AACtD,gBAAA,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;AAC/C,gBAAA,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;AAC/C,aAAA;SACF,CAAC;QACF,MAAM,OAAO,GAAuC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACpH,QAAA,MAAM,QAAQ,GAAwC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,MAAM;AACxF,YAAA,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,GAAG,CAAC,IAAI;AACd,YAAA,OAAO,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC;YACzB,GAAG,EAAE,GAAG,CAAC,GAAG;AACZ,YAAA,UAAU,EAAE,CAAC;AACd,SAAA,CAAC,CAAC,CAAC;AACJ,QAAA,MAAM,KAAK,GAAgC,CAAC,GAAG,QAAQ,CAAC,CAAC;QACzD,MAAM,KAAK,GAAqC,QAAQ;aACrD,GAAG,CAAC,MAAM,IAAG;YACZ,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAG;gBACjC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;AACzE,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,gBAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC5B,aAAC,CAAC,CAAC;AACL,SAAC,CAAC;AACD,aAAA,MAAM,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;aAC7G,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;AAClG,QAAA,MAAM,SAAS,GAA4B;YACzC,OAAO;YACP,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK;AAC9B,gBAAA,GAAG,IAAI;AACP,gBAAA,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;AACzF,aAAA,CAAC,CAAC;YACH,KAAK;YACL,KAAK;SACN,CAAC;AACF,QAAA,OAAO,SAAS,CAAC;KAClB;AAyDD,IAAA,WAAA,CAA6B,kBAAsC,EAAA;QAAtC,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAoB;QAvDlD,IAAW,CAAA,WAAA,GAAG,IAAI,CAAC,kBAAkB;aACnD,OAAO,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;AAC3G,aAAA,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;QAE5F,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACrD,SAAS,CAAC,MACR,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACtB,KAAK,EAAE,EACP,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAC1E,CACF,CACF,CAAC;AAEc,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACtD,SAAS,CAAC,MACR,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACtB,KAAK,EAAE,EACP,GAAG,CAAC,OAAO;YACT,IAAI,EAAE,IAAI,CAAC,aAAa;AACxB,YAAA,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAChC,YAAA,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;AACpD,YAAA,mBAAmB,EAAE,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AACxD,YAAA,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;AACpD,SAAA,CAAC,CAAC,CACJ,CACF,CACF,CAAC;QAEc,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACvD,SAAS,CAAC,MACR,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACtB,KAAK,EAAE,EACP,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAC9E,CACF,CACF,CAAC;QAEc,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CACrD,SAAS,CAAC,MACR,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACtB,KAAK,EAAE,EACP,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,CAC1E,CACF,CACF,CAAC;QAEc,IAAyB,CAAA,yBAAA,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAC/D,SAAS,CAAC,MACR,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CACtB,KAAK,EAAE,EACP,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,sBAAsB,EAAE,OAAO,EAAE,IAAI,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC,CAC9F,CACF,CACF,CAAC;QAIe,IAAO,CAAA,OAAA,GAAG,GAAG,CAAC;KAFwC;AAIhE,IAAA,WAAW,CAAC,KAAc,EAAA;QAC/B,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;KAChE;AAEM,IAAA,eAAe,CAAC,KAAc,EAAA;QACnC,MAAM,YAAY,GAAG,SAAS,CAAC;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,IAAI,YAAY,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;KACnF;AAED;;AAEG;IACI,eAAe,GAAA;QACpB,OAAkC;AAChC,YAAA,UAAU,EAAE,mBAAmB;AAC/B,YAAA,UAAU,EAAE,mBAAmB;AAC/B,YAAA,UAAU,EAAE,mBAAmB;SAChC,CAAC;KACH;AAED;;;AAGG;IACI,gBAAgB,CAAC,aAA0B,SAAS,EAAA;QACzD,OAAmC;YACjC,UAAU,EAAE,CAAmC,gCAAA,EAAA,UAAU,CAAE,CAAA;AAC3D,YAAA,UAAU,EAAE,YAAY;AACxB,YAAA,UAAU,EAAE,aAAa;YACzB,UAAU;SACX,CAAC;KACH;AAED;;AAEG;IACI,iBAAiB,GAAA;QACtB,OAAoC;AAClC,YAAA,UAAU,EAAE,qBAAqB;SAClC,CAAC;KACH;AAED;;AAEG;IACI,eAAe,GAAA;QACpB,OAAkC;AAChC,YAAA,UAAU,EAAE,mBAAmB;SAChC,CAAC;KACH;AAED;;AAEG;IACI,yBAAyB,GAAA;QAC9B,OAA4C;AAC1C,YAAA,UAAU,EAAE,8BAA8B;SAC3C,CAAC;KACH;iIAnQU,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAzB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,yBAAyB,0DCpBtC,gpDAyCA,EAAA,MAAA,EAAA,CAAA,sJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAO,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,8BAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,qBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FDrBa,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;+BACE,oBAAoB,EAAA,eAAA,EAGb,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,gpDAAA,EAAA,MAAA,EAAA,CAAA,sJAAA,CAAA,EAAA,CAAA;;;AERjD,MAmBa,iBAAiB,CAAA;iIAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,iBAhB1B,oBAAoB;YACpB,sBAAsB;YACtB,8BAA8B;YAC9B,oBAAoB;YACpB,qBAAqB;YACrB,yBAAyB,CAAA,EAAA,OAAA,EAAA,CAPjB,YAAY,CAAA,EAAA,OAAA,EAAA,CAUpB,oBAAoB;YACpB,sBAAsB;YACtB,8BAA8B;YAC9B,oBAAoB;YACpB,qBAAqB;YACrB,yBAAyB,CAAA,EAAA,CAAA,CAAA,EAAA;AAGhB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAlBlB,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAkBX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAnB7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,YAAY,EAAE;wBACZ,oBAAoB;wBACpB,sBAAsB;wBACtB,8BAA8B;wBAC9B,oBAAoB;wBACpB,qBAAqB;wBACrB,yBAAyB;AAC1B,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,oBAAoB;wBACpB,sBAAsB;wBACtB,8BAA8B;wBAC9B,oBAAoB;wBACpB,qBAAqB;wBACrB,yBAAyB;AAC1B,qBAAA;AACF,iBAAA,CAAA;;;AC5BD;;AAEG;;;;"}