{"version":3,"file":"ej2-svg-base.min.js","sources":["../../src/tooltip/interface.js","../../src/tooltip/helper.js","../../src/svg-render/svg-renderer.js","../../src/svg-render/canvas-renderer.js","../../src/tooltip/tooltip.js"],"sourcesContent":["/** @private */\nexport function getTooltipThemeColor(theme) {\n var style;\n switch (theme) {\n case 'Highcontrast':\n case 'HighContrast':\n style = {\n tooltipFill: '#ffffff',\n tooltipBoldLabel: '#000000',\n tooltipLightLabel: '#000000',\n tooltipHeaderLine: '#969696'\n };\n break;\n case 'MaterialDark':\n case 'FabricDark':\n case 'BootstrapDark':\n style = {\n tooltipFill: '#F4F4F4',\n tooltipBoldLabel: '#282727',\n tooltipLightLabel: '#333232',\n tooltipHeaderLine: '#9A9A9A'\n };\n break;\n case 'Bootstrap4':\n style = {\n tooltipFill: '#020202',\n tooltipBoldLabel: 'rgba(255, 255, 255)',\n tooltipLightLabel: 'rgba(255, 255, 255, 0.9)',\n tooltipHeaderLine: 'rgba(255, 255, 255, 0.2)'\n };\n break;\n case 'Tailwind':\n style = {\n tooltipFill: '#111827',\n tooltipBoldLabel: '#D1D5DB',\n tooltipLightLabel: '#F9FAFB',\n tooltipHeaderLine: '#6B7280',\n };\n break;\n case 'TailwindDark':\n style = {\n tooltipFill: '#F9FAFB',\n tooltipBoldLabel: '#6B7280',\n tooltipLightLabel: '#1F2937',\n tooltipHeaderLine: '#9CA3AF',\n };\n break;\n case 'Bootstrap5':\n style = {\n tooltipFill: '#212529',\n tooltipBoldLabel: '#F9FAFB',\n tooltipLightLabel: '#F9FAFB',\n tooltipHeaderLine: '#9CA3AF',\n };\n break;\n case 'Bootstrap5Dark':\n style = {\n tooltipFill: '#E9ECEF',\n tooltipBoldLabel: '#212529',\n tooltipLightLabel: '#212529',\n tooltipHeaderLine: '#ADB5BD',\n };\n break;\n case 'Fluent':\n style = {\n tooltipFill: '#FFFFFF',\n tooltipBoldLabel: '#323130',\n tooltipLightLabel: '#323130',\n tooltipHeaderLine: '#D2D0CE',\n };\n break;\n case 'FluentDark':\n style = {\n tooltipFill: '#252423',\n tooltipBoldLabel: '#F3F2F1',\n tooltipLightLabel: '#F3F2F1',\n tooltipHeaderLine: '#3B3A39',\n };\n break;\n default:\n style = {\n tooltipFill: '#000816',\n tooltipBoldLabel: '#ffffff',\n tooltipLightLabel: '#dbdbdb',\n tooltipHeaderLine: '#ffffff'\n };\n break;\n }\n return style;\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { SvgRenderer } from '../svg-render/index';\nimport { createElement, remove, merge } from '@syncfusion/ej2-base';\n/**\n * Function to measure the height and width of the text.\n *\n * @private\n * @param {string} text To get a text\n * @param {FontModel} font To get a font of the text\n * @returns {Size} measureText\n */\nexport function measureText(text, font) {\n var breakText = text || ''; // For avoid NuLL value\n var htmlObject = document.getElementById('chartmeasuretext');\n if (htmlObject === null) {\n htmlObject = createElement('text', { id: 'chartmeasuretext' });\n document.body.appendChild(htmlObject);\n }\n if (typeof (text) === 'string' && (text.indexOf('<') > -1 || text.indexOf('>') > -1)) {\n var textArray = text.split(' ');\n for (var i = 0; i < textArray.length; i++) {\n if (textArray[i].indexOf('
') === -1) {\n textArray[i] = textArray[i].replace(/[<>]/g, '&');\n }\n }\n text = textArray.join(' ');\n }\n htmlObject.innerHTML = (breakText.indexOf('
') > -1 || breakText.indexOf('
') > -1) ? breakText : text;\n htmlObject.style.position = 'fixed';\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.visibility = 'hidden';\n htmlObject.style.top = '-100';\n htmlObject.style.left = '0';\n htmlObject.style.whiteSpace = 'nowrap';\n // For bootstrap line height issue\n htmlObject.style.lineHeight = 'normal';\n return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/** @private */\nexport function withInAreaBounds(x, y, areaBounds, width, height) {\n if (width === void 0) { width = 0; }\n if (height === void 0) { height = 0; }\n return (x >= areaBounds.x - width && x <= areaBounds.x + areaBounds.width + width && y >= areaBounds.y - height\n && y <= areaBounds.y + areaBounds.height + height);\n}\n/** @private */\nexport function findDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY, controlName) {\n if (controlName === void 0) { controlName = ''; }\n var direction = '';\n var startX = rect.x;\n var startY = rect.y;\n var width = rect.x + rect.width;\n var height = rect.y + rect.height;\n if (top) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + startY + ' ' + (startX + rX) + ' ' + startY + ' ' +\n ' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n + startY + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height));\n if (arrowPadding !== 0) {\n if (controlName === 'RangeNavigator') {\n if ((arrowLocation.x - arrowPadding) > width / 2) {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX + arrowPadding) + ' ' + (height + arrowPadding)\n + ' L' + ' ' + (arrowLocation.x) + ' ' + height);\n }\n else {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX - arrowPadding) + ' ' + (height + arrowPadding)\n + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + height);\n }\n }\n else {\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (height + arrowPadding)\n + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + height);\n }\n }\n if ((arrowLocation.x - arrowPadding) > startX) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n if (arrowPadding === 0) {\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n }\n }\n }\n else if (bottom) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (arrowLocation.y));\n direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY)\n + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n + (height) + ' ' + (width - rX) + ' ' + (height) +\n ' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else if (left) {\n direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n + (startY) + ' ' + (width) + ' ' + (startY + rY) + ' L' + ' ' + (width) + ' ' + (arrowLocation.y - arrowPadding));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (width + arrowPadding) + ' ' + (tipY - arrowPadding)) :\n direction.concat(' L' + ' ' + (width + arrowPadding) + ' ' + (tipY));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y)) :\n direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding));\n direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n }\n else {\n direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n + (startY) + ' ' + (startX) + ' ' + (startY + rY) + ' L' + ' ' + (startX) + ' ' + (arrowLocation.y - arrowPadding));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (startX - arrowPadding) + ' ' + (tipY - arrowPadding)) :\n direction.concat(' L' + ' ' + (startX - arrowPadding) + ' ' + (tipY));\n direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y)) :\n direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding));\n direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n + (height) + ' ' + (startX + rX) + ' ' + (height));\n direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n + (height) + ' ' + (width) + ' ' + (height - rY) +\n ' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n }\n return direction;\n}\n/** @private */\nvar Size = /** @class */ (function () {\n function Size(width, height) {\n this.width = width;\n this.height = height;\n }\n return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n function Rect(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n return Rect;\n}());\nexport { Rect };\nvar Side = /** @class */ (function () {\n function Side(bottom, right) {\n this.isRight = right;\n this.isBottom = bottom;\n }\n return Side;\n}());\nexport { Side };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n function CustomizeOption(id) {\n this.id = id;\n }\n return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n __extends(TextOption, _super);\n function TextOption(id, x, y, anchor, text, transform, baseLine, labelRotation) {\n if (transform === void 0) { transform = ''; }\n var _this = _super.call(this, id) || this;\n _this.transform = '';\n _this.baseLine = 'auto';\n _this.labelRotation = 0;\n _this.x = x;\n _this.y = y;\n _this.anchor = anchor;\n _this.text = text;\n _this.transform = transform;\n _this.baseLine = baseLine;\n _this.labelRotation = labelRotation;\n return _this;\n }\n return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nexport function getElement(id) {\n return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n var element = getElement(id);\n if (element) {\n remove(element);\n }\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n var renderer = new SvgRenderer('');\n var temp = calculateShapes(location, size, shape, options, url);\n var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n htmlObject.setAttribute('aria-label', label);\n return htmlObject;\n}\n/** @private */\nexport function calculateShapes(location, size, shape, options, url) {\n var path;\n var functionName = 'Path';\n var width = size.width;\n var height = size.height;\n var locX = location.x;\n var locY = location.y;\n var x = location.x + (-width / 2);\n var y = location.y + (-height / 2);\n switch (shape) {\n case 'Circle':\n case 'Bubble':\n functionName = 'Ellipse';\n merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n break;\n case 'Cross':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'HorizontalLine':\n path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n merge(options, { 'd': path });\n break;\n case 'VerticalLine':\n path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n merge(options, { 'd': path });\n break;\n case 'Diamond':\n path = 'M' + ' ' + x + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + locY + ' z';\n merge(options, { 'd': path });\n break;\n case 'Rectangle':\n path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Triangle':\n path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'InvertedTriangle':\n path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n 'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n merge(options, { 'd': path });\n break;\n case 'Pentagon':\n var eq = 72;\n var xValue = void 0;\n var yValue = void 0;\n for (var i = 0; i <= 5; i++) {\n xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n if (i === 0) {\n path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n }\n else {\n path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n }\n }\n path = path.concat('Z');\n merge(options, { 'd': path });\n break;\n case 'Image':\n functionName = 'Image';\n merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n break;\n }\n return { renderOption: options, functionName: functionName };\n}\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n __extends(PathOption, _super);\n function PathOption(id, fill, width, color, opacity, dashArray, d) {\n var _this = _super.call(this, id) || this;\n _this.opacity = opacity;\n _this.fill = fill;\n _this.stroke = color;\n _this['stroke-width'] = width;\n _this['stroke-dasharray'] = dashArray;\n _this.d = d;\n return _this;\n }\n return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nexport function textElement(options, font, color, parent) {\n var renderOptions = {};\n var renderer = new SvgRenderer('');\n renderOptions = {\n 'id': options.id,\n 'x': options.x,\n 'y': options.y,\n 'fill': color,\n 'font-size': font.size,\n 'font-style': font.fontStyle,\n 'font-family': font.fontFamily,\n 'font-weight': font.fontWeight,\n 'text-anchor': options.anchor,\n 'transform': options.transform,\n 'opacity': font.opacity,\n 'dominant-baseline': options.baseLine\n };\n var text = typeof options.text === 'string' ? options.text : options.text[0];\n var htmlObject = renderer.createText(renderOptions, text);\n htmlObject.style.fontFamily = font.fontFamily;\n htmlObject.style.fontStyle = font.fontStyle;\n htmlObject.style.fontSize = font.size;\n htmlObject.style.fontWeight = font.fontWeight;\n htmlObject.style.color = font.color;\n parent.appendChild(htmlObject);\n return htmlObject;\n}\nvar TooltipLocation = /** @class */ (function () {\n function TooltipLocation(x, y) {\n this.x = x;\n this.y = y;\n }\n return TooltipLocation;\n}());\nexport { TooltipLocation };\n","/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * To import utils\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar SvgRenderer = /** @class */ (function () {\n /* End-Properties */\n function SvgRenderer(rootID) {\n //Internal Variables\n this.svgLink = 'http://www.w3.org/2000/svg';\n this.rootId = rootID;\n }\n // method to get the attributes value\n // tslint:disable-next-line:no-any\n SvgRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n }; /* tslint:enable */\n /**\n * To create a Html5 SVG element\n *\n * @param {SVGAttributes} options - Options to create SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createSvg = function (options) {\n if (isNullOrUndefined(options.id)) {\n options.id = this.rootId + '_svg';\n }\n this.svgObj = document.getElementById(options.id);\n if (isNullOrUndefined(document.getElementById(options.id))) {\n this.svgObj = document.createElementNS(this.svgLink, 'svg');\n }\n this.svgObj = this.setElementAttributes(options, this.svgObj);\n this.setSVGSize(options.width, options.height);\n return this.svgObj;\n };\n // method to set the height and width for the SVG element\n SvgRenderer.prototype.setSVGSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width) || this.width <= 0) {\n this.svgObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.svgObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height) || this.height <= 0) {\n this.svgObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.svgObj.setAttribute('height', this.height.toString());\n }\n };\n /**\n * To draw a path\n *\n * @param {PathAttributes} options - Options to draw a path in SVG\n * @returns {Element} It returns a appropriate path\n */\n SvgRenderer.prototype.drawPath = function (options) {\n var path = document.getElementById(options.id);\n if (path === null) {\n path = document.createElementNS(this.svgLink, 'path');\n }\n path = this.setElementAttributes(options, path);\n return path;\n };\n /**\n * To draw a line\n *\n * @param {LineAttributes} options - Options to draw a line in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawLine = function (options) {\n var line = document.getElementById(options.id);\n if (line === null) {\n line = document.createElementNS(this.svgLink, 'line');\n }\n line = this.setElementAttributes(options, line);\n return line;\n };\n /**\n * To draw a rectangle\n *\n * @param {BaseAttibutes} options - Required options to draw a rectangle in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawRectangle = function (options) {\n var rectangle = document.getElementById(options.id);\n if (rectangle === null) {\n rectangle = document.createElementNS(this.svgLink, 'rect');\n }\n rectangle = this.setElementAttributes(options, rectangle);\n return rectangle;\n };\n /**\n * To draw a circle\n *\n * @param {CircleAttributes} options - Required options to draw a circle in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawCircle = function (options) {\n var circle = document.getElementById(options.id);\n if (circle === null) {\n circle = document.createElementNS(this.svgLink, 'circle');\n }\n circle = this.setElementAttributes(options, circle);\n return circle;\n };\n /**\n * To draw a polyline\n *\n * @param {PolylineAttributes} options - Options required to draw a polyline\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawPolyline = function (options) {\n var polyline = document.getElementById(options.id);\n if (polyline === null) {\n polyline = document.createElementNS(this.svgLink, 'polyline');\n }\n polyline = this.setElementAttributes(options, polyline);\n return polyline;\n };\n /**\n * To draw an ellipse\n *\n * @param {EllipseAttributes} options - Options required to draw an ellipse\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawEllipse = function (options) {\n var ellipse = document.getElementById(options.id);\n if (ellipse === null) {\n ellipse = document.createElementNS(this.svgLink, 'ellipse');\n }\n ellipse = this.setElementAttributes(options, ellipse);\n return ellipse;\n };\n /**\n * To draw a polygon\n *\n * @param {PolylineAttributes} options - Options needed to draw a polygon in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawPolygon = function (options) {\n var polygon = document.getElementById(options.id);\n if (polygon === null) {\n polygon = document.createElementNS(this.svgLink, 'polygon');\n }\n polygon = this.setElementAttributes(options, polygon);\n return polygon;\n };\n /**\n * To draw an image\n *\n * @param {ImageAttributes} options - Required options to draw an image in SVG\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawImage = function (options) {\n var img = document.createElementNS(this.svgLink, 'image');\n img.setAttributeNS(null, 'height', options.height.toString());\n img.setAttributeNS(null, 'width', options.width.toString());\n img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', options.href);\n img.setAttributeNS(null, 'x', options.x.toString());\n img.setAttributeNS(null, 'y', options.y.toString());\n img.setAttributeNS(null, 'id', options.id);\n img.setAttributeNS(null, 'visibility', options.visibility);\n if (!isNullOrUndefined(this.getOptionValue(options, 'clip-path'))) {\n img.setAttributeNS(null, 'clip-path', this.getOptionValue(options, 'clip-path'));\n }\n if (!isNullOrUndefined(options.preserveAspectRatio)) {\n img.setAttributeNS(null, 'preserveAspectRatio', options.preserveAspectRatio);\n }\n return img;\n };\n /**\n * To draw a text\n *\n * @param {TextAttributes} options - Options needed to draw a text in SVG\n * @param {string} label - Label of the text\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createText = function (options, label) {\n var text = document.createElementNS(this.svgLink, 'text');\n text = this.setElementAttributes(options, text);\n if (!isNullOrUndefined(label)) {\n text.textContent = label;\n }\n return text;\n };\n /**\n * To create a tSpan\n *\n * @param {TextAttributes} options - Options to create tSpan\n * @param {string} label - The text content which is to be rendered in the tSpan\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createTSpan = function (options, label) {\n var tSpan = document.createElementNS(this.svgLink, 'tspan');\n tSpan = this.setElementAttributes(options, tSpan);\n if (!isNullOrUndefined(label)) {\n tSpan.textContent = label;\n }\n return tSpan;\n };\n /**\n * To create a title\n *\n * @param {string} text - The text content which is to be rendered in the title\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createTitle = function (text) {\n var title = document.createElementNS(this.svgLink, 'title');\n title.textContent = text;\n return title;\n };\n /**\n * To create defs element in SVG\n *\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createDefs = function () {\n var defs = document.createElementNS(this.svgLink, 'defs');\n return defs;\n };\n /**\n * To create clip path in SVG\n *\n * @param {BaseAttibutes} options - Options needed to create clip path\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createClipPath = function (options) {\n var clipPath = document.createElementNS(this.svgLink, 'clipPath');\n clipPath = this.setElementAttributes(options, clipPath);\n return clipPath;\n };\n /**\n * To create foreign object in SVG\n *\n * @param {BaseAttibutes} options - Options needed to create foreign object\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createForeignObject = function (options) {\n var foreignObject = document.createElementNS(this.svgLink, 'foreignObject');\n foreignObject = this.setElementAttributes(options, foreignObject);\n return foreignObject;\n };\n /**\n * To create group element in SVG\n *\n * @param {BaseAttibutes} options - Options needed to create group\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createGroup = function (options) {\n var group = document.createElementNS(this.svgLink, 'g');\n group = this.setElementAttributes(options, group);\n return group;\n };\n /**\n * To create pattern in SVG\n *\n * @param {PatternAttributes} options - Required options to create pattern in SVG\n * @param {string} element - Specifies the name of the pattern\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.createPattern = function (options, element) {\n var pattern = document.createElementNS(this.svgLink, element);\n pattern = this.setElementAttributes(options, pattern);\n return pattern;\n };\n /**\n * To create radial gradient in SVG\n *\n * @param {string[]} colors - Specifies the colors required to create radial gradient\n * @param {string} name - Specifies the name of the gradient\n * @param {RadialGradient} options - value for radial gradient\n * @returns {string} It returns color name\n */\n SvgRenderer.prototype.createRadialGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'radialGradient',\n 'cx': options.cx + '%',\n 'cy': options.cy + '%',\n 'r': options.r + '%',\n 'fx': options.fx + '%',\n 'fy': options.fy + '%'\n };\n this.drawGradient('radialGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'radialGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To create linear gradient in SVG\n *\n * @param {GradientColor[]} colors - Array of string specifies the values for color\n * @param {string} name - Specifies the name of the gradient\n * @param {LinearGradient} options - Specifies the options for gradient\n * @returns {string} It returns color name\n */\n SvgRenderer.prototype.createLinearGradient = function (colors, name, options) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n var newOptions = {\n 'id': this.rootId + '_' + name + 'linearGradient',\n 'x1': options.x1 + '%',\n 'y1': options.y1 + '%',\n 'x2': options.x2 + '%',\n 'y2': options.y2 + '%'\n };\n this.drawGradient('linearGradient', newOptions, colors);\n colorName = 'url(#' + this.rootId + '_' + name + 'linearGradient)';\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To render the gradient element in SVG\n *\n * @param {string} gradientType - Specifies the type of the gradient\n * @param {RadialGradient | LinearGradient} options - Options required to render a gradient\n * @param {string[]} colors - Array of string specifies the values for color\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawGradient = function (gradientType, options, colors) {\n var defs = this.createDefs();\n var gradient = document.createElementNS(this.svgLink, gradientType);\n gradient = this.setElementAttributes(options, gradient);\n for (var i = 0; i < colors.length; i++) {\n var stop_1 = document.createElementNS(this.svgLink, 'stop');\n stop_1.setAttribute('offset', colors[i].colorStop);\n stop_1.setAttribute('stop-color', colors[i].color);\n stop_1.setAttribute('stop-opacity', colors[i].opacity ? (colors[i].opacity) : '1');\n if (!isNullOrUndefined(colors[i].style)) {\n stop_1.style.cssText = colors[i].style;\n }\n gradient.appendChild(stop_1);\n }\n defs.appendChild(gradient);\n return defs;\n };\n /**\n * To render a clip path\n *\n * @param {BaseAttibutes} options - Options required to render a clip path\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n options.id = options.id + '_Rect';\n var rect = this.drawRectangle(options);\n clipPath.appendChild(rect);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To create circular clip path in SVG\n *\n * @param {CircleAttributes} options - Options required to create circular clip path\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.drawCircularClipPath = function (options) {\n var defs = this.createDefs();\n var clipPath = this.createClipPath({ 'id': options.id });\n options.id = options.id + '_Circle';\n var circle = this.drawCircle(options);\n clipPath.appendChild(circle);\n defs.appendChild(clipPath);\n return defs;\n };\n /**\n * To set the attributes to the element\n *\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {Element} element - The element to which the attributes need to be set\n * @returns {Element} It returns a appropriate element\n */\n SvgRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n for (var i = 0; i < keys.length; i++) {\n if (keys[i] === 'style') {\n element.style.cssText = options[keys[i]];\n }\n else {\n element.setAttribute(keys[i], options[keys[i]]);\n }\n }\n return element;\n };\n /**\n * To create a Html5 canvas element\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n SvgRenderer.prototype.createCanvas = function () {\n return null;\n };\n return SvgRenderer;\n}());\nexport { SvgRenderer };\n","/* eslint-disable no-case-declarations */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * To import utils.\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar CanvasRenderer = /** @class */ (function () {\n /* End-Properties */\n function CanvasRenderer(rootID) {\n this.rootId = rootID;\n }\n // method to get the attributes value\n // tslint:disable-next-line:no-any\n CanvasRenderer.prototype.getOptionValue = function (options, key) {\n return options[key];\n };\n /* tslint:enable */\n /**\n * To create a Html5 canvas element\n *\n * @param {BaseAttibutes} options - Options to create canvas\n * @returns {HTMLCanvasElement} Creating a canvas\n */\n CanvasRenderer.prototype.createCanvas = function (options) {\n var canvasObj = document.createElement('canvas');\n canvasObj.setAttribute('id', this.rootId + '_canvas');\n this.ctx = canvasObj.getContext('2d');\n this.canvasObj = canvasObj;\n this.setCanvasSize(options.width, options.height);\n return this.canvasObj;\n };\n /**\n * To set the width and height for the Html5 canvas element\n *\n * @param {number} width - width of the canvas\n * @param {number} height - height of the canvas\n * @returns {void} Setting canvas size\n */\n CanvasRenderer.prototype.setCanvasSize = function (width, height) {\n var element = document.getElementById(this.rootId);\n var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n if (isNullOrUndefined(this.width)) {\n this.canvasObj.setAttribute('width', width ? width.toString() : size.width.toString());\n }\n else {\n this.canvasObj.setAttribute('width', this.width.toString());\n }\n if (isNullOrUndefined(this.height)) {\n this.canvasObj.setAttribute('height', height ? height.toString() : '450');\n }\n else {\n this.canvasObj.setAttribute('height', this.height.toString());\n }\n };\n // To set the values to the attributes\n CanvasRenderer.prototype.setAttributes = function (options) {\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n var dashArray = this.getOptionValue(options, 'stroke-dasharray');\n if (!isNullOrUndefined(dashArray)) {\n var dashArrayString = dashArray.split(',');\n this.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n }\n this.ctx.strokeStyle = this.getOptionValue(options, 'stroke');\n };\n /**\n * To draw a line\n *\n * @param {LineAttributes} options - required options to draw a line on the canvas\n * @returns {void} To draw a line\n */\n CanvasRenderer.prototype.drawLine = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.moveTo(options.x1, options.y1);\n this.ctx.lineTo(options.x2, options.y2);\n this.ctx.stroke();\n this.ctx.restore();\n };\n /**\n * To draw a rectangle\n *\n * @param {RectAttributes} options - required options to draw a rectangle on the canvas.\n * @param {Int32Array} canvasTranslate TO get a translate value of canvas.\n * @returns {void} To draw rectangle.\n */\n CanvasRenderer.prototype.drawRectangle = function (options, canvasTranslate) {\n var canvasCtx = this.ctx;\n var cornerRadius = options.rx;\n this.ctx.save();\n this.ctx.beginPath();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.globalAlpha = this.getOptionValue(options, 'opacity');\n this.setAttributes(options);\n this.ctx.rect(options.x, options.y, options.width, options.height);\n if (cornerRadius !== null && cornerRadius >= 0) {\n this.drawCornerRadius(options);\n }\n else {\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n this.ctx.fillRect(options.x, options.y, options.width, options.height);\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n return (this.canvasObj);\n };\n // To draw the corner of a rectangle\n CanvasRenderer.prototype.drawCornerRadius = function (options) {\n var cornerRadius = options.rx;\n var x = options.x;\n var y = options.y;\n var width = options.width;\n var height = options.height;\n if (options.fill === 'none') {\n options.fill = 'transparent';\n }\n this.ctx.fillStyle = options.fill;\n if (width < 2 * cornerRadius) {\n cornerRadius = width / 2;\n }\n if (height < 2 * cornerRadius) {\n cornerRadius = height / 2;\n }\n this.ctx.beginPath();\n this.ctx.moveTo(x + width - cornerRadius, y);\n this.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n this.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n this.ctx.arcTo(x, y + height, x, y, cornerRadius);\n this.ctx.arcTo(x, y, x + width, y, cornerRadius);\n this.ctx.closePath();\n this.ctx.fill();\n this.ctx.stroke();\n };\n /**\n * To draw a path on the canvas\n *\n * @param {PathAttributes} options - options needed to draw path.\n * @param {Int32Array} canvasTranslate - Array of numbers to translate the canvas.\n * @returns {Element} To draw a path.\n */\n CanvasRenderer.prototype.drawPath = function (options, canvasTranslate) {\n var path = options.d;\n var dataSplit = path.split(' ');\n var borderWidth = this.getOptionValue(options, 'stroke-width');\n var canvasCtx = this.ctx;\n var flag = true;\n this.ctx.save();\n this.ctx.beginPath();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.globalAlpha = options.opacity ? options.opacity : this.getOptionValue(options, 'fill-opacity');\n this.setAttributes(options);\n for (var i = 0; i < dataSplit.length; i = i + 3) {\n var x1 = parseFloat(dataSplit[i + 1]);\n var y1 = parseFloat(dataSplit[i + 2]);\n switch (dataSplit[i]) {\n case 'M':\n if (!options.innerR && !options.cx) {\n this.ctx.moveTo(x1, y1);\n }\n break;\n case 'L':\n if (!options.innerR) {\n this.ctx.lineTo(x1, y1);\n }\n break;\n case 'Q':\n var q1 = parseFloat(dataSplit[i + 3]);\n var q2 = parseFloat(dataSplit[i + 4]);\n this.ctx.quadraticCurveTo(x1, y1, q1, q2);\n i = i + 2;\n break;\n case 'C':\n var c1 = parseFloat(dataSplit[i + 3]);\n var c2 = parseFloat(dataSplit[i + 4]);\n var c3 = parseFloat(dataSplit[i + 5]);\n var c4 = parseFloat(dataSplit[i + 6]);\n this.ctx.bezierCurveTo(x1, y1, c1, c2, c3, c4);\n i = i + 4;\n break;\n case 'A':\n if (!options.innerR) {\n if (options.cx) {\n this.ctx.arc(options.cx, options.cy, options.radius, 0, 2 * Math.PI, options.counterClockWise);\n }\n else {\n this.ctx.moveTo(options.x, options.y);\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.lineTo(options.x, options.y);\n }\n }\n else if (flag) {\n this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n this.ctx.arc(options.x, options.y, options.innerR, options.end, options.start, !options.counterClockWise);\n flag = false;\n }\n i = i + 5;\n break;\n case 'z':\n case 'Z':\n this.ctx.closePath();\n //since for loop is incremented by 3, to get next value after 'z' i is decremented for 2.\n i = i - 2;\n break;\n }\n }\n if (options.fill !== 'none' && options.fill !== undefined) {\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n }\n if (borderWidth > 0) {\n this.ctx.stroke();\n }\n this.ctx.restore();\n this.ctx = canvasCtx;\n return this.canvasObj;\n };\n /**\n * To draw a text\n *\n * @param {TextAttributes} options - options required to draw text\n * @param {string} label - Specifies the text which has to be drawn on the canvas\n * @param {number} transX - Specifies the text of translate X\n * @param {number} transY - Specifies the text of translate Y\n * @param {number} dy - Specifies the text of translate dy\n * @param {boolean} isTSpan - Specifies the boolean value of span value\n * @returns {void}\n */\n CanvasRenderer.prototype.createText = function (options, label, transX, transY, dy, isTSpan) {\n var fontWeight = this.getOptionValue(options, 'font-weight');\n if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n fontWeight = 'normal';\n }\n var fontSize = this.getOptionValue(options, 'font-size');\n var fontFamily = this.getOptionValue(options, 'font-family');\n var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n var anchor = this.getOptionValue(options, 'text-anchor');\n var opacity = options.opacity !== undefined ? options.opacity : 1;\n if (anchor === 'middle') {\n anchor = 'center';\n }\n this.ctx.save();\n this.ctx.fillStyle = options.fill;\n this.ctx.font = font;\n this.ctx.textAlign = anchor;\n this.ctx.globalAlpha = opacity;\n if (options.baseline) {\n this.ctx.textBaseline = options.baseline;\n }\n if (!isTSpan) {\n var txtlngth = 0;\n this.ctx.translate(options.x + (txtlngth / 2) + (transX ? transX : 0), options.y + (transY ? transY : 0));\n this.ctx.rotate(options.labelRotation * Math.PI / 180);\n }\n this.ctx.fillText(label, isTSpan ? options.x : 0, isTSpan ? dy : 0);\n this.ctx.restore();\n return this.canvasObj;\n };\n /**\n * To draw circle on the canvas\n *\n * @param {CircleAttributes} options - required options to draw the circle\n * @param {Int32Array} canvasTranslate Translate value of canvas\n * @returns {void}\n */\n CanvasRenderer.prototype.drawCircle = function (options, canvasTranslate) {\n var canvasCtx = this.ctx;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.arc(options.cx, options.cy, options.r, 0, 2 * Math.PI);\n this.ctx.fillStyle = options.fill;\n this.ctx.globalAlpha = options.opacity;\n this.ctx.fill();\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.setAttributes(options);\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n return this.canvasObj;\n };\n /**\n * To draw polyline\n *\n * @param {PolylineAttributes} options - options needed to draw polyline\n * @returns {void}\n */\n CanvasRenderer.prototype.drawPolyline = function (options) {\n this.ctx.save();\n this.ctx.beginPath();\n var points = options.points.split(' ');\n for (var i = 0; i < points.length - 1; i++) {\n var point = points[i].split(',');\n var x = parseFloat(point[0]);\n var y = parseFloat(point[1]);\n if (i === 0) {\n this.ctx.moveTo(x, y);\n }\n else {\n this.ctx.lineTo(x, y);\n }\n }\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n };\n /**\n * To draw an ellipse on the canvas\n *\n * @param {EllipseAttributes} options - options needed to draw ellipse\n * @param {Int32Array} canvasTranslate Translate value of canvas\n * @returns {void}\n */\n CanvasRenderer.prototype.drawEllipse = function (options, canvasTranslate) {\n var canvasCtx = this.ctx;\n var circumference = Math.max(options.rx, options.ry);\n var scaleX = options.rx / circumference;\n var scaleY = options.ry / circumference;\n this.ctx.save();\n this.ctx.beginPath();\n this.ctx.translate(options.cx, options.cy);\n if (canvasTranslate) {\n this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n }\n this.ctx.save();\n this.ctx.scale(scaleX, scaleY);\n this.ctx.arc(0, 0, circumference, 0, 2 * Math.PI, false);\n this.ctx.fillStyle = options.fill;\n this.ctx.fill();\n this.ctx.restore();\n this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n this.ctx.strokeStyle = options.stroke;\n this.ctx.stroke();\n this.ctx.restore();\n this.ctx = canvasCtx;\n };\n /**\n * To draw an image\n *\n * @param {ImageAttributes} options - options required to draw an image on the canvas\n * @returns {void}\n */\n CanvasRenderer.prototype.drawImage = function (options) {\n this.ctx.save();\n var imageObj = new Image();\n if (!isNullOrUndefined(options.href)) {\n imageObj.src = options.href;\n this.ctx.drawImage(imageObj, options.x, options.y, options.width, options.height);\n }\n this.ctx.restore();\n };\n /**\n * To create a linear gradient\n *\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @returns {string} It returns color\n */\n CanvasRenderer.prototype.createLinearGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createLinearGradient(0, 0, 0, this.canvasObj.height);\n }\n var color = this.setGradientValues(colors, myGradient);\n return color;\n };\n /**\n * To create a radial gradient\n *\n * @param {string[]} colors - Specifies the colors required to create linear gradient\n * @returns {string} It returns gradient color\n */\n CanvasRenderer.prototype.createRadialGradient = function (colors) {\n var myGradient;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n myGradient = this.ctx.createRadialGradient(0, 0, 0, 0, 0, this.canvasObj.height);\n }\n var colorName = this.setGradientValues(colors, myGradient);\n return colorName;\n };\n // To set the gradient values\n CanvasRenderer.prototype.setGradientValues = function (colors, myGradient) {\n var colorName;\n if (!isNullOrUndefined(colors[0].colorStop)) {\n for (var i = 0; i <= colors.length - 1; i++) {\n var color = colors[i].color;\n var newColorStop = (colors[i].colorStop).slice(0, -1);\n var stopColor = parseInt(newColorStop, 10) / 100;\n myGradient.addColorStop(stopColor, color);\n }\n colorName = myGradient.toString();\n }\n else {\n colorName = colors[0].color.toString();\n }\n return colorName;\n };\n /**\n * To set the attributes to the element\n *\n * @param {SVGCanvasAttributes} options - Attributes to set for the element\n * @param {HTMLElement} element - The element to which the attributes need to be set\n * @returns {HTMLElement} It returns null value\n */\n CanvasRenderer.prototype.setElementAttributes = function (options, element) {\n var keys = Object.keys(options);\n var values = Object.keys(options).map(function (key) { return options[key]; });\n for (var i = 0; i < keys.length; i++) {\n element.setAttribute(keys[i], values[i]);\n }\n return null;\n };\n /**\n * To update the values of the canvas element attributes\n *\n * @param {SVGCanvasAttributes} options - Specifies the colors required to create gradient\n * @returns {void}\n */\n CanvasRenderer.prototype.updateCanvasAttributes = function (options) {\n this.setElementAttributes(options, this.canvasObj);\n var ctx = this.ctx;\n if (!isNullOrUndefined(this.dataUrl)) {\n var img_1 = new Image;\n img_1.onload = function () {\n ctx.drawImage(img_1, 0, 0);\n };\n img_1.src = this.dataUrl;\n }\n };\n /**\n * This method clears the given rectangle region\n *\n * @param {Rect} rect The rect parameter as passed\n */\n CanvasRenderer.prototype.clearRect = function (rect) {\n this.ctx.restore();\n this.ctx.clearRect(rect.x, rect.y, rect.width, rect.height);\n };\n /**\n * For canvas rendering in chart\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.createGroup = function () {\n return null;\n };\n /**\n * To render a clip path\n *\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.drawClipPath = function () {\n return null;\n };\n /**\n * To render a Circular clip path\n *\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.drawCircularClipPath = function () {\n return null;\n };\n /**\n * Clip method to perform clip in canvas mode\n *\n * @param {BaseAttibutes} options The canvas clip of options\n */\n CanvasRenderer.prototype.canvasClip = function (options) {\n this.ctx.save();\n this.ctx.fillStyle = 'transparent';\n this.ctx.rect(options.x, options.y, options.width, options.height);\n this.ctx.fill();\n this.ctx.clip();\n };\n /**\n * Tp restore the canvas\n */\n CanvasRenderer.prototype.canvasRestore = function () {\n this.ctx.restore();\n };\n /**\n * To draw a polygon\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.drawPolygon = function () {\n return null;\n };\n /**\n * To create defs element in SVG\n * Dummy method for using canvas/svg render in the same variable name in chart control\n *\n * @returns {Element} It returns null\n */\n CanvasRenderer.prototype.createDefs = function () {\n return null;\n };\n /**\n * To create clip path in SVG\n * Dummy method for using canvas/svg render in the same variable name in chart control\n */\n CanvasRenderer.prototype.createClipPath = function () {\n return null;\n };\n /**\n * To create a Html5 SVG element\n * Dummy method for using canvas/svg render in the same variable name in chart control\n *\n * @returns {Element} It returns null\n */\n CanvasRenderer.prototype.createSvg = function () {\n return null;\n };\n return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable jsdoc/require-param */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\nimport { NotifyPropertyChanges, Property, Event, Complex, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { extend, compile as templateComplier, Component, resetBlazorTemplate, isBlazor, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { SvgRenderer } from '../svg-render/index';\nimport { ChildProperty, createElement, remove, Browser, Animation } from '@syncfusion/ej2-base';\nimport { getTooltipThemeColor } from './interface';\nimport { Size, Rect, Side, measureText, getElement, findDirection, drawSymbol, textElement } from './helper';\nimport { removeElement, TextOption, TooltipLocation, PathOption, withInAreaBounds } from './helper';\n/**\n * Configures the fonts in charts.\n *\n * @private\n */\nvar TextStyle = /** @class */ (function (_super) {\n __extends(TextStyle, _super);\n function TextStyle() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], TextStyle.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], TextStyle.prototype, \"color\", void 0);\n __decorate([\n Property('Segoe UI')\n ], TextStyle.prototype, \"fontFamily\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontWeight\", void 0);\n __decorate([\n Property('Normal')\n ], TextStyle.prototype, \"fontStyle\", void 0);\n __decorate([\n Property(1)\n ], TextStyle.prototype, \"opacity\", void 0);\n return TextStyle;\n}(ChildProperty));\nexport { TextStyle };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar TooltipBorder = /** @class */ (function (_super) {\n __extends(TooltipBorder, _super);\n function TooltipBorder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipBorder.prototype, \"color\", void 0);\n __decorate([\n Property(1)\n ], TooltipBorder.prototype, \"width\", void 0);\n __decorate([\n Property('')\n ], TooltipBorder.prototype, \"dashArray\", void 0);\n return TooltipBorder;\n}(ChildProperty));\nexport { TooltipBorder };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar AreaBounds = /** @class */ (function (_super) {\n __extends(AreaBounds, _super);\n function AreaBounds() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"y\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], AreaBounds.prototype, \"height\", void 0);\n return AreaBounds;\n}(ChildProperty));\nexport { AreaBounds };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar ToolLocation = /** @class */ (function (_super) {\n __extends(ToolLocation, _super);\n function ToolLocation() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"x\", void 0);\n __decorate([\n Property(0)\n ], ToolLocation.prototype, \"y\", void 0);\n return ToolLocation;\n}(ChildProperty));\nexport { ToolLocation };\n/**\n * Represents the Tooltip control.\n * ```html\n *
\n * \n * ```\n *\n * @private\n */\nvar Tooltip = /** @class */ (function (_super) {\n __extends(Tooltip, _super);\n /**\n * Constructor for creating the widget\n *\n * @hidden\n */\n function Tooltip(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * Initialize the event handler.\n *\n * @private\n */\n Tooltip.prototype.preRender = function () {\n this.allowServerDataBinding = false;\n this.initPrivateVariable();\n if (!this.isCanvas) {\n this.removeSVG();\n }\n this.createTooltipElement();\n };\n Tooltip.prototype.initPrivateVariable = function () {\n this.renderer = new SvgRenderer(this.element.id);\n this.themeStyle = getTooltipThemeColor(this.theme);\n this.formattedText = [];\n this.padding = 5;\n this.areaMargin = 10;\n this.isFirst = true;\n this.markerPoint = [];\n };\n Tooltip.prototype.removeSVG = function () {\n var svgObject = document.getElementById(this.element.id + '_svg');\n var templateObject = document.getElementById(this.element.id + 'parent_template');\n if (this.blazorTemplate) {\n resetBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate');\n }\n if (svgObject && svgObject.parentNode) {\n remove(svgObject);\n }\n if (templateObject && templateObject.parentNode) {\n remove(templateObject);\n }\n };\n /**\n * To Initialize the control rendering.\n */\n Tooltip.prototype.render = function () {\n this.fadeOuted = false;\n if (!this.template) {\n this.renderText(this.isFirst);\n var argsData = {\n cancel: false, name: 'tooltipRender', tooltip: this\n };\n this.trigger('tooltipRender', argsData);\n var markerSide = this.renderTooltipElement(this.areaBounds, this.location);\n this.drawMarker(markerSide.isBottom, markerSide.isRight, this.markerSize);\n }\n else {\n this.updateTemplateFn();\n this.createTemplate(this.areaBounds, this.location);\n }\n this.trigger('loaded', { tooltip: this });\n var element = document.getElementById('chartmeasuretext');\n if (element) {\n remove(element);\n }\n this.allowServerDataBinding = true;\n };\n Tooltip.prototype.createTooltipElement = function () {\n this.textElements = [];\n if (!this.template || this.shared) {\n // SVG element for tooltip\n if (this.enableRTL) {\n this.element.setAttribute('dir', 'ltr');\n }\n var svgObject = this.renderer.createSvg({ id: this.element.id + '_svg' });\n this.element.appendChild(svgObject);\n // Group to hold text and path.\n var groupElement = document.getElementById(this.element.id + '_group');\n if (!groupElement) {\n groupElement = this.renderer.createGroup({ id: this.element.id + '_group' });\n groupElement.setAttribute('transform', 'translate(0,0)');\n }\n svgObject.appendChild(groupElement);\n var pathElement = this.renderer.drawPath({\n 'id': this.element.id + '_path', 'stroke-width': this.border.width,\n 'fill': this.fill || this.themeStyle.tooltipFill, 'opacity': ((this.theme === 'TailwindDark' || this.theme === 'Tailwind' || this.theme === 'Bootstrap5' || this.theme === 'Bootstrap5Dark') && this.opacity === 0.75) ?\n 1 : this.opacity,\n 'stroke': this.border.color\n });\n groupElement.appendChild(pathElement);\n }\n };\n Tooltip.prototype.drawMarker = function (isBottom, isRight, size) {\n if (this.shapes.length <= 0) {\n return null;\n }\n var shapeOption;\n var count = 0;\n var markerGroup = this.renderer.createGroup({ id: this.element.id + '_trackball_group' });\n var groupElement = getElement(this.element.id + '_group');\n var x = ((this.enableRTL) ? this.elementSize.width - (size / 2) :\n (this.marginX * 2) + (size / 2)) + (isRight ? this.arrowPadding : 0);\n for (var _i = 0, _a = this.shapes; _i < _a.length; _i++) {\n var shape = _a[_i];\n if (shape !== 'None') {\n shapeOption = new PathOption(this.element.id + '_Trackball_' + count, this.palette[count], 1, '#cccccc', 1, null);\n if (this.markerPoint[count]) {\n markerGroup.appendChild(drawSymbol(new TooltipLocation(x, this.markerPoint[count] - this.padding + (isBottom ? this.arrowPadding : 0)), shape, new Size(size, size), '', shapeOption, null));\n }\n count++;\n }\n }\n groupElement.appendChild(markerGroup);\n };\n Tooltip.prototype.renderTooltipElement = function (areaBounds, location) {\n var tooltipDiv = getElement(this.element.id);\n var arrowLocation = new TooltipLocation(0, 0);\n var tipLocation = new TooltipLocation(0, 0);\n var svgObject = getElement(this.element.id + '_svg');\n var groupElement = getElement(this.element.id + '_group');\n var pathElement = getElement(this.element.id + '_path');\n var rect;\n var isTop = false;\n var isLeft = false;\n var isBottom = false;\n var x = 0;\n var y = 0;\n if (this.header !== '') {\n this.elementSize.height += this.marginY;\n }\n if (this.content.length > 1) {\n rect = this.sharedTooltipLocation(areaBounds, this.location.x, this.location.y);\n isTop = true;\n }\n else {\n rect = this.tooltipLocation(areaBounds, location, arrowLocation, tipLocation);\n if (!this.inverted) {\n isTop = (rect.y < (location.y + this.clipBounds.y));\n isBottom = !isTop;\n y = (isTop ? 0 : this.arrowPadding);\n }\n else {\n isLeft = (rect.x < (location.x + this.clipBounds.x));\n x = (isLeft ? 0 : this.arrowPadding);\n }\n }\n if (this.header !== '') {\n var wrapPadding = 2;\n var wrapHeader = this.isWrap ? this.wrappedText : this.header;\n if (this.isWrap && typeof (wrapHeader) === 'string' && (wrapHeader.indexOf('<') > -1 || wrapHeader.indexOf('>') > -1)) {\n var textArray = wrapHeader.split('
');\n wrapPadding = textArray.length;\n }\n var headerSize = measureText(this.isWrap ? this.wrappedText : this.header, this.textStyle).height +\n (this.marginY * wrapPadding) + (isBottom ? this.arrowPadding : 0) + (this.isWrap ? 5 : 0); //header padding;\n var xLength = (this.marginX * 3) + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0);\n var direction = 'M ' + xLength + ' ' + headerSize +\n 'L ' + (rect.width + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0) - (this.marginX * 2)) +\n ' ' + headerSize;\n var pathElement_1 = this.renderer.drawPath({\n 'id': this.element.id + '_header_path', 'stroke-width': 1,\n 'fill': null, 'opacity': 0.8, 'stroke': this.themeStyle.tooltipHeaderLine, 'd': direction\n });\n groupElement.appendChild(pathElement_1);\n }\n var start = this.border.width / 2;\n var pointRect = new Rect(start + x, start + y, rect.width - start, rect.height - start);\n groupElement.setAttribute('opacity', '1');\n if (this.enableAnimation && !this.isFirst && !this.crosshair) {\n this.animateTooltipDiv(tooltipDiv, rect);\n }\n else {\n this.updateDiv(tooltipDiv, rect.x, rect.y);\n }\n // eslint-disable-next-line no-extra-boolean-cast\n svgObject.setAttribute('height', (rect.height + this.border.width + (!((!this.inverted)) ? 0 : this.arrowPadding) + 5).toString());\n svgObject.setAttribute('width', (rect.width + this.border.width + (((!this.inverted)) ? 0 : this.arrowPadding) + 5).toString());\n svgObject.setAttribute('opacity', '1');\n if (!isNullOrUndefined(this.tooltipPlacement)) {\n isTop = this.tooltipPlacement.indexOf('Top') > -1;\n isBottom = this.tooltipPlacement.indexOf('Bottom') > -1;\n isLeft = this.tooltipPlacement.indexOf('Left') > -1;\n }\n pathElement.setAttribute('d', findDirection(this.rx, this.ry, pointRect, arrowLocation, this.arrowPadding, isTop, isBottom, isLeft, tipLocation.x, tipLocation.y, this.controlName));\n if (this.enableShadow && this.theme !== 'Bootstrap4') {\n // To fix next chart initial tooltip opacity issue in tab control\n var shadowId = this.element.id + '_shadow';\n if (this.theme === 'Tailwind' || this.theme === 'TailwindDark'\n || this.theme === 'Bootstrap5' || this.theme === 'Bootstrap5Dark') {\n pathElement.setAttribute('box-shadow', '0px 1px 2px rgba(0, 0, 0, 0.06), 0px 1px 3px rgba(0, 0, 0, 0.1)');\n }\n else {\n pathElement.setAttribute('filter', Browser.isIE ? '' : 'url(#' + shadowId + ')');\n }\n var shadow = '';\n shadow += '';\n shadow += '';\n var defElement = this.renderer.createDefs();\n defElement.setAttribute('id', this.element.id + 'SVG_tooltip_definition');\n groupElement.appendChild(defElement);\n defElement.innerHTML = shadow;\n }\n var borderColor = this.theme === \"Fluent\" ? \"#FFFFFF\" : this.theme === \"FluentDark\" ? \"#323130\" : this.border.color;\n pathElement.setAttribute('stroke', borderColor);\n if (!isNullOrUndefined(this.border.dashArray)) {\n pathElement.setAttribute('stroke-dasharray', this.border.dashArray);\n }\n this.changeText(new TooltipLocation(x, y), isBottom, !isLeft && !isTop && !isBottom);\n if (this.revert) {\n this.inverted = !this.inverted;\n this.revert = false;\n }\n return new Side(isBottom, !isLeft && !isTop && !isBottom);\n };\n Tooltip.prototype.changeText = function (point, isBottom, isRight) {\n var element = document.getElementById(this.element.id + '_text');\n if (isBottom) {\n element.setAttribute('transform', 'translate(0,' + this.arrowPadding + ')');\n }\n if (isRight) {\n element.setAttribute('transform', 'translate(' + this.arrowPadding + ' 0)');\n }\n };\n Tooltip.prototype.findFormattedText = function () {\n this.formattedText = [];\n if (this.header.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '') {\n this.formattedText = this.formattedText.concat(this.header);\n }\n this.formattedText = this.formattedText.concat(this.content);\n };\n // tslint:disable-next-line:max-func-body-length\n Tooltip.prototype.renderText = function (isRender) {\n var height = 0;\n var width = 0; // Padding for text;\n var subWidth = 0;\n var lines;\n var key = 'properties';\n var font = extend({}, this.textStyle, null, true)[key];\n var groupElement = getElement(this.element.id + '_group');\n var tspanElement;\n var textCollection;\n var tspanStyle = '';\n var line;\n var tspanOption;\n this.findFormattedText();\n this.isWrap = false;\n var isRtlEnabled = document.body.getAttribute('dir') === 'rtl';\n var anchor = isRtlEnabled && !this.enableRTL ? 'end' : 'start';\n this.leftSpace = this.areaBounds.x + this.location.x;\n this.rightSpace = (this.areaBounds.x + this.areaBounds.width) - this.leftSpace;\n var headerContent = this.header.replace(//g, '').replace(/<\\/b>/g, '').trim();\n var isBoldTag = this.header.indexOf('') > -1 && this.header.indexOf('') > -1;\n var headerWidth = measureText(this.formattedText[0], font).width + (2 * this.marginX) + this.arrowPadding;\n var isLeftSpace = (this.location.x - headerWidth) < this.location.x;\n var isRightSpace = (this.areaBounds.x + this.areaBounds.width) < (this.location.x + headerWidth);\n var header;\n var headerSpace = (headerContent !== '') ? this.marginY : 0;\n var isRow = true;\n var isColumn = true;\n this.markerPoint = [];\n var markerSize = (this.shapes.length > 0) ? 10 : 0;\n var markerPadding = (this.shapes.length > 0) ? 5 : 0;\n var spaceWidth = 4;\n var subStringLength;\n var fontSize = '13px';\n var fontWeight = 'Normal';\n var labelColor = this.themeStyle.tooltipLightLabel;\n var dy = (22 / parseFloat(fontSize)) * (parseFloat(font.size));\n var contentWidth = [];\n if (!isRender || this.isCanvas) {\n removeElement(this.element.id + '_text');\n removeElement(this.element.id + '_header_path');\n removeElement(this.element.id + '_trackball_group');\n removeElement(this.element.id + 'SVG_tooltip_definition');\n }\n var options = new TextOption(this.element.id + '_text', this.marginX * 2, (this.marginY * 2 + this.padding * 2 + (this.marginY === 2 ? 3 : 0)), anchor, '');\n var parentElement = textElement(options, font, null, groupElement);\n var withoutHeader = this.formattedText.length === 1 && this.formattedText[0].indexOf(' : ') > -1;\n var isHeader = this.header !== '';\n var size = isHeader && isBoldTag ? 16 : 13;\n for (var k = 0, pointsLength = this.formattedText.length; k < pointsLength; k++) {\n textCollection = this.formattedText[k].replace(/<(b|strong)>/g, '')\n .replace(/<\\/(b|strong)>/g, '')\n .split(//g);\n if (k === 0 && !withoutHeader && this.isTextWrap &&\n (this.leftSpace < headerWidth || isLeftSpace) &&\n (this.rightSpace < headerWidth || isRightSpace)) {\n subStringLength = Math.round(this.leftSpace > this.rightSpace ? (this.leftSpace / size) : (this.rightSpace / size));\n header = headerContent !== '' ? headerContent : this.formattedText[k];\n textCollection = header.match(new RegExp('.{1,' + subStringLength + '}', 'g'));\n this.wrappedText = isBoldTag ? '' + textCollection.join('
') + '
' : textCollection.join('
');\n this.isWrap = textCollection.length > 1;\n }\n if (textCollection[0] === '') {\n continue;\n }\n if ((k !== 0) || (headerContent === '')) {\n this.markerPoint.push((headerContent !== '' ? (this.marginY) : 0) + options.y + height);\n }\n for (var i = 0, len = textCollection.length; i < len; i++) { // string value of unicode for LTR is \\u200E\n lines = textCollection[i].replace(//g, '
').replace(/<\\/b>/g, '
').replace(/:/g, (this.enableRTL) ? '
\\u200E:
' : '
\\u200E:
')\n .split('
');\n if (this.enableRTL && lines.length > 0 && textCollection[i].match(/:/g)) {\n lines[0] = lines[0].trim();\n lines.reverse();\n }\n subWidth = 0;\n isColumn = true;\n height += dy;\n for (var j = 0, len_1 = lines.length; j < len_1; j++) {\n line = lines[j];\n if (this.enableRTL && line !== '' && this.isRTLText(line)) {\n line = line.concat('\\u200E');\n }\n if (!/\\S/.test(line) && line !== '') {\n line = ' '; //to trim multiple white spaces to single white space\n }\n if ((!isColumn && line === ' ') || (line.replace(//g, '').replace(/<\\/b>/g, '').trim() !== '')) {\n subWidth += line !== ' ' ? spaceWidth : 0;\n if (isColumn && !isRow) {\n tspanOption = {\n x: (this.marginX * 2) + (markerSize + markerPadding),\n dy: dy + ((isColumn) ? headerSpace : 0), fill: ''\n };\n headerSpace = null;\n }\n else {\n if (isRow && isColumn) {\n tspanOption = {\n x: (headerContent === '') ? ((this.marginX * 2) + (markerSize + markerPadding))\n : (this.marginX * 2) + (this.isWrap ? (markerSize + markerPadding) : 0)\n };\n }\n else {\n tspanOption = {};\n }\n }\n isColumn = false;\n tspanElement = this.renderer.createTSpan(tspanOption, '');\n parentElement.appendChild(tspanElement);\n if (line.indexOf('') > -1 || ((isBoldTag && j === 0 && k === 0) && (isHeader || this.isWrap))) {\n fontWeight = 'bold';\n labelColor = this.themeStyle.tooltipBoldLabel;\n tspanStyle = 'font-weight:' + fontWeight;\n font.fontWeight = fontWeight;\n (tspanElement).setAttribute('fill', this.textStyle.color || labelColor);\n }\n else {\n tspanStyle = fontWeight === 'bold' ? 'font-weight:' + fontWeight : '';\n font.fontWeight = fontWeight;\n (tspanElement).setAttribute('fill', this.textStyle.color || labelColor);\n }\n if (line.indexOf('') > -1 || ((isBoldTag && j === len_1 - 1 && k === 0) && (isHeader || this.isWrap))) {\n fontWeight = 'Normal';\n labelColor = this.themeStyle.tooltipLightLabel;\n }\n // eslint-disable-next-line no-useless-escape\n (tspanElement).textContent = line = this.getTooltipTextContent(line);\n subWidth += measureText(line, font).width;\n if (tspanStyle !== '') {\n tspanElement.style.fontWeight = tspanStyle.split('font-weight:')[1];\n tspanElement.style.color = tspanElement.getAttribute('fill');\n }\n // 'inherit' will apply css style from parent element.\n tspanElement.style.fontFamily = 'inherit';\n tspanElement.style.fontStyle = 'inherit';\n tspanElement.style.fontSize = 'inherit';\n isRow = false;\n }\n }\n subWidth -= spaceWidth;\n width = Math.max(width, subWidth);\n contentWidth.push(subWidth);\n }\n }\n this.elementSize = new Size(width + (width > 0 ? (2 * this.marginX) : 0), height);\n this.elementSize.width += (markerSize + markerPadding); // marker size + marker Spacing\n var element = (parentElement.childNodes[0]);\n if (headerContent !== '' && element && !this.isWrap) {\n font.fontWeight = 'bold';\n var width_1 = (this.elementSize.width + (2 * this.padding)) / 2 - measureText(headerContent, font).width / 2;\n element.setAttribute('x', width_1.toString());\n }\n this.renderContentRTL(parentElement, isHeader, markerSize + markerPadding, contentWidth);\n };\n Tooltip.prototype.renderContentRTL = function (textElement, isHeader, markerSize, contentWidth) {\n if (this.enableRTL) {\n var tspanElement = void 0;\n var contentWidthIndex = isHeader ? 1 : 0;\n for (var i = 0; i < textElement.childNodes.length; i++) {\n tspanElement = (textElement.childNodes[i]);\n if ((!isHeader || i > 0) && !isNullOrUndefined(tspanElement.getAttribute('x'))) {\n tspanElement.setAttribute('x', (this.elementSize.width - (markerSize + contentWidth[contentWidthIndex])).toString());\n contentWidthIndex++;\n }\n }\n }\n };\n Tooltip.prototype.getTooltipTextContent = function (tooltipText) {\n var characterCollection = tooltipText.match(/<[a-zA-Z\\/](.|\\n)*?>/g);\n if (isNullOrUndefined(characterCollection)) {\n return tooltipText;\n }\n var isRtlText = this.isRTLText(tooltipText);\n for (var i = 0; i < characterCollection.length; i++) {\n if (this.isValidHTMLElement(characterCollection[i].replace('<', '').replace('/', '').replace('>', '').trim())) {\n tooltipText = tooltipText.replace(characterCollection[i], isRtlText ? '\\u200E' : '');\n }\n }\n return tooltipText;\n };\n Tooltip.prototype.isValidHTMLElement = function (element) {\n return document.createElement(element).toString() != \"[object HTMLUnknownElement]\";\n };\n Tooltip.prototype.isRTLText = function (tooltipContent) {\n return /[\\u0590-\\u07FF\\u200F\\u202B\\u202E\\uFB1D-\\uFDFD\\uFE70-\\uFEFC]/.test(tooltipContent);\n };\n Tooltip.prototype.createTemplate = function (areaBounds, location) {\n var argsData = { cancel: false, name: 'tooltipRender', tooltip: this };\n this.trigger('tooltipRender', argsData);\n var parent = document.getElementById(this.element.id);\n if (this.isCanvas) {\n this.removeSVG();\n }\n var firstElement = parent.firstElementChild;\n if (firstElement) {\n remove(firstElement);\n }\n if (!argsData.cancel) {\n var elem = createElement('div', { id: this.element.id + 'parent_template' });\n var templateElement = this.templateFn(this.data, this.controlInstance, elem.id, elem.id + '_blazorTemplate', '');\n while (templateElement && templateElement.length > 0) {\n if (isBlazor() || templateElement.length === 1) {\n elem.appendChild(templateElement[0]);\n templateElement = null;\n }\n else {\n elem.appendChild(templateElement[0]);\n }\n }\n parent.appendChild(elem);\n var element = this.isCanvas ? elem : this.element;\n var rect = element.getBoundingClientRect();\n this.padding = 0;\n this.elementSize = new Size(rect.width, rect.height);\n var tooltipRect = this.shared ? this.sharedTooltipLocation(areaBounds, this.location.x, this.location.y)\n : this.tooltipLocation(areaBounds, location, new TooltipLocation(0, 0), new TooltipLocation(0, 0));\n if (this.enableAnimation && !this.isFirst && !this.crosshair) {\n this.animateTooltipDiv(this.element, tooltipRect);\n }\n else {\n this.updateDiv(element, tooltipRect.x, tooltipRect.y);\n }\n if (this.blazorTemplate) {\n //Customer issue - F149037 Call back function to handle the blazor tooltip alignment issues\n var tooltipRendered = function () {\n var rect1 = getElement(thisObject_1.element.id).getBoundingClientRect();\n thisObject_1.elementSize = new Size(rect1.width, rect1.height);\n var tooltipRect1 = thisObject_1.tooltipLocation(areaBounds, location, new TooltipLocation(0, 0), new TooltipLocation(0, 0));\n thisObject_1.updateDiv(getElement(thisObject_1.element.id), tooltipRect1.x, tooltipRect1.y);\n };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var thisObject_1 = this;\n tooltipRendered.bind(thisObject_1, areaBounds, location);\n updateBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate', this.blazorTemplate.name, this.blazorTemplate.parent, undefined, tooltipRendered);\n }\n }\n else {\n remove(getElement(this.element.id + '_tooltip'));\n }\n };\n Tooltip.prototype.sharedTooltipLocation = function (bounds, x, y) {\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var tooltipRect = new Rect(x + 2 * this.padding, y - height - this.padding, width, height);\n if (tooltipRect.y < bounds.y) {\n tooltipRect.y += (tooltipRect.height + 2 * this.padding);\n }\n if (tooltipRect.x + tooltipRect.width > bounds.x + bounds.width) {\n tooltipRect.x -= (tooltipRect.width + 4 * this.padding);\n }\n return tooltipRect;\n };\n Tooltip.prototype.getCurrentPosition = function (bounds, symbolLocation, arrowLocation, tipLocation) {\n var position = this.tooltipPlacement;\n var clipX = this.clipBounds.x;\n var clipY = this.clipBounds.y;\n var markerHeight = this.offset;\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var location = new TooltipLocation(symbolLocation.x, symbolLocation.y);\n if (position === 'Top' || position === 'Bottom') {\n location = new TooltipLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight);\n arrowLocation.x = tipLocation.x = width / 2;\n if (position === 'Bottom') {\n location.y = symbolLocation.y + clipY + markerHeight;\n }\n if (bounds.x + bounds.width < location.x + width) {\n location.x = (bounds.width > width) ? ((bounds.x + bounds.width) - width + 6) : bounds.x;\n arrowLocation.x = tipLocation.x = (bounds.width > width) ? (bounds.x + symbolLocation.x - location.x) : symbolLocation.x;\n }\n else if (bounds.x > location.x) {\n location.x = bounds.x;\n arrowLocation.x = tipLocation.x = symbolLocation.x;\n }\n }\n else {\n location = new TooltipLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n arrowLocation.y = tipLocation.y = height / 2;\n if (position === 'Left') {\n location.x = symbolLocation.x + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (bounds.y + bounds.height < location.y + height) {\n location.y = (bounds.height > height) ? ((bounds.y + bounds.height) - height + 6) : bounds.y;\n arrowLocation.y = tipLocation.y = (bounds.height > height) ? (bounds.y + symbolLocation.y - location.y) : symbolLocation.y;\n }\n else if (bounds.y > location.y) {\n location.y = bounds.y;\n arrowLocation.y = tipLocation.y = symbolLocation.y;\n }\n }\n return new Rect(location.x, location.y, width, height);\n };\n // tslint:disable-next-line:max-func-body-length\n Tooltip.prototype.tooltipLocation = function (bounds, symbolLocation, arrowLocation, tipLocation) {\n if (!isNullOrUndefined(this.tooltipPlacement)) {\n var tooltipRect = this.getCurrentPosition(bounds, symbolLocation, arrowLocation, tipLocation);\n return tooltipRect;\n }\n var location = new TooltipLocation(symbolLocation.x, symbolLocation.y);\n var width = this.elementSize.width + (2 * this.marginX);\n var height = this.elementSize.height + (2 * this.marginY);\n var markerHeight = this.offset;\n var clipX = this.clipBounds.x;\n var clipY = this.clipBounds.y;\n var boundsX = bounds.x;\n var boundsY = bounds.y;\n this.outOfBounds = false;\n if (!this.inverted) {\n location = new TooltipLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight);\n arrowLocation.x = tipLocation.x = width / 2;\n if (location.y < boundsY || (this.isNegative)) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + clipY + markerHeight;\n }\n if (location.y + height + this.arrowPadding > boundsY + bounds.height) {\n location.y = Math.min(symbolLocation.y, boundsY + bounds.height) + clipY\n - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight;\n }\n tipLocation.x = width / 2;\n if (location.x < boundsX) {\n arrowLocation.x -= (boundsX - location.x);\n tipLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (location.x + width > boundsX + bounds.width) {\n arrowLocation.x += ((location.x + width) - (boundsX + bounds.width));\n tipLocation.x += ((location.x + width) - (boundsX + bounds.width));\n location.x -= ((location.x + width) - (boundsX + bounds.width));\n }\n if (arrowLocation.x + this.arrowPadding > width - this.rx) {\n arrowLocation.x = width - this.rx - this.arrowPadding;\n tipLocation.x = width - this.rx - this.arrowPadding;\n }\n if (arrowLocation.x - this.arrowPadding < this.rx) {\n arrowLocation.x = tipLocation.x = this.rx + this.arrowPadding;\n }\n if (this.controlName === 'Chart') {\n if (((bounds.x + bounds.width) - (location.x + arrowLocation.x)) < this.areaMargin + this.arrowPadding || (location.x + arrowLocation.x) < this.areaMargin + this.arrowPadding) {\n this.outOfBounds = true;\n }\n if (!withInAreaBounds(location.x, location.y, bounds) || this.outOfBounds) {\n this.inverted = !this.inverted;\n this.revert = true;\n location = new TooltipLocation(symbolLocation.x + markerHeight + clipX, symbolLocation.y + clipY - this.elementSize.height / 2 - (this.padding));\n tipLocation.x = arrowLocation.x = 0;\n tipLocation.y = arrowLocation.y = height / 2;\n if ((location.x + this.arrowPadding + width > boundsX + bounds.width) || (this.isNegative)) {\n location.x = (symbolLocation.x > bounds.width ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (this.arrowPadding + width);\n }\n if (location.x < boundsX) {\n location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + markerHeight + clipX;\n }\n if (location.y <= boundsY) {\n tipLocation.y -= (boundsY - location.y);\n arrowLocation.y -= (boundsY - location.y);\n location.y = boundsY;\n }\n if (location.y + height >= bounds.height + boundsY) {\n arrowLocation.y += ((location.y + height) - (bounds.height + boundsY));\n tipLocation.y += ((location.y + height) - (bounds.height + boundsY));\n location.y -= ((location.y + height) - (bounds.height + boundsY));\n }\n if ((this.arrowPadding) + arrowLocation.y > height - this.ry) {\n arrowLocation.y = height - this.arrowPadding - this.ry;\n tipLocation.y = height;\n }\n if (arrowLocation.y - this.arrowPadding < this.ry) {\n arrowLocation.y = (this.arrowPadding) + this.ry;\n tipLocation.y = 0;\n }\n }\n }\n }\n else {\n location = new TooltipLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n arrowLocation.y = tipLocation.y = height / 2;\n if ((location.x + width + this.arrowPadding > boundsX + bounds.width) || (this.isNegative)) {\n location.x = (symbolLocation.x > bounds.width + bounds.x ? bounds.width : symbolLocation.x)\n + clipX - markerHeight - (width + this.arrowPadding);\n }\n if (location.x < boundsX) {\n location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + clipX + markerHeight;\n }\n if (location.y <= boundsY) {\n arrowLocation.y -= (boundsY - location.y);\n tipLocation.y -= (boundsY - location.y);\n location.y = boundsY;\n }\n if (location.y + height >= boundsY + bounds.height) {\n arrowLocation.y += ((location.y + height) - (boundsY + bounds.height));\n tipLocation.y += ((location.y + height) - (boundsY + bounds.height));\n location.y -= ((location.y + height) - (boundsY + bounds.height));\n }\n if (arrowLocation.y + this.arrowPadding > height - this.ry) {\n arrowLocation.y = height - this.ry - this.arrowPadding;\n tipLocation.y = height;\n }\n if (arrowLocation.y - this.arrowPadding < this.ry) {\n arrowLocation.y = tipLocation.y = this.ry + this.arrowPadding;\n }\n if (this.controlName === 'Chart') {\n if ((location.y + arrowLocation.y) < this.areaMargin + this.arrowPadding || ((bounds.y + bounds.height) - (location.y + arrowLocation.y)) < this.areaMargin + this.arrowPadding) {\n this.outOfBounds = true;\n }\n if (!withInAreaBounds(location.x, location.y, bounds) || this.outOfBounds) {\n this.inverted = !this.inverted;\n location = new TooltipLocation(symbolLocation.x + clipX - this.padding - this.elementSize.width / 2, symbolLocation.y + clipY - this.elementSize.height - (2 * this.padding) - markerHeight - this.arrowPadding);\n this.revert = true;\n tipLocation.x = arrowLocation.x = width / 2;\n tipLocation.y = arrowLocation.y = 0;\n if (location.y < boundsY || (this.isNegative)) {\n location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + markerHeight + clipY;\n }\n if (location.y + this.arrowPadding + height > boundsY + bounds.height) {\n location.y = Math.min(symbolLocation.y, boundsY + bounds.height) + clipY\n - this.elementSize.height - (2 * this.padding) - markerHeight - this.arrowPadding;\n }\n tipLocation.x = width / 2;\n if (location.x < boundsX) {\n tipLocation.x -= (boundsX - location.x);\n arrowLocation.x -= (boundsX - location.x);\n location.x = boundsX;\n }\n if (location.x + width > bounds.width + boundsX) {\n arrowLocation.x += ((location.x + width) - (bounds.width + boundsX));\n tipLocation.x += ((location.x + width) - (bounds.width + boundsX));\n location.x -= ((location.x + width) - (bounds.width + boundsX));\n }\n if ((this.arrowPadding) + arrowLocation.x > width - this.rx) {\n tipLocation.x = width - this.rx - (this.arrowPadding);\n arrowLocation.x = width - this.rx - (this.arrowPadding);\n }\n if (arrowLocation.x - (this.arrowPadding) < this.rx) {\n arrowLocation.x = tipLocation.x = this.rx + (this.arrowPadding);\n }\n }\n }\n }\n return new Rect(location.x, location.y, width, height);\n };\n Tooltip.prototype.animateTooltipDiv = function (tooltipDiv, rect) {\n var _this = this;\n var x = parseFloat(tooltipDiv.style.left);\n var y = parseFloat(tooltipDiv.style.top);\n var currenDiff;\n new Animation({}).animate(tooltipDiv, {\n duration: this.duration,\n progress: function (args) {\n currenDiff = (args.timeStamp / args.duration);\n tooltipDiv.style.animation = null;\n if ((_this.controlName === 'Chart' && _this.shared) && !_this.enableRTL) {\n tooltipDiv.style.transition = \"transform \" + 0.1 + \"s\";\n tooltipDiv.style.transform = \"translate(\" + (x + currenDiff * (rect.x - x)) + \"px,\" + (y + currenDiff * (rect.y - y)) + \"px)\";\n }\n else {\n tooltipDiv.style.left = (x + currenDiff * (rect.x - x)) + 'px';\n tooltipDiv.style.top = (y + currenDiff * (rect.y - y)) + 'px';\n }\n },\n end: function (model) {\n _this.updateDiv(tooltipDiv, rect.x, rect.y);\n _this.trigger('animationComplete', { tooltip: _this });\n }\n });\n };\n Tooltip.prototype.updateDiv = function (tooltipDiv, x, y) {\n if ((this.controlName === 'Chart' && this.shared && !this.crosshair) && !this.enableRTL) {\n tooltipDiv.style.transform = \"translate(\" + x + \"px,\" + y + \"px)\";\n }\n else {\n tooltipDiv.style.left = x + 'px';\n tooltipDiv.style.top = y + 'px';\n }\n };\n Tooltip.prototype.updateTemplateFn = function () {\n if (this.template) {\n try {\n if (document.querySelectorAll(this.template).length) {\n this.templateFn = templateComplier(document.querySelector(this.template).innerHTML.trim());\n }\n else {\n this.templateFn = templateComplier(this.template);\n }\n }\n catch (e) {\n this.templateFn = templateComplier(this.template);\n }\n }\n };\n /** @private */\n Tooltip.prototype.fadeOut = function () {\n var _this = this;\n var tooltipElement = (this.isCanvas && !this.template) ? getElement(this.element.id + '_svg') :\n getElement(this.element.id);\n var tooltipDiv = getElement(this.element.id);\n if (tooltipElement) {\n var tooltipGroup_1 = tooltipElement.firstChild;\n if (tooltipGroup_1.nodeType != Node.ELEMENT_NODE) {\n tooltipGroup_1 = tooltipElement.firstElementChild;\n }\n if (this.isCanvas && !this.template) {\n tooltipGroup_1 = document.getElementById(this.element.id + '_group') ? document.getElementById(this.element.id + '_group') :\n tooltipGroup_1;\n }\n if (!tooltipGroup_1) {\n return null;\n }\n var opacity_1 = parseFloat(tooltipGroup_1.getAttribute('opacity'));\n opacity_1 = !isNullOrUndefined(opacity_1) ? opacity_1 : 1;\n new Animation({}).animate(tooltipGroup_1, {\n duration: 200,\n progress: function (args) {\n // tooltipGroup.removeAttribute('e-animate');\n _this.progressAnimation(tooltipGroup_1, opacity_1, (args.timeStamp / args.duration));\n },\n end: function () {\n _this.fadeOuted = true;\n _this.endAnimation(tooltipGroup_1);\n tooltipDiv.style.transition = \"\";\n }\n });\n }\n };\n Tooltip.prototype.progressAnimation = function (tooltipGroup, opacity, timeStamp) {\n tooltipGroup.style.animation = '';\n tooltipGroup.setAttribute('opacity', (opacity - timeStamp).toString());\n };\n /*\n * @hidden\n */\n Tooltip.prototype.endAnimation = function (tooltipGroup) {\n tooltipGroup.setAttribute('opacity', '0');\n if (this.template) {\n tooltipGroup.style.display = 'none';\n }\n this.trigger('animationComplete', { tooltip: this });\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @private\n */\n Tooltip.prototype.getPersistData = function () {\n var keyEntity = [];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Get component name\n *\n * @private\n */\n Tooltip.prototype.getModuleName = function () {\n return 'tooltip';\n };\n /**\n * To destroy the accumulationcharts\n *\n * @private\n */\n Tooltip.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.element.classList.remove('e-tooltip');\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @returns {void}\n * @private\n */\n Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n if (this.blazorTemplate) {\n resetBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate');\n }\n this.isFirst = false;\n this.render();\n };\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enable\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"shared\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"crosshair\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableShadow\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"fill\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"header\", void 0);\n __decorate([\n Property(0.75)\n ], Tooltip.prototype, \"opacity\", void 0);\n __decorate([\n Complex({ size: '13px', fontWeight: 'Normal', color: null, fontStyle: 'Normal', fontFamily: 'Segoe UI' }, TextStyle)\n ], Tooltip.prototype, \"textStyle\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Tooltip.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(300)\n ], Tooltip.prototype, \"duration\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"inverted\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isNegative\", void 0);\n __decorate([\n Complex({ color: '#cccccc', width: 0.5 }, TooltipBorder)\n ], Tooltip.prototype, \"border\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"content\", void 0);\n __decorate([\n Property(10)\n ], Tooltip.prototype, \"markerSize\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"clipBounds\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"palette\", void 0);\n __decorate([\n Property([])\n ], Tooltip.prototype, \"shapes\", void 0);\n __decorate([\n Complex({ x: 0, y: 0 }, ToolLocation)\n ], Tooltip.prototype, \"location\", void 0);\n __decorate([\n Property(0)\n ], Tooltip.prototype, \"offset\", void 0);\n __decorate([\n Property(4)\n ], Tooltip.prototype, \"rx\", void 0);\n __decorate([\n Property(4)\n ], Tooltip.prototype, \"ry\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginX\", void 0);\n __decorate([\n Property(5)\n ], Tooltip.prototype, \"marginY\", void 0);\n __decorate([\n Property(7)\n ], Tooltip.prototype, \"arrowPadding\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"data\", void 0);\n __decorate([\n Property('Material')\n ], Tooltip.prototype, \"theme\", void 0);\n __decorate([\n Complex({ x: 0, y: 0, width: 0, height: 0 }, AreaBounds)\n ], Tooltip.prototype, \"areaBounds\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"availableSize\", void 0);\n __decorate([\n Property()\n ], Tooltip.prototype, \"blazorTemplate\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isCanvas\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"isTextWrap\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"tooltipPlacement\", void 0);\n __decorate([\n Property(null)\n ], Tooltip.prototype, \"controlInstance\", void 0);\n __decorate([\n Property('')\n ], Tooltip.prototype, \"controlName\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"tooltipRender\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"loaded\", void 0);\n __decorate([\n Event()\n ], Tooltip.prototype, \"animationComplete\", void 0);\n __decorate([\n Property(false)\n ], Tooltip.prototype, \"enableRTL\", void 0);\n Tooltip = __decorate([\n NotifyPropertyChanges\n ], Tooltip);\n return Tooltip;\n}(Component));\nexport { Tooltip };\n"],"names":["getTooltipThemeColor","theme","style","tooltipFill","tooltipBoldLabel","tooltipLightLabel","tooltipHeaderLine","measureText","text","font","breakText","htmlObject","document","getElementById","createElement","id","body","appendChild","indexOf","textArray","split","i","length","replace","join","innerHTML","position","fontSize","size","fontWeight","fontStyle","fontFamily","visibility","top","left","whiteSpace","lineHeight","Size","clientWidth","clientHeight","withInAreaBounds","x","y","areaBounds","width","height","findDirection","rX","rY","rect","arrowLocation","arrowPadding","bottom","tipX","tipY","controlName","direction","startX","startY","concat","getElement","removeElement","element","remove","drawSymbol","location","shape","url","options","label","renderer","SvgRenderer","temp","calculateShapes","functionName","renderOption","setAttribute","path","locX","locY","merge","rx","ry","cx","cy","d","xValue","yValue","Math","cos","PI","sin","href","textElement","color","parent","renderOptions","fill","font-size","font-style","font-family","font-weight","text-anchor","anchor","transform","opacity","dominant-baseline","baseLine","createText","rootID","this","svgLink","rootId","prototype","getOptionValue","key","createSvg","isNullOrUndefined","svgObj","createElementNS","setElementAttributes","setSVGSize","getBoundingClientRect","toString","drawPath","drawLine","line","drawRectangle","rectangle","drawCircle","circle","drawPolyline","polyline","drawEllipse","ellipse","drawPolygon","polygon","drawImage","img","setAttributeNS","preserveAspectRatio","textContent","createTSpan","tSpan","createTitle","title","createDefs","createClipPath","clipPath","createForeignObject","foreignObject","createGroup","group","createPattern","pattern","createRadialGradient","colors","name","colorName","colorStop","newOptions","r","fx","fy","drawGradient","createLinearGradient","x1","y1","x2","y2","gradientType","defs","gradient","stop_1","cssText","drawClipPath","drawCircularClipPath","keys","Object","createCanvas","CanvasRenderer","canvasObj","ctx","getContext","setCanvasSize","setAttributes","lineWidth","dashArray","dashArrayString","setLineDash","parseInt","strokeStyle","save","beginPath","stroke","moveTo","lineTo","restore","canvasTranslate","canvasCtx","cornerRadius","translate","globalAlpha","drawCornerRadius","fillStyle","fillRect","arcTo","closePath","dataSplit","borderWidth","flag","parseFloat","innerR","q1","q2","quadraticCurveTo","c1","c2","c3","c4","bezierCurveTo","arc","radius","start","end","counterClockWise","undefined","transX","transY","dy","isTSpan","toLowerCase","textAlign","baseline","textBaseline","rotate","labelRotation","fillText","points","point","circumference","max","scaleX","scaleY","scale","imageObj","Image","src","myGradient","setGradientValues","newColorStop","slice","stopColor","addColorStop","values","map","updateCanvasAttributes","dataUrl","img_1","onload","clearRect","canvasClip","clip","canvasRestore","__extends","extendStatics","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","create","Rect","Side","right","isRight","isBottom","CustomizeOption","TextOption","_super","_this","call","PathOption","TooltipLocation","__decorate","decorators","target","desc","c","arguments","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","TextStyle","apply","Property","ChildProperty","TooltipBorder","AreaBounds","ToolLocation","Tooltip","preRender","allowServerDataBinding","initPrivateVariable","isCanvas","removeSVG","createTooltipElement","themeStyle","formattedText","padding","areaMargin","isFirst","markerPoint","svgObject","templateObject","blazorTemplate","resetBlazorTemplate","parentNode","render","fadeOuted","template","updateTemplateFn","createTemplate","renderText","argsData","cancel","tooltip","trigger","markerSide","renderTooltipElement","drawMarker","markerSize","textElements","shared","enableRTL","groupElement","pathElement","stroke-width","border","shapes","shapeOption","count","markerGroup","elementSize","marginX","_i","_a","palette","tooltipDiv","tipLocation","isTop","isLeft","header","marginY","content","sharedTooltipLocation","tooltipLocation","inverted","clipBounds","wrapPadding","wrapHeader","isWrap","wrappedText","headerSize","textStyle","pathElement_1","pointRect","enableAnimation","crosshair","updateDiv","animateTooltipDiv","tooltipPlacement","enableShadow","shadowId","Browser","isIE","shadow","defElement","borderColor","changeText","revert","findFormattedText","trim","isRender","lines","tspanElement","textCollection","tspanOption","subWidth","extend","tspanStyle","getAttribute","leftSpace","rightSpace","headerContent","isBoldTag","headerWidth","isLeftSpace","isRightSpace","headerSpace","isRow","isColumn","subStringLength","markerPadding","labelColor","contentWidth","parentElement","withoutHeader","isHeader","k","pointsLength","isTextWrap","round","match","RegExp","push","len","reverse","j","len_1","isRTLText","test","getTooltipTextContent","childNodes","width_1","renderContentRTL","contentWidthIndex","tooltipText","characterCollection","isRtlText","isValidHTMLElement","tooltipContent","firstElement","firstElementChild","elem","templateElement","templateFn","data","controlInstance","isBlazor","tooltipRect","tooltipRendered","rect1","thisObject_1","tooltipRect1","bind","updateBlazorTemplate","bounds","getCurrentPosition","symbolLocation","clipX","clipY","markerHeight","offset","boundsX","boundsY","outOfBounds","min","currenDiff","Animation","animate","duration","progress","args","timeStamp","animation","transition","model","querySelectorAll","templateComplier","querySelector","e","fadeOut","tooltipElement","tooltipGroup_1","firstChild","nodeType","Node","ELEMENT_NODE","opacity_1","progressAnimation","endAnimation","tooltipGroup","display","getPersistData","keyEntity","addOnPersist","getModuleName","destroy","classList","onPropertyChanged","newProp","oldProp","Complex","Event","NotifyPropertyChanges","Component"],"mappings":"8DACA,SAAgBA,GAAqBC,GACjC,GAAIC,EACJ,QAAQD,GACJ,IAAK,eACL,IAAK,eACDC,GACIC,YAAa,UACbC,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,UAEvB,MACJ,KAAK,eACL,IAAK,aACL,IAAK,gBACDJ,GACIC,YAAa,UACbC,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,UAEvB,MACJ,KAAK,aACDJ,GACIC,YAAa,UACbC,iBAAkB,sBAClBC,kBAAmB,2BACnBC,kBAAmB,2BAEvB,MACJ,KAAK,WACDJ,GACIC,YAAa,UACbC,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,UAEvB,MACJ,KAAK,eACDJ,GACIC,YAAa,UACbC,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,UAEvB,MACJ,KAAK,aACDJ,GACIC,YAAa,UACbC,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,UAEvB,MACJ,KAAK,iBACDJ,GACIC,YAAa,UACbC,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,UAEvB,MACJ,KAAK,SACDJ,GACIC,YAAa,UACbC,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,UAEvB,MACJ,KAAK,aACDJ,GACIC,YAAa,UACbC,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,UAEvB,MACJ,SACIJ,GACIC,YAAa,UACbC,iBAAkB,UAClBC,kBAAmB,UACnBC,kBAAmB,WAI/B,MAAOJ,GCjEX,QAAgBK,GAAYC,EAAMC,GAC9B,GAAIC,GAAYF,GAAQ,GACpBG,EAAaC,SAASC,eAAe,mBAKzC,IAJmB,OAAfF,IACAA,EAAaG,gBAAc,QAAUC,GAAI,qBACzCH,SAASI,KAAKC,YAAYN,IAER,qBAAaH,EAAKU,QAAQ,MAAQ,GAAKV,EAAKU,QAAQ,MAAQ,GAAI,CAElF,IAAK,GADDC,GAAYX,EAAKY,MAAM,KAClBC,EAAI,EAAGA,EAAIF,EAAUG,OAAQD,KACK,IAAnCF,EAAUE,GAAGH,QAAQ,WACrBC,EAAUE,GAAKF,EAAUE,GAAGE,QAAQ,QAAS,KAGrDf,GAAOW,EAAUK,KAAK,KAc1B,MAZAb,GAAWc,UAAaf,EAAUQ,QAAQ,SAAW,GAAKR,EAAUQ,QAAQ,UAAY,EAAKR,EAAYF,EACzGG,EAAWT,MAAMwB,SAAW,QAC5Bf,EAAWT,MAAMyB,SAAWlB,EAAKmB,KACjCjB,EAAWT,MAAM2B,WAAapB,EAAKoB,WACnClB,EAAWT,MAAM4B,UAAYrB,EAAKqB,UAClCnB,EAAWT,MAAM6B,WAAatB,EAAKsB,WACnCpB,EAAWT,MAAM8B,WAAa,SAC9BrB,EAAWT,MAAM+B,IAAM,OACvBtB,EAAWT,MAAMgC,KAAO,IACxBvB,EAAWT,MAAMiC,WAAa,SAE9BxB,EAAWT,MAAMkC,WAAa,SACvB,GAAIC,GAAK1B,EAAW2B,YAAa3B,EAAW4B,cAGvD,QAAgBC,GAAiBC,EAAGC,EAAGC,EAAYC,EAAOC,GAGtD,WAFc,KAAVD,IAAoBA,EAAQ,OACjB,KAAXC,IAAqBA,EAAS,GAC1BJ,GAAKE,EAAWF,EAAIG,GAASH,GAAKE,EAAWF,EAAIE,EAAWC,MAAQA,GAASF,GAAKC,EAAWD,EAAIG,GAClGH,GAAKC,EAAWD,EAAIC,EAAWE,OAASA,EAGnD,QAAgBC,GAAcC,EAAIC,EAAIC,EAAMC,EAAeC,EAAclB,EAAKmB,EAAQlB,EAAMmB,EAAMC,EAAMC,OAChF,KAAhBA,IAA0BA,EAAc,GAC5C,IAAIC,GAAY,GACZC,EAASR,EAAKR,EACdiB,EAAST,EAAKP,EACdE,EAAQK,EAAKR,EAAIQ,EAAKL,MACtBC,EAASI,EAAKP,EAAIO,EAAKJ,MAgF3B,OA/EIZ,IAKAuB,GAJAA,EAAYA,EAAUG,OAAO,OAAuB,KAAOD,EAASV,GAAM,MAAQS,EAAS,IACrFC,EAAS,KAAOD,EAASV,GAAM,IAAMW,EAAS,QAClCd,EAAQG,GAAM,MAAiB,MAAQH,EAAQ,IAC3Dc,EAAS,MAAgB,KAAOA,EAASV,KACzBW,OAAO,QAAuB,KAAOd,EAASG,GAAM,MAAQJ,EAAQ,MACzE,KAAOA,EAAQG,GAAM,OACjB,IAAjBI,IAIQK,EAHY,mBAAhBD,EACKL,EAAcT,EAAIU,EAAgBP,EAAQ,GAC3CY,EAAYA,EAAUG,OAAO,OAAcT,EAAcT,EAAIU,GAAgB,QACvDQ,OAAO,OAAcN,EAAOF,GAAgB,KAAON,EAASM,GAC5E,MAAcD,IAAmB,IAAML,IAG7CW,EAAYA,EAAUG,OAAO,MAAcT,IAAmB,QACxCS,OAAO,OAAcN,EAAOF,GAAgB,KAAON,EAASM,GAC5E,OAAcD,EAAcT,EAAIU,GAAgB,IAAMN,IAIhEW,EAAYA,EAAUG,OAAO,OAAcT,EAAcT,EAAIU,GAAgB,QACvDQ,OAAO,QAAsB,KAAOd,EAASM,GAC7D,OAAcD,EAAcT,EAAIU,GAAgB,IAAMN,IAIhEW,EADCN,EAAcT,EAAIU,EAAgBM,EACvBD,EAAUG,OAAO,OAAcF,EAASV,GAAM,IAAMF,EAAS,MAAQY,EAAS,IACpFZ,EAAS,MAAiB,KAAOA,EAASG,GAAM,MAGjC,IAAjBG,EACYK,EAAUG,OAAO,OAAcF,EAASV,GAAM,IAAMF,EAAS,MAAQY,EAAS,IACpFZ,EAAS,MAAiB,KAAOA,EAASG,GAAM,MAG1CQ,EAAUG,OAAO,QAAwB,KAAOd,EAASG,GAAM,OAI9EI,EAOLI,GAFAA,GADAA,GADAA,GAFAA,EAAYA,EAAUG,OAAO,OAAuB,KAAOD,EAASV,GAAM,MAAQS,EAAS,MAC1E,KAAOA,EAASV,GAAM,MAAiB,OAAcG,EAAcT,EAAIU,GAAgB,QAClFQ,OAAO,QAAsB,IAAOT,EAAgB,IACpDS,OAAO,OAAcT,EAAcT,EAAIU,GAAgB,QACvDQ,OAAO,OAAcf,EAAQG,GAAM,MACnD,QAAkB,MAAiB,MAAgB,KAAOW,EAASV,KACnDW,OAAO,QAAuB,KAAOd,EAASG,GAAM,QAAkB,MAC3E,KAAOJ,EAAQG,GAAM,MAClC,OAAcU,EAASV,GAAM,MAAiB,QAAmB,MACpD,MAAiB,KAAOF,EAASG,GAAM,MAEnDd,GAGLsB,GAFAA,EAAYA,EAAUG,OAAO,OAAuB,KAAOD,EAASV,GAAM,MAAQS,EAAS,MAC1E,KAAOA,EAASV,GAAM,QACjBY,OAAO,OAAcf,EAAQG,GAAM,MAAiB,QAAkB,MAC3E,MAAgB,KAAOW,EAASV,GAAM,QAAuB,KAAOE,EAAcR,EAAIS,IACvGK,EAA6B,mBAAhBD,EAAoCC,EAAUG,OAAO,OAAcf,EAAQO,GAAgB,KAAOG,EAAOH,IAClHK,EAAUG,OAAO,OAAcf,EAAQO,GAAgB,OAI3DK,GADAA,GAFAA,EAA6B,mBAAhBD,EAAoCC,EAAUG,OAAO,QAAuB,IAAOT,EAAgB,GAC5GM,EAAUG,OAAO,QAAuB,KAAOT,EAAcR,EAAIS,KAC/CQ,OAAO,QAAuB,KAAOd,EAASG,GAAM,MAAQJ,EAAQ,MAAiB,KAAOA,EAAQG,GAAM,QAC1GY,OAAO,OAAcF,EAASV,GAAM,MAAiB,MAAQU,EAAS,MAC3E,MAAiB,KAAOZ,EAASG,GAAM,QAGxDQ,EAAYA,EAAUG,OAAO,MAAaF,EAASV,GAAM,MAAiB,QAAmB,MAC5E,MAAiB,KAAOW,EAASV,GAAM,QAAwB,KAAOE,EAAcR,EAAIS,IACzGK,EAA6B,mBAAhBD,EAAoCC,EAAUG,OAAO,OAAcF,EAASN,GAAgB,KAAOG,EAAOH,IACnHK,EAAUG,OAAO,OAAcF,EAASN,GAAgB,OAK5DK,GAFAA,GAFAA,EAA6B,mBAAhBD,EAAoCC,EAAUG,OAAO,QAAwB,IAAOT,EAAgB,GAC7GM,EAAUG,OAAO,QAAwB,KAAOT,EAAcR,EAAIS,KAChDQ,OAAO,QAAwB,KAAOd,EAASG,GAAM,MAAQS,EAAS,MAC3E,KAAOA,EAASV,GAAM,QACjBY,OAAO,OAAcf,EAAQG,GAAM,MAAiB,MAAQH,EAAQ,MACzE,MAAgB,KAAOC,EAASG,GAC7C,QAAuB,KAAOU,EAASV,GAAM,MAAQJ,EAAQ,MAChD,KAAOA,EAAQG,GAAM,MAAiB,OAEpDS,EA4DX,QAAgBI,GAAW7C,GACvB,MAAOH,UAASC,eAAeE,GAGnC,QAAgB8C,GAAc9C,GAC1B,GAAI+C,GAAUF,EAAW7C,EACrB+C,IACAC,SAAOD,GAIf,QAAgBE,GAAWC,EAAUC,EAAOtC,EAAMuC,EAAKC,EAASC,GAC5D,GAAIC,GAAW,GAAIC,GAAY,IAC3BC,EAAOC,EAAgBR,EAAUrC,EAAMsC,EAAOE,EAASD,GACvDxD,EAAa2D,EAAS,OAASE,EAAKE,cAAcF,EAAKG,aAE3D,OADAhE,GAAWiE,aAAa,aAAcP,GAC/B1D,EAGX,QAAgB8D,GAAgBR,EAAUrC,EAAMsC,EAAOE,EAASD,GAC5D,GAAIU,GACAH,EAAe,OACf9B,EAAQhB,EAAKgB,MACbC,EAASjB,EAAKiB,OACdiC,EAAOb,EAASxB,EAChBsC,EAAOd,EAASvB,EAChBD,EAAIwB,EAASxB,GAAMG,EAAQ,EAC3BF,EAAIuB,EAASvB,GAAMG,EAAS,CAChC,QAAQqB,GACJ,IAAK,SACL,IAAK,SACDQ,EAAe,UACfM,QAAMZ,GAAWa,GAAMrC,EAAQ,EAAGsC,GAAMrC,EAAS,EAAGsC,GAAML,EAAMM,GAAML,GACtE,MACJ,KAAK,QACDF,EAAO,KAAYpC,EAAI,IAAMsC,EAAO,OAAmBD,EAAQlC,EAAQ,GAAM,IAAMmC,EAAO,MAC1ED,EAAO,KAAOC,EAAQlC,EAAS,GAAM,MAAkBiC,EAAO,KACzEC,GAASlC,EAAS,GACvBmC,QAAMZ,GAAWiB,EAAKR,GACtB,MACJ,KAAK,iBACDA,EAAO,KAAYpC,EAAI,IAAMsC,EAAO,OAAmBD,EAAQlC,EAAQ,GAAM,IAAMmC,EACnFC,QAAMZ,GAAWiB,EAAKR,GACtB,MACJ,KAAK,eACDA,EAAO,KAAYC,EAAO,KAAOC,EAAQlC,EAAS,GAAM,MAAkBiC,EAAO,KAAOC,GAASlC,EAAS,GAC1GmC,QAAMZ,GAAWiB,EAAKR,GACtB,MACJ,KAAK,UACDA,EAAO,KAAYpC,EAAI,IAAMsC,EAAO,MACpBD,EAAO,KAAOC,GAASlC,EAAS,GAAM,OACrCiC,EAAQlC,EAAQ,GAAM,IAAMmC,EAAO,MACpCD,EAAO,KAAOC,EAAQlC,EAAS,GAAM,MACrCJ,EAAI,IAAMsC,EAAO,KACjCC,QAAMZ,GAAWiB,EAAKR,GACtB,MACJ,KAAK,YACDA,EAAO,KAAYpC,EAAI,KAAOsC,GAASlC,EAAS,GAAM,OACrCiC,EAAQlC,EAAQ,GAAM,KAAOmC,GAASlC,EAAS,GAAM,OACrDiC,EAAQlC,EAAQ,GAAM,KAAOmC,EAAQlC,EAAS,GAAM,MACrDJ,EAAI,KAAOsC,EAAQlC,EAAS,GAAM,MAClCJ,EAAI,KAAOsC,GAASlC,EAAS,GAAM,KACnDmC,QAAMZ,GAAWiB,EAAKR,GACtB,MACJ,KAAK,WACDA,EAAO,KAAYpC,EAAI,KAAOsC,EAAQlC,EAAS,GAAM,MACrCiC,EAAO,KAAOC,GAASlC,EAAS,GAAM,OACrCiC,EAAQlC,EAAQ,GAAM,KAAOmC,EAAQlC,EAAS,GAAM,MACrDJ,EAAI,KAAOsC,EAAQlC,EAAS,GAAM,KAClDmC,QAAMZ,GAAWiB,EAAKR,GACtB,MACJ,KAAK,mBACDA,EAAO,MAAaC,EAAQlC,EAAQ,GAAM,KAAOmC,EAAQlC,EAAS,GAAM,MACxDiC,EAAO,KAAOC,EAAQlC,EAAS,GAAM,OACpCiC,EAAQlC,EAAQ,GAAM,KAAOmC,EAAQlC,EAAS,GAAM,OACpDiC,EAAQlC,EAAQ,GAAM,KAAOmC,EAAQlC,EAAS,GAAM,KACrEmC,QAAMZ,GAAWiB,EAAKR,GACtB,MACJ,KAAK,WAID,IAAK,GAFDS,OAAS,GACTC,MAAS,GACJlE,EAAI,EAAGA,GAAK,EAAGA,IACpBiE,EAAU1C,EAAQ,EAAK4C,KAAKC,IAAKD,KAAKE,GAAK,KAJtC,GAI8CrE,IACnDkE,EAAU1C,EAAS,EAAK2C,KAAKG,IAAKH,KAAKE,GAAK,KALvC,GAK+CrE,IAEhDwD,EADM,IAANxD,EACO,MAAayD,EAAOQ,GAAU,KAAOP,EAAOQ,GAAU,IAGtDV,EAAKlB,OAAO,MAAamB,EAAOQ,GAAU,KAAOP,EAAOQ,GAAU,IAGjFV,GAAOA,EAAKlB,OAAO,KACnBqB,QAAMZ,GAAWiB,EAAKR,GACtB,MACJ,KAAK,QACDH,EAAe,QACfM,QAAMZ,GAAWwB,KAAQzB,EAAKtB,OAAUA,EAAQD,MAASA,EAAOH,EAAGA,EAAGC,EAAGA,IAGjF,OAASiC,aAAcP,EAASM,aAAcA,GAmBlD,QAAgBmB,GAAYzB,EAAS3D,EAAMqF,EAAOC,GAC9C,GAAIC,MACA1B,EAAW,GAAIC,GAAY,GAC/ByB,IACIjF,GAAMqD,EAAQrD,GACd0B,EAAK2B,EAAQ3B,EACbC,EAAK0B,EAAQ1B,EACbuD,KAAQH,EACRI,YAAazF,EAAKmB,KAClBuE,aAAc1F,EAAKqB,UACnBsE,cAAe3F,EAAKsB,WACpBsE,cAAe5F,EAAKoB,WACpByE,cAAelC,EAAQmC,OACvBC,UAAapC,EAAQoC,UACrBC,QAAWhG,EAAKgG,QAChBC,oBAAqBtC,EAAQuC,SAEjC,IAAInG,GAA+B,gBAAjB4D,GAAQ5D,KAAoB4D,EAAQ5D,KAAO4D,EAAQ5D,KAAK,GACtEG,EAAa2D,EAASsC,WAAWZ,EAAexF,EAOpD,OANAG,GAAWT,MAAM6B,WAAatB,EAAKsB,WACnCpB,EAAWT,MAAM4B,UAAYrB,EAAKqB,UAClCnB,EAAWT,MAAMyB,SAAWlB,EAAKmB,KACjCjB,EAAWT,MAAM2B,WAAapB,EAAKoB,WACnClB,EAAWT,MAAM4F,MAAQrF,EAAKqF,MAC9BC,EAAO9E,YAAYN,GACZA,ECzVX,GACI4D,GAA6B,WAE7B,QAASA,GAAYsC,GAEjBC,KAAKC,QAAU,6BACfD,KAAKE,OAASH,EAwYlB,MApYAtC,GAAY0C,UAAUC,eAAiB,SAAU9C,EAAS+C,GACtD,MAAO/C,GAAQ+C,IAQnB5C,EAAY0C,UAAUG,UAAY,SAAUhD,GAUxC,MATIiD,qBAAkBjD,EAAQrD,MAC1BqD,EAAQrD,GAAK+F,KAAKE,OAAS,QAE/BF,KAAKQ,OAAS1G,SAASC,eAAeuD,EAAQrD,IAC1CsG,oBAAkBzG,SAASC,eAAeuD,EAAQrD,OAClD+F,KAAKQ,OAAS1G,SAAS2G,gBAAgBT,KAAKC,QAAS,QAEzDD,KAAKQ,OAASR,KAAKU,qBAAqBpD,EAAS0C,KAAKQ,QACtDR,KAAKW,WAAWrD,EAAQxB,MAAOwB,EAAQvB,QAChCiE,KAAKQ,QAGhB/C,EAAY0C,UAAUQ,WAAa,SAAU7E,EAAOC,GAChD,GAAIiB,GAAUlD,SAASC,eAAeiG,KAAKE,QACvCpF,EAAQyF,oBAAkBvD,GAA6C,KAAlCA,EAAQ4D,uBAC7CL,qBAAkBP,KAAKlE,QAAUkE,KAAKlE,OAAS,EAC/CkE,KAAKQ,OAAO1C,aAAa,QAAShC,EAAQA,EAAM+E,WAAa/F,EAAKgB,MAAM+E,YAGxEb,KAAKQ,OAAO1C,aAAa,QAASkC,KAAKlE,MAAM+E,YAE7CN,oBAAkBP,KAAKjE,SAAWiE,KAAKjE,QAAU,EACjDiE,KAAKQ,OAAO1C,aAAa,SAAU/B,EAASA,EAAO8E,WAAa,OAGhEb,KAAKQ,OAAO1C,aAAa,SAAUkC,KAAKjE,OAAO8E,aASvDpD,EAAY0C,UAAUW,SAAW,SAAUxD,GACvC,GAAIS,GAAOjE,SAASC,eAAeuD,EAAQrD,GAK3C,OAJa,QAAT8D,IACAA,EAAOjE,SAAS2G,gBAAgBT,KAAKC,QAAS,SAElDlC,EAAOiC,KAAKU,qBAAqBpD,EAASS,IAS9CN,EAAY0C,UAAUY,SAAW,SAAUzD,GACvC,GAAI0D,GAAOlH,SAASC,eAAeuD,EAAQrD,GAK3C,OAJa,QAAT+G,IACAA,EAAOlH,SAAS2G,gBAAgBT,KAAKC,QAAS,SAElDe,EAAOhB,KAAKU,qBAAqBpD,EAAS0D,IAS9CvD,EAAY0C,UAAUc,cAAgB,SAAU3D,GAC5C,GAAI4D,GAAYpH,SAASC,eAAeuD,EAAQrD,GAKhD,OAJkB,QAAdiH,IACAA,EAAYpH,SAAS2G,gBAAgBT,KAAKC,QAAS,SAEvDiB,EAAYlB,KAAKU,qBAAqBpD,EAAS4D,IASnDzD,EAAY0C,UAAUgB,WAAa,SAAU7D,GACzC,GAAI8D,GAAStH,SAASC,eAAeuD,EAAQrD,GAK7C,OAJe,QAAXmH,IACAA,EAAStH,SAAS2G,gBAAgBT,KAAKC,QAAS,WAEpDmB,EAASpB,KAAKU,qBAAqBpD,EAAS8D,IAShD3D,EAAY0C,UAAUkB,aAAe,SAAU/D,GAC3C,GAAIgE,GAAWxH,SAASC,eAAeuD,EAAQrD,GAK/C,OAJiB,QAAbqH,IACAA,EAAWxH,SAAS2G,gBAAgBT,KAAKC,QAAS,aAEtDqB,EAAWtB,KAAKU,qBAAqBpD,EAASgE,IASlD7D,EAAY0C,UAAUoB,YAAc,SAAUjE,GAC1C,GAAIkE,GAAU1H,SAASC,eAAeuD,EAAQrD,GAK9C,OAJgB,QAAZuH,IACAA,EAAU1H,SAAS2G,gBAAgBT,KAAKC,QAAS,YAErDuB,EAAUxB,KAAKU,qBAAqBpD,EAASkE,IASjD/D,EAAY0C,UAAUsB,YAAc,SAAUnE,GAC1C,GAAIoE,GAAU5H,SAASC,eAAeuD,EAAQrD,GAK9C,OAJgB,QAAZyH,IACAA,EAAU5H,SAAS2G,gBAAgBT,KAAKC,QAAS,YAErDyB,EAAU1B,KAAKU,qBAAqBpD,EAASoE,IASjDjE,EAAY0C,UAAUwB,UAAY,SAAUrE,GACxC,GAAIsE,GAAM9H,SAAS2G,gBAAgBT,KAAKC,QAAS,QAcjD,OAbA2B,GAAIC,eAAe,KAAM,SAAUvE,EAAQvB,OAAO8E,YAClDe,EAAIC,eAAe,KAAM,QAASvE,EAAQxB,MAAM+E,YAChDe,EAAIC,eAAe,+BAAgC,OAAQvE,EAAQwB,MACnE8C,EAAIC,eAAe,KAAM,IAAKvE,EAAQ3B,EAAEkF,YACxCe,EAAIC,eAAe,KAAM,IAAKvE,EAAQ1B,EAAEiF,YACxCe,EAAIC,eAAe,KAAM,KAAMvE,EAAQrD,IACvC2H,EAAIC,eAAe,KAAM,aAAcvE,EAAQpC,YAC1CqF,oBAAkBP,KAAKI,eAAe9C,EAAS,eAChDsE,EAAIC,eAAe,KAAM,YAAa7B,KAAKI,eAAe9C,EAAS,cAElEiD,oBAAkBjD,EAAQwE,sBAC3BF,EAAIC,eAAe,KAAM,sBAAuBvE,EAAQwE,qBAErDF,GASXnE,EAAY0C,UAAUL,WAAa,SAAUxC,EAASC,GAClD,GAAI7D,GAAOI,SAAS2G,gBAAgBT,KAAKC,QAAS,OAKlD,OAJAvG,GAAOsG,KAAKU,qBAAqBpD,EAAS5D,GACrC6G,oBAAkBhD,KACnB7D,EAAKqI,YAAcxE,GAEhB7D,GASX+D,EAAY0C,UAAU6B,YAAc,SAAU1E,EAASC,GACnD,GAAI0E,GAAQnI,SAAS2G,gBAAgBT,KAAKC,QAAS,QAKnD,OAJAgC,GAAQjC,KAAKU,qBAAqBpD,EAAS2E,GACtC1B,oBAAkBhD,KACnB0E,EAAMF,YAAcxE,GAEjB0E,GAQXxE,EAAY0C,UAAU+B,YAAc,SAAUxI,GAC1C,GAAIyI,GAAQrI,SAAS2G,gBAAgBT,KAAKC,QAAS,QAEnD,OADAkC,GAAMJ,YAAcrI,EACbyI,GAOX1E,EAAY0C,UAAUiC,WAAa,WAE/B,MADWtI,UAAS2G,gBAAgBT,KAAKC,QAAS,SAStDxC,EAAY0C,UAAUkC,eAAiB,SAAU/E,GAC7C,GAAIgF,GAAWxI,SAAS2G,gBAAgBT,KAAKC,QAAS,WAEtD,OADAqC,GAAWtC,KAAKU,qBAAqBpD,EAASgF,IASlD7E,EAAY0C,UAAUoC,oBAAsB,SAAUjF,GAClD,GAAIkF,GAAgB1I,SAAS2G,gBAAgBT,KAAKC,QAAS,gBAE3D,OADAuC,GAAgBxC,KAAKU,qBAAqBpD,EAASkF,IASvD/E,EAAY0C,UAAUsC,YAAc,SAAUnF,GAC1C,GAAIoF,GAAQ5I,SAAS2G,gBAAgBT,KAAKC,QAAS,IAEnD,OADAyC,GAAQ1C,KAAKU,qBAAqBpD,EAASoF,IAU/CjF,EAAY0C,UAAUwC,cAAgB,SAAUrF,EAASN,GACrD,GAAI4F,GAAU9I,SAAS2G,gBAAgBT,KAAKC,QAASjD,EAErD,OADA4F,GAAU5C,KAAKU,qBAAqBpD,EAASsF,IAWjDnF,EAAY0C,UAAU0C,qBAAuB,SAAUC,EAAQC,EAAMzF,GACjE,GAAI0F,EACJ,IAAKzC,oBAAkBuC,EAAO,GAAGG,WAa7BD,EAAYF,EAAO,GAAG9D,MAAM6B,eAba,CACzC,GAAIqC,IACAjJ,GAAM+F,KAAKE,OAAS,IAAM6C,EAAO,iBACjC1E,GAAMf,EAAQe,GAAK,IACnBC,GAAMhB,EAAQgB,GAAK,IACnB6E,EAAK7F,EAAQ6F,EAAI,IACjBC,GAAM9F,EAAQ8F,GAAK,IACnBC,GAAM/F,EAAQ+F,GAAK,IAEvBrD,MAAKsD,aAAa,iBAAkBJ,EAAYJ,GAChDE,EAAY,QAAUhD,KAAKE,OAAS,IAAM6C,EAAO,kBAKrD,MAAOC,IAUXvF,EAAY0C,UAAUoD,qBAAuB,SAAUT,EAAQC,EAAMzF,GACjE,GAAI0F,EACJ,IAAKzC,oBAAkBuC,EAAO,GAAGG,WAY7BD,EAAYF,EAAO,GAAG9D,MAAM6B,eAZa,CACzC,GAAIqC,IACAjJ,GAAM+F,KAAKE,OAAS,IAAM6C,EAAO,iBACjCS,GAAMlG,EAAQkG,GAAK,IACnBC,GAAMnG,EAAQmG,GAAK,IACnBC,GAAMpG,EAAQoG,GAAK,IACnBC,GAAMrG,EAAQqG,GAAK,IAEvB3D,MAAKsD,aAAa,iBAAkBJ,EAAYJ,GAChDE,EAAY,QAAUhD,KAAKE,OAAS,IAAM6C,EAAO,kBAKrD,MAAOC,IAUXvF,EAAY0C,UAAUmD,aAAe,SAAUM,EAActG,EAASwF,GAClE,GAAIe,GAAO7D,KAAKoC,aACZ0B,EAAWhK,SAAS2G,gBAAgBT,KAAKC,QAAS2D,EACtDE,GAAW9D,KAAKU,qBAAqBpD,EAASwG,EAC9C,KAAK,GAAIvJ,GAAI,EAAGA,EAAIuI,EAAOtI,OAAQD,IAAK,CACpC,GAAIwJ,GAASjK,SAAS2G,gBAAgBT,KAAKC,QAAS,OACpD8D,GAAOjG,aAAa,SAAUgF,EAAOvI,GAAG0I,WACxCc,EAAOjG,aAAa,aAAcgF,EAAOvI,GAAGyE,OAC5C+E,EAAOjG,aAAa,eAAgBgF,EAAOvI,GAAGoF,QAAWmD,EAAOvI,WAAc,KACzEgG,oBAAkBuC,EAAOvI,GAAGnB,SAC7B2K,EAAO3K,MAAM4K,QAAUlB,EAAOvI,GAAGnB,OAErC0K,EAAS3J,YAAY4J,GAGzB,MADAF,GAAK1J,YAAY2J,GACVD,GAQXpG,EAAY0C,UAAU8D,aAAe,SAAU3G,GAC3C,GAAIuG,GAAO7D,KAAKoC,aACZE,EAAWtC,KAAKqC,gBAAiBpI,GAAMqD,EAAQrD,IACnDqD,GAAQrD,GAAKqD,EAAQrD,GAAK,OAC1B,IAAIkC,GAAO6D,KAAKiB,cAAc3D,EAG9B,OAFAgF,GAASnI,YAAYgC,GACrB0H,EAAK1J,YAAYmI,GACVuB,GAQXpG,EAAY0C,UAAU+D,qBAAuB,SAAU5G,GACnD,GAAIuG,GAAO7D,KAAKoC,aACZE,EAAWtC,KAAKqC,gBAAiBpI,GAAMqD,EAAQrD,IACnDqD,GAAQrD,GAAKqD,EAAQrD,GAAK,SAC1B,IAAImH,GAASpB,KAAKmB,WAAW7D,EAG7B,OAFAgF,GAASnI,YAAYiH,GACrByC,EAAK1J,YAAYmI,GACVuB,GASXpG,EAAY0C,UAAUO,qBAAuB,SAAUpD,EAASN,GAE5D,IAAK,GADDmH,GAAOC,OAAOD,KAAK7G,GACd/C,EAAI,EAAGA,EAAI4J,EAAK3J,OAAQD,IACb,UAAZ4J,EAAK5J,GACLyC,EAAQ5D,MAAM4K,QAAU1G,EAAQ6G,EAAK5J,IAGrCyC,EAAQc,aAAaqG,EAAK5J,GAAI+C,EAAQ6G,EAAK5J,IAGnD,OAAOyC,IAMXS,EAAY0C,UAAUkE,aAAe,WACjC,MAAO,OAEJ5G,KCzYP6G,EAAgC,WAEhC,QAASA,GAAevE,GACpBC,KAAKE,OAASH,EAggBlB,MA5fAuE,GAAenE,UAAUC,eAAiB,SAAU9C,EAAS+C,GACzD,MAAO/C,GAAQ+C,IASnBiE,EAAenE,UAAUkE,aAAe,SAAU/G,GAC9C,GAAIiH,GAAYzK,SAASE,cAAc,SAKvC,OAJAuK,GAAUzG,aAAa,KAAMkC,KAAKE,OAAS,WAC3CF,KAAKwE,IAAMD,EAAUE,WAAW,MAChCzE,KAAKuE,UAAYA,EACjBvE,KAAK0E,cAAcpH,EAAQxB,MAAOwB,EAAQvB,QACnCiE,KAAKuE,WAShBD,EAAenE,UAAUuE,cAAgB,SAAU5I,EAAOC,GACtD,GAAIiB,GAAUlD,SAASC,eAAeiG,KAAKE,QACvCpF,EAAQyF,oBAAkBvD,GAA6C,KAAlCA,EAAQ4D,uBAC7CL,qBAAkBP,KAAKlE,OACvBkE,KAAKuE,UAAUzG,aAAa,QAAShC,EAAQA,EAAM+E,WAAa/F,EAAKgB,MAAM+E,YAG3Eb,KAAKuE,UAAUzG,aAAa,QAASkC,KAAKlE,MAAM+E,YAEhDN,oBAAkBP,KAAKjE,QACvBiE,KAAKuE,UAAUzG,aAAa,SAAU/B,EAASA,EAAO8E,WAAa,OAGnEb,KAAKuE,UAAUzG,aAAa,SAAUkC,KAAKjE,OAAO8E,aAI1DyD,EAAenE,UAAUwE,cAAgB,SAAUrH,GAC/C0C,KAAKwE,IAAII,UAAY5E,KAAKI,eAAe9C,EAAS,eAClD,IAAIuH,GAAY7E,KAAKI,eAAe9C,EAAS,mBAC7C,KAAKiD,oBAAkBsE,GAAY,CAC/B,GAAIC,GAAkBD,EAAUvK,MAAM,IACtC0F,MAAKwE,IAAIO,aAAaC,SAASF,EAAgB,GAAI,IAAKE,SAASF,EAAgB,GAAI,MAEzF9E,KAAKwE,IAAIS,YAAcjF,KAAKI,eAAe9C,EAAS,WAQxDgH,EAAenE,UAAUY,SAAW,SAAUzD,GAC1C0C,KAAKwE,IAAIU,OACTlF,KAAKwE,IAAIW,YACTnF,KAAKwE,IAAII,UAAY5E,KAAKI,eAAe9C,EAAS,gBAClD0C,KAAKwE,IAAIS,YAAc3H,EAAQ8H,OAC/BpF,KAAKwE,IAAIa,OAAO/H,EAAQkG,GAAIlG,EAAQmG,IACpCzD,KAAKwE,IAAIc,OAAOhI,EAAQoG,GAAIpG,EAAQqG,IACpC3D,KAAKwE,IAAIY,SACTpF,KAAKwE,IAAIe,WASbjB,EAAenE,UAAUc,cAAgB,SAAU3D,EAASkI,GACxD,GAAIC,GAAYzF,KAAKwE,IACjBkB,EAAepI,EAAQa,EAsB3B,OArBA6B,MAAKwE,IAAIU,OACTlF,KAAKwE,IAAIW,YACLK,GACAxF,KAAKwE,IAAImB,UAAUH,EAAgB,GAAIA,EAAgB,IAE3DxF,KAAKwE,IAAIoB,YAAc5F,KAAKI,eAAe9C,EAAS,WACpD0C,KAAK2E,cAAcrH,GACnB0C,KAAKwE,IAAIrI,KAAKmB,EAAQ3B,EAAG2B,EAAQ1B,EAAG0B,EAAQxB,MAAOwB,EAAQvB,QACtC,OAAjB2J,GAAyBA,GAAgB,EACzC1F,KAAK6F,iBAAiBvI,IAGD,SAAjBA,EAAQ6B,OACR7B,EAAQ6B,KAAO,eAEnBa,KAAKwE,IAAIsB,UAAYxI,EAAQ6B,KAC7Ba,KAAKwE,IAAIuB,SAASzI,EAAQ3B,EAAG2B,EAAQ1B,EAAG0B,EAAQxB,MAAOwB,EAAQvB,QAC/DiE,KAAKwE,IAAIY,UAEbpF,KAAKwE,IAAIe,UACTvF,KAAKwE,IAAMiB,EACHzF,gBAGZsE,EAAenE,UAAU0F,iBAAmB,SAAUvI,GAClD,GAAIoI,GAAepI,EAAQa,GACvBxC,EAAI2B,EAAQ3B,EACZC,EAAI0B,EAAQ1B,EACZE,EAAQwB,EAAQxB,MAChBC,EAASuB,EAAQvB,MACA,UAAjBuB,EAAQ6B,OACR7B,EAAQ6B,KAAO,eAEnBa,KAAKwE,IAAIsB,UAAYxI,EAAQ6B,KACzBrD,EAAQ,EAAI4J,IACZA,EAAe5J,EAAQ,GAEvBC,EAAS,EAAI2J,IACbA,EAAe3J,EAAS,GAE5BiE,KAAKwE,IAAIW,YACTnF,KAAKwE,IAAIa,OAAO1J,EAAIG,EAAQ4J,EAAc9J,GAC1CoE,KAAKwE,IAAIwB,MAAMrK,EAAIG,EAAOF,EAAGD,EAAIG,EAAOF,EAAIG,EAAQ2J,GACpD1F,KAAKwE,IAAIwB,MAAMrK,EAAIG,EAAOF,EAAIG,EAAQJ,EAAGC,EAAIG,EAAQ2J,GACrD1F,KAAKwE,IAAIwB,MAAMrK,EAAGC,EAAIG,EAAQJ,EAAGC,EAAG8J,GACpC1F,KAAKwE,IAAIwB,MAAMrK,EAAGC,EAAGD,EAAIG,EAAOF,EAAG8J,GACnC1F,KAAKwE,IAAIyB,YACTjG,KAAKwE,IAAIrF,OACTa,KAAKwE,IAAIY,UASbd,EAAenE,UAAUW,SAAW,SAAUxD,EAASkI,GACnD,GACIU,GADO5I,EAAQiB,EACEjE,MAAM,KACvB6L,EAAcnG,KAAKI,eAAe9C,EAAS,gBAC3CmI,EAAYzF,KAAKwE,IACjB4B,GAAO,CACXpG,MAAKwE,IAAIU,OACTlF,KAAKwE,IAAIW,YACLK,GACAxF,KAAKwE,IAAImB,UAAUH,EAAgB,GAAIA,EAAgB,IAE3DxF,KAAKwE,IAAIoB,YAActI,EAAQqC,QAAUrC,EAAQqC,QAAUK,KAAKI,eAAe9C,EAAS,gBACxF0C,KAAK2E,cAAcrH,EACnB,KAAK,GAAI/C,GAAI,EAAGA,EAAI2L,EAAU1L,OAAQD,GAAQ,EAAG,CAC7C,GAAIiJ,GAAK6C,WAAWH,EAAU3L,EAAI,IAC9BkJ,EAAK4C,WAAWH,EAAU3L,EAAI,GAClC,QAAQ2L,EAAU3L,IACd,IAAK,IACI+C,EAAQgJ,QAAWhJ,EAAQe,IAC5B2B,KAAKwE,IAAIa,OAAO7B,EAAIC,EAExB,MACJ,KAAK,IACInG,EAAQgJ,QACTtG,KAAKwE,IAAIc,OAAO9B,EAAIC,EAExB,MACJ,KAAK,IACD,GAAI8C,GAAKF,WAAWH,EAAU3L,EAAI,IAC9BiM,EAAKH,WAAWH,EAAU3L,EAAI,GAClCyF,MAAKwE,IAAIiC,iBAAiBjD,EAAIC,EAAI8C,EAAIC,GACtCjM,GAAQ,CACR,MACJ,KAAK,IACD,GAAImM,GAAKL,WAAWH,EAAU3L,EAAI,IAC9BoM,EAAKN,WAAWH,EAAU3L,EAAI,IAC9BqM,EAAKP,WAAWH,EAAU3L,EAAI,IAC9BsM,EAAKR,WAAWH,EAAU3L,EAAI,GAClCyF,MAAKwE,IAAIsC,cAActD,EAAIC,EAAIiD,EAAIC,EAAIC,EAAIC,GAC3CtM,GAAQ,CACR,MACJ,KAAK,IACI+C,EAAQgJ,OAUJF,IACLpG,KAAKwE,IAAIuC,IAAIzJ,EAAQ3B,EAAG2B,EAAQ1B,EAAG0B,EAAQ0J,OAAQ1J,EAAQ2J,MAAO3J,EAAQ4J,IAAK5J,EAAQ6J,kBACvFnH,KAAKwE,IAAIuC,IAAIzJ,EAAQ3B,EAAG2B,EAAQ1B,EAAG0B,EAAQgJ,OAAQhJ,EAAQ4J,IAAK5J,EAAQ2J,OAAQ3J,EAAQ6J,kBACxFf,GAAO,GAZH9I,EAAQe,GACR2B,KAAKwE,IAAIuC,IAAIzJ,EAAQe,GAAIf,EAAQgB,GAAIhB,EAAQ0J,OAAQ,EAAG,EAAItI,KAAKE,GAAItB,EAAQ6J,mBAG7EnH,KAAKwE,IAAIa,OAAO/H,EAAQ3B,EAAG2B,EAAQ1B,GACnCoE,KAAKwE,IAAIuC,IAAIzJ,EAAQ3B,EAAG2B,EAAQ1B,EAAG0B,EAAQ0J,OAAQ1J,EAAQ2J,MAAO3J,EAAQ4J,IAAK5J,EAAQ6J,kBACvFnH,KAAKwE,IAAIc,OAAOhI,EAAQ3B,EAAG2B,EAAQ1B,IAQ3CrB,GAAQ,CACR,MACJ,KAAK,IACL,IAAK,IACDyF,KAAKwE,IAAIyB,YAET1L,GAAQ,GAapB,MATqB,SAAjB+C,EAAQ6B,UAAoCiI,KAAjB9J,EAAQ6B,OACnCa,KAAKwE,IAAIsB,UAAYxI,EAAQ6B,KAC7Ba,KAAKwE,IAAIrF,QAETgH,EAAc,GACdnG,KAAKwE,IAAIY,SAEbpF,KAAKwE,IAAIe,UACTvF,KAAKwE,IAAMiB,EACJzF,KAAKuE,WAahBD,EAAenE,UAAUL,WAAa,SAAUxC,EAASC,EAAO8J,EAAQC,EAAQC,EAAIC,GAChF,GAAIzM,GAAaiF,KAAKI,eAAe9C,EAAS,cACzCiD,qBAAkBxF,IAA4C,YAA7BA,EAAW0M,gBAC7C1M,EAAa,SAEjB,IAAIF,GAAWmF,KAAKI,eAAe9C,EAAS,aACxCrC,EAAa+E,KAAKI,eAAe9C,EAAS,eAE1C3D,EADYqG,KAAKI,eAAe9C,EAAS,cAAcmK,cACnC,IAAM1M,EAAa,IAAMF,EAAW,IAAMI,EAC9DwE,EAASO,KAAKI,eAAe9C,EAAS,eACtCqC,MAA8ByH,KAApB9J,EAAQqC,QAAwBrC,EAAQqC,QAAU,CAYhE,IAXe,WAAXF,IACAA,EAAS,UAEbO,KAAKwE,IAAIU,OACTlF,KAAKwE,IAAIsB,UAAYxI,EAAQ6B,KAC7Ba,KAAKwE,IAAI7K,KAAOA,EAChBqG,KAAKwE,IAAIkD,UAAYjI,EACrBO,KAAKwE,IAAIoB,YAAcjG,EACnBrC,EAAQqK,WACR3H,KAAKwE,IAAIoD,aAAetK,EAAQqK,WAE/BH,EAAS,CAEVxH,KAAKwE,IAAImB,UAAUrI,EAAQ3B,KAAsB0L,GAAkB,GAAI/J,EAAQ1B,GAAK0L,GAAkB,IACtGtH,KAAKwE,IAAIqD,OAAOvK,EAAQwK,cAAgBpJ,KAAKE,GAAK,KAItD,MAFAoB,MAAKwE,IAAIuD,SAASxK,EAAOiK,EAAUlK,EAAQ3B,EAAI,EAAG6L,EAAUD,EAAK,GACjEvH,KAAKwE,IAAIe,UACFvF,KAAKuE,WAShBD,EAAenE,UAAUgB,WAAa,SAAU7D,EAASkI,GACrD,GAAIC,GAAYzF,KAAKwE,GAcrB,OAbAxE,MAAKwE,IAAIU,OACTlF,KAAKwE,IAAIW,YACTnF,KAAKwE,IAAIuC,IAAIzJ,EAAQe,GAAIf,EAAQgB,GAAIhB,EAAQ6F,EAAG,EAAG,EAAIzE,KAAKE,IAC5DoB,KAAKwE,IAAIsB,UAAYxI,EAAQ6B,KAC7Ba,KAAKwE,IAAIoB,YAActI,EAAQqC,QAC/BK,KAAKwE,IAAIrF,OACLqG,GACAxF,KAAKwE,IAAImB,UAAUH,EAAgB,GAAIA,EAAgB,IAE3DxF,KAAK2E,cAAcrH,GACnB0C,KAAKwE,IAAIY,SACTpF,KAAKwE,IAAIe,UACTvF,KAAKwE,IAAMiB,EACJzF,KAAKuE,WAQhBD,EAAenE,UAAUkB,aAAe,SAAU/D,GAC9C0C,KAAKwE,IAAIU,OACTlF,KAAKwE,IAAIW,WAET,KAAK,GADD6C,GAAS1K,EAAQ0K,OAAO1N,MAAM,KACzBC,EAAI,EAAGA,EAAIyN,EAAOxN,OAAS,EAAGD,IAAK,CACxC,GAAI0N,GAAQD,EAAOzN,GAAGD,MAAM,KACxBqB,EAAI0K,WAAW4B,EAAM,IACrBrM,EAAIyK,WAAW4B,EAAM,GACf,KAAN1N,EACAyF,KAAKwE,IAAIa,OAAO1J,EAAGC,GAGnBoE,KAAKwE,IAAIc,OAAO3J,EAAGC,GAG3BoE,KAAKwE,IAAII,UAAY5E,KAAKI,eAAe9C,EAAS,gBAClD0C,KAAKwE,IAAIS,YAAc3H,EAAQ8H,OAC/BpF,KAAKwE,IAAIY,SACTpF,KAAKwE,IAAIe,WASbjB,EAAenE,UAAUoB,YAAc,SAAUjE,EAASkI,GACtD,GAAIC,GAAYzF,KAAKwE,IACjB0D,EAAgBxJ,KAAKyJ,IAAI7K,EAAQa,GAAIb,EAAQc,IAC7CgK,EAAS9K,EAAQa,GAAK+J,EACtBG,EAAS/K,EAAQc,GAAK8J,CAC1BlI,MAAKwE,IAAIU,OACTlF,KAAKwE,IAAIW,YACTnF,KAAKwE,IAAImB,UAAUrI,EAAQe,GAAIf,EAAQgB,IACnCkH,GACAxF,KAAKwE,IAAImB,UAAUH,EAAgB,GAAIA,EAAgB,IAE3DxF,KAAKwE,IAAIU,OACTlF,KAAKwE,IAAI8D,MAAMF,EAAQC,GACvBrI,KAAKwE,IAAIuC,IAAI,EAAG,EAAGmB,EAAe,EAAG,EAAIxJ,KAAKE,IAAI,GAClDoB,KAAKwE,IAAIsB,UAAYxI,EAAQ6B,KAC7Ba,KAAKwE,IAAIrF,OACTa,KAAKwE,IAAIe,UACTvF,KAAKwE,IAAII,UAAY5E,KAAKI,eAAe9C,EAAS,gBAClD0C,KAAKwE,IAAIS,YAAc3H,EAAQ8H,OAC/BpF,KAAKwE,IAAIY,SACTpF,KAAKwE,IAAIe,UACTvF,KAAKwE,IAAMiB,GAQfnB,EAAenE,UAAUwB,UAAY,SAAUrE,GAC3C0C,KAAKwE,IAAIU,MACT,IAAIqD,GAAW,GAAIC,MACdjI,qBAAkBjD,EAAQwB,QAC3ByJ,EAASE,IAAMnL,EAAQwB,KACvBkB,KAAKwE,IAAI7C,UAAU4G,EAAUjL,EAAQ3B,EAAG2B,EAAQ1B,EAAG0B,EAAQxB,MAAOwB,EAAQvB,SAE9EiE,KAAKwE,IAAIe,WAQbjB,EAAenE,UAAUoD,qBAAuB,SAAUT,GACtD,GAAI4F,EAKJ,OAJKnI,qBAAkBuC,EAAO,GAAGG,aAC7ByF,EAAa1I,KAAKwE,IAAIjB,qBAAqB,EAAG,EAAG,EAAGvD,KAAKuE,UAAUxI,SAE3DiE,KAAK2I,kBAAkB7F,EAAQ4F,IAS/CpE,EAAenE,UAAU0C,qBAAuB,SAAUC,GACtD,GAAI4F,EAKJ,OAJKnI,qBAAkBuC,EAAO,GAAGG,aAC7ByF,EAAa1I,KAAKwE,IAAI3B,qBAAqB,EAAG,EAAG,EAAG,EAAG,EAAG7C,KAAKuE,UAAUxI,SAE7DiE,KAAK2I,kBAAkB7F,EAAQ4F,IAInDpE,EAAenE,UAAUwI,kBAAoB,SAAU7F,EAAQ4F,GAC3D,GAAI1F,EACJ,IAAKzC,oBAAkBuC,EAAO,GAAGG,WAU7BD,EAAYF,EAAO,GAAG9D,MAAM6B,eAVa,CACzC,IAAK,GAAItG,GAAI,EAAGA,GAAKuI,EAAOtI,OAAS,EAAGD,IAAK,CACzC,GAAIyE,GAAQ8D,EAAOvI,GAAGyE,MAClB4J,EAAgB9F,EAAOvI,aAAcsO,MAAM,GAAI,GAC/CC,EAAY9D,SAAS4D,EAAc,IAAM,GAC7CF,GAAWK,aAAaD,EAAW9J,GAEvCgE,EAAY0F,EAAW7H,WAK3B,MAAOmC,IASXsB,EAAenE,UAAUO,qBAAuB,SAAUpD,EAASN,GAG/D,IAAK,GAFDmH,GAAOC,OAAOD,KAAK7G,GACnB0L,EAAS5E,OAAOD,KAAK7G,GAAS2L,IAAI,SAAU5I,GAAO,MAAO/C,GAAQ+C,KAC7D9F,EAAI,EAAGA,EAAI4J,EAAK3J,OAAQD,IAC7ByC,EAAQc,aAAaqG,EAAK5J,GAAIyO,EAAOzO,GAEzC,OAAO,OAQX+J,EAAenE,UAAU+I,uBAAyB,SAAU5L,GACxD0C,KAAKU,qBAAqBpD,EAAS0C,KAAKuE,UACxC,IAAIC,GAAMxE,KAAKwE,GACf,KAAKjE,oBAAkBP,KAAKmJ,SAAU,CAClC,GAAIC,GAAQ,GAAIZ,MAChBY,GAAMC,OAAS,WACX7E,EAAI7C,UAAUyH,EAAO,EAAG,IAE5BA,EAAMX,IAAMzI,KAAKmJ,UAQzB7E,EAAenE,UAAUmJ,UAAY,SAAUnN,GAC3C6D,KAAKwE,IAAIe,UACTvF,KAAKwE,IAAI8E,UAAUnN,EAAKR,EAAGQ,EAAKP,EAAGO,EAAKL,MAAOK,EAAKJ,SAMxDuI,EAAenE,UAAUsC,YAAc,WACnC,MAAO,OAOX6B,EAAenE,UAAU8D,aAAe,WACpC,MAAO,OAOXK,EAAenE,UAAU+D,qBAAuB,WAC5C,MAAO,OAOXI,EAAenE,UAAUoJ,WAAa,SAAUjM,GAC5C0C,KAAKwE,IAAIU,OACTlF,KAAKwE,IAAIsB,UAAY,cACrB9F,KAAKwE,IAAIrI,KAAKmB,EAAQ3B,EAAG2B,EAAQ1B,EAAG0B,EAAQxB,MAAOwB,EAAQvB,QAC3DiE,KAAKwE,IAAIrF,OACTa,KAAKwE,IAAIgF,QAKblF,EAAenE,UAAUsJ,cAAgB,WACrCzJ,KAAKwE,IAAIe,WAMbjB,EAAenE,UAAUsB,YAAc,WACnC,MAAO,OAQX6C,EAAenE,UAAUiC,WAAa,WAClC,MAAO,OAMXkC,EAAenE,UAAUkC,eAAiB,WACtC,MAAO,OAQXiC,EAAenE,UAAUG,UAAY,WACjC,MAAO,OAEJgE,KF9gBPoF,EAAwC,WACxC,GAAIC,GAAgB,SAAUpL,EAAGqL,GAI7B,OAHAD,EAAgBvF,OAAOyF,iBAChBC,uBAA2BC,QAAS,SAAUxL,EAAGqL,GAAKrL,EAAEuL,UAAYF,IACvE,SAAUrL,EAAGqL,GAAK,IAAK,GAAII,KAAKJ,GAAOA,EAAEK,eAAeD,KAAIzL,EAAEyL,GAAKJ,EAAEI,MACpDzL,EAAGqL,GAE5B,OAAO,UAAUrL,EAAGqL,GAEhB,QAASM,KAAOlK,KAAKmK,YAAc5L,EADnCoL,EAAcpL,EAAGqL,GAEjBrL,EAAE4B,UAAkB,OAANyJ,EAAaxF,OAAOgG,OAAOR,IAAMM,EAAG/J,UAAYyJ,EAAEzJ,UAAW,GAAI+J,QA4InF3O,EAAsB,WACtB,QAASA,GAAKO,EAAOC,GACjBiE,KAAKlE,MAAQA,EACbkE,KAAKjE,OAASA,EAElB,MAAOR,MAIP8O,EAAsB,WACtB,QAASA,GAAK1O,EAAGC,EAAGE,EAAOC,GACvBiE,KAAKrE,EAAIA,EACTqE,KAAKpE,EAAIA,EACToE,KAAKlE,MAAQA,EACbkE,KAAKjE,OAASA,EAElB,MAAOsO,MAGPC,EAAsB,WACtB,QAASA,GAAKhO,EAAQiO,GAClBvK,KAAKwK,QAAUD,EACfvK,KAAKyK,SAAWnO,EAEpB,MAAOgO,MAIPI,EAAiC,WACjC,QAASA,GAAgBzQ,GACrB+F,KAAK/F,GAAKA,EAEd,MAAOyQ,MAIPC,EAA4B,SAAUC,GAEtC,QAASD,GAAW1Q,EAAI0B,EAAGC,EAAG6D,EAAQ/F,EAAMgG,EAAWG,EAAUiI,OAC3C,KAAdpI,IAAwBA,EAAY,GACxC,IAAImL,GAAQD,EAAOE,KAAK9K,KAAM/F,IAAO+F,IAWrC,OAVA6K,GAAMnL,UAAY,GAClBmL,EAAMhL,SAAW,OACjBgL,EAAM/C,cAAgB,EACtB+C,EAAMlP,EAAIA,EACVkP,EAAMjP,EAAIA,EACViP,EAAMpL,OAASA,EACfoL,EAAMnR,KAAOA,EACbmR,EAAMnL,UAAYA,EAClBmL,EAAMhL,SAAWA,EACjBgL,EAAM/C,cAAgBA,EACf+C,EAEX,MAhBAnB,GAAUiB,EAAYC,GAgBfD,GACTD,GA0GEK,EAA4B,SAAUH,GAEtC,QAASG,GAAW9Q,EAAIkF,EAAMrD,EAAOkD,EAAOW,EAASkF,EAAWtG,GAC5D,GAAIsM,GAAQD,EAAOE,KAAK9K,KAAM/F,IAAO+F,IAOrC,OANA6K,GAAMlL,QAAUA,EAChBkL,EAAM1L,KAAOA,EACb0L,EAAMzF,OAASpG,EACf6L,EAAM,gBAAkB/O,EACxB+O,EAAM,oBAAsBhG,EAC5BgG,EAAMtM,EAAIA,EACHsM,EAEX,MAXAnB,GAAUqB,EAAYH,GAWfG,GACTL,GA8BEM,EAAiC,WACjC,QAASA,GAAgBrP,EAAGC,GACxBoE,KAAKrE,EAAIA,EACTqE,KAAKpE,EAAIA,EAEb,MAAOoP,MGtWPtB,EAAwC,WACxC,GAAIC,GAAgB,SAAUpL,EAAGqL,GAI7B,OAHAD,EAAgBvF,OAAOyF,iBAChBC,uBAA2BC,QAAS,SAAUxL,EAAGqL,GAAKrL,EAAEuL,UAAYF,IACvE,SAAUrL,EAAGqL,GAAK,IAAK,GAAII,KAAKJ,GAAOA,EAAEK,eAAeD,KAAIzL,EAAEyL,GAAKJ,EAAEI,MACpDzL,EAAGqL,GAE5B,OAAO,UAAUrL,EAAGqL,GAEhB,QAASM,KAAOlK,KAAKmK,YAAc5L,EADnCoL,EAAcpL,EAAGqL,GAEjBrL,EAAE4B,UAAkB,OAANyJ,EAAaxF,OAAOgG,OAAOR,IAAMM,EAAG/J,UAAYyJ,EAAEzJ,UAAW,GAAI+J,QAGnFe,EAA0C,SAAUC,EAAYC,EAAQ9K,EAAK+K,GAC7E,GAA2H7M,GAAvH8M,EAAIC,UAAU9Q,OAAQ2I,EAAIkI,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOhH,OAAOmH,yBAAyBJ,EAAQ9K,GAAO+K,CACrH,IAAuB,gBAAZI,UAAoD,kBAArBA,SAAQC,SAAyBtI,EAAIqI,QAAQC,SAASP,EAAYC,EAAQ9K,EAAK+K,OACpH,KAAK,GAAI7Q,GAAI2Q,EAAW1Q,OAAS,EAAGD,GAAK,EAAGA,KAASgE,EAAI2M,EAAW3Q,MAAI4I,GAAKkI,EAAI,EAAI9M,EAAE4E,GAAKkI,EAAI,EAAI9M,EAAE4M,EAAQ9K,EAAK8C,GAAK5E,EAAE4M,EAAQ9K,KAAS8C,EAChJ,OAAOkI,GAAI,GAAKlI,GAAKiB,OAAOsH,eAAeP,EAAQ9K,EAAK8C,GAAIA,GAkB5DwI,EAA2B,SAAUf,GAErC,QAASe,KACL,MAAkB,QAAXf,GAAmBA,EAAOgB,MAAM5L,KAAMsL,YAActL,KAoB/D,MAtBA0J,GAAUiC,EAAWf,GAIrBK,GACIY,WAAS,OACVF,EAAUxL,UAAW,WAAQ,IAChC8K,GACIY,WAAS,KACVF,EAAUxL,UAAW,YAAS,IACjC8K,GACIY,WAAS,aACVF,EAAUxL,UAAW,iBAAc,IACtC8K,GACIY,WAAS,WACVF,EAAUxL,UAAW,iBAAc,IACtC8K,GACIY,WAAS,WACVF,EAAUxL,UAAW,gBAAa,IACrC8K,GACIY,WAAS,IACVF,EAAUxL,UAAW,cAAW,IAC5BwL,GACTG,iBAOEC,EAA+B,SAAUnB,GAEzC,QAASmB,KACL,MAAkB,QAAXnB,GAAmBA,EAAOgB,MAAM5L,KAAMsL,YAActL,KAW/D,MAbA0J,GAAUqC,EAAenB,GAIzBK,GACIY,WAAS,KACVE,EAAc5L,UAAW,YAAS,IACrC8K,GACIY,WAAS,IACVE,EAAc5L,UAAW,YAAS,IACrC8K,GACIY,WAAS,KACVE,EAAc5L,UAAW,gBAAa,IAClC4L,GACTD,iBAOEE,EAA4B,SAAUpB,GAEtC,QAASoB,KACL,MAAkB,QAAXpB,GAAmBA,EAAOgB,MAAM5L,KAAMsL,YAActL,KAc/D,MAhBA0J,GAAUsC,EAAYpB,GAItBK,GACIY,WAAS,IACVG,EAAW7L,UAAW,QAAK,IAC9B8K,GACIY,WAAS,IACVG,EAAW7L,UAAW,QAAK,IAC9B8K,GACIY,WAAS,IACVG,EAAW7L,UAAW,YAAS,IAClC8K,GACIY,WAAS,IACVG,EAAW7L,UAAW,aAAU,IAC5B6L,GACTF,iBAOEG,EAA8B,SAAUrB,GAExC,QAASqB,KACL,MAAkB,QAAXrB,GAAmBA,EAAOgB,MAAM5L,KAAMsL,YAActL,KAQ/D,MAVA0J,GAAUuC,EAAcrB,GAIxBK,GACIY,WAAS,IACVI,EAAa9L,UAAW,QAAK,IAChC8K,GACIY,WAAS,IACVI,EAAa9L,UAAW,QAAK,IACzB8L,GACTH,iBAcEI,EAAyB,SAAUtB,GAOnC,QAASsB,GAAQ5O,EAASN,GACtB,MAAO4N,GAAOE,KAAK9K,KAAM1C,EAASN,IAAYgD,KA65BlD,MAp6BA0J,GAAUwC,EAAStB,GAcnBsB,EAAQ/L,UAAUgM,UAAY,WAC1BnM,KAAKoM,wBAAyB,EAC9BpM,KAAKqM,sBACArM,KAAKsM,UACNtM,KAAKuM,YAETvM,KAAKwM,wBAETN,EAAQ/L,UAAUkM,oBAAsB,WACpCrM,KAAKxC,SAAW,GAAIC,GAAYuC,KAAKhD,QAAQ/C,IAC7C+F,KAAKyM,WAAavT,EAAqB8G,KAAK7G,OAC5C6G,KAAK0M,iBACL1M,KAAK2M,QAAU,EACf3M,KAAK4M,WAAa,GAClB5M,KAAK6M,SAAU,EACf7M,KAAK8M,gBAETZ,EAAQ/L,UAAUoM,UAAY,WAC1B,GAAIQ,GAAYjT,SAASC,eAAeiG,KAAKhD,QAAQ/C,GAAK,QACtD+S,EAAiBlT,SAASC,eAAeiG,KAAKhD,QAAQ/C,GAAK,kBAC3D+F,MAAKiN,gBACLC,sBAAoBlN,KAAKhD,QAAQ/C,GAAK,kCAEtC8S,GAAaA,EAAUI,YACvBlQ,SAAO8P,GAEPC,GAAkBA,EAAeG,YACjClQ,SAAO+P,IAMfd,EAAQ/L,UAAUiN,OAAS,WAEvB,GADApN,KAAKqN,WAAY,EACZrN,KAAKsN,SAUNtN,KAAKuN,mBACLvN,KAAKwN,eAAexN,KAAKnE,WAAYmE,KAAK7C,cAX1B,CAChB6C,KAAKyN,WAAWzN,KAAK6M,QACrB,IAAIa,IACAC,QAAQ,EAAO5K,KAAM,gBAAiB6K,QAAS5N,KAEnDA,MAAK6N,QAAQ,gBAAiBH,EAC9B,IAAII,GAAa9N,KAAK+N,qBAAqB/N,KAAKnE,WAAYmE,KAAK7C,SACjE6C,MAAKgO,WAAWF,EAAWrD,SAAUqD,EAAWtD,QAASxK,KAAKiO,YAMlEjO,KAAK6N,QAAQ,UAAYD,QAAS5N,MAClC,IAAIhD,GAAUlD,SAASC,eAAe,mBAClCiD,IACAC,SAAOD,GAEXgD,KAAKoM,wBAAyB,GAElCF,EAAQ/L,UAAUqM,qBAAuB,WAErC,GADAxM,KAAKkO,iBACAlO,KAAKsN,UAAYtN,KAAKmO,OAAQ,CAE3BnO,KAAKoO,WACLpO,KAAKhD,QAAQc,aAAa,MAAO,MAErC,IAAIiP,GAAY/M,KAAKxC,SAAS8C,WAAYrG,GAAI+F,KAAKhD,QAAQ/C,GAAK,QAChE+F,MAAKhD,QAAQ7C,YAAY4S,EAEzB,IAAIsB,GAAevU,SAASC,eAAeiG,KAAKhD,QAAQ/C,GAAK,SACxDoU,KACDA,EAAerO,KAAKxC,SAASiF,aAAcxI,GAAI+F,KAAKhD,QAAQ/C,GAAK,YACpD6D,aAAa,YAAa,kBAE3CiP,EAAU5S,YAAYkU,EACtB,IAAIC,GAActO,KAAKxC,SAASsD,UAC5B7G,GAAM+F,KAAKhD,QAAQ/C,GAAK,QAASsU,eAAgBvO,KAAKwO,OAAO1S,MAC7DqD,KAAQa,KAAKb,MAAQa,KAAKyM,WAAWpT,YAAasG,QAA4B,iBAAfK,KAAK7G,OAA2C,aAAf6G,KAAK7G,OAAuC,eAAf6G,KAAK7G,OAAyC,mBAAf6G,KAAK7G,OAAgD,MAAjB6G,KAAKL,QAC7LK,KAAKL,QAAT,EACJyF,OAAUpF,KAAKwO,OAAOxP,OAE1BqP,GAAalU,YAAYmU,KAGjCpC,EAAQ/L,UAAU6N,WAAa,SAAUvD,EAAUD,EAAS1P,GACxD,GAAIkF,KAAKyO,OAAOjU,QAAU,EACtB,MAAO,KAQX,KAAK,GANDkU,GACAC,EAAQ,EACRC,EAAc5O,KAAKxC,SAASiF,aAAcxI,GAAI+F,KAAKhD,QAAQ/C,GAAK,qBAChEoU,EAAevR,EAAWkD,KAAKhD,QAAQ/C,GAAK,UAC5C0B,GAAMqE,eAAkBA,KAAK6O,YAAY/S,MAAShB,EAAO,EACzC,EAAfkF,KAAK8O,QAAgBhU,EAAO,IAAO0P,EAAUxK,KAAK3D,aAAe,GAC7D0S,EAAK,EAAGC,EAAKhP,KAAKyO,OAAQM,EAAKC,EAAGxU,OAAQuU,IAAM,CACrD,GAAI3R,GAAQ4R,EAAGD,EACD,UAAV3R,IACAsR,EAAc,GAAI3D,GAAW/K,KAAKhD,QAAQ/C,GAAK,cAAgB0U,EAAO3O,KAAKiP,QAAQN,GAAQ,EAAG,UAAW,EAAG,MACxG3O,KAAK8M,YAAY6B,IACjBC,EAAYzU,YAAY+C,EAAW,GAAI8N,GAAgBrP,EAAGqE,KAAK8M,YAAY6B,GAAS3O,KAAK2M,SAAWlC,EAAWzK,KAAK3D,aAAe,IAAKe,EAAO,GAAI7B,GAAKT,EAAMA,GAAO,GAAI4T,EAAa,OAE1LC,KAGRN,EAAalU,YAAYyU,IAE7B1C,EAAQ/L,UAAU4N,qBAAuB,SAAUlS,EAAYsB,GAC3D,GAMIhB,GANA+S,EAAapS,EAAWkD,KAAKhD,QAAQ/C,IACrCmC,EAAgB,GAAI4O,GAAgB,EAAG,GACvCmE,EAAc,GAAInE,GAAgB,EAAG,GACrC+B,EAAYjQ,EAAWkD,KAAKhD,QAAQ/C,GAAK,QACzCoU,EAAevR,EAAWkD,KAAKhD,QAAQ/C,GAAK,UAC5CqU,EAAcxR,EAAWkD,KAAKhD,QAAQ/C,GAAK,SAE3CmV,GAAQ,EACRC,GAAS,EACT5E,GAAW,EACX9O,EAAI,EACJC,EAAI,CAoBR,IAnBoB,KAAhBoE,KAAKsP,SACLtP,KAAK6O,YAAY9S,QAAUiE,KAAKuP,SAEhCvP,KAAKwP,QAAQhV,OAAS,GACtB2B,EAAO6D,KAAKyP,sBAAsB5T,EAAYmE,KAAK7C,SAASxB,EAAGqE,KAAK7C,SAASvB,GAC7EwT,GAAQ,IAGRjT,EAAO6D,KAAK0P,gBAAgB7T,EAAYsB,EAAUf,EAAe+S,GAC5DnP,KAAK2P,SAONhU,GADA0T,EAAUlT,EAAKR,EAAKwB,EAASxB,EAAIqE,KAAK4P,WAAWjU,GACnC,EAAIqE,KAAK3D,cALvBoO,IADA2E,EAASjT,EAAKP,EAAKuB,EAASvB,EAAIoE,KAAK4P,WAAWhU,GAEhDA,EAAKwT,EAAQ,EAAIpP,KAAK3D,eAOV,KAAhB2D,KAAKsP,OAAe,CACpB,GAAIO,GAAc,EACdC,EAAa9P,KAAK+P,OAAS/P,KAAKgQ,YAAchQ,KAAKsP,MACnDtP,MAAK+P,QAAkC,qBAAaD,EAAW1V,QAAQ,MAAQ,GAAK0V,EAAW1V,QAAQ,MAAQ,KAE/GyV,EADgBC,EAAWxV,MAAM,QACTE,OAE5B,IAAIyV,GAAaxW,EAAYuG,KAAK+P,OAAS/P,KAAKgQ,YAAchQ,KAAKsP,OAAQtP,KAAKkQ,WAAWnU,OACtFiE,KAAKuP,QAAUM,GAAgBpF,EAAWzK,KAAK3D,aAAe,IAAM2D,KAAK+P,OAAS,EAAI,GAEvFrT,EAAY,MADc,EAAfsD,KAAK8O,SAAiBO,GAAWD,GAAU3E,EAA+B,EAApBzK,KAAK3D,eACzC,IAAM4T,EACnC,MAAQ9T,EAAKL,OAAUuT,GAAWD,GAAU3E,EAA+B,EAApBzK,KAAK3D,cAAoC,EAAf2D,KAAK8O,SACtF,IAAMmB,EACNE,EAAgBnQ,KAAKxC,SAASsD,UAC9B7G,GAAM+F,KAAKhD,QAAQ/C,GAAK,eAAgBsU,eAAgB,EACxDpP,KAAQ,KAAMQ,QAAW,GAAKyF,OAAUpF,KAAKyM,WAAWjT,kBAAmB+E,EAAK7B,GAEpF2R,GAAalU,YAAYgW,GAE7B,GAAIlJ,GAAQjH,KAAKwO,OAAO1S,MAAQ,EAC5BsU,EAAY,GAAI/F,GAAKpD,EAAQtL,EAAGsL,EAAQrL,EAAGO,EAAKL,MAAQmL,EAAO9K,EAAKJ,OAASkL,EAkBjF,IAjBAoH,EAAavQ,aAAa,UAAW,MACjCkC,KAAKqQ,iBAAoBrQ,KAAK6M,SAAY7M,KAAKsQ,UAI/CtQ,KAAKuQ,UAAUrB,EAAY/S,EAAKR,EAAGQ,EAAKP,GAHxCoE,KAAKwQ,kBAAkBtB,EAAY/S,GAMvC4Q,EAAUjP,aAAa,UAAW3B,EAAKJ,OAASiE,KAAKwO,OAAO1S,OAAakE,KAAK2P,SAAa,EAAI3P,KAAK3D,cAAgB,GAAGwE,YACvHkM,EAAUjP,aAAa,SAAU3B,EAAKL,MAAQkE,KAAKwO,OAAO1S,OAAYkE,KAAK2P,SAAiB3P,KAAK3D,aAAT,GAAyB,GAAGwE,YACpHkM,EAAUjP,aAAa,UAAW,KAC7ByC,oBAAkBP,KAAKyQ,oBACxBrB,EAAQpP,KAAKyQ,iBAAiBrW,QAAQ,QAAU,EAChDqQ,EAAWzK,KAAKyQ,iBAAiBrW,QAAQ,WAAa,EACtDiV,EAASrP,KAAKyQ,iBAAiBrW,QAAQ,SAAW,GAEtDkU,EAAYxQ,aAAa,IAAK9B,EAAcgE,KAAK7B,GAAI6B,KAAK5B,GAAIgS,EAAWhU,EAAe4D,KAAK3D,aAAc+S,EAAO3E,EAAU4E,EAAQF,EAAYxT,EAAGwT,EAAYvT,EAAGoE,KAAKvD,cACnKuD,KAAK0Q,cAA+B,eAAf1Q,KAAK7G,MAAwB,CAElD,GAAIwX,GAAW3Q,KAAKhD,QAAQ/C,GAAK,SACd,cAAf+F,KAAK7G,OAAuC,iBAAf6G,KAAK7G,OAChB,eAAf6G,KAAK7G,OAAyC,mBAAf6G,KAAK7G,MACvCmV,EAAYxQ,aAAa,aAAc,mEAGvCwQ,EAAYxQ,aAAa,SAAU8S,UAAQC,KAAO,GAAK,QAAUF,EAAW,IAEhF,IAAIG,GAAS,eAAiBH,EAAW,qEACzCG,IAAU,yGACVA,GAAU,mGACV,IAAIC,GAAa/Q,KAAKxC,SAAS4E,YAC/B2O,GAAWjT,aAAa,KAAMkC,KAAKhD,QAAQ/C,GAAK,0BAChDoU,EAAalU,YAAY4W,GACzBA,EAAWpW,UAAYmW,EAE3B,GAAIE,GAA6B,WAAfhR,KAAK7G,MAAqB,UAA2B,eAAf6G,KAAK7G,MAAyB,UAAY6G,KAAKwO,OAAOxP,KAU9G,OATAsP,GAAYxQ,aAAa,SAAUkT,GAC9BzQ,oBAAkBP,KAAKwO,OAAO3J,YAC/ByJ,EAAYxQ,aAAa,mBAAoBkC,KAAKwO,OAAO3J,WAE7D7E,KAAKiR,WAAW,GAAIjG,GAAgBrP,EAAGC,GAAI6O,GAAW4E,IAAWD,IAAU3E,GACvEzK,KAAKkR,SACLlR,KAAK2P,UAAY3P,KAAK2P,SACtB3P,KAAKkR,QAAS,GAEX,GAAI5G,GAAKG,GAAW4E,IAAWD,IAAU3E,IAEpDyB,EAAQ/L,UAAU8Q,WAAa,SAAUhJ,EAAOwC,EAAUD,GACtD,GAAIxN,GAAUlD,SAASC,eAAeiG,KAAKhD,QAAQ/C,GAAK,QACpDwQ,IACAzN,EAAQc,aAAa,YAAa,eAAiBkC,KAAK3D,aAAe,KAEvEmO,GACAxN,EAAQc,aAAa,YAAa,aAAekC,KAAK3D,aAAe,QAG7E6P,EAAQ/L,UAAUgR,kBAAoB,WAClCnR,KAAK0M,iBACgE,KAAjE1M,KAAKsP,OAAO7U,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAI2W,SACtDpR,KAAK0M,cAAgB1M,KAAK0M,cAAc7P,OAAOmD,KAAKsP,SAExDtP,KAAK0M,cAAgB1M,KAAK0M,cAAc7P,OAAOmD,KAAKwP,UAGxDtD,EAAQ/L,UAAUsN,WAAa,SAAU4D,GACrC,GAGIC,GAIAC,EACAC,EAEAxQ,EACAyQ,EAXA1V,EAAS,EACTD,EAAQ,EACR4V,EAAW,EAGX/X,EAAOgY,YAAW3R,KAAKkQ,UAAW,MAAM,GAAS,WACjD7B,EAAevR,EAAWkD,KAAKhD,QAAQ/C,GAAK,UAG5C2X,EAAa,EAGjB5R,MAAKmR,oBACLnR,KAAK+P,QAAS,CACd,IACItQ,GADqD,QAAtC3F,SAASI,KAAK2X,aAAa,SAChB7R,KAAKoO,UAAY,MAAQ,OACvDpO,MAAK8R,UAAY9R,KAAKnE,WAAWF,EAAIqE,KAAK7C,SAASxB,EACnDqE,KAAK+R,WAAc/R,KAAKnE,WAAWF,EAAIqE,KAAKnE,WAAWC,MAASkE,KAAK8R,SACrE,IAAIE,GAAgBhS,KAAKsP,OAAO7U,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAI2W,OACtEa,EAAYjS,KAAKsP,OAAOlV,QAAQ,QAAU,GAAK4F,KAAKsP,OAAOlV,QAAQ,SAAW,EAC9E8X,EAAczY,EAAYuG,KAAK0M,cAAc,GAAI/S,GAAMmC,MAAS,EAAIkE,KAAK8O,QAAW9O,KAAK3D,aACzF8V,EAAenS,KAAK7C,SAASxB,EAAIuW,EAAelS,KAAK7C,SAASxB,EAC9DyW,EAAgBpS,KAAKnE,WAAWF,EAAIqE,KAAKnE,WAAWC,MAAUkE,KAAK7C,SAASxB,EAAIuW,EAEhFG,EAAiC,KAAlBL,EAAwBhS,KAAKuP,QAAU,EACtD+C,GAAQ,EACRC,GAAW,CACfvS,MAAK8M,cACL,IAGI0F,GAHAvE,EAAcjO,KAAKyO,OAAOjU,OAAS,EAAK,GAAK,EAC7CiY,EAAiBzS,KAAKyO,OAAOjU,OAAS,EAAK,EAAI,EAI/CO,EAAa,SACb2X,EAAa1S,KAAKyM,WAAWlT,kBAC7BgO,EAAM,GAAKlB,WAHA,QAGyBA,WAAW1M,EAAKmB,MACpD6X,IACCtB,KAAYrR,KAAKsM,WAClBvP,EAAciD,KAAKhD,QAAQ/C,GAAK,SAChC8C,EAAciD,KAAKhD,QAAQ/C,GAAK,gBAChC8C,EAAciD,KAAKhD,QAAQ/C,GAAK,oBAChC8C,EAAciD,KAAKhD,QAAQ/C,GAAK,0BAOpC,KAAK,GALDqD,GAAU,GAAIqN,GAAW3K,KAAKhD,QAAQ/C,GAAK,QAAwB,EAAf+F,KAAK8O,QAA6B,EAAf9O,KAAKuP,QAA6B,EAAfvP,KAAK2M,SAAgC,IAAjB3M,KAAKuP,QAAgB,EAAI,GAAK9P,EAAQ,IACpJmT,EAAgB7T,EAAYzB,EAAS3D,EAAM,KAAM0U,GACjDwE,EAA8C,IAA9B7S,KAAK0M,cAAclS,QAAgBwF,KAAK0M,cAAc,GAAGtS,QAAQ,WAAa,EAC9F0Y,EAA2B,KAAhB9S,KAAKsP,OAChBxU,EAAOgY,GAAYb,EAAY,GAAK,GAC/Bc,EAAI,EAAGC,EAAehT,KAAK0M,cAAclS,OAAQuY,EAAIC,EAAcD,IAaxE,GAZAvB,EAAiBxR,KAAK0M,cAAcqG,GAAGtY,QAAQ,gBAAiB,OAC3DA,QAAQ,kBAAmB,QAC3BH,MAAM,YACD,IAANyY,IAAYF,GAAiB7S,KAAKiT,aACjCjT,KAAK8R,UAAYI,GAAeC,KAChCnS,KAAK+R,WAAaG,GAAeE,KAClCI,EAAkB9T,KAAKwU,MAAMlT,KAAK8R,UAAY9R,KAAK+R,WAAc/R,KAAK8R,UAAYhX,EAASkF,KAAK+R,WAAajX,GAE7G0W,GAD2B,KAAlBQ,EAAuBA,EAAgBhS,KAAK0M,cAAcqG,IAC3CI,MAAM,GAAIC,QAAO,OAASZ,EAAkB,IAAK,MACzExS,KAAKgQ,YAAciC,EAAY,MAAQT,EAAe9W,KAAK,QAAU,OAAS8W,EAAe9W,KAAK,QAClGsF,KAAK+P,OAASyB,EAAehX,OAAS,GAEhB,KAAtBgX,EAAe,GAAnB,CAGW,IAANuB,GAA+B,KAAlBf,GACdhS,KAAK8M,YAAYuG,MAAwB,KAAlBrB,EAAwBhS,aAAgB,GAAK1C,EAAQ1B,EAAIG,EAEpF,KAAK,GAAIxB,GAAI,EAAG+Y,EAAM9B,EAAehX,OAAQD,EAAI+Y,EAAK/Y,IAAK,CACvD+W,EAAQE,EAAejX,GAAGE,QAAQ,OAAQ,WAAWA,QAAQ,SAAU,YAAYA,QAAQ,KAAOuF,eAAkB,cAAqB,cACpI1F,MAAM,QACP0F,KAAKoO,WAAakD,EAAM9W,OAAS,GAAKgX,EAAejX,GAAG4Y,MAAM,QAC9D7B,EAAM,GAAKA,EAAM,GAAGF,OACpBE,EAAMiC,WAEV7B,EAAW,EACXa,GAAW,EACXxW,GAAUwL,CACV,KAAK,GAAIiM,GAAI,EAAGC,EAAQnC,EAAM9W,OAAQgZ,EAAIC,EAAOD,IAC7CxS,EAAOsQ,EAAMkC,GACTxT,KAAKoO,WAAsB,KAATpN,GAAehB,KAAK0T,UAAU1S,KAChDA,EAAOA,EAAKnE,OAAO,MAElB,KAAK8W,KAAK3S,IAAkB,KAATA,IACpBA,EAAO,OAELuR,GAAqB,MAATvR,GAA4E,KAA1DA,EAAKvG,QAAQ,OAAQ,IAAIA,QAAQ,SAAU,IAAI2W,UAC/EM,GAAqB,MAAT1Q,EAxDX,EAwDuC,EACpCuR,IAAaD,GACbb,GACI9V,EAAmB,EAAfqE,KAAK8O,SAAgBb,EAAawE,GACtClL,GAAIA,GAAM,EAAa8K,EAAc,GAAIlT,KAAM,IAEnDkT,EAAc,MAIVZ,EADAa,GAASC,GAEL5W,EAAsB,KAAlBqW,EAAyC,EAAfhS,KAAK8O,SAAgBb,EAAawE,GAC1C,EAAfzS,KAAK8O,SAAgB9O,KAAK+P,OAAU9B,EAAawE,EAAiB,OAOrFF,GAAW,EACXhB,EAAevR,KAAKxC,SAASwE,YAAYyP,EAAa,IACtDmB,EAAczY,YAAYoX,GACtBvQ,EAAK5G,QAAQ,QAAU,GAAO6X,GAAmB,IAANuB,GAAiB,IAANT,IAAaD,GAAY9S,KAAK+P,SACpFhV,EAAa,OACb2X,EAAa1S,KAAKyM,WAAWnT,iBAC7BsY,EAAa,eAAiB7W,EAC9BpB,EAAKoB,WAAaA,EAClB,EAAe+C,aAAa,OAAQkC,KAAKkQ,UAAUlR,OAAS0T,KAG5Dd,EAA4B,SAAf7W,EAAwB,eAAiBA,EAAa,GACnEpB,EAAKoB,WAAaA,EAClB,EAAe+C,aAAa,OAAQkC,KAAKkQ,UAAUlR,OAAS0T,KAE5D1R,EAAK5G,QAAQ,SAAW,GAAO6X,GAAauB,IAAMC,EAAQ,GAAW,IAANV,IAAaD,GAAY9S,KAAK+P,WAC7FhV,EAAa,SACb2X,EAAa1S,KAAKyM,WAAWlT,mBAGjC,EAAewI,YAAcf,EAAOhB,KAAK4T,sBAAsB5S,GAC/D0Q,GAAYjY,EAAYuH,EAAMrH,GAAMmC,MACjB,KAAf8V,IACAL,EAAanY,MAAM2B,WAAa6W,EAAWtX,MAAM,gBAAgB,GACjEiX,EAAanY,MAAM4F,MAAQuS,EAAaM,aAAa,SAGzDN,EAAanY,MAAM6B,WAAa,UAChCsW,EAAanY,MAAM4B,UAAY,UAC/BuW,EAAanY,MAAMyB,SAAW,UAC9ByX,GAAQ,EAGhBZ,IA5GS,EA6GT5V,EAAQ4C,KAAKyJ,IAAIrM,EAAO4V,GACxBiB,EAAaU,KAAK3B,IAG1B1R,KAAK6O,YAAc,GAAItT,GAAKO,GAASA,EAAQ,EAAK,EAAIkE,KAAK8O,QAAW,GAAI/S,GAC1EiE,KAAK6O,YAAY/S,OAAUmS,EAAawE,CACxC,IAAIzV,GAAW4V,EAAciB,WAAW,EACxC,IAAsB,KAAlB7B,GAAwBhV,IAAYgD,KAAK+P,OAAQ,CACjDpW,EAAKoB,WAAa,MAClB,IAAI+Y,IAAW9T,KAAK6O,YAAY/S,MAAS,EAAIkE,KAAK2M,SAAY,EAAIlT,EAAYuY,EAAerY,GAAMmC,MAAQ,CAC3GkB,GAAQc,aAAa,IAAKgW,EAAQjT,YAEtCb,KAAK+T,iBAAiBnB,EAAeE,EAAU7E,EAAawE,EAAeE,IAE/EzG,EAAQ/L,UAAU4T,iBAAmB,SAAUhV,EAAa+T,EAAU7E,EAAY0E,GAC9E,GAAI3S,KAAKoO,UAGL,IAAK,GAFDmD,OAAe,GACfyC,EAAoBlB,EAAW,EAAI,EAC9BvY,EAAI,EAAGA,EAAIwE,EAAY8U,WAAWrZ,OAAQD,IAC/CgX,EAAgBxS,EAAY8U,WAAWtZ,GACjCuY,KAAYvY,EAAI,IAAOgG,oBAAkBgR,EAAaM,aAAa,QACrEN,EAAazT,aAAa,KAAMkC,KAAK6O,YAAY/S,OAASmS,EAAa0E,EAAaqB,KAAqBnT,YACzGmT,MAKhB9H,EAAQ/L,UAAUyT,sBAAwB,SAAUK,GAChD,GAAIC,GAAsBD,EAAYd,MAAM,wBAC5C,IAAI5S,oBAAkB2T,GAClB,MAAOD,EAGX,KAAK,GADDE,GAAYnU,KAAK0T,UAAUO,GACtB1Z,EAAI,EAAGA,EAAI2Z,EAAoB1Z,OAAQD,IACxCyF,KAAKoU,mBAAmBF,EAAoB3Z,GAAGE,QAAQ,IAAK,IAAIA,QAAQ,IAAK,IAAIA,QAAQ,IAAK,IAAI2W,UAClG6C,EAAcA,EAAYxZ,QAAQyZ,EAAoB3Z,GAAI4Z,EAAY,IAAW,IAGzF,OAAOF,IAEX/H,EAAQ/L,UAAUiU,mBAAqB,SAAUpX,GAC7C,MAAqD,+BAA9ClD,SAASE,cAAcgD,GAAS6D,YAE3CqL,EAAQ/L,UAAUuT,UAAY,SAAUW,GACpC,MAAO,8DAA8DV,KAAKU,IAE9EnI,EAAQ/L,UAAUqN,eAAiB,SAAU3R,EAAYsB,GACrD,GAAIuQ,IAAaC,QAAQ,EAAO5K,KAAM,gBAAiB6K,QAAS5N,KAChEA,MAAK6N,QAAQ,gBAAiBH,EAC9B,IAAIzO,GAASnF,SAASC,eAAeiG,KAAKhD,QAAQ/C,GAC9C+F,MAAKsM,UACLtM,KAAKuM,WAET,IAAI+H,GAAerV,EAAOsV,iBAI1B,IAHID,GACArX,SAAOqX,GAEN5G,EAASC,OAwCV1Q,SAAOH,EAAWkD,KAAKhD,QAAQ/C,GAAK,iBAxClB,CAGlB,IAFA,GAAIua,GAAOxa,gBAAc,OAASC,GAAI+F,KAAKhD,QAAQ/C,GAAK,oBACpDwa,EAAkBzU,KAAK0U,WAAW1U,KAAK2U,KAAM3U,KAAK4U,gBAAiBJ,EAAKva,GAAIua,EAAKva,GAAK,kBAAmB,IACtGwa,GAAmBA,EAAgBja,OAAS,GAC3Cqa,cAAyC,IAA3BJ,EAAgBja,QAC9Bga,EAAKra,YAAYsa,EAAgB,IACjCA,EAAkB,MAGlBD,EAAKra,YAAYsa,EAAgB,GAGzCxV,GAAO9E,YAAYqa,EACnB,IAAIxX,GAAUgD,KAAKsM,SAAWkI,EAAOxU,KAAKhD,QACtCb,EAAOa,EAAQ4D,uBACnBZ,MAAK2M,QAAU,EACf3M,KAAK6O,YAAc,GAAItT,GAAKY,EAAKL,MAAOK,EAAKJ,OAC7C,IAAI+Y,GAAc9U,KAAKmO,OAASnO,KAAKyP,sBAAsB5T,EAAYmE,KAAK7C,SAASxB,EAAGqE,KAAK7C,SAASvB,GAChGoE,KAAK0P,gBAAgB7T,EAAYsB,EAAU,GAAI6N,GAAgB,EAAG,GAAI,GAAIA,GAAgB,EAAG,GAOnG,KANIhL,KAAKqQ,iBAAoBrQ,KAAK6M,SAAY7M,KAAKsQ,UAI/CtQ,KAAKuQ,UAAUvT,EAAS8X,EAAYnZ,EAAGmZ,EAAYlZ,GAHnDoE,KAAKwQ,kBAAkBxQ,KAAKhD,QAAS8X,GAKrC9U,KAAKiN,eAAgB,CAErB,GAAI8H,GAAkB,WAClB,GAAIC,GAAQlY,EAAWmY,EAAajY,QAAQ/C,IAAI2G,uBAChDqU,GAAapG,YAAc,GAAItT,GAAKyZ,EAAMlZ,MAAOkZ,EAAMjZ,OACvD,IAAImZ,GAAeD,EAAavF,gBAAgB7T,EAAYsB,EAAU,GAAI6N,GAAgB,EAAG,GAAI,GAAIA,GAAgB,EAAG,GACxHiK,GAAa1E,UAAUzT,EAAWmY,EAAajY,QAAQ/C,IAAKib,EAAavZ,EAAGuZ,EAAatZ,IAGzFqZ,EAAejV,IACnB+U,GAAgBI,KAAKF,EAAcpZ,EAAYsB,GAC/CiY,uBAAqBpV,KAAKhD,QAAQ/C,GAAK,iCAAuC+F,KAAKiN,eAAelK,KAAM/C,KAAKiN,eAAehO,WAAQmI,GAAW2N,MAO3J7I,EAAQ/L,UAAUsP,sBAAwB,SAAU4F,EAAQ1Z,EAAGC,GAC3D,GAAIE,GAAQkE,KAAK6O,YAAY/S,MAAS,EAAIkE,KAAK8O,QAC3C/S,EAASiE,KAAK6O,YAAY9S,OAAU,EAAIiE,KAAKuP,QAC7CuF,EAAc,GAAIzK,GAAK1O,EAAI,EAAIqE,KAAK2M,QAAS/Q,EAAIG,EAASiE,KAAK2M,QAAS7Q,EAAOC,EAOnF,OANI+Y,GAAYlZ,EAAIyZ,EAAOzZ,IACvBkZ,EAAYlZ,GAAMkZ,EAAY/Y,OAAS,EAAIiE,KAAK2M,SAEhDmI,EAAYnZ,EAAImZ,EAAYhZ,MAAQuZ,EAAO1Z,EAAI0Z,EAAOvZ,QACtDgZ,EAAYnZ,GAAMmZ,EAAYhZ,MAAQ,EAAIkE,KAAK2M,SAE5CmI,GAEX5I,EAAQ/L,UAAUmV,mBAAqB,SAAUD,EAAQE,EAAgBnZ,EAAe+S,GACpF,GAAIvU,GAAWoF,KAAKyQ,iBAChB+E,EAAQxV,KAAK4P,WAAWjU,EACxB8Z,EAAQzV,KAAK4P,WAAWhU,EACxB8Z,EAAe1V,KAAK2V,OACpB7Z,EAAQkE,KAAK6O,YAAY/S,MAAS,EAAIkE,KAAK8O,QAC3C/S,EAASiE,KAAK6O,YAAY9S,OAAU,EAAIiE,KAAKuP,QAC7CpS,EAAW,GAAI6N,GAAgBuK,EAAe5Z,EAAG4Z,EAAe3Z,EA+BpE,OA9BiB,QAAbhB,GAAmC,WAAbA,GACtBuC,EAAW,GAAI6N,GAAgB7N,EAASxB,EAAI6Z,EAAQxV,KAAK6O,YAAY/S,MAAQ,EAAIkE,KAAK2M,QAASxP,EAASvB,EAAI6Z,EAAQzV,KAAK6O,YAAY9S,OAAU,EAAIiE,KAAK2M,QAAW3M,KAAK3D,aAAeqZ,GACvLtZ,EAAcT,EAAIwT,EAAYxT,EAAIG,EAAQ,EACzB,WAAblB,IACAuC,EAASvB,EAAI2Z,EAAe3Z,EAAI6Z,EAAQC,GAExCL,EAAO1Z,EAAI0Z,EAAOvZ,MAAQqB,EAASxB,EAAIG,GACvCqB,EAASxB,EAAK0Z,EAAOvZ,MAAQA,EAAWuZ,EAAO1Z,EAAI0Z,EAAOvZ,MAASA,EAAQ,EAAKuZ,EAAO1Z,EACvFS,EAAcT,EAAIwT,EAAYxT,EAAK0Z,EAAOvZ,MAAQA,EAAUuZ,EAAO1Z,EAAI4Z,EAAe5Z,EAAIwB,EAASxB,EAAK4Z,EAAe5Z,GAElH0Z,EAAO1Z,EAAIwB,EAASxB,IACzBwB,EAASxB,EAAI0Z,EAAO1Z,EACpBS,EAAcT,EAAIwT,EAAYxT,EAAI4Z,EAAe5Z,KAIrDwB,EAAW,GAAI6N,GAAgB7N,EAASxB,EAAI6Z,EAAQE,EAAcvY,EAASvB,EAAI6Z,EAAQzV,KAAK6O,YAAY9S,OAAS,EAAKiE,KAAa,SACnI5D,EAAcR,EAAIuT,EAAYvT,EAAIG,EAAS,EAC1B,SAAbnB,IACAuC,EAASxB,EAAI4Z,EAAe5Z,EAAI6Z,EAAQE,GAAgB5Z,EAAQkE,KAAK3D,eAErEgZ,EAAOzZ,EAAIyZ,EAAOtZ,OAASoB,EAASvB,EAAIG,GACxCoB,EAASvB,EAAKyZ,EAAOtZ,OAASA,EAAYsZ,EAAOzZ,EAAIyZ,EAAOtZ,OAAUA,EAAS,EAAKsZ,EAAOzZ,EAC3FQ,EAAcR,EAAIuT,EAAYvT,EAAKyZ,EAAOtZ,OAASA,EAAWsZ,EAAOzZ,EAAI2Z,EAAe3Z,EAAIuB,EAASvB,EAAK2Z,EAAe3Z,GAEpHyZ,EAAOzZ,EAAIuB,EAASvB,IACzBuB,EAASvB,EAAIyZ,EAAOzZ,EACpBQ,EAAcR,EAAIuT,EAAYvT,EAAI2Z,EAAe3Z,IAGlD,GAAIyO,GAAKlN,EAASxB,EAAGwB,EAASvB,EAAGE,EAAOC,IAGnDmQ,EAAQ/L,UAAUuP,gBAAkB,SAAU2F,EAAQE,EAAgBnZ,EAAe+S,GACjF,IAAK5O,oBAAkBP,KAAKyQ,kBAExB,MADkBzQ,MAAKsV,mBAAmBD,EAAQE,EAAgBnZ,EAAe+S,EAGrF,IAAIhS,GAAW,GAAI6N,GAAgBuK,EAAe5Z,EAAG4Z,EAAe3Z,GAChEE,EAAQkE,KAAK6O,YAAY/S,MAAS,EAAIkE,KAAK8O,QAC3C/S,EAASiE,KAAK6O,YAAY9S,OAAU,EAAIiE,KAAKuP,QAC7CmG,EAAe1V,KAAK2V,OACpBH,EAAQxV,KAAK4P,WAAWjU,EACxB8Z,EAAQzV,KAAK4P,WAAWhU,EACxBga,EAAUP,EAAO1Z,EACjBka,EAAUR,EAAOzZ,CAqIrB,OApIAoE,MAAK8V,aAAc,EACd9V,KAAK2P,UAmENxS,EAAW,GAAI6N,GAAgB7N,EAASxB,EAAI6Z,EAAQE,EAAcvY,EAASvB,EAAI6Z,EAAQzV,KAAK6O,YAAY9S,OAAS,EAAKiE,KAAa,SACnI5D,EAAcR,EAAIuT,EAAYvT,EAAIG,EAAS,GACtCoB,EAASxB,EAAIG,EAAQkE,KAAK3D,aAAeuZ,EAAUP,EAAOvZ,OAAWkE,KAAgB,cACtF7C,EAASxB,GAAK4Z,EAAe5Z,EAAI0Z,EAAOvZ,MAAQuZ,EAAO1Z,EAAI0Z,EAAOvZ,MAAQyZ,EAAe5Z,GACnF6Z,EAAQE,GAAgB5Z,EAAQkE,KAAK3D,eAE3Cc,EAASxB,EAAIia,IACbzY,EAASxB,GAAK4Z,EAAe5Z,EAAI,EAAI,EAAI4Z,EAAe5Z,GAAK6Z,EAAQE,GAErEvY,EAASvB,GAAKia,IACdzZ,EAAcR,GAAMia,EAAU1Y,EAASvB,EACvCuT,EAAYvT,GAAMia,EAAU1Y,EAASvB,EACrCuB,EAASvB,EAAIia,GAEb1Y,EAASvB,EAAIG,GAAU8Z,EAAUR,EAAOtZ,SACxCK,EAAcR,GAAOuB,EAASvB,EAAIG,GAAW8Z,EAAUR,EAAOtZ,QAC9DoT,EAAYvT,GAAOuB,EAASvB,EAAIG,GAAW8Z,EAAUR,EAAOtZ,QAC5DoB,EAASvB,GAAOuB,EAASvB,EAAIG,GAAW8Z,EAAUR,EAAOtZ,SAEzDK,EAAcR,EAAIoE,KAAK3D,aAAeN,EAASiE,KAAK5B,KACpDhC,EAAcR,EAAIG,EAASiE,KAAK5B,GAAK4B,KAAK3D,aAC1C8S,EAAYvT,EAAIG,GAEhBK,EAAcR,EAAIoE,KAAK3D,aAAe2D,KAAK5B,KAC3ChC,EAAcR,EAAIuT,EAAYvT,EAAIoE,KAAK5B,GAAK4B,KAAK3D,cAE5B,UAArB2D,KAAKvD,eACAU,EAASvB,EAAIQ,EAAcR,EAAKoE,KAAK4M,WAAa5M,KAAK3D,cAAkBgZ,EAAOzZ,EAAIyZ,EAAOtZ,QAAWoB,EAASvB,EAAIQ,EAAcR,GAAMoE,KAAK4M,WAAa5M,KAAK3D,gBAC/J2D,KAAK8V,aAAc,GAElBpa,EAAiByB,EAASxB,EAAGwB,EAASvB,EAAGyZ,KAAWrV,KAAK8V,cAC1D9V,KAAK2P,UAAY3P,KAAK2P,SACtBxS,EAAW,GAAI6N,GAAgBuK,EAAe5Z,EAAI6Z,EAAQxV,KAAK2M,QAAU3M,KAAK6O,YAAY/S,MAAQ,EAAGyZ,EAAe3Z,EAAI6Z,EAAQzV,KAAK6O,YAAY9S,OAAU,EAAIiE,KAAK2M,QAAW+I,EAAe1V,KAAK3D,cACnM2D,KAAKkR,QAAS,EACd/B,EAAYxT,EAAIS,EAAcT,EAAIG,EAAQ,EAC1CqT,EAAYvT,EAAIQ,EAAcR,EAAI,GAC9BuB,EAASvB,EAAIia,GAAY7V,KAAgB,cACzC7C,EAASvB,GAAK2Z,EAAe3Z,EAAI,EAAI,EAAI2Z,EAAe3Z,GAAK8Z,EAAeD,GAE5EtY,EAASvB,EAAIoE,KAAK3D,aAAeN,EAAS8Z,EAAUR,EAAOtZ,SAC3DoB,EAASvB,EAAI8C,KAAKqX,IAAIR,EAAe3Z,EAAGia,EAAUR,EAAOtZ,QAAU0Z,EAC7DzV,KAAK6O,YAAY9S,OAAU,EAAIiE,KAAK2M,QAAW+I,EAAe1V,KAAK3D,cAE7E8S,EAAYxT,EAAIG,EAAQ,EACpBqB,EAASxB,EAAIia,IACbzG,EAAYxT,GAAMia,EAAUzY,EAASxB,EACrCS,EAAcT,GAAMia,EAAUzY,EAASxB,EACvCwB,EAASxB,EAAIia,GAEbzY,EAASxB,EAAIG,EAAQuZ,EAAOvZ,MAAQ8Z,IACpCxZ,EAAcT,GAAOwB,EAASxB,EAAIG,GAAUuZ,EAAOvZ,MAAQ8Z,GAC3DzG,EAAYxT,GAAOwB,EAASxB,EAAIG,GAAUuZ,EAAOvZ,MAAQ8Z,GACzDzY,EAASxB,GAAOwB,EAASxB,EAAIG,GAAUuZ,EAAOvZ,MAAQ8Z,IAErD5V,kBAAqB5D,EAAcT,EAAIG,EAAQkE,KAAK7B,KACrDgR,EAAYxT,EAAIG,EAAQkE,KAAK7B,GAAM6B,KAAkB,aACrD5D,EAAcT,EAAIG,EAAQkE,KAAK7B,GAAM6B,KAAkB,cAEvD5D,EAAcT,EAAKqE,kBAAqBA,KAAK7B,KAC7C/B,EAAcT,EAAIwT,EAAYxT,EAAIqE,KAAK7B,GAAM6B,KAAkB,kBA7H3E7C,EAAW,GAAI6N,GAAgB7N,EAASxB,EAAI6Z,EAAQxV,KAAK6O,YAAY/S,MAAQ,EAAIkE,KAAK2M,QAASxP,EAASvB,EAAI6Z,EAAQzV,KAAK6O,YAAY9S,OAAU,EAAIiE,KAAK2M,QAAW3M,KAAK3D,aAAeqZ,GACvLtZ,EAAcT,EAAIwT,EAAYxT,EAAIG,EAAQ,GACtCqB,EAASvB,EAAIia,GAAY7V,KAAgB,cACzC7C,EAASvB,GAAK2Z,EAAe3Z,EAAI,EAAI,EAAI2Z,EAAe3Z,GAAK6Z,EAAQC,GAErEvY,EAASvB,EAAIG,EAASiE,KAAK3D,aAAewZ,EAAUR,EAAOtZ,SAC3DoB,EAASvB,EAAI8C,KAAKqX,IAAIR,EAAe3Z,EAAGia,EAAUR,EAAOtZ,QAAU0Z,EAC7DzV,KAAK6O,YAAY9S,OAAU,EAAIiE,KAAK2M,QAAW3M,KAAK3D,aAAeqZ,GAE7EvG,EAAYxT,EAAIG,EAAQ,EACpBqB,EAASxB,EAAIia,IACbxZ,EAAcT,GAAMia,EAAUzY,EAASxB,EACvCwT,EAAYxT,GAAMia,EAAUzY,EAASxB,EACrCwB,EAASxB,EAAIia,GAEbzY,EAASxB,EAAIG,EAAQ8Z,EAAUP,EAAOvZ,QACtCM,EAAcT,GAAOwB,EAASxB,EAAIG,GAAU8Z,EAAUP,EAAOvZ,OAC7DqT,EAAYxT,GAAOwB,EAASxB,EAAIG,GAAU8Z,EAAUP,EAAOvZ,OAC3DqB,EAASxB,GAAOwB,EAASxB,EAAIG,GAAU8Z,EAAUP,EAAOvZ,QAExDM,EAAcT,EAAIqE,KAAK3D,aAAeP,EAAQkE,KAAK7B,KACnD/B,EAAcT,EAAIG,EAAQkE,KAAK7B,GAAK6B,KAAK3D,aACzC8S,EAAYxT,EAAIG,EAAQkE,KAAK7B,GAAK6B,KAAK3D,cAEvCD,EAAcT,EAAIqE,KAAK3D,aAAe2D,KAAK7B,KAC3C/B,EAAcT,EAAIwT,EAAYxT,EAAIqE,KAAK7B,GAAK6B,KAAK3D,cAE5B,UAArB2D,KAAKvD,eACC4Y,EAAO1Z,EAAI0Z,EAAOvZ,OAAUqB,EAASxB,EAAIS,EAAcT,GAAMqE,KAAK4M,WAAa5M,KAAK3D,cAAiBc,EAASxB,EAAIS,EAAcT,EAAKqE,KAAK4M,WAAa5M,KAAK3D,gBAC9J2D,KAAK8V,aAAc,GAElBpa,EAAiByB,EAASxB,EAAGwB,EAASvB,EAAGyZ,KAAWrV,KAAK8V,cAC1D9V,KAAK2P,UAAY3P,KAAK2P,SACtB3P,KAAKkR,QAAS,EACd/T,EAAW,GAAI6N,GAAgBuK,EAAe5Z,EAAI+Z,EAAeF,EAAOD,EAAe3Z,EAAI6Z,EAAQzV,KAAK6O,YAAY9S,OAAS,EAAKiE,KAAa,SAC/ImP,EAAYxT,EAAIS,EAAcT,EAAI,EAClCwT,EAAYvT,EAAIQ,EAAcR,EAAIG,EAAS,GACtCoB,EAASxB,EAAIqE,KAAK3D,aAAeP,EAAQ8Z,EAAUP,EAAOvZ,OAAWkE,KAAgB,cACtF7C,EAASxB,GAAK4Z,EAAe5Z,EAAI0Z,EAAOvZ,MAAQuZ,EAAOvZ,MAAQyZ,EAAe5Z,GACxE6Z,EAAQE,GAAgB1V,KAAK3D,aAAeP,IAElDqB,EAASxB,EAAIia,IACbzY,EAASxB,GAAK4Z,EAAe5Z,EAAI,EAAI,EAAI4Z,EAAe5Z,GAAK+Z,EAAeF,GAE5ErY,EAASvB,GAAKia,IACd1G,EAAYvT,GAAMia,EAAU1Y,EAASvB,EACrCQ,EAAcR,GAAMia,EAAU1Y,EAASvB,EACvCuB,EAASvB,EAAIia,GAEb1Y,EAASvB,EAAIG,GAAUsZ,EAAOtZ,OAAS8Z,IACvCzZ,EAAcR,GAAOuB,EAASvB,EAAIG,GAAWsZ,EAAOtZ,OAAS8Z,GAC7D1G,EAAYvT,GAAOuB,EAASvB,EAAIG,GAAWsZ,EAAOtZ,OAAS8Z,GAC3D1Y,EAASvB,GAAOuB,EAASvB,EAAIG,GAAWsZ,EAAOtZ,OAAS8Z,IAEvD7V,kBAAqB5D,EAAcR,EAAIG,EAASiE,KAAK5B,KACtDhC,EAAcR,EAAIG,EAASiE,KAAK3D,aAAe2D,KAAK5B,GACpD+Q,EAAYvT,EAAIG,GAEhBK,EAAcR,EAAIoE,KAAK3D,aAAe2D,KAAK5B,KAC3ChC,EAAcR,EAAKoE,kBAAqBA,KAAK5B,GAC7C+Q,EAAYvT,EAAI,MAsEzB,GAAIyO,GAAKlN,EAASxB,EAAGwB,EAASvB,EAAGE,EAAOC,IAEnDmQ,EAAQ/L,UAAUqQ,kBAAoB,SAAUtB,EAAY/S,GACxD,GAGI6Z,GAHAnL,EAAQ7K,KACRrE,EAAI0K,WAAW6I,EAAW9V,MAAMgC,MAChCQ,EAAIyK,WAAW6I,EAAW9V,MAAM+B,IAEpC,IAAI8a,iBAAcC,QAAQhH,GACtBiH,SAAUnW,KAAKmW,SACfC,SAAU,SAAUC,GAChBL,EAAcK,EAAKC,UAAYD,EAAKF,SACpCjH,EAAW9V,MAAMmd,UAAY,KACF,UAAtB1L,EAAMpO,aAA2BoO,EAAMsD,SAAYtD,EAAMuD,WAC1Dc,EAAW9V,MAAMod,WAAa,iBAC9BtH,EAAW9V,MAAMsG,UAAY,cAAgB/D,EAAIqa,GAAc7Z,EAAKR,EAAIA,IAAM,OAASC,EAAIoa,GAAc7Z,EAAKP,EAAIA,IAAM,QAGxHsT,EAAW9V,MAAMgC,KAAQO,EAAIqa,GAAc7Z,EAAKR,EAAIA,GAAM,KAC1DuT,EAAW9V,MAAM+B,IAAOS,EAAIoa,GAAc7Z,EAAKP,EAAIA,GAAM,OAGjEsL,IAAK,SAAUuP,GACX5L,EAAM0F,UAAUrB,EAAY/S,EAAKR,EAAGQ,EAAKP,GACzCiP,EAAMgD,QAAQ,qBAAuBD,QAAS/C,QAI1DqB,EAAQ/L,UAAUoQ,UAAY,SAAUrB,EAAYvT,EAAGC,GACzB,UAArBoE,KAAKvD,cAA2BuD,KAAKmO,QAAWnO,KAAKsQ,WAAetQ,KAAKoO,WAI1Ec,EAAW9V,MAAMgC,KAAOO,EAAI,KAC5BuT,EAAW9V,MAAM+B,IAAMS,EAAI,MAJ3BsT,EAAW9V,MAAMsG,UAAY,aAAe/D,EAAI,MAAQC,EAAI,OAOpEsQ,EAAQ/L,UAAUoN,iBAAmB,WACjC,GAAIvN,KAAKsN,SACL,IACQxT,SAAS4c,iBAAiB1W,KAAKsN,UAAU9S,OACzCwF,KAAK0U,WAAaiC,UAAiB7c,SAAS8c,cAAc5W,KAAKsN,UAAU3S,UAAUyW,QAGnFpR,KAAK0U,WAAaiC,UAAiB3W,KAAKsN,UAGhD,MAAOuJ,GACH7W,KAAK0U,WAAaiC,UAAiB3W,KAAKsN,YAKpDpB,EAAQ/L,UAAU2W,QAAU,WACxB,GAAIjM,GAAQ7K,KACR+W,EAAqDja,EAAnCkD,KAAKsM,WAAatM,KAAKsN,SAAuBtN,KAAKhD,QAAQ/C,GAAK,OACvE+F,KAAKhD,QAAQ/C,IACxBiV,EAAapS,EAAWkD,KAAKhD,QAAQ/C,GACzC,IAAI8c,EAAgB,CAChB,GAAIC,GAAiBD,EAAeE,UAQpC,IAPID,EAAeE,UAAYC,KAAKC,eAChCJ,EAAiBD,EAAexC,mBAEhCvU,KAAKsM,WAAatM,KAAKsN,WACvB0J,EAAiBld,SAASC,eAAeiG,KAAKhD,QAAQ/C,GAAK,UAAYH,SAASC,eAAeiG,KAAKhD,QAAQ/C,GAAK,UAC7G+c,IAEHA,EACD,MAAO,KAEX,IAAIK,GAAYhR,WAAW2Q,EAAenF,aAAa,WACvDwF,GAAa9W,oBAAkB8W,GAAyB,EAAZA,EAC5C,GAAIpB,iBAAcC,QAAQc,GACtBb,SAAU,IACVC,SAAU,SAAUC,GAEhBxL,EAAMyM,kBAAkBN,EAAgBK,EAAYhB,EAAKC,UAAYD,EAAKF,WAE9EjP,IAAK,WACD2D,EAAMwC,WAAY,EAClBxC,EAAM0M,aAAaP,GACnB9H,EAAW9V,MAAMod,WAAa,QAK9CtK,EAAQ/L,UAAUmX,kBAAoB,SAAUE,EAAc7X,EAAS2W,GACnEkB,EAAape,MAAMmd,UAAY,GAC/BiB,EAAa1Z,aAAa,WAAY6B,EAAU2W,GAAWzV,aAK/DqL,EAAQ/L,UAAUoX,aAAe,SAAUC,GACvCA,EAAa1Z,aAAa,UAAW,KACjCkC,KAAKsN,WACLkK,EAAape,MAAMqe,QAAU,QAEjCzX,KAAK6N,QAAQ,qBAAuBD,QAAS5N,QAOjDkM,EAAQ/L,UAAUuX,eAAiB,WAC/B,GAAIC,KACJ,OAAO3X,MAAK4X,aAAaD,IAO7BzL,EAAQ/L,UAAU0X,cAAgB,WAC9B,MAAO,WAOX3L,EAAQ/L,UAAU2X,QAAU,WACxBlN,EAAOzK,UAAU2X,QAAQhN,KAAK9K,MAC9BA,KAAKhD,QAAQ+a,UAAU9a,OAAO,cAQlCiP,EAAQ/L,UAAU6X,kBAAoB,SAAUC,EAASC,GACjDlY,KAAKiN,gBACLC,sBAAoBlN,KAAKhD,QAAQ/C,GAAK,kCAE1C+F,KAAK6M,SAAU,EACf7M,KAAKoN,UAETnC,GACIY,YAAS,IACVK,EAAQ/L,UAAW,aAAU,IAChC8K,GACIY,YAAS,IACVK,EAAQ/L,UAAW,aAAU,IAChC8K,GACIY,YAAS,IACVK,EAAQ/L,UAAW,gBAAa,IACnC8K,GACIY,YAAS,IACVK,EAAQ/L,UAAW,mBAAgB,IACtC8K,GACIY,WAAS,OACVK,EAAQ/L,UAAW,WAAQ,IAC9B8K,GACIY,WAAS,KACVK,EAAQ/L,UAAW,aAAU,IAChC8K,GACIY,WAAS,MACVK,EAAQ/L,UAAW,cAAW,IACjC8K,GACIkN,WAAUrd,KAAM,OAAQC,WAAY,SAAUiE,MAAO,KAAMhE,UAAW,SAAUC,WAAY,YAAc0Q,IAC3GO,EAAQ/L,UAAW,gBAAa,IACnC8K,GACIY,WAAS,OACVK,EAAQ/L,UAAW,eAAY,IAClC8K,GACIY,YAAS,IACVK,EAAQ/L,UAAW,sBAAmB,IACzC8K,GACIY,WAAS,MACVK,EAAQ/L,UAAW,eAAY,IAClC8K,GACIY,YAAS,IACVK,EAAQ/L,UAAW,eAAY,IAClC8K,GACIY,YAAS,IACVK,EAAQ/L,UAAW,iBAAc,IACpC8K,GACIkN,WAAUnZ,MAAO,UAAWlD,MAAO,IAAOiQ,IAC3CG,EAAQ/L,UAAW,aAAU,IAChC8K,GACIY,gBACDK,EAAQ/L,UAAW,cAAW,IACjC8K,GACIY,WAAS,KACVK,EAAQ/L,UAAW,iBAAc,IACpC8K,GACIkN,WAAUxc,EAAG,EAAGC,EAAG,GAAKqQ,IACzBC,EAAQ/L,UAAW,iBAAc,IACpC8K,GACIY,gBACDK,EAAQ/L,UAAW,cAAW,IACjC8K,GACIY,gBACDK,EAAQ/L,UAAW,aAAU,IAChC8K,GACIkN,WAAUxc,EAAG,EAAGC,EAAG,GAAKqQ,IACzBC,EAAQ/L,UAAW,eAAY,IAClC8K,GACIY,WAAS,IACVK,EAAQ/L,UAAW,aAAU,IAChC8K,GACIY,WAAS,IACVK,EAAQ/L,UAAW,SAAM,IAC5B8K,GACIY,WAAS,IACVK,EAAQ/L,UAAW,SAAM,IAC5B8K,GACIY,WAAS,IACVK,EAAQ/L,UAAW,cAAW,IACjC8K,GACIY,WAAS,IACVK,EAAQ/L,UAAW,cAAW,IACjC8K,GACIY,WAAS,IACVK,EAAQ/L,UAAW,mBAAgB,IACtC8K,GACIY,WAAS,OACVK,EAAQ/L,UAAW,WAAQ,IAC9B8K,GACIY,WAAS,aACVK,EAAQ/L,UAAW,YAAS,IAC/B8K,GACIkN,WAAUxc,EAAG,EAAGC,EAAG,EAAGE,MAAO,EAAGC,OAAQ,GAAKiQ,IAC9CE,EAAQ/L,UAAW,iBAAc,IACpC8K,GACIY,WAAS,OACVK,EAAQ/L,UAAW,oBAAiB,IACvC8K,GACIY,cACDK,EAAQ/L,UAAW,qBAAkB,IACxC8K,GACIY,YAAS,IACVK,EAAQ/L,UAAW,eAAY,IAClC8K,GACIY,YAAS,IACVK,EAAQ/L,UAAW,iBAAc,IACpC8K,GACIY,WAAS,OACVK,EAAQ/L,UAAW,uBAAoB,IAC1C8K,GACIY,WAAS,OACVK,EAAQ/L,UAAW,sBAAmB,IACzC8K,GACIY,WAAS,KACVK,EAAQ/L,UAAW,kBAAe,IACrC8K,GACImN,WACDlM,EAAQ/L,UAAW,oBAAiB,IACvC8K,GACImN,WACDlM,EAAQ/L,UAAW,aAAU,IAChC8K,GACImN,WACDlM,EAAQ/L,UAAW,wBAAqB,IAC3C8K,GACIY,YAAS,IACVK,EAAQ/L,UAAW,gBAAa,IACnC+L,EAAUjB,GACNoN,yBACDnM,IAELoM"}