{"version":3,"file":"ng-gd.mjs","sources":["../../../projects/ng-gd/src/class/shape-object.ts","../../../projects/ng-gd/src/trigonometrics.ts","../../../projects/ng-gd/src/class/label-object.ts","../../../projects/ng-gd/src/class/node-object.ts","../../../projects/ng-gd/src/class/connection-object.ts","../../../projects/ng-gd/src/class/rectangleObject.ts","../../../projects/ng-gd/src/class/image-object.ts","../../../projects/ng-gd/src/class/circleObject.ts","../../../projects/ng-gd/src/class/triangleObject.ts","../../../projects/ng-gd/src/class/multiplesSides.ts","../../../projects/ng-gd/src/class/arcObject.ts","../../../projects/ng-gd/src/class/lineChartObject.ts","../../../projects/ng-gd/src/class/Candlestick.ts","../../../projects/ng-gd/src/class/collateral.ts","../../../projects/ng-gd/src/lib/ng-gd.service.ts","../../../projects/ng-gd/src/lib/ng-gd.component.ts","../../../projects/ng-gd/src/lib/ng-gd.module.ts","../../../projects/ng-gd/src/class/document-object.ts","../../../projects/ng-gd/src/class/lineObject.ts","../../../projects/ng-gd/src/public-api.ts","../../../projects/ng-gd/src/ng-gd.ts"],"sourcesContent":["import { ElementRef } from \"@angular/core\";\r\nimport { CommonProperties } from \"../interfaces/common-properties\";\r\nimport { Point } from \"../interfaces/point\";\r\nexport abstract class ShapeObject implements CommonProperties {\r\n  private static maxId: number = -1;\r\n  private static maxZOrder: number = 0;\r\n  private static bgColor:string| CanvasGradient | CanvasPattern = \"#ffffff\";\r\n  private static fgColor:string | CanvasGradient | CanvasPattern = \"#000000\";\r\n  public static width = 0;\r\n  public static height = 0;\r\n  public static lastMove:Point={x:0,y:0};\r\n  public static shadowColor:string=\"#ffffff\";\r\n  id: number = 0;\r\n  x = 0;\r\n  y = 0;\r\n  name = '';\r\n  zOrder = 0;\r\n  visible = true;\r\n  dataBaseId=\"\";\r\n  type = '';\r\n  shadowBlur=20;\r\n  shadowOffsetX=20;\r\n  shadowOffsetY=20;\r\n  shadow:boolean=false;\r\n  color: string| CanvasGradient | CanvasPattern=\"\";\r\n  constructor() {\r\n    ShapeObject.maxId++;\r\n    this.id = ShapeObject.maxId;\r\n  }\r\n  abstract drawShape(ctx: CanvasRenderingContext2D): void;\r\n  abstract inverseShape(ctx: CanvasRenderingContext2D): void;\r\n  abstract inPoint(x: number, y: number): boolean;\r\n  abstract move(x:number,y:number):void ;\r\n  abstract moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent):void;\r\n  abstract moveTouch(canvas:ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent):void;\r\n  moveAngle(angle: number, dist: number) {\r\n    this.x = this.x + Math.cos(angle) * dist;\r\n    this.y = this.y + Math.sin(angle) * dist;\r\n  }\r\n\r\n  toFront() {\r\n    ShapeObject.maxZOrder++;\r\n    this.zOrder = ShapeObject.maxZOrder;\r\n  }\r\n\r\n  toTop() {\r\n    this.zOrder = ShapeObject.maxZOrder;\r\n  }\r\n\r\n  toBack() {\r\n    this.zOrder = 0\r\n  }\r\n\r\n  nextZOrder() {\r\n    if (this.zOrder < ShapeObject.maxZOrder) {\r\n      this.zOrder++;\r\n    }\r\n  }\r\n\r\n  backZOrder() {\r\n    if (this.zOrder > 0) {\r\n      this.zOrder--;\r\n    }\r\n  }\r\n\r\n  set Visible(visible: boolean) {\r\n    this.visible = visible;\r\n  }\r\n\r\n  get Visible() {\r\n    return this.visible;\r\n  }\r\n\r\n  set Color(color: string| CanvasGradient | CanvasPattern) {\r\n    this.color = color;\r\n  }\r\n\r\n  get Color() {\r\n    return this.color;\r\n  }\r\n\r\n  get Name() {\r\n    return this.name;\r\n  }\r\n\r\n  set Name(name: string) {\r\n    this.name = name;\r\n  }\r\n\r\n  get BgColor() {\r\n    return ShapeObject.bgColor;\r\n  }\r\n\r\n  set BgColor(color: string| CanvasGradient | CanvasPattern) {\r\n    ShapeObject.bgColor = color;\r\n  }\r\n\r\n  get FgColor() {\r\n    return ShapeObject.fgColor;\r\n  }\r\n\r\n  set FgColor(color: string| CanvasGradient | CanvasPattern) {\r\n    ShapeObject.fgColor = color;\r\n  }\r\n\r\n  get shadowColor() {\r\n    return ShapeObject.shadowColor;\r\n  }\r\n\r\n  set shadowColor(color: string) {\r\n    ShapeObject.shadowColor = color;\r\n  }\r\n\r\n  resetMouse(){\r\n    ShapeObject.lastMove={x:0,y:0};\r\n  }\r\n  \r\n  static resetIds() {\r\n    ShapeObject.maxId = -1;\r\n    ShapeObject.maxZOrder = 0;\r\n  }\r\n}\r\n","import { ElementRef } from \"@angular/core\";\r\nimport { ShapeObject } from \"./class/shape-object\";\r\nimport { Point } from \"./interfaces/point\";\r\nimport { Rectangle } from \"./interfaces/rectangle\";\r\n\r\nexport function offSet(canvas:ElementRef,event:TouchEvent):{offSetX:number,offSetY:number}{\r\n  const rect = canvas.nativeElement.getBoundingClientRect(); // Obtén la posición del canvas en la ventana\r\n  const touch=event.touches.item(0)!;\r\n  const offsetX = touch.clientX - rect.left;\r\n  const offsetY = touch.clientY - rect.top;\r\n  return {offSetX:offsetX,offSetY:offsetY}\r\n}\r\n\r\nexport function distance(x: number, y: number, xx: number, yy: number): number {\r\n  return Math.pow(Math.pow(x - xx, 2) + Math.pow(y - yy, 2), 1 / 2);\r\n}\r\n\r\nexport function rectangle(x: number, y: number, height: number, width: number, angle: number): Rectangle {\r\n  const point = { x: x, y: y } as Point;\r\n  const angleInGrades = toDegrees(angle)\r\n  const widthOne = move(point.x, point.y, toRadians(angleInGrades), width);\r\n  const heightOne = move(widthOne.x, widthOne.y, toRadians(angleInGrades - 90), height);\r\n  const widthTwo = move(heightOne.x, heightOne.y, toRadians(angleInGrades - 180), width);\r\n  return { first: point, second: widthOne, third: heightOne, forth: widthTwo } \r\n}\r\n\r\nexport function drawRectangle(ctx: CanvasRenderingContext2D,rect:Rectangle) {\r\n    ctx.beginPath();\r\n    ctx.moveTo(rect.first.x,rect.first.y);\r\n    ctx.lineTo(rect.second.x,rect.second.y);\r\n    ctx.lineTo(rect.third.x,rect.third.y);\r\n    ctx.lineTo(rect.forth.x,rect.forth.y);\r\n    ctx.closePath();\r\n    ctx.stroke();\r\n    ctx.fill();\r\n}\r\n\r\nexport function move(x: number, y: number, angle: number, distance: number): Point {\r\n  return { x: x + Math.cos(angle) * distance, y: y + Math.sin(angle) * distance }\r\n}\r\n\r\nexport function toRadians(grades: number): number {\r\n  return grades / 180 * Math.PI;\r\n}\r\n\r\nexport function toDegrees(radian: number): number {\r\n  return radian * 180 / Math.PI;\r\n}\r\n\r\nexport function hexColor(color: string): string {\r\n  return '#' + color;\r\n}\r\n\r\nexport function fillCircle(ctx: CanvasRenderingContext2D, x: number, y: number, radius: number, color: string | CanvasGradient | CanvasPattern) {\r\n  let path: Path2D = new Path2D();\r\n  ctx.fillStyle = color;\r\n  ctx.strokeStyle = color;\r\n  ctx.beginPath();\r\n  path.arc(x, y, radius, 0, 2 * Math.PI);\r\n  path.closePath();\r\n  ctx.fill(path)\r\n  ctx.fillStyle = 'black';\r\n  ctx.strokeStyle = 'black';\r\n}\r\n\r\nexport function getZoom(ctx: CanvasRenderingContext2D): DOMMatrix {\r\n  return ctx.getTransform();\r\n}\r\n\r\nexport function scaleCanvas(ctx: CanvasRenderingContext2D, X: number, Y: number, zoom: number) {\r\n  ctx.translate(X, Y);\r\n  ctx.scale(zoom, zoom);\r\n  ctx.translate(-X, -Y);\r\n}\r\n\r\nexport function angle(x: number, y: number, xx: number, yy: number): number {\r\n  const deltaY = yy - y;\r\n  const deltaX = xx - x;\r\n  const angleInRadians = Math.atan2(deltaY, deltaX);\r\n  return angleInRadians\r\n}\r\n\r\nexport function getNewParallelPoint(x: number, y: number, xx: number, yy: number, distanceToCentre: number, distanceParallel: number): Point {\r\n  const anglePara = angle(x, y, xx, yy);\r\n  const middlePoint = move(x, y, anglePara, distanceToCentre);\r\n  return move(middlePoint.x, middlePoint.y, anglePara + Math.PI / 3, distanceParallel);\r\n}\r\n\r\nexport function rotateText(ctx: CanvasRenderingContext2D, text: string, x: number, y: number, angle: number, color: string | CanvasGradient | CanvasPattern, fontSize: number) {\r\n  ctx.save();\r\n  ctx.translate(x, y);\r\n  ctx.rotate(angle);\r\n  ctx.fillStyle = color;\r\n  ctx.strokeStyle = color;\r\n  ctx.font = Math.abs(fontSize).toString() + \"px Arial\"\r\n  ctx.fillText(text, 0, 0);\r\n  ctx.restore();\r\n}\r\n\r\nexport function isPointInsideRectangle(point: Point, rectVertex1: Point, rectVertex2: Point, rectVertex3: Point, rectVertex4: Point): boolean {\r\n  const vec1 = { x: rectVertex2.x - rectVertex1.x, y: rectVertex2.y - rectVertex1.y };\r\n  const vec2 = { x: rectVertex3.x - rectVertex2.x, y: rectVertex3.y - rectVertex2.y };\r\n  const vec3 = { x: rectVertex4.x - rectVertex3.x, y: rectVertex4.y - rectVertex3.y };\r\n  const vec4 = { x: rectVertex1.x - rectVertex4.x, y: rectVertex1.y - rectVertex4.y };\r\n\r\n  const vecP1 = { x: point.x - rectVertex1.x, y: point.y - rectVertex1.y };\r\n  const vecP2 = { x: point.x - rectVertex2.x, y: point.y - rectVertex2.y };\r\n  const vecP3 = { x: point.x - rectVertex3.x, y: point.y - rectVertex3.y };\r\n  const vecP4 = { x: point.x - rectVertex4.x, y: point.y - rectVertex4.y };\r\n\r\n  const isLeft1 = (vec1.x * vecP1.y - vec1.y * vecP1.x) >= 0;\r\n  const isLeft2 = (vec2.x * vecP2.y - vec2.y * vecP2.x) >= 0;\r\n  const isLeft3 = (vec3.x * vecP3.y - vec3.y * vecP3.x) >= 0;\r\n  const isLeft4 = (vec4.x * vecP4.y - vec4.y * vecP4.x) >= 0;\r\n\r\n  return isLeft1 === isLeft2 && isLeft2 === isLeft3 && isLeft3 === isLeft4;\r\n}\r\n\r\nexport function isPointInsideTrapezoid(A: Point, B: Point, C: Point, D: Point, point: Point): boolean {\r\n  const mAB = (B.y - A.y) / (B.x - A.x);\r\n  const mCD = (D.y - C.y) / (D.x - C.x);\r\n\r\n  const yAB = mAB * (point.x - A.x) + A.y;\r\n  const yCD = mCD * (point.x - C.x) + C.y;\r\n\r\n  if (\r\n    point.y >= yAB &&\r\n    point.y <= yCD &&\r\n    point.x >= A.x &&\r\n    point.x <= B.x\r\n  ) {\r\n    return true;\r\n  } else {\r\n    return false;\r\n  }\r\n}\r\n\r\nexport function isPointInTriangle(p1: Point, p2: Point, p3: Point, target: Point): boolean {\r\n  const v1x = p3.x - p1.x;\r\n  const v1y = p3.y - p1.y;\r\n  const v2x = p2.x - p1.x;\r\n  const v2y = p2.y - p1.y;\r\n  const v3x = target.x - p1.x;\r\n  const v3y = target.y - p1.y;\r\n\r\n  const dot11 = v1x * v1x + v1y * v1y;\r\n  const dot12 = v1x * v2x + v1y * v2y;\r\n  const dot13 = v1x * v3x + v1y * v3y;\r\n  const dot22 = v2x * v2x + v2y * v2y;\r\n  const dot23 = v2x * v3x + v2y * v3y;\r\n\r\n  const invDenom = 1 / (dot11 * dot22 - dot12 * dot12);\r\n  const u = (dot22 * dot13 - dot12 * dot23) * invDenom;\r\n  const v = (dot11 * dot23 - dot12 * dot13) * invDenom;\r\n  \r\n  return u >= 0 && v >= 0 && (u + v) < 1;\r\n}\r\n\r\n\r\n\r\n/**\r\n * \r\n * @param x \r\n * @param y \r\n * @returns \r\n */\r\nexport function getTransformedPoint(ctx: CanvasRenderingContext2D, x: number, y: number): Point {\r\n  const transform = ctx.getTransform();\r\n  const invertedScaleX = 1 / transform.a;\r\n  const invertedScaleY = 1 / transform.d;\r\n  const transformedX = invertedScaleX * x - invertedScaleX * transform.e;\r\n  const transformedY = invertedScaleY * y - invertedScaleY * transform.f;\r\n  return { x: transformedX, y: transformedY };\r\n}\r\n\r\nexport function moveLineToPoint(lineStart: Point, lineEnd: Point, mousePosition: Point): { newStart: Point, newEnd: Point } {\r\n  const lineVector = {\r\n    x: lineEnd.x - lineStart.x,\r\n    y: lineEnd.y - lineStart.y,\r\n  };\r\n  const mouseVector = {\r\n    x: mousePosition.x - lineStart.x,\r\n    y: mousePosition.y - lineStart.y,\r\n  };\r\n  const lineMagnitude = Math.sqrt(lineVector.x ** 2 + lineVector.y ** 2);\r\n  const dotProduct = lineVector.x * mouseVector.x + lineVector.y * mouseVector.y;\r\n  const projection = {\r\n    x: (dotProduct / (lineMagnitude ** 2)) * lineVector.x,\r\n    y: (dotProduct / (lineMagnitude ** 2)) * lineVector.y,\r\n  };\r\n  const newStart = {\r\n    x: lineStart.x + projection.x,\r\n    y: lineStart.y + projection.y,\r\n  };\r\n  const newEnd = {\r\n    x: lineEnd.x + projection.x,\r\n    y: lineEnd.y + projection.y,\r\n  };\r\n  return { newStart, newEnd };\r\n}\r\n\r\n\r\nexport function translateLineToNewPosition(pointA: Point, pointB: Point, newCenter: Point): { newPointA: Point, newPointB: Point } {\r\n  const lineVector = {\r\n    x: pointB.x - pointA.x,\r\n    y: pointB.y - pointA.y,\r\n  };\r\n  const translationVector = {\r\n    x: newCenter.x - ((pointA.x + pointB.x) / 2),\r\n    y: newCenter.y - ((pointA.y + pointB.y) / 2),\r\n  };\r\n  const newPointA = {\r\n    x: pointA.x + translationVector.x,\r\n    y: pointA.y + translationVector.y,\r\n  };\r\n  const newPointB = {\r\n    x: pointB.x + translationVector.x,\r\n    y: pointB.y + translationVector.y,\r\n  };\r\n\r\n  return { newPointA, newPointB };\r\n}\r\n\r\nexport function calculateOppositeCathetus(angle: number, hypotenuse: number): number {\r\n  const oppositeCathetus = hypotenuse * Math.sin(angle);\r\n  return oppositeCathetus;\r\n}\r\n\r\nexport function calculateAdjacentCathetus(angle: number, hypotenuse: number): number {\r\n  const adjacentCathetus = hypotenuse * Math.cos(angle);\r\n  return adjacentCathetus;\r\n}\r\n\r\nexport function calculateHypotenuse(a: number, b: number): number {\r\n  const squareSum = Math.pow(a, 2) + Math.pow(b, 2);\r\n  const hypotenuse = Math.sqrt(squareSum);\r\n  return hypotenuse;\r\n}\r\n\r\nexport function convertArray(arr: ShapeObject[]): number[] {\r\n  const values = arr.map((obj) => obj.zOrder);\r\n  const sortedArr = [...values].sort((a, b) => a - b);\r\n  const uniqueValues = Array.from(new Set(sortedArr));\r\n\r\n  const map = new Map<number, number>();\r\n  let count = 0;\r\n\r\n  for (const num of uniqueValues) {\r\n    map.set(num, count);\r\n    count++;\r\n  }\r\n\r\n  const result = values.map((num) => map.get(num) || 0);\r\n\r\n  return result;\r\n}\r\n\r\nexport function map(value: number, start1: number, stop1: number, start2: number, stop2: number): number {\r\n  return start2 + (stop2 - start2) * ((value - start1) / (stop1 - start1));\r\n}","import { ShapeObject } from \"./shape-object\";\r\nimport { toRadians, isPointInsideRectangle, rectangle, getTransformedPoint, distance, angle, move ,offSet} from \"../trigonometrics\";\r\nimport { Rectangle } from \"../interfaces/rectangle\";\r\nimport { Point } from \"../interfaces/point\";\r\nimport { ElementRef } from \"@angular/core\";\r\n\r\nexport class LabelObject extends ShapeObject {\r\n\r\n    angle: number = 0;\r\n    fontSize = 16;\r\n    text: string = \"select label text\";\r\n    sizeText = 0;\r\n    public font=\"Arial\";\r\n    constructor(x: number, y: number, text: string, fontSize?: number, angle?: number,shadow?:boolean) {\r\n        super()\r\n        this.color=this.FgColor;\r\n        this.x = x;\r\n        this.y = y;\r\n        this.type = 'label';\r\n        this.text = text;\r\n        if (fontSize) {\r\n            this.fontSize = fontSize;\r\n        }\r\n        if (angle) {\r\n            this.setAngleInGrades(angle);\r\n        }\r\n        if (shadow) {\r\n            this.shadow=shadow;\r\n        }\r\n    }\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent) {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        if (ShapeObject.lastMove.x!==0 && ShapeObject.lastMove.y!==0){\r\n            const deltaX=point.x-ShapeObject.lastMove.x;\r\n            const deltaY=point.y-ShapeObject.lastMove.y;\r\n            this.x+=deltaX;\r\n            this.y+=deltaY;\r\n        }\r\n        ShapeObject.lastMove=point;\r\n    }\r\n\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        const varOffSet=offSet(canvas,event);\r\n        const point = getTransformedPoint(ctx, varOffSet.offSetX, varOffSet.offSetY);\r\n        if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n            const deltaX = point.x - ShapeObject.lastMove.x;\r\n            const deltaY = point.y - ShapeObject.lastMove.y;\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n        }\r\n        ShapeObject.lastMove = point;\r\n    }\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n        ctx.save();\r\n        ctx.translate(this.x, this.y);\r\n        ctx.rotate(this.angle);\r\n        ctx.fillStyle = this.BgColor;\r\n        ctx.font = Math.abs(this.fontSize).toString() + \"px \"+this.font\r\n        this.sizeText = ctx.measureText(this.text).actualBoundingBoxRight+ctx.measureText(this.text).actualBoundingBoxLeft;\r\n        ctx.fillText(this.text, 0, 0);\r\n        ctx.restore();\r\n    }\r\n\r\n    override move(x: number, y: number): void {\r\n        this.x=x;\r\n        this.y=y;\r\n    }\r\n    \r\n    override inPoint(x: number, y: number): boolean {\r\n        const rect = rectangle(this.x,this.y, this.fontSize, this.sizeText, this.angle);\r\n        return isPointInsideRectangle({ x: x, y: y }, rect.first, rect.second, rect.third, rect.forth);\r\n    }\r\n\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.visible===true){\r\n            if (this.shadow===true){\r\n                ctx.shadowColor = ShapeObject.shadowColor;\r\n                ctx.shadowBlur = 6;\r\n                ctx.shadowOffsetX = 6;\r\n                ctx.shadowOffsetY = 6;\r\n            } else {\r\n                ctx.shadowBlur = 0;\r\n                ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n                ctx.shadowOffsetX = 0;\r\n                ctx.shadowOffsetY = 0;\r\n            }\r\n            ctx.save();\r\n            ctx.translate(this.x, this.y);\r\n            ctx.rotate(this.angle);\r\n            ctx.fillStyle = this.color;\r\n            ctx.font = Math.abs(this.fontSize).toString() + \"px \"+this.font\r\n            this.sizeText = ctx.measureText(this.text).actualBoundingBoxRight+ctx.measureText(this.text).actualBoundingBoxLeft;\r\n            ctx.font\r\n            ctx.fillText(this.text, 0, 0);\r\n            ctx.restore();\r\n        }\r\n    }\r\n\r\n    getSizeText(ctx:CanvasRenderingContext2D):number{\r\n        this.sizeText = ctx.measureText(this.text).actualBoundingBoxRight+ctx.measureText(this.text).actualBoundingBoxLeft;\r\n        return this.sizeText;\r\n    }\r\n\r\n    setAngleInGrades(grades: number) {\r\n        this.angle = toRadians(grades);\r\n    }\r\n\r\n    set Font(font:string) {\r\n        this.font = font;\r\n      }\r\n    \r\n    get Font(): string {\r\n        return this.font;\r\n      }\r\n    \r\n}\r\n","import { ShapeObject } from \"./shape-object\";\r\nimport { LabelObject } from \"../class/label-object\";\r\nimport { distance, toRadians, toDegrees, move, fillCircle, getTransformedPoint, angle, offSet } from \"../trigonometrics\";\r\nimport { ElementRef } from \"@angular/core\";\r\nexport class NodeObject extends ShapeObject {\r\n    description!: string;\r\n    net: boolean = false;\r\n    angleLabel: number = 0;\r\n    distanceLabel: number = 10;\r\n    radius: number = 40;\r\n    shape = 0;\r\n    labelObject = new LabelObject(0, 0, \"\");\r\n    constructor(x: number, y: number, name: string, radius: number, description?: string, net?: boolean, angleLabel?: number, distanceLabel?: number, shadow?: boolean, color?: string | CanvasGradient | CanvasPattern) {\r\n        super();\r\n        this.x = x;\r\n        this.y = y;\r\n        this.name = name;\r\n        this.type = 'node';\r\n        this.dataBaseId = \"\";\r\n        this.radius = radius;\r\n        this.labelObject.x = x;\r\n        this.labelObject.y = y;\r\n        this.labelObject.text = name;\r\n        if (description) {\r\n            this.description = description;\r\n        }\r\n        if (net) {\r\n            this.net = net;\r\n        }\r\n        if (angleLabel) {\r\n            this.angleLabel = angleLabel;\r\n        }\r\n        if (distanceLabel) {\r\n            this.distanceLabel = distanceLabel;\r\n        }\r\n        if (shadow) {\r\n            this.shadow = shadow;\r\n        }\r\n        if (color) {\r\n            this.color = color;\r\n        }\r\n    }\r\n\r\n    moveMouseText(ctx: CanvasRenderingContext2D, event: MouseEvent) {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        this.labelObject.moveMouse(ctx, event)\r\n        this.distanceLabel = distance(this.x, this.y, this.labelObject.x, this.labelObject.y,);\r\n        this.angleLabel = toDegrees(angle(this.x, this.y, this.labelObject.x, this.labelObject.y));\r\n        ShapeObject.lastMove = point;\r\n    }\r\n\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent) {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n            const deltaX = point.x - ShapeObject.lastMove.x;\r\n            const deltaY = point.y - ShapeObject.lastMove.y;\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n        }\r\n        ShapeObject.lastMove = point;\r\n    }\r\n\r\n    moveTouchText(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent) {\r\n        const varOffSet = offSet(canvas, event);\r\n        const point = getTransformedPoint(ctx, varOffSet.offSetX, varOffSet.offSetY);\r\n        this.labelObject.moveTouch(canvas, ctx, event)\r\n        this.distanceLabel = distance(this.x, this.y, this.labelObject.x, this.labelObject.y,);\r\n        this.angleLabel = toDegrees(angle(this.x, this.y, this.labelObject.x, this.labelObject.y));\r\n        ShapeObject.lastMove = point;\r\n    }\r\n\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        const varOffSet = offSet(canvas, event);\r\n        const point = getTransformedPoint(ctx, varOffSet.offSetX, varOffSet.offSetY);\r\n        if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n            const deltaX = point.x - ShapeObject.lastMove.x;\r\n            const deltaY = point.y - ShapeObject.lastMove.y;\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n        }\r\n        ShapeObject.lastMove = point;\r\n    }\r\n\r\n    override move(x: number, y: number) {\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n        const movePos = move(this.x, this.y, toRadians(this.angleLabel), this.distanceLabel);\r\n        ctx.font = \"16px Arial\"\r\n        ctx.fillStyle = this.BgColor;\r\n        ctx.strokeStyle = this.BgColor;\r\n        ctx.fillText(this.name, movePos.x, movePos.y);\r\n        fillCircle(ctx, this.x, this.y, this.radius, this.BgColor);\r\n        ctx.lineWidth = 1\r\n    }\r\n\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.visible === true) {\r\n            const movePos = move(this.x, this.y, toRadians(this.angleLabel), this.distanceLabel);\r\n            ctx.font = \"16px Arial\"\r\n            ctx.fillStyle = this.FgColor;\r\n            ctx.strokeStyle = this.FgColor;\r\n            if (this.shadow === true) {\r\n                ctx.shadowColor = ShapeObject.shadowColor;\r\n                ctx.shadowBlur = 6;\r\n                ctx.shadowOffsetX = 6;\r\n                ctx.shadowOffsetY = 6;\r\n            } else {\r\n                ctx.shadowBlur = 0;\r\n                ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n                ctx.shadowOffsetX = 0;\r\n                ctx.shadowOffsetY = 0;\r\n            }\r\n            fillCircle(ctx, this.x, this.y, this.radius, this.color);\r\n            this.labelObject.x = movePos.x;\r\n            this.labelObject.y = movePos.y;\r\n            this.labelObject.drawShape(ctx);\r\n            ctx.lineWidth = 1\r\n            if (this.net === true) {\r\n                ctx.fillStyle = this.Color;\r\n                ctx.strokeStyle = this.Color;\r\n                ctx.lineWidth = 1;\r\n                ctx.beginPath();\r\n                ctx.arc(this.x, this.y, 2, 0, 2 * Math.PI);\r\n                ctx.closePath();\r\n                ctx.fill()\r\n            }\r\n        }\r\n    }\r\n\r\n    inPointLabel(x: number, y: number): boolean {\r\n        if (this.labelObject.inPoint(x, y) === true) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n\r\n\r\n    override inPoint(x: number, y: number): boolean {\r\n        if (distance(this.x, this.y, x, y) <= this.radius) {\r\n            return true;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    }\r\n}\r\n","import { ShapeObject } from \"./shape-object\";\r\nimport { LabelObject } from \"./label-object\";\r\nimport { toRadians, angle, move, rectangle, distance, fillCircle, getNewParallelPoint, rotateText, isPointInsideRectangle, translateLineToNewPosition, getTransformedPoint, moveLineToPoint } from \"../trigonometrics\";\r\nimport { ElementRef } from \"@angular/core\";\r\nexport class ConnectionObject extends ShapeObject {\r\n  override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n    const touch = event.touches[0];\r\n    const rect = canvas.nativeElement.getBoundingClientRect();\r\n    const offsetX = touch.clientX - rect.left;\r\n    const offsetY = touch.clientY - rect.top;\r\n    const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n    this.move(point.x, point.y);\r\n  }\r\n  moveTouchXY(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n    const touch = event.touches[0];\r\n    const rect = canvas.nativeElement.getBoundingClientRect();\r\n    const offsetX = touch.clientX - rect.left;  // get offset of the canvas\r\n    const offsetY = touch.clientY - rect.top;  // get offset of the canvas  \r\n    const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n    if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) { \r\n      const deltaX = point.x - ShapeObject.lastMove.x;\r\n      const deltaY = point.y - ShapeObject.lastMove.y;\r\n      this.x += deltaX;\r\n      this.y += deltaY;\r\n    }\r\n    ShapeObject.lastMove = point;\r\n  }\r\n  moveTouchToXY(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n    const touch = event.touches[0];\r\n    const rect = canvas.nativeElement.getBoundingClientRect();\r\n    const offsetX = touch.clientX - rect.left;  // get offset of the canvas\r\n    const offsetY = touch.clientY - rect.top;  // get offset of the canvas\r\n    const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n    if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n      const deltaX = point.x - ShapeObject.lastMove.x;\r\n      const deltaY = point.y - ShapeObject.lastMove.y;\r\n      this.toX += deltaX;\r\n      this.toY += deltaY;\r\n    }\r\n    ShapeObject.lastMove = point;\r\n  }   \r\n  labelObject= new LabelObject(0,0,\"\");\r\n  toX: number;\r\n  toY: number;\r\n  mirrorLabel: boolean = false;\r\n  align: number = 0;\r\n  distance: number = 20;\r\n  shape = 0;\r\n  arrow=false;\r\n  constructor(x: number, y: number, toX: number, toY: number, color?: string | CanvasGradient | CanvasPattern, name?: string, shadow?: boolean, zOrder?: number,arrow?:boolean) {\r\n    super()\r\n    this.x = x;\r\n    this.y = y;\r\n    this.type = 'connection';\r\n    if (arrow!==undefined){\r\n      this.arrow=arrow;\r\n    }\r\n    if (color !== undefined) {\r\n      this.color = color;\r\n    } else {\r\n      this.color = this.FgColor;\r\n    }\r\n    this.toX = toX;\r\n    this.toY = toY;\r\n    if (name !== undefined) {\r\n      this.name = name;\r\n    }\r\n    if (shadow) {\r\n      this.shadow = shadow;\r\n    }\r\n    if (zOrder) {\r\n      this.zOrder = zOrder;\r\n    }\r\n  }\r\n\r\n\r\n\r\n  set MirrorLabel(mirror: boolean) {\r\n    this.mirrorLabel = mirror\r\n  }\r\n\r\n  get MirrorLabel(): boolean {\r\n    return this.mirrorLabel;\r\n  }\r\n\r\n  override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent) {\r\n    const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n    this.move(point.x, point.y);\r\n  }\r\n\r\n  moveMouseXY(ctx: CanvasRenderingContext2D, event: MouseEvent) {\r\n    const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n    if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n      const deltaX = point.x - ShapeObject.lastMove.x;\r\n      const deltaY = point.y - ShapeObject.lastMove.y;\r\n      this.x += deltaX;\r\n      this.y += deltaY;\r\n    }\r\n    ShapeObject.lastMove = point;\r\n  }\r\n\r\n  moveMouseToXY(ctx: CanvasRenderingContext2D, event: MouseEvent) {\r\n    const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n    if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n      const deltaX = point.x - ShapeObject.lastMove.x;\r\n      const deltaY = point.y - ShapeObject.lastMove.y;\r\n      this.toX += deltaX;\r\n      this.toY += deltaY;\r\n    }\r\n    ShapeObject.lastMove = point;\r\n  }\r\n\r\n  override move(x: number, y: number): void {\r\n    if (!(ShapeObject.lastMove.x === 0 && ShapeObject.lastMove.y === 0)) {\r\n      const deltaX = x - ShapeObject.lastMove.x;\r\n      const deltaY = y - ShapeObject.lastMove.y;\r\n      this.x += deltaX;\r\n      this.y += deltaY;\r\n      this.toX += deltaX;\r\n      this.toY += deltaY;\r\n    }\r\n    ShapeObject.lastMove = { x: x, y: y };\r\n  }\r\n\r\n  override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n    if (this.visible === true) {\r\n      ctx.fillStyle = this.BgColor;\r\n      ctx.strokeStyle = this.BgColor;\r\n      const nodeAngle = angle(this.x, this.y, this.toX, this.toY);\r\n      const toNodeAngle = angle(this.toX, this.toY, this.x, this.y);\r\n      let moveNode = move(this.x, this.y, nodeAngle, 30);\r\n      let moveToNode = move(this.toX, this.toY, toNodeAngle, 30);\r\n      const dist = distance(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y);\r\n      const rect = rectangle(moveNode.x, moveNode.y, 2, dist, nodeAngle);\r\n      ctx.beginPath();\r\n      ctx.moveTo(rect.first.x, rect.first.y);\r\n      ctx.lineTo(rect.second.x, rect.second.y);\r\n      ctx.lineTo(rect.third.x, rect.third.y);\r\n      ctx.lineTo(rect.forth.x, rect.forth.y);\r\n      ctx.lineTo(rect.first.x, rect.first.y);\r\n      ctx.fill();\r\n      fillCircle(ctx, moveNode.x, moveNode.y, 4, this.BgColor);\r\n      fillCircle(ctx, moveToNode.x, moveToNode.y, 4, this.BgColor);\r\n      const distPara = distance(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y);\r\n      const angleC = angle(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y);\r\n      let textPosition = { x: 0, y: 0 }\r\n      if (this.mirrorLabel === false) {\r\n        textPosition = getNewParallelPoint(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y, distPara / 2 + this.align, this.distance);\r\n      }\r\n      else {\r\n        textPosition = getNewParallelPoint(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y, distPara / 2 + this.align, - this.distance);\r\n      }\r\n      if (this.mirrorLabel === false) {\r\n        rotateText(ctx, this.name + 'U+1F51D', textPosition.x, textPosition.y, angleC, \"#000000\", 60);\r\n      } else {\r\n        rotateText(ctx, this.name + 'U+1F51D', textPosition.x, textPosition.y, angleC + Math.PI, \"#000000\", 16);\r\n      }\r\n    }\r\n  }\r\n\r\n  moveTo(x: number, y: number) {\r\n    this.toX = x;\r\n    this.toY = y;\r\n  }\r\n\r\n  moveToAngle(angle: number, dist: number) {\r\n    this.toX = this.toX + Math.cos(angle) * dist;\r\n    this.toY = this.toY + Math.sin(angle) * dist;\r\n  }\r\n\r\n  inLabel(x:number,y:number){\r\n    return this.labelObject.inPoint(x,y);\r\n  }\r\n\r\n  override inPoint(x: number, y: number): boolean {\r\n    const nodeAngle = angle(this.x, this.y, this.toX, this.toY);\r\n    const toNodeAngle = angle(this.toX, this.toY, this.x, this.y);\r\n    let moveNode = move(this.x, this.y, nodeAngle + toRadians(4), 30);\r\n    let moveToNode = move(this.toX, this.toY, toNodeAngle + toRadians(-4), 30);\r\n    if (distance(x, y, moveNode.x, moveNode.y) <= 4) {\r\n      return true;\r\n    }\r\n    if (distance(x, y, moveToNode.x, moveToNode.y) <= 4) {\r\n      return true;\r\n    }\r\n    const rectangleArea = rectangle(moveNode.x, moveNode.y, 2, distance(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y), nodeAngle)\r\n    if (isPointInsideRectangle({ x: x, y: y }, rectangleArea.first, rectangleArea.second, rectangleArea.third, rectangleArea.forth)) {\r\n      return true\r\n    }\r\n    if (this.labelObject.inPoint(x,y)===true){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  inRectangle(x: number, y: number): boolean {\r\n    const nodeAngle = angle(this.x, this.y, this.toX, this.toY);\r\n    const toNodeAngle = angle(this.toX, this.toY, this.x, this.y);\r\n    let moveNode = move(this.x, this.y, nodeAngle + toRadians(4), 40);\r\n    let moveToNode = move(this.toX, this.toY, toNodeAngle + toRadians(-4), 40);\r\n    const rectangleArea = rectangle(moveNode.x, moveNode.y, 2, distance(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y), nodeAngle)\r\n    if (isPointInsideRectangle({ x: x, y: y }, rectangleArea.first, rectangleArea.second, rectangleArea.third, rectangleArea.forth)) {\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  inPointXY(x: number, y: number): boolean {\r\n    const nodeAngle = angle(this.x, this.y, this.toX, this.toY);\r\n    let moveNode = move(this.x, this.y, nodeAngle + toRadians(4), 30);\r\n    if (distance(x, y, moveNode.x, moveNode.y) <= 4) {\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  inPointToXY(x: number, y: number): boolean {\r\n    const toNodeAngle = angle(this.toX, this.toY, this.x, this.y);\r\n    let moveToNode = move(this.toX, this.toY, toNodeAngle + toRadians(-4), 30);\r\n    if (distance(x, y, moveToNode.x, moveToNode.y) <= 4) {\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  override drawShape(ctx: CanvasRenderingContext2D): void {\r\n    if (this.visible === true) {\r\n      if (this.shadow === true) {\r\n        ctx.shadowColor = ShapeObject.shadowColor;\r\n        ctx.shadowBlur = 6;\r\n        ctx.shadowOffsetX = 6;\r\n        ctx.shadowOffsetY = 6;\r\n      } else {\r\n        ctx.shadowBlur = 0;\r\n        ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n        ctx.shadowOffsetX = 0;\r\n        ctx.shadowOffsetY = 0;\r\n      }\r\n      ctx.fillStyle = this.color;\r\n      ctx.strokeStyle = this.color;\r\n      const nodeAngle = angle(this.x, this.y, this.toX, this.toY);\r\n      const toNodeAngle = angle(this.toX, this.toY, this.x, this.y);\r\n      let moveNode = move(this.x, this.y, nodeAngle + toRadians(4), 30);\r\n      let moveToNode = move(this.toX, this.toY, toNodeAngle + toRadians(-4), 30);\r\n      const dist = distance(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y);\r\n      const rect = rectangle(moveNode.x, moveNode.y, 2, dist, nodeAngle);\r\n      ctx.beginPath();\r\n      ctx.moveTo(rect.first.x, rect.first.y);\r\n      ctx.lineTo(rect.second.x, rect.second.y);\r\n      ctx.lineTo(rect.third.x, rect.third.y);\r\n      ctx.lineTo(rect.forth.x, rect.forth.y);\r\n      ctx.lineTo(rect.first.x, rect.first.y);\r\n      ctx.fill();\r\n      fillCircle(ctx, moveNode.x, moveNode.y, 4, this.color);\r\n      fillCircle(ctx, moveToNode.x, moveToNode.y, 4, this.color);\r\n      const distPara = distance(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y);\r\n      const angleC = angle(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y);\r\n      let textPosition = { x: 0, y: 0 }\r\n      if (this.mirrorLabel === false) {\r\n        textPosition = getNewParallelPoint(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y, distPara / 2 + this.align, this.distance);\r\n      }\r\n      else {\r\n        textPosition = getNewParallelPoint(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y, distPara / 2 + this.align, this.distance);\r\n      }\r\n      if (this.mirrorLabel === false) {\r\n        if (this.arrow===true){\r\n          this.labelObject.text=this.name+\"\\u2192\";\r\n        } else {\r\n          this.labelObject.text=this.name;\r\n        }\r\n        this.labelObject.x=textPosition.x;\r\n        this.labelObject.y=textPosition.y;\r\n        this.labelObject.angle=angleC;\r\n        this.labelObject.Color=this.color;\r\n        this.labelObject.sizeText=16;\r\n        this.labelObject.drawShape(ctx);\r\n      } else {\r\n        if (this.arrow===true){\r\n          this.labelObject.text=\"\\u2190\"+this.name;\r\n        } else {\r\n          this.labelObject.text=this.name;\r\n        }\r\n        this.labelObject.x=textPosition.x;\r\n        this.labelObject.y=textPosition.y;\r\n        this.labelObject.angle=angleC+Math.PI;\r\n        this.labelObject.Color=this.color;\r\n        this.labelObject.sizeText=16;\r\n        this.labelObject.drawShape(ctx)\r\n      }\r\n    }\r\n  }\r\n\r\n}\r\n","import { ShapeObject } from './shape-object'\r\nimport { rectangle, isPointInsideRectangle, getTransformedPoint, distance, angle, move, calculateHypotenuse } from \"../trigonometrics\";\r\nimport { Point } from '../interfaces/point';\r\nimport { ElementRef } from '@angular/core';\r\nexport class RectangleObject extends ShapeObject {\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        const touch = event.touches[0];\r\n        const rect = canvas.nativeElement.getBoundingClientRect();\r\n        const offsetX = touch.clientX - rect.left;\r\n        const offsetY = touch.clientY - rect.top;\r\n        const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n        this.move(point.x, point.y);\r\n    }\r\n    angle = 0;\r\n    borderColor: string | CanvasGradient | CanvasPattern = \"#ffffff\";\r\n    height = 10;\r\n    width = 10;\r\n    constructor(x: number, y: number, width: number, height: number, angle?: number, color?: string | CanvasGradient | CanvasPattern, borderColor?: string | CanvasGradient | CanvasPattern, shadow?: boolean) {\r\n        super();\r\n        this.x = x;\r\n        this.y = y;\r\n        this.width = width;\r\n        this.height = height;\r\n        this.type = \"rectangle\";\r\n        if (angle) {\r\n            this.angle = angle;\r\n        }\r\n        if (color) {\r\n            this.color = color;\r\n        } else {\r\n            this.color = this.FgColor;\r\n        }\r\n        if (borderColor) {\r\n            this.borderColor = borderColor;\r\n        } else {\r\n            this.borderColor = this.FgColor;\r\n        }\r\n        if (shadow) {\r\n            this.shadow = shadow;\r\n        }\r\n    }\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.shadow === true) {\r\n            ctx.shadowColor = ShapeObject.shadowColor;\r\n            ctx.shadowBlur = 6;\r\n            ctx.shadowOffsetX = 6;\r\n            ctx.shadowOffsetY = 6;\r\n        } else {\r\n            ctx.shadowBlur = 0;\r\n            ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n            ctx.shadowOffsetX = 0;\r\n            ctx.shadowOffsetY = 0;\r\n        }\r\n        const rect = rectangle(this.x, this.y, this.height, this.width, this.angle);\r\n        ctx.fillStyle = this.color;\r\n        ctx.strokeStyle = this.borderColor;\r\n        ctx.beginPath();\r\n        ctx.moveTo(rect.first.x, rect.first.y);\r\n        ctx.lineTo(rect.second.x, rect.second.y);\r\n        ctx.lineTo(rect.third.x, rect.third.y);\r\n        ctx.lineTo(rect.forth.x, rect.forth.y);\r\n        ctx.lineTo(rect.first.x, rect.first.y);\r\n        ctx.closePath();\r\n        ctx.fill();\r\n        ctx.stroke();\r\n    }\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n        const rect = rectangle(this.x, this.y, this.height, this.width, this.angle);\r\n        ctx.fillStyle = this.BgColor;\r\n        ctx.strokeStyle = this.BgColor;\r\n        ctx.beginPath();\r\n        ctx.moveTo(rect.first.x, rect.first.y);\r\n        ctx.lineTo(rect.second.x, rect.second.y);\r\n        ctx.lineTo(rect.third.x, rect.third.y);\r\n        ctx.lineTo(rect.forth.x, rect.forth.y);\r\n        ctx.closePath();\r\n        ctx.fill();\r\n        ctx.stroke();\r\n    }\r\n    override inPoint(x: number, y: number): boolean {\r\n        const rect = rectangle(this.x, this.y, this.height, this.width, this.angle);\r\n        if (isPointInsideRectangle({ x: x, y: y }, rect.first, rect.second, rect.third, rect.forth)) {\r\n            return true;\r\n        }\r\n        return false\r\n    }\r\n    override move(x: number, y: number): void {\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent): void {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n            const deltaX = point.x - ShapeObject.lastMove.x;\r\n            const deltaY = point.y - ShapeObject.lastMove.y;\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n        }\r\n        ShapeObject.lastMove = point;\r\n    }\r\n}\r\n","import { ElementRef } from '@angular/core';\r\nimport { ShapeObject } from './shape-object'\r\nimport { angle, distance, getTransformedPoint, isPointInsideRectangle, move, offSet, rectangle, toDegrees, toRadians } from \"../trigonometrics\";\r\nimport { LabelObject } from \"../class/label-object\";\r\nexport class ImageObject extends ShapeObject {\r\n    angle = 0;\r\n    borderColor: string | CanvasGradient | CanvasPattern = \"#ffffff\";\r\n    height = 10;\r\n    width = 10;\r\n    image: string = '';\r\n    labelObject = new LabelObject(0, 0, \"\");\r\n    angleLabel: number = 0;\r\n    distanceLabel: number = 10\r\n    imageBuffer: HTMLImageElement = new Image();\r\n    \r\n    constructor(x: number, y: number, width: number, height: number, borderColor?: string | CanvasGradient | CanvasPattern, shadow?: boolean, angleLabel?: number, distanceLabel?: number, text?: string) {\r\n        super();\r\n        this.type = 'image';\r\n        this.color = \"rgba(0,0,0,1)\";\r\n        this.x = x;\r\n        this.y = y;\r\n        this.width = width;\r\n        this.height = height;\r\n        if (typeof angle === \"number\") {\r\n            this.angle = angle;\r\n        }\r\n        if (borderColor) {\r\n            this.borderColor = borderColor;\r\n        }\r\n        if (shadow) {\r\n            this.shadow = shadow;\r\n        }\r\n        if (typeof angleLabel === \"number\") {\r\n            this.angleLabel = angleLabel;\r\n        }\r\n        if (typeof distanceLabel === \"number\") {\r\n            this.distanceLabel = distanceLabel;\r\n        }\r\n        if (text) {\r\n            this.labelObject.text = text;\r\n        }\r\n    }\r\n\r\n    async loadImageFromUrl(url: string): Promise<HTMLImageElement> {\r\n        try {\r\n            const img = await this.loadImage(url);\r\n             this.imageBuffer = img;\r\n            return this.imageBuffer;\r\n        } catch (error: any) {\r\n            console.error(`Error loading image: ${error.message}`);\r\n            return new Image(); // Devuelve una imagen vacía en caso de error\r\n        }\r\n    }\r\n\r\n   loadImage(url:string): Promise<HTMLImageElement> {\r\n    return new Promise((resolve, reject) => {\r\n        let img = new Image();\r\n        img.src= url;\r\n        img.onload = () => resolve(img); // Resuelve la Promise con el objeto Image cuando carga\r\n        img.onerror = (error) => reject(new Error(`Failed to load image at ${url}:`)); // Rechaza si hay un error\r\n    });\r\n}\r\n\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.shadow === true) {\r\n            ctx.shadowColor = ShapeObject.shadowColor;\r\n            ctx.shadowBlur = 6;\r\n            ctx.shadowOffsetX = 6;\r\n            ctx.shadowOffsetY = 6;\r\n        } else {\r\n            ctx.shadowBlur = 0;\r\n            ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n            ctx.shadowOffsetX = 0;\r\n            ctx.shadowOffsetY = 0;\r\n        }\r\n        const rect = rectangle(this.x, this.y, this.height, this.width, this.angle);\r\n        ctx.fillStyle = this.color;\r\n        ctx.strokeStyle = this.borderColor;\r\n        ctx.beginPath();\r\n        ctx.moveTo(rect.first.x, rect.first.y);\r\n        ctx.lineTo(rect.second.x, rect.second.y);\r\n        ctx.lineTo(rect.third.x, rect.third.y);\r\n        ctx.lineTo(rect.forth.x, rect.forth.y);\r\n        ctx.lineTo(rect.first.x, rect.first.y);\r\n        ctx.closePath();\r\n        ctx.fill();\r\n        ctx.stroke();\r\n        const imageAngle = toRadians(this.angle);\r\n        const centerX = rect.forth.x;\r\n        const centerY = rect.forth.y;\r\n        ctx.rotate(imageAngle);\r\n        ctx.drawImage(this.imageBuffer, centerX, centerY, this.width, this.height);\r\n        ctx.rotate(-imageAngle);\r\n        const movePos = move(this.x, this.y, toRadians(this.angleLabel), this.distanceLabel);\r\n        this.labelObject.x = movePos.x;\r\n        this.labelObject.y = movePos.y;\r\n        this.labelObject.drawShape(ctx);\r\n    }\r\n\r\n    moveMouseText(ctx: CanvasRenderingContext2D, event: MouseEvent) {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        this.labelObject.moveMouse(ctx, event)\r\n        this.distanceLabel = distance( this.x, this.y,this.labelObject.x, this.labelObject.y,);\r\n        this.angleLabel = toDegrees(angle( this.x, this.y,this.labelObject.x, this.labelObject.y));\r\n        ShapeObject.lastMove = point;\r\n    }\r\n\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n        const rect = rectangle(this.x, this.y, this.height, this.width, this.angle);\r\n        ctx.fillStyle = this.BgColor;\r\n        ctx.strokeStyle = this.BgColor;\r\n        ctx.beginPath();\r\n        ctx.moveTo(rect.first.x, rect.first.y);\r\n        ctx.lineTo(rect.second.x, rect.second.y);\r\n        ctx.lineTo(rect.third.x, rect.third.y);\r\n        ctx.lineTo(rect.forth.x, rect.forth.y);\r\n        ctx.closePath();\r\n        ctx.fill();\r\n        ctx.stroke();\r\n    }\r\n\r\n    override inPoint(x: number, y: number): boolean {\r\n        const rect = rectangle(this.x, this.y, this.height, this.width, this.angle);\r\n        if (isPointInsideRectangle({ x: x, y: y }, rect.first, rect.second, rect.third, rect.forth)) {\r\n            return true;\r\n        }\r\n        return false\r\n    }\r\n    \r\n    inPointLabel(x: number, y: number): boolean {\r\n        if (this.labelObject.inPoint(x, y) === true) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n\r\n    override move(x: number, y: number): void {\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent): void {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n            const deltaX = point.x - ShapeObject.lastMove.x;\r\n            const deltaY = point.y - ShapeObject.lastMove.y;\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n        }\r\n        ShapeObject.lastMove = point;\r\n    }\r\n\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        const touch = event.touches[0];\r\n        const rect = canvas.nativeElement.getBoundingClientRect();\r\n        const offsetX = touch.clientX - rect.left;\r\n        const offsetY = touch.clientY - rect.top;\r\n        const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n        this.move(point.x, point.y);\r\n    }\r\n    \r\n    moveTouchText(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent) {\r\n        const varOffSet = offSet(canvas, event);\r\n        const point = getTransformedPoint(ctx, varOffSet.offSetX, varOffSet.offSetY);\r\n        this.labelObject.moveTouch(canvas, ctx, event)\r\n        this.distanceLabel = distance(this.x, this.y, this.labelObject.x, this.labelObject.y,);\r\n        this.angleLabel = toDegrees(angle(this.x, this.y, this.labelObject.x, this.labelObject.y));\r\n        ShapeObject.lastMove = point;\r\n    }\r\n}\r\n","import { ShapeObject } from \"./shape-object\";\r\nimport { distance, getTransformedPoint } from \"../trigonometrics\";\r\nimport { ElementRef } from \"@angular/core\";\r\nexport class CircleObject extends ShapeObject {\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        const touch = event.touches[0];\r\n        const rect = canvas.nativeElement.getBoundingClientRect();\r\n        const offsetX = touch.clientX - rect.left;\r\n        const offsetY = touch.clientY - rect.top;\r\n        const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n        this.move(point.x, point.y);\r\n    }\r\n    radius = 0;\r\n    borderColor: string | CanvasGradient | CanvasPattern = \"\";\r\n    constructor(x: number, y: number, radius: number, color?: string | CanvasGradient | CanvasPattern, borderColor?: string | CanvasGradient | CanvasPattern, shadow?: boolean) {\r\n        super();\r\n        this.x = x;\r\n        this.y = y;\r\n        this.radius = radius;\r\n        this.type = \"circle\";\r\n        if (color) {\r\n            this.color = color;\r\n        } else {\r\n            this.color = this.FgColor\r\n        }\r\n        if (borderColor) {\r\n            this.borderColor = borderColor;\r\n        } else {\r\n            this.borderColor = this.FgColor;\r\n        }\r\n        if (shadow) {\r\n            this.shadow = shadow;\r\n        }\r\n    }\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.visible === true) {\r\n            if (this.shadow === true) {\r\n                ctx.shadowColor = ShapeObject.shadowColor;\r\n                ctx.shadowBlur = 6;\r\n                ctx.shadowOffsetX = 6;\r\n                ctx.shadowOffsetY = 6;\r\n            } else {\r\n                ctx.shadowBlur = 0;\r\n                ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n                ctx.shadowOffsetX = 0;\r\n                ctx.shadowOffsetY = 0;\r\n            }\r\n            ctx.fillStyle = this.color;\r\n            ctx.strokeStyle = this.borderColor;\r\n            ctx.beginPath();\r\n            ctx.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);\r\n            ctx.fill();\r\n            ctx.stroke();\r\n        }\r\n    }\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n        ctx.fillStyle = this.BgColor;\r\n        ctx.strokeStyle = this.BgColor;\r\n        ctx.beginPath();\r\n        ctx.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);\r\n        ctx.fill();\r\n        ctx.stroke();\r\n    }\r\n    override inPoint(x: number, y: number): boolean {\r\n        if (distance(this.x, this.y, x, y) < this.radius) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    override move(x: number, y: number): void {\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent): void {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n            const deltaX = point.x - ShapeObject.lastMove.x;\r\n            const deltaY = point.y - ShapeObject.lastMove.y;\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n        }\r\n        ShapeObject.lastMove = point;\r\n    }\r\n}\r\n","import { angle, distance, getTransformedPoint, isPointInTriangle, move } from '../trigonometrics';\r\nimport { ShapeObject } from './shape-object'\r\nimport { Point } from '../interfaces/point';\r\nimport { ElementRef } from '@angular/core';\r\ninterface vector {\r\n    angle: number,\r\n    distance: number\r\n}\r\nexport class TriangleObject extends ShapeObject {\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        const touch = event.touches[0];\r\n        const rect = canvas.nativeElement.getBoundingClientRect();\r\n        const offsetX = touch.clientX - rect.left;\r\n        const offsetY = touch.clientY - rect.top;\r\n        const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n        this.move(point.x, point.y);\r\n    }\r\n    second: Point = { x: 0, y: 0 };\r\n    third: Point = { x: 0, y: 0 };\r\n    borderColor: string | CanvasGradient | CanvasPattern = \"\";\r\n    constructor(first: Point, second: Point, third: Point, color?: string | CanvasGradient | CanvasPattern, borderColor?: string | CanvasGradient | CanvasPattern, shadow?: boolean) {\r\n        super();\r\n        this.x = first.x;\r\n        this.y = first.y;\r\n        this.second = second;\r\n        this.third = third;\r\n        this.type = \"triangle\";\r\n        if (color) {\r\n            this.color = color;\r\n        } else {\r\n            this.color = this.FgColor;\r\n        }\r\n        if (borderColor) {\r\n            this.borderColor = borderColor;\r\n        } else {\r\n            this.borderColor = this.BgColor;\r\n        }\r\n        if (shadow) {\r\n            this.shadow = shadow;\r\n        }\r\n    }\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.visible === true) {\r\n            if (this.shadow === true) {\r\n                ctx.shadowColor = ShapeObject.shadowColor;\r\n                ctx.shadowBlur = 6;\r\n                ctx.shadowOffsetX = 6;\r\n                ctx.shadowOffsetY = 6;\r\n            } else {\r\n                ctx.shadowBlur = 0;\r\n                ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n                ctx.shadowOffsetX = 0;\r\n                ctx.shadowOffsetY = 0;\r\n            }\r\n            ctx.fillStyle = this.color;\r\n            ctx.strokeStyle = this.borderColor;\r\n            ctx.beginPath();\r\n            ctx.moveTo(this.x, this.y);\r\n            ctx.lineTo(this.second.x, this.second.y);\r\n            ctx.lineTo(this.third.x, this.third.y);\r\n            ctx.lineTo(this.x, this.y);\r\n            ctx.closePath();\r\n            ctx.fill();\r\n            ctx.stroke();\r\n        }\r\n    }\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n        ctx.fillStyle = this.BgColor;\r\n        ctx.strokeStyle = this.BgColor;\r\n        ctx.beginPath();\r\n        ctx.moveTo(this.x, this.y);\r\n        ctx.lineTo(this.second.x, this.second.y);\r\n        ctx.lineTo(this.third.x, this.third.y);\r\n        ctx.lineTo(this.x, this.y);\r\n        ctx.closePath();\r\n        ctx.fill();\r\n        ctx.stroke();\r\n    }\r\n    override inPoint(x: number, y: number): boolean {\r\n        if (isPointInTriangle({ x: this.x, y: this.y }, this.second, this.third, { x: x, y: y })) {\r\n            return true\r\n        }\r\n        return false;\r\n    }\r\n    override move(x: number, y: number): void {\r\n        this.moveTriangle({ x: x, y: y });\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent): void {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n            const deltaX = point.x - ShapeObject.lastMove.x;\r\n            const deltaY = point.y - ShapeObject.lastMove.y;\r\n            this.moveTriangle({ x: this.x + deltaX, y: this.y + deltaY });\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n        }\r\n        ShapeObject.lastMove = point;\r\n    }\r\n    moveTriangle(point: Point) {\r\n        const secondPoint: vector = { distance: distance(this.x, this.y, this.second.x, this.second.y), angle: angle(this.x, this.y, this.second.x, this.second.y) };\r\n        const thirdPoint: vector = { distance: distance(this.x, this.y, this.third.x, this.third.y), angle: angle(this.x, this.y, this.third.x, this.third.y) };\r\n        this.second = move(point.x, point.y, secondPoint.angle, secondPoint.distance);\r\n        this.third = move(point.x, point.y, thirdPoint.angle, thirdPoint.distance);\r\n    }\r\n\r\n}\r\n","import { ElementRef } from '@angular/core';\r\nimport { Point } from '../interfaces/point';\r\nimport { move, isPointInTriangle, distance, angle, getTransformedPoint, toRadians } from '../trigonometrics';\r\nimport { ShapeObject } from './shape-object'\r\ninterface Triangle {\r\n    p1: Point;\r\n    p2: Point;\r\n    p3: Point\r\n}\r\nexport class MultiplesSidesObject extends ShapeObject {\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        const touch = event.touches[0];\r\n        const rect = canvas.nativeElement.getBoundingClientRect();\r\n        const offsetX = touch.clientX - rect.left;\r\n        const offsetY = touch.clientY - rect.top;\r\n        const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n        this.move(point.x, point.y);\r\n    }\r\n    sides: number = 0;\r\n    radius: number = 0;\r\n    borderColor: string | CanvasGradient | CanvasPattern = \"\"\r\n    triangles: Triangle[] = [];\r\n    angle = 0;\r\n    constructor(x: number, y: number, sides: number, radius: number, color?: string | CanvasGradient | CanvasPattern, borderColor?: string | CanvasGradient | CanvasPattern, angle?: number, shadow?: boolean) {\r\n        super();\r\n        this.x = x;\r\n        this.y = y;\r\n        this.sides = sides;\r\n        this.radius = radius;\r\n        this.type = \"multiplesSides\";\r\n        if (color) {\r\n            this.color = color;\r\n        } else {\r\n            this.color = this.FgColor;\r\n        }\r\n        if (borderColor) {\r\n            this.borderColor = borderColor;\r\n        } else {\r\n            this.borderColor = this.FgColor;\r\n        }\r\n        if (angle) {\r\n            this.angle = toRadians(angle);\r\n\r\n        }\r\n        if (shadow) {\r\n            this.shadow = shadow;\r\n        }\r\n        const radian = 2 * Math.PI / this.sides;\r\n        for (let i = 0; i < this.sides; i++) {\r\n            const secondPoint = move(x, y, i * radian + this.angle, this.radius);\r\n            const thirdPoint = move(x, y, i * radian + radian + this.angle, this.radius);\r\n            this.triangles.push({ p1: { x: x, y: y }, p2: secondPoint, p3: thirdPoint } as Triangle)\r\n        }\r\n    }\r\n\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.visible === true) {\r\n            if (this.shadow === true) {\r\n                ctx.shadowColor = ShapeObject.shadowColor;\r\n                ctx.shadowBlur = 6;\r\n                ctx.shadowOffsetX = 6;\r\n                ctx.shadowOffsetY = 6;\r\n            } else {\r\n                ctx.shadowBlur = 0;\r\n                ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n                ctx.shadowOffsetX = 0;\r\n                ctx.shadowOffsetY = 0;\r\n            }\r\n            ctx.beginPath();\r\n            ctx.fillStyle = this.color;\r\n            ctx.strokeStyle = this.borderColor;\r\n            const length = this.triangles.length;\r\n            this.triangles.forEach((triangle, index) => {\r\n                if (index === 0) {\r\n                    ctx.moveTo(triangle.p2.x, triangle.p2.y);\r\n                }\r\n                if (index < length - 1) {\r\n                    ctx.lineTo(triangle.p3.x, triangle.p3.y);\r\n                } else {\r\n                    ctx.lineTo(this.triangles[0].p2.x, this.triangles[0].p2.y);\r\n                }\r\n            });\r\n            ctx.closePath();\r\n            ctx.fill();\r\n            ctx.stroke();\r\n        }\r\n    }\r\n\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n        ctx.beginPath();\r\n        ctx.fillStyle = this.BgColor;\r\n        ctx.strokeStyle = this.BgColor;\r\n        const length = this.triangles.length;\r\n        this.triangles.forEach((triangle, index) => {\r\n            if (index === 0) {\r\n                ctx.moveTo(triangle.p2.x, triangle.p2.y);\r\n            }\r\n            if (index < length - 1) {\r\n                ctx.lineTo(triangle.p3.x, triangle.p3.y);\r\n            } else {\r\n                ctx.lineTo(this.triangles[0].p2.x, this.triangles[0].p2.y);\r\n            }\r\n        });\r\n        ctx.closePath();\r\n        ctx.fill();\r\n        ctx.stroke();\r\n    }\r\n\r\n    override inPoint(x: number, y: number): boolean {\r\n        for (let index = 0; index < this.triangles.length; index++) {\r\n            const element = this.triangles[index];\r\n            if (isPointInTriangle(element.p1, element.p2, element.p3, { x: x, y: y })) {\r\n                return true\r\n            }\r\n        }\r\n        return false\r\n    }\r\n\r\n    override move(x: number, y: number): void {\r\n        const dist = distance(this.triangles[0].p1.x, this.triangles[0].p1.y, this.triangles[0].p2.x, this.triangles[0].p2.y)\r\n        this.triangles.forEach(element => {\r\n            const ang1 = angle(element.p1.x, element.p1.y, element.p2.x, element.p2.y);\r\n            const ang2 = angle(element.p1.x, element.p1.y, element.p3.x, element.p3.y);\r\n            element.p2 = move(x, y, ang1, dist);\r\n            element.p3 = move(x, y, ang2, dist);\r\n            element.p1 = { x: x, y: y };\r\n        });\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent): void {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n            const deltaX = point.x - ShapeObject.lastMove.x;\r\n            const deltaY = point.y - ShapeObject.lastMove.y;\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n            this.move(this.x, this.y);\r\n        }\r\n        ShapeObject.lastMove = point;\r\n    }\r\n}\r\n","import { ShapeObject } from \"./shape-object\";\r\nimport { distance, move, toRadians, angle, toDegrees, getTransformedPoint } from '../trigonometrics';\r\nimport { ElementRef } from \"@angular/core\";\r\nexport class ArcObject extends ShapeObject {\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        const touch = event.touches[0];\r\n        const rect = canvas.nativeElement.getBoundingClientRect();\r\n        const offsetX = touch.clientX - rect.left;\r\n        const offsetY = touch.clientY - rect.top;\r\n        const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n        this.move(point.x, point.y);\r\n    }\r\n    size: number = 0;\r\n    beginGrades: number = 0;\r\n    endGrades: number = 0;\r\n    borderColor:string| CanvasGradient | CanvasPattern = \"\";\r\n    constructor(x: number, y: number, size: number, beginGrades: number, endGrades: number, color?: string| CanvasGradient | CanvasPattern , borderColor?: string| CanvasGradient | CanvasPattern,shadow?:boolean) {\r\n        super();\r\n        this.x = x;\r\n        this.y = y;\r\n        this.size = size;\r\n        this.beginGrades = beginGrades;\r\n        this.endGrades = endGrades;\r\n        this.type = \"arc\";\r\n        if (color) {\r\n            this.color = color;\r\n        } else {\r\n            this.color = this.FgColor\r\n        }\r\n        if (borderColor) {\r\n            this.borderColor = borderColor;\r\n        } else {\r\n            this.borderColor = this.FgColor;\r\n        }\r\n        if (shadow) {\r\n            this.shadow=shadow;\r\n        }\r\n    }\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.visible === true) {\r\n            if (this.shadow===true){\r\n                ctx.shadowColor = ShapeObject.shadowColor;\r\n                ctx.shadowBlur = 6;\r\n                ctx.shadowOffsetX = 6;\r\n                ctx.shadowOffsetY = 6;\r\n            } else {\r\n                ctx.shadowBlur = 0;\r\n                ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n                ctx.shadowOffsetX = 0;\r\n                ctx.shadowOffsetY = 0;\r\n            }\r\n            const beginRadians = toRadians(this.beginGrades);\r\n            const endRadians = toRadians(this.endGrades);\r\n            const line = move(this.x, this.y, beginRadians, this.size);\r\n            ctx.strokeStyle = this.borderColor;\r\n            ctx.fillStyle = this.color;\r\n            ctx.beginPath()\r\n            ctx.moveTo(this.x, this.y);\r\n            ctx.lineTo(line.x, line.y);\r\n            ctx.arc(this.x, this.y, this.size, beginRadians, endRadians);\r\n            ctx.lineTo(this.x, this.y);\r\n            ctx.closePath();\r\n            ctx.fill();\r\n        }\r\n    }\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n        const beginRadians = toRadians(this.beginGrades);\r\n        const endRadians = toRadians(this.endGrades);\r\n        const line = move(this.x, this.y, beginRadians, this.size);\r\n        ctx.strokeStyle = this.BgColor;\r\n        ctx.fillStyle = this.BgColor;\r\n        ctx.beginPath()\r\n        ctx.moveTo(this.x, this.y);\r\n        ctx.lineTo(line.x, line.y);\r\n        ctx.arc(this.x, this.y, this.size, beginRadians, endRadians);\r\n        ctx.lineTo(this.x, this.y);\r\n        ctx.closePath();\r\n        ctx.fill();\r\n    }\r\n    override inPoint(x: number, y: number): boolean {\r\n        let anglePoint = angle(this.x, this.y, x, y);\r\n        if (anglePoint < 0) {\r\n            anglePoint = Math.PI * 2 + anglePoint;\r\n        }\r\n        if (distance(x, y, this.x, this.y) < this.size && anglePoint >= toRadians(this.beginGrades) && anglePoint <= toRadians(this.endGrades)) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    override move(x: number, y: number): void {\r\n        this.x = x;\r\n        this.y = y;\r\n    }\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent): void {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n            const deltaX = point.x - ShapeObject.lastMove.x;\r\n            const deltaY = point.y - ShapeObject.lastMove.y;\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n        }\r\n        ShapeObject.lastMove = point;\r\n    }\r\n}\r\n\r\n","import { ElementRef } from '@angular/core';\r\nimport { Point } from '../interfaces/point'\r\nimport { angle, distance, drawRectangle, getTransformedPoint, isPointInsideRectangle, move, rectangle } from '../trigonometrics';\r\nimport { ShapeObject } from \"./shape-object\";\r\n\r\nexport class LineChartObject extends ShapeObject {\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        const touch = event.touches[0];\r\n        const rect = canvas.nativeElement.getBoundingClientRect();\r\n        const offsetX = touch.clientX - rect.left;\r\n        const offsetY = touch.clientY - rect.top;\r\n        const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n        this.move(point.x, point.y);\r\n    }\r\n    values: number[] = [];\r\n    pointValues: Point[] = [];\r\n    dist: number = 0;\r\n    marks = false;\r\n    constructor(point: Point, values: number[], dist: number, color: string | CanvasGradient | CanvasPattern, marks?: boolean, shadow?: boolean) {\r\n        super();\r\n        this.x = point.x;\r\n        this.y = point.y;\r\n        this.color = color;\r\n        this.values = values;\r\n        this.dist = dist;\r\n        this.type = \"lineChart\"\r\n        this.values.forEach((element, index) => {\r\n            const point = this.getCanvasPosition(this.dist * index, element, this.x, this.y, ShapeObject.width, ShapeObject.height);\r\n            this.pointValues.push(point);\r\n        })\r\n        if (marks) {\r\n            this.marks = marks;\r\n        }\r\n        if (shadow) {\r\n            this.shadow = shadow;\r\n        }\r\n    }\r\n\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.visible) {\r\n            if (this.shadow === true) {\r\n                ctx.shadowColor = ShapeObject.shadowColor;\r\n                ctx.shadowBlur = 6;\r\n                ctx.shadowOffsetX = 6;\r\n                ctx.shadowOffsetY = 6;\r\n            } else {\r\n                ctx.shadowBlur = 0;\r\n                ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n                ctx.shadowOffsetX = 0;\r\n                ctx.shadowOffsetY = 0;\r\n            }\r\n            ctx.beginPath();\r\n            ctx.strokeStyle = this.color;\r\n            ctx.fillStyle = this.color;\r\n            const point = this.pointValues[0];\r\n            ctx.moveTo(point.x, point.y);\r\n            for (let index = 1; index < this.pointValues.length; index++) {\r\n                const pointTo = this.pointValues[index]\r\n                ctx.lineTo(pointTo.x, pointTo.y);\r\n            }\r\n            ctx.stroke();\r\n            if (this.marks === true) {\r\n                this.pointValues.forEach((element) => {\r\n                    const movePoint = move(element.x, element.y, Math.PI / 2, 1)\r\n                    const rect = rectangle(movePoint.x, movePoint.y, 2, 2, 0);\r\n                    drawRectangle(ctx, rect);\r\n                });\r\n            }\r\n        }\r\n    }\r\n\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n        ctx.beginPath();\r\n        ctx.strokeStyle = this.BgColor;\r\n        const point = this.pointValues[0];\r\n        ctx.moveTo(point.x, point.y);\r\n        for (let index = 1; index < this.pointValues.length; index++) {\r\n            const pointTo = this.pointValues[index]\r\n            ctx.lineTo(pointTo.x, pointTo.y);\r\n        }\r\n        ctx.stroke();\r\n        if (this.marks === true) {\r\n            this.pointValues.forEach((element) => {\r\n                const movePoint = move(element.x, element.y, Math.PI / 2, 1)\r\n                const rect = rectangle(movePoint.x, movePoint.y, 2, 2, 0);\r\n                drawRectangle(ctx, rect);\r\n            });\r\n        }\r\n    }\r\n\r\n    override inPoint(x: number, y: number): boolean {\r\n        let point = this.pointValues[0];\r\n        for (let index = 1; index < this.pointValues.length; index++) {\r\n            const pointTo = this.pointValues[index];\r\n            const dist = distance(point.x, point.y, pointTo.x, pointTo.y);\r\n            const ang = angle(point.x, point.y, pointTo.x, pointTo.y)\r\n            const rect = rectangle(point.x, point.y, 2, dist, ang);\r\n            if (isPointInsideRectangle({ x: x, y: y }, rect.first, rect.second, rect.third, rect.forth)) {\r\n                return true;\r\n            }\r\n            point = this.pointValues[index];\r\n        }\r\n        return (false);\r\n    }\r\n\r\n    override move(x: number, y: number): void {\r\n        this.x = x;\r\n        this.y = y;\r\n        this.pointValues = [];\r\n        this.values.forEach((element, index) => {\r\n            const point = this.getCanvasPosition(this.dist * index, element, this.x, this.y, ShapeObject.width, ShapeObject.height);\r\n            this.pointValues.push(point);\r\n        })\r\n    }\r\n\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent): void {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n            const deltaX = point.x - ShapeObject.lastMove.x;\r\n            const deltaY = point.y - ShapeObject.lastMove.y;\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n            this.pointValues.forEach(element => {\r\n                element.x += deltaX;\r\n                element.y += deltaY;\r\n            });\r\n        }\r\n        ShapeObject.lastMove = point;\r\n    }\r\n\r\n    getCanvasPosition(cartesianX: number, cartesianY: number, startX: number, startY: number, width: number, height: number): Point {\r\n        if (cartesianX >= 0 && cartesianX <= width && cartesianY >= 0 && cartesianY <= height) {\r\n            return { x: startX + cartesianX, y: startY - cartesianY }\r\n        } else {\r\n            const scaleX: number = width / (2 * Math.abs(cartesianX));\r\n            const scaleY: number = height / (2 * Math.abs(cartesianY));\r\n            const canvasX: number = startX + (cartesianX * scaleX);\r\n            const canvasY: number = startY - (cartesianY * scaleY);\r\n            return { x: canvasX, y: canvasY };\r\n        }\r\n    }\r\n}\r\n","import { ElementRef } from \"@angular/core\";\r\nimport { Candlestick } from \"../interfaces/candle-stick \";\r\nimport { Point } from \"../interfaces/point\";\r\nimport { getTransformedPoint, isPointInsideRectangle, rectangle } from \"../trigonometrics\";\r\nimport { ShapeObject } from \"./shape-object\";\r\nexport class CandlestickObject extends ShapeObject {\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        const touch = event.touches[0];\r\n        const rect = canvas.nativeElement.getBoundingClientRect();\r\n        const offsetX = touch.clientX - rect.left;\r\n        const offsetY = touch.clientY - rect.top;\r\n        const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n        this.move(point.x, point.y);\r\n    }\r\n    private stick: Candlestick = { timestamp: 0, open: 0, close: 0, high: 0, low: 0 }\r\n    bullColor: string | CanvasGradient | CanvasPattern = \"#ff0000\";\r\n    bearColor: string | CanvasGradient | CanvasPattern = \"#0000ff\";\r\n    candleWidth: number = 0;\r\n    candleHeight: number = 0;\r\n    constructor(position: Point, candleStick: Candlestick, width: number, height: number, bullColor: string | CanvasGradient | CanvasPattern, bearColor: string | CanvasGradient | CanvasPattern,shadow?:boolean) {\r\n        super();\r\n        this.stick = candleStick;\r\n        this.x = position.x;\r\n        this.y = position.y;\r\n        this.candleWidth = width;\r\n        this.candleHeight = height;\r\n        this.type = \"candleStick\";\r\n        this.bullColor = bullColor;\r\n        this.bearColor = bearColor;\r\n        if (this.stick.open > this.stick.close) {\r\n            this.color = this.bullColor\r\n        } else {\r\n            this.color = this.bearColor;\r\n        }\r\n        if (this.stick.open < this.stick.close) {\r\n            [this.stick.open, this.stick.close] = this.swap(this.stick.open, this.stick.close);\r\n        }\r\n        if (shadow) {\r\n            this.shadow=shadow;\r\n        }\r\n    }\r\n    \r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.visible === true) {\r\n            if (this.shadow===true){\r\n                ctx.shadowColor = ShapeObject.shadowColor;\r\n                ctx.shadowBlur = 6;\r\n                ctx.shadowOffsetX = 6;\r\n                ctx.shadowOffsetY = 6;\r\n            } else {\r\n                ctx.shadowBlur = 0;\r\n                ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n                ctx.shadowOffsetX = 0;\r\n                ctx.shadowOffsetY = 0;\r\n            }\r\n            ctx.beginPath();\r\n            ctx.fillStyle = this.color;\r\n            ctx.strokeStyle = this.color;\r\n            const wickDownStart = this.getCanvasPosition(this.candleWidth / 2, this.stick.close, this.x, this.y, this.candleWidth, this.candleHeight);\r\n            const wickDownEnd = this.getCanvasPosition(this.candleWidth / 2, this.stick.low, this.x, this.y, this.candleWidth, this.candleHeight);\r\n            ctx.moveTo(wickDownStart.x, wickDownStart.y);\r\n            ctx.lineTo(wickDownEnd.x, wickDownEnd.y);\r\n            ctx.stroke();\r\n            const point = this.getCanvasPosition(0, this.stick.close, this.x, this.y, this.candleWidth, this.candleHeight);\r\n            const point2 = this.getCanvasPosition(this.candleWidth, this.stick.open, this.x, this.y, this.candleWidth, this.candleHeight);\r\n            ctx.rect(point.x, point.y, point2.x - point.x, point2.y - point.y);\r\n            ctx.stroke();\r\n            ctx.fill();\r\n            const wickUpStart = this.getCanvasPosition(this.candleWidth / 2, this.stick.open, this.x, this.y, this.candleWidth, this.candleHeight);\r\n            const wickUpEnd = this.getCanvasPosition(this.candleWidth / 2, this.stick.high, this.x, this.y, this.candleWidth, this.candleHeight);\r\n            ctx.moveTo(wickUpStart.x, wickUpStart.y);\r\n            ctx.lineTo(wickUpEnd.x, wickUpEnd.y);\r\n            ctx.stroke();\r\n        }\r\n    }\r\n\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n        ctx.beginPath();\r\n        ctx.fillStyle = this.BgColor;\r\n        ctx.strokeStyle = this.BgColor;\r\n        const wickDownStart = this.getCanvasPosition(this.candleWidth / 2, this.stick.close, this.x, this.y, this.candleWidth, this.candleHeight);\r\n        const wickDownEnd = this.getCanvasPosition(this.candleWidth / 2, this.stick.low, this.x, this.y, this.candleWidth, this.candleHeight);\r\n        ctx.moveTo(wickDownStart.x, wickDownStart.y);\r\n        ctx.lineTo(wickDownEnd.x, wickDownEnd.y);\r\n        ctx.stroke();\r\n        const point = this.getCanvasPosition(0, this.stick.close, this.x, this.y, this.candleWidth, this.candleHeight);\r\n        const point2 = this.getCanvasPosition(this.candleWidth, this.stick.open, this.x, this.y, this.candleWidth, this.candleHeight);\r\n        ctx.rect(point.x, point.y, point2.x - point.x, point2.y - point.y);\r\n        ctx.stroke();\r\n        ctx.fill();\r\n        const wickUpStart = this.getCanvasPosition(this.candleWidth / 2, this.stick.open, this.x, this.y, this.candleWidth, this.candleHeight);\r\n        const wickUpEnd = this.getCanvasPosition(this.candleWidth / 2, this.stick.high, this.x, this.y, this.candleWidth, this.candleHeight);\r\n        ctx.moveTo(wickUpStart.x, wickUpStart.y);\r\n        ctx.lineTo(wickUpEnd.x, wickUpEnd.y);\r\n        ctx.stroke();\r\n    }\r\n\r\n    override inPoint(x: number, y: number): boolean {\r\n        const point = this.getCanvasPosition(0, this.stick.low, this.x, this.y, this.candleWidth, this.candleHeight);\r\n        const point2 = this.getCanvasPosition(this.candleWidth, this.stick.high, this.x, this.y, this.candleWidth, this.candleHeight);\r\n        const rect = rectangle(point.x, point.y, point.y - point2.y, point2.x - point.x, 0);\r\n        if (isPointInsideRectangle({ x: x, y: y }, rect.first, rect.second, rect.third, rect.forth)) {\r\n            return true\r\n        }\r\n        return false\r\n    }\r\n    override move(x: number, y: number): void {\r\n        this.x = x,\r\n            this.y = y;\r\n    }\r\n\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent): void {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        if (ShapeObject.lastMove.x !== 0 && ShapeObject.lastMove.y !== 0) {\r\n            const deltaX = point.x - ShapeObject.lastMove.x;\r\n            const deltaY = point.y - ShapeObject.lastMove.y;\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n        }\r\n        ShapeObject.lastMove = point;\r\n    }\r\n\r\n    swap(a: number, b: number): [number, number] {\r\n        const c = b;\r\n        b = a;\r\n        a = c;\r\n        return [a, b]\r\n    }\r\n\r\n    getCanvasPosition(cartesianX: number, cartesianY: number, startX: number, startY: number, width: number, height: number): Point {\r\n        if (cartesianX >= 0 && cartesianX <= width && cartesianY >= 0 && cartesianY <= height) {\r\n            return { x: startX + cartesianX, y: startY - cartesianY }\r\n        } else {\r\n            const scaleX: number = width / (2 * Math.abs(cartesianX));\r\n            const scaleY: number = height / (2 * Math.abs(cartesianY));\r\n            const canvasX: number = startX + (cartesianX * scaleX);\r\n            const canvasY: number = startY - (cartesianY * scaleY);\r\n            return { x: canvasX, y: canvasY };\r\n        }\r\n    }\r\n\r\n    set candleStick(candleStick: Candlestick) {\r\n        this.stick = candleStick;\r\n        if (this.stick.open > this.stick.close) {\r\n            this.color = this.bullColor\r\n        } else {\r\n            this.color = this.bearColor;\r\n        }\r\n        if (this.stick.open < this.stick.close) {\r\n            [this.stick.open, this.stick.close] = this.swap(this.stick.open, this.stick.close);\r\n        }\r\n    }\r\n}\r\n\r\n","import { ElementRef } from \"@angular/core\";\r\nimport { ShapeObject } from \"./shape-object\";\r\nimport { Point } from \"../interfaces/point\";\r\nimport { angle, rectangle, distance, fillCircle, getNewParallelPoint, move } from \"../trigonometrics\";\r\nexport class CollateralObject extends ShapeObject {\r\n    private from: Point = { x: 0, y: 0 };\r\n    private to: Point = { x: 0, y: 0 };\r\n    private node: Point = { x: 0, y: 0 };\r\n    constructor(from: Point, to: Point, node: Point,color: string) {\r\n        super();\r\n        this.type = 'collateral';\r\n        this.from = from;\r\n        this.to = to;\r\n        this.node = node\r\n        this.color = color;\r\n    }\r\n\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.visible === true) {\r\n            if (this.shadow === true) {\r\n                ctx.shadowColor = ShapeObject.shadowColor;\r\n                ctx.shadowBlur = 6;\r\n                ctx.shadowOffsetX = 6;\r\n                ctx.shadowOffsetY = 6;\r\n            } else {\r\n                ctx.shadowBlur = 0;\r\n                ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n                ctx.shadowOffsetX = 0;\r\n                ctx.shadowOffsetY = 0;\r\n            }\r\n            \r\n            const distPara = distance(this.from.x, this.from.y, this.to.x, this.to.y);\r\n            const collateralPosition = getNewParallelPoint(this.from.x, this.from.y, this.to.x, this.to.y, distPara / 2, 10);\r\n            const collateralAngle = angle(collateralPosition.x, collateralPosition.y, this.node.x, this.node.y);\r\n            let moveNode = move(this.node.x, this.node.y, collateralAngle, -30);\r\n\r\n            const nodeAngle = angle(collateralPosition.x, collateralPosition.y, moveNode.x, moveNode.y);\r\n            const dist = distance(collateralPosition.x, collateralPosition.y, moveNode.x, moveNode.y);\r\n\r\n            const rect = rectangle(collateralPosition.x, collateralPosition.y, 2, dist, nodeAngle);\r\n            ctx.beginPath();\r\n            ctx.fillStyle = this.color;\r\n            ctx.moveTo(rect.first.x, rect.first.y);\r\n            ctx.lineTo(rect.second.x, rect.second.y);\r\n            ctx.lineTo(rect.third.x, rect.third.y);\r\n            ctx.lineTo(rect.forth.x, rect.forth.y);\r\n            ctx.lineTo(rect.first.x, rect.first.y);\r\n            ctx.fill();\r\n            fillCircle(ctx, collateralPosition.x, collateralPosition.y, 4, this.color);\r\n            fillCircle(ctx, moveNode.x, moveNode.y, 4, this.color);\r\n        }\r\n    }\r\n\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n       \r\n    }\r\n    override inPoint(x: number, y: number): boolean {\r\n       return false;\r\n    }\r\n    override move(x: number, y: number): void {\r\n       \r\n    }\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent): void {\r\n        \r\n    }\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        \r\n    }\r\n}","import { ElementRef, Injectable } from '@angular/core';\r\nimport { ShapeObject } from \"../class/shape-object\";\r\nimport { Point } from \"../interfaces/point\";\r\nimport { NodeObject } from '../class/node-object';\r\nimport { ConnectionObject } from '../class/connection-object';\r\nimport { LabelObject } from '../class/label-object';\r\nimport { angle, convertArray, distance, getTransformedPoint, map, move, toDegrees, toRadians } from '../trigonometrics';\r\nimport { DocumentObject, LineObject } from '../public-api';\r\nimport { RectangleObject } from '../class/rectangleObject';\r\nimport { ImageObject } from \"../class/image-object\";\r\nimport { CircleObject } from '../class/circleObject';\r\nimport { TriangleObject } from '../class/triangleObject';\r\nimport { MultiplesSidesObject } from '../class/multiplesSides';\r\nimport { ArcObject } from '../class/arcObject'\r\nimport { LineChartObject } from '../class/lineChartObject'\r\nimport { Candlestick } from \"../interfaces/candle-stick \";\r\nimport { CandlestickObject } from \"../class/Candlestick\";\r\nimport { CollateralObject } from '../class/collateral';\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NgGdService {\r\n  canvasObjects: any[] = [];\r\n  width = 800;\r\n  height = 600;\r\n  bkColor: string = \"#000000\";\r\n  frColor: string = \"#ffffff\";\r\n  clicks: { shape: ShapeObject, action: string }[] = [];\r\n  constructor() { }\r\n\r\n  renumberZOrder() {\r\n    const ret = convertArray(this.canvasObjects.sort((a, b) => a.zOrder - b.zOrder) as ShapeObject[]);\r\n    for (let index = 0; index < ret.length; index++) {\r\n      const element = ret[index];\r\n      (this.canvasObjects[index] as ShapeObject).zOrder = element;\r\n    }\r\n  }\r\n\r\n  start(width: number, height: number) {\r\n    if (this.canvasObjects.length === 0) {\r\n      this.canvasObjects.push(new DocumentObject(width, height));\r\n    } else {\r\n      (this.getItem(0) as unknown as DocumentObject).setSize(width, height);\r\n    }\r\n  }\r\n\r\n  getLabels(): LabelObject[] {\r\n    let labels: LabelObject[] = [];\r\n    this.canvasObjects.forEach(element => {\r\n      if (element instanceof LabelObject) {\r\n        labels.push(element)\r\n      }\r\n    });\r\n    return labels;\r\n  }\r\n\r\n\r\n  getConnections(): ConnectionObject[] {\r\n    let connections: ConnectionObject[] = [];\r\n    this.canvasObjects.forEach(element => {\r\n      if (element instanceof ConnectionObject) {\r\n        connections.push(element)\r\n      }\r\n    });\r\n    return connections;\r\n  }\r\n\r\n  getNodes(): NodeObject[] {\r\n    let nodes: NodeObject[] = [];\r\n    this.canvasObjects.forEach(element => {\r\n      if (element instanceof NodeObject) {\r\n        nodes.push(element)\r\n      }\r\n    });\r\n    return nodes;\r\n  }\r\n\r\n  castingMultiplesSides(id: number): MultiplesSidesObject {\r\n    for (let index = 0; index < this.canvasObjects.length; index++) {\r\n      const element = this.canvasObjects[index];\r\n      if (element.id === id) {\r\n        if (!(element instanceof MultiplesSidesObject)) {\r\n          console.log('Error type in casting rectangle id:%s as type:%s', id, element.type)\r\n        }\r\n        return element as MultiplesSidesObject;\r\n      }\r\n    }\r\n    return <MultiplesSidesObject>{}\r\n  }\r\n\r\n  castingLine(id: number): LineObject {\r\n    for (let index = 0; index < this.canvasObjects.length; index++) {\r\n      const element = this.canvasObjects[index];\r\n      if (element.id === id) {\r\n        if (!(element instanceof LineObject)) {\r\n          console.log('Error type in casting rectangle id:%d as type %s', id, element.type)\r\n        }\r\n        return element as LineObject;\r\n      }\r\n    }\r\n    return <LineObject>{}\r\n  }\r\n\r\n\r\n  castingRectangle(id: number): RectangleObject {\r\n    for (let index = 0; index < this.canvasObjects.length; index++) {\r\n      const element = this.canvasObjects[index];\r\n      if (element.id === id) {\r\n        if (!(element instanceof RectangleObject)) {\r\n          console.log('Error type in casting rectangle id:%d as type %s', id, element.type)\r\n        }\r\n        return element as RectangleObject;\r\n      }\r\n    }\r\n    return <RectangleObject>{}\r\n  }\r\n\r\n  castingCircle(id: number): CircleObject {\r\n    for (let index = 0; index < this.canvasObjects.length; index++) {\r\n      const element = this.canvasObjects[index];\r\n      if (element.id === id) {\r\n        if (!(element instanceof CircleObject)) {\r\n          console.log('Error type in casting circle id:&d as type %s', id, element.type)\r\n        }\r\n        return element as CircleObject;\r\n      }\r\n    }\r\n    return <CircleObject>{}\r\n  }\r\n\r\n  castingNode(id: number): NodeObject {\r\n    for (let index = 0; index < this.canvasObjects.length; index++) {\r\n      const element = this.canvasObjects[index];\r\n      if (element.id === id) {\r\n        if (!(element instanceof NodeObject)) {\r\n          console.log('Error type in casting node id:%d as type:%s', id, element.type)\r\n        }\r\n        return element as NodeObject;\r\n      }\r\n    }\r\n    return <NodeObject>{}\r\n  }\r\n\r\n  castingLabel(id: number): LabelObject {\r\n    for (let index = 0; index < this.canvasObjects.length; index++) {\r\n      const element = this.canvasObjects[index];\r\n      if (element.id === id) {\r\n        if (!(element instanceof LabelObject)) {\r\n          console.log('Error type in casting label id:%d as type:%s', id, element.type);\r\n        }\r\n        return element as LabelObject;\r\n      }\r\n    }\r\n    return <LabelObject>{}\r\n  }\r\n\r\n  castingConnection(id: number): ConnectionObject {\r\n    for (let index = 0; index < this.canvasObjects.length; index++) {\r\n      const element = this.canvasObjects[index];\r\n      if (element.id === id) {\r\n        if (!(element instanceof ConnectionObject)) {\r\n          console.log('Error type in casting connection id:%d, as type:%s ', id, element.type);\r\n        }\r\n        return element as ConnectionObject;\r\n      }\r\n    }\r\n    return <ConnectionObject>{}\r\n  }\r\n\r\n  casting(id: number): ConnectionObject | NodeObject | LabelObject | ShapeObject | RectangleObject | CircleObject | TriangleObject | MultiplesSidesObject | LineObject | undefined {\r\n    for (let index = 0; index < this.canvasObjects.length; index++) {\r\n      if (this.canvasObjects[index].id === id) {\r\n        return this.canvasObjects[index];\r\n      }\r\n    }\r\n    return undefined;\r\n  }\r\n\r\n  getMousePoint(ctx: CanvasRenderingContext2D, x: number, y: number): Point {\r\n    return getTransformedPoint(ctx, x, y);\r\n  }\r\n\r\n  setDarkMode() {\r\n    this.bkColor = \"#000000\";\r\n    this.frColor = \"#ffffff\";\r\n    this.getItem(0).BgColor = this.bkColor;\r\n    this.getItem(0).FgColor = this.frColor;\r\n    this.getItem(0).shadowColor = this.frColor;\r\n  }\r\n\r\n  setLightMode() {\r\n    this.bkColor = \"#ffffff\";\r\n    this.frColor = \"#000000\";\r\n    this.getItem(0).BgColor = this.bkColor;\r\n    this.getItem(0).FgColor = this.frColor;\r\n    this.getItem(0).shadowColor = this.frColor;\r\n  }\r\n\r\n  canvasSetSize(width: number, height: number) {\r\n    this.width = width;\r\n    this.height = height;\r\n  }\r\n\r\n  resetMouse() {\r\n    (this.canvasObjects[0] as ShapeObject).resetMouse();\r\n  }\r\n\r\n  clear(ctx: CanvasRenderingContext2D) {\r\n    ctx.save();\r\n    ctx.setTransform(1, 0, 0, 1, 0, 0);\r\n    ctx.fillStyle = this.bkColor;\r\n    ctx.fillRect(0, 0, this.width, this.height);\r\n    ctx.restore();\r\n  }\r\n\r\n  findDocument(item: any) {\r\n    return item.type === \"Document\"\r\n  }\r\n\r\n  clearObjects() {\r\n    const document = this.canvasObjects.find(this.findDocument);\r\n    this.canvasObjects = [];\r\n    ShapeObject.resetIds();\r\n    if (document !== undefined) {\r\n      this.canvasObjects.push(document);\r\n    }\r\n  }\r\n\r\n  addCollateral(from: Point, to: Point, node: Point,color:string) {\r\n    const newCollateral = new CollateralObject(from, to, node,color);\r\n    this.canvasObjects.push(<ShapeObject>newCollateral);\r\n    return newCollateral;\r\n  }\r\n\r\n  addLineChart(point: Point, values: number[], dist: number, color: string | CanvasGradient | CanvasPattern, marks?: boolean, shadow?: boolean): LineChartObject {\r\n    const newLineChart = new LineChartObject(point, values, dist, color, marks, shadow);\r\n    this.canvasObjects.push(<ShapeObject>newLineChart);\r\n    return newLineChart;\r\n  }\r\n\r\n  addPieChart(ctx: CanvasRenderingContext2D, point: Point, size: number, values: number[], color: (string | CanvasGradient | CanvasPattern)[], distance: number, start?: number, labels?: string[]) {\r\n    let beginGrade = 0;\r\n    if (start) {\r\n      beginGrade += start;\r\n    }\r\n    for (let index = 0; index < values.length; index++) {\r\n      const newPoint = move(point.x, point.y, toRadians(beginGrade + values[index] / 2), distance)\r\n      this.addArc(newPoint.x, newPoint.y, size, beginGrade, beginGrade + values[index], color[index]);\r\n      beginGrade += values[index];\r\n    }\r\n    if (labels) {\r\n      beginGrade = 0;\r\n      if (start) {\r\n        beginGrade += start;\r\n      }\r\n      for (let index = 0; index < labels.length; index++) {\r\n        const newPoint = move(point.x, point.y, toRadians(beginGrade + values[index] / 2), distance + size + size / 2)\r\n        this.addLabel(newPoint, labels[index], size / 2, 0);\r\n        beginGrade += values[index];\r\n      }\r\n    }\r\n  }\r\n\r\n  addGraphBars(ctx: CanvasRenderingContext2D, point: Point, width: number, values: number[], color: string[], distance: number) {\r\n    let pos = 0;\r\n    for (let index = 0; index < values.length; index++) {\r\n      const element = values[index];\r\n      this.addRectangle({ x: point.x + pos, y: point.y }, width, element, 0, color[index], color[index]);\r\n      pos = width * (index + 1) + distance * (index + 1);\r\n    }\r\n\r\n  }\r\n\r\n  addAxisY(ctx: CanvasRenderingContext2D, point: Point, dist: number, steps: number, labels: string[], fontSize: number, angleGrades?: number, distance?: number, adjustLabel?: Point[], color?: string | CanvasGradient | CanvasPattern, shadow?: boolean) {\r\n    let ang = 0;\r\n    let distance2 = 0;\r\n    let adjust = { x: 0, y: 0 };\r\n    if (angleGrades) {\r\n      ang = angleGrades;\r\n    }\r\n    if (distance) {\r\n      distance2 = distance;\r\n    }\r\n    this.addLine(point, { x: point.x, y: point.y - dist }, steps, color, shadow);\r\n    const increment = dist / steps;\r\n    labels.forEach((element, index) => {\r\n      if (adjustLabel && adjustLabel[index]) {\r\n        adjust = adjustLabel[index];\r\n      }\r\n      else {\r\n        adjust = { x: 0, y: 0 };\r\n      }\r\n      let label = this.addLabel({ x: point.x + adjust.x, y: point.y + fontSize / 2 - increment * index + distance2 + adjust.y }, element, fontSize, ang, shadow);\r\n      const size = label.getSizeText(ctx);\r\n      label.x -= label.getSizeText(ctx) + fontSize;\r\n    });\r\n  }\r\n\r\n  addAxisX(ctx: CanvasRenderingContext2D, point: Point, dist: number, steps: number, labels: string[], fontSize: number, angleGrades?: number, distance?: number, adjustLabel?: Point[], color?: string | CanvasGradient | CanvasPattern, shadow?: boolean) {\r\n    let distance2 = 0;\r\n    let ang = 0;\r\n    let adjust = { x: 0, y: 0 };\r\n    if (distance) {\r\n      distance2 = distance;\r\n    }\r\n    if (angleGrades) {\r\n      ang = angleGrades;\r\n    }\r\n    this.addLine(point, { x: point.x + dist, y: point.y }, steps, color, shadow);\r\n    const increment = dist / steps;\r\n    labels.forEach((element, index) => {\r\n      if (adjustLabel && adjustLabel[index]) {\r\n        adjust = adjustLabel[index];\r\n      }\r\n      else {\r\n        adjust = { x: 0, y: 0 };\r\n      }\r\n      let label = this.addLabel({ x: point.x + increment * index + adjust.x, y: point.y + fontSize + distance2 + adjust.y }, element, fontSize, ang, shadow);\r\n      const size = label.getSizeText(ctx);\r\n      label.x += increment / 2 - size;\r\n    });\r\n  }\r\n\r\n  addCandleChart(point: Point, candleStick: Candlestick[], width: number, height: number, bullColor: string | CanvasGradient | CanvasPattern, bearColor: string | CanvasGradient | CanvasPattern, distance: number, shadow?: boolean) {\r\n    candleStick.forEach((element, index) => {\r\n      const cPoint: Point = { x: point.x + distance * index, y: point.y };\r\n      const newCandleStick = new CandlestickObject(cPoint, element, width, height, bullColor, bearColor, shadow);\r\n      this.canvasObjects.push(<ShapeObject>newCandleStick);\r\n    });\r\n  }\r\n\r\n  addCandleStick(point: Point, candleStick: Candlestick, width: number, height: number, bullColor: string | CanvasGradient | CanvasPattern, bearColor: string | CanvasGradient | CanvasPattern, shadow?: boolean): CandlestickObject {\r\n    const newCandleStick = new CandlestickObject(point, candleStick, width, height, bullColor, bearColor, shadow);\r\n    this.canvasObjects.push(<ShapeObject>newCandleStick);\r\n    return newCandleStick;\r\n  }\r\n\r\n  addArc(x: number, y: number, size: number, beginGrades: number, endGrades: number, color?: string | CanvasGradient | CanvasPattern, borderColor?: string | CanvasGradient | CanvasPattern, shadow?: boolean): ArcObject {\r\n    const newArc = new ArcObject(x, y, size, beginGrades, endGrades, color, borderColor, shadow);\r\n    this.canvasObjects.push(<ShapeObject>newArc);\r\n    return newArc;\r\n  }\r\n\r\n  addMultiplesSides(point: Point, sides: number, radius: number, color?: string | CanvasGradient | CanvasPattern, borderColor?: string | CanvasGradient | CanvasPattern, angle?: number, shadow?: boolean): MultiplesSidesObject {\r\n    const newMultiplesSides = new MultiplesSidesObject(point.x, point.y, sides, radius, color, borderColor, angle, shadow);\r\n    this.canvasObjects.push(<ShapeObject>newMultiplesSides);\r\n    return newMultiplesSides;\r\n  }\r\n\r\n  addTriangle(first: Point, second: Point, third: Point, color?: string | CanvasGradient | CanvasPattern, borderColor?: string | CanvasGradient | CanvasPattern, shadow?: boolean): TriangleObject {\r\n    const newTriangle = new TriangleObject(first, second, third, color, borderColor, shadow);\r\n    this.canvasObjects.push(<ShapeObject>newTriangle);\r\n    return newTriangle;\r\n  }\r\n\r\n  addCircle(point: Point, radius: number, color?: string | CanvasGradient | CanvasPattern, borderColor?: string | CanvasGradient | CanvasPattern, shadow?: boolean): CircleObject {\r\n    const newCircle = new CircleObject(point.x, point.y, radius, color, borderColor, shadow);\r\n    this.canvasObjects.push((<ShapeObject>newCircle));\r\n    return newCircle;\r\n  }\r\n\r\n  addRectangle(point: Point, width: number, height: number, angle: number, color?: string | CanvasGradient | CanvasPattern, borderColor?: string | CanvasGradient | CanvasPattern, shadow?: boolean): RectangleObject {\r\n    const newRectangle = new RectangleObject(point.x, point.y, width, height, angle, color, borderColor, shadow);\r\n    this.canvasObjects.push((<ShapeObject>newRectangle));\r\n    return newRectangle\r\n  }\r\n\r\n  addImage(point: Point, width: number, height: number, borderColor?: string | CanvasGradient | CanvasPattern, shadow?: boolean, angleLabel?: number, distanceLabel?: number, text?: string): ImageObject {\r\n    const newImage = new ImageObject(point.x, point.y, width, height, borderColor, shadow, angleLabel, distanceLabel, text);\r\n    this.canvasObjects.push((<ShapeObject>newImage));\r\n    return newImage\r\n  }\r\n\r\n  addNode(point: Point, name: string, description?: string, net?: boolean, angleLabel?: number, distanceLabel?: number, shadow?: boolean, color?: string | CanvasGradient | CanvasPattern): NodeObject {\r\n    const newNode = new NodeObject(point.x, point.y, name, 20, description, net, angleLabel, distanceLabel, shadow, color);\r\n    this.canvasObjects.push((<ShapeObject>newNode));\r\n    return newNode;\r\n  }\r\n\r\n  addConnection(point: Point, toPoint: Point, color?: string | CanvasGradient | CanvasPattern, label?: string, shadow?: boolean, zOrder?: number): ConnectionObject {\r\n    let newConnection = new ConnectionObject(point.x, point.y, toPoint.x, toPoint.y, color, label, shadow, zOrder);\r\n    newConnection.BgColor = this.bkColor;\r\n    newConnection.FgColor = this.frColor\r\n    this.canvasObjects.push((<ShapeObject>newConnection));\r\n    return newConnection;\r\n  }\r\n\r\n  addLine(point: Point, toPoint: Point, steps?: number, color?: string | CanvasGradient | CanvasPattern, shadow?: boolean): LineObject {\r\n    const newLine = new LineObject(point.x, point.y, toPoint.x, toPoint.y, steps, color, shadow);\r\n    this.canvasObjects.push((<ShapeObject>newLine));\r\n    return newLine;\r\n  }\r\n\r\n  addLabel(point: Point, text: string, fontSize: number, angle: number, shadow?: boolean): LabelObject {\r\n    const newLabel = new LabelObject(point.x, point.y, text, fontSize, angle, shadow);\r\n    this.canvasObjects.push(newLabel)\r\n    return newLabel;\r\n  }\r\n\r\n  click(ctx: CanvasRenderingContext2D, event: MouseEvent): { shape: ShapeObject, action: string }[] {\r\n    const currentTransformedCursor = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n    this.clicks = this.touch(currentTransformedCursor, ctx);\r\n    return this.clicks;\r\n  }\r\n\r\n  tap(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): { shape: ShapeObject, action: string }[] {\r\n    const offSet = this.offSet(canvas, event);\r\n    const currentTransformedCursor = getTransformedPoint(ctx, offSet.offSetX, offSet.offSetY);\r\n    this.clicks = this.touch(currentTransformedCursor, ctx);\r\n    return this.clicks;\r\n  }\r\n\r\n  offSet(canvas: ElementRef, event: TouchEvent): { offSetX: number, offSetY: number } {\r\n    const rect = canvas.nativeElement.getBoundingClientRect(); // Obtén la posición del canvas en la ventana\r\n    const touch = event.touches.item(0)!;\r\n    const offsetX = touch.clientX - rect.left;\r\n    const offsetY = touch.clientY - rect.top;\r\n    return { offSetX: offsetX, offSetY: offsetY }\r\n  }\r\n\r\n  getClicks() {\r\n    return this.clicks;\r\n  }\r\n\r\n  touch(position: Point, ctx?: CanvasRenderingContext2D): { shape: ShapeObject, action: string }[] {\r\n    let onclick: { shape: ShapeObject, action: string }[] = []\r\n    this.canvasObjects.forEach((element) => {\r\n      if (element.type !== 'connection' && element.type !== 'line') {\r\n        if (element.type === 'node') {\r\n          if ((element as NodeObject).inPointLabel(position.x, position.y) === true) {\r\n            onclick.push({ shape: element, action: 'inPointLabel' });\r\n          }\r\n        }\r\n        if (element.type === 'image') {\r\n          if ((element as ImageObject).inPointLabel(position.x, position.y) === true) {\r\n            onclick.push({ shape: element, action: 'inPointLabel' });\r\n          }\r\n        }\r\n        if (element.inPoint(position.x, position.y)) {\r\n          onclick.push({ shape: element, action: 'inPoint' });\r\n        }\r\n      }\r\n      if (element.type === 'connection') {\r\n        if ((element as ConnectionObject).inPointXY(position.x, position.y)) {\r\n          onclick.push({ shape: element, action: 'inPointXY' });\r\n        }\r\n        if ((element as ConnectionObject).inPointToXY(position.x, position.y)) {\r\n          onclick.push({ shape: element, action: 'inPointToXY' });\r\n        }\r\n        if ((element as ConnectionObject).inRectangle(position.x, position.y)) {\r\n          onclick.push({ shape: element, action: 'inRectangle' });\r\n        }\r\n        if ((element as ConnectionObject).inLabel(position.x, position.y)) {\r\n          onclick.push({ shape: element, action: 'inLabel' });\r\n        }\r\n      }\r\n      if (element.type === 'line') {\r\n        if ((element as LineObject).inPointXY(position.x, position.y)) {\r\n          onclick.push({ shape: element, action: 'inPointXY' });\r\n        }\r\n        if ((element as LineObject).inPointToXY(position.x, position.y)) {\r\n          onclick.push({ shape: element, action: 'inPointToXY' });\r\n        }\r\n        if ((element as LineObject).inRectangle(position.x, position.y)) {\r\n          onclick.push({ shape: element, action: 'inRectangle' });\r\n        }\r\n      }\r\n    });\r\n    onclick.sort((a, b) => b.shape.zOrder - a.shape.zOrder);\r\n    return onclick;\r\n  }\r\n\r\n  draw(ctx: CanvasRenderingContext2D) {\r\n    this.canvasObjects.sort((a, b) => a.zOrder - b.zOrder)\r\n    this.canvasObjects.forEach((element) => {\r\n      element.drawShape(ctx);\r\n    })\r\n  };\r\n\r\n  zoomInPoint(ctx: CanvasRenderingContext2D, x: number, y: number, zoom: number) {\r\n    ctx.translate(x, y);\r\n    ctx.scale(zoom, zoom);\r\n    ctx.translate(-x, -y);\r\n  }\r\n\r\n  getItem(id: number): ShapeObject {\r\n    for (let index = 0; index < this.canvasObjects.length; index++) {\r\n      const element = this.canvasObjects[index];\r\n      if (element.id === id) {\r\n        return element;\r\n      }\r\n    }\r\n    console.log('Error item not found id', id);\r\n    return <ShapeObject>{ id: 0, color: \"\", name: \"error\" };\r\n  }\r\n\r\n  findLabelByText(text: string): LabelObject {\r\n    for (let index = 0; index < this.canvasObjects.length; index++) {\r\n      const element = this.canvasObjects[index];\r\n      if (element.type === 'label' && element.text === text) {\r\n        return element as LabelObject\r\n      }\r\n    }\r\n    console.log('Error no find label:', text);\r\n    return <LabelObject>{}\r\n  }\r\n\r\n  findByName(text: string): ArcObject | CandlestickObject | CircleObject | ConnectionObject | LabelObject | LineChartObject | ShapeObject {\r\n    for (let index = 0; index < this.canvasObjects.length; index++) {\r\n      const element = this.canvasObjects[index];\r\n      if (element.name === text) {\r\n        return element\r\n      }\r\n    }\r\n    console.log('Error no find element by name:', text);\r\n    return <ShapeObject>{}\r\n  }\r\n\r\n  map(number: number, startInput: number, stopInput: number, startOutput: number, stopOutput: number): number {\r\n    return map(number, startInput, stopInput, startOutput, stopOutput);\r\n  }\r\n\r\n  move(point: Point, angle: number, distance: number): Point {\r\n    return move(point.x, point.y, angle, distance);\r\n  }\r\n\r\n  toRadians(grades: number): number {\r\n    return toRadians(grades);\r\n  }\r\n\r\n  toDegrees(radian: number): number {\r\n    return toDegrees(radian);\r\n  }\r\n\r\n  distance(from: Point, to: Point): number {\r\n    return distance(from.x, from.y, to.x, to.y);\r\n  }\r\n\r\n  angle(from: Point, to: Point): number {\r\n    return angle(from.x, from.y, to.x, to.y);\r\n  }\r\n\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n    selector: 'lib-ng-gd',\r\n    template: `\r\n    <p>\r\n      ng-gd works!\r\n    </p>\r\n  `,\r\n    styles: [],\r\n    standalone: false\r\n})\r\nexport class NgGdComponent {\r\n\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { NgGdComponent } from './ng-gd.component';\r\nimport {NgGdService} from  './ng-gd.service';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    NgGdComponent\r\n  ],\r\n  imports: [\r\n  ],\r\n  providers:[NgGdService],\r\n  exports: [\r\n    NgGdComponent\r\n  ]\r\n})\r\nexport class NgGdModule { }\r\n","import { ElementRef } from \"@angular/core\";\r\nimport { ShapeObject } from \"./shape-object\";\r\n\r\n\r\nexport class DocumentObject extends ShapeObject {\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        throw new Error(\"Method not implemented.\");\r\n    }\r\n\r\n    constructor(width: number, height: number) {\r\n        super();\r\n        ShapeObject.width = width;\r\n        ShapeObject.height = height;\r\n        this.type = \"Document\"\r\n        this.zOrder = 0;\r\n    }\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n    }\r\n    inverseShape(ctx: CanvasRenderingContext2D): void {\r\n    }\r\n    override inPoint(x: number, y: number): boolean {\r\n        return false;\r\n    }\r\n    override move(x: number, y: number): void {\r\n    }\r\n    moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent): void {\r\n    }\r\n    setSize(width: number, height: number) {\r\n        ShapeObject.width = width;\r\n        ShapeObject.height = height;\r\n    }\r\n}\r\n","import { ElementRef } from '@angular/core';\r\nimport { angle, distance, getNewParallelPoint, getTransformedPoint, isPointInsideRectangle, move, rectangle } from '../trigonometrics';\r\nimport { ShapeObject } from './shape-object'\r\nexport class LineObject extends ShapeObject {\r\n    override moveTouch(canvas: ElementRef, ctx: CanvasRenderingContext2D, event: TouchEvent): void {\r\n        const touch = event.touches[0];\r\n        const rect = canvas.nativeElement.getBoundingClientRect();\r\n        const offsetX = touch.clientX - rect.left;\r\n        const offsetY = touch.clientY - rect.top;\r\n        const point = getTransformedPoint(ctx, offsetX, offsetY);\r\n        this.move(point.x, point.y);\r\n    }\r\n    toX: number;\r\n    toY: number;\r\n    steps: number = 0;\r\n    constructor(x: number, y: number, toX: number, toY: number, steps?: number, color?: string | CanvasGradient | CanvasPattern, shadow?: boolean) {\r\n        super();\r\n        this.x = x;\r\n        this.y = y;\r\n        this.toX = toX;\r\n        this.toY = toY;\r\n        this.type = 'line';\r\n        if (steps) {\r\n            this.steps = steps;\r\n        }\r\n        if (color !== undefined) {\r\n            this.color = color;\r\n        } else {\r\n            this.color = this.FgColor;\r\n        }\r\n        if (shadow) {\r\n            this.shadow = shadow;\r\n        }\r\n    }\r\n    override drawShape(ctx: CanvasRenderingContext2D): void {\r\n        if (this.visible === true) {\r\n            if (this.shadow === true) {\r\n                ctx.shadowColor = ShapeObject.shadowColor;\r\n                ctx.shadowBlur = 6;\r\n                ctx.shadowOffsetX = 6;\r\n                ctx.shadowOffsetY = 6;\r\n            } else {\r\n                ctx.shadowBlur = 0;\r\n                ctx.shadowColor = 'rgba(0, 0, 0, 0)';\r\n                ctx.shadowOffsetX = 0;\r\n                ctx.shadowOffsetY = 0;\r\n            }\r\n            ctx.fillStyle = this.color;\r\n            ctx.strokeStyle = this.color;\r\n            const nodeAngle = angle(this.x, this.y, this.toX, this.toY);\r\n            const toNodeAngle = angle(this.toX, this.toY, this.x, this.y);\r\n            const dist = distance(this.x, this.y, this.toX, this.toY);\r\n            const rect = rectangle(this.x, this.y, 2, dist, nodeAngle);\r\n            ctx.beginPath();\r\n            ctx.moveTo(rect.first.x, rect.first.y);\r\n            ctx.lineTo(rect.second.x, rect.second.y);\r\n            ctx.lineTo(rect.third.x, rect.third.y);\r\n            ctx.lineTo(rect.forth.x, rect.forth.y);\r\n            ctx.lineTo(rect.first.x, rect.first.y);\r\n            ctx.closePath();\r\n            ctx.fill();\r\n            const stepsPoint = dist / this.steps;\r\n            for (let index = 0; index <= this.steps; index++) {\r\n                const parPoint = getNewParallelPoint(this.x, this.y, this.toX, this.toY, stepsPoint * index, 1);\r\n                const secParPoint = move(parPoint.x, parPoint.y, nodeAngle - Math.PI / 2, 5);\r\n                ctx.beginPath();\r\n                ctx.moveTo(parPoint.x, parPoint.y);\r\n                ctx.lineTo(secParPoint.x, secParPoint.y);\r\n                ctx.stroke();\r\n            }\r\n        }\r\n    }\r\n    override inverseShape(ctx: CanvasRenderingContext2D): void {\r\n        ctx.fillStyle = this.BgColor;\r\n        ctx.strokeStyle = this.BgColor;\r\n        const nodeAngle = angle(this.x, this.y, this.toX, this.toY);\r\n        const toNodeAngle = angle(this.toX, this.toY, this.x, this.y);\r\n        let moveNode = move(this.x, this.y, nodeAngle, 30);\r\n        let moveToNode = move(this.toX, this.toY, toNodeAngle, 30);\r\n        const dist = distance(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y);\r\n        const rect = rectangle(moveNode.x, moveNode.y, 2, dist, nodeAngle);\r\n        ctx.beginPath();\r\n        ctx.moveTo(rect.first.x, rect.first.y);\r\n        ctx.lineTo(rect.second.x, rect.second.y);\r\n        ctx.lineTo(rect.third.x, rect.third.y);\r\n        ctx.lineTo(rect.forth.x, rect.forth.y);\r\n        ctx.lineTo(rect.first.x, rect.first.y);\r\n        ctx.closePath();\r\n        ctx.fill();\r\n    }\r\n    override inPoint(x: number, y: number): boolean {\r\n        const nodeAngle = angle(this.x, this.y, this.toX, this.toY);\r\n        const toNodeAngle = angle(this.toX, this.toY, this.x, this.y);\r\n        let moveNode = move(this.x, this.y, nodeAngle, 30);\r\n        let moveToNode = move(this.toX, this.toY, toNodeAngle, 30);\r\n        if (distance(x, y, moveNode.x, moveNode.y) <= 4) {\r\n            return true;\r\n        }\r\n        if (distance(x, y, moveToNode.x, moveToNode.y) <= 4) {\r\n            return true;\r\n        }\r\n        const rectangleArea = rectangle(moveNode.x, moveNode.y, 2, distance(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y), nodeAngle)\r\n        if (isPointInsideRectangle({ x: x, y: y }, rectangleArea.first, rectangleArea.second, rectangleArea.third, rectangleArea.forth)) {\r\n            return true\r\n        }\r\n        return false;\r\n    }\r\n\r\n    inPointXY(x: number, y: number): boolean {\r\n        if (distance(x, y, this.x, this.y) <= 4) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    inPointToXY(x: number, y: number): boolean {\r\n        if (distance(x, y, this.toX, this.toY) <= 4) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    inRectangle(x: number, y: number): boolean {\r\n        const nodeAngle = angle(this.x, this.y, this.toX, this.toY);\r\n        const toNodeAngle = angle(this.toX, this.toY, this.x, this.y);\r\n        let moveNode = move(this.x, this.y, nodeAngle, 40);\r\n        let moveToNode = move(this.toX, this.toY, toNodeAngle, 40);\r\n        const rectangleArea = rectangle(moveNode.x, moveNode.y, 2, distance(moveNode.x, moveNode.y, moveToNode.x, moveToNode.y), nodeAngle)\r\n        if (isPointInsideRectangle({ x: x, y: y }, rectangleArea.first, rectangleArea.second, rectangleArea.third, rectangleArea.forth)) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n    override move(x: number, y: number): void {\r\n        if (!(ShapeObject.lastMove.x === 0 && ShapeObject.lastMove.y === 0)) {\r\n            const deltaX = x - ShapeObject.lastMove.x;\r\n            const deltaY = y - ShapeObject.lastMove.y;\r\n            this.x += deltaX;\r\n            this.y += deltaY;\r\n            this.toX += deltaX;\r\n            this.toY += deltaY;\r\n        }\r\n        ShapeObject.lastMove = { x: x, y: y };\r\n    }\r\n    override moveMouse(ctx: CanvasRenderingContext2D, event: MouseEvent): void {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        this.move(point.x, point.y)\r\n    }\r\n\r\n    moveMouseXY(ctx: CanvasRenderingContext2D, event: MouseEvent) {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        this.x = point.x;\r\n        this.y = point.y;\r\n    }\r\n\r\n    moveMouseToXY(ctx: CanvasRenderingContext2D, event: MouseEvent) {\r\n        const point = getTransformedPoint(ctx, event.offsetX, event.offsetY);\r\n        this.toX = point.x;\r\n        this.toY = point.y;\r\n    }\r\n}\r\n","/*\r\n * Public API Surface of ng-gd\r\n */\r\n\r\nimport { from } from 'rxjs';\r\n\r\nexport * from './lib/ng-gd.service';\r\nexport * from './lib/ng-gd.component';\r\nexport * from './lib/ng-gd.module';\r\nexport * from './class/connection-object';\r\nexport * from './class/label-object';\r\nexport * from './class/node-object';\r\nexport * from './class/shape-object';\r\nexport * from './class/document-object';\r\nexport * from './class/rectangleObject';\r\nexport * from './class/circleObject';\r\nexport * from './class/triangleObject';\r\nexport * from './class/multiplesSides';\r\nexport * from './class/arcObject';\r\nexport * from './class/lineChartObject';\r\nexport * from './class/Candlestick';\r\nexport * from  './class/lineObject';\r\nexport * from './class/image-object'\r\nexport * from './interfaces/point';\r\nexport * from './interfaces/candle-stick '\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAGsB,WAAW,CAAA;AACvB,IAAA,OAAO,KAAK,GAAW,CAAC,CAAC;AACzB,IAAA,OAAO,SAAS,GAAW,CAAC;AAC5B,IAAA,OAAO,OAAO,GAA0C,SAAS;AACjE,IAAA,OAAO,OAAO,GAA2C,SAAS;AACnE,IAAA,OAAO,KAAK,GAAG,CAAC;AAChB,IAAA,OAAO,MAAM,GAAG,CAAC;AACjB,IAAA,OAAO,QAAQ,GAAO,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;AAC/B,IAAA,OAAO,WAAW,GAAQ,SAAS;IAC1C,EAAE,GAAW,CAAC;IACd,CAAC,GAAG,CAAC;IACL,CAAC,GAAG,CAAC;IACL,IAAI,GAAG,EAAE;IACT,MAAM,GAAG,CAAC;IACV,OAAO,GAAG,IAAI;IACd,UAAU,GAAC,EAAE;IACb,IAAI,GAAG,EAAE;IACT,UAAU,GAAC,EAAE;IACb,aAAa,GAAC,EAAE;IAChB,aAAa,GAAC,EAAE;IAChB,MAAM,GAAS,KAAK;IACpB,KAAK,GAAyC,EAAE;AAChD,IAAA,WAAA,GAAA;QACE,WAAW,CAAC,KAAK,EAAE;AACnB,QAAA,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,KAAK;;IAQ7B,SAAS,CAAC,KAAa,EAAE,IAAY,EAAA;AACnC,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI;AACxC,QAAA,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI;;IAG1C,OAAO,GAAA;QACL,WAAW,CAAC,SAAS,EAAE;AACvB,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,SAAS;;IAGrC,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,SAAS;;IAGrC,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;;IAGjB,UAAU,GAAA;QACR,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,SAAS,EAAE;YACvC,IAAI,CAAC,MAAM,EAAE;;;IAIjB,UAAU,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,MAAM,EAAE;;;IAIjB,IAAI,OAAO,CAAC,OAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;;AAGxB,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,IAAI,CAAC,OAAO;;IAGrB,IAAI,KAAK,CAAC,KAA6C,EAAA;AACrD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;AAGpB,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,KAAK;;AAGnB,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,IAAI;;IAGlB,IAAI,IAAI,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;AAGlB,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,WAAW,CAAC,OAAO;;IAG5B,IAAI,OAAO,CAAC,KAA6C,EAAA;AACvD,QAAA,WAAW,CAAC,OAAO,GAAG,KAAK;;AAG7B,IAAA,IAAI,OAAO,GAAA;QACT,OAAO,WAAW,CAAC,OAAO;;IAG5B,IAAI,OAAO,CAAC,KAA6C,EAAA;AACvD,QAAA,WAAW,CAAC,OAAO,GAAG,KAAK;;AAG7B,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,WAAW,CAAC,WAAW;;IAGhC,IAAI,WAAW,CAAC,KAAa,EAAA;AAC3B,QAAA,WAAW,CAAC,WAAW,GAAG,KAAK;;IAGjC,UAAU,GAAA;AACR,QAAA,WAAW,CAAC,QAAQ,GAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC;;AAGhC,IAAA,OAAO,QAAQ,GAAA;AACb,QAAA,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;AACtB,QAAA,WAAW,CAAC,SAAS,GAAG,CAAC;;;;AClHb,SAAA,MAAM,CAAC,MAAiB,EAAC,KAAgB,EAAA;IACvD,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE;IAClC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;IACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;IACxC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC;AAC1C;AAEM,SAAU,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAA;AACnE,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACnE;AAEM,SAAU,SAAS,CAAC,CAAS,EAAE,CAAS,EAAE,MAAc,EAAE,KAAa,EAAE,KAAa,EAAA;IAC1F,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAW;AACrC,IAAA,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC;AACtC,IAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC;IACxE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,aAAa,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC;IACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,aAAa,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC;AACtF,IAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE;AAC9E;AAEgB,SAAA,aAAa,CAAC,GAA6B,EAAC,IAAc,EAAA;IACtE,GAAG,CAAC,SAAS,EAAE;AACf,IAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,IAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,IAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,IAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,GAAG,CAAC,SAAS,EAAE;IACf,GAAG,CAAC,MAAM,EAAE;IACZ,GAAG,CAAC,IAAI,EAAE;AACd;AAEM,SAAU,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,QAAgB,EAAA;IACxE,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,QAAQ,EAAE;AACjF;AAEM,SAAU,SAAS,CAAC,MAAc,EAAA;AACtC,IAAA,OAAO,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE;AAC/B;AAEM,SAAU,SAAS,CAAC,MAAc,EAAA;AACtC,IAAA,OAAO,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,EAAE;AAC/B;AAEM,SAAU,QAAQ,CAAC,KAAa,EAAA;IACpC,OAAO,GAAG,GAAG,KAAK;AACpB;AAEM,SAAU,UAAU,CAAC,GAA6B,EAAE,CAAS,EAAE,CAAS,EAAE,MAAc,EAAE,KAA8C,EAAA;AAC5I,IAAA,IAAI,IAAI,GAAW,IAAI,MAAM,EAAE;AAC/B,IAAA,GAAG,CAAC,SAAS,GAAG,KAAK;AACrB,IAAA,GAAG,CAAC,WAAW,GAAG,KAAK;IACvB,GAAG,CAAC,SAAS,EAAE;AACf,IAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACtC,IAAI,CAAC,SAAS,EAAE;AAChB,IAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;AACd,IAAA,GAAG,CAAC,SAAS,GAAG,OAAO;AACvB,IAAA,GAAG,CAAC,WAAW,GAAG,OAAO;AAC3B;AAEM,SAAU,OAAO,CAAC,GAA6B,EAAA;AACnD,IAAA,OAAO,GAAG,CAAC,YAAY,EAAE;AAC3B;AAEM,SAAU,WAAW,CAAC,GAA6B,EAAE,CAAS,EAAE,CAAS,EAAE,IAAY,EAAA;AAC3F,IAAA,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACnB,IAAA,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;IACrB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB;AAEM,SAAU,KAAK,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAA;AAChE,IAAA,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC;AACrB,IAAA,MAAM,MAAM,GAAG,EAAE,GAAG,CAAC;IACrB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC;AACjD,IAAA,OAAO,cAAc;AACvB;AAEgB,SAAA,mBAAmB,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,gBAAwB,EAAE,gBAAwB,EAAA;AAClI,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;AACrC,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC;IAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,gBAAgB,CAAC;AACtF;AAEgB,SAAA,UAAU,CAAC,GAA6B,EAAE,IAAY,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,KAA8C,EAAE,QAAgB,EAAA;IAC3K,GAAG,CAAC,IAAI,EAAE;AACV,IAAA,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACnB,IAAA,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AACjB,IAAA,GAAG,CAAC,SAAS,GAAG,KAAK;AACrB,IAAA,GAAG,CAAC,WAAW,GAAG,KAAK;AACvB,IAAA,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,UAAU;IACrD,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACxB,GAAG,CAAC,OAAO,EAAE;AACf;AAEM,SAAU,sBAAsB,CAAC,KAAY,EAAE,WAAkB,EAAE,WAAkB,EAAE,WAAkB,EAAE,WAAkB,EAAA;IACjI,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE;IACnF,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE;IACnF,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE;IACnF,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE;IAEnF,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE;IACxE,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE;IACxE,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE;IACxE,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE;IAExE,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC;IAC1D,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC;IAC1D,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC;IAC1D,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC;IAE1D,OAAO,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO;AAC1E;AAEM,SAAU,sBAAsB,CAAC,CAAQ,EAAE,CAAQ,EAAE,CAAQ,EAAE,CAAQ,EAAE,KAAY,EAAA;IACzF,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAErC,IAAA,MAAM,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,IAAA,MAAM,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAEvC,IAAA,IACE,KAAK,CAAC,CAAC,IAAI,GAAG;QACd,KAAK,CAAC,CAAC,IAAI,GAAG;AACd,QAAA,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACd,QAAA,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EACd;AACA,QAAA,OAAO,IAAI;;SACN;AACL,QAAA,OAAO,KAAK;;AAEhB;AAEM,SAAU,iBAAiB,CAAC,EAAS,EAAE,EAAS,EAAE,EAAS,EAAE,MAAa,EAAA;IAC9E,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACvB,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAE3B,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IACnC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IACnC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IACnC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;IACnC,MAAM,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;AAEnC,IAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AACpD,IAAA,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI,QAAQ;AACpD,IAAA,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI,QAAQ;AAEpD,IAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;AACxC;AAIA;;;;;AAKG;SACa,mBAAmB,CAAC,GAA6B,EAAE,CAAS,EAAE,CAAS,EAAA;AACrF,IAAA,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,EAAE;AACpC,IAAA,MAAM,cAAc,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;AACtC,IAAA,MAAM,cAAc,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,cAAc,GAAG,CAAC,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,cAAc,GAAG,CAAC,GAAG,cAAc,GAAG,SAAS,CAAC,CAAC;IACtE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE;AAC7C;SAEgB,eAAe,CAAC,SAAgB,EAAE,OAAc,EAAE,aAAoB,EAAA;AACpF,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AAC1B,QAAA,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KAC3B;AACD,IAAA,MAAM,WAAW,GAAG;AAClB,QAAA,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;AAChC,QAAA,CAAC,EAAE,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;KACjC;AACD,IAAA,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;AACtE,IAAA,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;AAC9E,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,CAAC,EAAE,CAAC,UAAU,IAAI,aAAa,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC;AACrD,QAAA,CAAC,EAAE,CAAC,UAAU,IAAI,aAAa,IAAI,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC;KACtD;AACD,IAAA,MAAM,QAAQ,GAAG;AACf,QAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AAC7B,QAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;KAC9B;AACD,IAAA,MAAM,MAAM,GAAG;AACb,QAAA,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;AAC3B,QAAA,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;KAC5B;AACD,IAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE;AAC7B;SAGgB,0BAA0B,CAAC,MAAa,EAAE,MAAa,EAAE,SAAgB,EAAA;AACvF,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AACtB,QAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;KACvB;AACD,IAAA,MAAM,iBAAiB,GAAG;AACxB,QAAA,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,QAAA,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;KAC7C;AACD,IAAA,MAAM,SAAS,GAAG;AAChB,QAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC;AACjC,QAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC;KAClC;AACD,IAAA,MAAM,SAAS,GAAG;AAChB,QAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC;AACjC,QAAA,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC;KAClC;AAED,IAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE;AACjC;AAEgB,SAAA,yBAAyB,CAAC,KAAa,EAAE,UAAkB,EAAA;IACzE,MAAM,gBAAgB,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACrD,IAAA,OAAO,gBAAgB;AACzB;AAEgB,SAAA,yBAAyB,CAAC,KAAa,EAAE,UAAkB,EAAA;IACzE,MAAM,gBAAgB,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;AACrD,IAAA,OAAO,gBAAgB;AACzB;AAEgB,SAAA,mBAAmB,CAAC,CAAS,EAAE,CAAS,EAAA;AACtD,IAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;AACvC,IAAA,OAAO,UAAU;AACnB;AAEM,SAAU,YAAY,CAAC,GAAkB,EAAA;AAC7C,IAAA,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC;IAC3C,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACnD,IAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;AAEnD,IAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB;IACrC,IAAI,KAAK,GAAG,CAAC;AAEb,IAAA,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE;AAC9B,QAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AACnB,QAAA,KAAK,EAAE;;IAGT,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAErD,IAAA,OAAO,MAAM;AACf;AAEM,SAAU,GAAG,CAAC,KAAa,EAAE,MAAc,EAAE,KAAa,EAAE,MAAc,EAAE,KAAa,EAAA;IAC7F,OAAO,MAAM,GAAG,CAAC,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,GAAG,MAAM,KAAK,KAAK,GAAG,MAAM,CAAC,CAAC;AAC1E;;AC7PM,MAAO,WAAY,SAAQ,WAAW,CAAA;IAExC,KAAK,GAAW,CAAC;IACjB,QAAQ,GAAG,EAAE;IACb,IAAI,GAAW,mBAAmB;IAClC,QAAQ,GAAG,CAAC;IACL,IAAI,GAAC,OAAO;IACnB,WAAY,CAAA,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,QAAiB,EAAE,KAAc,EAAC,MAAe,EAAA;AAC7F,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,KAAK,GAAC,IAAI,CAAC,OAAO;AACvB,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO;AACnB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;QAChB,IAAI,QAAQ,EAAE;AACV,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;;QAE5B,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC;;QAEhC,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAC,MAAM;;;IAGjB,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAG,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAG,CAAC,EAAC;YACzD,MAAM,MAAM,GAAC,KAAK,CAAC,CAAC,GAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAC,KAAK,CAAC,CAAC,GAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,CAAC,IAAE,MAAM;AACd,YAAA,IAAI,CAAC,CAAC,IAAE,MAAM;;AAElB,QAAA,WAAW,CAAC,QAAQ,GAAC,KAAK;;AAGrB,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACnF,MAAM,SAAS,GAAC,MAAM,CAAC,MAAM,EAAC,KAAK,CAAC;AACpC,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;AAC5E,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAEvB,IAAA,YAAY,CAAC,GAA6B,EAAA;QAC/C,GAAG,CAAC,IAAI,EAAE;QACV,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7B,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACtB,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;QAC5B,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAC,IAAI,CAAC,IAAI;QAC/D,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAsB,GAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,qBAAqB;QAClH,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7B,GAAG,CAAC,OAAO,EAAE;;IAGR,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,CAAC,GAAC,CAAC;AACR,QAAA,IAAI,CAAC,CAAC,GAAC,CAAC;;IAGH,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;QACjC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC;AAC/E,QAAA,OAAO,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;;AAGzF,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAG,IAAI,EAAC;AACpB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAG,IAAI,EAAC;AACnB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;iBAClB;AACH,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;YAEzB,GAAG,CAAC,IAAI,EAAE;YACV,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7B,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACtB,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;YAC1B,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,GAAG,KAAK,GAAC,IAAI,CAAC,IAAI;YAC/D,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAsB,GAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,qBAAqB;YAClH,GAAG,CAAC,IAAI;YACR,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7B,GAAG,CAAC,OAAO,EAAE;;;AAIrB,IAAA,WAAW,CAAC,GAA4B,EAAA;QACpC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAsB,GAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,qBAAqB;QAClH,OAAO,IAAI,CAAC,QAAQ;;AAGxB,IAAA,gBAAgB,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;;IAGlC,IAAI,IAAI,CAAC,IAAW,EAAA;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;AAGpB,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,IAAI;;AAGvB;;AC/GK,MAAO,UAAW,SAAQ,WAAW,CAAA;AACvC,IAAA,WAAW;IACX,GAAG,GAAY,KAAK;IACpB,UAAU,GAAW,CAAC;IACtB,aAAa,GAAW,EAAE;IAC1B,MAAM,GAAW,EAAE;IACnB,KAAK,GAAG,CAAC;IACT,WAAW,GAAG,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;AACvC,IAAA,WAAA,CAAY,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,MAAc,EAAE,WAAoB,EAAE,GAAa,EAAE,UAAmB,EAAE,aAAsB,EAAE,MAAgB,EAAE,KAA+C,EAAA;AAC/M,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM;AAClB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI;QAC5B,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;QAElC,IAAI,GAAG,EAAE;AACL,YAAA,IAAI,CAAC,GAAG,GAAG,GAAG;;QAElB,IAAI,UAAU,EAAE;AACZ,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU;;QAEhC,IAAI,aAAa,EAAE;AACf,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa;;QAEtC,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;QAExB,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;;IAI1B,aAAa,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC1D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;QACpE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE;AACtF,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;IAGvB,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAGhC,IAAA,aAAa,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QAC9E,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;AACvC,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;QAC5E,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC;QAC9C,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE;AACtF,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAGvB,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACnF,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;AACvC,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;AAC5E,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;IAGvB,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;;AAGL,IAAA,YAAY,CAAC,GAA6B,EAAA;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;AACpF,QAAA,GAAG,CAAC,IAAI,GAAG,YAAY;AACvB,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;AAC9B,QAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7C,QAAA,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC;AAC1D,QAAA,GAAG,CAAC,SAAS,GAAG,CAAC;;AAGZ,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;AACpF,YAAA,GAAG,CAAC,IAAI,GAAG,YAAY;AACvB,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AAC5B,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;AAC9B,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACtB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;iBAClB;AACH,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;AAEzB,YAAA,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC;YACxD,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;AAC/B,YAAA,GAAG,CAAC,SAAS,GAAG,CAAC;AACjB,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE;AACnB,gBAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC1B,gBAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;AAC5B,gBAAA,GAAG,CAAC,SAAS,GAAG,CAAC;gBACjB,GAAG,CAAC,SAAS,EAAE;gBACf,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC1C,GAAG,CAAC,SAAS,EAAE;gBACf,GAAG,CAAC,IAAI,EAAE;;;;IAKtB,YAAY,CAAC,CAAS,EAAE,CAAS,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;AACzC,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAKP,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;AACjC,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE;AAC/C,YAAA,OAAO,IAAI;;aAEV;AACD,YAAA,OAAO,KAAK;;;AAGvB;;ACjJK,MAAO,gBAAiB,SAAQ,WAAW,CAAA;AACtC,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACrF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;AAE7B,IAAA,WAAW,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QAC9E,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;QACzC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;AACxD,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAChE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;;AAElB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAE9B,IAAA,aAAa,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QAChF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;QAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC;QACzC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;AACxD,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAChE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,GAAG,IAAI,MAAM;AAClB,YAAA,IAAI,CAAC,GAAG,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;IAE9B,WAAW,GAAE,IAAI,WAAW,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAC;AACpC,IAAA,GAAG;AACH,IAAA,GAAG;IACH,WAAW,GAAY,KAAK;IAC5B,KAAK,GAAW,CAAC;IACjB,QAAQ,GAAW,EAAE;IACrB,KAAK,GAAG,CAAC;IACT,KAAK,GAAC,KAAK;AACX,IAAA,WAAA,CAAY,CAAS,EAAE,CAAS,EAAE,GAAW,EAAE,GAAW,EAAE,KAA+C,EAAE,IAAa,EAAE,MAAgB,EAAE,MAAe,EAAC,KAAc,EAAA;AAC1K,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY;AACxB,QAAA,IAAI,KAAK,KAAG,SAAS,EAAC;AACpB,YAAA,IAAI,CAAC,KAAK,GAAC,KAAK;;AAElB,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;aACb;AACL,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;;AAE3B,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,IAAI,KAAK,SAAS,EAAE;AACtB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;QAElB,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;QAEtB,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;;IAMxB,IAAI,WAAW,CAAC,MAAe,EAAA;AAC7B,QAAA,IAAI,CAAC,WAAW,GAAG,MAAM;;AAG3B,IAAA,IAAI,WAAW,GAAA;QACb,OAAO,IAAI,CAAC,WAAW;;IAGhB,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;IAG7B,WAAW,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC1D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAChE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;;AAElB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;IAG9B,aAAa,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC5D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAChE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,GAAG,IAAI,MAAM;AAClB,YAAA,IAAI,CAAC,GAAG,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;IAGrB,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;AAChC,QAAA,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YACnE,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,GAAG,IAAI,MAAM;AAClB,YAAA,IAAI,CAAC,GAAG,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;;AAG9B,IAAA,YAAY,CAAC,GAA6B,EAAA;AACjD,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACzB,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AAC5B,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;YAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;YAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7D,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;AAClD,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AACzE,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;YAClE,GAAG,CAAC,SAAS,EAAE;AACf,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,GAAG,CAAC,IAAI,EAAE;AACV,YAAA,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC;AACxD,YAAA,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC;YAC5D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;YAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;YACxE,IAAI,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACjC,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC9B,gBAAA,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;;iBAE7H;AACH,gBAAA,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAE,IAAI,CAAC,QAAQ,CAAC;;AAEpI,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;gBAC9B,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;;iBACxF;gBACL,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,SAAS,EAAE,YAAY,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC;;;;IAK7G,MAAM,CAAC,CAAS,EAAE,CAAS,EAAA;AACzB,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC;AACZ,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC;;IAGd,WAAW,CAAC,KAAa,EAAE,IAAY,EAAA;AACrC,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI;AAC5C,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI;;IAG9C,OAAO,CAAC,CAAQ,EAAC,CAAQ,EAAA;QACvB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC;;IAG7B,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;QACnC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;QAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7D,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACjE,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1E,QAAA,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AAC/C,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACnD,YAAA,OAAO,IAAI;;AAEb,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;AACnI,QAAA,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE;AAC/H,YAAA,OAAO,IAAI;;AAEb,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAC,CAAC,CAAC,KAAG,IAAI,EAAC;AACvC,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,KAAK;;IAGd,WAAW,CAAC,CAAS,EAAE,CAAS,EAAA;QAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;QAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7D,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACjE,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1E,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;AACnI,QAAA,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE;AAC/H,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,KAAK;;IAGd,SAAS,CAAC,CAAS,EAAE,CAAS,EAAA;QAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;QAC3D,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACjE,QAAA,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AAC/C,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,KAAK;;IAGd,WAAW,CAAC,CAAS,EAAE,CAAS,EAAA;QAC9B,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7D,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1E,QAAA,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACnD,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,KAAK;;AAGL,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC9C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACzB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACxB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;iBAChB;AACL,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;AAEvB,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC1B,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;YAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;YAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7D,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACjE,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1E,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AACzE,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;YAClE,GAAG,CAAC,SAAS,EAAE;AACf,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,GAAG,CAAC,IAAI,EAAE;AACV,YAAA,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;AACtD,YAAA,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;YAC1D,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;YAC7E,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;YACxE,IAAI,YAAY,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACjC,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC9B,gBAAA,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;;iBAE7H;AACH,gBAAA,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC;;AAElI,YAAA,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;AAC9B,gBAAA,IAAI,IAAI,CAAC,KAAK,KAAG,IAAI,EAAC;oBACpB,IAAI,CAAC,WAAW,CAAC,IAAI,GAAC,IAAI,CAAC,IAAI,GAAC,QAAQ;;qBACnC;oBACL,IAAI,CAAC,WAAW,CAAC,IAAI,GAAC,IAAI,CAAC,IAAI;;gBAEjC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAC,YAAY,CAAC,CAAC;gBACjC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAC,YAAY,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,WAAW,CAAC,KAAK,GAAC,MAAM;gBAC7B,IAAI,CAAC,WAAW,CAAC,KAAK,GAAC,IAAI,CAAC,KAAK;AACjC,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;;iBAC1B;AACL,gBAAA,IAAI,IAAI,CAAC,KAAK,KAAG,IAAI,EAAC;oBACpB,IAAI,CAAC,WAAW,CAAC,IAAI,GAAC,QAAQ,GAAC,IAAI,CAAC,IAAI;;qBACnC;oBACL,IAAI,CAAC,WAAW,CAAC,IAAI,GAAC,IAAI,CAAC,IAAI;;gBAEjC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAC,YAAY,CAAC,CAAC;gBACjC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAC,YAAY,CAAC,CAAC;gBACjC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAC,MAAM,GAAC,IAAI,CAAC,EAAE;gBACrC,IAAI,CAAC,WAAW,CAAC,KAAK,GAAC,IAAI,CAAC,KAAK;AACjC,gBAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,GAAC,EAAE;AAC5B,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;;;;AAKtC;;AChSK,MAAO,eAAgB,SAAQ,WAAW,CAAA;AACnC,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;IAE/B,KAAK,GAAG,CAAC;IACT,WAAW,GAA4C,SAAS;IAChE,MAAM,GAAG,EAAE;IACX,KAAK,GAAG,EAAE;AACV,IAAA,WAAA,CAAY,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,KAAc,EAAE,KAA+C,EAAE,WAAqD,EAAE,MAAgB,EAAA;AACrM,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW;QACvB,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;QAEtB,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;aACf;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;;QAE7B,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;aAC3B;AACH,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;;QAEnC,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;;AAGnB,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACtB,YAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,YAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,YAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,YAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;aAClB;AACH,YAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,YAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,YAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,YAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;QAEzB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AAC3E,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC1B,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QAClC,GAAG,CAAC,SAAS,EAAE;AACf,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,IAAI,EAAE;QACV,GAAG,CAAC,MAAM,EAAE;;AAEP,IAAA,YAAY,CAAC,GAA6B,EAAA;QAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AAC3E,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;QAC9B,GAAG,CAAC,SAAS,EAAE;AACf,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,IAAI,EAAE;QACV,GAAG,CAAC,MAAM,EAAE;;IAEP,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;QACjC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AAC3E,QAAA,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACzF,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAEP,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;;IAEL,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAEnC;;AChGK,MAAO,WAAY,SAAQ,WAAW,CAAA;IACxC,KAAK,GAAG,CAAC;IACT,WAAW,GAA4C,SAAS;IAChE,MAAM,GAAG,EAAE;IACX,KAAK,GAAG,EAAE;IACV,KAAK,GAAW,EAAE;IAClB,WAAW,GAAG,IAAI,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IACvC,UAAU,GAAW,CAAC;IACtB,aAAa,GAAW,EAAE;AAC1B,IAAA,WAAW,GAAqB,IAAI,KAAK,EAAE;AAE3C,IAAA,WAAA,CAAY,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,WAAqD,EAAE,MAAgB,EAAE,UAAmB,EAAE,aAAsB,EAAE,IAAa,EAAA;AAChM,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO;AACnB,QAAA,IAAI,CAAC,KAAK,GAAG,eAAe;AAC5B,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;QAEtB,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;QAElC,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;AAExB,QAAA,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AAChC,YAAA,IAAI,CAAC,UAAU,GAAG,UAAU;;AAEhC,QAAA,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa,GAAG,aAAa;;QAEtC,IAAI,IAAI,EAAE;AACN,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI;;;IAIpC,MAAM,gBAAgB,CAAC,GAAW,EAAA;AAC9B,QAAA,IAAI;YACA,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;AACpC,YAAA,IAAI,CAAC,WAAW,GAAG,GAAG;YACvB,OAAO,IAAI,CAAC,WAAW;;QACzB,OAAO,KAAU,EAAE;YACjB,OAAO,CAAC,KAAK,CAAC,CAAA,qBAAA,EAAwB,KAAK,CAAC,OAAO,CAAE,CAAA,CAAC;AACtD,YAAA,OAAO,IAAI,KAAK,EAAE,CAAC;;;AAI5B,IAAA,SAAS,CAAC,GAAU,EAAA;QACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,YAAA,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE;AACrB,YAAA,GAAG,CAAC,GAAG,GAAE,GAAG;AACZ,YAAA,GAAG,CAAC,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAA,CAAA,CAAG,CAAC,CAAC,CAAC;AAClF,SAAC,CAAC;;AAGO,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACtB,YAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,YAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,YAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,YAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;aAClB;AACH,YAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,YAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,YAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,YAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;QAEzB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AAC3E,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC1B,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;QAClC,GAAG,CAAC,SAAS,EAAE;AACf,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,IAAI,EAAE;QACV,GAAG,CAAC,MAAM,EAAE;QACZ,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AACxC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,QAAA,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC;AACtB,QAAA,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AAC1E,QAAA,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;QACpF,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC;;IAGnC,aAAa,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC1D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;QACpE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE;AACtF,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,KAAK,CAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAGvB,IAAA,YAAY,CAAC,GAA6B,EAAA;QAC/C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AAC3E,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;QAC9B,GAAG,CAAC,SAAS,EAAE;AACf,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,IAAI,EAAE;QACV,GAAG,CAAC,MAAM,EAAE;;IAGP,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;QACjC,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AAC3E,QAAA,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACzF,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAGhB,YAAY,CAAC,CAAS,EAAE,CAAS,EAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;AACzC,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAIP,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;;IAGL,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAGvB,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;AAG/B,IAAA,aAAa,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QAC9E,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;AACvC,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC;QAC5E,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC;QAC9C,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE;AACtF,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAEnC;;ACvKK,MAAO,YAAa,SAAQ,WAAW,CAAA;AAChC,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;IAE/B,MAAM,GAAG,CAAC;IACV,WAAW,GAA4C,EAAE;IACzD,WAAY,CAAA,CAAS,EAAE,CAAS,EAAE,MAAc,EAAE,KAA+C,EAAE,WAAqD,EAAE,MAAgB,EAAA;AACtK,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,QAAQ;QACpB,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;aACf;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;;QAE7B,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;aAC3B;AACH,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;;QAEnC,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;;AAGnB,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACtB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;iBAClB;AACH,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;AAEzB,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC1B,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;YAClC,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YACpD,GAAG,CAAC,IAAI,EAAE;YACV,GAAG,CAAC,MAAM,EAAE;;;AAGX,IAAA,YAAY,CAAC,GAA6B,EAAA;AAC/C,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;QAC9B,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,IAAI,EAAE;QACV,GAAG,CAAC,MAAM,EAAE;;IAEP,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;AACjC,QAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AAC9C,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAEP,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;;IAEL,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAEnC;;AC3EK,MAAO,cAAe,SAAQ,WAAW,CAAA;AAClC,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;IAE/B,MAAM,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IAC9B,KAAK,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IAC7B,WAAW,GAA4C,EAAE;IACzD,WAAY,CAAA,KAAY,EAAE,MAAa,EAAE,KAAY,EAAE,KAA+C,EAAE,WAAqD,EAAE,MAAgB,EAAA;AAC3K,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAChB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAChB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;QACtB,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;aACf;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;;QAE7B,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;aAC3B;AACH,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;;QAEnC,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;;AAGnB,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACtB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;iBAClB;AACH,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;AAEzB,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC1B,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;YAClC,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1B,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1B,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,IAAI,EAAE;YACV,GAAG,CAAC,MAAM,EAAE;;;AAGX,IAAA,YAAY,CAAC,GAA6B,EAAA;AAC/C,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;QAC9B,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1B,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1B,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,IAAI,EAAE;QACV,GAAG,CAAC,MAAM,EAAE;;IAEP,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;AACjC,QAAA,IAAI,iBAAiB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACtF,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAEP,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;;IAEL,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC;AAC7D,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAEhC,IAAA,YAAY,CAAC,KAAY,EAAA;QACrB,MAAM,WAAW,GAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;QAC5J,MAAM,UAAU,GAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACvJ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,QAAQ,CAAC;QAC7E,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC;;AAGjF;;AClGK,MAAO,oBAAqB,SAAQ,WAAW,CAAA;AACxC,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;IAE/B,KAAK,GAAW,CAAC;IACjB,MAAM,GAAW,CAAC;IAClB,WAAW,GAA4C,EAAE;IACzD,SAAS,GAAe,EAAE;IAC1B,KAAK,GAAG,CAAC;AACT,IAAA,WAAA,CAAY,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAE,KAA+C,EAAE,WAAqD,EAAE,KAAc,EAAE,MAAgB,EAAA;AACrM,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,gBAAgB;QAC5B,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;aACf;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;;QAE7B,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;aAC3B;AACH,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;;QAEnC,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;;QAGjC,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;QAExB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YACjC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YACpE,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YAC5E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAc,CAAC;;;AAIvF,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACtB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;iBAClB;AACH,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;YAEzB,GAAG,CAAC,SAAS,EAAE;AACf,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC1B,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AAClC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;YACpC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAI;AACvC,gBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACb,oBAAA,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;;AAE5C,gBAAA,IAAI,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE;AACpB,oBAAA,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;;qBACrC;oBACH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAElE,aAAC,CAAC;YACF,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,IAAI,EAAE;YACV,GAAG,CAAC,MAAM,EAAE;;;AAIX,IAAA,YAAY,CAAC,GAA6B,EAAA;QAC/C,GAAG,CAAC,SAAS,EAAE;AACf,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;AAC9B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM;QACpC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAI;AACvC,YAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACb,gBAAA,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;;AAE5C,YAAA,IAAI,KAAK,GAAG,MAAM,GAAG,CAAC,EAAE;AACpB,gBAAA,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;;iBACrC;gBACH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAElE,SAAC,CAAC;QACF,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,IAAI,EAAE;QACV,GAAG,CAAC,MAAM,EAAE;;IAGP,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;AACjC,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACxD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACrC,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACvE,gBAAA,OAAO,IAAI;;;AAGnB,QAAA,OAAO,KAAK;;IAGP,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;QAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrH,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,IAAG;AAC7B,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,YAAA,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AACnC,YAAA,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;AACnC,YAAA,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AAC/B,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;;IAGL,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;YAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;;AAE7B,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAEnC;;AC3IK,MAAO,SAAU,SAAQ,WAAW,CAAA;AAC7B,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;IAE/B,IAAI,GAAW,CAAC;IAChB,WAAW,GAAW,CAAC;IACvB,SAAS,GAAW,CAAC;IACrB,WAAW,GAA0C,EAAE;AACvD,IAAA,WAAA,CAAY,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,WAAmB,EAAE,SAAiB,EAAE,KAA8C,EAAG,WAAoD,EAAC,MAAe,EAAA;AACzM,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK;QACjB,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;aACf;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;;QAE7B,IAAI,WAAW,EAAE;AACb,YAAA,IAAI,CAAC,WAAW,GAAG,WAAW;;aAC3B;AACH,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;;QAEnC,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAC,MAAM;;;AAGjB,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAG,IAAI,EAAC;AACnB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;iBAClB;AACH,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;YAEzB,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;YAChD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5C,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC;AAC1D,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW;AAClC,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;YAC1B,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1B,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,CAAC;YAC5D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC1B,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,IAAI,EAAE;;;AAGT,IAAA,YAAY,CAAC,GAA6B,EAAA;QAC/C,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;QAChD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC;AAC1D,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;AAC9B,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;QAC5B,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1B,QAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,CAAC;QAC5D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1B,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,IAAI,EAAE;;IAEL,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;AACjC,QAAA,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5C,QAAA,IAAI,UAAU,GAAG,CAAC,EAAE;YAChB,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,UAAU;;AAEzC,QAAA,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,UAAU,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;AACpI,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAEP,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;;IAEL,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;AAEnC;;AClGK,MAAO,eAAgB,SAAQ,WAAW,CAAA;AACnC,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;IAE/B,MAAM,GAAa,EAAE;IACrB,WAAW,GAAY,EAAE;IACzB,IAAI,GAAW,CAAC;IAChB,KAAK,GAAG,KAAK;IACb,WAAY,CAAA,KAAY,EAAE,MAAgB,EAAE,IAAY,EAAE,KAA8C,EAAE,KAAe,EAAE,MAAgB,EAAA;AACvI,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAChB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW;QACvB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;AACnC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;AACvH,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,SAAC,CAAC;QACF,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;QAEtB,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;;AAInB,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AACd,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACtB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;iBAClB;AACH,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;YAEzB,GAAG,CAAC,SAAS,EAAE;AACf,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;AAC5B,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACjC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5B,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;gBAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;gBACvC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;;YAEpC,GAAG,CAAC,MAAM,EAAE;AACZ,YAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;gBACrB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;oBACjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5D,oBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,oBAAA,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC;AAC5B,iBAAC,CAAC;;;;AAKL,IAAA,YAAY,CAAC,GAA6B,EAAA;QAC/C,GAAG,CAAC,SAAS,EAAE;AACf,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACjC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACvC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;;QAEpC,GAAG,CAAC,MAAM,EAAE;AACZ,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;gBACjC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5D,gBAAA,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACzD,gBAAA,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC;AAC5B,aAAC,CAAC;;;IAID,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;QACjC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;AAC/B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;YACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7D,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACzD,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC;AACtD,YAAA,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACzF,gBAAA,OAAO,IAAI;;AAEf,YAAA,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;;QAEnC,QAAQ,KAAK;;IAGR,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE;QACrB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;AACnC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;AACvH,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AAChC,SAAC,CAAC;;IAGG,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,IAAG;AAC/B,gBAAA,OAAO,CAAC,CAAC,IAAI,MAAM;AACnB,gBAAA,OAAO,CAAC,CAAC,IAAI,MAAM;AACvB,aAAC,CAAC;;AAEN,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;IAGhC,iBAAiB,CAAC,UAAkB,EAAE,UAAkB,EAAE,MAAc,EAAE,MAAc,EAAE,KAAa,EAAE,MAAc,EAAA;AACnH,QAAA,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,KAAK,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,MAAM,EAAE;AACnF,YAAA,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;;aACtD;AACH,YAAA,MAAM,MAAM,GAAW,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACzD,YAAA,MAAM,MAAM,GAAW,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAW,MAAM,IAAI,UAAU,GAAG,MAAM,CAAC;YACtD,MAAM,OAAO,GAAW,MAAM,IAAI,UAAU,GAAG,MAAM,CAAC;YACtD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;;;AAG5C;;ACxIK,MAAO,iBAAkB,SAAQ,WAAW,CAAA;AACrC,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;IAEvB,KAAK,GAAgB,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;IACjF,SAAS,GAA4C,SAAS;IAC9D,SAAS,GAA4C,SAAS;IAC9D,WAAW,GAAW,CAAC;IACvB,YAAY,GAAW,CAAC;AACxB,IAAA,WAAA,CAAY,QAAe,EAAE,WAAwB,EAAE,KAAa,EAAE,MAAc,EAAE,SAAkD,EAAE,SAAkD,EAAC,MAAe,EAAA;AACxM,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW;AACxB,QAAA,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,MAAM;AAC1B,QAAA,IAAI,CAAC,IAAI,GAAG,aAAa;AACzB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACpC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;;aACxB;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;;AAE/B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACpC,YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;QAEtF,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAC,MAAM;;;AAIjB,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAG,IAAI,EAAC;AACnB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;iBAClB;AACH,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;YAEzB,GAAG,CAAC,SAAS,EAAE;AACf,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC1B,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;AAC5B,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;AACzI,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;YACrI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;YAC5C,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YACxC,GAAG,CAAC,MAAM,EAAE;AACZ,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;AAC9G,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;YAC7H,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;YAClE,GAAG,CAAC,MAAM,EAAE;YACZ,GAAG,CAAC,IAAI,EAAE;AACV,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;AACtI,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;YACpI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;YACxC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YACpC,GAAG,CAAC,MAAM,EAAE;;;AAIX,IAAA,YAAY,CAAC,GAA6B,EAAA;QAC/C,GAAG,CAAC,SAAS,EAAE;AACf,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;AAC9B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;AACzI,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;QACrI,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;QAC5C,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;QACxC,GAAG,CAAC,MAAM,EAAE;AACZ,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;AAC9G,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;QAC7H,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;QAClE,GAAG,CAAC,MAAM,EAAE;QACZ,GAAG,CAAC,IAAI,EAAE;AACV,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;AACtI,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;QACpI,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;QACxC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QACpC,GAAG,CAAC,MAAM,EAAE;;IAGP,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;AAC5G,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC;AAC7H,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AACnF,QAAA,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AACzF,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAEP,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;QAC9B,IAAI,CAAC,CAAC,GAAG,CAAC;AACN,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC;;IAGT,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,EAAE;YAC9D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC/C,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;;AAEpB,QAAA,WAAW,CAAC,QAAQ,GAAG,KAAK;;IAGhC,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;QACrB,MAAM,CAAC,GAAG,CAAC;QACX,CAAC,GAAG,CAAC;QACL,CAAC,GAAG,CAAC;AACL,QAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;;IAGjB,iBAAiB,CAAC,UAAkB,EAAE,UAAkB,EAAE,MAAc,EAAE,MAAc,EAAE,KAAa,EAAE,MAAc,EAAA;AACnH,QAAA,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,KAAK,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,IAAI,MAAM,EAAE;AACnF,YAAA,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE;;aACtD;AACH,YAAA,MAAM,MAAM,GAAW,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACzD,YAAA,MAAM,MAAM,GAAW,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAW,MAAM,IAAI,UAAU,GAAG,MAAM,CAAC;YACtD,MAAM,OAAO,GAAW,MAAM,IAAI,UAAU,GAAG,MAAM,CAAC;YACtD,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE;;;IAIzC,IAAI,WAAW,CAAC,WAAwB,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,WAAW;AACxB,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACpC,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;;aACxB;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS;;AAE/B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AACpC,YAAA,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;;;AAG7F;;ACpJK,MAAO,gBAAiB,SAAQ,WAAW,CAAA;IACrC,IAAI,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IAC5B,EAAE,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;IAC1B,IAAI,GAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACpC,IAAA,WAAA,CAAY,IAAW,EAAE,EAAS,EAAE,IAAW,EAAC,KAAa,EAAA;AACzD,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,IAAI,GAAG,YAAY;AACxB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,EAAE,GAAG,EAAE;AACZ,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;AAGb,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACtB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;iBAClB;AACH,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;AAGzB,YAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACzE,YAAA,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC;YAChH,MAAM,eAAe,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACnG,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;YAEnE,MAAM,SAAS,GAAG,KAAK,CAAC,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC3F,MAAM,IAAI,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEzF,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;YACtF,GAAG,CAAC,SAAS,EAAE;AACf,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC1B,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,GAAG,CAAC,IAAI,EAAE;AACV,YAAA,UAAU,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;AAC1E,YAAA,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;;;AAIrD,IAAA,YAAY,CAAC,GAA6B,EAAA;;IAG1C,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;AAClC,QAAA,OAAO,KAAK;;IAEN,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;;IAGzB,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;;AAG1D,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;;AAG1F;;MC/CY,WAAW,CAAA;IACtB,aAAa,GAAU,EAAE;IACzB,KAAK,GAAG,GAAG;IACX,MAAM,GAAG,GAAG;IACZ,OAAO,GAAW,SAAS;IAC3B,OAAO,GAAW,SAAS;IAC3B,MAAM,GAA6C,EAAE;AACrD,IAAA,WAAA,GAAA;IAEA,cAAc,GAAA;QACZ,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAkB,CAAC;AACjG,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAC/C,YAAA,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,KAAK,CAAiB,CAAC,MAAM,GAAG,OAAO;;;IAI/D,KAAK,CAAC,KAAa,EAAE,MAAc,EAAA;QACjC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;;aACrD;AACJ,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAA+B,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC;;;IAIzE,SAAS,GAAA;QACP,IAAI,MAAM,GAAkB,EAAE;AAC9B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,IAAG;AACnC,YAAA,IAAI,OAAO,YAAY,WAAW,EAAE;AAClC,gBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;;AAExB,SAAC,CAAC;AACF,QAAA,OAAO,MAAM;;IAIf,cAAc,GAAA;QACZ,IAAI,WAAW,GAAuB,EAAE;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,IAAG;AACnC,YAAA,IAAI,OAAO,YAAY,gBAAgB,EAAE;AACvC,gBAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;;AAE7B,SAAC,CAAC;AACF,QAAA,OAAO,WAAW;;IAGpB,QAAQ,GAAA;QACN,IAAI,KAAK,GAAiB,EAAE;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,IAAG;AACnC,YAAA,IAAI,OAAO,YAAY,UAAU,EAAE;AACjC,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;;AAEvB,SAAC,CAAC;AACF,QAAA,OAAO,KAAK;;AAGd,IAAA,qBAAqB,CAAC,EAAU,EAAA;AAC9B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;AACrB,gBAAA,IAAI,EAAE,OAAO,YAAY,oBAAoB,CAAC,EAAE;oBAC9C,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;;AAEnF,gBAAA,OAAO,OAA+B;;;AAG1C,QAAA,OAA6B,EAAE;;AAGjC,IAAA,WAAW,CAAC,EAAU,EAAA;AACpB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;AACrB,gBAAA,IAAI,EAAE,OAAO,YAAY,UAAU,CAAC,EAAE;oBACpC,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;;AAEnF,gBAAA,OAAO,OAAqB;;;AAGhC,QAAA,OAAmB,EAAE;;AAIvB,IAAA,gBAAgB,CAAC,EAAU,EAAA;AACzB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;AACrB,gBAAA,IAAI,EAAE,OAAO,YAAY,eAAe,CAAC,EAAE;oBACzC,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;;AAEnF,gBAAA,OAAO,OAA0B;;;AAGrC,QAAA,OAAwB,EAAE;;AAG5B,IAAA,aAAa,CAAC,EAAU,EAAA;AACtB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;AACrB,gBAAA,IAAI,EAAE,OAAO,YAAY,YAAY,CAAC,EAAE;oBACtC,OAAO,CAAC,GAAG,CAAC,+CAA+C,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;;AAEhF,gBAAA,OAAO,OAAuB;;;AAGlC,QAAA,OAAqB,EAAE;;AAGzB,IAAA,WAAW,CAAC,EAAU,EAAA;AACpB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;AACrB,gBAAA,IAAI,EAAE,OAAO,YAAY,UAAU,CAAC,EAAE;oBACpC,OAAO,CAAC,GAAG,CAAC,6CAA6C,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;;AAE9E,gBAAA,OAAO,OAAqB;;;AAGhC,QAAA,OAAmB,EAAE;;AAGvB,IAAA,YAAY,CAAC,EAAU,EAAA;AACrB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;AACrB,gBAAA,IAAI,EAAE,OAAO,YAAY,WAAW,CAAC,EAAE;oBACrC,OAAO,CAAC,GAAG,CAAC,8CAA8C,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;;AAE/E,gBAAA,OAAO,OAAsB;;;AAGjC,QAAA,OAAoB,EAAE;;AAGxB,IAAA,iBAAiB,CAAC,EAAU,EAAA;AAC1B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;AACrB,gBAAA,IAAI,EAAE,OAAO,YAAY,gBAAgB,CAAC,EAAE;oBAC1C,OAAO,CAAC,GAAG,CAAC,qDAAqD,EAAE,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;;AAEtF,gBAAA,OAAO,OAA2B;;;AAGtC,QAAA,OAAyB,EAAE;;AAG7B,IAAA,OAAO,CAAC,EAAU,EAAA;AAChB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;AACvC,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;;;AAGpC,QAAA,OAAO,SAAS;;AAGlB,IAAA,aAAa,CAAC,GAA6B,EAAE,CAAS,EAAE,CAAS,EAAA;QAC/D,OAAO,mBAAmB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;;IAGvC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS;QACxB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;QACtC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;QACtC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;;IAG5C,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS;AACxB,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS;QACxB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;QACtC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;QACtC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;;IAG5C,aAAa,CAAC,KAAa,EAAE,MAAc,EAAA;AACzC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;IAGtB,UAAU,GAAA;QACP,IAAI,CAAC,aAAa,CAAC,CAAC,CAAiB,CAAC,UAAU,EAAE;;AAGrD,IAAA,KAAK,CAAC,GAA6B,EAAA;QACjC,GAAG,CAAC,IAAI,EAAE;AACV,QAAA,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClC,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;QAC3C,GAAG,CAAC,OAAO,EAAE;;AAGf,IAAA,YAAY,CAAC,IAAS,EAAA;AACpB,QAAA,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU;;IAGjC,YAAY,GAAA;AACV,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;AAC3D,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE;QACvB,WAAW,CAAC,QAAQ,EAAE;AACtB,QAAA,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC1B,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;;;AAIrC,IAAA,aAAa,CAAC,IAAW,EAAE,EAAS,EAAE,IAAW,EAAC,KAAY,EAAA;AAC5D,QAAA,MAAM,aAAa,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAC,KAAK,CAAC;AAChE,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAc,aAAa,CAAC;AACnD,QAAA,OAAO,aAAa;;IAGtB,YAAY,CAAC,KAAY,EAAE,MAAgB,EAAE,IAAY,EAAE,KAA8C,EAAE,KAAe,EAAE,MAAgB,EAAA;AAC1I,QAAA,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;AACnF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAc,YAAY,CAAC;AAClD,QAAA,OAAO,YAAY;;AAGrB,IAAA,WAAW,CAAC,GAA6B,EAAE,KAAY,EAAE,IAAY,EAAE,MAAgB,EAAE,KAAkD,EAAE,QAAgB,EAAE,KAAc,EAAE,MAAiB,EAAA;QAC9L,IAAI,UAAU,GAAG,CAAC;QAClB,IAAI,KAAK,EAAE;YACT,UAAU,IAAI,KAAK;;AAErB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;YAC5F,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/F,YAAA,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC;;QAE7B,IAAI,MAAM,EAAE;YACV,UAAU,GAAG,CAAC;YACd,IAAI,KAAK,EAAE;gBACT,UAAU,IAAI,KAAK;;AAErB,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAClD,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;AAC9G,gBAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;AACnD,gBAAA,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC;;;;IAKjC,YAAY,CAAC,GAA6B,EAAE,KAAY,EAAE,KAAa,EAAE,MAAgB,EAAE,KAAe,EAAE,QAAgB,EAAA;QAC1H,IAAI,GAAG,GAAG,CAAC;AACX,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;AAClD,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAC7B,YAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAClG,YAAA,GAAG,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,QAAQ,IAAI,KAAK,GAAG,CAAC,CAAC;;;IAKtD,QAAQ,CAAC,GAA6B,EAAE,KAAY,EAAE,IAAY,EAAE,KAAa,EAAE,MAAgB,EAAE,QAAgB,EAAE,WAAoB,EAAE,QAAiB,EAAE,WAAqB,EAAE,KAA+C,EAAE,MAAgB,EAAA;QACtP,IAAI,GAAG,GAAG,CAAC;QACX,IAAI,SAAS,GAAG,CAAC;QACjB,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAC3B,IAAI,WAAW,EAAE;YACf,GAAG,GAAG,WAAW;;QAEnB,IAAI,QAAQ,EAAE;YACZ,SAAS,GAAG,QAAQ;;QAEtB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;AAC5E,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK;QAC9B,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;AAChC,YAAA,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AACrC,gBAAA,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;;iBAExB;gBACH,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;;YAEzB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC;YAC1J,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;YACnC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,QAAQ;AAC9C,SAAC,CAAC;;IAGJ,QAAQ,CAAC,GAA6B,EAAE,KAAY,EAAE,IAAY,EAAE,KAAa,EAAE,MAAgB,EAAE,QAAgB,EAAE,WAAoB,EAAE,QAAiB,EAAE,WAAqB,EAAE,KAA+C,EAAE,MAAgB,EAAA;QACtP,IAAI,SAAS,GAAG,CAAC;QACjB,IAAI,GAAG,GAAG,CAAC;QACX,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAC3B,IAAI,QAAQ,EAAE;YACZ,SAAS,GAAG,QAAQ;;QAEtB,IAAI,WAAW,EAAE;YACf,GAAG,GAAG,WAAW;;QAEnB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;AAC5E,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK;QAC9B,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;AAChC,YAAA,IAAI,WAAW,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AACrC,gBAAA,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC;;iBAExB;gBACH,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;;YAEzB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,CAAC;YACtJ,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC;YACnC,KAAK,CAAC,CAAC,IAAI,SAAS,GAAG,CAAC,GAAG,IAAI;AACjC,SAAC,CAAC;;AAGJ,IAAA,cAAc,CAAC,KAAY,EAAE,WAA0B,EAAE,KAAa,EAAE,MAAc,EAAE,SAAkD,EAAE,SAAkD,EAAE,QAAgB,EAAE,MAAgB,EAAA;QAChO,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;AACrC,YAAA,MAAM,MAAM,GAAU,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,QAAQ,GAAG,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE;AACnE,YAAA,MAAM,cAAc,GAAG,IAAI,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;AAC1G,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAc,cAAc,CAAC;AACtD,SAAC,CAAC;;AAGJ,IAAA,cAAc,CAAC,KAAY,EAAE,WAAwB,EAAE,KAAa,EAAE,MAAc,EAAE,SAAkD,EAAE,SAAkD,EAAE,MAAgB,EAAA;AAC5M,QAAA,MAAM,cAAc,GAAG,IAAI,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC;AAC7G,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAc,cAAc,CAAC;AACpD,QAAA,OAAO,cAAc;;AAGvB,IAAA,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,WAAmB,EAAE,SAAiB,EAAE,KAA+C,EAAE,WAAqD,EAAE,MAAgB,EAAA;QACzM,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC;AAC5F,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAc,MAAM,CAAC;AAC5C,QAAA,OAAO,MAAM;;AAGf,IAAA,iBAAiB,CAAC,KAAY,EAAE,KAAa,EAAE,MAAc,EAAE,KAA+C,EAAE,WAAqD,EAAE,KAAc,EAAE,MAAgB,EAAA;QACrM,MAAM,iBAAiB,GAAG,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,CAAC;AACtH,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAc,iBAAiB,CAAC;AACvD,QAAA,OAAO,iBAAiB;;IAG1B,WAAW,CAAC,KAAY,EAAE,MAAa,EAAE,KAAY,EAAE,KAA+C,EAAE,WAAqD,EAAE,MAAgB,EAAA;AAC7K,QAAA,MAAM,WAAW,GAAG,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC;AACxF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAc,WAAW,CAAC;AACjD,QAAA,OAAO,WAAW;;IAGpB,SAAS,CAAC,KAAY,EAAE,MAAc,EAAE,KAA+C,EAAE,WAAqD,EAAE,MAAgB,EAAA;QAC9J,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC;AACxF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAe,SAAU,CAAC;AACjD,QAAA,OAAO,SAAS;;AAGlB,IAAA,YAAY,CAAC,KAAY,EAAE,KAAa,EAAE,MAAc,EAAE,KAAa,EAAE,KAA+C,EAAE,WAAqD,EAAE,MAAgB,EAAA;QAC/L,MAAM,YAAY,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC;AAC5G,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAe,YAAa,CAAC;AACpD,QAAA,OAAO,YAAY;;AAGrB,IAAA,QAAQ,CAAC,KAAY,EAAE,KAAa,EAAE,MAAc,EAAE,WAAqD,EAAE,MAAgB,EAAE,UAAmB,EAAE,aAAsB,EAAE,IAAa,EAAA;QACvL,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,CAAC;AACvH,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAe,QAAS,CAAC;AAChD,QAAA,OAAO,QAAQ;;AAGjB,IAAA,OAAO,CAAC,KAAY,EAAE,IAAY,EAAE,WAAoB,EAAE,GAAa,EAAE,UAAmB,EAAE,aAAsB,EAAE,MAAgB,EAAE,KAA+C,EAAA;AACrL,QAAA,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC;AACtH,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAe,OAAQ,CAAC;AAC/C,QAAA,OAAO,OAAO;;IAGhB,aAAa,CAAC,KAAY,EAAE,OAAc,EAAE,KAA+C,EAAE,KAAc,EAAE,MAAgB,EAAE,MAAe,EAAA;AAC5I,QAAA,IAAI,aAAa,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;AAC9G,QAAA,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACpC,QAAA,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAe,aAAc,CAAC;AACrD,QAAA,OAAO,aAAa;;IAGtB,OAAO,CAAC,KAAY,EAAE,OAAc,EAAE,KAAc,EAAE,KAA+C,EAAE,MAAgB,EAAA;QACrH,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC;AAC5F,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAe,OAAQ,CAAC;AAC/C,QAAA,OAAO,OAAO;;IAGhB,QAAQ,CAAC,KAAY,EAAE,IAAY,EAAE,QAAgB,EAAE,KAAa,EAAE,MAAgB,EAAA;QACpF,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;AACjF,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC;AACjC,QAAA,OAAO,QAAQ;;IAGjB,KAAK,CAAC,GAA6B,EAAE,KAAiB,EAAA;AACpD,QAAA,MAAM,wBAAwB,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;QACvF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC;QACvD,OAAO,IAAI,CAAC,MAAM;;AAGpB,IAAA,GAAG,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACtE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;AACzC,QAAA,MAAM,wBAAwB,GAAG,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;QACzF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC;QACvD,OAAO,IAAI,CAAC,MAAM;;IAGpB,MAAM,CAAC,MAAkB,EAAE,KAAiB,EAAA;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;;IAG/C,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM;;IAGpB,KAAK,CAAC,QAAe,EAAE,GAA8B,EAAA;QACnD,IAAI,OAAO,GAA6C,EAAE;QAC1D,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACrC,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;AAC5D,gBAAA,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;AAC3B,oBAAA,IAAK,OAAsB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AACzE,wBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;;;AAG5D,gBAAA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;AAC5B,oBAAA,IAAK,OAAuB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;AAC1E,wBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;;;AAG5D,gBAAA,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC3C,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;;;AAGvD,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE;AACjC,gBAAA,IAAK,OAA4B,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;AACnE,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;;AAEvD,gBAAA,IAAK,OAA4B,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;AACrE,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;;AAEzD,gBAAA,IAAK,OAA4B,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;AACrE,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;;AAEzD,gBAAA,IAAK,OAA4B,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;AACjE,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;;;AAGvD,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;AAC3B,gBAAA,IAAK,OAAsB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC7D,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;;AAEvD,gBAAA,IAAK,OAAsB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC/D,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;;AAEzD,gBAAA,IAAK,OAAsB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC/D,oBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;;;AAG7D,SAAC,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;AACvD,QAAA,OAAO,OAAO;;AAGhB,IAAA,IAAI,CAAC,GAA6B,EAAA;QAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QACtD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACrC,YAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;AACxB,SAAC,CAAC;;;AAGJ,IAAA,WAAW,CAAC,GAA6B,EAAE,CAAS,EAAE,CAAS,EAAE,IAAY,EAAA;AAC3E,QAAA,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AACnB,QAAA,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC;QACrB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;AAGvB,IAAA,OAAO,CAAC,EAAU,EAAA;AAChB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE;AACrB,gBAAA,OAAO,OAAO;;;AAGlB,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,EAAE,CAAC;AAC1C,QAAA,OAAoB,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;;AAGzD,IAAA,eAAe,CAAC,IAAY,EAAA;AAC1B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE;AACrD,gBAAA,OAAO,OAAsB;;;AAGjC,QAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC;AACzC,QAAA,OAAoB,EAAE;;AAGxB,IAAA,UAAU,CAAC,IAAY,EAAA;AACrB,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE;AACzB,gBAAA,OAAO,OAAO;;;AAGlB,QAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,EAAE,IAAI,CAAC;AACnD,QAAA,OAAoB,EAAE;;IAGxB,GAAG,CAAC,MAAc,EAAE,UAAkB,EAAE,SAAiB,EAAE,WAAmB,EAAE,UAAkB,EAAA;AAChG,QAAA,OAAO,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC;;AAGpE,IAAA,IAAI,CAAC,KAAY,EAAE,KAAa,EAAE,QAAgB,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC;;AAGhD,IAAA,SAAS,CAAC,MAAc,EAAA;AACtB,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC;;AAG1B,IAAA,SAAS,CAAC,MAAc,EAAA;AACtB,QAAA,OAAO,SAAS,CAAC,MAAM,CAAC;;IAG1B,QAAQ,CAAC,IAAW,EAAE,EAAS,EAAA;AAC7B,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;IAG7C,KAAK,CAAC,IAAW,EAAE,EAAS,EAAA;AAC1B,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;uGAtgB/B,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAX,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cAFV,MAAM,EAAA,CAAA;;2FAEP,WAAW,EAAA,UAAA,EAAA,CAAA;kBAHvB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCRY,aAAa,CAAA;uGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EARZ,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;AAIX,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA;;2FAIU,aAAa,EAAA,UAAA,EAAA,CAAA;kBAVzB,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EACX,QAAA,EAAA,CAAA;;;;AAIX,EAAA,CAAA,EAAA,UAAA,EAEa,KAAK,EAAA;;;MCOR,UAAU,CAAA;uGAAV,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAV,UAAU,EAAA,YAAA,EAAA,CATnB,aAAa,CAAA,EAAA,OAAA,EAAA,CAMb,aAAa,CAAA,EAAA,CAAA;wGAGJ,UAAU,EAAA,SAAA,EALX,CAAC,WAAW,CAAC,EAAA,CAAA;;2FAKZ,UAAU,EAAA,UAAA,EAAA,CAAA;kBAXtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE,EACR;oBACD,SAAS,EAAC,CAAC,WAAW,CAAC;AACvB,oBAAA,OAAO,EAAE;wBACP;AACD;AACF,iBAAA;;;ACZK,MAAO,cAAe,SAAQ,WAAW,CAAA;AAClC,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;AACnF,QAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;;IAG9C,WAAY,CAAA,KAAa,EAAE,MAAc,EAAA;AACrC,QAAA,KAAK,EAAE;AACP,QAAA,WAAW,CAAC,KAAK,GAAG,KAAK;AACzB,QAAA,WAAW,CAAC,MAAM,GAAG,MAAM;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,UAAU;AACtB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;;AAEV,IAAA,SAAS,CAAC,GAA6B,EAAA;;AAEhD,IAAA,YAAY,CAAC,GAA6B,EAAA;;IAEjC,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;AACjC,QAAA,OAAO,KAAK;;IAEP,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;;IAElC,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;;IAE1D,OAAO,CAAC,KAAa,EAAE,MAAc,EAAA;AACjC,QAAA,WAAW,CAAC,KAAK,GAAG,KAAK;AACzB,QAAA,WAAW,CAAC,MAAM,GAAG,MAAM;;AAElC;;AC5BK,MAAO,UAAW,SAAQ,WAAW,CAAA;AAC9B,IAAA,SAAS,CAAC,MAAkB,EAAE,GAA6B,EAAE,KAAiB,EAAA;QACnF,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE;QACzD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;QACxC,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC;QACxD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;AAE/B,IAAA,GAAG;AACH,IAAA,GAAG;IACH,KAAK,GAAW,CAAC;AACjB,IAAA,WAAA,CAAY,CAAS,EAAE,CAAS,EAAE,GAAW,EAAE,GAAW,EAAE,KAAc,EAAE,KAA+C,EAAE,MAAgB,EAAA;AACzI,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM;QAClB,IAAI,KAAK,EAAE;AACP,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;AAEtB,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACrB,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;;aACf;AACH,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO;;QAE7B,IAAI,MAAM,EAAE;AACR,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;;;AAGnB,IAAA,SAAS,CAAC,GAA6B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACvB,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE;AACtB,gBAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;iBAClB;AACH,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC;AAClB,gBAAA,GAAG,CAAC,WAAW,GAAG,kBAAkB;AACpC,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;AACrB,gBAAA,GAAG,CAAC,aAAa,GAAG,CAAC;;AAEzB,YAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK;AAC1B,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK;YAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;YAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;AACzD,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;YAC1D,GAAG,CAAC,SAAS,EAAE;AACf,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACtC,GAAG,CAAC,SAAS,EAAE;YACf,GAAG,CAAC,IAAI,EAAE;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK;AACpC,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC9C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,UAAU,GAAG,KAAK,EAAE,CAAC,CAAC;gBAC/F,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC5E,GAAG,CAAC,SAAS,EAAE;gBACf,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;gBAClC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;gBACxC,GAAG,CAAC,MAAM,EAAE;;;;AAIf,IAAA,YAAY,CAAC,GAA6B,EAAA;AAC/C,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO;AAC5B,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO;QAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;QAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;AAClD,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;QAC1D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AACzE,QAAA,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC;QAClE,GAAG,CAAC,SAAS,EAAE;AACf,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACtC,QAAA,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACtC,GAAG,CAAC,SAAS,EAAE;QACf,GAAG,CAAC,IAAI,EAAE;;IAEL,OAAO,CAAC,CAAS,EAAE,CAAS,EAAA;QACjC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;QAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;AAClD,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;AAC1D,QAAA,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AAC7C,YAAA,OAAO,IAAI;;AAEf,QAAA,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACjD,YAAA,OAAO,IAAI;;AAEf,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;AACnI,QAAA,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE;AAC7H,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAGhB,SAAS,CAAC,CAAS,EAAE,CAAS,EAAA;AAC1B,QAAA,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;AACrC,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAGhB,WAAW,CAAC,CAAS,EAAE,CAAS,EAAA;AAC5B,QAAA,IAAI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACzC,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAEhB,WAAW,CAAC,CAAS,EAAE,CAAS,EAAA;QAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;QAC3D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC;AAClD,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,CAAC;AAC1D,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC;AACnI,QAAA,IAAI,sBAAsB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE;AAC7H,YAAA,OAAO,IAAI;;AAEf,QAAA,OAAO,KAAK;;IAEP,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;AAC9B,QAAA,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;YACjE,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AACzC,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,CAAC,IAAI,MAAM;AAChB,YAAA,IAAI,CAAC,GAAG,IAAI,MAAM;AAClB,YAAA,IAAI,CAAC,GAAG,IAAI,MAAM;;AAEtB,QAAA,WAAW,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;;IAEhC,SAAS,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC/D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;;IAG/B,WAAW,CAAC,GAA6B,EAAE,KAAiB,EAAA;AACxD,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAChB,QAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;;IAGpB,aAAa,CAAC,GAA6B,EAAE,KAAiB,EAAA;AAC1D,QAAA,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACpE,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;;AAEzB;;AC/JD;;AAEG;;ACFH;;AAEG;;;;"}